void smearHist() { fp = new TFile("../data/response_20GeV.root","OPEN"); h1 = (TH1F*)fp->Get("h1"); h2 = (TH1F*)fp->Get("h2"); h3 = (TH1F*)h1->Clone(); h3->Reset(); h4 = (TH1F*)h1->Clone(); h4->Reset(); for(int n = 0; n < nMax; n++) { h3->Fill( (h1->GetRandom() + h1->GetRandom()) ); h4->Fill( (h1->GetRandom() - h1->GetRandom()) ); } normHist(h3); normHist(h4); h3->SetLineColor(kRed); h3->SetLineStyle(2); h3->SetLineWidth(2); h4->SetLineColor(kBlue); h4->SetLineStyle(2); h4->SetLineWidth(3); // h4->Fit("gaus"); h5 = (TH1F*)h4->Clone(); h5->Add(h3); h5->SetLineColor(kGray); h5->SetLineStyle(3); h5->SetLineWidth(5); TCanvas *can1 = new TCanvas("can1","can1"); can1->SetLogy(); h3->DrawNormalized("hist same"); h4->DrawNormalized("hist same"); h5->DrawNormalized("hist same"); h2->Draw("same e1"); /* hratio = (TH1F*) h2->Clone(); hratio->Divide(h3); TCanvas *can2 = new TCanvas("can2","can2"); hratio->GetYaxis()->SetRangeUser(0,2); hratio->Draw(); */ }
void TrkClosure( int anaMode=0, // 0=pt, 1=eta, 2=dphi, 3=xi TString outdir="fig/trkcorrv14_closure" ) { TH1::SetDefaultSumw2(); gSystem->mkdir(outdir,kTRUE); bool doCorr=true; float maxEta=2.4; float ptmin=0.5,ptmax=200; TString mod="Forest2_MergedGeneral"; TrackingCorrections trkCorr("Forest2STAv14",mod); trkCorr.AddSample("trkcorr/IterTrkCorrv14XSec/IterTrkCorrv14XSec_hy18dj80to100_akPu3Calo_100_-1_-1000_genJetMode0.root",80); trkCorr.Init(); // TFile * inf = new TFile("output_hy18dj100_fv27_ntv1_corrv14_akPu3PF_100_-1_-1000_saveTrk1_jmin100_tmin1_genJetMode0.root"); TFile * inf = new TFile("output_hy18dj80_fv27_ntv1_corrv14_akPu3PF_100_-1_-1000_saveTrk1_jmin100_tmin1_genJetMode0.root"); // TFile * inf = new TFile("output_sigdj80_fv27_ntv1_akPu3PF_100_-1_-1000_saveTrk1_jmin100_tmin1_genJetMode0_corrhi.root"); // TFile * inf = new TFile("output_sigdj80_fv27_ntv1_akPu3PF_100_-1_-1000_saveTrk1_jmin100_tmin1_genJetMode0_corrppv14jetfinexsec.root"); // TFile * inf = new TFile("output_sigdj80_fv27_ntv1_corrv14_akPu3PF_100_-1_-1000_saveTrk1_jmin100_tmin1_genJetMode0.root"); TTree * t = (TTree*)inf->Get("tgj"); ////////////////////////////////////////// // Analysis Setup ////////////////////////////////////////// TString tag=Form("trkClos%d_0to12_jpt100_pthat80",anaMode); TCut sel = "cBin<12&&pt1>100"; // TString tag=Form("trkClos%d_pp_jpt100_pthat80",anaMode); // TCut sel = "pt1>100"; TCut genpSel = ""; TCut trkSel = ""; // TCut genpSel = "simAsso==1||simAsso==2"; // TCut trkSel = "trkAsso==1||trkAsso==2"; TString trkWt = "trkWt"; float nEvt = t->GetEntries(sel); cout << sel << ": " << nEvt << " events" << endl; Compare cmp("cmp",""); TH1D * hGenp, *hTrk, *hTrkCorr; float xmin=1, xmax=119.9; bool doLogx=true, doLogy=true; TString genVar, trkVar; TCut finalGenSel,finalTrkSel; if (anaMode==0) { TH1D * hPtBin = (TH1D*)trkCorr.ptBin_->Clone("hPtBin"); hPtBin->Reset(); hPtBin->SetAxisRange(0.5,179.9,"X"); hGenp = (TH1D*)trkCorr.ptBin_->Clone("hGenp"); hTrk = (TH1D*)trkCorr.ptBin_->Clone("hTrk"); hTrkCorr = (TH1D*)trkCorr.ptBin_->Clone("hTrkCorr"); cmp.Legend(0.24,0.23,0.7,0.4); cmp.leg->AddEntry(hTrk,Form("|#eta| < %.1f",maxEta),""); tag += Form("_eta%.0f",maxEta*10); genVar="simPt"; trkVar="trkPt"; finalGenSel = sel&&genpSel&&Form("abs(simEta)<%.2f",maxEta); finalTrkSel = sel&&trkSel&&Form("abs(trkEta)<%.2f",maxEta); } else if (anaMode==1) { TH1D * hEtaBin = (TH1D*)trkCorr.etaBin_->Clone("hEtaBin"); hEtaBin->Reset(); hGenp = (TH1D*)hEtaBin->Clone("hGenp"); hTrk = (TH1D*)hEtaBin->Clone("hTrk"); hTrkCorr = (TH1D*)hEtaBin->Clone("hTrkCorr"); doLogx=false; doLogy=false; cmp.Legend(0.19,0.76,0.65,0.93); cmp.leg->AddEntry(hTrk,Form("%.1f < p_{T} < %.1f GeV/c",ptmin,ptmax),""); tag += Form("_pt%.0f",ptmin); genVar="simEta"; trkVar="trkEta"; finalGenSel = sel&&genpSel&&Form("simPt>=%.2f&&simPt<%.2f",ptmin,ptmax); finalTrkSel = sel&&trkSel&&Form("trkPt>=%.2f&&trkPt<%.2f",ptmin,ptmax); } else if (anaMode==2) { TH1D * hBin = new TH1D("hBin",";#Delta#phi(trk,jet1)",25,0,3.14159); hGenp = (TH1D*)hBin->Clone("hGenp"); hTrk = (TH1D*)hBin->Clone("hTrk"); hTrkCorr = (TH1D*)hBin->Clone("hTrkCorr"); doLogx=false; doLogy=true; cmp.Legend(0.19,0.76,0.65,0.93); cmp.leg->AddEntry(hTrk,Form("%.1f < p_{T} < %.1f GeV/c",ptmin,ptmax),""); tag += Form("_pt%.0f",ptmin); genVar="acos(cos(simPhi-phi1))"; trkVar="acos(cos(trkPhi-phi1))"; finalGenSel = sel&&genpSel&&Form("simPt>=%.2f&&simPt<%.2f",ptmin,ptmax); finalTrkSel = sel&&trkSel&&Form("trkPt>=%.2f&&trkPt<%.2f",ptmin,ptmax); } else if (anaMode==3) { TH1D * hBin = new TH1D("hBin",";#xi=1/ln(z)",12,0,6); hGenp = (TH1D*)hBin->Clone("hGenp"); hTrk = (TH1D*)hBin->Clone("hTrk"); hTrkCorr = (TH1D*)hBin->Clone("hTrkCorr"); doLogx=false; doLogy=false; cmp.Legend(0.19,0.76,0.65,0.93); cmp.leg->AddEntry(hTrk,Form("%.1f < p_{T} < %.1f GeV/c",ptmin,ptmax),""); tag += Form("_pt%.0f",ptmin); genVar="log(pt1/simPt)"; trkVar="log(pt1/trkPt)"; finalGenSel = sel&&genpSel&&Form("simPt>=%.2f&&simPt<%.2f&&(simAsso==1||simAsso==2)",ptmin,ptmax); finalTrkSel = sel&&trkSel&&Form("trkPt>=%.2f&&trkPt<%.2f&&(trkAsso==1||trkAsso==2)",ptmin,ptmax); } if (anaMode>0) { xmin= hGenp->GetBinLowEdge(1); xmax= hGenp->GetBinLowEdge(hGenp->GetNbinsX()); } // Legend cmp.leg->AddEntry(hTrk,"Raw Trk","p"); if (doCorr) cmp.leg->AddEntry(hTrkCorr,"Corr. Trk","p"); cmp.leg->AddEntry(hGenp,"Gen. Particle","l"); ////////////////////////////////////////// // Run Analysis ////////////////////////////////////////// cout << genVar << ": " << finalGenSel << endl; cout << trkVar << ": " << finalTrkSel << endl; if (doCorr) cout << "Corr: " << (finalTrkSel)*trkWt << endl; t->Draw(genVar+">>hGenp",finalGenSel,"goff"); t->Draw(trkVar+">>hTrk",finalTrkSel,"goff"); if (doCorr) t->Draw(trkVar+">>hTrkCorr",(finalTrkSel)*trkWt); hGenp->Scale(1./nEvt); hTrk->Scale(1./nEvt); hTrkCorr->Scale(1./nEvt); ////////////////////////////////////////// // Draw ////////////////////////////////////////// TCanvas * c2 = new TCanvas("c2","c2",800,400); c2->Divide(2,1); c2->cd(1); hGenp->SetLineColor(2); hTrk->SetMarkerStyle(kOpenCircle); normHist(hGenp,-1,true); normHist(hTrk,-1,true); normHist(hTrkCorr,-1,true); if (doLogx) gPad->SetLogx(); if (doLogy) gPad->SetLogy(); else hGenp->SetAxisRange(0,hGenp->GetMaximum()*1.4,"Y"); if (anaMode==0) hGenp->SetAxisRange(xmin,xmax,"X"); hGenp->Draw("hist"); hTrk->Draw("sameE"); if (doCorr) hTrkCorr->Draw("sameE"); cmp.leg->Draw(); c2->cd(2); TH1D * hTrkRat = (TH1D*)hTrk->Clone("hTrkRat"); hTrkRat->Divide(hGenp); TH1D * hTrkCorrRat = (TH1D*)hTrkCorr->Clone("hTrkCorrRat"); if (doCorr) hTrkCorrRat->Divide(hGenp); if (doLogx) gPad->SetLogx(); if (anaMode==0) hTrkRat->SetAxisRange(xmin,xmax,"X"); hTrkRat->SetAxisRange(0.,2,"Y"); TLine * l1 = new TLine(xmin,1,xmax,1); l1->SetLineStyle(2); hTrkRat->Draw("E"); l1->Draw(); if (doCorr) hTrkCorrRat->Draw("sameE"); c2->Print(Form("%s/%s.gif",outdir.Data(),tag.Data())); c2->Print(Form("%s/%s.pdf",outdir.Data(),tag.Data())); c2->Print(Form("%s/%s.C",outdir.Data(),tag.Data())); }
void drawTrkCorrPtvCent( TString outdir="fig/trkcorrv14" ) { TH1::SetDefaultSumw2(); gSystem->mkdir(outdir,kTRUE); float xmin=1,xmax=179.9; TString title="Iterative Tracking"; ///////////////////////////////////////////////////////////////////////////////////// // Load Histograms ///////////////////////////////////////////////////////////////////////////////////// HiForest * c = new HiForest("/net/hidsk0001/d00/scratch/yjlee/merge/v27/pthat170/Dijet170_HydjetDrum_v27_mergedV1.root"); c->doTrackCorrections = true; c->InitTree(); TrackingCorrections * trkCorr = c->trackCorrections[0]; cout << endl << "========= plot =========" << endl; Int_t etaPM=2; // 7 +2,-3 for |eta|<1.2, 7 =5,-6 for full eta Float_t jetPtMin=0; Int_t jetBegBin = trkCorr->jetBin_->FindBin(jetPtMin); Int_t jetEndBin = trkCorr->numJEtBins_; cout << Form("jet pt %.0f bin: ",jetPtMin) << jetBegBin << " to " << jetEndBin << endl; cout << "========================" << endl; bool doTestCorr = true; string infpath=trkCorr->sample_[0]->GetName(); TString src=infpath.substr(infpath.find_last_of('/')+1); src.ReplaceAll(".root",""); TString tag = src+"_"+trkCorr->trkCorrModule_+Form("_vs_Pt_jet%.0f_ieta%d_wts%d",jetPtMin,etaPM,trkCorr->weightSamples_); ///////////////////////////////////////////////////////////////////////////////////// // Inspect Projection ///////////////////////////////////////////////////////////////////////////////////// // Get Eff/fake histograms int numCentBin=trkCorr->numCentBins_; TH1D * vhCorrPtRef[2][5], *vhCorrPt[2][5]; Int_t colors[10] = {kBlack,kRed,kYellow+2,kGreen+2,kBlue}; Int_t styles[2] = {kFullCircle,kOpenCircle}; for (Int_t lv=0; lv<2; ++lv) { for (Int_t c=0; c<numCentBin; ++c) { vhCorrPt[lv][c] = (TH1D*) trkCorr->InspectCorr(lv,c,c,jetBegBin,jetEndBin,2,7-etaPM-1,7+etaPM); vhCorrPt[lv][c]->SetMarkerStyle(styles[lv]); handsomeTH1(vhCorrPt[lv][c],colors[c]); vhCorrPt[lv][c]->SetAxisRange(xmin,xmax,"X"); } } // Draw Histograms TCanvas * cEff = new TCanvas("cEff","cEff",500,500); cEff->SetLogx(); vhCorrPt[0][0]->SetAxisRange(0,1,"Y"); vhCorrPt[0][0]->SetTitle(";Track p_{T} (GeV/c);A #times #epsilon"); vhCorrPt[0][0]->SetTitleOffset(1.2); vhCorrPt[0][0]->SetTitleSize(0.055); vhCorrPt[0][0]->Draw("E"); vhCorrPt[1][0]->Draw("sameE"); for (Int_t lv=0; lv<2; ++lv) { for (Int_t c=numCentBin-1; c>=0; --c) { vhCorrPt[lv][c]->Draw("sameE"); } } TLegend *leg0 = new TLegend(0.16,0.786,0.46,0.92); leg0->SetFillStyle(0); leg0->SetBorderSize(0); leg0->SetTextSize(0.04); leg0->AddEntry(vhCorrPt[0][0],"PYTHIA+HYDJET",""); if (jetPtMin >= 40) leg0->AddEntry(vhCorrPt[0][0],Form("Jet p_{T} #geq %.0f GeV/c",jetPtMin),""); leg0->AddEntry(vhCorrPt[0][0],Form("Track %.1f < #eta < %.1f",trkCorr->etaBin_->GetBinLowEdge(7-etaPM-1), trkCorr->etaBin_->GetBinLowEdge(7+etaPM+1)),""); leg0->Draw(); TLine * l = new TLine(xmin,1,xmax,1); l->SetLineStyle(2); l->Draw(); TLegend *leg = new TLegend(0.34,0.25,0.56,0.55); leg->SetFillStyle(0); leg->SetBorderSize(0); leg->SetTextSize(0.035); leg->AddEntry(vhCorrPt[0][0],title,""); // leg->AddEntry(vhCorrPt[0][0],"0-5%","p"); // leg->AddEntry(vhCorrPt[0][1],"5-10%","p"); // leg->AddEntry(vhCorrPt[0][2],"10-20%","p"); // leg->AddEntry(vhCorrPt[0][3],"30-50%","p"); // leg->AddEntry(vhCorrPt[0][4],"50-90%","p"); leg->AddEntry(vhCorrPt[0][0],"0-30%","p"); leg->AddEntry(vhCorrPt[0][1],"30-100%","p"); leg->Draw(); drawText("CMS Simulation",0.64,0.89); drawText("Fake Rate",0.69,0.26); cEff->Print(outdir+"/"+tag+".gif"); cEff->Print(outdir+"/"+tag+".pdf"); ///////////////////////////////////////////////////////////////////////////////////// // Inspect Events ///////////////////////////////////////////////////////////////////////////////////// TCanvas * cPtHat = new TCanvas("cPtHat","cPtHat",1000,500); cPtHat->Divide(2,1); cPtHat->cd(1); gPad->SetLogy(); trkCorr->vhPtHat[0][0]->SetMarkerStyle(kOpenCircle); trkCorr->vhPtHat[0][0]->SetMarkerColor(kRed); trkCorr->vhPtHat[1][0]->SetTitle(";#hat{p}_{T} (GeV/c);a.u."); normHist(trkCorr->vhPtHat[0][0],1,false);//,trkCorr->vhPtHat[0][0]->Integral()/trkCorr->vhPtHat[0][0]->Integral(24,200)); normHist(trkCorr->vhPtHat[1][0],1,false);//,trkCorr->vhPtHat[1][0]->Integral()/trkCorr->vhPtHat[1][0]->Integral(24,200)); trkCorr->vhPtHat[1][0]->SetAxisRange(0,500,"X"); trkCorr->vhPtHat[1][0]->SetAxisRange(1e-7,1,"Y"); trkCorr->vhPtHat[1][0]->Draw("E"); // trkCorr->vhPtHat[0][0]->Draw("Esame"); // TLegend *legev0 = new TLegend(0.53,0.76,0.75,0.90); // legev0->SetFillStyle(0); // legev0->SetBorderSize(0); // legev0->SetTextSize(0.035); // legev0->AddEntry(trkCorr->vhPtHat[0][0],"Raw","p"); // legev0->AddEntry(trkCorr->vhPtHat[1][0],"Weighted","p"); // legev0->Draw(); cPtHat->cd(2); gPad->SetLogx(); gPad->SetLogy(); normHist(trkCorr->hDen1DInsp,1,true); normHist(trkCorr->hNum1DInsp,1,true); trkCorr->hDen1DInsp->SetMarkerStyle(kOpenCircle); trkCorr->hDen1DInsp->SetTitle(";Track p_{T} (GeV/c);a.u."); trkCorr->hDen1DInsp->SetAxisRange(1.001,299.9,"X"); trkCorr->hDen1DInsp->SetAxisRange(1e-13,1e1,"Y"); trkCorr->hDen1DInsp->Draw("hist"); trkCorr->hNum1DInsp->Draw("Esame"); cPtHat->Print(outdir+"/"+tag+"_weighting.gif"); cPtHat->Print(outdir+"/"+tag+"_weighting.pdf"); ///////////////////////////////////////////////////////////////////////////////////// // Inspect Each Bin ///////////////////////////////////////////////////////////////////////////////////// TCanvas * cEff2D = new TCanvas("cEff2D","cEff2D",800,800); gPad->SetLogy(); Double_t pt=8,eta=0,jet=101. ; Int_t cBin = 0; cEff2D->Divide(2,2); cEff2D->cd(1); gPad->SetLogy(); TH2D * hCorr2D = (TH2D*)trkCorr->InspectCorr(0,cBin,cBin,trkCorr->jetBin_->FindBin(jet),trkCorr->jetBin_->FindBin(jet)); gPad->SetRightMargin(0.15); hCorr2D->SetAxisRange(0.5,119.9,"Y"); hCorr2D->SetAxisRange(0,1,"Z"); hCorr2D->Draw("colz"); cEff2D->cd(2); gPad->SetLogy(); TH2D * hCorr2DFak= (TH2D*)trkCorr->InspectCorr(1,cBin,cBin,trkCorr->jetBin_->FindBin(jet),trkCorr->jetBin_->FindBin(jet)); gPad->SetRightMargin(0.15); hCorr2DFak->SetAxisRange(0.5,119.9,"Y"); hCorr2DFak->SetAxisRange(0,1,"Z"); hCorr2DFak->Draw("colz"); cEff2D->cd(3); gPad->SetLogy(); hCorr2D = (TH2D*)trkCorr->InspectCorr(0,cBin,cBin,trkCorr->jetBin_->FindBin(200.),trkCorr->jetBin_->FindBin(jet)); gPad->SetRightMargin(0.15); hCorr2D->SetAxisRange(1,119.9,"Y"); hCorr2D->SetAxisRange(0,1,"Z"); hCorr2D->Draw("colz"); cEff2D->cd(4); gPad->SetLogy(); hCorr2DFak= (TH2D*)trkCorr->InspectCorr(1,cBin,cBin,trkCorr->jetBin_->FindBin(200.),trkCorr->jetBin_->FindBin(jet)); gPad->SetRightMargin(0.15); hCorr2DFak->SetAxisRange(1,119.9,"Y"); hCorr2DFak->SetAxisRange(0,1,"Z"); hCorr2DFak->Draw("colz"); cEff2D->Print(outdir+"/"+tag+"_2D.gif"); ///////////////////////////////////////////////////////////////////////////////////// // Test corr ///////////////////////////////////////////////////////////////////////////////////// if (doTestCorr) { cout << "trk weight: " << trkCorr->GetCorr(pt,eta,jet,cBin) << endl; Double_t corr[4]; for (Int_t i=1; i<=trkCorr->ptBin_->GetNbinsX(); ++i) { trkCorr->GetCorr(trkCorr->ptBin_->GetBinCenter(i),eta,jet,cBin,corr); cout << "trk pt: " << trkCorr->ptBin_->GetBinLowEdge(i) << " trk eff: " << corr[0] << " trk fak: " << corr[1] << endl; } } }
void drawTrackingClosure() { TCut centCut = "cBin>=0&&cBin<4"; TCut jetSelCut[2] = {"jetPt>100&&jetPt<300&&jetUnSmPt<100","jetPt>100&&jetPt<300&&jetUnSmPt<100"}; // TCut jetSelCut[2] = {"jetUnSmPt>100&&jetUnSmPt<300","jetUnSmPt>100&&jetUnSmPt<300"}; TString jetAlias[2] = {"jetPt","jetPt"}; // TString jetAlias[2] = {"jetUnSmPt","jetUnSmPt"}; multiTreeUtil vmt[2]; // Mar 04 // hi vmt[0].addFile("../ntout/jskim_hydj80_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[0] && centCut && "pthat>=80&&pthat<100",9.913e-5*1.e9); vmt[0].addFile("../ntout/jskim_hydj100_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[0] && centCut && "pthat>=100&&pthat<170",3.069e-5*1.e9); vmt[0].addFile("../ntout/jskim_hydj170_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[0] && centCut && "pthat>=170&&pthat<9999",1.470e-6*1.e9); vmt[1].addFile("../ntout/jskim_hydj80_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[1] && centCut && "pthat>=80&&pthat<100",9.913e-5*1.e9); vmt[1].addFile("../ntout/jskim_hydj100_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[1] && centCut && "pthat>=100&&pthat<170",3.069e-5*1.e9); vmt[1].addFile("../ntout/jskim_hydj170_akPu3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm1bin0_akPu3PF_gj0.root", "tdj", jetSelCut[1] && centCut && "pthat>=170&&pthat<9999",1.470e-6*1.e9); // pp // vmt[0].addFile("../ntout/jskim_dj80_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[0] && "pthat>=80&&pthat<120",9.913e-5*1.e9); // vmt[0].addFile("../ntout/jskim_dj120_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[0] && "pthat>=120&&pthat<170",1.128e-5*1.e9); // vmt[0].addFile("../ntout/jskim_dj170_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[0] && "pthat>=170&&pthat<9999",1.470e-6*1.e9); // vmt[1].addFile("../ntout/jskim_dj80_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[1] && "pthat>=80&&pthat<120",9.913e-5*1.e9); // vmt[1].addFile("../ntout/jskim_dj120_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[1] && "pthat>=120&&pthat<170",1.128e-5*1.e9); // vmt[1].addFile("../ntout/jskim_dj170_ak3PF_Mar04job0_4bin_sm18_jetPt_60_jetEtaCut_2.00_noPbin_sm2bin1_ak3PF_gj0.root", "tdj", jetSelCut[1] && "pthat>=170&&pthat<9999",1.470e-6*1.e9); for (int i=0; i<2; ++i) { vmt[i].NormalizeScales(2,"","hEvtCentNoSkim"); } TString annotation="#DeltaR<0.3"; TString tag="hiMar04job0trkcorr14d_dr3_limcorr_unsmptlt100"; // TString tag="ppMar04job0trkcorr14d_dr3_limcorr_sm2bin1"; for (int i=0; i<2; ++i) { vmt[i].AddFriend("yTrk=yongsunTrack"); vmt[i].AddFriend("genPar"); vmt[i].SetAlias("finalJetPt",jetAlias[i]); cout << "(input " << i << ") finalJetPt = " << vmt[i].trees_[0]->GetAlias("finalJetPt") << endl; } TFile * ouf = new TFile("hists.root","recreate"); // Draw jet // TCut jetCut="abs(jetEta)<2"; TCut jetCut="abs(jetEta)<2&&abs(jetEta)>0.3"; TH1D * hJetPt[2]; for (int i=0; i<2; ++i) { hJetPt[i] = new TH1D(Form("hJetPt_%d",i),";Jet p_{T} (GeV/c);",20,0,400); vmt[i].Draw(hJetPt[i],"finalJetPt",jetCut,"1"); } // Check Normalization TCanvas * c0 = new TCanvas("c0","c0",805,0,800,400); c0->Divide(2,1); c0->cd(1); gPad->SetLogy(); cleverRange(hJetPt[0],hJetPt[1],5); handsomeTH1(hJetPt[0],kBlack); handsomeTH1(hJetPt[1],kRed); hJetPt[0]->SetYTitle("# of Jets"); hJetPt[0]->DrawCopy("E"); hJetPt[1]->DrawCopy("same hist"); c0->cd(2); TH1D * hJetPtUnNormRat = (TH1D*)hJetPt[0]->Clone(Form("%s_unnormrat",hJetPt[0]->GetName())); hJetPtUnNormRat->Divide(hJetPt[1]); hJetPtUnNormRat->SetAxisRange(0,2,"Y"); hJetPtUnNormRat->Draw("E"); jumSun(0,1,400,1); // Normalization float nJet[2] = {0,0}; for (int i=0; i<2; ++i) { nJet[i] = hJetPt[i]->Integral(); cout << "(input " << i << ") nJet = " << nJet[i] << endl; } // Draw Trk float xminpt=1, xmaxpt=119; TString trkVar[2]={"yTrk.pt","genPar.pt"}; TString xiVar[2]={"log(finalJetPt/yTrk.pt)","log(finalJetPt/genPar.pt)"}; // TCut trkCut[2]={ // "yTrk.jetMatch==1 && yTrk.jetDr<0.30 && yTrk.pt>1.00 && yTrk.pt<300.00 && yTrk.trkWeight<10", // "abs(genPar.chg)>0 && genPar.jetMatch==1 && genPar.jetDr<0.30 && genPar.pt>1.00 && genPar.pt<300.00" // }; // Signal Cone TCut trkCut[2]={"yTrk.jetMatch==1&&yTrk.jetDr<0.30","abs(genPar.chg)>0 && genPar.jetMatch==1 && genPar.jetDr<0.30"}; // Bkg Cone // TCut trkCut[2]={"yTrk.jetMatch==-1&&yTrk.jetDr<0.30","abs(genPar.chg)>0 && genPar.jetMatch==-1 && genPar.jetDr<0.30"}; // trkCut[1]=trkCut[1]&&"genPar.sube==0"; // TString trkWeight[2]={"(yTrk.trkWeight)","1"}; // TString trkWeight[2]={"((yTrk.trkWeight)*(1-yTrk.jetDr/0.3*0.08*(yTrk.jetDr<0.3)))","1"}; TString trkWeight[2]={"(yTrk.trkWeight*(yTrk.trkWeight<10)+1.47*(yTrk.trkWeight>=10))","1"}; TH1D * hTrkPt[2], * hXi[2]; for (int i=0; i<2; ++i) { hTrkPt[i] = new TH1D(Form("hTrkPt_%d",i),";Track p_{T} (GeV/c);",nPtBin,ptBin); vmt[i].Draw(hTrkPt[i],trkVar[i],jetCut&&trkCut[i],trkWeight[i]); hXi[i] = new TH1D(Form("hXi_%d",i),";#xi = ln(1/z);",16,-1,7); vmt[i].Draw(hXi[i],xiVar[i],jetCut&&trkCut[i],trkWeight[i]); } // Normalize for (int i=0; i<2; ++i) { hJetPt[i]->Scale(1./nJet[i]); hJetPt[i]->SetYTitle("Jet Fraction"); normHist(hTrkPt[i],0,true,1./nJet[i]); normHist(hXi[i],0,true,1./nJet[i]); } ///////////////////////////////////// // Draw Jet ///////////////////////////////////// TCanvas * c2 = new TCanvas("c2","c2",805,425,800,400); c2->Divide(2,1); c2->cd(1); gPad->SetLogy(); hJetPt[0]->Draw("E"); hJetPt[1]->Draw("same hist"); c2->cd(2); TH1D * hJetPtRat = (TH1D*)hJetPt[0]->Clone(Form("%s_rat",hJetPt[0]->GetName())); hJetPtRat->Divide(hJetPt[1]); hJetPtRat->SetAxisRange(0,2,"Y"); hJetPtRat->Draw("E"); jumSun(0,1,400,1); ///////////////////////////////////// // Draw Track Pt ///////////////////////////////////// TCanvas * c3 = new TCanvas("c3","c3",10,0,800,400); c3->Divide(2,1); c3->cd(1); gPad->SetLogy(); gPad->SetLogx(); handsomeTH1(hTrkPt[0],kBlack); handsomeTH1(hTrkPt[1],kRed); hTrkPt[0]->SetTitle(";p_{T}^{ Track} (GeV/c);1/N_{ jet} dN_{ Track} /dp_{T}"); hTrkPt[0]->Draw("E"); hTrkPt[1]->Draw("same hist"); TLegend * l1 = new TLegend(0.35,0.19,0.78,0.40,NULL,"brNDC"); easyLeg(l1,"",20); l1->AddEntry(hTrkPt[0],annotation,""); l1->AddEntry(hTrkPt[0],"Rec. Tracks","p"); l1->AddEntry(hTrkPt[1],"Gen. Partls","l"); l1->Draw(); c3->cd(2); gPad->SetLogx(); TH1D * hTrkPtRat = (TH1D*)hTrkPt[0]->Clone(Form("%s_rat",hTrkPt[0]->GetName())); hTrkPtRat->Divide(hTrkPt[1]); hTrkPtRat->SetAxisRange(xminpt,xmaxpt,"X"); hTrkPtRat->SetAxisRange(0.5,1.5,"Y"); hTrkPtRat->SetYTitle("Ratio"); hTrkPtRat->Draw("E"); jumSun(xminpt,1,xmaxpt,1,kRed); c3->Print(Form("closure/trackingClosure_pt_%s.gif",tag.Data())); c3->Print(Form("closure/trackingClosure_pt_%s.pdf",tag.Data())); ///////////////////////////////////// // Draw Xi ///////////////////////////////////// TCanvas * c5 = new TCanvas("c5","c5",10,425,800,400); c5->Divide(2,1); c5->cd(1); gPad->SetLogy(); handsomeTH1(hXi[0],kBlack); handsomeTH1(hXi[1],kRed); hXi[0]->SetTitle(";#xi = ln(1/z);1/N_{ jet} dN_{ track} /d#xi"); hXi[0]->Draw("E"); hXi[1]->Draw("same hist"); l1->Draw(); c5->cd(2); TH1D * hXiRat = (TH1D*)hXi[0]->Clone(Form("%s_rat",hXi[0]->GetName())); hXiRat->Divide(hXi[1]); hXiRat->SetAxisRange(0.5,1.5,"Y"); hXiRat->SetYTitle("Ratio"); hXiRat->Draw("E"); jumSun(0,1,6,1,kRed); c5->Print(Form("closure/trackingClosure_xi_%s.gif",tag.Data())); c5->Print(Form("closure/trackingClosure_xi_%s.pdf",tag.Data())); }
void TrkClosure( int anaMode=1, // 0=pt, 1=eta, 2=dphi TString outdir="fig/06.20_trk_disc" ) { TH1::SetDefaultSumw2(); gSystem->mkdir(outdir,kTRUE); bool doCorr=true; float maxEta=2.4; float ptmin=0.5,ptmax=200; TString mod="hitrkEffAnalyzer_MergedGeneral"; TrackingCorrections trkCorr("Forest2_v19",mod); trkCorr.AddSample("trkcorr/Forest2_v19/trkcorr_hy18dj30_Forest2_v19.root",30); trkCorr.AddSample("trkcorr/Forest2_v19/trkcorr_hy18dj50_Forest2_v19.root",50); trkCorr.AddSample("trkcorr/Forest2_v19/trkcorr_hy18dj80_Forest2_v19.root",80); trkCorr.AddSample("trkcorr/Forest2_v19/trkcorr_hy18dj120_Forest2_v19.root",120); trkCorr.AddSample("trkcorr/Forest2_v19/trkcorr_hy18dj170_Forest2_v19.root",170); trkCorr.smoothLevel_ = 1; trkCorr.Init(); TFile * inf = new TFile("~/scratch01/work/jet/macros/ntout/output-hy18dj80_Forest2v21_v1_allTrks_simtrk_xsec_icPu5.root"); TTree * t = (TTree*)inf->Get("tgj"); ////////////////////////////////////////// // Analysis Setup ////////////////////////////////////////// TString tag=Form("trkClos%d",anaMode); TCut sel = "cBin<12&&pt1>120&&pt2>50&&abs(dphi)>2.1"; TCut genpSel = ""; TCut trkSel = "trkAlgo<4||vtrkQual[][0]"; TString trkWt = "trkWt"; // TCut trkSel = "trkAlgo<4||vtrkQual[][0]"; // TString trkWt = "vtrkWt[][0]"; // TCut trkSel = "trkAlgo<4||(vtrkQual[][1])"; // TString trkWt = "vtrkWt[][1]"; // TCut trkSel = ""; // TString trkWt = "vtrkWt[][2]"; float nEvt = t->GetEntries(sel); cout << sel << ": " << nEvt << " events" << endl; Compare cmp("cmp",""); TH1D * hGenp, *hTrk, *hTrkCorr; float xmin=0.5, xmax=179.9; bool doLogx=true, doLogy=true; TString genVar, trkVar; TCut finalGenSel,finalTrkSel; if (anaMode==0) { TH1D * hPtBin = (TH1D*)trkCorr.ptBin_->Clone("hPtBin"); hPtBin->SetAxisRange(0.5,179.9,"X"); hGenp = (TH1D*)trkCorr.ptBin_->Clone("hGenp"); hTrk = (TH1D*)trkCorr.ptBin_->Clone("hTrk"); hTrkCorr = (TH1D*)trkCorr.ptBin_->Clone("hTrkCorr"); cmp.Legend(0.24,0.23,0.7,0.4); cmp.leg->AddEntry(hTrk,Form("|#eta| < %.1f",maxEta),""); tag += Form("_eta%.0f",maxEta*10); genVar="genpPt"; trkVar="trkPt"; finalGenSel = sel&&genpSel&&Form("abs(genpEta)<%.2f",maxEta); finalTrkSel = sel&&trkSel&&Form("abs(trkEta)<%.2f",maxEta); } else if (anaMode==1) { TH1D * hEtaBin = (TH1D*)trkCorr.etaBin_->Clone("hEtaBin"); hGenp = (TH1D*)hEtaBin->Clone("hGenp"); hTrk = (TH1D*)hEtaBin->Clone("hTrk"); hTrkCorr = (TH1D*)hEtaBin->Clone("hTrkCorr"); doLogx=false; doLogy=false; cmp.Legend(0.19,0.76,0.65,0.93); cmp.leg->AddEntry(hTrk,Form("%.1f < p_{T} < %.1f GeV/c",ptmin,ptmax),""); tag += Form("_pt%.0f",ptmin); genVar="genpEta"; trkVar="trkEta"; finalGenSel = sel&&genpSel&&Form("genpPt>=%.2f&&genpPt<%.2f",ptmin,ptmax); finalTrkSel = sel&&trkSel&&Form("trkPt>=%.2f&&trkPt<%.2f",ptmin,ptmax); } else if (anaMode==2) { TH1D * hBin = new TH1D("hBin",";#Delta#phi(trk,jet1)",25,0,3.14159); hGenp = (TH1D*)hBin->Clone("hGenp"); hTrk = (TH1D*)hBin->Clone("hTrk"); hTrkCorr = (TH1D*)hBin->Clone("hTrkCorr"); doLogx=false; doLogy=true; cmp.Legend(0.19,0.76,0.65,0.93); cmp.leg->AddEntry(hTrk,Form("%.1f < p_{T} < %.1f GeV/c",ptmin,ptmax),""); tag += Form("_pt%.0f",ptmin); genVar="acos(cos(genpPhi-phi1))"; trkVar="acos(cos(trkPhi-phi1))"; finalGenSel = sel&&genpSel&&Form("genpPt>=%.2f&&genpPt<%.2f",ptmin,ptmax); finalTrkSel = sel&&trkSel&&Form("trkPt>=%.2f&&trkPt<%.2f",ptmin,ptmax); } // Legend cmp.leg->AddEntry(hTrk,"Raw Trk","p"); if (doCorr) cmp.leg->AddEntry(hTrkCorr,"Corr. Trk","p"); cmp.leg->AddEntry(hGenp,"Gen. Particle","l"); ////////////////////////////////////////// // Run Analysis ////////////////////////////////////////// cout << genVar << ": " << finalGenSel << endl; cout << trkVar << ": " << finalTrkSel << endl; if (doCorr) cout << "Corr: " << (finalTrkSel)*trkWt << endl; t->Draw(genVar+">>hGenp",finalGenSel,"goff"); t->Draw(trkVar+">>hTrk",finalTrkSel,"goff"); if (doCorr) t->Draw(trkVar+">>hTrkCorr",(finalTrkSel)*trkWt); hGenp->Scale(1./nEvt); hTrk->Scale(1./nEvt); hTrkCorr->Scale(1./nEvt); ////////////////////////////////////////// // Draw ////////////////////////////////////////// TCanvas * c2 = new TCanvas("c2","c2",800,400); c2->Divide(2,1); c2->cd(1); hGenp->SetLineColor(2); hTrk->SetMarkerStyle(kOpenCircle); normHist(hGenp,-1,true); normHist(hTrk,-1,true); normHist(hTrkCorr,-1,true); if (doLogx) gPad->SetLogx(); if (doLogy) gPad->SetLogy(); else hGenp->SetAxisRange(0,hGenp->GetMaximum()*1.4,"Y"); if (anaMode==0) hGenp->SetAxisRange(xmin,xmax,"X"); hGenp->Draw("hist"); hTrk->Draw("sameE"); if (doCorr) hTrkCorr->Draw("sameE"); cmp.leg->Draw(); c2->cd(2); TH1D * hTrkRat = (TH1D*)hTrk->Clone("hTrkRat"); hTrkRat->Divide(hGenp); TH1D * hTrkCorrRat = (TH1D*)hTrkCorr->Clone("hTrkCorrRat"); if (doCorr) hTrkCorrRat->Divide(hGenp); if (doLogx) gPad->SetLogx(); if (anaMode==0) hTrkRat->SetAxisRange(xmin,xmax,"X"); hTrkRat->SetAxisRange(0.,2,"Y"); TLine * l1 = new TLine(hTrkRat->GetXaxis()->GetXmin(),1,hTrkRat->GetXaxis()->GetXmax(),1); l1->SetLineStyle(2); hTrkRat->Draw("E"); l1->Draw(); if (doCorr) hTrkCorrRat->Draw("sameE"); c2->Print(Form("%s/%s.gif",outdir.Data(),tag.Data())); // TCanvas * c3 = new TCanvas("c3","c3",800,400); // TH2D * hTrkWtvPt = new TH2D("hTrkWtvPt","",80,0,80,50,0,3); // TH2D * hTrkWtvEta = new TH2D("hTrkWtvEta","",13,-2.6,2.6,50,0,3); // c3->Divide(2,1); // c3->cd(1); // t->Draw("trkWt:trkPt>>hTrkWtvPt",sel,"box"); // hTrkWtvPt->ProfileX()->Draw("sameE"); // c3->cd(2); // t->Draw("trkWt:trkEta>>hTrkWtvEta",sel,"box"); // hTrkWtvEta->ProfileX()->Draw("sameE"); }