void draw_data_mgg(TString folderName,bool blind=true,float min=103,float max=160) { TFile inputFile(folderName+"/data.root"); const int nCat = 5; TString cats[5] = {"HighPt","Hbb","Zbb","HighRes","LowRes"}; TCanvas cv; for(int iCat=0; iCat < nCat; iCat++) { RooWorkspace *ws = (RooWorkspace*)inputFile.Get(cats[iCat]+"_mgg_workspace"); RooFitResult* res = (RooFitResult*)ws->obj("fitresult_pdf_data"); RooRealVar * mass = ws->var("mgg"); mass->setRange("all",min,max); mass->setRange("blind",121,130); mass->setRange("low",106,121); mass->setRange("high",130,160); mass->setUnit("GeV"); mass->SetTitle("m_{#gamma#gamma}"); RooAbsPdf * pdf = ws->pdf("pdf"); RooPlot *plot = mass->frame(min,max,max-min); plot->SetTitle(""); RooAbsData* data = ws->data("data")->reduce(Form("mgg > %f && mgg < %f",min,max)); double nTot = data->sumEntries(); if(blind) data = data->reduce("mgg < 121 || mgg>130"); double nBlind = data->sumEntries(); double norm = nTot/nBlind; //normalization for the plot data->plotOn(plot); pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::Range("Full"),RooFit::LineWidth(0.1) ); plot->Print(); //add the fix error band RooCurve* c = plot->getCurve("pdf_Norm[mgg]_Range[Full]_NormRange[Full]"); const int Nc = c->GetN(); //TGraphErrors errfix(Nc); //TGraphErrors errfix2(Nc); TGraphAsymmErrors errfix(Nc); TGraphAsymmErrors errfix2(Nc); Double_t *x = c->GetX(); Double_t *y = c->GetY(); double NtotalFit = ws->var("Nbkg1")->getVal()*ws->var("Nbkg1")->getVal() + ws->var("Nbkg2")->getVal()*ws->var("Nbkg2")->getVal(); for( int i = 0; i < Nc; i++ ) { errfix.SetPoint(i,x[i],y[i]); errfix2.SetPoint(i,x[i],y[i]); mass->setVal(x[i]); double shapeErr = pdf->getPropagatedError(*res)*NtotalFit; //double totalErr = TMath::Sqrt( shapeErr*shapeErr + y[i] ); //total normalization error double totalErr = TMath::Sqrt( shapeErr*shapeErr + y[i]*y[i]/NtotalFit ); if ( y[i] - totalErr > .0 ) { errfix.SetPointError(i, 0, 0, totalErr, totalErr ); } else { errfix.SetPointError(i, 0, 0, y[i] - 0.01, totalErr ); } //2sigma if ( y[i] - 2.*totalErr > .0 ) { errfix2.SetPointError(i, 0, 0, 2.*totalErr, 2.*totalErr ); } else { errfix2.SetPointError(i, 0, 0, y[i] - 0.01, 2.*totalErr ); } /* std::cout << x[i] << " " << y[i] << " " << " ,pdf get Val: " << pdf->getVal() << " ,pdf get Prop Err: " << pdf->getPropagatedError(*res)*NtotalFit << " stat uncertainty: " << TMath::Sqrt(y[i]) << " Ntot: " << NtotalFit << std::endl; */ } errfix.SetFillColor(kYellow); errfix2.SetFillColor(kGreen); //pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kGreen),RooFit::Range("Full"), RooFit::VisualizeError(*res,2.0,kFALSE)); //pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kYellow),RooFit::Range("Full"), RooFit::VisualizeError(*res,1.0,kFALSE)); //pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kGreen),RooFit::Range("Full"), RooFit::VisualizeError(*res,2.0,kTRUE)); //pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kYellow),RooFit::Range("Full"), RooFit::VisualizeError(*res,1.0,kTRUE)); plot->addObject(&errfix,"4"); plot->addObject(&errfix2,"4"); plot->addObject(&errfix,"4"); data->plotOn(plot); TBox blindBox(121,plot->GetMinimum()-(plot->GetMaximum()-plot->GetMinimum())*0.015,130,plot->GetMaximum()); blindBox.SetFillColor(kGray); if(blind) { plot->addObject(&blindBox); pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kGreen),RooFit::Range("Full"), RooFit::VisualizeError(*res,2.0,kTRUE)); pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::FillColor(kYellow),RooFit::Range("Full"), RooFit::VisualizeError(*res,1.0,kTRUE)); } //plot->addObject(&errfix,"4"); //data->plotOn(plot); //pdf->plotOn(plot,RooFit::Normalization( norm ) ); //pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::Range("Full"),RooFit::LineWidth(1.5) ); pdf->plotOn(plot,RooFit::NormRange( "low,high" ),RooFit::Range("Full"), RooFit::LineWidth(1)); data->plotOn(plot); /* pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::Range("all"),RooFit::LineWidth(0.8) ); //pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::FillColor(kGreen),RooFit::Range("all"), RooFit::VisualizeError(*res,2.0,kFALSE)); //pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::FillColor(kYellow),RooFit::Range("all"), RooFit::VisualizeError(*res,1.0,kFALSE)); pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::FillColor(kGreen),RooFit::Range("all"), RooFit::VisualizeError(*res,2.0,kTRUE)); pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::FillColor(kYellow),RooFit::Range("all"), RooFit::VisualizeError(*res,1.0,kTRUE)); data->plotOn(plot); pdf->plotOn(plot,RooFit::Normalization(norm),RooFit::Range("all"),RooFit::LineWidth(0.8) ); */ TLatex lbl0(0.1,0.96,"CMS Preliminary"); lbl0.SetNDC(); lbl0.SetTextSize(0.042); plot->addObject(&lbl0); TLatex lbl(0.4,0.96,Form("%s Box",cats[iCat].Data())); lbl.SetNDC(); lbl.SetTextSize(0.042); plot->addObject(&lbl); TLatex lbl2(0.6,0.96,"#sqrt{s}=8 TeV L = 19.78 fb^{-1}"); lbl2.SetNDC(); lbl2.SetTextSize(0.042); plot->addObject(&lbl2); int iObj=-1; TNamed *obj; while( (obj = (TNamed*)plot->getObject(++iObj)) ) { obj->SetName(Form("Object_%d",iObj)); } plot->Draw(); TString tag = (blind ? "_BLIND" : ""); cv.SaveAs(folderName+"/figs/mgg_data_"+cats[iCat]+tag+TString(Form("_%0.0f_%0.0f",min,max))+".png"); cv.SaveAs(folderName+"/figs/mgg_data_"+cats[iCat]+tag+TString(Form("_%0.0f_%0.0f",min,max))+".pdf"); cv.SaveAs(folderName+"/figs/mgg_data_"+cats[iCat]+tag+TString(Form("_%0.0f_%0.0f",min,max))+".C"); } }
void rf208_convolution() { // S e t u p c o m p o n e n t p d f s // --------------------------------------- // Construct observable RooRealVar t("t","t",-10,30) ; // Construct landau(t,ml,sl) ; RooRealVar ml("ml","mean bw",5.,-20,20) ; RooRealVar sl("sl","sigma bw",1,0.1,10) ; RooBreitWigner bw("bw","bw",t,ml,sl) ; // Construct gauss(t,mg,sg) RooRealVar mg("mg","mg",0) ; RooRealVar sg("sg","sg",2,0.1,10) ; RooGaussian gauss("gauss","gauss",t,mg,sg) ; // C o n s t r u c t c o n v o l u t i o n p d f // --------------------------------------- // Set #bins to be used for FFT sampling to 10000 t.setBins(10000,"cache") ; // Construct landau (x) gauss RooFFTConvPdf lxg("lxg","bw (X) gauss",t,bw,gauss) ; // S a m p l e , f i t a n d p l o t c o n v o l u t e d p d f // ---------------------------------------------------------------------- // Sample 1000 events in x from gxlx RooDataSet* data = lxg.generate(t,10000) ; // Fit gxlx to data lxg.fitTo(*data) ; // Plot data, landau pdf, landau (X) gauss pdf RooPlot* frame = t.frame(Title("landau (x) gauss convolution")) ; data->plotOn(frame) ; lxg.plotOn(frame) ; bw.plotOn(frame,LineStyle(kDashed)) ; // Draw frame on canvas new TCanvas("rf208_convolution","rf208_convolution",600,600) ; gPad->SetLeftMargin(0.15) ; frame->GetYaxis()->SetTitleOffset(1.4) ; frame->Draw() ; //add a variable to the dataset RooFormulaVar *r_formula = new RooFormulaVar("r_formula","","@0",t); RooRealVar* r = (RooRealVar*) data->addColumn(*r_formula); r->SetName("r"); r->SetTitle("r"); RooDataSet* data_r =(RooDataSet*) data->reduce(*r, ""); r->setRange("sigrange",-10.,30.); RooPlot* r_frame = r->frame(Range("sigRange"),Title(" r (x) gauss convolution")) ; data_r->plotOn(r_frame, MarkerColor(kRed)); r_frame->GetXaxis()->SetRangeUser(-10., 30.); r_frame->Draw() ; }
void eregtraining_fixalpha(bool dobarrel, bool doele) { // gSystem->Setenv("OMP_WAIT_POLICY","PASSIVE"); //candidate to set fixed alpha values (0.9,3.8) //TString dirname = TString::Format("/afs/cern.ch/work/b/bendavid/bare/eregtesteleJul30_sig5_01_alphafloat5_%i/",int(minevents)); TString dirname = "/afs/cern.ch/work/b/bendavid/bare/eregAug10RCalphafix/"; gSystem->mkdir(dirname,true); gSystem->cd(dirname); std::vector<std::string> *varsf = new std::vector<std::string>; varsf->push_back("ph.scrawe"); varsf->push_back("ph.sceta"); varsf->push_back("ph.scphi"); varsf->push_back("ph.r9"); varsf->push_back("ph.scetawidth"); varsf->push_back("ph.scphiwidth"); varsf->push_back("ph.scnclusters"); varsf->push_back("ph.hoveretower"); varsf->push_back("rho"); varsf->push_back("nVtx"); varsf->push_back("ph.etaseed-ph.sceta"); varsf->push_back("atan2(sin(ph.phiseed-ph.scphi),cos(ph.phiseed-ph.scphi))"); varsf->push_back("ph.eseed/ph.scrawe"); varsf->push_back("ph.e3x3seed/ph.e5x5seed"); varsf->push_back("ph.sigietaietaseed"); varsf->push_back("ph.sigiphiphiseed"); varsf->push_back("ph.covietaiphiseed"); varsf->push_back("ph.emaxseed/ph.e5x5seed"); varsf->push_back("ph.e2ndseed/ph.e5x5seed"); varsf->push_back("ph.etopseed/ph.e5x5seed"); varsf->push_back("ph.ebottomseed/ph.e5x5seed"); varsf->push_back("ph.eleftseed/ph.e5x5seed"); varsf->push_back("ph.erightseed/ph.e5x5seed"); varsf->push_back("ph.e2x5maxseed/ph.e5x5seed"); varsf->push_back("ph.e2x5topseed/ph.e5x5seed"); varsf->push_back("ph.e2x5bottomseed/ph.e5x5seed"); varsf->push_back("ph.e2x5leftseed/ph.e5x5seed"); varsf->push_back("ph.e2x5rightseed/ph.e5x5seed"); std::vector<std::string> *varseb = new std::vector<std::string>(*varsf); std::vector<std::string> *varsee = new std::vector<std::string>(*varsf); varseb->push_back("ph.e5x5seed/ph.eseed"); varseb->push_back("ph.ietaseed"); varseb->push_back("ph.iphiseed"); varseb->push_back("ph.ietaseed%5"); varseb->push_back("ph.iphiseed%2"); varseb->push_back("(abs(ph.ietaseed)<=25)*(ph.ietaseed%25) + (abs(ph.ietaseed)>25)*((ph.ietaseed-25*abs(ph.ietaseed)/ph.ietaseed)%20)"); varseb->push_back("ph.iphiseed%20"); varseb->push_back("ph.etacryseed"); varseb->push_back("ph.phicryseed"); varsee->push_back("ph.scpse/ph.scrawe"); std::vector<std::string> *varslist; if (dobarrel) varslist = varseb; else varslist = varsee; RooArgList vars; for (unsigned int ivar=0; ivar<varslist->size(); ++ivar) { RooRealVar *var = new RooRealVar(TString::Format("var_%i",ivar),varslist->at(ivar).c_str(),0.); vars.addOwned(*var); } RooArgList condvars(vars); // RooRealVar *tgtvar = new RooRealVar("tgtvar","ph.scrawe/ph.gene",1.); // if (!dobarrel) tgtvar->SetTitle("(ph.scrawe + ph.scpse)/ph.gene"); RooRealVar *tgtvar = new RooRealVar("tgtvar","ph.gene/ph.scrawe",1.); if (!dobarrel) tgtvar->SetTitle("ph.gene/(ph.scrawe + ph.scpse)"); //tgtvar->setRange(0.,5.); vars.addOwned(*tgtvar); //varstest.add(*tgtvar); RooRealVar weightvar("weightvar","",1.); //TFile *fdin = TFile::Open("/home/mingyang/cms/hist/hgg-2013Moriond/merged/hgg-2013Moriond_s12-diphoj-3-v7a_noskim.root"); // TFile *fdin = TFile::Open("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/trainingtreesJul1/hgg-2013Final8TeV_s12-zllm50-v7n_noskim.root"); // TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterSingleInvert"); // TTree *dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); /* TFile *fdinsig = TFile::Open("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/trainingtreesJul1/hgg-2013Moriond_s12-h125gg-gf-v7a_noskim.root"); TDirectory *ddirsig = (TDirectory*)fdinsig->FindObjectAny("PhotonTreeWriterPreselNoSmear"); TTree *dtreesig = (TTree*)ddirsig->Get("hPhotonTreeSingle"); */ TString treeloc; if (doele) { treeloc = "RunLumiSelectionMod/MCProcessSelectionMod/HLTModP/GoodPVFilterMod/PhotonIDModPreselInvert/PhotonTreeWriterSingleInvert/hPhotonTreeSingle"; } else { treeloc = "RunLumiSelectionMod/MCProcessSelectionMod/HLTModP/GoodPVFilterMod/PhotonIDModPresel/PhotonTreeWriterSingle/hPhotonTreeSingle"; } TChain *tree; float xsecs[50]; if (doele) { tree = new TChain("RunLumiSelectionMod/MCProcessSelectionMod/HLTModP/GoodPVFilterMod/PhotonIDModPreselInvert/PhotonTreeWriterSingleInvert/hPhotonTreeSingle"); tree->Add("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/regTreesAug1/hgg-2013Final8TeV_reg_s12-zllm50-v7n_noskim.root"); xsecs[0] = 1.; initweights(tree,xsecs,1.); xsecweights[0] = 1.0; } else { tree = new TChain("RunLumiSelectionMod/MCProcessSelectionMod/HLTModP/GoodPVFilterMod/PhotonIDModPresel/PhotonTreeWriterSingle/hPhotonTreeSingle"); tree->Add("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/regTreesAug1/hgg-2013Final8TeV_reg_s12-pj20_40-2em-v7n_noskim.root"); tree->Add("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/regTreesAug1/hgg-2013Final8TeV_reg_s12-pj40-2em-v7n_noskim.root"); xsecs[0] = 0.001835*81930.0; xsecs[1] = 0.05387*8884.0; initweights(tree,xsecs,1.); double weightscale = xsecweights[1]; xsecweights[0] /= weightscale; xsecweights[1] /= weightscale; } TCut selcut; if (dobarrel) { selcut = "ph.genpt>16. && ph.isbarrel && ph.ispromptgen"; } else { selcut = "ph.genpt>16. && !ph.isbarrel && ph.ispromptgen"; } TCut selweight = "xsecweight(procidx)"; TCut prescale10 = "(evt%10==0)"; TCut prescale25 = "(evt%25==0)"; TCut prescale50 = "(evt%50==0)"; TCut prescale100 = "(evt%100==0)"; TCut prescale1000 = "(evt%1000==0)"; TCut evenevents = "(evt%2==0)"; TCut oddevents = "(evt%2==1)"; //TCut oddevents = prescale100; //weightvar.SetTitle(prescale10*selcut); /* new TCanvas; tree->Draw("ph.genpt>>hpt(200,0.,100.)",selweight*selcut); return;*/ if (doele) { weightvar.SetTitle(evenevents*selcut); } else { weightvar.SetTitle(selweight*selcut); } RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",tree,vars,weightvar); // weightvar.SetTitle(prescale1000*selcut); // RooDataSet *hdatasig = RooTreeConvert::CreateDataSet("hdatasig",dtree,vars,weightvar); // RooDataSet *hdatasigtest = RooTreeConvert::CreateDataSet("hdatasigtest",dtree,varstest,weightvar); RooDataSet *hdatasig = 0; RooDataSet *hdatasigtest = 0; // weightvar.SetTitle(prescale10*selcut); // RooDataSet *hdatasigsmall = RooTreeConvert::CreateDataSet("hdatasigsmall",dtreesig,vars,weightvar); RooRealVar sigwidthtvar("sigwidthtvar","",0.01); sigwidthtvar.setConstant(false); RooRealVar sigmeantvar("sigmeantvar","",1.); sigmeantvar.setConstant(false); RooRealVar sigalphavar("sigalphavar","",1.); sigalphavar.setConstant(false); RooRealVar signvar("signvar","",2.); signvar.setConstant(false); RooRealVar sigalpha2var("sigalpha2var","",1.); sigalpha2var.setConstant(false); RooRealVar sign2var("sign2var","",2.); sign2var.setConstant(false); RooArgList tgts; RooGBRFunction func("func","",condvars,4); RooGBRTarget sigwidtht("sigwidtht","",func,0,sigwidthtvar); RooGBRTarget sigmeant("sigmeant","",func,1,sigmeantvar); RooGBRTarget signt("signt","",func,2,signvar); RooGBRTarget sign2t("sign2t","",func,3,sign2var); tgts.add(sigwidtht); tgts.add(sigmeant); tgts.add(signt); tgts.add(sign2t); RooRealConstraint sigwidthlim("sigwidthlim","",sigwidtht,0.0002,0.5); RooRealConstraint sigmeanlim("sigmeanlim","",sigmeant,0.2,2.0); //RooRealConstraint sigmeanlim("sigmeanlim","",sigmeant,-2.0,-0.2); RooRealConstraint signlim("signlim","",signt,1.01,110.); RooRealConstraint sign2lim("sign2lim","",sign2t,1.01,110.); RooLinearVar tgtscaled("tgtscaled","",*tgtvar,sigmeanlim,RooConst(0.)); RooDoubleCBFast sigpdf("sigpdf","",tgtscaled,RooConst(1.),sigwidthlim,RooConst(2.0),signlim,RooConst(1.0),sign2lim); //RooDoubleCBFast sigpdf("sigpdf","",tgtscaled,RooConst(1.),sigwidthlim,RooConst(2.0),signlim,RooConst(1.0),sign2lim); //RooCBExp sigpdf("sigpdf","",tgtscaled,RooConst(-1.),sigwidthlim,sigalpha2lim,sign2lim,sigalphalim); //RooDoubleCBFast sigpdf("sigpdf","",tgtscaled,RooConst(1.),sigwidthlim,RooConst(100.),RooConst(100.),sigalpha2lim,sign2lim); //RooDoubleCBFast sigpdf("sigpdf","",tgtscaled,RooConst(1.),sigwidthlim,sigalphalim,signlim,RooConst(3.),sign2lim); //RooCBShape sigpdf("sigpdf","",tgtscaled,RooConst(1.),sigwidthlim,sigalphalim,signlim); RooConstVar etermconst("etermconst","",0.); //RooFormulaVar etermconst("etermconst","","1000.*(@0-1.)*(@0-1.)",RooArgList(tgtscaled)); RooRealVar r("r","",1.); r.setConstant(); std::vector<RooAbsReal*> vpdf; vpdf.push_back(&sigpdf); double minweight = 200.; std::vector<double> minweights; minweights.push_back(minweight); //ntot.setConstant(); TFile *fres = new TFile("fres.root","RECREATE"); if (1) { std::vector<RooAbsData*> vdata; vdata.push_back(hdata); RooHybridBDTAutoPdf bdtpdfdiff("bdtpdfdiff","",func,tgts,etermconst,r,vdata,vpdf); bdtpdfdiff.SetMinCutSignificance(5.); bdtpdfdiff.SetPrescaleInit(100); // bdtpdfdiff.SetPrescaleInit(10); //bdtpdfdiff.SetMaxNSpurious(300.); //bdtpdfdiff.SetMaxNSpurious(2400.); bdtpdfdiff.SetShrinkage(0.1); bdtpdfdiff.SetMinWeights(minweights); //bdtpdfdiff.SetMaxNodes(270); //bdtpdfdiff.SetMaxNodes(750); bdtpdfdiff.SetMaxNodes(500); //bdtpdfdiff.SetMaxDepth(8); bdtpdfdiff.TrainForest(1e6); } RooWorkspace *wereg = new RooWorkspace("wereg"); wereg->import(sigpdf); if (doele && dobarrel) wereg->writeToFile("wereg_ele_eb.root"); else if (doele && !dobarrel) wereg->writeToFile("wereg_ele_ee.root"); else if (!doele && dobarrel) wereg->writeToFile("wereg_ph_eb.root"); else if (!doele && !dobarrel) wereg->writeToFile("wereg_ph_ee.root"); return; }
void fitbkgdataCard(TString configCard="template.config", bool dobands = true, // create baerror bands for BG models bool dosignal = false, // plot the signal model (needs to be present) bool blinded = true, // blind the data in the plots? bool verbose = true ) { gROOT->Macro("MitStyle.C"); gStyle->SetErrorX(0); gStyle->SetOptStat(0); gROOT->ForceStyle(); TString projectDir; std::vector<TString> catdesc; std::vector<TString> catnames; std::vector<int> polorder; double massmin = -1.; double massmax = -1.; double theCMenergy = -1.; bool readStatus = readFromConfigCard( configCard, projectDir, catnames, catdesc, polorder, massmin, massmax, theCMenergy ); if( !readStatus ) { std::cerr<<" ERROR: Could not read from card > "<<configCard.Data()<<" <."<<std::endl; return; } TFile *fdata = new TFile(TString::Format("%s/CMS-HGG-data.root",projectDir.Data()),"READ"); if( !fdata ) { std::cerr<<" ERROR: Could not open file "<<projectDir.Data()<<"/CMS-HGG-data.root."<<std::endl; return; } if( !gSystem->cd(TString::Format("%s/databkg/",projectDir.Data())) ) { std::cerr<<" ERROR: Could not change directory to "<<TString::Format("%s/databkg/",projectDir.Data()).Data()<<"."<<std::endl; return; } // ---------------------------------------------------------------------- // load the input workspace.... RooWorkspace* win = (RooWorkspace*)fdata->Get("cms_hgg_workspace_data"); if( !win ) { std::cerr<<" ERROR: Could not load workspace > cms_hgg_workspace_data < from file > "<<TString::Format("%s/CMS-HGG-data.root",projectDir.Data()).Data()<<" <."<<std::endl; return; } RooRealVar *intLumi = win->var("IntLumi"); RooRealVar *hmass = win->var("CMS_hgg_mass"); if( !intLumi || !hmass ) { std::cerr<<" ERROR: Could not load needed variables > IntLumi < or > CMS_hgg_mass < forom input workspace."<<std::endl; return; } //win->Print(); hmass->setRange(massmin,massmax); hmass->setBins(4*(int)(massmax-massmin)); hmass->SetTitle("m_{#gamma#gamma}"); hmass->setUnit("GeV"); hmass->setRange("fitrange",massmin,massmax); hmass->setRange("blind1",100.,110.); hmass->setRange("blind2",150.,180.); // ---------------------------------------------------------------------- // some auxiliray vectro (don't know the meaning of all of them ... yet... std::vector<RooAbsData*> data_vec; std::vector<RooAbsPdf*> pdfShape_vec; // vector to store the NOT-EXTENDED PDFs (aka pdfshape) std::vector<RooAbsPdf*> pdf_vec; // vector to store the EXTENDED PDFs std::vector<RooAbsReal*> normu_vec; // this holds the normalization vars for each Cat (needed in bands for combined cat) RooArgList normList; // list of range-limityed normalizations (needed for error bands on combined category) //std::vector<RooRealVar*> coeffv; //std::vector<RooAbsReal*> normu_vecv; // ??? // ---------------------------------------------------------------------- // define output works RooWorkspace *wOut = new RooWorkspace("wbkg","wbkg") ; // util;ities for the combined fit RooCategory finalcat ("finalcat", "finalcat") ; RooSimultaneous fullbkgpdf("fullbkgpdf","fullbkgpdf",finalcat); RooDataSet datacomb ("datacomb", "datacomb", RooArgList(*hmass,finalcat)) ; RooDataSet *datacombcat = new RooDataSet("data_combcat","",RooArgList(*hmass)) ; // add the 'combcat' to the list...if more than one cat if( catnames.size() > 1 ) { catnames.push_back("combcat"); catdesc.push_back("Combined"); } for (UInt_t icat=0; icat<catnames.size(); ++icat) { TString catname = catnames.at(icat); finalcat.defineType(catname); // check if we're in a sub-cat or the comb-cat RooDataSet *data = NULL; RooDataSet *inData = NULL; if( icat < (catnames.size() - 1) || catnames.size() == 1) { // this is NOT the last cat (which is by construction the combination) inData = (RooDataSet*)win->data(TString("data_mass_")+catname); if( !inData ) { std::cerr<<" ERROR: Could not find dataset > data_mass_"<<catname.Data()<<" < in input workspace."<<std::endl; return; } data = new RooDataSet(TString("data_")+catname,"",*hmass,Import(*inData)); // copy the dataset (why?) // append the data to the combined data... RooDataSet *datacat = new RooDataSet(TString("datacat")+catname,"",*hmass,Index(finalcat),Import(catname,*data)) ; datacomb.append(*datacat); datacombcat->append(*data); // normalization for this category RooRealVar *nbkg = new RooRealVar(TString::Format("CMS_hgg_%s_bkgshape_norm",catname.Data()),"",800.0,0.0,25e3); // we keep track of the normalizario vars only for N-1 cats, naming convetnions hystoric... if( catnames.size() > 2 && icat < (catnames.size() - 2) ) { RooRealVar* cbkg = new RooRealVar(TString::Format("cbkg%s",catname.Data()),"",0.0,0.0,1e3); cbkg->removeRange(); normu_vec.push_back(cbkg); normList.add(*cbkg); } /// generate the Bernstrin polynomial (FIX-ME: add possibility ro create other models...) fstBernModel* theBGmodel = new fstBernModel(hmass, polorder[icat], icat, catname); // using my dedicated class... std::cout<<" model name is "<<theBGmodel->getPdf()->GetName()<<std::endl; RooAbsPdf* bkgshape = theBGmodel->getPdf(); // the BG shape RooAbsPdf* bkgpdf = new RooExtendPdf(TString("bkgpdf")+catname,"",*bkgshape,*nbkg); // the extended PDF // add the extedned PDF to the RooSimultaneous holding all models... fullbkgpdf.addPdf(*bkgpdf,catname); // store the NON-EXTENDED PDF for usgae to compute the error bands later.. pdfShape_vec.push_back(bkgshape); pdf_vec .push_back(bkgpdf); data_vec .push_back(data); } else { data = datacombcat; // we're looking at the last cat (by construction the combination) data_vec.push_back(data); // sum up all the cts PDFs for combined PDF RooArgList subpdfs; for (int ipdf=0; ipdf<pdf_vec.size(); ++ipdf) { subpdfs.add(*pdf_vec.at(ipdf)); } RooAddPdf* bkgpdf = new RooAddPdf(TString("bkgpdf")+catname,"",subpdfs); pdfShape_vec.push_back(bkgpdf); pdf_vec .push_back(bkgpdf); // I don't think this is really needed though.... } // generate the binned dataset (to be put into the workspace... just in case...) RooDataHist *databinned = new RooDataHist(TString("databinned_")+catname,"",*hmass,*data); wOut->import(*data); wOut->import(*databinned); } std::cout<<" ***************** "<<std::endl; // fit the RooSimultaneous to the combined dataset -> (we could also fit each cat separately) fullbkgpdf.fitTo(datacomb,Strategy(1),Minos(kFALSE),Save(kTRUE)); RooFitResult *fullbkgfitres = fullbkgpdf.fitTo(datacomb,Strategy(2),Minos(kFALSE),Save(kTRUE)); // in principle we're done now, so store the results in the output workspace wOut->import(datacomb); wOut->import(fullbkgpdf); wOut->import(*fullbkgfitres); std::cout<<" ***************** "<<std::endl; if( verbose ) wOut->Print(); std::cout<<" ***************** "<<std::endl; wOut->writeToFile("bkgdatawithfit.root") ; if( verbose ) { printf("IntLumi = %5f\n",intLumi->getVal()); printf("ndata:\n"); for (UInt_t icat=0; icat<catnames.size(); ++icat) { printf("%i ",data_vec.at(icat)->numEntries()); } printf("\n"); } // -------------------------------------------------------------------------------------------- // Now comesd the plotting // chage the Statistics style... gStyle->SetOptStat(1110); // we want to plot in 1GeV bins (apparently...) UInt_t nbins = (UInt_t) (massmax-massmin); // here we'll store the curves for the bands... std::vector<RooCurve*> fitcurves; // loop again over the cats TCanvas **canbkg = new TCanvas*[catnames.size()]; RooPlot** plot = new RooPlot*[catnames.size()]; TLatex** lat = new TLatex*[catnames.size()]; TLatex** lat2 = new TLatex*[catnames.size()]; std::cout<<" beofre plotting..."<<std::endl; for (UInt_t icat=0; icat<catnames.size(); ++icat) { TString catname = catnames.at(icat); std::cout<<" trying to plot #"<<icat<<std::endl; // plot the data and the fit canbkg[icat] = new TCanvas; plot [icat] = hmass->frame(Bins(nbins),Range("fitrange")); std::cout<<" trying to plot #"<<icat<<std::endl; // first plot the data invisibly... and put the fitted BG model on top... data_vec .at(icat)->plotOn(plot[icat],RooFit::LineColor(kWhite),MarkerColor(kWhite),Invisible()); pdfShape_vec.at(icat)->plotOn(plot[icat],RooFit::LineColor(kRed),Range("fitrange"),NormRange("fitrange")); std::cout<<" trying to plot #"<<icat<<std::endl; // if toggled on, plot also the Data visibly if( !blinded ) { data_vec.at(icat)->plotOn(plot[icat]); } std::cout<<" trying to plot #"<<icat<<std::endl; // some cosmetics... plot[icat]->SetTitle(""); plot[icat]->SetMinimum(0.0); plot[icat]->SetMaximum(1.40*plot[icat]->GetMaximum()); plot[icat]->GetXaxis()->SetTitle("m_{#gamma#gamma} (GeV/c^{2})"); plot[icat]->Draw(); std::cout<<" trying to plot #"<<icat<<std::endl; // legend.... TLegend *legmc = new TLegend(0.68,0.70,0.97,0.90); legmc->AddEntry(plot[icat]->getObject(2),"Data","LPE"); legmc->AddEntry(plot[icat]->getObject(1),"Bkg Model","L"); // this part computes the 1/2-sigma bands. TGraphAsymmErrors *onesigma = NULL; TGraphAsymmErrors *twosigma = NULL; std::cout<<" trying *** to plot #"<<icat<<std::endl; RooAddition* sumcatsnm1 = NULL; if ( dobands ) { //&& icat == (catnames.size() - 1) ) { onesigma = new TGraphAsymmErrors(); twosigma = new TGraphAsymmErrors(); // get the PDF for this cat from the vector RooAbsPdf *thisPdf = pdfShape_vec.at(icat); // get the nominal fir curve RooCurve *nomcurve = dynamic_cast<RooCurve*>(plot[icat]->getObject(1)); fitcurves.push_back(nomcurve); bool iscombcat = ( icat == (catnames.size() - 1) && catnames.size() > 1); RooAbsData *datanorm = ( iscombcat ? &datacomb : data_vec.at(icat) ); // this si the nornmalization in the 'sliding-window' (i.e. per 'test-bin') RooRealVar *nlim = new RooRealVar(TString::Format("nlim%s",catnames.at(icat).Data()),"",0.0,0.0,10.0); nlim->removeRange(); if( iscombcat ) { // ----------- HISTORIC NAMING ---------------------------------------- sumcatsnm1 = new RooAddition("sumcatsnm1","",normList); // summing all normalizations epect the last Cat // this is the normlization of the last Cat RooFormulaVar *nlast = new RooFormulaVar("nlast","","TMath::Max(0.1,@0-@1)",RooArgList(*nlim,*sumcatsnm1)); // ... and adding it ot the list of norms normu_vec.push_back(nlast); } //if (icat == 1 && catnames.size() == 2) continue; // only 1 cat, so don't need combination for (int i=1; i<(plot[icat]->GetXaxis()->GetNbins()+1); ++i) { // this defines the 'binning' we use for the error bands double lowedge = plot[icat]->GetXaxis()->GetBinLowEdge(i); double upedge = plot[icat]->GetXaxis()->GetBinUpEdge(i); double center = plot[icat]->GetXaxis()->GetBinCenter(i); // get the nominal value at the center of the bin double nombkg = nomcurve->interpolate(center); nlim->setVal(nombkg); hmass->setRange("errRange",lowedge,upedge); // this is the new extended PDF whith the normalization restricted to the bin-area RooAbsPdf *extLimPdf = NULL; if( iscombcat ) { extLimPdf = new RooSimultaneous("epdf","",finalcat); // loop over the cats and generate temporary extended PDFs for (int jcat=0; jcat<(catnames.size()-1); ++jcat) { RooRealVar *rvar = dynamic_cast<RooRealVar*>(normu_vec.at(jcat)); if (rvar) rvar->setVal(fitcurves.at(jcat)->interpolate(center)); RooExtendPdf *ecpdf = new RooExtendPdf(TString::Format("ecpdf%s",catnames.at(jcat).Data()),"",*pdfShape_vec.at(jcat),*normu_vec.at(jcat),"errRange"); static_cast<RooSimultaneous*>(extLimPdf)->addPdf(*ecpdf,catnames.at(jcat)); } } else extLimPdf = new RooExtendPdf("extLimPdf","",*thisPdf,*nlim,"errRange"); RooAbsReal *nll = extLimPdf->createNLL(*datanorm,Extended(),NumCPU(1)); RooMinimizer minim(*nll); minim.setStrategy(0); double clone = 1.0 - 2.0*RooStats::SignificanceToPValue(1.0); double cltwo = 1.0 - 2.0*RooStats::SignificanceToPValue(2.0); if (iscombcat) minim.setStrategy(2); minim.migrad(); if (!iscombcat) { minim.minos(*nlim); } else { minim.hesse(); nlim->removeAsymError(); } if( verbose ) printf("errlo = %5f, errhi = %5f\n",nlim->getErrorLo(),nlim->getErrorHi()); onesigma->SetPoint(i-1,center,nombkg); onesigma->SetPointError(i-1,0.,0.,-nlim->getErrorLo(),nlim->getErrorHi()); // to get the 2-sigma bands... minim.setErrorLevel(0.5*pow(ROOT::Math::normal_quantile(1-0.5*(1-cltwo),1.0), 2)); // the 0.5 is because qmu is -2*NLL // eventually if cl = 0.95 this is the usual 1.92! if (!iscombcat) { minim.migrad(); minim.minos(*nlim); } else { nlim->setError(2.0*nlim->getError()); nlim->removeAsymError(); } twosigma->SetPoint(i-1,center,nombkg); twosigma->SetPointError(i-1,0.,0.,-nlim->getErrorLo(),nlim->getErrorHi()); // for memory clean-up delete nll; delete extLimPdf; } hmass->setRange("errRange",massmin,massmax); if( verbose ) onesigma->Print("V"); // plot[icat] the error bands twosigma->SetLineColor(kGreen); twosigma->SetFillColor(kGreen); twosigma->SetMarkerColor(kGreen); twosigma->Draw("L3 SAME"); onesigma->SetLineColor(kYellow); onesigma->SetFillColor(kYellow); onesigma->SetMarkerColor(kYellow); onesigma->Draw("L3 SAME"); plot[icat]->Draw("SAME"); // and add the error bands to the legend legmc->AddEntry(onesigma,"#pm1 #sigma","F"); legmc->AddEntry(twosigma,"#pm2 #sigma","F"); } std::cout<<" trying ***2 to plot #"<<icat<<std::endl; // rest of the legend .... legmc->SetBorderSize(0); legmc->SetFillStyle(0); legmc->Draw(); lat[icat] = new TLatex(103.0,0.9*plot[icat]->GetMaximum(),TString::Format("#scale[0.7]{#splitline{CMS preliminary}{#sqrt{s} = %.1f TeV L = %.2f fb^{-1}}}",theCMenergy,intLumi->getVal())); lat2[icat] = new TLatex(103.0,0.75*plot[icat]->GetMaximum(),catdesc.at(icat)); lat[icat] ->Draw(); lat2[icat]->Draw(); // ------------------------------------------------------- // save canvas in different formats canbkg[icat]->SaveAs(TString("databkg") + catname + TString(".pdf")); canbkg[icat]->SaveAs(TString("databkg") + catname + TString(".eps")); canbkg[icat]->SaveAs(TString("databkg") + catname + TString(".root")); } return; }
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 eregtest_flextest(bool dobarrel, bool doele) { TString dirname = "/afs/cern.ch/work/b/bendavid/bare/eregtestoutalphafix2_float/"; gSystem->mkdir(dirname,true); gSystem->cd(dirname); TString fname; if (doele && dobarrel) fname = "wereg_ele_eb.root"; else if (doele && !dobarrel) fname = "wereg_ele_ee.root"; else if (!doele && dobarrel) fname = "wereg_ph_eb.root"; else if (!doele && !dobarrel) fname = "wereg_ph_ee.root"; //TString infile = TString::Format("/afs/cern.ch/work/b/bendavid/bare/eregAug10RCalphafixphiblind//%s",fname.Data()); TString infile = TString::Format("/data/bendavid/regflextesting/%s",fname.Data()); TFile *fws = TFile::Open(infile); RooWorkspace *ws = (RooWorkspace*)fws->Get("wereg"); //RooGBRFunction *func = static_cast<RooGBRFunction*>(ws->arg("func")); RooGBRTargetFlex *sigmeant = (RooGBRTargetFlex*)ws->function("sigmeant"); RooRealVar *tgtvar = ws->var("tgtvar"); //tgtvar->removeRange(); //tgtvar->setRange(0.98,1.02); RooRealVar *rawptvar = new RooRealVar("rawptvar","ph.scrawe/cosh(ph.eta)",1.); if (!dobarrel) rawptvar->SetTitle("(ph.scrawe+ph.scpse)/cosh(ph.eta)"); RooRealVar *rawevar = new RooRealVar("rawevar","ph.scrawe",1.); if (!dobarrel) rawevar->SetTitle("(ph.scrawe+ph.scpse)"); RooRealVar *nomevar = new RooRealVar("nomevar","ph.e",1.); RooArgList vars; vars.add(sigmeant->FuncVars()); vars.add(*tgtvar); vars.add(*rawptvar); vars.add(*rawevar); vars.add(*nomevar); RooArgList condvars; condvars.add(sigmeant->FuncVars()); RooRealVar weightvar("weightvar","",1.); TTree *dtree; if (doele) { TFile *fdin = TFile::Open("/data/bendavid/regTreesAug1/hgg-2013Final8TeV_reg_s12-zllm50-v7n_noskim.root"); TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterSingleInvert"); dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); } else { TFile *fdin = TFile::Open("/data/bendavid/idTreesAug1/hgg-2013Final8TeV_ID_s12-h124gg-gf-v7n_noskim.root"); //TFile *fdin = TFile::Open("/data/bendavid/idTrees_7TeV_Sept17/hgg-2013Final7TeV_ID_s11-h125gg-gf-lv3_noskim.root"); TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterPreselNoSmear"); dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); } // if (0) // { // // TFile *fdin = TFile::Open("/data/bendavid/8TeVFinalTreesSept17/hgg-2013Final8TeV_s12-diphoj-v7n_noskim.root"); // TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterPresel"); // dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); // // } if (0) { TFile *fdin = TFile::Open("/data/bendavid/diphoTrees8TeVOct6/hgg-2013Final8TeV_s12-h123gg-gf-v7n_noskim.root"); TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterPreselNoSmear"); dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); } // //TFile *fdin = TFile::Open("/home/mingyang/cms/hist/hgg-2013Moriond/merged/hgg-2013Moriond_s12-diphoj-3-v7a_noskim.root"); // //TFile *fdin = TFile::Open("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/trainingtreesJul1/hgg-2013Final8TeV_s12-zllm50-v7n_noskim.root"); // TFile *fdin = TFile::Open("root://eoscms.cern.ch///eos/cms/store/cmst3/user/bendavid/idTreesAug1/hgg-2013Final8TeV_ID_s12-h124gg-gf-v7n_noskim.root"); // //TFile *fdin = TFile::Open("root://eoscms.cern.ch//eos/cms/store/cmst3/user/bendavid/regTreesAug1/hgg-2013Final8TeV_reg_s12-zllm50-v7n_noskim.root"); // //TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterSingleInvert"); // TDirectory *ddir = (TDirectory*)fdin->FindObjectAny("PhotonTreeWriterPreselNoSmear"); // TTree *dtree = (TTree*)ddir->Get("hPhotonTreeSingle"); /* TFile *fdinsig = TFile::Open("/home/mingyang/cms/hist/hgg-2013Moriond/merged/hgg-2013Moriond_s12-h125gg-gf-v7a_noskim.root"); TDirectory *ddirsig = (TDirectory*)fdinsig->FindObjectAny("PhotonTreeWriterPreselNoSmear"); TTree *dtreesig = (TTree*)ddirsig->Get("hPhotonTreeSingle"); */ TCut selcut; if (dobarrel) { selcut = "ph.pt>25. && ph.isbarrel && ph.ispromptgen && abs(ph.sceta)>(-1.0)"; //selcut = "ph.pt>25. && ph.isbarrel && ph.ispromptgen && abs(ph.sceta)>(-1.0) && run==194533 && lumi==5 && evt==1400"; } else { selcut = "ph.pt>25 && !ph.isbarrel && ph.ispromptgen"; //selcut = "ph.pt>25 && !ph.isbarrel && ph.ispromptgen && run==194533 && lumi==5 && evt==1400"; } // TCut selcut = "ph.pt>25. && ph.isbarrel && ph.ispromptgen && abs(ph.sceta)<1.0"; //TCut selcut = "ph.pt>25. && ph.isbarrel && (ph.scrawe/ph.gene)>0. && (ph.scrawe/ph.gene)<2. && ph.ispromptgen"; //TCut selcut = "ph.pt>25. && ph.isbarrel && (ph.gene/ph.scrawe)>0. && (ph.gene/ph.scrawe)<2."; TCut selweight = "xsecweight(procidx)*puweight(numPU,procidx)"; TCut prescale10 = "(evt%10==0)"; TCut prescale10alt = "(evt%10==1)"; TCut prescale25 = "(evt%25==0)"; TCut prescale100 = "(evt%100==0)"; TCut prescale1000 = "(evt%1000==0)"; TCut evenevents = "(evt%2==0)"; TCut oddevents = "(evt%2==1)"; TCut prescale100alt = "(evt%100==1)"; TCut prescale1000alt = "(evt%1000==1)"; TCut prescale50alt = "(evt%50==1)"; //TCut oddevents = prescale100; if (doele) weightvar.SetTitle(prescale100alt*selcut); else weightvar.SetTitle(selcut); RooDataSet *hdata = RooTreeConvert::CreateDataSet("hdata",dtree,vars,weightvar); // for (int iev=0; iev<hdata->numEntries(); ++iev) { // const RooArgSet *dset = hdata->get(iev); // // condvars = *dset; // condvars.Print("V"); // // } //return; // if (doele) // weightvar.SetTitle(prescale100alt*selcut); // else // weightvar.SetTitle(selcut); //RooDataSet *hdatasmall = RooTreeConvert::CreateDataSet("hdatasmall",dtree,vars,weightvar); // const HybridGBRForestD *forest = func->Forest(); // for (unsigned int itgt=0; itgt<forest->Trees().size(); ++itgt) { // int ntrees = 0; // for (unsigned int itree = 0; itree<forest->Trees().at(itgt).size(); ++itree) { // if (forest->Trees()[itgt][itree].Responses().size()>1) ++ntrees; // } // printf("itgt = %i, ntrees = %i\n", int(itgt),ntrees); // } RooAbsPdf *sigpdf = ws->pdf("sigpdf"); RooRealVar *scetavar = ws->var("var_1"); RooAbsReal *sigmeanlim = ws->function("sigmeanlim"); RooAbsReal *sigwidthlim = ws->function("sigwidthlim"); RooAbsReal *signlim = ws->function("signlim"); RooAbsReal *sign2lim = ws->function("sign2lim"); RooAbsReal *alphalim = ws->function("sigalphalim"); RooAbsReal *alpha2lim = ws->function("sigalpha2lim"); //RooFormulaVar ecor("ecor","","1./(@0*@1)",RooArgList(*tgtvar,*sigmeanlim)); RooFormulaVar ecor("ecor","","@1/@0",RooArgList(*tgtvar,*sigmeanlim)); //RooFormulaVar ecor("ecor","","@0/@1",RooArgList(*tgtvar,*sigmeanlim)); //RooFormulaVar ecor("ecor","","exp(@1-@0)",RooArgList(*tgtvar,*sigmeanlim)); RooAbsReal *condnll = sigpdf->createNLL(*hdata,ConditionalObservables(sigmeant->FuncVars())); double condnllval = condnll->getVal(); //RooFormulaVar ecor("ecor","","@1/@0",RooArgList(*tgtvar,*sigmeanlim)); //RooFormulaVar ecor("ecor","","@0/@1",RooArgList(*tgtvar,*sigmeanlim)); //RooFormulaVar ecor("ecor","","@0",RooArgList(*tgtvar)); //RooRealVar *ecorvar = (RooRealVar*)hdata->addColumn(ecor); // ecorvar->setRange(0.,2.); // ecorvar->setBins(800); // RooFormulaVar raw("raw","","1./@0",RooArgList(*tgtvar)); // //RooRealVar *rawvar = (RooRealVar*)hdata->addColumn(raw); // rawvar->setRange(0.,2.); // rawvar->setBins(800); /* RooFormulaVar eraw("eraw","","@0",RooArgList(*tgtvar)); RooRealVar *erawvar = (RooRealVar*)hdatasig->addColumn(eraw); erawvar->setRange(0.,2.); erawvar->setBins(400); */ //RooFormulaVar ecor("ptcor","","@0/(@1)",RooArgList(*tgtvar,*sigmeanlim)); RooDataSet *hdataclone = new RooDataSet(*hdata,"hdataclone"); RooRealVar *ecorvar = (RooRealVar*)hdataclone->addColumn(ecor); RooRealVar *meanvar = (RooRealVar*)hdataclone->addColumn(*sigmeanlim); RooRealVar *widthvar = (RooRealVar*)hdataclone->addColumn(*sigwidthlim); RooRealVar *nvar = 0; if (signlim) nvar = (RooRealVar*)hdataclone->addColumn(*signlim); RooRealVar *n2var = 0; if (sign2lim) n2var = (RooRealVar*)hdataclone->addColumn(*sign2lim); RooRealVar *alphavar = 0;; if (alphalim) alphavar = (RooRealVar*)hdataclone->addColumn(*alphalim); RooRealVar *alpha2var = 0; if (alpha2lim) alpha2var = (RooRealVar*)hdataclone->addColumn(*alpha2lim); RooFormulaVar ecorfull("ecorfull","","@0*@1",RooArgList(*sigmeanlim,*rawevar)); RooRealVar *ecorfullvar = (RooRealVar*)hdataclone->addColumn(ecorfull); RooFormulaVar ediff("ediff","","(@0 - @1)/@1",RooArgList(*nomevar,ecorfull)); RooRealVar *ediffvar = (RooRealVar*)hdataclone->addColumn(ediff); RooFormulaVar fullerr("fullerr","","@0*@1",RooArgList(*ecorvar,*sigwidthlim)); RooRealVar *fullerrvar = (RooRealVar*)hdataclone->addColumn(fullerr); RooFormulaVar relerr("relerr","","@0/@1",RooArgList(*sigwidthlim,*sigmeanlim)); RooRealVar *relerrvar = (RooRealVar*)hdataclone->addColumn(relerr); ecorvar->setRange(0.,2.); ecorvar->setBins(800); RooFormulaVar raw("raw","","1./@0",RooArgList(*tgtvar)); //RooFormulaVar raw("raw","","exp(-@0)",RooArgList(*tgtvar)); RooRealVar *rawvar = (RooRealVar*)hdataclone->addColumn(raw); rawvar->setRange(0.,2.); rawvar->setBins(800); RooNormPdf sigpdfpeaknorm("sigpdfpeaknorm","",*sigpdf,*tgtvar); RooRealVar *sigpdfpeaknormvar = (RooRealVar*)hdataclone->addColumn(sigpdfpeaknorm); RooFormulaVar equivsigma("equivsigma","","@0/sqrt(2.0*TMath::Pi())/@1",RooArgList(sigpdfpeaknorm,*sigmeanlim)); RooRealVar *equivsigmavar = (RooRealVar*)hdataclone->addColumn(equivsigma); // for (int iev=0; iev<hdataclone->numEntries(); ++iev) { // const RooArgSet *dset = hdataclone->get(iev); // // //condvars = *dset; // //condvars.Print("V"); // dset->Print("V"); // } // // return; //hdataclone = (RooDataSet*)hdataclone->reduce("(rawptvar/sigmeanlim)>45."); //hdataclone = (RooDataSet*)hdataclone->reduce("relerr>0.1"); // hdataclone = (RooDataSet*)hdataclone->reduce("sigwidthlim>0.017"); // RooLinearVar *tgtscaled = (RooLinearVar*)ws->function("tgtscaled"); // // TCanvas *ccor = new TCanvas; // //RooPlot *plot = tgtvar->frame(0.6,1.2,100); // RooPlot *plotcor = tgtscaled->frame(0.6,2.0,100); // hdataclone->plotOn(plotcor); // sigpdf->plotOn(plotcor,ProjWData(*hdataclone)); // plotcor->Draw(); // ccor->SaveAs("CorE.eps"); // ccor->SetLogy(); // plotcor->SetMinimum(0.1); // ccor->SaveAs("CorElog.eps"); TCanvas *craw = new TCanvas; //RooPlot *plot = tgtvar->frame(0.6,1.2,100); RooPlot *plot = tgtvar->frame(0.8,1.4,400); //RooPlot *plot = tgtvar->frame(0.0,5.,400); //RooPlot *plot = tgtvar->frame(0.,5.,400); //RooPlot *plot = tgtvar->frame(-2.0,2.0,200); hdataclone->plotOn(plot); sigpdf->plotOn(plot,ProjWData(*hdataclone)); plot->Draw(); craw->SaveAs("RawE.eps"); craw->SetLogy(); plot->SetMinimum(0.1); craw->SaveAs("RawElog.eps"); /* new TCanvas; RooPlot *plotsig = tgtvar->frame(0.6,1.2,100); hdatasig->plotOn(plotsig); sigpdf.plotOn(plotsig,ProjWData(*hdatasig)); plotsig->Draw(); */ TCanvas *cmean = new TCanvas; RooPlot *plotmean = meanvar->frame(0.0,5.0,200); //RooPlot *plotmean = meanvar->frame(0.5,1.5,200); //RooPlot *plotmean = meanvar->frame(-1.0,1.0,200); hdataclone->plotOn(plotmean); plotmean->Draw(); cmean->SaveAs("mean.eps"); cmean->SetLogy(); plotmean->SetMinimum(0.1); TCanvas *cwidth = new TCanvas; RooPlot *plotwidth = widthvar->frame(0.,1.0,200); hdataclone->plotOn(plotwidth); plotwidth->Draw(); cwidth->SaveAs("width.eps"); cwidth->SetLogy(); plotwidth->SetMinimum(0.1); if (signlim) { TCanvas *cn = new TCanvas; RooPlot *plotn = nvar->frame(0.,20.,200); hdataclone->plotOn(plotn); plotn->Draw(); cn->SaveAs("n.eps"); TCanvas *cnwide = new TCanvas; RooPlot *plotnwide = nvar->frame(0.,2100.,200); hdataclone->plotOn(plotnwide); plotnwide->Draw(); cnwide->SaveAs("nwide.eps"); } if (sign2lim) { TCanvas *cn2 = new TCanvas; RooPlot *plotn2 = n2var->frame(0.,20.,200); hdataclone->plotOn(plotn2); plotn2->Draw(); cn2->SaveAs("n2.eps"); TCanvas *cn2wide = new TCanvas; RooPlot *plotn2wide = n2var->frame(0.,2100.,200); hdataclone->plotOn(plotn2wide); plotn2wide->Draw(); cn2wide->SaveAs("n2wide.eps"); } if (alphalim) { TCanvas *calpha = new TCanvas; RooPlot *plotalpha = alphavar->frame(0.,6.,200); hdataclone->plotOn(plotalpha); plotalpha->Draw(); calpha->SaveAs("alpha.eps"); calpha->SetLogy(); plotalpha->SetMinimum(0.1); } if (alpha2lim) { TCanvas *calpha2 = new TCanvas; RooPlot *plotalpha2 = alpha2var->frame(0.,6.,200); hdataclone->plotOn(plotalpha2); plotalpha2->Draw(); calpha2->SaveAs("alpha2.eps"); } TCanvas *ceta = new TCanvas; RooPlot *ploteta = scetavar->frame(-2.6,2.6,200); hdataclone->plotOn(ploteta); ploteta->Draw(); ceta->SaveAs("eta.eps"); //TH1 *heold = hdatasigtest->createHistogram("heold",testvar); //TH1 *heraw = hdata->createHistogram("heraw",*tgtvar,Binning(800,0.,2.)); TH1 *heraw = hdataclone->createHistogram("hraw",*rawvar,Binning(800,0.,2.)); TH1 *hecor = hdataclone->createHistogram("hecor",*ecorvar); //heold->SetLineColor(kRed); hecor->SetLineColor(kBlue); heraw->SetLineColor(kMagenta); hecor->GetXaxis()->SetRangeUser(0.6,1.2); //heold->GetXaxis()->SetRangeUser(0.6,1.2); TCanvas *cresponse = new TCanvas; hecor->Draw("HIST"); //heold->Draw("HISTSAME"); heraw->Draw("HISTSAME"); cresponse->SaveAs("response.eps"); cresponse->SetLogy(); cresponse->SaveAs("responselog.eps"); TCanvas *cpeakval = new TCanvas; RooPlot *plotpeak = sigpdfpeaknormvar->frame(0.,10.,100); hdataclone->plotOn(plotpeak); plotpeak->Draw(); TCanvas *cequivsigmaval = new TCanvas; RooPlot *plotequivsigma = equivsigmavar->frame(0.,0.04,100); hdataclone->plotOn(plotequivsigma); plotequivsigma->Draw(); TCanvas *cediff = new TCanvas; RooPlot *plotediff = ediffvar->frame(-0.01,0.01,100); hdataclone->plotOn(plotediff); plotediff->Draw(); printf("make fine histogram\n"); TH1 *hecorfine = hdataclone->createHistogram("hecorfine",*ecorvar,Binning(20e3,0.,2.)); printf("calc effsigma\n"); double effsigma = effSigma(hecorfine); printf("effsigma = %5f\n",effsigma); printf("condnll = %5f\n",condnllval); TFile *fhist = new TFile("hist.root","RECREATE"); fhist->WriteTObject(hecor); fhist->Close(); return; /* new TCanvas; RooPlot *ploteold = testvar.frame(0.6,1.2,100); hdatasigtest->plotOn(ploteold); ploteold->Draw(); new TCanvas; RooPlot *plotecor = ecorvar->frame(0.6,1.2,100); hdatasig->plotOn(plotecor); plotecor->Draw(); */ TH2 *profhist = (TH2*)hdataclone->createHistogram("relerrvsE",*ecorfullvar,Binning(50,0.,200.), YVar(*relerrvar,Binning(100,0.,0.05))); new TCanvas; profhist->Draw("COLZ"); new TCanvas; profhist->ProfileX()->Draw(); new TCanvas; profhist->ProfileY()->Draw(); TH2 *profhistequiv = (TH2*)hdataclone->createHistogram("equiverrvsE",*ecorfullvar,Binning(50,0.,200.), YVar(*equivsigmavar,Binning(100,0.,0.05))); new TCanvas; profhistequiv->Draw("COLZ"); new TCanvas; profhistequiv->ProfileX()->Draw(); new TCanvas; profhistequiv->ProfileY()->Draw(); }