void plots_for_config(string toyfile, string smsfile, string massGlu, string massLSP) { gROOT->SetStyle("Plain"); bool do_fat_line=false; // if you want to have HistLineWidth=1 and FuncWidth=1 as it was before instead of 2 setTDRStyle(do_fat_line); gStyle->SetTextFont(42); string massCut_ = "MassGlu==" + massGlu + "&&MassLSP==" + massLSP; string massCut2_ = "massGlu==" + massGlu + "&&massLSP==" + massLSP; TCut massCut(massCut_.c_str()); TCut massCut2(massCut2_.c_str()); string comp = "comparison_" + massGlu + "_" + massLSP; TFile *_file = TFile::Open(smsfile.c_str()); TTree *point = (TTree*)_file->Get("events"); TH1F *jzb = new TH1F("jzb", "", 50, -600, 800); point->Project("jzb", "jzb[1]", "id1==id2&&pfJetGoodNum>2&&abs(mll-91.2)<20" + massCut, "gof"); TFile *_filepa = TFile::Open(toyfile.c_str()); TTree *pointpa = (TTree*)_filepa->Get("events"); TH1F *jzbpa = new TH1F("jzbpa", "", 50, -600, 800); pointpa->Project("jzbpa", "jzb", "njets>2 && nleptons==2" + massCut2); jzbpa->SetLineColor(kRed); jzbpa->GetXaxis()->SetTitle("JZB [GeV]"); jzb->GetXaxis()->SetTitle("JZB [GeV]"); TLegend *l1 = new TLegend(0.7, 0.75, 0.9, 0.85); l1->SetFillColor(kWhite); l1->SetTextFont(42); l1->SetLineWidth(0); l1->SetBorderSize(0); l1->AddEntry(jzb, "SMS", "L"); l1->AddEntry(jzbpa, "SMS TOY", "L"); TCanvas *m1 = new TCanvas("m1"); m1->GetPad(0)->SetLogy(1); m1->cd(); jzb->DrawNormalized(); jzbpa->DrawNormalized("SAME"); l1->Draw(); CompleteSave(m1,"Plots/" + comp); delete m1; return; }
void plotDistribution( TChain* data , TChain *mc , TCut sel , TCut vtxweight , char* var , int nbins , float xmin , float xmax , char* xtitle , char* plottitle = "" , bool printplot = false , bool residual = false , bool log = false ){ //-------------------------------------- // define histograms and TGraphs //-------------------------------------- TH1F* hdata = new TH1F(Form("hdata_%i" , iplot),Form("hdata_%i" , iplot),nbins,xmin,xmax); TH1F* hmc = new TH1F(Form("hmc_%i" , iplot),Form("hmc_%i" , iplot),nbins,xmin,xmax); TH1F* hmc_novtx = new TH1F(Form("hmc_novtx_%i" , iplot),Form("hmc_novtx%i" , iplot),nbins,xmin,xmax); hdata->Sumw2(); hmc->Sumw2(); TGraphAsymmErrors* grdata = new TGraphAsymmErrors(); TGraphAsymmErrors* grmc = new TGraphAsymmErrors(); TH1F* hdata_denom = new TH1F(Form("hdata_denom_%i",iplot),"",nbins,xmin,xmax); TH1F* hmc_denom = new TH1F(Form("hmc_denom_%i" ,iplot),"",nbins,xmin,xmax); //-------------------------------------- // set up canvas and pads //-------------------------------------- TCanvas *can = new TCanvas(Form("can_%i",iplot),Form("can_%i",iplot),600,600); can->cd(); if( log ) gPad->SetLogy(); TPad *mainpad = new TPad("mainpad","mainpad",0.0,0.0,1.0,0.8); if( residual ){ mainpad->Draw(); mainpad->cd(); if( log ) mainpad->SetLogy(); } //-------------------------------------- // fill histos and TGraphs //-------------------------------------- data->Draw(Form("min(%s,%f)>>hdata_%i" , var,xmax-0.0001,iplot),sel); mc ->Draw(Form("min(%s,%f)>>hmc_%i" , var,xmax-0.0001,iplot),sel*vtxweight); mc ->Draw(Form("min(%s,%f)>>hmc_novtx_%i" , var,xmax-0.0001,iplot),sel); for( int ibin = 1 ; ibin <= nbins ; ibin++ ){ hdata_denom->SetBinContent(ibin,hdata->Integral()); hmc_denom->SetBinContent(ibin,hmc->Integral()); } grdata->BayesDivide(hdata,hdata_denom); grmc->BayesDivide(hmc_novtx,hmc_denom); //-------------------------------------- // get efficiencies and errors //-------------------------------------- /* float ndata1 = (float) hdata->GetBinContent(1); float ndata = (float) hdata->Integral(); float effdata = 1-ndata1 / ndata; // TGraphAsymmErrors* grdata_temp = new TGraphAsymmErrors(); // TH1F* hdata_num_temp = new TH1F(Form("hdata_num_temp_%i",iplot),"",1,0,1); // TH1F* hdata_den_temp = new TH1F(Form("hdata_den_temp_%i",iplot),"",1,0,1); // hdata_num_temp->SetBinContent(1,ndata-ndata1); // hdata_den_temp->SetBinContent(1,ndata); // grdata_temp->BayesDivide(hdata_num_temp,hdata_den_temp); //float effdataerr = sqrt(ndata1) / ndata; float effdataerr = 0.5 * ( grdata->GetErrorYlow(0) + grdata->GetErrorYhigh(0) ); //float effdataerr = 0.5 * ( grdata_temp->GetErrorYlow(0) + grdata_temp->GetErrorYhigh(0) ); float nmc1 = (float) hmc->GetBinContent(1); float nmc = (float) hmc->Integral(); float effmc = 1-nmc1 / nmc; //float effmcerr = hmc->GetBinError(1) / nmc; float effmcerr = 0.5 * ( grmc->GetErrorYlow(0) + grmc->GetErrorYhigh(0) ); float datatot = hdata->Integral(); float mctot = hmc->Integral(); cout << endl; cout << plottitle << endl; cout << "Data eff " << Form("%.2f +/- %.3f",effdata,effdataerr) << endl; cout << "MC eff " << Form("%.2f +/- %.3f",effmc ,effmcerr) << endl; cout << "Data/MC " << Form("%.2f +/- %.2f",ratio ,ratioerr) << endl; */ float ndata = hdata->Integral(); float ndata1 = hdata->Integral(2,20); float ndata2 = hdata->Integral(3,20); float ndata3 = hdata->Integral(4,20); float ndata4 = hdata->Integral(5,20); float ndata5 = hdata->Integral(6,20); float nmc = hmc->Integral(); float nmc1 = hmc->Integral(2,20); float nmc2 = hmc->Integral(3,20); float nmc3 = hmc->Integral(4,20); float nmc4 = hmc->Integral(5,20); float nmc5 = hmc->Integral(6,20); float effdata1 = ndata1/ndata; float effdata2 = ndata2/ndata; float effdata3 = ndata3/ndata; float effdata4 = ndata4/ndata; float effdata5 = ndata5/ndata; float effmc1 = nmc1/nmc; float effmc2 = nmc2/nmc; float effmc3 = nmc3/nmc; float effmc4 = nmc4/nmc; float effmc5 = nmc5/nmc; float effdata1err = getBinomialError(ndata1,ndata); float effdata2err = getBinomialError(ndata2,ndata); float effdata3err = getBinomialError(ndata3,ndata); float effdata4err = getBinomialError(ndata4,ndata); float effdata5err = getBinomialError(ndata5,ndata); float effmc1err = getBinomialError(nmc1,nmc); float effmc2err = getBinomialError(nmc2,nmc); float effmc3err = getBinomialError(nmc3,nmc); float effmc4err = getBinomialError(nmc4,nmc); float effmc5err = getBinomialError(nmc5,nmc); float ratio1 = effdata1/effmc1; float ratio2 = effdata2/effmc2; float ratio3 = effdata3/effmc3; float ratio4 = effdata4/effmc4; float ratio5 = effdata5/effmc5; float ratio1err = ratio1 * sqrt(pow(effdata1err/effdata1,2)+pow(effmc1err/effmc1,2)); float ratio2err = ratio2 * sqrt(pow(effdata2err/effdata2,2)+pow(effmc2err/effmc2,2)); float ratio3err = ratio3 * sqrt(pow(effdata3err/effdata3,2)+pow(effmc3err/effmc3,2)); float ratio4err = ratio4 * sqrt(pow(effdata4err/effdata4,2)+pow(effmc4err/effmc4,2)); float ratio5err = ratio5 * sqrt(pow(effdata5err/effdata5,2)+pow(effmc5err/effmc5,2)); cout << endl << endl << plottitle << endl; int left = 20; // char* delimstart = "|"; // char* delim = "|"; // char* delimend = "|"; // char* pm = "+/-"; char* delimstart = ""; char* delim = "&"; char* delimend = "\\\\"; char* pm = "$\\pm$"; cout << delimstart << setw(10) << "" << setw(4) << delim << setw(left) << "$>$ 1 GeV" << setw(4) << delim << setw(left) << "$>$ 2 GeV" << setw(4) << delim << setw(left) << "$>$ 3 GeV" << setw(4) << delim << setw(left) << "$>$ 4 GeV" << setw(4) << delim << setw(left) << "$>$ 5 GeV" << setw(4) << delimend << endl; cout << delimstart << setw(10) << "data" << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effdata1,pm,effdata1err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effdata2,pm,effdata2err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effdata3,pm,effdata3err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effdata4,pm,effdata4err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effdata5,pm,effdata5err) << setw(4) << delimend << endl; cout << delimstart << setw(10) << "mc" << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effmc1,pm,effmc1err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effmc2,pm,effmc2err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effmc3,pm,effmc3err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effmc4,pm,effmc4err) << setw(4) << delim << setw(left) << Form("%.3f %s %.4f",effmc5,pm,effmc5err) << setw(4) << delimend << endl; cout << delimstart << setw(10) << "data/mc" << setw(4) << delim << setw(left) << Form("%.2f %s %.2f",ratio1,pm,ratio1err) << setw(4) << delim << setw(left) << Form("%.2f %s %.2f",ratio2,pm,ratio2err) << setw(4) << delim << setw(left) << Form("%.2f %s %.2f",ratio3,pm,ratio3err) << setw(4) << delim << setw(left) << Form("%.2f %s %.2f",ratio4,pm,ratio4err) << setw(4) << delim << setw(left) << Form("%.2f %s %.2f",ratio5,pm,ratio5err) << setw(4) << delimend << endl; //-------------------------------------- // draw stuff //-------------------------------------- hdata->Scale(1.0/hdata->Integral()); hmc->Scale(1.0/hmc->Integral()); if( log ) hmc->GetYaxis()->SetRangeUser(0.0001,5); else hmc->GetYaxis()->SetRangeUser(0.0,1); hmc->GetXaxis()->SetTitle(xtitle); hmc->SetLineColor(2); hmc->SetMarkerColor(2); hmc->DrawNormalized("hist"); hmc->DrawNormalized("sameE1"); hdata->SetLineColor(4); hdata->SetMarkerColor(4); hdata->Draw("sameE1"); grdata->SetLineColor(6); grmc->SetLineColor(7); //grdata->Draw("sameP"); //grmc->Draw("sameP"); TLegend *leg = new TLegend(0.6,0.7,0.8,0.9); leg->AddEntry(hdata , "data" , "lp"); leg->AddEntry(hmc , "MC" , "lp"); leg->SetBorderSize(0); leg->SetFillColor(0); leg->Draw(); TLatex *t = new TLatex(); t->SetNDC(); if( TString(plottitle).Contains("el") ) t->DrawLatex(0.6,0.6,"electrons"); if( TString(plottitle).Contains("mu") ) t->DrawLatex(0.6,0.6,"muons"); if( TString(plottitle).Contains("0j") ) t->DrawLatex(0.6,0.5,"n_{jets} #geq 0"); if( TString(plottitle).Contains("1j") ) t->DrawLatex(0.6,0.5,"n_{jets} #geq 1"); if( TString(plottitle).Contains("2j") ) t->DrawLatex(0.6,0.5,"n_{jets} #geq 2"); if( TString(plottitle).Contains("3j") ) t->DrawLatex(0.6,0.5,"n_{jets} #geq 3"); if( TString(plottitle).Contains("4j") ) t->DrawLatex(0.6,0.5,"n_{jets} #geq 4"); //-------------------------------------- // draw residual plots //-------------------------------------- if( residual ){ can->cd(); TPad *respad = new TPad("respad","respad",0.0,0.8,1.0,1.0); respad->Draw(); respad->cd(); respad->SetGridy(); TH1F* hratio = (TH1F*) hdata->Clone(Form("hratio_%i",iplot)); hratio->Divide(hmc); hratio->SetMarkerColor(1); hratio->SetLineColor(1); hratio->Draw(); hratio->GetYaxis()->SetRangeUser(0.5,1.5); hratio->GetYaxis()->SetNdivisions(5); hratio->GetYaxis()->SetLabelSize(0.2); hratio->GetXaxis()->SetLabelSize(0.0); TLine line; line.DrawLine(xmin,1.0,xmax,1.0); } //data->Scan("run:lumi:event:probe->pt():probe->eta():tkisonew:met:mt:njets:nbl:nbm",sel+"tkisonew>20"); //data->Scan("run:lumi:event:probe->pt():probe->eta():tkisonew:met:mt:njets:nbl:nbm",sel); if( printplot ) can->Print(Form("plots/%s.pdf",plottitle)); iplot++; // TCanvas *c2 = new TCanvas(); // c2->cd(); // grdata->Draw("AP"); }
void plotDist(char* drawVar="sumJetMass_pt50",char* binning="(20,0,2000)"){ gROOT->ProcessLine(".L ~/tdrstyle.C"); setTDRStyle(); // fill signal tree and draw /////////////////////////////////////// TChain* sigTree = new TChain("TreeFiller/AnalysisTree"); cout << sampleNames[ kT1tttt ] << " " << sigTree->Add( fileNames[ kT1tttt ] ) << endl; char drawString[150]; sprintf(drawString,"%s>>sig%s",drawVar,binning); sigTree->Draw(drawString,"nJets_pt50>3"); TH1F* sig = (TH1F*) gDirectory->Get("sig"); sig->SetLineWidth(2); sig->SetLineColor(colorCodes[kT1tttt]); TLegend* leg = new TLegend(.9,.9,.7,.7); leg->SetFillColor(0); leg->AddEntry(sig,sampleNames[ kT1tttt ],"l"); // Fill background tree and draw ////////////////////////////////////// const int numBkg = 4; TChain* bkgTree[numBkg]; TH1F* bkg[numBkg]; for( unsigned int iBkg = 0 ; iBkg < numBkg ; iBkg++){ //if( iBkg == 1 || iBkg==2 || iBkg==3 ) continue; bkgTree[iBkg] = new TChain("TreeFiller/AnalysisTree"); cout << sampleNames[ iBkg ] << " " << bkgTree[iBkg]->Add( fileNames[ iBkg ] ) << endl; sprintf(drawString,"%s>>bkg%i%s",drawVar,iBkg,binning); bkgTree[iBkg]->Draw(drawString,"nJets_pt50>3"); char histoName[150]; sprintf(histoName,"bkg%i",iBkg); bkg[iBkg] = (TH1F*) gDirectory->Get(histoName); bkg[iBkg]->SetLineWidth(2); bkg[iBkg]->SetLineColor(colorCodes[iBkg]); leg->AddEntry(bkg[iBkg],sampleNames[ iBkg ],"l"); } // hacking normalizations... //sig->Scale(1000*4.e-2/50000.); //bkg[kQCD]->Scale(1000*2.99e10/100000.); sig->DrawNormalized(""); for( unsigned int iBkg = 0 ; iBkg < numBkg ; iBkg++){ //if( iBkg == 1 || iBkg==2 || iBkg==3 ) continue; bkg[iBkg]->DrawNormalized("SAME"); } leg->Draw(); }
void toyMC(int nsteps = 1e6) { Float_t LA = 9.2; Float_t LB = 10.3; Float_t SF = 492./LB; Float_t eSF = TMath::Sqrt(23.*23.+19.7*19.7)/LB; // Float_t OF = 358./LA; // Float_t eOF = 27./LA; Float_t OF = 358./LB; Float_t eOF = 31./LB; Float_t SigB = 188.+238-414; TH1F* hSig = new TH1F("hSig ; SF-R_{SF/OF}#timesOF ; ","Signal component",600,-100.,500.); hSig->SetLineColor(kRed+2); TRandom3* ran = new TRandom3(); for ( int i=0; i<nsteps; ++i ) { Float_t nBSF = ran->Gaus(SF*LB,eSF*LB); Float_t nBOF = ran->Gaus(OF*LB,eOF*LB); Float_t rsfof = ran->Gaus(1.0,0.05); hSig->Fill(nBSF-nBOF*rsfof); } TCanvas* mycan = new TCanvas("mycan","",100,10,900,600); mycan->SetLogy(); TH1F* hSigNorm = hSig->DrawNormalized(""); hSigNorm->SetMinimum(1e-5); hSigNorm->Draw(); // Find 95% CL range float integral = 0; int binStart = -1; while ( integral <= 0.025 ) { ++binStart; integral += hSigNorm->GetBinContent(binStart); } std::cout << integral << " up to " << hSigNorm->GetBinCenter(binStart) << std::endl; integral = 0; int binEnd = hSigNorm->GetNbinsX()+2; while ( integral <= 0.025 ) { --binEnd; integral += hSigNorm->GetBinContent(binEnd); } std::cout << integral << " up to " << hSigNorm->GetBinCenter(binEnd) << std::endl; // Draw 95% CL TBox* range95 = new TBox(hSigNorm->GetBinCenter(binStart),hSigNorm->GetMinimum(),hSigNorm->GetBinCenter(binEnd),1.2*hSigNorm->GetMaximum()); range95->SetFillColor(kBlue-9); range95->SetFillStyle(1000); range95->SetLineColor(range95->GetFillColor()); range95->Draw(); hSigNorm->SetTitle("hSigNorm; \"S\" #equiv SF - R_{SF/OF}#timesOF ; pdf"); hSigNorm->Draw("same"); std::cout << "Integrating from 0 to " << SigB << ": " << std::endl; std::cout << hSigNorm->Integral(0,hSigNorm->FindBin(SigB)) <<std::endl; TLegend* legend = new TLegend(0.6,0.7,0.95,0.9,"","brNDC"); legend->SetBorderSize(0); legend->AddEntry(hSigNorm,"Expected \"S\" for block B","l"); legend->AddEntry(range95,"95% region","f"); legend->Draw(); mycan->RedrawAxis(); mycan->SaveAs("toyMCexp.pdf"); TArrow* a = new TArrow(SigB,hSigNorm->GetMaximum(),SigB,hSigNorm->GetMinimum()*1.1,0.02); a->SetLineColor(kBlue+2); a->Draw(); TLegend* legend2 = new TLegend(0.6,0.6,0.95,0.7,"","brNDC"); legend2->SetBorderSize(0); legend2->AddEntry(a,"Observed (p-value 0.6%)","l"); legend2->Draw(); mycan->SaveAs("toyMC.pdf"); }
TCanvas *PlotDataMCs(TChain *data, std::vector<TChain *> mc_vec, TString branchname, TString binning, TString category, TString selection, TString dataLabel, std::vector<TString> mcLabel_vec, TString xLabel, TString yLabelUnit, TString outputPath, TString label4Print, bool logy=false, bool usePU=true, bool ratio=true,bool smear=false, bool scale=false, bool useR9Weight=false, TString pdfIndex=""){ std::cout<<"Using macro/PlotDataMC.C:: PlotDataMCs"<<std::endl; TStopwatch watch; watch.Start(); //gStyle->SetOptStat(11); int nHist= mc_vec.size(); int colors[4]={kRed,kGreen,kBlue,kCyan}; int fillstyle[4]={0,0,0,0}; //3003,3004,3005,3006}; if(nHist>4) return NULL; TString yLabel; TCanvas *c = new TCanvas("c",""); TPad * pad1 = new TPad("pad1", "pad1",0.01,0.13,0.75,1.); TPad * pad2 = new TPad("pad2", "pad2",0.01,0.001,0.75,0.2); TPad * pad3 = new TPad("pad3", "pad3",0.68,0.001,1.,0.2); pad1->SetRightMargin(0.1); pad1->SetLogy(); pad1->Draw(); pad1->cd(); pad2->SetGrid(); pad2->SetBottomMargin(0.4); pad2->SetRightMargin(0.1); pad2->Draw(); pad2->cd(); pad3->SetGrid(); //pad2->SetTopMargin(0.01); pad3->SetBottomMargin(0.4); pad3->SetRightMargin(0.1); pad3->Draw(); pad3->cd(); pad1->cd(); TString branchNameData=branchname; TString branchNameMC=branchname; ElectronCategory_class cutter; data->SetBranchStatus("*",0); std::set<TString> branchList = cutter.GetBranchNameNtuple(category); for(std::set<TString>::const_iterator itr = branchList.begin(); itr != branchList.end(); itr++){ std::cout << "[STATUS] Enabling branch: " << *itr << std::endl; data->SetBranchStatus(*itr, 1); } data->SetBranchStatus(branchname, 1); data->SetBranchStatus("scaleEle", 1); if(branchNameData.Contains("energySCEle_regrCorrSemiParV5_pho")) cutter.energyBranchName="energySCEle_regrCorrSemiParV5_pho"; else if(branchNameData.Contains("energySCEle_regrCorrSemiParV5_ele")) cutter.energyBranchName="energySCEle_regrCorrSemiParV5_ele"; else if (branchNameData.Contains("energySCEle")) cutter.energyBranchName="energySCEle"; TCut selection_data=""; if(category.Sizeof()>1) selection_data = cutter.GetCut(category, false,0,scale); selection_data+=selection; TCut selection_MC=""; if(category.Sizeof()>1) selection_MC = cutter.GetCut(category, false,0); selection_MC+=selection; if(smear){ std::cout<<"Apply smear to the MC"<<std::endl; branchNameMC.ReplaceAll("invMass_SC_corr","(invMass_SC_corr*sqrt(smearEle[0]*smearEle[1]))"); branchNameMC.ReplaceAll("invMass_SC_regrCorr_pho","(invMass_SC_regrCorr_pho*sqrt(smearEle[0]*smearEle[1]))"); branchNameMC.ReplaceAll("invMass_SC_regrCorrSemiParV5_pho","(invMass_SC_regrCorrSemiParV5_pho*sqrt(smearEle[0]*smearEle[1]))"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho","(energySCEle_regrCorr_pho*smearEle) "); branchNameMC.ReplaceAll("energySCEle_corr[0]","(energySCEle_corr[0]*smearEle[0])"); branchNameMC.ReplaceAll("energySCEle_corr[1]","(energySCEle_corr[1]*smearEle[1])"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[0]","(energySCEle_regrCorr_pho[0]*smearEle[0])"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[1]","(energySCEle_regrCorr_pho[1]*smearEle[1])"); branchNameMC.ReplaceAll("energySCEle_regrCorrSemiParV5_ele[0]","(energySCEle_regrCorrSemiParV5_ele[0]*smearEle[0])"); branchNameMC.ReplaceAll("energySCEle_regrCorrSemiParV5_ele[1]","(energySCEle_regrCorrSemiParV5_ele[1]*smearEle[1])"); if(!branchNameMC.Contains("smear")) branchNameMC.ReplaceAll("energySCEle_regrCorrSemiParV5_ele","(energySCEle_regrCorrSemiParV5_ele*smearEle)"); } if(scale){ std::cout << "Apply scale to the data" << std::endl; branchNameData.ReplaceAll("invMass_SC_corr","(invMass_SC_corr*sqrt(scaleEle[0]*scaleEle[1]))"); branchNameData.ReplaceAll("invMass_SC_regrCorr_pho","(invMass_SC_regrCorr_pho*sqrt(scaleEle[0]*scaleEle[1]))"); branchNameData.ReplaceAll("invMass_SC_regrCorrSemiParV5_pho","(invMass_SC_regrCorrSemiParV5_pho*sqrt(scaleEle[0]*scaleEle[1]))"); branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_pho ","(energySCEle_regrCorrSemiParV5_pho*scaleEle)"); branchNameData.ReplaceAll("energySCEle_corr[0]","(energySCEle_corr*scaleEle[0])"); branchNameData.ReplaceAll("energySCEle_corr[1]","(energySCEle_corr*scaleEle[1])"); branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_pho[0]","(energySCEle_regrCorrSemiParV5_pho[0]*scaleEle[0])"); branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_pho[1]","(energySCEle_regrCorrSemiParV5_pho[1]*scaleEle[1])"); branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_ele[0]","(energySCEle_regrCorrSemiParV5_ele[0]*scaleEle[0])"); branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_ele[1]","(energySCEle_regrCorrSemiParV5_ele[1]*scaleEle[1])"); if(!branchNameData.Contains("scale")) branchNameData.ReplaceAll("energySCEle_regrCorrSemiParV5_ele","(energySCEle_regrCorrSemiParV5_ele*scaleEle)"); } std::cout <<"For data you are plotting: "<<branchNameData <<std::endl; std::cout <<"For MC your are plotting: " << branchNameMC << std::endl; std::cout << "Selection for data is "<<selection_data<<std::endl; std::cout << "binning is "<<binning<<std::endl; // Draw histograms data->Draw(branchNameData+">>data_hist"+binning, selection_data); if(nHist > 0){//for MC for(std::vector<TChain *>::const_iterator mc_itr = mc_vec.begin(); mc_itr != mc_vec.end(); mc_itr++){ TChain *mc = *mc_itr; mc->SetBranchStatus("*",0); for(std::set<TString>::const_iterator itr = branchList.begin(); itr != branchList.end(); itr++){ //std::cout << "[STATUS] Enabling branch: " << *itr << std::endl; mc->SetBranchStatus(*itr, 1); } mc->SetBranchStatus(branchname, 1); mc->SetBranchStatus("smearEle", 1); mc->SetBranchStatus("puWeight",1); mc->SetBranchStatus("mcGenWeight", 1); mc->SetBranchStatus("r9Weight", 1); TString mcHistName; mcHistName+="hist_"; mcHistName+=mc_itr-mc_vec.begin();//better for .C generation //TString mcHistName; mcHistName+=mc_itr-mc_vec.begin(); mcHistName+="_hist";//better for .C generation //decide this for MC //TString weights="mcGenWeight"; //if(pdfIndex!="") weights+="*(pdfWeights_cteq66["+pdfIndex+"]/pdfWeights_cteq66[0])"; //if(usePU) weights+="*puWeight"; //if(useR9Weight) weights+="*r9Weight"; //std::cout<<"Complete selection for MC is "<<selection_MC *weights.Data()<<std::endl; //mc->Draw(branchNameMC+">>"+mcHistName+binning, selection_MC *weights.Data()); mc->Draw(branchNameMC+">>"+mcHistName+binning, selection_MC); } } c->Clear(); TLegend *leg = new TLegend(0.5,0.7,0.7,0.85); leg->SetBorderSize(1); leg->SetFillColor(0); leg->SetTextSize(0.04); // if(dataLabel !="" && mcLabel !="") leg->Draw(); // //c->GetListOfPrimitives()->Add(leg,""); TH1F *d = (TH1F *) gROOT->FindObject("data_hist"); if(dataLabel !="") leg->AddEntry(d,dataLabel,"p"); d->SetStats(0); d->SetTitle(""); d->SetMarkerStyle(20); d->SetMarkerSize(1); if(d->GetEntries()==0 || d->Integral()==0){ //d=(TH1F *) gROOT->FindObject("0_hist"); d=(TH1F *) gROOT->FindObject("hist_0"); d->SetMarkerSize(0); } //d->SaveAs("tmp/d_hist.root"); //s->SaveAs("tmp/s_hist.root"); yLabel.Form("Events /(%.2f %s)", d->GetBinWidth(2), yLabelUnit.Data()); std::cout << "nEvents data: " << d->Integral() << "\t" << d->GetEntries() << std::endl; std::cout << "Now normalizing data to 1: "<<std::endl; std::cout << "80 is in bin "<<d->FindBin(80)<<std::endl; std::cout << "100 is in bin "<<d->FindBin(100)<<std::endl; std::cout << "d integral is "<<d->Integral()<<std::endl; std::cout << "d integral(1,100) is "<<d->Integral(1,100)<<std::endl; d->Scale(1./d->Integral()); float max = 0; max=1.2*d->GetMaximum(); std::cout << "max = " << max << std::endl; d->GetYaxis()->SetTitle(yLabel); d->GetXaxis()->SetTitle(xLabel); if(logy){ max*=10; d->GetYaxis()->SetRangeUser(0.1,max); c->SetLogy(); } else { d->GetYaxis()->SetRangeUser(0,max); } for(int i=0; i < nHist; i++){ //TString mcHistName; mcHistName+=i; mcHistName+="_hist"; TString mcHistName; mcHistName+="hist_";mcHistName+=i; TH1F *s = (TH1F *) gROOT->FindObject(mcHistName); s->SetStats(0); s->SetTitle(""); if(s==NULL) continue; std::cout << "nEvents signal: " << s->Integral() << "\t" << s->GetEntries() << std::endl; if(d->Integral()==0 && s->Integral()==0){ delete c; return NULL; } if(logy){ s->GetYaxis()->SetRangeUser(0.1,max); } else { s->GetYaxis()->SetRangeUser(0,max); } s->GetYaxis()->SetTitle(yLabel); s->GetXaxis()->SetTitle(xLabel); s->SetMarkerStyle(20); s->SetMarkerSize(1); s->SetMarkerColor(colors[i]); s->SetFillStyle(fillstyle[i]); s->SetFillColor(colors[i]); s->SetLineColor(colors[i]); s->SetLineWidth(2); TH1F* s_norm = NULL; if(i==0) s_norm = (TH1F *) (s->DrawNormalized("hist", d->Integral())); else s_norm = (TH1F *) (s->DrawNormalized("hist same", d->Integral())); if(logy){ //d_norm->GetYaxis()->SetRangeUser(0.1,max); s_norm->GetYaxis()->SetRangeUser(0.1,max); } else { //d_norm->GetYaxis()->SetRangeUser(0,max); s_norm->GetYaxis()->SetRangeUser(0,max); } if(mcLabel_vec[i] !="") leg->AddEntry(s,mcLabel_vec[i], "lf"); // TH1F *sRatio = (TH1F *) s->Clone(mcHistName+"_ratio"); // sRatio->Divide(d); // if(ratio){ // pad2->cd(); // if(i==0) sRatio->Draw(); // else sRatio->Draw("same"); // } // pad1->cd(); } //TH1F* d_norm = s_norm; //if(d!=s) d_norm = (TH1F *) (d->DrawNormalized("p same", d->Integral())); std::cout<<"After normalization "<<std::endl; //std::cout<<"s_norm" <<s_norm->Integral()<<std::endl; std::cout<<"data Integral " <<d->Integral()<<std::endl; if(nHist>0) d->Draw("p same"); else d->Draw("p"); // std::cout << "Variable & Data & Simulation \\" << std::endl; // std::cout << "Mean & " << d->GetMean() << " " << d->GetMeanError() // << " & " << s_norm->GetMean() << " " << s_norm->GetMeanError() << " \\" << std::endl; // std::cout << "Std. dev. & " << d->GetRMS() << " " << d->GetRMSError() // << " & " << s_norm->GetRMS() << " " << s_norm->GetRMSError() << " \\" << std::endl; // std::cout << "\\hline" << std::endl; // std::cout << "$\\Chi^2$ " << d->Chi2Test(s_norm, "UW CHI2/NDF NORM") << std::endl; if(mcLabel_vec.size()!=0) leg->Draw(); TPaveText *pv = new TPaveText(0.25,0.95,0.65,1,"NDC"); pv->AddText("CMS Preliminary 2016"); pv->SetFillColor(0); pv->SetBorderSize(0); pv->Draw(); watch.Stop(); watch.Print(); c->SaveAs(outputPath+label4Print+".png","png"); c->SaveAs(outputPath+label4Print+".pdf","pdf"); c->SaveAs(outputPath+label4Print+".eps","eps"); c->SaveAs(outputPath+label4Print+".C","C"); return c; }
TCanvas *PlotDataMCMC(TChain *data, TChain *mc, TChain *mc2, TString branchname, TString binning, TString category, TString selection, TString dataLabel, TString mcLabel, TString mc2Label, TString xLabel, TString yLabelUnit, bool logy=false, bool usePU=true, bool smear=false, bool scale=false){ TString yLabel; TCanvas *c = new TCanvas("c",""); TString branchNameData=branchname; TString branchNameMC=branchname; ElectronCategory_class cutter; TCut selection_data=""; if(category.Sizeof()>1) selection_data = cutter.GetCut(category, false,0); selection_data+=selection; TCut selection_MC=""; if(category.Sizeof()>1) selection_MC = cutter.GetCut(category, true,0); selection_MC+=selection; if(smear){ branchNameMC.ReplaceAll("invMass_SC_regrCorr_pho ","(invMass_SC_regrCorr_pho*sqrt(smearEle[0]*smearEle[1]))"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho ","(energySCEle_regrCorr_pho*smearEle) "); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[0]","(energySCEle_regrCorr_pho[0]*smearEle[0])"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[1]","(energySCEle_regrCorr_pho[1]*smearEle[1])"); } if(scale){ branchNameData.ReplaceAll("invMass_SC_regrCorr_pho ","(invMass_SC_regrCorr_pho*sqrt(corrEle[0]*corrEle[1]))"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho ","(energySCEle_regrCorr_pho*corrEle)"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho[0]","(energySCEle_regrCorr_pho[0]*corrEle[0])"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho[1]","(energySCEle_regrCorr_pho[1]*corrEle[1])"); } //std::cout << branchNameData << "\t" << branchNameMC << std::endl; data->Draw(branchNameData+">>data_hist"+binning, selection_data); if(mc!=NULL){ if(usePU) mc->Draw(branchNameMC+">>mc_hist"+binning, selection_MC *"puWeight"); else mc->Draw(branchNameMC+">>mc_hist"+binning, selection_MC); } if(mc2!=NULL){ if(usePU) mc2->Draw(branchNameMC+">>mc2_hist"+binning, selection_data *"puWeight"); else mc2->Draw(branchNameMC+">>mc2_hist"+binning, selection_data); } c->Clear(); TH1F *d = (TH1F *) gROOT->FindObject("data_hist"); TH1F *s = (TH1F *) gROOT->FindObject("mc_hist"); TH1F *s2 = (TH1F *) gROOT->FindObject("mc2_hist"); if(s==NULL){ std::cerr << "[WARNING] no mc" << std::endl; s=d; } if(s2==NULL){ std::cerr << "[WARNING] no mc2" << std::endl; s2=s; } std::cout << s->GetEntries() << "\t" << s2->GetEntries() << "\t" << d->GetEntries() << std::endl; //d->SaveAs("tmp/d_hist.root"); s->SaveAs("tmp/s_hist.root"); s2->SaveAs("tmp/s2_hist.root"); yLabel.Form("Events /(%.2f %s)", s->GetBinWidth(2), yLabelUnit.Data()); float max = 1.1 * std::max( d->GetMaximum(),///d->Integral(), s->GetMaximum() ///s->Integral() ); max=1.1*d->GetMaximum(); std::cout << "max = " << max << std::endl; std::cout << "nEvents data: " << d->Integral() << "\t" << d->GetEntries() << std::endl; std::cout << "nEvents signal: " << s->Integral() << "\t" << s->GetEntries() << std::endl; std::cout << "nEvents signal2: " << s2->Integral() << "\t" << s2->GetEntries() << std::endl; if(logy){ max*=10; d->GetYaxis()->SetRangeUser(0.1,max); s->GetYaxis()->SetRangeUser(0.1,max); s2->GetYaxis()->SetRangeUser(0.1,max); c->SetLogy(); } else { d->GetYaxis()->SetRangeUser(0,max); s->GetYaxis()->SetRangeUser(0,max); s2->GetYaxis()->SetRangeUser(0,max); } s->GetYaxis()->SetTitle(yLabel); s->GetXaxis()->SetTitle(xLabel); s2->GetYaxis()->SetTitle(yLabel); s2->GetXaxis()->SetTitle(xLabel); d->GetYaxis()->SetTitle(yLabel); d->GetXaxis()->SetTitle(xLabel); d->SetMarkerStyle(20); d->SetMarkerSize(1); if(d != s){ s->SetMarkerStyle(20); s->SetMarkerSize(1); s->SetFillStyle(3001); s->SetFillColor(kRed); } if(s2 != s){ //s2->SetMarkerStyle(1); //s2->SetMarkerSize(0); //s->SetFillStyle(0); //s->SetFillColor(kB); s2->SetLineWidth(3); s2->SetLineColor(kBlack); } TH1F* s_norm = (TH1F *) (s->DrawNormalized("hist", d->Integral())); TH1F* s2_norm = (TH1F *) (s2->DrawNormalized("hist same", d->Integral())); //TH1F* d_norm = s_norm; //if(d!=s) d_norm = (TH1F *) (d->DrawNormalized("p same", d->Integral())); if(d!=s) d->Draw("p same"); if(logy){ //d_norm->GetYaxis()->SetRangeUser(0.1,max); s_norm->GetYaxis()->SetRangeUser(0.1,max); c->SetLogy(); } else { //d_norm->GetYaxis()->SetRangeUser(0,max); s_norm->GetYaxis()->SetRangeUser(0,max); } std::cout << "Variable & Data & Simulation & Simulation2 \\" << std::endl; std::cout << "Mean & " << d->GetMean() << " " << d->GetMeanError() << " & " << s_norm->GetMean() << " " << s_norm->GetMeanError() << " & " << s2_norm->GetMean() << " " << s2_norm->GetMeanError() << " \\" << std::endl; std::cout << "Std. dev. & " << d->GetRMS() << " " << d->GetRMSError() << " & " << s_norm->GetRMS() << " " << s_norm->GetRMSError() << " & " << s2_norm->GetRMS() << " " << s2_norm->GetRMSError() << " \\" << std::endl; std::cout << "\\hline" << std::endl; std::cout << "$\\Chi^2$ " << d->Chi2Test(s_norm, "UW CHI2/NDF NORM") << std::endl; TLegend *leg = new TLegend(0.6,0.8,1,1); if(dataLabel !="") leg->AddEntry(d,dataLabel,"p"); if(mcLabel !="") leg->AddEntry(s,mcLabel, "lf"); if(mc2Label !="") leg->AddEntry(s2,mc2Label, "l"); leg->SetBorderSize(1); leg->SetFillColor(0); leg->SetTextSize(0.04); if(dataLabel !="" && mcLabel !="") leg->Draw(); //c->GetListOfPrimitives()->Add(leg,""); TPaveText *pv = new TPaveText(0.23,0.95,0.6,1,"NDC"); pv->AddText("CMS Preliminary 2016"); pv->SetFillColor(0); pv->SetBorderSize(0); pv->Draw(); return c; }
TCanvas *PlotDataMC(TChain *data, TChain *mc, TString branchname, TString binning, TString category, TString selection, TString dataLabel, TString mcLabel, TString xLabel, TString yLabelUnit, bool logy=false, bool usePU=true, bool smear=false, bool scale=false){ TString yLabel; std::cout<<"entering"<<std::endl; TCanvas *c = new TCanvas("c",""); TString branchNameData=branchname; TString branchNameMC=branchname; ElectronCategory_class cutter; std::cout<<"entering2"<<std::endl; TCut selection_data=""; if(category.Sizeof()>1) selection_data = cutter.GetCut(category, false,0,true); selection_data.Print(); // return NULL; selection_data+=selection; TCut selection_MC=""; if(category.Sizeof()>1) selection_MC = cutter.GetCut(category, false,0); selection_MC+=selection; std::cout<<"qui"<<std::endl; if(smear){ branchNameMC.ReplaceAll("invMass_SC_regrCorr_pho ","(invMass_SC_regrCorr_pho*sqrt(smearEle[0]*smearEle[1]))"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho ","(energySCEle_regrCorr_pho*smearEle) "); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[0]","(energySCEle_regrCorr_pho[0]*smearEle[0])"); branchNameMC.ReplaceAll("energySCEle_regrCorr_pho[1]","(energySCEle_regrCorr_pho[1]*smearEle[1])"); } if(scale){ branchNameData.ReplaceAll("invMass_SC_regrCorr_pho ","(invMass_SC_regrCorr_pho*sqrt(corrEle[0]*corrEle[1]))"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho ","(energySCEle_regrCorr_pho*corrEle)"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho[0]","(energySCEle_regrCorr_pho[0]*corrEle[0])"); branchNameData.ReplaceAll("energySCEle_regrCorr_pho[1]","(energySCEle_regrCorr_pho[1]*corrEle[1])"); branchNameData.ReplaceAll("energySCEle_regrCorr_ele ","(energySCEle_regrCorr_ele*corrEle)"); branchNameData.ReplaceAll("energySCEle_regrCorr_ele[0]","(energySCEle_regrCorr_ele[0]*corrEle[0])"); branchNameData.ReplaceAll("energySCEle_regrCorr_ele[1]","(energySCEle_regrCorr_ele[1]*corrEle[1])"); } //std::cout << branchNameData << "\t" << branchNameMC << std::endl; if(branchname=="HLT"){ TH1F *hlt_data = new TH1F("data_hist","",500,0,500); TH1F *hlt_mc = new TH1F("mc_hist","",500,0,500); std::vector< std::string > *HLTNames = new std::vector<std::string>; ///< List of HLT names std::vector<Bool_t> *HLTResults = new std::vector<Bool_t>; ///< 0=fail, 1=fire data->SetBranchAddress("HLTNames", &HLTNames); data->SetBranchAddress("HLTResults", &HLTResults); data->GetEntries(); for(Long64_t jentry=0; jentry < data->GetEntriesFast(); jentry++){ data->GetEntry(jentry); std::vector<Bool_t>::const_iterator hltRes_itr=HLTResults->begin(); for(std::vector<std::string>::const_iterator hlt_itr=HLTNames->begin(); hlt_itr!=HLTNames->end(); hlt_itr++,hltRes_itr++){ std::cout << *hlt_itr << std::endl; hlt_data->Fill(hlt_itr-HLTNames->begin(),*hltRes_itr); } } data->ResetBranchAddresses(); mc->SetBranchAddress("HLTNames", &HLTNames); mc->SetBranchAddress("HLTResults", &HLTResults); mc->GetEntries(); for(Long64_t jentry=0; jentry < mc->GetEntriesFast(); jentry++){ mc->GetEntry(jentry); std::vector<Bool_t>::const_iterator hltRes_itr=HLTResults->begin(); for(std::vector<std::string>::const_iterator hlt_itr=HLTNames->begin(); hlt_itr!=HLTNames->end(); hlt_itr++,hltRes_itr++){ std::cout << *hlt_itr << std::endl; hlt_mc->Fill(hlt_itr-HLTNames->begin(),*hltRes_itr); } } for(std::vector<std::string>::const_iterator hlt_itr=HLTNames->begin(); hlt_itr!=HLTNames->end(); hlt_itr++){ int index=hlt_itr-HLTNames->begin()+1; if(hlt_mc->GetBinContent(index)>0) hlt_mc->GetXaxis()->SetBinLabel(index,(*hlt_itr).c_str()); } } else { std::cout<<"qui"<<std::endl; data->Draw(branchNameData+">>data_hist"+binning, selection_data); if(mc!=NULL){ if(usePU) mc->Draw(branchNameMC+">>mc_hist"+binning, selection_MC *"puWeight"); else mc->Draw(branchNameMC+">>mc_hist"+binning, selection_MC); std::cout<<"qui"<<std::endl; } } c->Clear(); TH1F *d = (TH1F *) gROOT->FindObject("data_hist"); TH1F *s = (TH1F *) gROOT->FindObject("mc_hist"); if(s==NULL) s=d; //d->SaveAs("tmp/d_hist.root"); s->SaveAs("tmp/s_hist.root"); std::cout<<"qui"<<std::endl; yLabel.Form("Events /(%.2f %s)", s->GetBinWidth(2), yLabelUnit.Data()); float max = 1.1 * std::max( d->GetMaximum(),///d->Integral(), s->GetMaximum() ///s->Integral() ); max=1.1*d->GetMaximum(); std::cout << "max = " << max << std::endl; std::cout << "nEvents data: " << d->Integral() << "\t" << d->GetEntries() << std::endl; std::cout << "nEvents signal: " << s->Integral() << "\t" << s->GetEntries() << std::endl; if(logy){ max*=10; d->GetYaxis()->SetRangeUser(0.1,max); s->GetYaxis()->SetRangeUser(0.1,max); c->SetLogy(); } else { d->GetYaxis()->SetRangeUser(0,max); s->GetYaxis()->SetRangeUser(0,max); } s->GetYaxis()->SetTitle(yLabel); s->GetXaxis()->SetTitle(xLabel); d->GetYaxis()->SetTitle(yLabel); d->GetXaxis()->SetTitle(xLabel); d->SetMarkerStyle(20); d->SetMarkerSize(1); if(d != s){ s->SetMarkerStyle(20); s->SetMarkerSize(1); s->SetFillStyle(3001); s->SetFillColor(kRed); } TH1F* s_norm = (TH1F *) (s->DrawNormalized("hist", d->Integral())); //TH1F* d_norm = s_norm; //if(d!=s) d_norm = (TH1F *) (d->DrawNormalized("p same", d->Integral())); if(d!=s) d->Draw("p same"); if(logy){ //d_norm->GetYaxis()->SetRangeUser(0.1,max); s_norm->GetYaxis()->SetRangeUser(0.1,max); c->SetLogy(); } else { //d_norm->GetYaxis()->SetRangeUser(0,max); s_norm->GetYaxis()->SetRangeUser(0,max); } std::cout << "Variable & Data & Simulation \\" << std::endl; std::cout << "Mean & " << d->GetMean() << " " << d->GetMeanError() << " & " << s_norm->GetMean() << " " << s_norm->GetMeanError() << " \\" << std::endl; std::cout << "Std. dev. & " << d->GetRMS() << " " << d->GetRMSError() << " & " << s_norm->GetRMS() << " " << s_norm->GetRMSError() << " \\" << std::endl; std::cout << "\\hline" << std::endl; std::cout << "$\\Chi^2$ " << d->Chi2Test(s_norm, "UW CHI2/NDF NORM") << std::endl; TLegend *leg = new TLegend(0.6,0.8,1,1); if(dataLabel !="") leg->AddEntry(d,dataLabel,"p"); if(mcLabel !="") leg->AddEntry(s,mcLabel, "lf"); leg->SetBorderSize(1); leg->SetFillColor(0); leg->SetTextSize(0.04); if(dataLabel !="" && mcLabel !="") leg->Draw(); //c->GetListOfPrimitives()->Add(leg,""); TPaveText *pv = new TPaveText(0.2,0.95,0.7,1,"NDC"); pv->AddText("CMS Preliminary 2016"); pv->SetFillColor(0); pv->SetBorderSize(0); pv->Draw(); return c; }
void probabilityDirection(){ int _vertex = 0; int _pdg[MAXN]; float _probability[MAXN]; float _chi2[MAXN]; int _generation[MAXN]; gStyle->SetCanvasPreferGL(kTRUE); TCanvas * c1 = new TCanvas("c1", "The 3d view",0,0,1000,500); gStyle->SetCanvasColor(kWhite); gStyle->SetPadColor(kWhite); TPad *boxPad = new TPad("box", "box", 0.02, 0.02, 0.48, 0.92); TPad *box1Pad = new TPad("box1", "box1", 0.52, 0.02, 0.98, 0.92); boxPad->Draw(); box1Pad->Draw(); int nbin = 40; TH1F * probhist = new TH1F("Phi","Phi",nbin,0,1.01 ); TH1F * probhist_non = new TH1F("Teta","Teta",nbin,0,1.01 ); probhist_non->Sumw2(); TH1F * chihist= new TH1F("PhiD","PhiD",40,0,30 ); TH1F * chihist_non = new TH1F("TetaD","TetaD",40,0,30 ); chihist_non->Sumw2(); TChain* T = new TChain("TaggedVertices"); T->Add("TrashRecoTest.root"); TChain* T2 = new TChain("Stats"); T2->Add("TrashMCTest.root"); int mTotalNumberOfEvents = T->GetEntries(); T->SetBranchAddress("numberOfTagged", &_vertex); T->SetBranchAddress("PDG", _pdg); T->SetBranchAddress("generation", _generation); T->SetBranchAddress("chi2", _chi2); T->SetBranchAddress("probability", _probability); int _btotalnumber = 0; int _bbartotalnumber = 0; int _bnumber = 0; int _bbarnumber = 0; float _bdistance = 0.0; float _bbardistance = 0.0; float _bIPdistance = 0.0; float _bbarIPdistance = 0.0; T2->SetBranchAddress("btotalnumber", &_btotalnumber); T2->SetBranchAddress("bbartotalnumber", &_bbartotalnumber); T2->SetBranchAddress("bnumber", &_bnumber); T2->SetBranchAddress("bbarnumber", &_bbarnumber); T2->SetBranchAddress("bdistance", &_bdistance); T2->SetBranchAddress("bbardistance", &_bbardistance); T2->SetBranchAddress("bIPdistance", &_bIPdistance); T2->SetBranchAddress("bbarIPdistance", &_bbarIPdistance); cout << "mTotalNumberOfEvents: " << mTotalNumberOfEvents << '\n'; int counter = 0; int totalcounter = 0; int num = 2; float distcut = .5; for (unsigned int i = 0; i < mTotalNumberOfEvents; i += 1) { T->GetEntry(i); T2->GetEntry(i); vector<int> bs; vector<int> bbars; for (int j = 0; j < _vertex; j++) { if (_pdg[j] == 5) { bs.push_back(j); } else//if (_pdg[j] == -5) { bbars.push_back(j); } } for (int k = 0; k < bbars.size(); k++) { /*if ( _bbarIPdistance < 0.50 || _bbartotalnumber > 5 || _bbartotalnumber < 3 || _bbarnumber < 2 || _bbartotalnumber - _bbarnumber < 2 ) { continue; }*/ if (bbars.size() > 1) { std::cout << "Nb: " << i << '\n'; probhist->Fill(_probability[bbars[k]]); chihist->Fill(_chi2[bbars[k]]); } else { probhist_non->Fill(_probability[bbars[0]]); chihist_non->Fill(_chi2[bbars[0]]); } } for (int m = 0; m < bs.size(); m++) { /*if ( _bIPdistance < 0.50 || _btotalnumber > 5 //|| _btotalnumber < 3 || _bnumber < 2 || _btotalnumber - _bnumber < 2 ) { continue; }*/ if (bs.size() > 1) { probhist->Fill(_probability[bs[m]]); chihist->Fill(_chi2[bs[m]]); } else { probhist_non->Fill(_probability[bs[0]]); chihist_non->Fill(_chi2[bs[0]]); } } if ( bbars.size() > 0) { totalcounter++; } if ( bs.size() > 0) { totalcounter++; } } boxPad->cd(); probhist_non->SetMarkerStyle(20); chihist_non->SetMarkerStyle(20); chihist_non->SetMarkerColor(kBlack); chihist_non->SetMarkerSize(0.7); chihist_non->GetXaxis()->SetTitle("#chi^2"); chihist->SetFillColor(kYellow); chihist->GetXaxis()->SetTitle("#chi^{2}"); probhist_non->SetMarkerColor(kBlack); probhist_non->SetMarkerSize(0.7); probhist_non->GetXaxis()->SetTitle("P(V)"); //probhist->GetYaxis()->SetRange(0,0.1); //probhist_non->GetYaxis()->SetRange(0,0.1); probhist->SetMaximum(2000); probhist_non->SetMaximum(2000); probhist_non->SetMinimum(0); probhist->SetMinimum(0); probhist->SetFillColor(kYellow); probhist->GetXaxis()->SetTitle("P(V)"); probhist->DrawNormalized("same"); probhist_non->DrawNormalized("ex0psame"); boxPad->SetGrid(); box1Pad->cd(); box1Pad->SetLogy(); chihist->DrawNormalized(""); chihist_non->DrawNormalized("ex0psame",1); box1Pad->SetGrid(); box1Pad->Modified(); boxPad->Modified(); std::cout << "Statistics: " << probhist->GetEntries() << " with ternary; " << probhist_non->GetEntries() << " without ternary; " << totalcounter << " total; " << counter << " discarded\n"; std::cout << "Mean: " << probhist->GetMean() << " with ternary; " << probhist_non->GetMean() << " without ternary;\n"; }
void plotShape(string var, string title, int nBins, float min, float max, string label, int tags, int nsub){ gROOT->SetBatch(0); TFile *file1 = new TFile("Dec3_QCD_300_Inclusive_all.root"); TFile *file2 = new TFile("Dec3_QCD_470_Inclusive_all.root"); TFile *file3 = new TFile("Dec3_QCD_600_Inclusive_all.root"); TFile *file4 = new TFile("Dec3_QCD_800_Inclusive_all.root"); TFile *file5 = new TFile("Dec3_QCD_1000_Inclusive_all.root"); TFile *file6 = new TFile("Dec3_QCD_1400_Inclusive_all.root"); //TFile *data = new TFile("trees/data_all_mistag.root"); TChain *ttbar10 = new TChain("treeVars"); TChain *ttbar7 = new TChain("treeVars"); TChain *signal = new TChain("treeVars"); TChain *signal1 = new TChain("treeVars"); TChain *signal15 = new TChain("treeVars"); TChain *signal3 = new TChain("treeVars"); TTree *tree1 = (TTree *) file1->Get("treeVars"); TTree *tree2 = (TTree *) file2->Get("treeVars"); TTree *tree3 = (TTree *) file3->Get("treeVars"); TTree *tree4 = (TTree *) file4->Get("treeVars"); TTree *tree5 = (TTree *) file5->Get("treeVars"); TTree *tree6 = (TTree *) file6->Get("treeVars"); ttbar10->Add("Jan13_ttjets10_ptw.root"); ttbar7->Add("Jan13_ttjets7_ptw.root"); signal->Add("Aug19_Zp20_sec0_ttpair__TriggernoWeight.root"); signal1->Add("Aug19_Zp10_sec0_ttpair__TriggernoWeight.root"); signal15->Add("Aug19_Zp15_sec0_ttpair__TriggernoWeight.root"); signal3->Add("Aug19_Zp30_sec0_ttpair__TriggernoWeight.root"); //TTree *treeD = data->Get("treeVars"); string qcdvar = var; if (var == "mttMass") qcdvar = "mttMassPred"; string btag = " "; string btag0 = " && jet1SubjetMaxBDisc < 0.679 && jet2SubjetMaxBDisc < 0.679";// && jet1SubjetMaxBDisc > 0 && jet2SubjetMaxBDisc > 0"; string btag1 = " && (jet1SubjetMaxBDisc < 0.679 || jet2SubjetMaxBDisc < 0.679) && (jet1SubjetMaxBDisc > 0.679 || jet2SubjetMaxBDisc > 0.679)";// && jet1SubjetMaxBDisc > 0 && jet2SubjetMaxBDisc > 0"; string btag2 = " && jet1SubjetMaxBDisc > 0.679 && jet2SubjetMaxBDisc > 0.679";// && jet1SubjetMaxBDisc > 0 && jet2SubjetMaxBDisc > 0"; string nsub_sel = " "; if (tags == 0) btag = btag0; else if (tags == 1) btag = btag1; else if (tags == 2) btag = btag2; else btag = " "; if (nsub == 1) nsub_sel = " && jet1tau32 < 0.7 && jet2tau32 < 0.7"; string sel = "(index == 0 && cutflow == 4 && abs(deltaY) < 1.0" + btag + nsub_sel + ")"; string qcdsel = "(mistagWt)*(index == 1 && abs(deltaY) < 1.0" + btag +")"; if (nsub == 1) qcdsel = "(mistagWt)*(index == 1 && abs(deltaY) < 1.0" + btag + " && (jet1tau32 < 0.7 && jet2tau32 < 0.7) )"; string ttbarsel = sel+"*(ptReweight)"; TString btag_string = "0+1+2 b-tags"; if (tags == 0) btag_string = "0 b-tags"; if (tags == 1) btag_string = "1 b-tags"; if (tags == 2) btag_string = "2 b-tags"; TH1F *qcd1H = new TH1F("qcd1H", "qcd1H", nBins, min, max); TH1F *qcd2H = new TH1F("qcd2H", "qcd2H", nBins, min, max); TH1F *qcd3H = new TH1F("qcd3H", "qcd3H", nBins, min, max); TH1F *qcd4H = new TH1F("qcd4H", "qcd4H", nBins, min, max); TH1F *qcd5H = new TH1F("qcd5H", "qcd5H", nBins, min, max); TH1F *qcd6H = new TH1F("qcd6H", "qcd6H", nBins, min, max); TH1F *qcd1predH = new TH1F("qcd1predH", "qcd1predH", nBins, min, max); TH1F *qcd2predH = new TH1F("qcd2predH", "qcd2predH", nBins, min, max); TH1F *qcd3predH = new TH1F("qcd3predH", "qcd3predH", nBins, min, max); TH1F *qcd4predH = new TH1F("qcd4predH", "qcd4predH", nBins, min, max); TH1F *qcd5predH = new TH1F("qcd5predH", "qcd5predH", nBins, min, max); TH1F *qcd6predH = new TH1F("qcd6predH", "qcd6predH", nBins, min, max); TH1F *ttbar10H = new TH1F("ttbar10H", "ttbar10H", nBins,min,max); TH1F *ttbar7H = new TH1F("ttbar7H", "ttbar7H", nBins,min,max); TH1F *signalH = new TH1F("signalH", "signalH", nBins,min,max); TH1F *signal1H = new TH1F("signal1H", "signal1H", nBins,min,max); TH1F *signal15H = new TH1F("signal15H", "signal15H", nBins,min,max); TH1F *signal3H = new TH1F("signal3H", "signal3H", nBins,min,max); cout << "VARIABLE: " << var << endl; tree1->Draw(Form("%s>>qcd1H", var.c_str()), sel.c_str(), "goff"); tree2->Draw(Form("%s>>qcd2H", var.c_str()), sel.c_str(), "goff"); tree3->Draw(Form("%s>>qcd3H", var.c_str()), sel.c_str(), "goff"); tree4->Draw(Form("%s>>qcd4H", var.c_str()), sel.c_str(), "goff"); tree5->Draw(Form("%s>>qcd5H", var.c_str()), sel.c_str(), "goff"); tree6->Draw(Form("%s>>qcd6H", var.c_str()), sel.c_str(), "goff"); ttbar10->Draw(Form("%s>>ttbar10H", var.c_str()), ttbarsel.c_str()); ttbar7->Draw(Form("%s>>ttbar7H", var.c_str()), ttbarsel.c_str()); signal->Draw(Form("%s>>signalH", var.c_str()), sel.c_str()); signal1->Draw(Form("%s>>signal1H", var.c_str()), sel.c_str()); signal15->Draw(Form("%s>>signal15H", var.c_str()), sel.c_str()); signal3->Draw(Form("%s>>signal3H", var.c_str()), sel.c_str()); tree1->Draw(Form("%s>>qcd1predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); tree2->Draw(Form("%s>>qcd2predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); tree3->Draw(Form("%s>>qcd3predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); tree4->Draw(Form("%s>>qcd4predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); tree5->Draw(Form("%s>>qcd5predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); tree6->Draw(Form("%s>>qcd6predH", qcdvar.c_str()), qcdsel.c_str(), "goff"); //treeD->Draw(Form("%s>>dataH%s", variable.c_str(), binning.c_str()), cut.c_str(), "goff"); cout << "HEREEEEEEEEEEEEE" << endl; //dataH->Sumw2(); qcd1predH->Sumw2(); qcd2predH->Sumw2(); qcd3predH->Sumw2(); qcd4predH->Sumw2(); qcd5predH->Sumw2(); qcd6predH->Sumw2(); qcd1H->Sumw2(); qcd2H->Sumw2(); qcd3H->Sumw2(); qcd4H->Sumw2(); qcd5H->Sumw2(); qcd6H->Sumw2(); double lumi = 19400; double k = 1.0; qcd1H->Scale( k*1759.6*lumi / 5927300. ); qcd2H->Scale( k*113.9*lumi / 3994848. ); qcd3H->Scale( k*27.0*lumi / 3992760. ); qcd4H->Scale( k*3.57*lumi / 3978569. ); qcd5H->Scale( k*0.738*lumi / 1964086. ); qcd6H->Scale( k*0.0335*lumi / 2000062. ); qcd1predH->Scale( k*1759.6*lumi / 5927300. ); qcd2predH->Scale( k*113.9*lumi / 3994848. ); qcd3predH->Scale( k*27.0*lumi / 3992760. ); qcd4predH->Scale( k*3.57*lumi / 3978569. ); qcd5predH->Scale( k*0.738*lumi / 1964086. ); qcd6predH->Scale( k*0.0335*lumi / 2000062. ); ttbar7H->Scale(245. * lumi * 0.074 / 3082812.); ttbar10H->Scale(245. * lumi * 0.014 / 1249111.); signalH->Scale(1. * lumi / 90778. ); signal1H->Scale(1. * lumi / 101697. ); signal15H->Scale(1. * lumi / 20757. ); signal3H->Scale(1. * lumi / 91209. ); TH1F *totalH = qcd1H->Clone("totalH"); TH1F *totalPredH = qcd1predH->Clone("totalPredH"); totalH->Add(qcd2H); totalH->Add(qcd3H); totalH->Add(qcd4H); totalH->Add(qcd5H); totalH->Add(qcd6H); totalPredH->Add(qcd2predH); totalPredH->Add(qcd3predH); totalPredH->Add(qcd4predH); totalPredH->Add(qcd5predH); totalPredH->Add(qcd6predH); TCanvas *c1 = new TCanvas("c1", "c1",0,0,600,400); c1->Range(0,0,1,1); c1->Draw(); /* TPad *c1_1 = new TPad("c1_1", "newpad",0.01,0.01,0.99,0.32); c1_1->Draw(); TPad *c1_2 = new TPad("c1_2", "newpad",0.01,0.33,0.99,0.99); c1_2->Draw(); c1->cd(); c1_2->cd(); c1_2->SetTopMargin(0.1); c1_2->SetBottomMargin(0.01); c1_2->SetRightMargin(0.05); c1_2->SetLeftMargin(0.1); c1_2->SetFillStyle(0); c1->SetLogy(1); */ TH1F *ttbarH = (TH1F *) ttbar7H->Clone("ttbarH"); ttbarH->Add(ttbar10H); totalH->SetLineColor(kBlue); totalH->SetLineWidth(2); //totalH->DrawNormalized("hist"); //totalPredH->Draw("hist same"); qcd1predH->SetLineColor(kBlue); qcd2predH->SetLineColor(kRed); qcd3predH->SetLineColor(kGreen); qcd4predH->SetLineColor(kOrange); qcd5predH->SetLineColor(kViolet); qcd6predH->SetLineColor(kCyan); //qcd1predH->Draw("hist same"); //qcd2predH->Draw("hist same"); //qcd3predH->Draw("hist same"); //qcd4predH->Draw("hist same"); //qcd5predH->Draw("hist same"); //qcd6predH->Draw("hist same"); totalH->SetMarkerSize(0); totalH->SetLineWidth(3); totalH->SetLineColor(kBlack); totalH->GetXaxis()->SetTitle(title.c_str()); totalH->GetYaxis()->SetTitle("Fraction of Events"); totalH->GetYaxis()->SetTitleOffset(1.25); totalH->DrawNormalized("hist"); ttbarH->SetLineColor(kRed - 1); ttbarH->SetLineWidth(3); ttbarH->DrawNormalized("hist same"); signal1H->SetLineColor(kGreen + 1); signal1H->SetLineWidth(2); signal1H->DrawNormalized("hist same"); signalH->SetLineColor(kViolet); signalH->SetLineWidth(2); signalH->DrawNormalized("hist same"); signal3H->SetLineColor(kCyan + 2); signal3H->SetLineWidth(2); signal3H->DrawNormalized("hist same"); TLegend *leg = new TLegend(0.1,0.9,0.9,0.99); leg->SetNColumns(3); leg->AddEntry(totalH, btag_string, ""); leg->AddEntry(totalH, "QCD", "l"); leg->AddEntry(ttbarH, "t#bar{t}", "l"); leg->AddEntry(signal1H, "Narrow Z' (1 TeV)", "l"); leg->AddEntry(signalH, "Narrow Z' (2 TeV)", "l"); leg->AddEntry(signal3H, "Narrow Z' (3 TeV)", "l"); leg->SetFillColor(0); leg->Draw("same"); TLatex *cmsLabel = new TLatex(); cmsLabel->SetNDC(); //cmsLabel.DrawLatex(0.1,0.9, "CMS Preliminary, #sqrt{s} = 8 TeV, 19.7 fb^{-1}"); //cmsLabel->DrawLatex(0.8, 0.9, label.c_str()); //qcd1H->Draw("same"); //qcd2H->Draw("same"); //qcd3H->Draw("same"); //qcd4H->Draw("same"); //qcd5H->Draw("same"); //qcd6H->Draw("same"); //dataH->DrawNormalized("E same"); c1->cd(); //c1->SetTopMargin(0.01); //c1->SetBottomMargin(0.3); //c1->SetRightMargin(0.05); //c1->SetLeftMargin(0.1); c1->SetFillStyle(0); TH1F *ratioH = new TH1F(); ratioH->Sumw2(); ratioH = (TH1F *) totalH->Clone("ratioH"); ratioH->Divide(totalPredH); ratioH->GetYaxis()->SetRangeUser(0.,2.); ratioH->GetYaxis()->SetTitle("Data / BG Ratio"); ratioH->GetYaxis()->SetTitleOffset(0.4); ratioH->GetYaxis()->SetTitleSize(0.11); ratioH->GetXaxis()->SetLabelSize(0.11); ratioH->GetXaxis()->SetTitleSize(0.11); ratioH->GetXaxis()->SetTitle( "Dijet Invariant Mass"); //ratioH->Draw("E"); TF1 *line = new TF1("line", "1", 0, 5000); line->SetLineColor(kBlack); //line->Draw("same"); c1->SaveAs(Form("closureTest_%d_%d.pdf", tags, nsub)); }