void PDF_GLW_DK_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar &kbk = RooConst(1.); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWAcpVar("acpp_dk_th", "Acp+ (DK)", rbk, dbk, kbk, g, "+"))); theory->add(*(new RooGLWRcpVar("rcpp_dk_th", "Rcp+ (DK)", rbk, dbk, kbk, g, "+"))); }
void PDF_GLW_DK_pipipi0_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooFormulaVar &kbk = *(new RooFormulaVar("dilutionpp_2var","dilutionpp_2var","2*F_pipipi0 - 1", *p)); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWAcpVar("aglw_dk_pipipi0_th", "Aglw+ (DK_pipipi0)", rbk, dbk, kbk, g, "+"))); theory->add(*(new RooGLWRcpVar("rglw_dk_pipipi0_th", "Rglw+ (DK_pipipi0)", rbk, dbk, kbk, g, "+"))); }
void PDF_ADS_DKDpi_K3pi_Dmix_newVars::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_k3pi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_k3pi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_k3pi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& F4pi = *((RooRealVar*)p->find("F_pipipipi")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooConstVar& AcpD = RooConst(0); RooConstVar& AcpDpppp = RooConst(0); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dk_k3pi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dpi_k3pi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar ("afav_dk_k3pi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dk_k3pi_th", "RooGLWADSDmixRADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dpi_k3pi_th", "RooGLWADSDmixRADSVar" , rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRkpVar ("rkp_k3pi_th", "RooGLWADSDmixRkpVar" , Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); }
void PDF_ADS_DK_Kpi_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar &kbk = RooConst(1.); RooRealVar &rd = *((RooRealVar*)p->find("rD_kpi")); RooRealVar &dd = *((RooRealVar*)p->find("dD_kpi")); RooConstVar &kd = RooConst(1.); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooADSAVar("aads_dk_th", "Aads (DK)", rbk, dbk, kbk, rd, dd, kd, g ))); theory->add(*(new RooADSRVar("rads_dk_th", "Rads (DK)", rbk, dbk, kbk, rd, dd, kd, g ))); }
void PDF_GLWADS_DK_hh_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooConstVar& rbp = RooConst(0); // assume rb(Dpi)=0 for DK only RooConstVar& dbp = RooConst(1); // then the phase and the RooConstVar& kbp = RooConst(1); // coherence factor values don't matter RooConstVar& kf = RooConst(1); RooRealVar& rf = *((RooRealVar*)p->find("rD_kpi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_kpi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& AcpDKK = *((RooRealVar*)p->find("AcpDKK")); RooRealVar& AcpDpp = *((RooRealVar*)p->find("AcpDpipi")); RooConstVar& AcpD = RooConst(0); theory->add(*(new RooGLWADSDmixRkpVar("rkp_kpi_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar("rkp_pipi_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar("rkp_kk_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixAcpVar("afav_dk_kpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar("acp_dk_kk_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar("acp_dk_pipi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixRpmVar("rp_dk_kpi_th", "RooGLWADSDmixRpmVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, "+"))); theory->add(*(new RooGLWADSDmixRpmVar("rm_dk_kpi_th", "RooGLWADSDmixRpmVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, "-"))); }
void PDF_GLWADS_DKDpi_KSKpi_DCPV_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_kskpi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_kskpi")); RooRealVar& df = *((RooRealVar*)p->find("dD_kskpi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& AcpDfav = *((RooRealVar*)p->find("AcpDzKstpKm")); RooRealVar& AcpDsup = *((RooRealVar*)p->find("AcpDzKstmKp")); theory->add(*(new RooGLWADSDmixRADSVar( "rfavsup_dpi_kskpi_th", "RooGLWADSDmixRADSVar (inverse)", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "inverse"))); theory->add(*(new RooGLWADSDmixRkpVar( "rfav_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (fav)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar( "rsup_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (sup)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "sup"))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dk_kskpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpDfav))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dk_kskpi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpDsup))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dpi_kskpi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpDfav))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dpi_kskpi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpDsup))); }
void PDF_GLWADS_Dpi_K3pi_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_k3pi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_k3pi")); RooRealVar& df = *((RooRealVar*)p->find("dD_k3pi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooConstVar& AcpD = RooConst(0); theory->add(*(new RooGLWADSDmixAcpVar("afav_dpi_k3pi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRpmVar("rp_dpi_k3pi_th", "RooGLWADSDmixRpmVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "+"))); theory->add(*(new RooGLWADSDmixRpmVar("rm_dpi_k3pi_th", "RooGLWADSDmixRpmVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "-"))); }
void PDF_GLWADS_DKDpi_hh_Dmix_newVars_uv::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); //RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); //RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooRealVar& u = *((RooRealVar*)p->find("u_dpi")); RooRealVar& v = *((RooRealVar*)p->find("v_dpi")); RooFormulaVar *rbp = new RooFormulaVar("rbp","rbp", "TMath::Sqrt( u_dpi*u_dpi + v_dpi*v_dpi )", *p); RooFormulaVar *dbp = new RooFormulaVar("dbp","dbp", "TMath::ATan( v_dpi / u_dpi )", *p); RooConstVar& kbp = RooConst(1); RooConstVar& kf = RooConst(1); RooRealVar& rf = *((RooRealVar*)p->find("rD_kpi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_kpi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& AcpDKK = *((RooRealVar*)p->find("AcpDKK")); RooRealVar& AcpDpp = *((RooRealVar*)p->find("AcpDpipi")); RooConstVar& AcpD = RooConst(0); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dk_kpi_th", "RooGLWADSDmixAcpADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dpi_kpi_th", "RooGLWADSDmixAcpADSVar" , *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dk_kk_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dk_pipi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dpi_kk_th", "RooGLWADSDmixAcpVar" , *rbp, *dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dpi_pipi_th", "RooGLWADSDmixAcpVar" , *rbp, *dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixAcpVar ("afav_dk_kpi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dk_kpi_th", "RooGLWADSDmixRADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dpi_kpi_th", "RooGLWADSDmixRADSVar" , *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRcpRatioVar ("rcp_kk_th", "RooGLWADSDmixRcpRatioVar", rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy))); theory->add(*(new RooGLWADSDmixRcpRatioVar ("rcp_pipi_th", "RooGLWADSDmixRcpRatioVar", rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy))); theory->add(*(new RooGLWADSDmixRkpVar ("rkp_kpi_th", "RooGLWADSDmixRkpVar" , Rcab, rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); }
void SetConstants(RooWorkspace * pWs, RooStats::ModelConfig * pMc){ // // Fix all variables in the PDF except observables, POI and // nuisance parameters. Note that global observables are fixed. // If you need global observables floated, you have to set them // to float separately. // pMc->SetWorkspace(*pWs); RooAbsPdf * pPdf = pMc->GetPdf(); // we do not own this RooArgSet * pVars = pPdf->getVariables(); // we do own this RooArgSet * pFloated = new RooArgSet(*pMc->GetObservables()); pFloated->add(*pMc->GetParametersOfInterest()); pFloated->add(*pMc->GetNuisanceParameters()); TIterator * pIter = pVars->createIterator(); // we do own this for(TObject * pObj = pIter->Next(); pObj; pObj = pIter->Next() ){ std::string _name = pObj->GetName(); RooRealVar * pFloatedObj = (RooRealVar *)pFloated->find(_name.c_str()); if (pFloatedObj){ ((RooRealVar *)pObj)->setConstant(kFALSE); } else{ ((RooRealVar *)pObj)->setConstant(kTRUE); } //pObj->Print(); } delete pIter; delete pVars; delete pFloated; return; }
/// /// Fit a pdf to the minimum, but keep angular parameters in a range of /// [0,2pi]. If after an initial fit, a parameter has walked outside this /// interval, add multiples of 2pi to bring it back. Then, refit. /// All variables that have unit 'rad' are taken to be angles. /// RooFitResult* Utils::fitToMinBringBackAngles(RooAbsPdf *pdf, bool thorough, int printLevel) { countAllFitBringBackAngle++; RooFitResult* r = fitToMin(pdf, thorough, printLevel); bool refit = false; TIterator* it = r->floatParsFinal().createIterator(); while ( RooRealVar* p = (RooRealVar*)it->Next() ){ if ( ! isAngle(p) ) continue; if ( p->getVal()<0.0 || p->getVal()>2.*TMath::Pi() ){ RooArgSet *pdfPars = pdf->getParameters(RooArgSet()); RooRealVar *pdfPar = (RooRealVar*)pdfPars->find(p->GetName()); pdfPar->setVal(bringBackAngle(p->getVal())); refit = true; delete pdfPars; } } if ( refit ){ countFitBringBackAngle++; delete r; r = fitToMin(pdf, thorough, printLevel); } delete it; return r; }
void PDF_GLWADS_DKDpi_KSKpi_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_kskpi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_kskpi")); RooRealVar& df = *((RooRealVar*)p->find("dD_kskpi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooConstVar& AcpD = RooConst(0); // theory->add(*(new RooFormulaVar("rfavsup_dpi_kskpi_th", "rfavsup_dpi_kskpi_th", "(1 + r_dpi^2*rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))/(r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("rfav_dkdpi_kskpi_th", "rfav_dkdpi_kskpi_th", "RBRdkdpi*(1 + r_dk^2*rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk -dD_kskpi))/(1 + r_dpi^2*rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("rsup_dkdpi_kskpi_th", "rsup_dkdpi_kskpi_th", "RBRdkdpi*(r_dk^2 + rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk +dD_kskpi))/(r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("afav_dk_kskpi_th", "afav_dk_kskpi_th", "2*r_dk *rD_kskpi*kD_kskpi*sin(g)*sin(d_dk -dD_kskpi) / (1 + r_dk^2 * rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk -dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("asup_dk_kskpi_th", "asup_dk_kskpi_th", "2*r_dk *rD_kskpi*kD_kskpi*sin(g)*sin(d_dk +dD_kskpi) / (r_dk^2 + rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk +dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("afav_dpi_kskpi_th", "afav_dpi_kskpi_th", "2*r_dpi*rD_kskpi*kD_kskpi*sin(g)*sin(d_dpi-dD_kskpi) / (1 + r_dpi^2 * rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("asup_dpi_kskpi_th", "asup_dpi_kskpi_th", "2*r_dpi*rD_kskpi*kD_kskpi*sin(g)*sin(d_dpi+dD_kskpi) / (r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); theory->add(*(new RooGLWADSDmixRADSVar( "rfavsup_dpi_kskpi_th", "RooGLWADSDmixRADSVar (inverse)", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "inverse"))); theory->add(*(new RooGLWADSDmixRkpVar( "rfav_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (fav)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar( "rsup_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (sup)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "sup"))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dk_kskpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dk_kskpi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dpi_kskpi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dpi_kskpi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); }
int main(int argc, char* argv[]){ string fileName; string fileNameZee; string fileNameout; string outDir; int ncats; int jcats; int bins; string outfilename; string logfile; bool verbose=false; int mhLow; int mhHigh; po::options_description desc("Allowed options"); desc.add_options() ("help,h", "Show help") ("infilename,i", po::value<string>(&fileName)->default_value("CMS-HGG.root"), "In file name") ("infilenameZee,I", po::value<string>(&fileNameZee)->default_value("CMS-HGG_DY_fit.root"), "In file name Zee") ("Outfilename,o", po::value<string>(&fileNameout)->default_value("CMS-HGG_finalBkg.root"), "Out file name") ("outDir,D", po::value<string>(&outDir)->default_value("plots/FinalBackground"), "Out directory for plots") ("logfile,l", po::value<string>(&logfile)->default_value("BackgroundFit.log"), "log file of fit results") ("ncats,c", po::value<int>(&ncats)->default_value(4), "Number of categories") ("jcats,j", po::value<int>(&jcats)->default_value(0), "Start number of categories") ("mhLow,L", po::value<int>(&mhLow)->default_value(75), "Starting point for scan") ("mhHigh,H", po::value<int>(&mhHigh)->default_value(120), "End point for scan") ("bins,B", po::value<int>(&bins)->default_value(45), "Bins for the dataset") ("verbose,v", "Run with more output") ; po::variables_map vm; po::store(po::parse_command_line(argc,argv,desc),vm); po::notify(vm); if (vm.count("help")) { cout << desc << endl; exit(1); } if (vm.count("verbose")) verbose=true; if (!verbose) { RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); RooMsgService::instance().setSilentMode(true); } TFile *outputfile; outputfile = new TFile(fileNameout.c_str(),"RECREATE"); RooWorkspace *outputws; ofstream logfile_stream(logfile.c_str()); TFile *inFile = TFile::Open(fileName.c_str()); RooWorkspace *inWS = (RooWorkspace*)inFile->Get("cms_hgg_workspace"); outputws = (RooWorkspace*)inWS->Clone("cms_hgg_workspace"); std::string ext = "8TeV"; vector<pair<string,int> > funChoice; // <functionType,order> funChoice.push_back(pair<string,int>("Bernstein",4)); //cat0 funChoice.push_back(pair<string,int>("Bernstein",5)); //cat1 funChoice.push_back(pair<string,int>("Bernstein",5)); //cat2 funChoice.push_back(pair<string,int>("Bernstein",5)); //cat3 PdfModelBuilder pdfsModel; RooRealVar *mass = (RooRealVar*)inWS->var("CMS_hgg_mass"); pdfsModel.setObsVar(mass); //mass->setBins(bins); //mass->setRange(85,110); for (int cat=jcats; cat<ncats; cat++){ RooDataSet *data = (RooDataSet*)inWS->data(Form("data_mass_cat%d",cat)); //RooDataHist thisdataBinned(Form("roohist_data_mass_cat%d",cat),"data",*mass,*dataFull); //FAN Procedure (from an official script) //RooDataSet *data = (RooDataSet*)&thisdataBinned; RooAbsPdf *pdfZee; TFile *inFileZee = TFile::Open(fileNameZee.c_str()); RooWorkspace *inWS_Zee = (RooWorkspace*)inFileZee->Get("Zpeak"); cout<<endl<<"///////////////////////////////////"<<endl; inWS_Zee->Print(); cout<<"///////////////////////////////////"<<endl<<endl; pdfZee = inWS_Zee->pdf(Form("hgg_bkg_%s_cat%d_DCB",ext.c_str(),cat)); cout<<endl<<"///////////////////////////////////"<<endl; pdfZee->Print(); cout<<"///////////////////////////////////"<<endl<<endl; //RooAbsPdf *pdfZeeFixed=pdfsModel.floatDoubleCB(pdfZee,data,Form("hgg_bkg_%s_cat%d_DCB",ext.c_str(),cat)); RooAbsPdf *pdfZeeFixed=pdfsModel.fixDoubleCB(pdfZee,data,Form("hgg_bkg_%s_cat%d_DCB",ext.c_str(),cat)); RooAbsPdf *bkgPdf; RooAbsPdf *berComponent; RooAbsPdf *dcbComponent; string funcType = funChoice[cat].first; int orderOff = funChoice[cat].second; bkgPdf = pdfsModel.getFixedDoubleCBplusContinuum(funcType,Form("hgg_bkg_%s_cat%d",ext.c_str(),cat),orderOff,pdfZeeFixed,false).first; berComponent = pdfsModel.getFixedDoubleCBplusContinuum(funcType,Form("hgg_bkg_%s_cat%d",ext.c_str(),cat),orderOff,pdfZeeFixed,false).second.first; dcbComponent = pdfsModel.getFixedDoubleCBplusContinuum(funcType,Form("hgg_bkg_%s_cat%d",ext.c_str(),cat),orderOff,pdfZeeFixed,false).second.second; cout<<endl<<"///////////////////////////////////"<<endl; bkgPdf->Print(); cout<<"///////////////////////////////////"<<endl<<endl; cout<<endl<<"///////////////////////////////////"<<endl; bkgPdf->getParameters(data)->Print(); cout<<"///////////////////////////////////"<<endl<<endl; int fitStatus = 0; double thisNll=0.; runFit(bkgPdf,data,&thisNll,&fitStatus,3,mhLow,mhHigh); //RooFitResult *fitRes = bkgPdf->fitTo(*data,Save(true),Range(mhLow,mhHigh)); //plot(mass,bkgPdf,data,Form("%s/hgg_bkg_%s_cat%d",outDir.c_str(),ext.c_str(),cat),bins,mhLow,mhHigh); //print results in log file RooArgSet *params = bkgPdf->getParameters(*data); float Mean = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_mean",ext.c_str(),cat)))->getValV(); float MeanErrorL = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_mean",ext.c_str(),cat)))->getErrorLo(); float MeanErrorH = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_mean",ext.c_str(),cat)))->getErrorHi(); float Sigma = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_sigma",ext.c_str(),cat)))->getValV(); float SigmaErrorL = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_sigma",ext.c_str(),cat)))->getErrorLo(); float SigmaErrorH = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_sigma",ext.c_str(),cat)))->getErrorHi(); float nCB1 = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB1",ext.c_str(),cat)))->getValV(); float nCB1ErrorL = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB1",ext.c_str(),cat)))->getErrorLo(); float nCB1ErrorH = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB1",ext.c_str(),cat)))->getErrorHi(); float nCB2 = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB2",ext.c_str(),cat)))->getValV(); float nCB2ErrorL = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB2",ext.c_str(),cat)))->getErrorLo(); float nCB2ErrorH = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB2",ext.c_str(),cat)))->getErrorHi(); float alphaCB1 = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_alphaCB1",ext.c_str(),cat)))->getValV(); float alphaCB2 = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_alphaCB2",ext.c_str(),cat)))->getValV(); logfile_stream << Form("**************** cat: %d ***************",cat) <<endl<<" nEntries "<<data->sumEntries() << endl << " Mean: " << Mean << " MeanErrorL: " << MeanErrorL << " MeanErrorH: "<< MeanErrorH << " Sigma: " << Sigma << " SigmaErrorL: " << SigmaErrorL << " SigmaErrorH: " << SigmaErrorH << " nCB1: " << nCB1 << " nCB1ErrorL: " << nCB1ErrorL << " nCB1ErrorH: " << nCB1ErrorH << " nCB2: " << nCB2 << " nCB2ErrorL: " << nCB2ErrorL << " nCB2ErrorH: " << nCB2ErrorH << " alphaCB1: " << alphaCB1 << " alphaCB2: " << alphaCB2 << endl; float frac = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_frac_sum1",ext.c_str(),cat)))->getValV(); float fracErrorL = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_frac_sum1",ext.c_str(),cat)))->getErrorLo(); float fracErrorH = ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_frac_sum1",ext.c_str(),cat)))->getErrorHi(); logfile_stream <<" Frac "<<frac<<" FracErrorL "<<fracErrorL<<" FracErrorH "<<fracErrorH<<endl; for(int i=0;i<orderOff;i++){ RooRealVar *coeff=(RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_%s_p%i",ext.c_str(),cat,abbr(funcType).c_str(),i)); logfile_stream <<Form(" %s_%i: ",funcType.c_str(),i)<<coeff->getValV()<<Form(" %s_%i ErrorL: ",funcType.c_str(),i)<<coeff->getErrorLo()<<Form(" %s_%i ErrorH: ",funcType.c_str(),i)<<coeff->getErrorHi(); } logfile_stream<<endl; plot2(mass,bkgPdf,berComponent,dcbComponent,frac,data,Form("%s/hgg_bkg_%s_cat%d",outDir.c_str(),ext.c_str(),cat),bins,mhLow,mhHigh); //Let the DCB parameter float within their uncertaincy range in combine ? ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_mean",ext.c_str(),cat)))->setConstant(false); ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_sigma",ext.c_str(),cat)))->setConstant(false); ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB1",ext.c_str(),cat)))->setConstant(false); ((RooRealVar*)params->find(Form("hgg_bkg_%s_cat%d_DCB_nCB2",ext.c_str(),cat)))->setConstant(false); outputws->var(Form("pdf_data_pol_model_8TeV_cat%d_norm",cat))->SetName(Form("hgg_bkg_8TeV_cat%d_DCBplusBernstein_norm",cat)); outputws->import(*bkgPdf); } outputfile->cd(); outputws->Write(); cout<<endl<<"///////////////////////////////////"<<endl; //outputws->Print(); cout<<"///////////////////////////////////"<<endl<<endl; outputfile->Close(); }
void wspaceread_signals2e2mu(int channel = 3) { gSystem->AddIncludePath("-I$ROOFITSYS/include"); gROOT->ProcessLine(".L ~/tdrstyle.C"); setTDRStyle(); //gSystem->Load("PDFs/RooRelBW1_cxx.so"); //gSystem->Load("PDFs/RooRelBW2_cxx.so"); gSystem->Load("../PDFs/HZZ4LRooPdfs_cc.so"); string schannel; if (channel == 1) schannel = "4mu"; if (channel == 2) schannel = "4e"; if (channel == 3) schannel = "2mu2e"; std::cout << "schannel = " << schannel << std::endl; const int nPoints = 17.; int masses[nPoints] = {120,130,140,150,160,170,180,190,200,250,300,350,400,450,500,550,600}; double mHVal[nPoints] = {120,130,140,150,160,170,180,190,200,250,300,350,400,450,500,550,600}; double widths[nPoints] = {3.48e-03,4.88e-03,8.14e-03,1.73e-02,8.30e-02,3.80e-01,6.31e-01,1.04e+00,1.43e+00,4.04e+00,8.43e+00,1.52e+01,2.92e+01,46.95,6.80e+01,93.15,1.23e+02}; // R e a d w o r k s p a c e f r o m f i l e // ----------------------------------------------- double a_meanBW[nPoints]; double a_gammaBW[nPoints]; double a_meanCB[nPoints]; double a_sigmaCB[nPoints]; double a_alphaCB[nPoints]; double a_nCB[nPoints]; for (int i = 0; i < nPoints; i++){ //for (int i = 0; i < 1; i++){ // Open input file with workspace (generated by rf14_wspacewrite) char infile[192]; sprintf(infile,"/scratch/hep/ntran/dataFiles/HZZ4L/datasets/datasets_baseline/%s/ZZAnalysisTree_H%i%s.root",schannel.c_str(),masses[i],schannel.c_str()); TFile *f = new TFile(infile) ; char outfile[192]; sprintf( outfile, "figs/pdf_%s_bkg_highmass.eps", schannel.c_str() ); //f->ls(); double windowVal = max( widths[i], 1. ); if (mHVal[i] >= 275){ lowside = 180.; } else { lowside = 100.; } double low_M = max( (mHVal[i] - 20.*windowVal), lowside) ; double high_M = min( (mHVal[i] + 15.*windowVal), 900.) ; //double windowVal = max( widths[i], 1.); //double windowVal = max ( widths[i], 1. ); //low_M = max( (mHVal[i] - 25.*windowVal), 100.) ; //high_M = min( (mHVal[i] + 20.*windowVal), 1000.) ; //low_M = max( (mHVal[i] - 15.*windowVal), 100.) ; //high_M = min( (mHVal[i] + 10.*windowVal), 1000.) ; std::cout << "lowM = " << low_M << ", highM = " << high_M << std::endl; RooDataSet* set = (RooDataSet*) f->Get("data"); RooArgSet* obs = set->get() ; obs->Print(); RooRealVar* CMS_zz4l_mass = (RooRealVar*) obs->find("CMS_zz4l_mass") ; CMS_zz4l_mass->setRange(low_M,high_M); for (int a=0 ; a<set->numEntries() ; a++) { set->get(a) ; //cout << CMS_zz4l_mass->getVal() << " = " << set->weight() << endl ; } // constraining parameters... double l_sigmaCB = 0., s_sigmaCB = 3.; if (mHVal[i] >= 500.){ l_sigmaCB = 10.; s_sigmaCB = 12.; } double s_n_CB = 2.6+(-1.1/290.)*(mHVal[i]-110.); if (mHVal[i] >= 400){ s_n_CB = 1.5; } RooRealVar mean_CB("mean_CB","mean_CB",0.,-25.,25); RooRealVar sigma_CB("sigma_CB","sigma_CB",s_sigmaCB,l_sigmaCB,30.); RooRealVar alpha_CB("alpha_CB","alpha_CB",0.95,0.8,1.2); RooRealVar n_CB("n_CB","n_CB",s_n_CB,1.5,2.8); RooCBShape signalCB("signalCB","signalCB",*CMS_zz4l_mass,mean_CB,sigma_CB,alpha_CB,n_CB); RooRealVar mean_BW("mean_BW","mean_BW", mHVal[i] ,100.,1000.); RooRealVar gamma_BW("gamma_BW","gamma_BW",widths[i],0.,200.); //RooBreitWigner signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); //RooRelBW1 signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); RooRelBWUF signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW); //RooRelBW1 signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); RooBreitWigner signalBW1("signalBW1", "signalBW1",*CMS_zz4l_mass,mean_BW,gamma_BW); RooRelBW1 signalBW2("signalBW2", "signalBW2",*CMS_zz4l_mass,mean_BW,gamma_BW); //Set #bins to be used for FFT sampling to 10000 CMS_zz4l_mass->setBins(100000,"fft") ; //Construct BW (x) CB RooFFTConvPdf* sig_ggH = new RooFFTConvPdf("sig_ggH","BW (X) CB",*CMS_zz4l_mass,signalBW,signalCB, 2); // Buffer fraction for cyclical behavior sig_ggH->setBufferFraction(0.2); mean_BW.setConstant(kTRUE); gamma_BW.setConstant(kTRUE); n_CB.setConstant(kTRUE); alpha_CB.setConstant(kTRUE); RooFitResult *r = sig_ggH.fitTo( *set, SumW2Error(kTRUE) );//, Save(kTRUE), SumW2Error(kTRUE)) ; a_meanBW[i] = mean_BW.getVal(); a_gammaBW[i] = gamma_BW.getVal(); a_meanCB[i] = mean_CB.getVal(); a_sigmaCB[i] = sigma_CB.getVal();; a_alphaCB[i] = alpha_CB.getVal();; a_nCB[i] = n_CB.getVal();; // Plot Y RooPlot* frameM4l = CMS_zz4l_mass->frame(Title("M4L"),Bins(100)) ; set->plotOn(frameM4l) ; sig_ggH.plotOn(frameM4l) ; RooPlot* testFrame = CMS_zz4l_mass->frame(Title("M4L"),Bins(100)) ; signalBW.plotOn(testFrame) ; signalBW1.plotOn(testFrame, LineColor(kBlack)) ; signalBW2.plotOn(testFrame, LineColor(kRed)) ; TCanvas *c = new TCanvas("c","c",800,600); c->cd(); frameM4l->Draw(); char plotName[192]; sprintf(plotName,"sigFigs/m%i.eps",masses[i]); c->SaveAs(plotName); TCanvas *c3 = new TCanvas("c3","c3",800,600); c3->cd(); testFrame->Draw(); //char plotName[192]; sprintf(plotName,"sigFigs/shape%i.eps",masses[i]); c3->SaveAs(plotName); delete f; delete set; delete c; } TGraph* gr_meanBW = new TGraph( nPoints, mHVal, a_meanBW ); TGraph* gr_gammaBW = new TGraph( nPoints, mHVal, a_gammaBW ); TGraph* gr_meanCB = new TGraph( nPoints, mHVal, a_meanCB ); TGraph* gr_sigmaCB = new TGraph( nPoints, mHVal, a_sigmaCB ); TGraph* gr_alphaCB = new TGraph( nPoints, mHVal, a_alphaCB ); TGraph* gr_nCB = new TGraph( nPoints, mHVal, a_nCB ); TF1 *polyFunc1= new TF1("polyFunc1","[0]+[1]*x+[2]*(x-[3])*(x-[3])+[4]*x*x*x*x", 120., 600.); polyFunc1->SetParameters(1., 1., 1., 100.,0.1); TF1 *polyFunc2= new TF1("polyFunc2","[0]+[1]*x+[2]*(x-[3])*(x-[3])+[4]*x*x*x*x", 120., 600.); polyFunc2->SetParameters(1., 1., 1., 100.,0.1); TCanvas *c = new TCanvas("c","c",1200,800); c->Divide(3,2); //c->SetGrid(); //TH1F *hr = c->DrawFrame(0.,0.,610.,1.); c->cd(1); gr_meanBW->Draw("alp"); gr_meanBW->GetXaxis()->SetTitle("mean BW"); c->cd(2); gr_gammaBW->Draw("alp"); gr_gammaBW->GetXaxis()->SetTitle("gamma BW"); c->cd(3); gr_meanCB->Fit(polyFunc1,"Rt"); gr_meanCB->Draw("alp"); gr_meanCB->GetXaxis()->SetTitle("mean CB"); c->cd(4); gr_sigmaCB->Fit(polyFunc2,"Rt"); gr_sigmaCB->Draw("alp"); gr_sigmaCB->GetXaxis()->SetTitle("sigma CB"); c->cd(5); gr_alphaCB->Draw("alp"); gr_alphaCB->GetXaxis()->SetTitle("alpha CB"); c->cd(6); gr_nCB->Draw("alp"); gr_nCB->GetXaxis()->SetTitle("n CB"); c->SaveAs("sigFigs/params.eps"); std::cout << "mean_CB = " << polyFunc1->GetParameter(0) << " + " << polyFunc1->GetParameter(1) << "*m + " << polyFunc1->GetParameter(2) << "*(m - " << polyFunc1->GetParameter(3) << ")*(m - " << polyFunc1->GetParameter(3); std::cout << ") + " << polyFunc1->GetParameter(4) << "*m*m*m*m;" << std::endl; std::cout << "sigma_CB = " << polyFunc2->GetParameter(0) << " + " << polyFunc2->GetParameter(1) << "*m + " << polyFunc2->GetParameter(2) << "*(m - " << polyFunc2->GetParameter(3) << ")*(m - " << polyFunc2->GetParameter(3); std::cout << ") + " << polyFunc2->GetParameter(4) << "*m*m*m*m;" << std::endl; // calculate sysetmatic errors from interpolation... double sum_meanCB = 0; double sum_sigmaCB = 0; for (int i = 0; i < nPoints; i++){ double tmp_meanCB = (polyFunc1->Eval(mHVal[i]) - a_meanCB[i]); sum_meanCB += (tmp_meanCB*tmp_meanCB); double tmp_sigmaCB = (polyFunc2->Eval(mHVal[i]) - a_sigmaCB[i])/a_sigmaCB[i]; sum_sigmaCB += (tmp_sigmaCB*tmp_sigmaCB); std::cout << "mean: " << tmp_meanCB << ", sigma: " << tmp_sigmaCB << std::endl; } double rms_meanCB = sqrt( sum_meanCB/( (double) nPoints) ); double rms_sigmaCB = sqrt( sum_sigmaCB/( (double) nPoints) ); std::cout << "err (meanCB) = " << rms_meanCB << ", err (sigmaCB) = " << rms_sigmaCB << std::endl; }
void wspaceread_backgrounds(int channel = 1) { gSystem->AddIncludePath("-I$ROOFITSYS/include"); gROOT->ProcessLine(".L ~/tdrstyle.C"); string schannel; if (channel == 1) schannel = "4mu"; if (channel == 2) schannel = "4e"; if (channel == 3) schannel = "2mu2e"; std::cout << "schannel = " << schannel << std::endl; // R e a d w o r k s p a c e f r o m f i l e // ----------------------------------------------- // Open input file with workspace (generated by rf14_wspacewrite) char infile[192]; sprintf(infile,"/scratch/hep/ntran/dataFiles/HZZ4L/datasets/datasets/%s/ZZAnalysisTree_ZZTo4L_lowmass.root",schannel.c_str()); TFile *f = new TFile(infile) ; char outfile[192]; sprintf( outfile, "figs/pdf_%s_bkg_highmass.eps", schannel.c_str() ); //f->ls(); RooDataSet* set = (RooDataSet*) f->Get("data"); RooArgSet* obs = set->get() ; obs->Print(); RooRealVar* CMS_zz4l_mass = (RooRealVar*) obs->find("CMS_zz4l_mass") ; for (int i=0 ; i<set->numEntries() ; i++) { set->get(i) ; //cout << CMS_zz4l_mass->getVal() << " = " << set->weight() << endl ; } gSystem->Load("PDFs/RooqqZZPdf_cxx.so"); //gSystem->Load("PDFs/RooggZZPdf_cxx.so"); // LO contribution //RooRealVar m4l("m4l","m4l",100.,1000.); RooRealVar a1("a1","a1",224.,100.,1000.); RooRealVar a2("a2","a2",-209.,-1000.,1000.); RooRealVar a3("a3","a3",121.,20.,1000.); RooRealVar a4("a4","a4",-0.022,-10.,10.); RooRealVar b1("b1","b1",181.,100.,1000.); RooRealVar b2("b2","b2",707.,0.,1000.); RooRealVar b3("b3","b3",60.,20.,1000.); RooRealVar b4("b4","b4",0.04,-10.,10.); RooRealVar b5("b5","b5",5.,0.,1000.); RooRealVar b6("b6","b6",0.,-10.,10.); RooRealVar frac_bkg("frac_bkg","frac_bkg",0.5,0.,1.); //a1.setConstant(kTRUE); //a2.setConstant(kTRUE); //a3.setConstant(kTRUE); //a4.setConstant(kTRUE); //b1.setConstant(kTRUE); //b2.setConstant(kTRUE); //b3.setConstant(kTRUE); //b4.setConstant(kTRUE); //b5.setConstant(kTRUE); //b6.setConstant(kTRUE); RooqqZZPdf bkg_qqzz("bkg_qqzz","bkg_qqzz",*CMS_zz4l_mass,a1,a2,a3,a4,b1,b2,b3,b4,b5,b6,frac_bkg); RooFitResult *r = bkg_qqzz.fitTo( *set, SumW2Error(kTRUE) );//, Save(kTRUE), SumW2Error(kTRUE)) ; // Plot Y RooPlot* frameM4l = CMS_zz4l_mass->frame(Title("M4L"),Bins(100)) ; set->plotOn(frameM4l) ; bkg_qqzz.plotOn(frameM4l) ; TCanvas *c = new TCanvas("c","c",800,600); c->cd(); frameM4l->Draw(); /* // Retrieve workspace from file RooWorkspace* w = (RooWorkspace*) f->Get("workspace") ; w->Print(); ///* RooRealVar* CMS_zz4l_mass = w->var("CMS_zz4l_mass") ; RooAbsPdf* background_nonorm = w->pdf("background_nonorm") ; //RooAbsData* backgroundData = w->data("backgroundData") ; RooAbsData* data_bkg_red = w->data("data_bkg_red") ; RooArgSet* obs = data_bkg_red->get() ; RooRealVar* xdata = obs->find(CMS_zz4l_mass.GetName()) ; for (int i=0 ; i<data_bkg_red->numEntries() ; i++) { data_bkg_red->get(i) ; cout << xdata->getVal() << " = " << data_bkg_red->weight() << endl ; } std::cout << "nEntries = " << data_bkg_red->numEntries() << std::endl; obs->Print(); RooFitResult *r = background_nonorm->fitTo( *data_bkg_red, SumW2Error(kTRUE) );//, Save(kTRUE), SumW2Error(kTRUE)) ; // Get parameters char varName[192]; sprintf(varName, "CMS_zz%s_Nbkg", schannel.c_str()); RooRealVar* Nbkg = w->var(varName) ; sprintf(varName, "CMS_zz%s_bkgfrac", schannel.c_str()); RooRealVar* bkgfrac = w->var(varName) ; sprintf(varName, "CMS_zz%s_a1", schannel.c_str()); RooRealVar* a1 = w->var(varName) ; sprintf(varName, "CMS_zz%s_a2", schannel.c_str()); RooRealVar* a2 = w->var(varName) ; sprintf(varName, "CMS_zz%s_a3", schannel.c_str()); RooRealVar* a3 = w->var(varName) ; sprintf(varName, "CMS_zz%s_b1", schannel.c_str()); RooRealVar* b1 = w->var(varName) ; sprintf(varName, "CMS_zz%s_b2", schannel.c_str()); RooRealVar* b2 = w->var(varName) ; sprintf(varName, "CMS_zz%s_b3", schannel.c_str()); RooRealVar* b3 = w->var(varName) ; std::cout << "Nbkg: " << Nbkg->getVal() << std::endl; std::cout << "frac_bkg = " << bkgfrac->getVal() << " +/- " << bkgfrac->getError() << std::endl; std::cout << "a1 = " << a1->getVal() << " +/- " << a1->getError() << "; "; std::cout << "a2 = " << a2->getVal() << " +/- " << a2->getError() << "; "; std::cout << "a3 = " << a3->getVal() << " +/- " << a3->getError() << "; " << std::endl; std::cout << "b1 = " << b1->getVal() << " +/- " << b1->getError() << "; "; std::cout << "b2 = " << b2->getVal() << " +/- " << b2->getError() << "; "; std::cout << "b3 = " << b3->getVal() << " +/- " << b3->getError() << "; " << std::endl; // Plot data and PDF overlaid RooPlot* xframe = CMS_zz4l_mass->frame(Title("Model and data read from workspace")) ; //backgroundData->plotOn(xframe) ; data_bkg_red->plotOn(xframe) ; background_nonorm->plotOn(xframe) ; TCanvas* c = new TCanvas("c","c",800,600); c->cd(); xframe->Draw(); c->SaveAs(outfile); //*/ }
void plotSignals_4mu(int channel = 1) { gSystem->AddIncludePath("-I$ROOFITSYS/include"); gROOT->ProcessLine(".L ~/tdrstyle.C"); setTDRStyle(); //gSystem->Load("PDFs/RooRelBW1_cxx.so"); //gSystem->Load("PDFs/RooRelBW2_cxx.so"); gSystem->Load("../PDFs/HZZ4LRooPdfs_cc.so"); string schannel; if (channel == 1) schannel = "4mu"; if (channel == 2) schannel = "4e"; if (channel == 3) schannel = "2mu2e"; std::cout << "schannel = " << schannel << std::endl; const int nPoints = 17.; int masses[nPoints] = {120,130,140,150,160,170,180,190,200,250,300,350,400,450,500,550,600}; double mHVal[nPoints] = {120,130,140,150,160,170,180,190,200,250,300,350,400,450,500,550,600}; double widths[nPoints] = {3.48e-03,4.88e-03,8.14e-03,1.73e-02,8.30e-02,3.80e-01,6.31e-01,1.04e+00,1.43e+00,4.04e+00,8.43e+00,1.52e+01,2.92e+01,46.95,6.80e+01,93.15,1.23e+02}; // R e a d w o r k s p a c e f r o m f i l e // ----------------------------------------------- double a_meanBW[nPoints]; double a_gammaBW[nPoints]; double a_meanCB[nPoints]; double a_sigmaCB[nPoints]; double a_alphaCB[nPoints]; double a_nCB[nPoints]; //for (int i = 0; i < nPoints; i++){ for (int i = 0; i < (nPoints-3); i++){ // Open input file with workspace (generated by rf14_wspacewrite) char infile[192]; sprintf(infile,"/scratch/hep/ntran/dataFiles/HZZ4L/datasets/datasets_baseline/%s/ZZAnalysisTree_H%i%s.root",schannel.c_str(),masses[i],schannel.c_str()); TFile *f = new TFile(infile) ; char outfile[192]; sprintf( outfile, "figs/pdf_%s_bkg_highmass.eps", schannel.c_str() ); //f->ls(); double windowVal = max( widths[i], 1. ); if (mHVal[i] >= 275){ lowside = 180.; } else { lowside = 100.; } double low_M = max( (mHVal[i] - 20.*windowVal), lowside) ; //double high_M = min( (mHVal[i] + 15.*windowVal), 900.) ; double high_M = min( (mHVal[i] + 15.*windowVal), 600.) ; std::cout << "lowM = " << low_M << ", highM = " << high_M << std::endl; RooDataSet* set = (RooDataSet*) f->Get("data"); RooArgSet* obs = set->get() ; obs->Print(); RooRealVar* CMS_zz4l_mass = (RooRealVar*) obs->find("CMS_zz4l_mass") ; CMS_zz4l_mass->setRange(low_M,high_M); for (int a=0 ; a<set->numEntries() ; a++) { set->get(a) ; //cout << CMS_zz4l_mass->getVal() << " = " << set->weight() << endl ; } // constraining parameters... double l_sigmaCB = 0., s_sigmaCB = 3.; if (mHVal[i] >= 500.){ l_sigmaCB = 10.; s_sigmaCB = 12.; } double h_alpha_CB = 1.15; if (mHVal[i] >= 500.){ h_alpha_CB = 0.99; } double s_alpha_CB = 1.2 + (-0.4/590)*(mHVal[i]-110.); RooRealVar mean_CB("mean_CB","mean_CB",0.,-25.,25); RooRealVar sigma_CB("sigma_CB","sigma_CB",s_sigmaCB,l_sigmaCB,30.); //RooRealVar alpha_CB("alpha_CB","alpha_CB",0.9,0.7,h_alpha_CB); RooRealVar alpha_CB("alpha_CB","alpha_CB",s_alpha_CB); RooRealVar n_CB("n_CB","n_CB",1.7,1.5,2.4); RooCBShape signalCB("signalCB","signalCB",*CMS_zz4l_mass,mean_CB,sigma_CB,alpha_CB,n_CB); RooRealVar mean_BW("mean_BW","mean_BW", mHVal[i] ,100.,1000.); RooRealVar gamma_BW("gamma_BW","gamma_BW",widths[i],0.,200.); //RooBreitWigner signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); //RooRelBW1 signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); RooRelBWUF signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW); //RooRelBW1 signalBW("signalBW", "signalBW",*CMS_zz4l_mass,mean_BW,gamma_BW); RooBreitWigner signalBW1("signalBW1", "signalBW1",*CMS_zz4l_mass,mean_BW,gamma_BW); RooRelBW1 signalBW2("signalBW2", "signalBW2",*CMS_zz4l_mass,mean_BW,gamma_BW); RooRealVar x("x","x",1.); RooRelBWUFParam signalBW3("signalBW3", "signalBW3",*CMS_zz4l_mass,mean_BW,x); RooRealVar y("y","y",0.33333); RooRelBWUFParam signalBW4("signalBW4", "signalBW4",*CMS_zz4l_mass,mean_BW,y); //Set #bins to be used for FFT sampling to 10000 CMS_zz4l_mass->setBins(100000,"fft") ; //Construct BW (x) CB RooFFTConvPdf* sig_ggH = new RooFFTConvPdf("sig_ggH","BW (X) CB",*CMS_zz4l_mass,signalBW,signalCB, 2); // Buffer fraction for cyclical behavior sig_ggH->setBufferFraction(0.2); mean_BW.setConstant(kTRUE); gamma_BW.setConstant(kTRUE); n_CB.setConstant(kTRUE); //alpha_CB.setConstant(kTRUE); RooFitResult *r = sig_ggH.fitTo( *set, SumW2Error(kTRUE) );//, Save(kTRUE), SumW2Error(kTRUE)) ; a_meanBW[i] = mean_BW.getVal(); a_gammaBW[i] = gamma_BW.getVal(); a_meanCB[i] = mean_CB.getVal(); a_sigmaCB[i] = sigma_CB.getVal();; a_alphaCB[i] = alpha_CB.getVal();; a_nCB[i] = n_CB.getVal();; /////////////////////////////////////////////////// // P l o t t i n g int iLineColor = 1; string lab = "blah"; if (channel == 1) { iLineColor = 2; lab = "4#mu"; } if (channel == 3) { iLineColor = 4; lab = "2e2#mu"; } if (channel == 2) { iLineColor = 6; lab = "4e"; } double separation = 0.5; if (mHVal[i] >= 300.) separation = 2; double nbins = (high_M-low_M); nbins /= separation; char yname[192]; sprintf(yname,"Events / %1.1f GeV/c^{2}", separation); char lname[192]; sprintf(lname,"M_{H} = %i [GeV/c^{2}]", (int) mHVal[i] ); char lname2[192]; sprintf(lname2,"Shape Model, %s", lab.c_str() ); RooPlot* frameM4l = CMS_zz4l_mass->frame(Bins( (int) nbins )) ; set->plotOn(frameM4l) ; sig_ggH->plotOn(frameM4l, LineColor(iLineColor)) ; // dummy! TF1* dummyF = new TF1("dummyF","1",0.,1.); TH1F* dummyH = new TH1F("dummyG","dummyG",1, 0.,1.); dummyF->SetLineColor( iLineColor ); //dummyH->SetLineColor( kBlue ); TLegend * box2 = new TLegend(0.17,0.70,0.52,0.90); box2->SetFillColor(0); box2->SetBorderSize(0); box2->AddEntry(dummyH,"Simulation (Powheg + CMS) ","pe"); box2->AddEntry(dummyH,lname,""); box2->AddEntry(dummyF,lname2,"l"); TPaveText *pt = new TPaveText(0.15,0.955,0.4,0.99,"NDC"); pt->SetFillColor(0); pt->SetBorderSize(0); pt->AddText("CMS Preliminary 2011"); TPaveText *pt2 = new TPaveText(0.83,0.955,0.99,0.99,"NDC"); pt2->SetFillColor(0); pt2->SetBorderSize(0); pt2->AddText("#sqrt{s} = 7 TeV"); frameM4l->SetTitle(""); frameM4l->GetXaxis()->SetTitle("M_{4l} [GeV/c^{2}]"); frameM4l->GetYaxis()->SetTitleOffset(1.2); frameM4l->GetYaxis()->SetTitle(yname); TCanvas *c = new TCanvas("c","c",800,600); c->cd(); frameM4l->Draw(); box2->Draw(); pt->Draw(); pt2->Draw(); char plotName[192]; sprintf(plotName,"sigFigs/m%i.eps",masses[i]); c->SaveAs(plotName); /////////////////////////////////////////////////// RooPlot* testFrame = CMS_zz4l_mass->frame(Title("M4L"),Bins(100)) ; signalBW.plotOn(testFrame) ; signalBW1.plotOn(testFrame, LineColor(kBlack)) ; signalBW2.plotOn(testFrame, LineColor(kRed)) ; TCanvas *c3 = new TCanvas("c3","c3",800,600); c3->cd(); testFrame->Draw(); //char plotName[192]; sprintf(plotName,"sigFigs/shape%i.eps",masses[i]); c3->SaveAs(plotName); /////////////////////////////////////////////////// delete f; delete set; delete c; } TGraph* gr_meanBW = new TGraph( nPoints, mHVal, a_meanBW ); TGraph* gr_gammaBW = new TGraph( nPoints, mHVal, a_gammaBW ); TGraph* gr_meanCB = new TGraph( nPoints, mHVal, a_meanCB ); TGraph* gr_sigmaCB = new TGraph( nPoints, mHVal, a_sigmaCB ); TGraph* gr_alphaCB = new TGraph( nPoints, mHVal, a_alphaCB ); TGraph* gr_nCB = new TGraph( nPoints, mHVal, a_nCB ); TF1 *polyFunc1= new TF1("polyFunc1","[0]+[1]*x+[2]*(x-[3])*(x-[3])+[4]*x*x*x*x", 120., 600.); polyFunc1->SetParameters(1., 1., 1., 100.,0.1); TF1 *polyFunc2= new TF1("polyFunc2","[0]+[1]*x+[2]*(x-[3])*(x-[3])+[4]*x*x*x*x", 120., 600.); polyFunc2->SetParameters(1., 1., 1., 100.,0.1); TCanvas *c = new TCanvas("c","c",1200,800); c->Divide(3,2); //c->SetGrid(); //TH1F *hr = c->DrawFrame(0.,0.,610.,1.); c->cd(1); gr_meanBW->Draw("alp"); gr_meanBW->GetXaxis()->SetTitle("mean BW"); c->cd(2); gr_gammaBW->Draw("alp"); gr_gammaBW->GetXaxis()->SetTitle("gamma BW"); c->cd(3); gr_meanCB->Fit(polyFunc1,"Rt"); gr_meanCB->Draw("alp"); gr_meanCB->GetXaxis()->SetTitle("mean CB"); c->cd(4); gr_sigmaCB->Fit(polyFunc2,"Rt"); gr_sigmaCB->Draw("alp"); gr_sigmaCB->GetXaxis()->SetTitle("sigma CB"); c->cd(5); gr_alphaCB->Draw("alp"); gr_alphaCB->GetXaxis()->SetTitle("alpha CB"); c->cd(6); gr_nCB->Draw("alp"); gr_nCB->GetXaxis()->SetTitle("n CB"); c->SaveAs("sigFigs/params.eps"); std::cout << "mean_CB = " << polyFunc1->GetParameter(0) << " + " << polyFunc1->GetParameter(1) << "*m + " << polyFunc1->GetParameter(2) << "*(m - " << polyFunc1->GetParameter(3) << ")*(m - " << polyFunc1->GetParameter(3); std::cout << ") + " << polyFunc1->GetParameter(4) << "*m*m*m*m;" << std::endl; std::cout << "sigma_CB = " << polyFunc2->GetParameter(0) << " + " << polyFunc2->GetParameter(1) << "*m + " << polyFunc2->GetParameter(2) << "*(m - " << polyFunc2->GetParameter(3) << ")*(m - " << polyFunc2->GetParameter(3); std::cout << ") + " << polyFunc2->GetParameter(4) << "*m*m*m*m;" << std::endl; // calculate sysetmatic errors from interpolation... double sum_meanCB = 0; double sum_sigmaCB = 0; for (int i = 0; i < nPoints; i++){ double tmp_meanCB = (polyFunc1->Eval(mHVal[i]) - a_meanCB[i]); sum_meanCB += (tmp_meanCB*tmp_meanCB); double tmp_sigmaCB = (polyFunc2->Eval(mHVal[i]) - a_sigmaCB[i])/a_sigmaCB[i]; sum_sigmaCB += (tmp_sigmaCB*tmp_sigmaCB); std::cout << "mean: " << tmp_meanCB << ", sigma: " << tmp_sigmaCB << std::endl; } double rms_meanCB = sqrt( sum_meanCB/( (double) nPoints) ); double rms_sigmaCB = sqrt( sum_sigmaCB/( (double) nPoints) ); std::cout << "err (meanCB) = " << rms_meanCB << ", err (sigmaCB) = " << rms_sigmaCB << std::endl; }
int main(int argc, char* argv[]){ string fileName; string fileNameZee; string functionName; string fileNameout; int ncats; int jcats; int bins; string outfilename; bool is2011=false; bool useDoubleCB=false; bool verbose=false; int mhLow; int mhHigh; po::options_description desc("Allowed options"); desc.add_options() ("help,h", "Show help") ("infilename,i", po::value<string>(&fileName), "In file name") ("infilenameZee,I", po::value<string>(&fileNameZee), "In file name Zee") ("function,f", po::value<string>(&functionName), "Function to use") ("Outfilename,o", po::value<string>(&fileNameout), "Out file name") ("ncats,c", po::value<int>(&ncats)->default_value(5), "Number of categories") ("jcats,j", po::value<int>(&jcats)->default_value(0), "Start number of categories") ("mhLow,L", po::value<int>(&mhLow)->default_value(75), "Starting point for scan") ("mhHigh,H", po::value<int>(&mhHigh)->default_value(120), "End point for scan") ("bins,B", po::value<int>(&bins)->default_value(180), "Bins for the dataset") ("is2011", "Run 2011 config") ("useDoubleCB", "use double crystal ball function") ("verbose,v", "Run with more output") ; po::variables_map vm; po::store(po::parse_command_line(argc,argv,desc),vm); po::notify(vm); if (vm.count("help")) { cout << desc << endl; exit(1); } if (vm.count("is2011")) is2011=true; if (vm.count("useDoubleCB")) useDoubleCB=true; if (vm.count("verbose")) verbose=true; if (!verbose) { RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); RooMsgService::instance().setSilentMode(true); } TFile *outputfile; //RooWorkspace *outputws = new RooWorkspace("cms_hgg_workspace"); RooWorkspace *outputws; outputfile = new TFile(fileNameout.c_str(),"RECREATE"); TFile *inFile = TFile::Open(fileName.c_str()); RooWorkspace *inWS = (RooWorkspace*)inFile->Get("cms_hgg_workspace"); outputws = (RooWorkspace*)inWS->Clone("cms_hgg_workspace"); vector<string> functionClasses; functionClasses.push_back("Chebychev"); functionClasses.push_back("Bernstein"); functionClasses.push_back("Exponential"); functionClasses.push_back("PowerLaw"); functionClasses.push_back("Laurent"); map<string,string> namingMap; namingMap.insert(pair<string,string>("Bernstein","pol")); namingMap.insert(pair<string,string>("Exponential","exp")); namingMap.insert(pair<string,string>("PowerLaw","pow")); namingMap.insert(pair<string,string>("Laurent","lau")); vector<pair<pair<string,int> ,pair<pair<int,int>, pair<float,float> > > > fabChoice; int sqrts; string ext; if (is2011) { sqrts = 7; ext = "7TeV"; } else { sqrts = 8; ext = "8TeV"; fabChoice.push_back(pair<pair<string,int>, pair<pair<int,int>, pair<float,float> > >(make_pair("Bernstein",-3),make_pair(make_pair(5,1), make_pair(-11.0,11.0)))); //0 fabChoice.push_back(pair<pair<string,int>, pair<pair<int,int>, pair<float,float> > >(make_pair("Bernstein",-3),make_pair(make_pair(5,1), make_pair(-11.0,11.0)))); //1 fabChoice.push_back(pair<pair<string,int>, pair<pair<int,int>, pair<float,float> > >(make_pair("Chebychev",-3),make_pair(make_pair(5,1), make_pair(-11.0,11.0)))); //2 fabChoice.push_back(pair<pair<string,int>, pair<pair<int,int>, pair<float,float> > >(make_pair("Bernstein",-3),make_pair(make_pair(5,1), make_pair(-11.0,11.0)))); //3 } // store results here PdfModelBuilderFAN pdfsModel; RooRealVar *mass = (RooRealVar*)inWS->var("CMS_hgg_mass"); mass->setRange(mhLow,mhHigh); pdfsModel.setObsVar(mass); mass->setBins(bins); ofstream outfile("Zee_Yield.log"); cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Initialization Done +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; for (int cat=jcats; cat<ncats; cat++){ RooDataSet *dataFull = (RooDataSet*)inWS->data(Form("data_mass_cat%d",cat)); RooDataHist thisdataBinned(Form("roohist_data_mass_cat%d",cat),"data",*mass,*dataFull); RooDataSet *data = (RooDataSet*)&thisdataBinned; string funcType = fabChoice[cat].first.first; float LaurentConstant = fabChoice[cat].first.second; int orderOff = fabChoice[cat].second.first.first; int orderBre = fabChoice[cat].second.first.second; float bernDownBound = fabChoice[cat].second.second.first; float bernUpBound = fabChoice[cat].second.second.second; RooAbsPdf *pdfVoiFix; float voiMean=0.; float voiMeanErrorL=0.; float voiMeanErrorH=0.; float voiSigma=0.; float voiSigmaErrorL=0.; float voiSigmaErrorH=0.; float voiWidth=0; float voiWidthErrorL=0.; float voiWidthErrorH=0.; float voinCB1=0.; float voinCB1ErrorL=0.; float voinCB1ErrorH=0.; float voinCB2=0.; float voinCB2ErrorL=0.; float voinCB2ErrorH=0.; float voialphaCB1=0.; float voialphaCB2=0.; float ErrorRange=1.0; if(orderBre != 0){ TFile *inFileZee = TFile::Open(fileNameZee.c_str()); RooWorkspace *inWS_Zee = (RooWorkspace*)inFileZee->Get("fTestVoi_Zee"); if(!useDoubleCB) pdfVoiFix = inWS_Zee->pdf(Form("ftest_Zee_Voi_%s_cat%d",ext.c_str(),cat)); else pdfVoiFix = inWS_Zee->pdf(Form("ftest_Zee_DCB_%s_cat%d",ext.c_str(),cat)); cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Get Zee Done +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; if(pdfVoiFix!=NULL){ if(!useDoubleCB){ ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_mean_p0",ext.c_str(),cat)))->setConstant(true); voiMean = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_mean_p0",ext.c_str(),cat)))->getValV(); voiMeanErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_mean_p0",ext.c_str(),cat)))->getErrorLo(); voiMeanErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_mean_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_sigma_p0",ext.c_str(),cat)))->setConstant(true); voiSigma = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getValV(); voiSigmaErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getErrorLo(); voiSigmaErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_width_p0",ext.c_str(),cat)))->setConstant(true); voiWidth = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_width_p0",ext.c_str(),cat)))->getValV(); voiWidthErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_width_p0",ext.c_str(),cat)))->getErrorLo(); voiWidthErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_Voi_%s_cat%d_width_p0",ext.c_str(),cat)))->getErrorHi(); }else{ ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_mean_p0",ext.c_str(),cat)))->setConstant(true); voiMean = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_mean_p0",ext.c_str(),cat)))->getValV(); voiMeanErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_mean_p0",ext.c_str(),cat)))->getErrorLo(); voiMeanErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_mean_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_sigma_p0",ext.c_str(),cat)))->setConstant(true); voiSigma = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getValV(); voiSigmaErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getErrorLo(); voiSigmaErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_sigma_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB1_p0",ext.c_str(),cat)))->setConstant(true); voinCB1 = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB1_p0",ext.c_str(),cat)))->getValV(); voinCB1ErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB1_p0",ext.c_str(),cat)))->getErrorLo(); voinCB1ErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB1_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB2_p0",ext.c_str(),cat)))->setConstant(true); voinCB2 = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB2_p0",ext.c_str(),cat)))->getValV(); voinCB2ErrorL = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB2_p0",ext.c_str(),cat)))->getErrorLo(); voinCB2ErrorH = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_nCB2_p0",ext.c_str(),cat)))->getErrorHi(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_alphaCB1_p0",ext.c_str(),cat)))->setConstant(true); voialphaCB1 = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_alphaCB1_p0",ext.c_str(),cat)))->getValV(); ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_alphaCB2_p0",ext.c_str(),cat)))->setConstant(true); voialphaCB2 = ((RooRealVar*)inWS_Zee->allVars().find(Form("ftest_Zee_DCB_%s_cat%d_alphaCB2_p0",ext.c_str(),cat)))->getValV(); } } } else{ pdfVoiFix = 0; } cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Get Zee Params Done +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; RooAbsPdf *bkgPdf; if(orderBre == 0){ bkgPdf = getPdf(pdfsModel, funcType, orderOff, Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat), LaurentConstant); bkgPdf->SetName(Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat)); } else{ if(functionName == "Voi"){ if(!useDoubleCB){ bkgPdf = getPdfSumVoigtianFixNew(pdfsModel, funcType, orderOff, voiMean, voiMeanErrorL, voiMeanErrorH, voiSigma, voiSigmaErrorL, voiSigmaErrorH, voiWidth, voiWidthErrorL, voiWidthErrorH, ErrorRange, Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat), LaurentConstant, bernDownBound, bernUpBound).first; }else{ bkgPdf = getPdfSumVoigtianFixNewDouleCB(pdfsModel, funcType, orderOff, voiMean, voiMeanErrorL, voiMeanErrorH, voiSigma, voiSigmaErrorL, voiSigmaErrorH, voinCB1, voinCB1ErrorL, voinCB1ErrorH, voinCB2, voinCB2ErrorL, voinCB2ErrorH, voialphaCB1, voialphaCB2, ErrorRange, Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat), LaurentConstant, bernDownBound, bernUpBound).first; } } bkgPdf->SetName(Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat)); } RooArgSet *params = bkgPdf->getParameters(*data); params->Print("v"); cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Prepare Final Pdf Done +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl; RooFitResult *fitRes = bkgPdf->fitTo(*data,Save(true),Range(mhLow,mhHigh)); fitRes->floatParsInit().Print("v"); fitRes->floatParsFinal().Print("v"); if(voiMean != 0){ if(!useDoubleCB){ ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_Fvoimean",cat)))->setConstant(false); ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_Fvoisigma",cat)))->setConstant(false); ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_Fvoiwidth",cat)))->setConstant(false); }else{ ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_Fdcbmean",cat)))->setConstant(false); ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_Fdcbsigma",cat)))->setConstant(false); ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_FdcbnCB1",cat)))->setConstant(false); ((RooRealVar*)params->find(Form("pdf_data_pol_model_8TeV_cat%d_FdcbnCB2",cat)))->setConstant(false); } params->Print("v"); float BernFrac = ((RooRealVar*)fitRes->floatParsFinal().find(Form("pdf_data_pol_model_8TeV_cat%d_frac_sum1",cat)))->getValV(); if(!useDoubleCB){ outfile << Form("cat %d ",cat) << data->sumEntries()*(1.0-BernFrac) << " Mean " << voiMean << " voiMeanErrorL " << voiMeanErrorL << " voiMeanErrorH "<< voiMeanErrorH << " voiSigma " << voiSigma << " voiSigmaErrorL " << voiSigmaErrorL << " voiSigmaErrorH " << voiSigmaErrorH << " voiWidth " << voiWidth << " voiWidthErrorL " << voiWidthErrorL << " voiWidthErrorH " << voiWidthErrorH << endl; outfile << endl; }else{ outfile << Form("cat %d ",cat) << data->sumEntries()*(1.0-BernFrac) << " Mean " << voiMean << " voiMeanErrorL " << voiMeanErrorL << " voiMeanErrorH "<< voiMeanErrorH << " voiSigma " << voiSigma << " voiSigmaErrorL " << voiSigmaErrorL << " voiSigmaErrorH " << voiSigmaErrorH << " nCB1 " << voinCB1 << " nCB1ErrorL " << voinCB1ErrorL << " nCB1ErrorH " << voinCB1ErrorH << " nCB2 " << voinCB2 << " nCB2ErrorL " << voinCB2ErrorL << " nCB2ErrorH " << voinCB2ErrorH << "bernfrac "<<BernFrac<< endl; } } outputws->pdf(Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat))->SetName(Form("pdf_data_pol_model_%dTeV_cat%d_OLD",sqrts,cat)); outputws->import(*bkgPdf); //outputws->import(*data); outputws->pdf(Form("pdf_data_pol_model_%dTeV_cat%d",sqrts,cat))->Print(); outputws->data(Form("data_mass_cat%d",cat))->Print("v"); outputws->data(Form("roohist_data_mass_cat%d",cat))->Print("v"); } outputfile->cd(); outputws->Write(); outputfile->Close(); }