void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMergedAll","(metOutOfConex0+metOutOfConex1+metOutOfConex2+metOutOfConex3+metOutOfConex4+metOutOfConex5)"); t->SetAlias("metxMerged0","(metOutOfConex0)"); t->SetAlias("metxMerged1","(metOutOfConex1)"); t->SetAlias("metxMerged2","(metOutOfConex2)"); t->SetAlias("metxMerged3","(metOutOfConex3)"); t->SetAlias("metxMerged4","(metOutOfConex4+metOutOfConex5)"); // =========================================================== // Analysis Setup // =========================================================== const int nBin = 5; double bins[nBin+1] = {0.5,1.0,1.5,4,8,1000}; int colors[5] = {kBlue-10,kYellow-7, kOrange-2,kGreen-5,kRed-3}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.11,0.22,0.33,0.49999}; // Selection cut TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>2./3*TMath::Pi()&&!maskEvt"; // TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>3&&!maskEvt"; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; // =========================================================== // Find Average Weights // =========================================================== TH1D *hw[nBinAj]; float meanWt[nBinAj]; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { hw[iaj] = new TH1D(Form("hw_aj%d",iaj),"",1000,0,100); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("weight>>hw_aj%d",iaj), evtCut&&myCut&&ajCut); meanWt[iaj] = hw[iaj]->GetMean(); cout << " <Weight>: " << meanWt[iaj] << endl; } // =========================================================== // Draw Weighted Averages // =========================================================== TH1D *ppos[nBin]; TH1D *pneg[nBin]; TH1D *pe[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); TH1D *he[nBinAj]; // ================================= // Get Weighted Mean for each Aj bin // ================================= h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); pe[i]=(TH1D*)h2->Clone(); pe[i]->SetName(Form("p%d",i)); pe[i]->Divide(h1); ppos[i] = new TH1D(Form("ppos%d",i),"",nBinAj,ajBins); ppos[i]->SetLineColor(1); ppos[i]->SetMarkerColor(colors[i]); ppos[i]->SetFillColor(colors[i]); ppos[i]->SetFillStyle(1001); pneg[i] = new TH1D(Form("pneg%d",i),"",nBinAj,ajBins); pneg[i]->SetLineColor(1); pneg[i]->SetMarkerColor(colors[i]); pneg[i]->SetFillColor(colors[i]); pneg[i]->SetFillStyle(1001); // ================================= // Caculated Stat Error of the Mean // ================================= cout << "Stat Error for pt bin " << i << ": "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("he%d_aj%d",i,iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMerged%d))>>he%d_aj%d",i,i,iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pe[i]->SetBinError(iaj+1, theError); } cout << endl; } // Stack for (int i=nBin-1;i>=0;i--) { for(int iaj = 0 ; iaj< nBinAj ; iaj++) { double posVal=0, negVal=0; double posValErr=0, negValErr=0; if (i!=nBin-1) { posVal = ppos[i+1]->GetBinContent(iaj+1); posValErr = ppos[i+1]->GetBinError(iaj+1); negVal = pneg[i+1]->GetBinContent(iaj+1); negValErr = pneg[i+1]->GetBinError(iaj+1); } if (pe[i]->GetBinContent(iaj+1)<0) { negVal+=pe[i]->GetBinContent(iaj+1); negValErr=pe[i]->GetBinError(iaj+1); posValErr=0; } else if (pe[i]->GetBinContent(iaj+1)>0) { posVal+=pe[i]->GetBinContent(iaj+1); posValErr=pe[i]->GetBinError(iaj+1); negValErr=0; } ppos[i]->SetBinContent(iaj+1,posVal); ppos[i]->SetBinError(iaj+1,posValErr); pneg[i]->SetBinContent(iaj+1,negVal); pneg[i]->SetBinError(iaj+1,negValErr); } } TH1D *pall; TH1D *pallE; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metxMergedAll))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); // replace the sys error from pallE to pall TH1D *he[nBinAj]; cout << "Stat Error for All pt: "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("heAll_aj%d",iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMergedAll))>>heAll_aj%d",iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pall->SetBinError(iaj+1, theError); } cout << endl; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nBin;++i) { ppos[i]->SetLineWidth(1); ppos[i]->Draw("hist same"); pneg[i]->SetLineWidth(1); pneg[i]->Draw("hist same"); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nBin;++i) { if ( i==0 ) drawErrorShift(ppos[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(ppos[i],-0.008,addSys); if ( i==2 ) drawErrorShift(ppos[i],0.008,addSys); if ( i==3 ) drawErrorShift(ppos[i],0.016,addSys); if ( i==0 ) drawErrorShift(pneg[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(pneg[i],-0.008,addSys); if ( i==2 ) drawErrorShift(pneg[i],0.008,addSys); if ( i==3 ) drawErrorShift(pneg[i],0.016,addSys); } pall->Draw("E same"); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double err = fabs(pe[nBin-1]->GetBinContent(i+1)*0.2); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"pl"); for (int i=0;i<nBin;++i) { if (i!=nBin-1){ leg->AddEntry(ppos[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(ppos[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void CombineCentralitiesForDirectory(TString pairType, TDirectory *dataDir) { // Gather the cfs and counts to combine centrality bins vector<TString> centBins010 = {"05", "510"}; vector<TString> centBins1030 = {"1015", "1520", "2025", "2530"}; vector<TString> centBins3050 = {"3035", "3540", "4045", "4550"}; vector<TString> finalCentBins = {"010", "1030", "3050"}; vector<vector<TString> > centBins; centBins.push_back(centBins010); centBins.push_back(centBins1030); centBins.push_back(centBins3050); TDirectory *mergeDir = dataDir->GetDirectory("Merged"); if(!mergeDir) { cout<<"Merge directory does not exist. Cannot merge."<<endl; return; } //For each merge group, get the necessary CFs and counts for(UInt_t iMerge = 0; iMerge < centBins.size(); iMerge++) { vector<TH1D*> cfs; vector<Double_t> counts; Double_t totalCounts = 0; for(UInt_t iCF = 0; iCF < centBins[iMerge].size(); iCF++) { TString cfName = "CF" + pairType + centBins[iMerge][iCF]; TH1D *cf = (TH1D*)mergeDir->Get(cfName); if(!cf) { cout<<"Could not find CF named "<<cfName<<" in "<<mergeDir->GetName()<<endl; return; } cfs.push_back(cf); TString countName = "Count" + pairType + centBins[iMerge][iCF]; TVectorD *count = (TVectorD*) mergeDir->Get(countName); totalCounts += count[0](0); counts.push_back(count[0](0)); } // Finally, combine the CFs TH1D *combinedCF = CombineCFs(cfs, counts); if (!combinedCF) { cout << "Combine CF returned nothing. Continuing loop." <<endl; continue; } TVectorD finalCount(1); finalCount[0] = totalCounts; // Set names TString combinedCFName = "CF" + pairType + finalCentBins[iMerge]; TString combinedCountName = "Count" + pairType + finalCentBins[iMerge]; combinedCF->SetName(combinedCFName); combinedCF->SetTitle(combinedCFName); // Set axis ranges combinedCF->SetAxisRange(0.9, 1.1, "Y"); combinedCF->SetAxisRange(0., .5, "X"); combinedCF->SetLabelSize(0.05, "X"); combinedCF->SetLabelSize(0.05, "Y"); combinedCF->SetTitleSize(0.05, "X"); combinedCF->SetNdivisions(505, "X"); combinedCF->SetNdivisions(505, "Y"); cout<<"Writing combined CF "<<combinedCF->GetName() <<" to "<<mergeDir->GetName()<<endl; combinedCF->SetDirectory(0); mergeDir->cd(); combinedCF->Write(combinedCF->GetName(), TObject::kOverwrite); finalCount.Write(combinedCountName, TObject::kOverwrite); } }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { // =========================================================== // Get Input // =========================================================== TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMergedAll","(metx0+metx1+metx2+metx3+metx4+metx5)"); t->SetAlias("metxMerged0","(metx0+metx1+metx2+metx3)"); t->SetAlias("metxMerged1","(metx1+metx2+metx3)"); t->SetAlias("metxMerged2","(metx2+metx3)"); t->SetAlias("metxMerged3","(metx3)"); t->SetAlias("metxMerged4","(metx4+metx5)"); //TString name2(infname); //name2.ReplaceAll("ntv2deadforpix_",""); //name2.ReplaceAll("ntv2_",""); //t->AddFriend("dj=djTree",name2); // =========================================================== // Analysis Setup // =========================================================== Int_t plotLayer=10; const int nBin = 5; double bins[nBin+1] = {0.5,1.0,2,4,8,1000}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.13,0.24,0.35,0.69999}; // Selection cut TCut evtCut = "nljet>100&&abs(nljetacorr)<1.6&&aljet>40&&abs(aljetacorr)<1.6&&jdphi>2./3*TMath::Pi()&&!maskEvt"; cout << "Cut: " << TString(evtCut) << endl; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; // =========================================================== // Find Average Weights // =========================================================== TH1D *hw[nBinAj]; float meanWt[nBinAj]; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { hw[iaj] = new TH1D(Form("hw_aj%d",iaj),"",1000,0,100); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("weight>>hw_aj%d",iaj), evtCut&&myCut&&ajCut); meanWt[iaj] = hw[iaj]->GetMean(); cout << " <Weight>: " << meanWt[iaj] << endl; } // =========================================================== // Draw Weighted Averages // =========================================================== TH1D *p[nBin]; TH1D *pe[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); TH1D *he[nBinAj]; // ================================= // Get Weighted Mean for each Aj bin // ================================= h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); p[i]=(TH1D*)h2->Clone(); p[i]->SetName(Form("p%d",i)); p[i]->Divide(h1); p[i]->SetLineColor(1); p[i]->SetMarkerColor(colors[i]); p[i]->SetFillColor(colors[i]); // p[i]->SetFillStyle(3004+fabs(i-1)); p[i]->SetFillStyle(1001); // ================================= // Caculated Stat Error of the Mean // ================================= cout << "Stat Error for pt bin " << i << ": "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("he%d_aj%d",i,iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMerged%d))>>he%d_aj%d",i,i,iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; p[i]->SetBinError(iaj+1, theError); } cout << endl; } // correct the error bars.. cummulative -> it's own. subtractError(p[0],p[1]); subtractError(p[1],p[2]); subtractError(p[2],p[3]); TH1D *pall; TH1D *pallE; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); // t->Draw(Form("Aj>>hAll2"), Form("((-weight*metx))")*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metxMergedAll))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); // replace the sys error from pallE to pall TH1D *he[nBinAj]; cout << "Stat Error for All pt: "; for ( int iaj = 0 ; iaj< nBinAj ; iaj++) { he[iaj] = new TH1D(Form("heAll_aj%d",iaj),"",100,-200,200); TCut ajCut = Form("Aj>%f && Aj<%f", ajBins[iaj],ajBins[iaj+1]); t->Draw(Form("((metxMergedAll))>>heAll_aj%d",iaj), "weight" * evtCut&&myCut&&ajCut); float theError = he[iaj]->GetRMS()/ (sqrt(he[iaj]->GetEntries())); cout << theError << " "; pall->SetBinError(iaj+1, theError); } cout << endl; pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); float addSys = 0; if ( drawSys==1) addSys=0; // No sys error at this moment // ==================== // Finally Draw // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; p[i]->SetLineWidth(1); // p[i]->SetMarkerSize(0.1); p[i]->Draw("hist same"); } // ==================== // Draw Statistical Error bars // ==================== for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if ( i==0 ) drawErrorShift(p[i],-0.016, addSys); if ( i==1 || i==4) drawErrorShift(p[i],-0.008,addSys); if ( i==2 ) drawErrorShift(p[i],0.008,addSys); if ( i==3 ) drawErrorShift(p[i],0.016,addSys); } pall->Draw("E same"); // ==================== // Draw Systematic Errors // ==================== if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double errReco = -p[nBin-1]->GetBinContent(i+1)*0.2; double errBck = 3.0; // compare HYDJET+SIG to SIG double err = sqrt(errReco*errReco+errBck*errBck); DrawTick(y,err,err,x,1,0.02,1); } } // ==================== // Draw Legend // ==================== TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"p"); for (int i=0;i<nBin;++i) { if (plotLayer==0) continue; if (plotLayer==1&&i!=nBin-1) continue; if (i!=nBin-1){ leg->AddEntry(p[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(p[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.7,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void balanceMetVsAj(TString infname = "dj_HCPR-J50U-hiGoodMergedTracks_OfficialSelv2_Final0_120_50.root", TCut myCut = "cent<30", char *title = "",bool drawLegend = false, bool drawSys = true ) { TFile *inf = new TFile(infname); TTree *t = (TTree*)inf->Get("ntjt"); t->SetAlias("metxMerged0","metx0+metx1+metx2"); t->SetAlias("metxMerged1","metx1+metx2"); t->SetAlias("metxMerged2","metx2"); t->SetAlias("metxMerged3","metx3+metx4"); const int nBin = 4; double bins[nBin+1] = {0.5,1.5,4,8,1000}; double colors[nBin] = {38, kOrange-8,kBlue-3,kRed}; const int nBinAj = 4; double ajBins[nBinAj+1] = {0.0001,0.11,0.22,0.33,0.49999}; // Selection cut TCut evtCut = "nljet>120&&abs(nljetacorr)<2&&aljet>50&&abs(aljetacorr)<2&&jdphi>2./3*TMath::Pi()&&!maskEvt"; cout << "Sel evt: " << t->GetEntries(evtCut&&myCut) << endl; TH1D *p[nBin]; for (int i=0;i<nBin;i++) { TH1D *h1 = new TH1D(Form("h1%d",i),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("h2%d",i),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); // t->Project(Form("h%d",i),"Aj", "1"*(evtCut&&myCut)); // t->Project(Form("h2%d",i),"Aj", Form("((-1*metxMerged%d))",i)*(evtCut&&myCut)); t->Draw(Form("Aj>>h1%d",i), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>h2%d",i), Form("((-weight*metxMerged%d))",i)*(evtCut&&myCut)); p[i]=(TH1D*)h2->Clone(); p[i]->SetName(Form("p%d",i)); p[i]->Divide(h1); p[i]->SetLineColor(1); p[i]->SetMarkerColor(colors[i]); p[i]->SetFillColor(colors[i]); // p[i]->SetFillStyle(3004+fabs(i-1)); p[i]->SetFillStyle(1001); } TH1D *pall; TH1D *h1 = new TH1D(Form("hAll1"),"",nBinAj,ajBins); TH1D *h2 = new TH1D(Form("hAll2"),"",nBinAj,ajBins); h1->Sumw2(); h2->Sumw2(); t->Draw(Form("Aj>>hAll1"), "weight"*(evtCut&&myCut)); t->Draw(Form("Aj>>hAll2"), Form("((-weight*metx))")*(evtCut&&myCut)); pall=(TH1D*)h2->Clone(); pall->SetName("pall"); pall->Divide(h1); pall->SetXTitle("A_{J}"); pall->SetYTitle("<#slash{p}_{T}^{#parallel}> (GeV/c)"); pall->GetXaxis()->CenterTitle(); pall->GetYaxis()->CenterTitle(); pall->GetXaxis()->SetLabelSize(22); pall->GetXaxis()->SetLabelFont(43); pall->GetXaxis()->SetTitleSize(24); pall->GetXaxis()->SetTitleFont(43); pall->GetYaxis()->SetLabelSize(22); pall->GetYaxis()->SetLabelFont(43); pall->GetYaxis()->SetTitleSize(24); pall->GetYaxis()->SetTitleFont(43); pall->GetXaxis()->SetTitleOffset(1.8); pall->GetYaxis()->SetTitleOffset(2.4); pall->SetNdivisions(505); pall->SetAxisRange(-59.9,59.9,"Y"); pall->SetMarkerSize(1); pall->Draw("E"); for (int i=0;i<nBin;++i) { p[i]->SetLineWidth(1); p[i]->Draw("hist same"); } pall->Draw("E same"); if (drawSys == 1) { for(int i = 0; i < nBinAj; ++i){ double x = pall->GetBinCenter(i+1); double y = pall->GetBinContent(i+1); // Quote the difference between GEN and RECO in >8 Bin (20%) before adjusting eff as systematics double err = -p[nBin-1]->GetBinContent(i+1)*0.2; DrawTick(y,err,err,x,1,0.02,1); } } // Legend TLegend *leg = new TLegend(0.10,0.68,0.70,0.96); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextFont(63); leg->SetTextSize(16); leg->AddEntry(pall,Form("> %.1f GeV/c",bins[0]),"pl"); for (int i=0;i<nBin;++i) { if (i!=nBin-1){ leg->AddEntry(p[i],Form("%.1f - %.1f GeV/c",bins[i],bins[i+1]),"f"); } else { leg->AddEntry(p[i],Form("> %.1f GeV/c",bins[i]),"f"); } } if (drawLegend) leg->Draw(); TLine * l0 = new TLine(0,0,0.5,0); l0->SetLineStyle(2); l0->Draw(); TLine * l1 = new TLine(0.0001,-10,0.0001,10); l1->Draw(); TText *titleText = new TText(0.3,30,title); titleText->Draw(); }
void triggerEfficiency() { TCut trigCut; trigCut = "yhlt.HLT_HISinglePhoton40_v2"; // trigCut = "yhlt.HLT_HISinglePhoton30_v2"; //trigCut = "yhlt.L1_SingleEG5_BptxAND"; // trigCut = "yhlt.HLT_HISinglePhoton30_v2 "; // trigCut = "yhlt.L1_SingleEG5_BptxAND";// || yhlt.HLT_HIJet80_v1"; // || yhlt.HLT_HIJet80_v1"; TCut goodL1Cut = "yhlt.Run > 181675 && !(yhlt.Run==181912 || yhlt.Run==181910 || yhlt.Run==182089 || yhlt.Run==182098 || yhlt.Run==182099 || yhlt.Run==182124)"; TCut goodHLTCut = "!(yhlt.Run==182123 || yhlt.Run==182133 || yhlt.Run==181946) && yhlt.Run<=182134 "; TCut goodRunCut = goodL1Cut && goodHLTCut; const int nPtBin = 10; double ptBin[nPtBin+1] = {0,10,15,20,25,30,33,41,50,70,120}; TH1D* heff = new TH1D("heff",";Leading Photon E_{T} (GeV);",nPtBin, ptBin); TGraphAsymmErrors* geff = new TGraphAsymmErrors(); TCanvas* c1 = new TCanvas("c2","",610,522); c1->Divide(2,1); c1->cd(1); getEff(heff,geff,trigCut,ptMode, goodRunCut); handsomeTH1(heff,1); handsomeTGraph(geff,1); geff->SetMarkerStyle(20); heff->SetMarkerSize(0.1); for ( int i=0;i<= heff->GetNbinsX() ; i++) heff->SetBinError(i,0); heff->Draw(0); // heff->DrawCopy("pl"); geff->Draw("p"); drawText("HLT_HISinglePhoton40",0.4,0.3,1,18); c1->cd(2); TH1D* heffr = new TH1D("heffr",";Run number;",182400.5 - 181500.5,181500.5,182400.5); TGraphAsymmErrors* geffr = new TGraphAsymmErrors(); getEff(heffr,geffr,trigCut, runByRunMode, "pt>50" && goodRunCut); handsomeTH1(heffr,1); heffr->SetNdivisions(505); handsomeTGraph(geffr,1); geffr->SetMarkerStyle(20); heffr->Reset(); heffr->DrawCopy(); geffr->Draw("p"); TCanvas* c3 = new TCanvas("c3","",700,500); heff->SetYTitle("Efficiency"); heff->SetFillColor(kGray); heff->SetFillStyle(3001); heff->SetAxisRange(0,1.2,"Y"); heff->DrawCopy("hist "); geff->Draw("p same"); drawCMS3(0.5,0.5,84,17); drawText("HLT_HISinglePhoton40",0.5,0.3,1,18); c3->SaveAs("plot_triggerEfficiencyPhoton30.eps"); c3->SaveAs("plot_triggerEfficiencyPhoton30.gif"); }