int main (int argc, char *argv[]){ gROOT->SetBatch(); OptionParser(argc,argv); TFile *outFile = new TFile(outfilename_.c_str(),"RECREATE"); RooRealVar *intLumi = new RooRealVar("IntLumi","IntLumi",lumi_*1000,0.,10.e5); WSTFileWrapper * inWS = new WSTFileWrapper(infilename_,"wsig_13TeV"); RooWorkspace *saveWS = new RooWorkspace(); RooWorkspace *tmpWS = new RooWorkspace(); //saveWS->import((inWS->allVars()),RecycleConflictNodes()); //saveWS->import((inWS->allFunctions()),RecycleConflictNodes()); for (int i=0 ; i < inWS->getWsList().size() ; i++){ inWS->getWsList()[i]->Print(); if (i==0) tmpWS = (RooWorkspace*) inWS->getWsList()[i]->Clone(); if (!tmpWS){ std::cout << "EXIT" << std::endl; exit(1);} if (i !=0) { //tmpWS->merge(*(inWS->getWsList()[i])); tmpWS->import(inWS->getWsList()[i]->allVars(),RecycleConflictNodes()); tmpWS->import(inWS->getWsList()[i]->allFunctions(),RecycleConflictNodes()); inWS->getWsList()[i]->allFunctions().Print(); tmpWS->import(inWS->getWsList()[i]->allPdfs(),RecycleConflictNodes()); inWS->getWsList()[i]->allPdfs().Print(); std::list<RooAbsData*> data = (inWS->getWsList()[i]->allData()) ; for (std::list<RooAbsData*>::const_iterator iterator = data.begin(), end = data.end(); iterator != end; ++iterator ) { tmpWS->import(**iterator); } std::list<TObject*> stuff = (inWS->getWsList()[i]->allGenericObjects()) ; for (std::list<TObject*>::const_iterator iterator = stuff.begin(), end = stuff.end(); iterator != end; ++iterator ) { tmpWS->import(**iterator); } }; } WSTFileWrapper *mergedWS = new WSTFileWrapper(tmpWS); saveWS->SetName("wsig_13TeV"); ncats_= flashggCats_.size(); cout << "[INFO] Starting to combine fits..." << endl; // this guy packages everything up RooWorkspace *mergeWS = 0; Packager packager(mergedWS, saveWS ,procs_,ncats_,mhLow_,mhHigh_,skipMasses_,/*sqrts*/13,/*skipPlots_*/false,plotDir_,mergeWS,cats_,flashggCats_); cout << "[INFO] Finished initalising packager." << endl; packager.packageOutput(/*split*/ false); cout << "[INFO] Combination complete." << endl; cout << "[INFO] cd to output file" << endl; outFile->cd(); cout << "[INFO] write saveWS " << endl; saveWS->Write(); cout << "[INFO] close output file " << endl; outFile->Close(); return 0; }
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 generateSigHist_for_combineMaker(Float_t lum =10, Int_t cc1 = 0, Int_t cc2 = 9) { const Int_t NCAT(4); // 4 categories in the source file TString myCut[NCAT] = {"EBHighR9","EBLowR9","EEHighR9","EELowR9"}; //Float_t lum =10; TString lum_string = TString::Format("%g", lum); TFile *file=TFile::Open("workspaces/HighMassGG_m1500_01_mgg_lum_"+lum_string+".root"); RooWorkspace *w_all = (RooWorkspace*)file->Get("w_all"); RooRealVar *mgg = (RooRealVar*)w_all->var("mgg"); RooRealVar *MH = (RooRealVar*)w_all->var("MH"); RooRealVar *kpl = (RooRealVar*)w_all->var("kpl"); RooNumConvPdf* numConv[NCAT]; RooFormulaVar* norm[NCAT]; // necessary to set a window as it is not saved when RooNumConvPdf is saved RooRealVar* W = new RooRealVar("W","W",500); W->setConstant(); RooRealVar* C = new RooRealVar("C","C",0); C->setConstant(); cout << "READ PDFs FROM WORKSPACE : SIGNAL FROM 4 CATEGORIES" << endl; cout << "READ ROOFORMULAs FROM WORKSPACE : NORMALIZATION OF 4 CATEGORIES" << endl; cout << "SET WINDOW FOR THE 4 CONVOLUTIONS (PDFs)" << endl; cout << "..." << endl; for(Int_t c = 0; c<NCAT; c++) { numConv[c] = (RooNumConvPdf*)w_all->pdf("mggSig_cat"+myCut[c]); norm[c] = (RooFormulaVar*)w_all->function("mggSig_cat"+myCut[c]+"_norm"); numConv[c]->setConvolutionWindow(*C,*W); } cout << endl; cout << "ADD PDFs TO FORM THE TWO CATEGORIES EBEB AND EBEE" << endl; RooFormulaVar *mggSig_catEBEB_norm = new RooFormulaVar("mggSig_catEBEB_norm","mggSig_catEBEB_norm","@0+@1",RooArgList(*norm[0],*norm[1])); RooFormulaVar *mggSig_catEBEE_norm = new RooFormulaVar("mggSig_catEBEE_norm","mggSig_catEBEE_norm","@0+@1",RooArgList(*norm[2],*norm[3])); RooFormulaVar *frac1EBEB = new RooFormulaVar("frac1EBEB","frac1EBEB","@0/@1",RooArgList(*norm[0],*mggSig_catEBEB_norm)); RooFormulaVar *frac2EBEB = new RooFormulaVar("frac2EBEB","frac2EBEB","@0/@1",RooArgList(*norm[1],*mggSig_catEBEB_norm)); RooFormulaVar *frac1EBEE = new RooFormulaVar("frac1EBEE","frac1EBE","@0/@1",RooArgList(*norm[2],*mggSig_catEBEE_norm)); RooFormulaVar *frac2EBEE = new RooFormulaVar("frac2EBEE","frac2EBEE","@0/@1",RooArgList(*norm[3],*mggSig_catEBEE_norm)); RooAddPdf* mggSig_catEBEB = new RooAddPdf("mggSig_catEBEB","mggSig_catEBEB",RooArgList(*numConv[0],*numConv[1]),RooArgList(*frac1EBEB,*frac2EBEB)); RooAddPdf* mggSig_catEBEE = new RooAddPdf("mggSig_catEBEE","mggSig_catEBEE",RooArgList(*numConv[2],*numConv[3]),RooArgList(*frac1EBEE,*frac2EBEE)); cout << endl << endl ; cout << "READ CFG FROM BACKGROUND_FINAL TO BE USED IN COMBINE_MAKER.PY" << endl; TFile *fcfg = TFile::Open("../../Analysis/macros/workspace_cic2_dijet_lum_10/full_analysis_anv1_v18_bkg_ws_300.root"); TObjString *cfg = (TObjString*)fcfg->Get("cfg"); const Int_t nCouplings(9); Double_t couplings[nCouplings] = {0.01, 0.025, 0.05, 0.075, 0.1, 0.125, 0.15, 0.175, 0.2}; cout << endl << endl ; cout << "SCAN OVER MH AND KAPPA VALUES TO GET DIFFERENT PDFs FOR EACH SET OF PARAMETERS..." << endl; for(Int_t icoupling = cc1; icoupling < cc2; icoupling++) { //CREATE FOLDER FOR THE COUPLING TString coupling_string = TString::Format("%g",couplings[icoupling]); coupling_string.ReplaceAll(".",""); TString inDir("../../Analysis/macros/workspace_cic2_signalDataHist_lum_"+lum_string+"/"); gSystem->mkdir(inDir); for(Int_t mass = 1000; mass < 5100 ; mass+=100) { TString mass_string = TString::Format("%d",mass); TString signame("grav_"+coupling_string+"_"+mass_string); cout << endl; cout << "********************************************" << endl; cout << "SET MH and KAPPA values" << endl << "kappa: " << couplings[icoupling] << endl << "mass: " << mass << endl; cout << "********************************************" << endl; MH->setVal(mass); kpl->setVal(couplings[icoupling]); cout << "CREATE ROODATAHIST WITH NORM..." << endl; RooDataHist* dhEBEB = mggSig_catEBEB->generateBinned(RooArgSet(*mgg),mggSig_catEBEB_norm->getVal(), RooFit::ExpectedData()); RooDataHist* dhEBEE = mggSig_catEBEE->generateBinned(RooArgSet(*mgg),mggSig_catEBEE_norm->getVal(), RooFit::ExpectedData()); dhEBEB->SetName("signal_"+signame+"_EBEB"); dhEBEB->SetTitle("signal_"+signame+"_EBEB"); dhEBEE->SetName("signal_"+signame+"_EBEE"); dhEBEE->SetTitle("signal_"+signame+"_EBEE"); //CREATE ROOHISTPDF //RooHistPdf *fhEBEB = new RooHistPdf("mggHistPdf_catEBEB","mggHistPdf_catEBEB",RooArgSet(*mgg),*dhEBEB); //RooHistPdf *fhEBEE = new RooHistPdf("mggHistPdf_catEBEE","mggHistPdf_catEBEE",RooArgSet(*mgg),*dhEBEE); //SAVE ALL IN A WORKSPACE WITH FILE NAME corresponding to MASS AND COUPLING VALUE RooWorkspace *wtemplates = new RooWorkspace("wtemplates","wtemplates"); //wtemplates->import(*fhEBEB); //wtemplates->import(*fhEBEE); //wtemplates->import(*mggSig_catEBEB_norm,RecycleConflictNodes()); //wtemplates->import(*mggSig_catEBEE_norm,RecycleConflictNodes()); wtemplates->import(*dhEBEB); wtemplates->import(*dhEBEE); //wtemplates->import(*numConv[0],RecycleConflictNodes()); cout << "******************************************" << endl; cout << "WORKSPACE CONTENT FOR COUPLING " << couplings[icoupling] << " AND MASS " << mass << endl; wtemplates->Print("V"); //WRITE IN FILE TString filename = inDir+"300_"+signame+".root"; TFile *fileOutput = TFile::Open(filename,"recreate"); cfg->Write("cfg"); wtemplates->Write("wtemplates"); cout << "workspace imported to " << filename << endl; } } }
void FitterUtilsSimultaneousExpOfPolyTimesX::generate(bool wantPlots, string plotsfile) { FitterUtilsExpOfPolyTimesX::generate(wantPlots, plotsfile); TFile fw(workspacename.c_str(), "UPDATE"); RooWorkspace* workspace = (RooWorkspace*)fw.Get("workspace"); RooRealVar *B_plus_M = workspace->var("B_plus_M"); RooRealVar *misPT = workspace->var("misPT"); RooDataSet* dataSetCombExt = (RooDataSet*)workspace->data("dataSetCombExt"); RooDataSet* dataSetComb = (RooDataSet*)workspace->data("dataSetComb"); // RooRealVar *l1KeeGen = workspace->var("l1KeeGen"); // RooRealVar *l2KeeGen = workspace->var("l2KeeGen"); // RooRealVar *l3KeeGen = workspace->var("l3KeeGen"); // RooRealVar *l4KeeGen = workspace->var("l4KeeGen"); // RooRealVar *l5KeeGen = workspace->var("l5KeeGen"); // // // RooExpOfPolyTimesX kemuPDF("kemuPDF", "kemuPDF", *B_plus_M, *misPT, *l1KeeGen, *l2KeeGen, *l3KeeGen, *l4KeeGen, *l5KeeGen); // // RooAbsPdf::GenSpec* GenSpecKemu = kemuPDF.prepareMultiGen(RooArgSet(*B_plus_M, *misPT), RooFit::Extended(1), NumEvents(nGenKemu)); // // cout<<"Generating Kemu"<<endl; // RooDataSet* dataGenKemu = kemuPDF.generate(*GenSpecKemu);//(argset, 100, false, true, "", false, true); // dataGenKemu->SetName("dataGenKemu"); dataGenKemu->SetTitle("dataGenKemu"); // // // RooWorkspace* workspaceGen = (RooWorkspace*)fw.Get("workspaceGen"); // workspaceGen->import(*dataGenKemu); // // workspaceGen->Write("", TObject::kOverwrite); // fw.Close(); // delete dataGenKemu; // delete GenSpecKemu; TVectorD rho(2); rho[0] = 2.5; rho[1] = 1.5; misPT->setRange(-2000, 5000); RooNDKeysPdf kemuPDF("kemuPDF", "kemuPDF", RooArgList(*B_plus_M, *misPT), *dataSetCombExt, rho, "ma",3, true); misPT->setRange(0, 5000); RooAbsPdf::GenSpec* GenSpecKemu = kemuPDF.prepareMultiGen(RooArgSet(*B_plus_M, *misPT), RooFit::Extended(1), NumEvents(nGenKemu)); cout<<"Generating Kemu"<<endl; RooDataSet* dataGenKemu = kemuPDF.generate(*GenSpecKemu);//(argset, 100, false, true, "", false, true); dataGenKemu->SetName("dataGenKemu"); dataGenKemu->SetTitle("dataGenKemu"); RooWorkspace* workspaceGen = (RooWorkspace*)fw.Get("workspaceGen"); workspaceGen->import(*dataGenKemu); if(wantPlots) PlotShape(*dataSetComb, *dataGenKemu, kemuPDF, plotsfile, "cKemuKeys", *B_plus_M, *misPT); fw.cd(); workspaceGen->Write("", TObject::kOverwrite); fw.Close(); delete dataGenKemu; delete GenSpecKemu; }
int main(){ TFile *inFile = TFile::Open("../AnalysisScripts/MK_signal_test/CMS-HGG_sig.root"); RooWorkspace *inWS = (RooWorkspace*)inFile->Get("cms_hgg_workspace"); RooRealVar *mass = (RooRealVar*)inWS->var("CMS_hgg_mass"); RooRealVar *intLumi = (RooRealVar*)inWS->var("IntLumi"); RooRealVar *MH = new RooRealVar("MH","MH",110,150); InitialFit initFitRV(mass,MH,110,150); initFitRV.setVerbosity(0); initFitRV.buildSumOfGaussians("ggh_cat0",3); InitialFit initFitWV(mass,MH,110,150); initFitWV.setVerbosity(0); initFitWV.buildSumOfGaussians("ggh_cat0",1); for (int mh=110; mh<=150; mh+=5){ RooDataSet *dataRV = (RooDataSet*)inWS->data(Form("sig_ggh_mass_m%d_rv_cat0",mh)); initFitRV.addDataset(mh,dataRV); RooDataSet *dataWV = (RooDataSet*)inWS->data(Form("sig_ggh_mass_m%d_wv_cat0",mh)); initFitWV.addDataset(mh,dataWV); } initFitRV.runFits(1); initFitRV.saveParamsToFileAtMH("dat/in/ggh_cat0_rv.dat",125); initFitRV.loadPriorConstraints("dat/in/ggh_cat0_rv.dat",0.1); initFitRV.runFits(1); initFitRV.plotFits("plots/test/rv"); initFitWV.runFits(1); initFitWV.saveParamsToFileAtMH("dat/in/ggh_cat0_wv.dat",125); initFitWV.loadPriorConstraints("dat/in/ggh_cat0_wv.dat",0.1); initFitWV.runFits(1); initFitWV.plotFits("plots/test/wv"); map<int,map<string,RooRealVar*> > fitParamsRV = initFitRV.getFitParams(); map<int,map<string,RooRealVar*> > fitParamsWV = initFitWV.getFitParams(); LinearInterp linInterpRV(MH,110,150,fitParamsRV,false); linInterpRV.setVerbosity(0); linInterpRV.interpolate(3); map<string,RooSpline1D*> splinesRV = linInterpRV.getSplines(); LinearInterp linInterpWV(MH,110,150,fitParamsWV,false); linInterpWV.setVerbosity(0); linInterpWV.interpolate(1); map<string,RooSpline1D*> splinesWV = linInterpWV.getSplines(); FinalModelConstruction finalModel(mass,MH,intLumi,110,150,"ggh",0,false,"dat/photonCatSyst.dat",1,false); finalModel.setRVsplines(splinesRV); finalModel.setWVsplines(splinesWV); map<int,RooDataSet*> datasetsRV; map<int,RooDataSet*> datasetsWV; map<int,RooDataSet*> datasetsSTD; for (int mh=110; mh<=150; mh+=5){ RooDataSet *dataRV = (RooDataSet*)inWS->data(Form("sig_ggh_mass_m%d_rv_cat0",mh)); RooDataSet *dataWV = (RooDataSet*)inWS->data(Form("sig_ggh_mass_m%d_wv_cat0",mh)); RooDataSet *dataSTD = (RooDataSet*)inWS->data(Form("sig_ggh_mass_m%d_cat0",mh)); datasetsRV.insert(pair<int,RooDataSet*>(mh,dataRV)); datasetsWV.insert(pair<int,RooDataSet*>(mh,dataWV)); datasetsSTD.insert(pair<int,RooDataSet*>(mh,dataSTD)); } finalModel.setRVdatasets(datasetsRV); finalModel.setWVdatasets(datasetsWV); finalModel.setSTDdatasets(datasetsSTD); finalModel.buildRvWvPdf("hggpdfsmrel",3,1,false); finalModel.getNormalization(); finalModel.plotPdf("plots/test/final"); TFile *outFile = new TFile("tempFile.root","RECREATE"); RooWorkspace *outWS = new RooWorkspace("wsig"); finalModel.save(outWS); outFile->cd(); outWS->Write(); outFile->Close(); inFile->Close(); return 0; }
int main(int argc, char *argv[]){ OptionParser(argc,argv); RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); RooMsgService::instance().setSilentMode(true); system(Form("mkdir -p %s",outdir_.c_str())); vector<string> procs; split(infilenames_,infilenamesStr_,boost::is_any_of(",")); TPython::Exec("import os,imp,re"); const char * env = gSystem->Getenv("CMSSW_BASE") ; std::string globeRt = env; TPython::Exec(Form("buildSMHiggsSignalXSBR = imp.load_source('*', '%s/src/flashggFinalFit/Signal/python/buildSMHiggsSignalXSBR.py')",globeRt.c_str())); TPython::Eval(Form("buildSMHiggsSignalXSBR.Init%dTeV()", 13)); for (unsigned int i =0 ; i<infilenames_.size() ; i++){ int mH =(int) TPython::Eval(Form("int(re.search('_M(.+?)_','%s').group(1))",infilenames_[i].c_str())); double WH_XS = (double)TPython::Eval(Form("buildSMHiggsSignalXSBR.getXS(%d,'%s')",mH,"WH")); double ZH_XS = (double)TPython::Eval(Form("buildSMHiggsSignalXSBR.getXS(%d,'%s')",mH,"ZH")); float tot_XS = WH_XS + ZH_XS; float wFrac= WH_XS /tot_XS ; float zFrac= ZH_XS /tot_XS ; std::cout << "mass "<< mH << " wh fraction "<< WH_XS /tot_XS << ", zh fraction "<< ZH_XS /tot_XS <<std::endl; TFile *infile = TFile::Open(infilenames_[i].c_str()); string outname =(string) TPython::Eval(Form("'%s'.split(\"/\")[-1].replace(\"VH\",\"WH_VH\")",infilenames_[i].c_str())); TFile *outfile = TFile::Open(outname.c_str(),"RECREATE") ; TDirectory* saveDir = outfile->mkdir("tagsDumper"); saveDir->cd(); RooWorkspace *inWS = (RooWorkspace*) infile->Get("tagsDumper/cms_hgg_13TeV"); RooRealVar *intLumi = (RooRealVar*)inWS->var("IntLumi"); RooWorkspace *outWS = new RooWorkspace("cms_hgg_13TeV"); outWS->import(*intLumi); std::list<RooAbsData*> data = (inWS->allData()) ; std::cout <<" [INFO] Reading WS dataset contents: "<< std::endl; for (std::list<RooAbsData*>::const_iterator iterator = data.begin(), end = data.end(); iterator != end; ++iterator ) { RooDataSet *dataset = dynamic_cast<RooDataSet *>( *iterator ); if (dataset) { string zhname =(string) TPython::Eval(Form("'%s'.replace(\"wzh\",\"zh\")",dataset->GetName())); string whname =(string) TPython::Eval(Form("'%s'.replace(\"wzh\",\"wh\")",dataset->GetName())); RooDataSet *datasetZH = (RooDataSet*) dataset->emptyClone(zhname.c_str(),zhname.c_str()); RooDataSet *datasetWH = (RooDataSet*) dataset->emptyClone(whname.c_str(),whname.c_str()); TRandom3 r; r.Rndm(); double x[dataset->numEntries()]; r.RndmArray(dataset->numEntries(),x); for (int j =0; j < dataset->numEntries() ; j++){ if( x[j] < wFrac){ dataset->get(j); datasetWH->add(*(dataset->get(j)),dataset->weight()); } else{ dataset->get(j); datasetZH->add(*(dataset->get(j)),dataset->weight()); } } float w =datasetWH->sumEntries(); float z =datasetZH->sumEntries(); if(verbose_){ std::cout << "Original dataset " << *dataset <<std::endl; std::cout << "WH dataset " << *datasetWH <<std::endl; std::cout << "ZH dataset " << *datasetZH <<std::endl; std::cout << "********************************************" <<std::endl; std::cout << "WH fraction (obs) : WH " << w/(w+z) <<", ZH "<< z/(w+z) << std::endl; std::cout << "WH fraction (exp) : WH " << wFrac <<", ZH "<< zFrac << std::endl; std::cout << "********************************************" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "********************************************" <<std::endl; } outWS->import(*datasetWH); outWS->import(*datasetZH); } RooDataHist *datahist = dynamic_cast<RooDataHist *>( *iterator ); if (datahist) { string zhname =(string) TPython::Eval(Form("'%s'.replace(\"wzh\",\"zh\")",datahist->GetName())); string whname =(string) TPython::Eval(Form("'%s'.replace(\"wzh\",\"wh\")",datahist->GetName())); RooDataHist *datahistZH = (RooDataHist*) datahist->emptyClone(zhname.c_str(),zhname.c_str()); RooDataHist *datahistWH = (RooDataHist*) datahist->emptyClone(whname.c_str(),whname.c_str()); TRandom3 r; r.Rndm(); double x[datahist->numEntries()]; r.RndmArray(datahist->numEntries(),x); for (int j =0; j < datahist->numEntries() ; j++){ datahistWH->add(*(datahist->get(j)),datahist->weight()*wFrac); datahistZH->add(*(datahist->get(j)),datahist->weight()*zFrac); } float w =datahistWH->sumEntries(); float z =datahistZH->sumEntries(); if(verbose_){ std::cout << "Original datahist " << *datahist <<std::endl; std::cout << "WH datahist " << *datahistWH <<std::endl; std::cout << "ZH datahist " << *datahistZH <<std::endl; std::cout << "********************************************" <<std::endl; std::cout << "WH fraction (obs) : WH " << w/(w+z) <<", ZH "<< z/(w+z) << std::endl; std::cout << "WH fraction (exp) : WH " << wFrac <<", ZH "<< zFrac << std::endl; std::cout << "********************************************" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "********************************************" <<std::endl; } outWS->import(*datahistWH); outWS->import(*datahistZH); } } saveDir->cd(); outWS->Write(); outfile->Close(); infile->Close(); } }
void drawCtauPlot(RooWorkspace& myws, // Local workspace string outputDir, // Output directory struct InputOpt opt, // Variable with run information (kept for legacy purpose) struct KinCuts cut, // Variable with current kinematic cuts string plotLabel, // The label used to define the output file name // Select the type of datasets to fit string DSTAG, // Specifies the type of datasets: i.e, DATA, MCJPSINP, ... bool isPbPb, // Define if it is PbPb (True) or PP (False) // Select the drawing options bool setLogScale, // Draw plot with log scale bool incSS, // Include Same Sign data int nBins, // Number of bins used for plotting bool paperStyle=false,// if true, print less info bool saveWS=true // save the workspace into a file ) { if (DSTAG.find("_")!=std::string::npos) DSTAG.erase(DSTAG.find("_")); string dsOSName = Form("dOS_%s_%s", DSTAG.c_str(), (isPbPb?"PbPb":"PP")); string dsSSName = Form("dSS_%s_%s", DSTAG.c_str(), (isPbPb?"PbPb":"PP")); // Create the main plot of the fit // RooPlot* frame = myws.var("invMass")->frame(Bins(nBins), Range(cut.dMuon.M.Min, cut.dMuon.M.Max)); RooPlot* frame = myws.var("ctau")->frame(Bins(nBins), Range(-1,3)); myws.data(dsOSName.c_str())->plotOn(frame, Name("dOS"), DataError(RooAbsData::SumW2), XErrorSize(0), MarkerColor(kBlack), LineColor(kBlack), MarkerSize(1.2)); if (paperStyle) TGaxis::SetMaxDigits(3); // to display powers of 10 if (incSS) { myws.data(dsSSName.c_str())->plotOn(frame, Name("dSS"), MarkerColor(kRed), LineColor(kRed), MarkerSize(1.2)); } myws.data(dsOSName.c_str())->plotOn(frame, Name("dOS"), DataError(RooAbsData::SumW2), XErrorSize(0), MarkerColor(kBlack), LineColor(kBlack), MarkerSize(1.2)); // set the CMS style setTDRStyle(); // Create the main canvas TCanvas *cFig = new TCanvas(Form("cMassFig_%s", (isPbPb?"PbPb":"PP")), "cMassFig",800,800); TPad *pad1 = new TPad(Form("pad1_%s", (isPbPb?"PbPb":"PP")),"",0,paperStyle ? 0 : 0.23,1,1); TPad *pad2 = new TPad(Form("pad2_%s", (isPbPb?"PbPb":"PP")),"",0,0,1,.228); TLine *pline = new TLine(cut.dMuon.M.Min, 0.0, cut.dMuon.M.Max, 0.0); // TPad *pad4 = new TPad("pad4","This is pad4",0.55,0.46,0.97,0.87); TPad *pad4 = new TPad("pad4","This is pad4",0.55,paperStyle ? 0.29 : 0.36,0.97,paperStyle ? 0.70 : 0.77); pad4->SetFillStyle(0); pad4->SetLeftMargin(0.28); pad4->SetRightMargin(0.10); pad4->SetBottomMargin(0.21); pad4->SetTopMargin(0.072); frame->SetTitle(""); frame->GetXaxis()->CenterTitle(kTRUE); if (!paperStyle) { frame->GetXaxis()->SetTitle(""); frame->GetXaxis()->SetTitleSize(0.045); frame->GetXaxis()->SetTitleFont(42); frame->GetXaxis()->SetTitleOffset(3); frame->GetXaxis()->SetLabelOffset(3); frame->GetYaxis()->SetLabelSize(0.04); frame->GetYaxis()->SetTitleSize(0.04); frame->GetYaxis()->SetTitleOffset(1.7); frame->GetYaxis()->SetTitleFont(42); } else { frame->GetXaxis()->SetTitle("#font[12]{l}_{J/#psi} (mm)"); frame->GetXaxis()->SetTitleOffset(1.1); frame->GetYaxis()->SetTitleOffset(1.45); frame->GetXaxis()->SetTitleSize(0.05); frame->GetYaxis()->SetTitleSize(0.05); } setRange(myws, frame, dsOSName, setLogScale, cut.dMuon.AbsRap.Min); if (paperStyle) { double Ydown = 0.1;//frame->GetMinimum(); double Yup = 0.9*frame->GetMaximum(); frame->GetYaxis()->SetRangeUser(Ydown,Yup); } cFig->cd(); pad2->SetTopMargin(0.02); pad2->SetBottomMargin(0.4); pad2->SetFillStyle(4000); pad2->SetFrameFillStyle(4000); if (!paperStyle) pad1->SetBottomMargin(0.015); //plot fit pad1->Draw(); pad1->cd(); frame->Draw(); pad1->SetLogy(setLogScale); // Drawing the text in the plot TLatex *t = new TLatex(); t->SetNDC(); t->SetTextSize(0.032); float dy = 0; t->SetTextSize(0.03); if (!paperStyle) { // do not print selection details for paper style t->DrawLatex(0.21, 0.86-dy, "2015 HI Soft Muon ID"); dy+=0.045; if (isPbPb) { t->DrawLatex(0.21, 0.86-dy, "HLT_HIL1DoubleMu0_v1"); dy+=0.045; } else { t->DrawLatex(0.21, 0.86-dy, "HLT_HIL1DoubleMu0_v1"); dy+=0.045; } } if (cut.dMuon.AbsRap.Min>0.1) {t->DrawLatex(0.20, 0.86-dy, Form("%.1f < |y^{#mu#mu}| < %.1f",cut.dMuon.AbsRap.Min,cut.dMuon.AbsRap.Max)); dy+=1.5*0.045;} else {t->DrawLatex(0.20, 0.86-dy, Form("|y^{#mu#mu}| < %.1f",cut.dMuon.AbsRap.Max)); dy+=1.5*0.045;} t->DrawLatex(0.20, 0.86-dy, Form("%g < p_{T}^{#mu#mu} < %g GeV/c",cut.dMuon.Pt.Min,cut.dMuon.Pt.Max)); dy+=0.045; t->DrawLatex(0.20, 0.86-dy, Form("%g < M^{#mu#mu} < %g GeV/c^{2}",cut.dMuon.M.Min,cut.dMuon.M.Max)); dy+=0.045; if (isPbPb) {t->DrawLatex(0.20, 0.86-dy, Form("Cent. %d-%d%%", (int)(cut.Centrality.Start/2), (int)(cut.Centrality.End/2))); dy+=0.045;} dy+=0.5*0.045; t->DrawLatex(0.20, 0.86-dy, "#mu in acceptance"); dy+=0.045; // Drawing the Legend double ymin = 0.7802; if (paperStyle) { ymin = 0.72; } TLegend* leg = new TLegend(0.5175, ymin, 0.7180, 0.8809); leg->SetTextSize(0.03); leg->AddEntry(frame->findObject("dOS"), (incSS?"Opposite Charge":"Data"),"pe"); if (incSS) { leg->AddEntry(frame->findObject("dSS"),"Same Charge","pe"); } leg->Draw("same"); //Drawing the title TString label; if (isPbPb) { if (opt.PbPb.RunNb.Start==opt.PbPb.RunNb.End){ label = Form("PbPb Run %d", opt.PbPb.RunNb.Start); } else { label = Form("%s [%s %d-%d]", "PbPb", "HIOniaL1DoubleMu0", opt.PbPb.RunNb.Start, opt.PbPb.RunNb.End); } } else { if (opt.pp.RunNb.Start==opt.pp.RunNb.End){ label = Form("PP Run %d", opt.pp.RunNb.Start); } else { label = Form("%s [%s %d-%d]", "PP", "DoubleMu0", opt.pp.RunNb.Start, opt.pp.RunNb.End); } } // CMS_lumi(pad1, isPbPb ? 105 : 104, 33, label); CMS_lumi(pad1, isPbPb ? 108 : 107, 33, ""); if (!paperStyle) gStyle->SetTitleFontSize(0.05); pad1->Update(); cFig->cd(); // Save the plot in different formats gSystem->mkdir(Form("%splot/%s/root/", outputDir.c_str(), DSTAG.c_str()), kTRUE); cFig->SaveAs(Form("%splot/%s/root/%s_%s_%s%s_pt%.0f%.0f_rap%.0f%.0f_cent%d%d.root", outputDir.c_str(), DSTAG.c_str(), DSTAG.c_str(), "Psi2SJpsi", (isPbPb?"PbPb":"PP"), plotLabel.c_str(), (cut.dMuon.Pt.Min*10.0), (cut.dMuon.Pt.Max*10.0), (cut.dMuon.AbsRap.Min*10.0), (cut.dMuon.AbsRap.Max*10.0), cut.Centrality.Start, cut.Centrality.End)); gSystem->mkdir(Form("%splot/%s/png/", outputDir.c_str(), DSTAG.c_str()), kTRUE); cFig->SaveAs(Form("%splot/%s/png/%s_%s_%s%s_pt%.0f%.0f_rap%.0f%.0f_cent%d%d.png", outputDir.c_str(), DSTAG.c_str(), DSTAG.c_str(), "Psi2SJpsi", (isPbPb?"PbPb":"PP"), plotLabel.c_str(), (cut.dMuon.Pt.Min*10.0), (cut.dMuon.Pt.Max*10.0), (cut.dMuon.AbsRap.Min*10.0), (cut.dMuon.AbsRap.Max*10.0), cut.Centrality.Start, cut.Centrality.End)); gSystem->mkdir(Form("%splot/%s/pdf/", outputDir.c_str(), DSTAG.c_str()), kTRUE); cFig->SaveAs(Form("%splot/%s/pdf/%s_%s_%s%s_pt%.0f%.0f_rap%.0f%.0f_cent%d%d.pdf", outputDir.c_str(), DSTAG.c_str(), DSTAG.c_str(), "Psi2SJpsi", (isPbPb?"PbPb":"PP"), plotLabel.c_str(), (cut.dMuon.Pt.Min*10.0), (cut.dMuon.Pt.Max*10.0), (cut.dMuon.AbsRap.Min*10.0), (cut.dMuon.AbsRap.Max*10.0), cut.Centrality.Start, cut.Centrality.End)); cFig->Clear(); cFig->Close(); // Save the workspace if (saveWS) { gSystem->mkdir(Form("%sresult/%s/", outputDir.c_str(), DSTAG.c_str()), kTRUE); TFile *file = NULL; file = new TFile(Form("%sresult/%s/FIT_%s_%s_%s%s_pt%.0f%.0f_rap%.0f%.0f_cent%d%d.root", outputDir.c_str(), DSTAG.c_str(), DSTAG.c_str(), "Psi2SJpsi", (isPbPb?"PbPb":"PP"), plotLabel.c_str(), (cut.dMuon.Pt.Min*10.0), (cut.dMuon.Pt.Max*10.0), (cut.dMuon.AbsRap.Min*10.0), (cut.dMuon.AbsRap.Max*10.0), cut.Centrality.Start, cut.Centrality.End), "RECREATE"); if (!file) { cout << "[ERROR] Output root file with fit results could not be created!" << endl; } else { file->cd(); myws.Write("workspace"); file->Write(); file->Close(); delete file; } } }
void testSelectionZee(char *test_datasetname, int test_evtRange){ rgen_ = new TRandom3(0); cout<< rgen_->Gaus(0,0.01) <<endl; dataversion = "v3"; datasetname = test_datasetname; evtRange = test_evtRange; egammaMVACorrection_LoadWeights(); fChain =new TChain("Analysis"); TString filename ; /// those files are preselected with two electron Et > 25GeV filename = TString( Form("/castor/cern.ch/user/y/yangyong/data/Run2011A/HiggsAnalysis/dielectronSkimmed/testAnalysisZee.%s.%s.allconv1.vtxmethod2.presel5.vtxtmva0.r%d.root",dataversion.c_str(),datasetname.c_str(),evtRange)); cout<<filename<<endl; fChain->Add(filename); TChain *fevtInfo = new TChain("evtInfo"); fevtInfo->Add(filename); fevtInfo->SetBranchAddress("totalNumberofEvents", &totalNumberofEvents); fevtInfo->SetBranchAddress("preselectedNumberofEvents", &preselectedNumberofEvents); fevtInfo->SetBranchAddress("datasettag", &datasettag); fevtInfo->GetEntry(0); string dname = datasettag->at(0); string dv = datasettag->at(1); int ntotal = totalNumberofEvents; int nskimmed = preselectedNumberofEvents; for(int n=1; n< fevtInfo->GetEntries(); n++){ fevtInfo->GetEntry(n); ntotal += totalNumberofEvents; nskimmed += preselectedNumberofEvents; } setBranchAddress_ele(); totalEntries = fChain->GetEntries(); cout<<"totalEntries " << totalEntries <<endl; ///get json file good lumis for each run vector<string> certFile; certFile.push_back("JsonFile/Cert_160404-163869_7TeV_May10ReReco_Collisions11_CMSSWConfig_v2.txtv1"); certFile.push_back("JsonFile/Cert_160404-167913_7TeV_PromptReco_Collisions11_CMSSWConfig.txt.afterMay10"); certFile.push_back("JsonFile/Cert_170249-172619_7TeV_ReReco5Aug_Collisions11_CMSSWConfig.txtv1"); certFile.push_back("JsonFile/Cert_160404-173692_7TeV_PromptReco_Collisions11_CMSSWConfig.txtv1.run172620up"); getLSrangeofEachRuns(certFile); TH1D *hh_pileupmc = new TH1D("hh_pileupmc","hh_npileup mc",51,-0.5,50.5); vector<double> weights_pileup; if( datasetname.find("SIM") != string::npos){ /////for PU reweighting (added root files together) filename = TString( Form("PileUPDistrubtion/testAnalysis.%s.%s.puHist.root",dataversion.c_str(),datasetname.c_str())); TFile *fpumc = new TFile(filename,"read"); TH1D *hh_npileupbx0 = (TH1D*)fpumc->Get("hh_npileupbx0"); TH1D *hh_npileupbx1 = (TH1D*)fpumc->Get("hh_npileupbx1"); TH1D *hh_npileupbxm1 = (TH1D*)fpumc->Get("hh_npileupbxm1"); TH1D *hh_npileupbxav = (TH1D*)fpumc->Get("hh_npileupbxav"); //right now using averaged TFile *fpudata = new TFile("PileUPDistrubtion/Pileup_2011_EPS_8_jul.root","read"); TH1D *hh_npileupdata = (TH1D*)fpudata->Get("pileup"); weights_pileup = LumiReWeighting_getWeights(hh_npileupdata, hh_npileupbxav); fpumc->Close(); fpudata->Close(); } filename = TString (Form("selres/testSelectionZee.%s.%s.r%d.root",dataversion.c_str(), datasetname.c_str(),evtRange)); cout<<filename<<endl; TFile *fnew = new TFile(filename,"recreate"); TH1I *hh_nevents = new TH1I("hh_nevents","total and skimm events",2,0,2); hh_nevents->SetBinContent(1,ntotal); hh_nevents->SetBinContent(2,nskimmed); vector<string> mpair_var; mpair_var.push_back("mpair_ebeb"); mpair_var.push_back("mpair_ebeb_highr9"); mpair_var.push_back("mpair_ebeb_lowr9"); mpair_var.push_back("mpair_eeee"); mpair_var.push_back("mpair_eeee_highr9"); mpair_var.push_back("mpair_eeee_lowr9"); mpair_var.push_back("mpair_eeee_highr9_loweps"); //eps_escraw < 0.05 mpair_var.push_back("mpair_eeee_highr9_higheps");//eps_escraw > 0.05 mpair_var.push_back("mpair_eeee_lowr9_loweps"); //eps_escraw < 0.05 mpair_var.push_back("mpair_eeee_lowr9_higheps");//eps_escraw > 0.05 RooRealVar *rv_mass = new RooRealVar("rv_mass","mass",100,0,1000); RooRealVar *rv_weight = new RooRealVar("rv_weight","weight",1.0,0,1E6); map<string,RooDataSet*> rhs_map_mpair; map<string,RooDataSet*> rhs_map_mpair_corr; for(int j=0; j< int( mpair_var.size()); j++){ string mpairname = mpair_var[j]; TString rname = TString( Form("rhs_%s",mpairname.c_str()) ); rhs_map_mpair[mpairname] = new RooDataSet(rname,rname,RooArgList(*rv_mass,*rv_weight),rv_weight->GetName()); mpairname = string (Form("%s_corr",mpair_var[j].c_str())); rname = TString( Form("rhs_%s",mpairname.c_str()) ); rhs_map_mpair_corr[mpairname] = new RooDataSet(rname,rname,RooArgList(*rv_mass,*rv_weight),rv_weight->GetName()); } map<string,TH1F*> hh_map_mpair; map<string,TH1F*> hh_map_mpaircorr; for(int j=0; j< int( mpair_var.size()); j++){ string mpairname = mpair_var[j]; filename = TString(Form("hh_%s",mpairname.c_str())); TH1F *hhtmp = new TH1F(filename,filename,2000,0,200); hh_map_mpair[mpairname] = hhtmp; hh_map_mpair[mpairname] ->Sumw2(); mpairname = string (Form("%s_corr",mpair_var[j].c_str())); filename = TString(Form("hh_%s",mpairname.c_str())); TH1F *hhtmp2 = new TH1F(filename,filename,2000,0,200); hh_map_mpaircorr[mpairname] = hhtmp2; hh_map_mpaircorr[mpairname] ->Sumw2(); } bool goodCurLumiBlock = false; int curLumiBlock = -1; int curRun = -1; vector<int> runNotUsed; float en[2]; float encorr[2]; float pt[2]; float eta[2]; float phi[2]; float res[20]; float scr9[2]; float scrps[2]; float mpaircorr; int nsel = 0; bool firstEvent = true; ////loop over all events ( di-photon skimmed) for(entry = 0; entry < totalEntries; entry ++){ fChain->GetEntry(entry); if(entry % 1000 ==0 ) cout<<" entry " <<entry<<endl; if( firstEvent){ loadecalGapCoordinates(); firstEvent = false; } ///JSON file good run and LS if( isRealData ){ vector<int>::iterator it = find(goodRunList.begin(),goodRunList.end(),runNumber); if( it == goodRunList.end()){ vector<int>::iterator it2 = find(runNotUsed.begin(),runNotUsed.end(),runNumber); if( it2 == runNotUsed.end()){ runNotUsed.push_back(runNumber); } continue; } if( curLumiBlock != lumiBlock || curRun != runNumber){ /// a new lumiBlock or starting of a new Run curLumiBlock = lumiBlock; curRun = runNumber; goodCurLumiBlock = checkLumiBlockofRun(); //check this lumiBlock } if( ! goodCurLumiBlock) continue; } for(int j=0; j< nElectron; j++){ electronecalEnergy[j] = electronscenergy[j]; //right now ecalEnerg = scEnergy float corr = getElectronCorrection(j); ///correction from regression electronecalEnergyCorr[j] = (electronscrawEnergy[j] + electronscpreshowerEnergy[j]) * corr; } vector<int> indsel; for(int j=0; j< nElectron; j++){ if( electronecalDrivenSeed[j] ==0) continue; float et = electronscenergy[j] * sin(2*atan(exp(-electroneta[j]))); if( et < 30 ) continue; ///ET > 30 if(! passElectronID(j,3)) continue; ///right now WP80 indsel.push_back(j); } if( int(indsel.size()) <2) continue; nsel ++; for(int j=0; j<2;j++){ int k = indsel[j]; en[j] = electronecalEnergy[k]; encorr[j] = electronecalEnergyCorr[k]; eta[j] = electrongsfTracketa[k]; phi[j] = electrongsfTrackphi[k]; scr9[j] = electrone3x3[k]/electronscrawEnergy[k]; scrps[j] = electronscpreshowerEnergy[k] / electronscrawEnergy[k]; } calcPairObjects(11,11,en,eta,phi,res); mpair = res[0]; calcPairObjects(11,11,encorr,eta,phi,res); mpaircorr = res[0]; double evtweight =1; ///get pile up weghit if( ! isRealData){ int npubxav = 0; for(unsigned int j =0; j < pileupBunchX->size(); j++){ int BX = pileupBunchX->at(j); int npv = pileupNInteraction->at(j); if( BX >=-1 && BX <= 1){ npubxav += npv; } } npvbxav = npubxav*1.0/3; int bin_weight = hh_pileupmc->FindFixBin(npvbxav) -1; double puwt = LumiReWeighting_weightINT_v2(bin_weight, weights_pileup); evtweight = puwt; } int ind1 = indsel[0]; int ind2 = indsel[1]; int bothEB = fabs(electronsceta[ind1]) < 1.482 && fabs(electronsceta[ind2]) < 1.482; int bothEE = fabs(electronsceta[ind1]) > 1.482 && fabs(electronsceta[ind2]) > 1.482; int bothHighR9 = scr9[0] > 0.94 && scr9[1] > 0.94; int bothLowR9 = scr9[0] < 0.94 && scr9[1] < 0.94; int bothLowEPS = scrps[0] < 0.05 && scrps[1] < 0.05; int bothHighEPS = scrps[0] > 0.05 && scrps[1] > 0.05; bool fillflag[20] = {bothEB, bothEB && bothHighR9, bothEB && bothLowR9, bothEE, bothEE && bothHighR9, bothEE && bothLowR9, bothEE && bothHighR9 && bothLowEPS, bothEE && bothHighR9 && bothHighEPS, bothEE && bothLowR9 && bothLowEPS, bothEE && bothLowR9 && bothHighEPS}; for(int j=0; j< int( mpair_var.size()); j++){ if( fillflag[j]==false) continue; string mpairname = mpair_var[j]; rv_mass->setVal(mpair); hh_map_mpair[mpairname]->Fill(mpair,evtweight); rhs_map_mpair[mpairname]->add(*rv_mass,evtweight); rv_mass->setVal(mpaircorr); mpairname = TString( Form("%s_corr",mpair_var[j].c_str())); hh_map_mpaircorr[mpairname]->Fill(mpaircorr,evtweight); rhs_map_mpair_corr[mpairname]->add(*rv_mass,evtweight); } } cout <<" nsel" << nsel <<endl; fnew->cd(); //RooContainer_Save(); RooWorkspace *w = new RooWorkspace("zeeShape","workspace") ; for (std::map<string,RooDataSet*>::iterator it_data = rhs_map_mpair.begin() ;it_data != rhs_map_mpair.end();it_data++) { w->import(*it_data->second); } for (std::map<string,RooDataSet*>::iterator it_data = rhs_map_mpair_corr.begin() ;it_data != rhs_map_mpair_corr.end();it_data++) { w->import(*it_data->second); } w->Write(); fnew->Write(); fnew->Close(); }
void exercise_0() { //First, define the observable for the analysis RooRealVar mass("mass","mass",100.,150.); //Construct the signal P.D.F., a gaussian function RooRealVar mean("mean","mean of gaussian",125.,110.,140.); RooRealVar sigma("sigma","width of gaussian",6.,0.01,10.); RooGaussian gauss("gauss","Signal PDF",mass,mean,sigma); //Now define the background P.D.F, a simple exponential RooRealVar tau("tau","exponential function parameter",-0.05,-10.,-0.001); RooExponential exponential("exponential","Background PDF",mass,tau); //Now construct the total PDF. We need to define the number of signal and background events in the model // //for UL calculation use Nsig = 5, Nbkg = 100 //for mH calculation use Nsig = 50, Nbkg = 450 //for systematics inclusion use Nsig = 20, Nbkg = 100, also, with the width set to 5 GeV!! RooRealVar Nsig("Nsig","Number of signal events",20.,0.,200.); RooRealVar Nbkg("Nbkg","Number of background events",100.,0.,1000.); RooAddPdf PDFtot("PDFtot","PDFtot",RooArgList(gauss,exponential),RooArgList(Nsig,Nbkg)); //Now generate a sample with the total PDF RooDataSet *data = PDFtot.generate(RooArgSet(mass),NumEvents(Nsig.getVal()+Nbkg.getVal()),Extended(1)); //Now fit the PDF to the data //For low statistics, fix the mean and the width mean.setConstant(kTRUE); sigma.setConstant(kTRUE); PDFtot.fitTo(*data); // Print values of mean and sigma (that now reflect fitted values and errors, unless you fixed them) mean.Print(); sigma.Print(); //Now plot the data and the fitted PDF RooPlot *massframe = mass.frame(50); data->plotOn(massframe); PDFtot.plotOn(massframe); //One can also plot the single components of the total PDF, like the background component PDFtot.plotOn(massframe,Components(exponential),LineStyle(kDashed),LineColor(kRed)); //Actually plot the result TCanvas c1; c1.cd(); massframe->Draw(); c1.SaveAs("exercise_0.gif"); //Now save the data and the PDF into a Workspace, for later use for statistical analysis //and save the workspace into a ROOT file RooWorkspace* w = new RooWorkspace("w") ; w->import(*data); w->import(PDFtot); TFile fOut("exercise_0.root","RECREATE"); fOut.cd(); w->Write(); fOut.Close(); }
int main(int argc, char *argv[]){ OptionParser(argc,argv); RooMsgService::instance().setGlobalKillBelow(RooFit::ERROR); RooMsgService::instance().setSilentMode(true); system(Form("mkdir -p %s",outdir_.c_str())); vector<string> procs; split(infilenames_,infilenamesStr_,boost::is_any_of(",")); TPython::Exec("import os,imp,re"); for (unsigned int i =0 ; i<infilenames_.size() ; i++){ TFile *infile = TFile::Open(infilenames_[i].c_str()); string outname =(string) TPython::Eval(Form("'%s'.split(\"/\")[-1].replace('root','_reduced.root')",infilenames_[i].c_str())); TFile *outfile = TFile::Open(outname.c_str(),"RECREATE") ; TDirectory* saveDir = outfile->mkdir("tagsDumper"); saveDir->cd(); RooWorkspace *inWS = (RooWorkspace*) infile->Get("tagsDumper/cms_hgg_13TeV"); RooRealVar *intLumi = (RooRealVar*)inWS->var("IntLumi"); RooWorkspace *outWS = new RooWorkspace("cms_hgg_13TeV"); outWS->import(*intLumi); std::list<RooAbsData*> data = (inWS->allData()) ; std::cout <<" [INFO] Reading WS dataset contents: "<< std::endl; for (std::list<RooAbsData*>::const_iterator iterator = data.begin(), end = data.end(); iterator != end; ++iterator ) { RooDataSet *dataset = dynamic_cast<RooDataSet *>( *iterator ); if (dataset) { RooDataSet *datasetReduced = (RooDataSet*) dataset->emptyClone(dataset->GetName(),dataset->GetName()); TRandom3 r; r.Rndm(); double x[dataset->numEntries()]; r.RndmArray(dataset->numEntries(),x); int desiredEntries = floor(0.5+ dataset->numEntries()*fraction_); int modFraction = floor(0.5+ 1/fraction_); int finalEventCount=0; for (int j =0; j < dataset->numEntries() ; j++){ if( j%modFraction==0){ finalEventCount++; } } float average_weight= dataset->sumEntries()/finalEventCount; for (int j =0; j < dataset->numEntries() ; j++){ if( j%modFraction==0){ dataset->get(j); datasetReduced->add(*(dataset->get(j)),average_weight); } } float entriesIN =dataset->sumEntries(); float entriesOUT =datasetReduced->sumEntries(); if(verbose_){ std::cout << "Original dataset " << *dataset <<std::endl; std::cout << "Reduced dataset " << *datasetReduced <<std::endl; std::cout << "********************************************" <<std::endl; std::cout << "fraction (obs) : " << entriesOUT/entriesIN << std::endl; std::cout << "fraction (exp) : " << fraction_ << std::endl; std::cout << "********************************************" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "********************************************" <<std::endl; } outWS->import(*datasetReduced); } RooDataHist *datahist = dynamic_cast<RooDataHist *>( *iterator ); if (datahist) { RooDataHist *datahistOUT = (RooDataHist*) datahist->emptyClone(datahist->GetName(),datahist->GetName()); TRandom3 r; r.Rndm(); for (int j =0; j < datahist->numEntries() ; j++){ datahistOUT->add(*(datahist->get(j)),datahist->weight()); } float w =datahistOUT->sumEntries(); float z =datahist->sumEntries(); if(verbose_){ std::cout << "Original datahist " << *datahist <<std::endl; std::cout << "Reduced datahist " << *datahistOUT<<std::endl; std::cout << "********************************************" <<std::endl; std::cout << "WH fraction (obs) : " << w/(z) <<std::endl; std::cout << "WH fraction (exp) : " << fraction_ << std::endl; std::cout << "********************************************" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "" <<std::endl; std::cout << "********************************************" <<std::endl; } outWS->import(*datahistOUT); } } saveDir->cd(); outWS->Write(); outfile->Close(); infile->Close(); } }
int main(int argc, char *argv[]){ OptionParser(argc,argv); TStopwatch sw; sw.Start(); TFile *inFile = TFile::Open(filename_.c_str()); RooWorkspace *inWS = (RooWorkspace*)inFile->Get("cms_hgg_workspace"); RooRealVar *mass = (RooRealVar*)inWS->var("CMS_hgg_mass"); mass->SetTitle("m_{#gamma#gamma}"); mass->setUnit("GeV"); RooRealVar *intLumi = (RooRealVar*)inWS->var("IntLumi"); RooRealVar *MH = new RooRealVar("MH","m_{H}",mhLow_,mhHigh_); MH->setUnit("GeV"); RooRealVar *MH_SM = new RooRealVar("MH_SM","m_{H} (SM)",mhLow_,mhHigh_); RooRealVar *DeltaM = new RooRealVar("DeltaM","#Delta m_{H}",0.,-10.,10.); DeltaM->setUnit("GeV"); RooAddition *MH_2 = new RooAddition("MH_2","m_{H} (2)",RooArgList(*MH,*DeltaM)); RooRealVar *higgsDecayWidth = new RooRealVar("HiggsDecayWidth","#Gamma m_{H}",0.,0.,10.); TFile *outFile = new TFile(outfilename_.c_str(),"RECREATE"); RooWorkspace *outWS = new RooWorkspace("wsig_8TeV"); transferMacros(inFile,outFile); // run fits for each line in datfile ifstream datfile; datfile.open(datfilename_.c_str()); if (datfile.fail()) exit(1); while (datfile.good()){ string line; getline(datfile,line); if (line=="\n" || line.substr(0,1)=="#" || line==" " || line.empty()) continue; vector<string> els; split(els,line,boost::is_any_of(" ")); assert(els.size()==4); string proc = els[0]; int cat = boost::lexical_cast<int>(els[1]); int nGaussiansRV = boost::lexical_cast<int>(els[2]); int nGaussiansWV = boost::lexical_cast<int>(els[3]); cout << "-----------------------------------------------------------------" << endl; cout << Form("Running fits for proc:%s - cat:%d with nGausRV:%d nGausWV:%d",proc.c_str(),cat,nGaussiansRV,nGaussiansWV) << endl; cout << "-----------------------------------------------------------------" << endl; // get datasets for each MH here map<int,RooDataSet*> datasetsRV; map<int,RooDataSet*> datasetsWV; map<int,RooDataSet*> datasets; for (int mh=mhLow_; mh<=mhHigh_; mh+=5){ RooDataSet *dataRV = (RooDataSet*)inWS->data(Form("sig_%s_mass_m%d_rv_cat%d",proc.c_str(),mh,cat)); RooDataSet *dataWV = (RooDataSet*)inWS->data(Form("sig_%s_mass_m%d_wv_cat%d",proc.c_str(),mh,cat)); RooDataSet *data = (RooDataSet*)inWS->data(Form("sig_%s_mass_m%d_cat%d",proc.c_str(),mh,cat)); datasetsRV.insert(pair<int,RooDataSet*>(mh,dataRV)); datasetsWV.insert(pair<int,RooDataSet*>(mh,dataWV)); datasets.insert(pair<int,RooDataSet*>(mh,data)); } // these guys do the fitting // right vertex InitialFit initFitRV(mass,MH,mhLow_,mhHigh_); initFitRV.setVerbosity(verbose_); initFitRV.buildSumOfGaussians(Form("%s_cat%d",proc.c_str(),cat),nGaussiansRV); initFitRV.setDatasets(datasetsRV); initFitRV.runFits(1); initFitRV.saveParamsToFileAtMH(Form("dat/in/%s_cat%d_rv.dat",proc.c_str(),cat),125); initFitRV.loadPriorConstraints(Form("dat/in/%s_cat%d_rv.dat",proc.c_str(),cat),constraintValue_); initFitRV.runFits(1); initFitRV.plotFits(Form("plots/%s_cat%d/rv",proc.c_str(),cat)); map<int,map<string,RooRealVar*> > fitParamsRV = initFitRV.getFitParams(); // wrong vertex InitialFit initFitWV(mass,MH,mhLow_,mhHigh_); initFitWV.setVerbosity(verbose_); initFitWV.buildSumOfGaussians(Form("%s_cat%d",proc.c_str(),cat),nGaussiansWV,recursive_); initFitWV.setDatasets(datasetsWV); initFitWV.runFits(1); initFitWV.saveParamsToFileAtMH(Form("dat/in/%s_cat%d_wv.dat",proc.c_str(),cat),125); initFitWV.loadPriorConstraints(Form("dat/in/%s_cat%d_wv.dat",proc.c_str(),cat),constraintValue_); initFitWV.runFits(1); initFitRV.plotFits(Form("plots/%s_cat%d/wv",proc.c_str(),cat)); map<int,map<string,RooRealVar*> > fitParamsWV = initFitWV.getFitParams(); //these guys do the interpolation // right vertex LinearInterp linInterpRV(MH,mhLow_,mhHigh_,fitParamsRV,doSecondaryModels_); linInterpRV.setVerbosity(verbose_); linInterpRV.setSecondaryModelVars(MH_SM,DeltaM,MH_2,higgsDecayWidth); linInterpRV.interpolate(nGaussiansRV); map<string,RooSpline1D*> splinesRV = linInterpRV.getSplines(); // wrong vertex LinearInterp linInterpWV(MH,mhLow_,mhHigh_,fitParamsWV,doSecondaryModels_); linInterpWV.setVerbosity(verbose_); linInterpWV.setSecondaryModelVars(MH_SM,DeltaM,MH_2,higgsDecayWidth); linInterpWV.interpolate(nGaussiansWV); map<string,RooSpline1D*> splinesWV = linInterpWV.getSplines(); // this guy constructs the final model with systematics, eff*acc etc. FinalModelConstruction finalModel(mass,MH,intLumi,mhLow_,mhHigh_,proc,cat,nInclusiveCats_,doSecondaryModels_,systfilename_,verbose_,false); finalModel.setSecondaryModelVars(MH_SM,DeltaM,MH_2,higgsDecayWidth); finalModel.setRVsplines(splinesRV); finalModel.setWVsplines(splinesWV); finalModel.setRVdatasets(datasetsRV); finalModel.setWVdatasets(datasetsWV); finalModel.setSTDdatasets(datasets); finalModel.buildRvWvPdf("hggpdfsmrel",nGaussiansRV,nGaussiansWV,recursive_); finalModel.getNormalization(); finalModel.plotPdf("plots"); finalModel.save(outWS); } datfile.close(); sw.Stop(); cout << "Whole fitting process took..." << endl; cout << "\t"; sw.Print(); sw.Start(); cout << "Starting to combine fits..." << endl; // this guy packages everything up Packager packager(outWS,splitVH_,nCats_,mhLow_,mhHigh_); packager.packageOutput(); sw.Stop(); cout << "Combination complete." << endl; cout << "Whole process took..." << endl; cout << "\t"; sw.Print(); cout << "Writing to file..." << endl; outFile->cd(); outWS->Write(); outFile->Close(); inFile->Close(); cout << "Done." << endl; return 0; }
void testBackground(char* fileName="../dataFiles/forMatthew/summer11_data_lowmass.root",double lowMassCut=120, double highMassCut=170, int mH=150){ gROOT->ProcessLine(".L ../PDFs/Roo2l2jMasses2D_Bkg.cc+"); //================== measurables cout << "initializing measurables..." <<endl; RooRealVar mLL("mLL","mZ*",20,80); RooRealVar mZZ("mZZ","m_{ZZ}",lowMassCut,highMassCut); RooRealVar mJJ("mJJ","m_{jj}",50,150); RooRealVar nBTags("nBTags","nBTags",-1,3); RooRealVar met("met","met",0,1000); //================== P_1(m'Z*,mZZ) ================== //============================= cout << "initializing parameters... " << endl; RooRealVar mZ("mZ","m_{Z}",60,120); RooRealVar Gamma("Gamma","#Gamma",0,100); mZ.setVal(91.2); mZ.setConstant(kTRUE); Gamma.setVal(0.); Gamma.setConstant(kTRUE); RooRealVar p1("p1","p1",1.54516e+01.,0,1000); //p1.setConstant(kTRUE); RooRealVar p2("p2","p2",1.54516e+01.,0,1000); //p2.setConstant(kTRUE); RooPolynomial P1("P1","P1",mLL,RooArgList(p1),0); RooPolynomial P2("P2","P2",mZZ,RooArgList(p2),0); RooProdPdf totalPDF_bkg("totalPDF_bkg","totalPDF_bkg",P1,P2); //============== load data ======================== //============================ cout << "loading data..." << endl; TFile *file = new TFile(fileName); char cutString_SB[100], cutString_0btag[100],cutString_1btag[100],cutString_2btag[100]; char cutString_SB_0btag[100],cutString_SB_1btag[100],cutString_SB_2btag[100]; sprintf(cutString_SB_0btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&(mJJ<75||mJJ>105)&&nBTags==0",highMassCut,lowMassCut); sprintf(cutString_SB_1btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&(mJJ<75||mJJ>105)&&nBTags==1",highMassCut,lowMassCut); sprintf(cutString_SB_2btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&(mJJ<75||mJJ>105)&&nBTags==2&&met<50",highMassCut,lowMassCut); sprintf(cutString_SB,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&((mJJ>60&&mJJ<75)||(mJJ<130&&mJJ>105))",highMassCut,lowMassCut); sprintf(cutString_0btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&mJJ>75&&mJJ<105&&nBTags==0",highMassCut,lowMassCut); sprintf(cutString_1btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&mJJ>75&&mJJ<105&&nBTags==1",highMassCut,lowMassCut); sprintf(cutString_2btag,"mZZ<%f&&mZZ>%f&&mLL>20&&mLL<80&&mJJ>75&&mJJ<105&&nBTags==2&&met<50",highMassCut,lowMassCut); cout << "check1" << endl; RooDataSet data_SB_0btag("data_SB_0btag","data_SB_0btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags),cutString_SB_0btag); RooDataSet data_SB_1btag("data_SB_1btag","data_SB_1btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags),cutString_SB_1btag); RooDataSet data_SB_2btag("data_SB_2btag","data_SB_2btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags,met),cutString_SB_2btag); RooDataSet data_SB("data_SB","data_SB",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags),cutString_SB); RooDataSet data_0btag("data_0btag","data_0btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags),cutString_0btag); RooDataSet data_0b=(RooDataSet)data_0btag.reduce(RooArgSet(mZZ,mLL)); RooDataSet data_1btag("data_1btag","data_1btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags),cutString_1btag); RooDataSet data_1b=(RooDataSet)data_1btag.reduce(RooArgSet(mZZ,mLL)); RooDataSet data_2btag("data_2btag","data_2btag",(TTree*)file->Get("AngularInfo"),RooArgSet(mZZ,mLL,mJJ,nBTags,met),cutString_2btag); RooDataSet data_2b=(RooDataSet)data_2btag.reduce(RooArgSet(mZZ,mLL)); cout << "fitting data..." << endl; totalPDF_bkg.fitTo(data_SB); p1.setConstant(kTRUE); p2.setConstant(kTRUE); cout << "plotting data/fits..." << endl; RooPlot *plot=mLL.frame(20,80,40); RooPlot *plot2=mZZ.frame(lowMassCut,highMassCut,40); data_SB.plotOn(plot2); totalPDF_bkg.plotOn(plot2);//DrawOption("F"),FillColor(3)); data_SB.plotOn(plot); totalPDF_bkg.plotOn(plot);//,DrawOption("F"),FillColor(3)); cout << "drawing..." << endl; TCanvas*c = new TCanvas("c","c",800,400); c->Divide(2,1); c->cd(1); plot->Draw(); c->cd(2); plot2->Draw(); for (int i=0; i<plot2->numItems(); i++) { TString obj_name=plot2->nameOf(i); if (obj_name=="") continue; cout << Form("%d. '%s'\n",i,obj_name.Data()); } TLegend *leg = new TLegend(.2,.8,.6,.6); leg->SetTextSize(0.036); leg->SetBorderSize(0); leg->SetFillColor(0); leg->AddEntry("totalPDF_bkg_Int[mLL]_Norm[mLL,mZZ]","Background Fit","l"); leg->AddEntry("h_data_SB","Inclusive Sideband","p"); leg->Draw(); char inWorkspace[100]; sprintf(inWorkspace,"2DWorkspace_%i.root",mH); char outWorkspace[100]; sprintf(outWorkspace,"Final2DWorkspace_%i.root",mH); TFile *workspaceFile = new TFile(inWorkspace); RooWorkspace* w = (RooWorkspace*) workspaceFile->Get("w"); w->import(totalPDF_bkg); w->import(data_0b); w->import(data_1b); w->import(data_2b); TFile *newFile = new TFile(outWorkspace,"RECREATE"); w->Write("w"); }
string runQuickRejig(string oldfilename, int ncats){ string newfilename="TestWS.root"; TFile *oldFile = TFile::Open(oldfilename.c_str()); TFile *newFile = new TFile(newfilename.c_str(),"RECREATE"); RooWorkspace *oldWS = (RooWorkspace*)oldFile->Get("cms_hgg_workspace"); RooWorkspace *newWS = new RooWorkspace("wsig_8TeV"); RooRealVar *mass = (RooRealVar*)oldWS->var("CMS_hgg_mass"); RooDataSet *tot; RooRealVar *normT1 = new RooRealVar("nT1","nT1",500,0,550); RooRealVar *meanT1 = new RooRealVar("mT1","mT1",125,122,128); RooRealVar *sigmaT1 = new RooRealVar("sT1","sT1",3.1,1.,10.); RooGaussian *gausT1 = new RooGaussian("gT1","gT1",*mass,*meanT1,*sigmaT1); RooRealVar *normT2 = new RooRealVar("nT2","nT2",2,0,500); RooRealVar *meanT2 = new RooRealVar("mT2","mT2",125,122,128); RooRealVar *sigmaT2 = new RooRealVar("sT2","sT2",1.7,0.,10.); RooGaussian *gausT2 = new RooGaussian("gT2","gT2",*mass,*meanT2,*sigmaT2); RooRealVar *normT3 = new RooRealVar("nT3","nT3",2,0,500); RooRealVar *meanT3 = new RooRealVar("mT3","mT3",125,122,128); RooRealVar *sigmaT3 = new RooRealVar("sT3","sT3",1.7,0.,10.); RooGaussian *gausT3 = new RooGaussian("gT3","gT3",*mass,*meanT3,*sigmaT3); RooAddPdf *gausT = new RooAddPdf("gT","gT",RooArgList(*gausT1,*gausT2,*gausT3),RooArgList(*normT1,*normT2,*normT3)); for (int cat=0; cat<ncats; cat++){ RooDataSet *thisData = (RooDataSet*)oldWS->data(Form("sig_ggh_mass_m125_cat%d",cat)); newWS->import(*thisData); RooRealVar *norm1 = new RooRealVar(Form("n1%d",cat),Form("n1%d",cat),500,0,550); RooRealVar *mean1 = new RooRealVar(Form("m1%d",cat),Form("m1%d",cat),125,122,128); RooRealVar *sigma1 = new RooRealVar(Form("s1%d",cat),Form("s1%d",cat),3.1,1.,10.); RooGaussian *gaus1 = new RooGaussian(Form("g1%d",cat),Form("g1%d",cat),*mass,*mean1,*sigma1); RooRealVar *norm2 = new RooRealVar(Form("n2%d",cat),Form("n2%d",cat),2,0,500); RooRealVar *mean2 = new RooRealVar(Form("m2%d",cat),Form("m2%d",cat),125,122,128); RooRealVar *sigma2 = new RooRealVar(Form("s2%d",cat),Form("s2%d",cat),1.7,0.,10.); RooGaussian *gaus2 = new RooGaussian(Form("g2%d",cat),Form("g2%d",cat),*mass,*mean2,*sigma2); RooRealVar *norm3 = new RooRealVar(Form("n3%d",cat),Form("n3%d",cat),2,0,500); RooRealVar *mean3 = new RooRealVar(Form("m3%d",cat),Form("m3%d",cat),125,122,128); RooRealVar *sigma3 = new RooRealVar(Form("s3%d",cat),Form("s3%d",cat),1.7,0.,10.); RooGaussian *gaus3 = new RooGaussian(Form("g3%d",cat),Form("g3%d",cat),*mass,*mean3,*sigma3); RooAddPdf *gaus = new RooAddPdf(Form("g%d",cat),"g",RooArgList(*gaus1,*gaus2,*gaus3),RooArgList(*norm1,*norm2,*norm3)); gaus->fitTo(*thisData,SumW2Error(kTRUE)); newWS->import(*gaus); if (cat==0) { tot = thisData; tot->SetName("sig_ggh_m125"); } else tot->append(*thisData); } newWS->import(*tot); gausT->fitTo(*tot,SumW2Error(kTRUE)); newWS->import(*gausT); newWS->Write(); oldFile->Close(); newFile->Close(); delete newFile; delete newWS; return newfilename; }
int main (int argc, char **argv) { const char* chInFile = "ws.root"; const char* chOutFile = "ws_data.root"; const char* chRootFile = "BDT20.root"; const char* chCut = ""; char option_char; while ( (option_char = getopt(argc,argv, "i:o:r:c:")) != EOF ) switch (option_char) { case 'i': chInFile = optarg; break; case 'o': chOutFile = optarg; break; case 'r': chRootFile = optarg; break; case 'c': chCut = optarg; break; case '?': fprintf (stderr, "usage: %s [i<input file> o<output file>]\n", argv[0]); } cout << "In Ws = " << chInFile << endl; cout << "Out Ws = " << chOutFile << endl; cout << "Data From = " << chRootFile << endl; cout << "Extra Cut = " << chCut << endl; TFile* in_file = new TFile(chInFile); RooWorkspace *rws = (RooWorkspace*) in_file->Get("rws"); TFile* tree_file = new TFile(chRootFile); TTree* tree = (TTree*) tree_file->Get("tree"); TFile* out_file = new TFile(chOutFile, "RECREATE"); RooArgSet allVars(*rws->var("m"),*rws->var("t"),*rws->var("et"),*rws->var("cpsi"),*rws->var("ctheta"),*rws->var("phi"),*rws->var("d")); RooDataSet* data = new RooDataSet("data","data",allVars); RooDataSet* dataBkg = new RooDataSet("dataBkg","dataBkg",allVars); TCut* cut = new TCut("5.17<bs_mass && bs_mass<5.57 && bs_epdl<0.02 && bs_pdl<0.40 && bs_pdl>-0.15 && 1.01<phi_mass && phi_mass<1.03"); *cut += chCut; tree->Draw(">>entry_list", *cut, "entrylist"); TEntryList* event_list = (TEntryList*) out_file->Get("entry_list"); Double_t dM, dT, dEt, dCpsi, dCtheta, dPhi, dd; Int_t ddDefined; tree->SetBranchAddress("bs_mass", &dM); tree->SetBranchAddress("bs_pdl", &dT); tree->SetBranchAddress("bs_epdl", &dEt); tree->SetBranchAddress("bs_angle_cpsi", &dCpsi); tree->SetBranchAddress("bs_angle_ctheta", &dCtheta); tree->SetBranchAddress("bs_angle_phi", &dPhi); tree->SetBranchAddress("newtag_ost", &dd); tree->SetBranchAddress("newtag_ost_defined", &ddDefined); for (Long_t i=0; i<event_list->GetN(); i++){ tree->GetEntry(event_list->GetEntry(i)); *rws->var("m")=dM; *rws->var("t")=dT/0.0299792458; *rws->var("et")=dEt/0.0299792458; *rws->var("cpsi")=dCpsi; *rws->var("ctheta")=dCtheta; *rws->var("phi")=dPhi; *rws->var("d")=0; ////rws->cat("dilution")->setIndex(0); if ( ddDefined==1 ){ ////rws->cat("dilution")->setIndex(1); *rws->var("d")=dd; } data->add(allVars); if (dM<5.29 || dM>5.44) dataBkg->add(allVars); } rws->import(*data); rws->import(*dataBkg); rws->Write("rws"); out_file->Close(); in_file->Close(); tree_file->Close(); cout << endl << "Done." << endl; }
void buildModel(int sel_i, TFile *fin, TDirectory *fout){ // Define outputs RooWorkspace *wout = new RooWorkspace(); wout->SetName(Form("normalization_cat%d",sel_i)); fout->cd(); // Input to this is TTrees // Setup the "x" variable and weights RooRealVar mvamet("metRaw","metRaw",200,1200); //RooRealVar mvamet("jet1mprune","jet1mprune",0,200); //RooRealVar mvamet("jet1tau2o1","jet1tau2o1",0,1); wout->import(mvamet); // TH1F Base Style std::string lName = "basehist"; //const int numberofBins = 18; //double myBins[numberofBins+1] = {200,210,220,230,240,250,260,270,280,290,300,310,320,330,350,380,430,500,1200}; //TH1F *lMet = new TH1F(lName.c_str(),lName.c_str(),numberofBins,myBins); TH1F *lMet = new TH1F(lName.c_str(),lName.c_str(),20,200,1200); //TH1F *lMet = new TH1F(lName.c_str(),lName.c_str(),20,0,1); // Make Datasets makeAndImportDataSets(fin,wout,mvamet); // ========================================================================================================== const int nProcs = 27; std::string procnames[nProcs]; procnames[0] = "DY"; procnames[1] = "RDY"; procnames[2] = "W"; procnames[3] = "WHT"; procnames[4] = "TT"; procnames[5] = "T"; procnames[6] = "ZZ"; procnames[7] = "WW"; procnames[8] = "WZ"; procnames[9] = "WH0"; procnames[10] = "ZH0"; procnames[11] = "GGH0"; procnames[12] = "VBFH0"; //procnames[12] = "DY_control_bkg_mc"; procnames[13] = "Zvv_control_mc"; procnames[14] = "T_control_bkg_mc"; procnames[15] = "TT_control_bkg_mc"; procnames[16] = "WW_control_bkg_mc"; procnames[17] = "WZ_control_bkg_mc"; procnames[18] = "ZZ_control_bkg_mc"; procnames[19] = "Wlv_control_mc_1"; procnames[20] = "Wlv_control_mc_2"; procnames[21] = "T_sl_control_bkg_mc"; procnames[22] = "TT_sl_control_bkg_mc"; procnames[23] = "WW_sl_control_bkg_mc"; procnames[24] = "WZ_sl_control_bkg_mc"; procnames[25] = "ZZ_sl_control_bkg_mc"; procnames[26] = "DY_sl_control_bkg_mc"; // Fill TF1s which do not need corrections for (int p0=0;p0<nProcs;p0++){ std::cout << "Filling hist for " << procnames[p0] << std::endl;; TH1F *hist_ = (TH1F*)generateTemplate(lMet, (TTree*)fin->Get(procnames[p0].c_str()), mvamet.GetName(), "weight",cutstring); // standard processes are TTrees hist_->Write(); } std::cout << "Filling hist for " << "data_obs" << std::endl;; TH1F *hist_ = (TH1F*)generateTemplate(lMet, (TTree*)fin->Get("data_obs"), mvamet.GetName(), "",cutstring); // standard processes are TTrees hist_->Write(); std::cout << "Filling hist for " << "Zvv_control" << std::endl;; hist_ = (TH1F*)generateTemplate(lMet, (TTree*)fin->Get("Zvv_control"), mvamet.GetName(), "",cutstring); // standard processes are TTrees hist_->Write(); std::cout << "Filling hist for " << "Wlv_control" << std::endl;; hist_ = (TH1F*)generateTemplate(lMet, (TTree*)fin->Get("Wlv_control"), mvamet.GetName(), "",cutstring); // standard processes are TTrees hist_->Write(); // ========================================================================================================== // Fit backgrounds to produce fit model #ifdef RUN_CORRECTION buildAndFitModels(fout,wout,mvamet,"Zvv"); buildAndFitModels(fout,wout,mvamet,"Wlv"); double mcyield = wout->data("DY")->sumEntries(); double datayield = wout->var("num_Zvv")->getVal(); // post fit number of data Z->mumu in control std::cout << "sfactor" << brscaleFactorZvv*datayield/mcyield << std::endl; TH1F *hist_zvv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("ratio_Zvv") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("DY") //TH1F *hist_zvv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("DY") , 1 /*run correction*/ , 1 /*brscaleFactorZvv*datayield/mcyield*/ /*additional weight*/); hist_zvv->Write(); std::cout << " DataCardInfo ---------------- " << std::endl; std::cout << Form(" Zvv_norm gmN %d %g ",(int)datayield,hist_zvv->Integral()/datayield) << std::endl; std::cout << " ----------------------------- " << std::endl; // Also correct normalization data why not? hist_zvv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("ratio_Zvv") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("Zvv_control_mc") , 1 /*run correction*/ , 1. /*additional weight*/); hist_zvv->Write(); // Single muon mcyield = wout->data("W")->sumEntries(); datayield = wout->var("num_Wlv")->getVal(); // post fit number of data W->munu in control std::cout << "sfactor" << brscaleFactorWlv*datayield/mcyield << std::endl; TH1F *hist_wlv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("ratio_Wlv") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("W") , 1 /*run correction*/ , 1./*brscaleFactorWlv*datayield/mcyield*/ /*additional weight*/); hist_wlv->Write(); std::cout << " DataCardInfo ---------------- " << std::endl; std::cout << Form(" Wlv_norm gmN %d %g ",(int)datayield,hist_wlv->Integral()/datayield) << std::endl; std::cout << " ----------------------------- " << std::endl; // Also correct normalization data why not? hist_wlv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("ratio_Wlv") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("Wlv_control_mc") , 1 /*run correction*/ , 1. /*additional weight*/); hist_wlv->Write(); //buildAndFitModels(fout,wout,mvamet,"Wlv"); //TH1F *hist_wlv = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("ratio_Wlv"), &mvamet, (RooDataSet*) wout->data("")); //hist_wlv->Write(); #endif // Since the W came in 2 parts, we can make the histogram based on the dataset (called uncorrected) TH1F *hist_wlv_uc = (TH1F*)generateTemplate(lMet, (RooFormulaVar*)wout->function("") , *(wout->var(mvamet.GetName())), (RooDataSet*) wout->data("W") , 1 /*run correction forwards*/ , 1./*brscaleFactorWlv*datayield/mcyield*/ /*additional weight*/); hist_wlv_uc->Write(); #ifdef RUN_BKGSYS // Load and run systematics from fit model std::vector<TH1F> v_th1f_Z; generateVariations(lMet,(RooFitResult*)fout->Get("fitResult_Zvv_control"),(RooFormulaVar*)wout->function("ratio_Zvv"),wout->var(mvamet.GetName()),v_th1f_Z,wout,"DY"); std::vector<TH1F> v_th1f_W; generateVariations(lMet,(RooFitResult*)fout->Get("fitResult_Wlv_control"),(RooFormulaVar*)wout->function("ratio_Wlv"),wout->var(mvamet.GetName()),v_th1f_W,wout,"W"); // Nice plots hist_zvv = (TH1F*)fout->Get("th1f_corrected_DY"); hist_wlv = (TH1F*)fout->Get("th1f_corrected_W"); double norm = hist_zvv->Integral(); int colit=2, styleit=1; TCanvas *can_zvv_systs = new TCanvas("can_zvv_systs","can_zvv_systs",800,600); TLegend *leg = new TLegend(0.6,0.4,0.89,0.89); leg->SetFillColor(0); leg->SetTextFont(42); hist_zvv->SetLineColor(1);hist_zvv->SetLineWidth(3); hist_zvv->Draw(); for (std::vector<TH1F>::iterator hit=v_th1f_Z.begin();hit!=v_th1f_Z.end();hit++){ hit->SetLineColor(colit); hit->SetLineWidth(3); hit->SetLineStyle(styleit%2+1); leg->AddEntry(&(*hit),hit->GetName(),"L"); hit->Scale(norm/hit->Integral()); hit->Draw("same"); hit->Write(); styleit++; if (styleit%2==1) colit++; } leg->Draw(); can_zvv_systs->Write(); norm = hist_wlv->Integral(); styleit=1; colit=2; TCanvas *can_wlv_systs = new TCanvas("can_wlv_systs","can_wlv_systs",800,600); TLegend *leg_2 = new TLegend(0.6,0.4,0.89,0.89); leg_2->SetFillColor(0); leg_2->SetTextFont(42); hist_wlv->SetLineColor(1);hist_wlv->SetLineWidth(3); hist_wlv->Draw(); for (std::vector<TH1F>::iterator hit=v_th1f_W.begin();hit!=v_th1f_W.end();hit++){ hit->SetLineColor(colit); hit->SetLineWidth(3); hit->SetLineStyle(styleit%2+1); leg_2->AddEntry(&(*hit),hit->GetName(),"L"); hit->Scale(norm/hit->Integral()); hit->Draw("same"); hit->Write(); styleit++; if (styleit%2==1) colit++; } leg_2->Draw(); can_wlv_systs->Write(); #endif // Save the work fout->cd(); wout->Write(); // Done! }
int main (int argc, char **argv) { const char* chInFile = "ws.root"; const char* chOutFile = "ws_gen.root"; int numSignal = 10000; int numBkg = 100000; char option_char; while ( (option_char = getopt(argc,argv, "i:o:s:b:")) != EOF ) switch (option_char) { case 'i': chInFile = optarg; break; case 'o': chOutFile = optarg; break; case 's': numSignal = atoi(optarg); break; case 'b': numBkg = atoi(optarg); break; case '?': fprintf (stderr, "usage: %s [i<input file> o<output file>]\n", argv[0]); } cout << "In File = " << chInFile << endl; cout << "Out File = " << chOutFile << endl; cout << "Signal Events = " << numSignal << endl; cout << "Bkg Events = " << numBkg << endl; TFile inFile(chInFile,"READ"); RooWorkspace* ws = (RooWorkspace*) inFile.Get("rws"); TFile outFile(chOutFile,"RECREATE"); /* ws->var("tau")->setVal(1.417); ws->var("DG")->setVal(0.151); ws->var("beta")->setVal(0.25); ws->var("A02")->setVal(0.553); ws->var("A1")->setVal(0.487); ws->var("delta_l")->setVal(3.15); ws->var("fs")->setVal(0.147); */ // ws->var("delta_l")->setConstant(kTRUE); // ws->var("delta_p")->setConstant(kTRUE); // ws->var("Dm")->setConstant(kTRUE); //*ws->var("xs") = numSignal/(numSignal+numBkg); // int numSignal = numEvents * ws->var("xs")->getVal(); // int numBkg = numEvents - numSignal; ws->factory("Gaussian::dilutionGauss(d,0,0.276)"); //ws->factory("SUM::dSignalPDF(xds[0.109]*dilutionGauss,TruthModel(d))"); //ws->factory("SUM::dBkgPDF(xdb[0.109]*dilutionGauss,TruthModel(d))"); ws->factory("SUM::dSignalPDF(xds[1]*dilutionGauss,TruthModel(d))"); ws->factory("SUM::dBkgPDF(xdb[1]*dilutionGauss,TruthModel(d))"); /* ws->factory("GaussModel::xetGaussianS(et,meanGaussEtS,sigmaGaussEtS)"); ws->factory("Decay::xerrorSignal(et,tauEtS,xetGaussianS,SingleSided]"); ws->factory("PROD::xsignalTimeAngle(timeAngle|et,xerrorSignal"); ws->factory("PROD::xsignal(massSignal,xsignalTimeAngle,DmConstraint)"); */ RooDataSet* dSignalData = ws->pdf("dSignalPDF")->generate(RooArgSet(*ws->var("d")),numSignal); RooDataSet *dataSignal = ws->pdf("signal")->generate(RooArgSet(*ws->var("m"),*ws->var("t"),*ws->var("et"),*ws->var("cpsi"),*ws->var("ctheta"),*ws->var("phi")), RooFit::ProtoData(*dSignalData)); ws->factory("GaussModel::xetGaussianPR(et,meanGaussEtPR,sigmaGaussEtPR)"); ws->factory("Decay::xerrBkgPR(et,tauEtPR,xetGaussianPR,SingleSided]"); ws->factory("GaussModel::xetGaussianNP(et,meanGaussEtNP,sigmaGaussEtNP)"); ws->factory("Decay::xerrBkgNP(et,tauEtNP,xetGaussianNP,SingleSided]"); /* Time */ ws->factory("GaussModel::xresolution(t,0,scale,et)"); ws->factory("Decay::xnegativeDecay(t,tauNeg,xresolution,Flipped)"); ws->factory("Decay::xpositiveDecay(t,tauPos,xresolution,SingleSided)"); ws->factory("Decay::xpositiveLongDecay(t,tauLngPos,xresolution,SingleSided)"); ws->factory("RSUM::xtBkgNP(xn*xnegativeDecay,xp*xpositiveDecay,xpositiveLongDecay"); /* Promt and Non-Prompt */ ws->factory("PROD::xtimeBkgNP(xtBkgNP|et,xerrBkgNP)"); ws->factory("PROD::xtimeBkgPR(xresolution|et,xerrBkgPR)"); ws->factory("PROD::xPrompt(massBkgPR,xtimeBkgPR,anglePR)"); ws->factory("PROD::xNonPrompt(massBkgNP,xtimeBkgNP,angleNP)"); ws->factory("SUM::xbackground(xprompt*xPrompt,xNonPrompt)"); RooDataSet* dBkgData = ws->pdf("dBkgPDF")->generate(RooArgSet(*ws->var("d")),numBkg); RooDataSet* dataBkg = ws->pdf("xbackground")->generate(RooArgSet(*ws->var("m"),*ws->var("t"),*ws->var("et"),*ws->var("cpsi"),*ws->var("ctheta"),*ws->var("phi")), numBkg); dataBkg->merge(dBkgData); dataSignal->SetName("dataGenSignal"); dataBkg->SetName("dataGenBkg"); ws->import(*dataSignal); ws->import(*dataBkg); ////ws->import(*dataBkg,RooFit::Rename("dataGenBkg")); dataSignal->append(*dataBkg); dataSignal->SetName("dataGen"); ws->import(*dataSignal); //RooFitResult *fit_result = ws->pdf("model")->fitTo(*ws->data("data"), RooFit::Save(kTRUE), RooFit::ConditionalObservables(*ws->var("d")), RooFit::NumCPU(2), RooFit::PrintLevel(3)); /* gROOT->SetStyle("Plain"); TCanvas canvas("canvas", "canvas", 400,400); RooPlot *m_frame = ws->var("t")->frame(); dataSignal->plotOn(m_frame, RooFit::MarkerSize(0.3)); m_frame->Draw(); canvas.SaveAs("m_toy_plot.png"); */ /* gROOT->SetStyle("Plain"); TCanvas canvas("canvas", "canvas", 800,400); canvas.Divide(2); canvas.cd(1); RooPlot *t_frame = ws->var("t")->frame(); ws->data("data")->plotOn(t_frame, RooFit::MarkerSize(0.3)); gPad->SetLogy(1); t_frame->Draw(); canvas.cd(2); RooPlot *et_frame = ws->var("et")->frame(); ws->data("data")->plotOn(et_frame,RooFit::MarkerSize(0.2)); ws->pdf("errorSignal")->plotOn(et_frame); gPad->SetLogy(1); et_frame->Draw(); canvas.SaveAs("t.png"); canvas.cd(2); gPad->SetLogy(0); RooPlot *cpsi_frame = ws.var("cpsi")->frame(); data->plotOn(cpsi_frame,RooFit::MarkerSize(0.2), RooFit::Rescale(1)); data2->plotOn(cpsi_frame, RooFit::LineColor(kBlue), RooFit::DrawOption("L")); cpsi_frame->Draw(); canvas.cd(3); RooPlot *ctheta_frame = ws.var("ctheta")->frame(); data->plotOn(ctheta_frame,RooFit::MarkerSize(0.2), RooFit::Rescale(1)); data2->plotOn(ctheta_frame, RooFit::LineColor(kBlue), RooFit::DrawOption("L")); ctheta_frame->Draw(); canvas.cd(4); RooPlot *phi_frame = ws.var("phi")->frame(); data->plotOn(phi_frame,RooFit::MarkerSize(0.2), RooFit::Rescale(1)); data2->plotOn(phi_frame, RooFit::LineColor(kBlue), RooFit::DrawOption("L")); phi_frame->Draw(); canvas.SaveAs("t.png"); */ ws->data("dataGen")->Print(); ws->data("dataGenSignal")->Print(); ws->data("dataGenBkg")->Print(); ws->Write("rws"); outFile.Close(); inFile.Close(); }
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(); }