File indexing completed on 2025-08-05 08:15:13
0001 void NormByBinWidth(TH1F *inh) {
0002 for(int i=0; i!=inh->GetXaxis()->GetNbins(); ++i) {
0003 float bef = inh->GetBinContent( i+1 );
0004 float err = inh->GetBinError( i+1 );
0005 float bw = inh->GetXaxis()->GetBinWidth( i+1 );
0006 inh->SetBinContent( i+1, bef/bw );
0007 inh->SetBinError( i+1, err/bw );
0008 }
0009 }
0010
0011 TH1F* getHist(TString nom, TFile *fi, const char *na, int co, int mk=20, float mks=1) {
0012 TH1F *ori = (TH1F*) fi->Get(na);
0013 TH1F *ret = (TH1F*) ori->Clone( nom.Data() );
0014 ret->SetLineColor( co );
0015 ret->SetMarkerColor( co );
0016 ret->SetMarkerStyle( mk );
0017 ret->SetMarkerSize( mks );
0018 ret->Sumw2();
0019 return ret;
0020 }
0021
0022 TH2F* getHist2(TString nom, TFile *fi, const char *na) {
0023 TH2F *ori = (TH2F*) fi->Get(na);
0024 TH2F *ret = (TH2F*) ori->Clone( nom.Data() );
0025 ret->Sumw2();
0026 return ret;
0027 }
0028
0029 TCanvas* MakeEfficiency(TFile *fa, TString ti, float c0=0.01250, float c1=0.001858, bool plotOld=false) {
0030 TCanvas *cTN = new TCanvas();
0031 cTN->SetGridx(1);
0032 cTN->SetGridy(1);
0033 TString geem = "Truths2_Pt";
0034 TString gere = "Truths3_Pt";
0035 TString re = "Tracks2_ResPt";
0036 TH1F *fa_GEEM = getHist("EffGenEM", fa, geem.Data(), kBlue-3);
0037 TH1F *fa_GERE = getHist("EffGenRE", fa, gere.Data(), kGreen-3);
0038 TH1F *fa_RE = (TH1F*) fa_GEEM->Clone("EffRec");
0039 fa_RE->Reset();
0040 TH2F *fa_RE2D = getHist2("EffRec2D", fa, re.Data());
0041 for(int b=1; b!=fa_RE->GetXaxis()->GetNbins()+1; ++b) {
0042 float pt = fa_RE->GetXaxis()->GetBinCenter(b);
0043 float sg = TMath::Sqrt(c0*c0+c1*pt*c1*pt);
0044 int x = fa_RE2D->GetXaxis()->FindBin( pt );
0045 int ya = fa_RE2D->GetYaxis()->FindBin( -5*sg );
0046 int yb = fa_RE2D->GetYaxis()->FindBin( +5*sg );
0047 float inte = fa_RE2D->Integral(x,x,ya,yb);
0048 cout << x << " " << ya << " " << yb << " " << inte << endl;
0049 fa_RE->SetBinContent(b,inte);
0050 }
0051 TGraphAsymmErrors *eff1 = new TGraphAsymmErrors();
0052 TGraphAsymmErrors *eff2 = new TGraphAsymmErrors();
0053 eff1->Divide( fa_RE, fa_GEEM );
0054 eff2->Divide( fa_RE, fa_GERE );
0055 eff1->SetLineColor( kBlue-3 );
0056 eff1->SetMarkerColor( kBlue-3 );
0057 eff1->SetMarkerStyle( 20 );
0058 eff2->SetLineColor( kGreen-3 );
0059 eff2->SetMarkerColor( kGreen-3 );
0060 eff2->SetMarkerStyle( 20 );
0061
0062 TH2F *axis = new TH2F("axis",";p_{T} [GeV];Efficiency",10,0.15,36.1,10,0,1.05);
0063 axis->Draw();
0064 axis->GetXaxis()->SetMoreLogLabels();
0065 if(plotOld) eff1->Draw( "PSAME" );
0066 eff2->Draw( "PSAME" );
0067
0068 if(0) {
0069 fa_GE->Draw();
0070 fa_RE->Draw("SAME");
0071 TLegend *leg = new TLegend(0.6,0.6,0.9,0.9);
0072 leg->AddEntry(fa_GE, Form("GEN %.0f",fa_GE->GetEntries()) );
0073 leg->AddEntry(fa_RE, Form("REC %.0f",fa_RE->GetEntries()) );
0074 leg->Draw();
0075 }
0076 return cTN;
0077 }
0078
0079 TCanvas* MakeEfficiencyFast(TFile *fa, TString ti, TString hw, bool plotOld=false) {
0080 TCanvas *cTN = new TCanvas();
0081 cTN->SetGridx(1);
0082 cTN->SetGridy(1);
0083 TString geem = Form("Truths2%s",hw.Data());
0084 TString gere = Form("Truths3%s",hw.Data());
0085 TString re = Form("Truths4%s",hw.Data());
0086 TH1F *fa_RE = getHist("EffRec", fa, re.Data(), kOrange);
0087 TH1F *fa_GEEM = getHist("EffGenEM", fa, geem.Data(), kRed-3);
0088 TH1F *fa_GERE = getHist("EffGenRE", fa, gere.Data(), kBlue-3);
0089 TGraphAsymmErrors *eff1 = new TGraphAsymmErrors();
0090 TGraphAsymmErrors *eff2 = new TGraphAsymmErrors();
0091 eff1->Divide( fa_RE, fa_GEEM );
0092 eff2->Divide( fa_RE, fa_GERE );
0093 eff1->SetLineColor( kBlue-3 );
0094 eff1->SetMarkerColor( kBlue-3 );
0095 eff1->SetMarkerStyle( 20 );
0096 eff2->SetLineColor( kOrange-3 );
0097 eff2->SetMarkerColor( kOrange-3 );
0098 eff2->SetMarkerStyle( 20 );
0099
0100 TH2F *axis = new TH2F("axis",";p_{T} [GeV];Efficiency",10,0.15,36.1,10,0,1.05);
0101 axis->Draw();
0102 axis->GetXaxis()->SetMoreLogLabels();
0103 if(plotOld) eff1->Draw( "PSAME" );
0104 eff2->Draw( "PSAME" );
0105 return cTN;
0106 }
0107
0108 TCanvas* MakePtResolution(TFile *fa, TString ti, bool showBoth=false) {
0109 TString re1 = "Tracks2_ResPt";
0110 TString re2 = "Tracks2_Res2Pt";
0111 TH2F *fa_RE1 = getHist2("EffRec1", fa, re1.Data());
0112 TH2F *fa_RE2 = getHist2("EffRec2", fa, re2.Data());
0113
0114 TCanvas *qa = new TCanvas();
0115 qa->Divide(5,5);
0116 TCanvas *qb = new TCanvas();
0117 qb->Divide(5,5);
0118 const int nbx1 = fa_RE1->GetXaxis()->GetNbins();
0119 float x1[60], ex1[60];
0120 float mu1[60], emu1[60], sg1[60], esg1[60];
0121 float mu2[60], emu2[60], sg2[60], esg2[60];
0122 for( int b=0; b!=nbx1; ++b) {
0123 x1[b] = fa_RE1->GetXaxis()->GetBinCenter(b+1);
0124 ex1[b] = fa_RE1->GetXaxis()->GetBinWidth(b+1)/2.0;
0125 TH1D *tmp;
0126 TF1 *fun;
0127
0128 tmp = (TH1D*) fa_RE1->ProjectionY( Form("bin1_%d",b),b+1,b+1 );
0129 if( tmp->GetEntries() < 30 ) continue;
0130 if(b<25) qa->cd(b+1);
0131 tmp->GetXaxis()->SetRangeUser(-0.2,+0.2);
0132 tmp->Fit("gaus","RWQI","",-0.5,+0.5);
0133 fun = (TF1*) tmp->GetListOfFunctions()->At(0);
0134 mu1[b] = fun->GetParameter(1);
0135 emu1[b] = fun->GetParError(1);
0136 sg1[b] = fun->GetParameter(2);
0137 esg1[b] = fun->GetParError(2);
0138
0139 tmp = (TH1D*) fa_RE2->ProjectionY( Form("bin2_%d",b),b+1,b+1 );
0140 if( tmp->GetEntries() < 30 ) continue;
0141 if(b<25) qb->cd(b+1);
0142 tmp->GetXaxis()->SetRangeUser(-0.2,+0.2);
0143 tmp->Fit("gaus","RWQI","",-0.5,+0.5);
0144 fun = (TF1*) tmp->GetListOfFunctions()->At(0);
0145 mu2[b] = fun->GetParameter(1)/x1[b];
0146 emu2[b] = fun->GetParError(1)/x1[b];
0147 sg2[b] = fun->GetParameter(2)/x1[b];
0148 esg2[b] = fun->GetParError(2)/x1[b];
0149
0150 }
0151
0152 TCanvas *cTN = new TCanvas();
0153 cTN->SetGridx(1);
0154 cTN->SetGridy(1);
0155
0156 TH2F *axis = new TH2F("axisPtRes",";p_{T} [GeV]",10,0.15,36.1,10,-0.01,0.09);
0157 axis->Draw();
0158
0159 TGraphErrors *gRes1 = new TGraphErrors(nbx1,x1,sg1,ex1,esg1);
0160 gRes1->Draw("PSAME");
0161 gRes1->SetLineColor(kRed-3);
0162 gRes1->SetMarkerColor(kRed-3);
0163 gRes1->SetMarkerStyle(20);
0164
0165 TGraphErrors *gRes1M = new TGraphErrors(nbx1,x1,mu1,ex1,emu1);
0166 gRes1M->Draw("PSAME");
0167 gRes1M->SetLineColor(kRed-3);
0168 gRes1M->SetMarkerColor(kRed-3);
0169 gRes1M->SetMarkerStyle(24);
0170
0171 TGraphErrors *gRes2 = new TGraphErrors(20,x1,sg2,ex1,esg2);
0172 if(showBoth) gRes2->Draw("PSAME");
0173 gRes2->SetLineColor(kBlue-3);
0174 gRes2->SetMarkerColor(kBlue-3);
0175 gRes2->SetMarkerStyle(20);
0176
0177 TGraphErrors *gRes2M = new TGraphErrors(20,x1,mu2,ex1,emu2);
0178 if(showBoth) gRes2M->Draw("PSAME");
0179 gRes2M->SetLineColor(kBlue-3);
0180 gRes2M->SetMarkerColor(kBlue-3);
0181 gRes2M->SetMarkerStyle(24);
0182
0183 TF1 *fun = new TF1("fun","TMath::Sqrt([0]*[0]+[1]*x*[1]*x)",0.2,36);
0184
0185 fun->SetParameter(0,1.23e-2); fun->SetParLimits(0,+1,-1);
0186 fun->SetParameter(1,0.01); fun->SetParLimits(1,0.001,0.02);
0187 fun->SetLineColor(kOrange-3);
0188 gRes1->Fit(fun,"R","",0.2,36);
0189
0190 gRes1->SetFillColor(kWhite);
0191 gRes2->SetFillColor(kWhite);
0192 gRes1M->SetFillColor(kWhite);
0193 gRes2M->SetFillColor(kWhite);
0194
0195 TLegend *leg = new TLegend(0.1,0.7,0.4,0.9);
0196 leg->AddEntry(gRes1,"p_{T} Res #sigma_{1}");
0197 if(showBoth) leg->AddEntry(gRes2,"p_{T} Res #sigma_{0}");
0198 leg->AddEntry(gRes1M,"p_{T} Res #mu_{1}");
0199 if(showBoth) leg->AddEntry(gRes2M,"p_{T} Res #mu_{0}");
0200 leg->Draw();
0201 return cTN;
0202 }
0203
0204 TCanvas* MakeDCA2DResolution(TFile *fa, TString ti) {
0205 TString re1 = "Tracks2_Dca2D";
0206 TH2F *fa_RE1 = getHist2("Dca2DRec1", fa, re1.Data());
0207
0208 TCanvas *qa = new TCanvas();
0209 qa->Divide(5,5);
0210 const int nbx1 = fa_RE1->GetXaxis()->GetNbins();
0211 float x1[60], ex1[60];
0212 float mu1[60], emu1[60], sg1[60], esg1[60];
0213 for( int b=0; b!=nbx1; ++b) {
0214 x1[b] = fa_RE1->GetXaxis()->GetBinCenter(b+1);
0215 ex1[b] = fa_RE1->GetXaxis()->GetBinWidth(b+1)/2.0;
0216 TH1D *tmp;
0217 TF1 *fun;
0218
0219 tmp = (TH1D*) fa_RE1->ProjectionY( Form("dca2d_bin1_%d",b),b+1,b+1 );
0220 if( tmp->GetEntries() < 30 ) continue;
0221 if(b<25) qa->cd(b+1);
0222 tmp->Fit("gaus","RWQI","",-0.5,+0.5);
0223 fun = (TF1*) tmp->GetListOfFunctions()->At(0);
0224 mu1[b] = fun->GetParameter(1)*1e4;
0225 emu1[b] = fun->GetParError(1)*1e4;
0226 sg1[b] = fun->GetParameter(2)*1e4;
0227 esg1[b] = fun->GetParError(2)*1e4;
0228 }
0229
0230 TCanvas *cTN = new TCanvas();
0231 cTN->SetGridx(1);
0232 cTN->SetGridy(1);
0233
0234 TH2F *axis = new TH2F("axisDCA2DRes",";p_{T}^{reco} [GeV];[#mu m]",10,0.15,36.1,10,-10,+80);
0235 axis->Draw();
0236
0237 TGraphErrors *gRes1 = new TGraphErrors(nbx1,x1,sg1,ex1,esg1);
0238 gRes1->Draw("PSAME");
0239 gRes1->SetLineColor(kRed-3);
0240 gRes1->SetMarkerColor(kRed-3);
0241 gRes1->SetMarkerStyle(20);
0242
0243 TGraphErrors *gRes1M = new TGraphErrors(nbx1,x1,mu1,ex1,emu1);
0244 gRes1M->Draw("PSAME");
0245 gRes1M->SetLineColor(kRed-3);
0246 gRes1M->SetMarkerColor(kRed-3);
0247 gRes1M->SetMarkerStyle(24);
0248
0249 gRes1->SetFillColor(kWhite);
0250 gRes1M->SetFillColor(kWhite);
0251
0252 TLegend *leg = new TLegend(0.55,0.7,0.9,0.9);
0253 leg->AddEntry(gRes1,"DCA2D Gaus #sigma");
0254 leg->AddEntry(gRes1M,"DCA2D Gaus #mu");
0255 leg->Draw();
0256 return cTN;
0257 }
0258
0259 TCanvas* MakeTH1F(TFile *fa,TString ti,TString wh,TString hw, bool norm=true, bool bw=false, bool log=false) {
0260 TCanvas *cTN = new TCanvas();
0261 TString c0 = Form("%s0%s",wh.Data(),hw.Data());
0262 TString c1 = Form("%s1%s",wh.Data(),hw.Data());
0263 TString c2 = Form("%s2%s",wh.Data(),hw.Data());
0264 TString c3 = Form("%s3%s",wh.Data(),hw.Data());
0265 TH1F *fa_T0N = getHist(Form("%s0",ti.Data()), fa, c0.Data(), kBlack, 20, 1.3);
0266 TH1F *fa_T1N = getHist(Form("%s1",ti.Data()), fa, c1.Data(), kRed-3, 20, 1.3);
0267 TH1F *fa_T2N = getHist(Form("%s2",ti.Data()), fa, c2.Data(), kBlue-3, 20, 1.3);
0268 TH1F *fa_T3N = getHist(Form("%s3",ti.Data()), fa, c3.Data(), kGreen-3, 20, 1.3);
0269 if(norm) {
0270 int evA = ((TH1F*) fa->Get("Events"))->GetBinContent(1);
0271 fa_T0N->Scale(1.0/evA);
0272 fa_T1N->Scale(1.0/evA);
0273 fa_T2N->Scale(1.0/evA);
0274 fa_T3N->Scale(1.0/evA);
0275 }
0276 if(bw) {
0277 NormByBinWidth(fa_T0N);
0278 NormByBinWidth(fa_T1N);
0279 NormByBinWidth(fa_T2N);
0280 NormByBinWidth(fa_T3N);
0281 }
0282 if(log) cTN->SetLogy(1);
0283 fa_T0N->Draw();
0284 fa_T1N->Draw("SAME");
0285 fa_T2N->Draw("SAME");
0286 fa_T3N->Draw("SAME");
0287 TLegend *leg = new TLegend(0.6,0.6,0.9,0.9);
0288 leg->AddEntry(fa_T0N,fa_T0N->GetTitle());
0289 leg->AddEntry(fa_T1N,fa_T1N->GetTitle());
0290 leg->AddEntry(fa_T2N,fa_T2N->GetTitle());
0291 leg->AddEntry(fa_T3N,fa_T3N->GetTitle());
0292 leg->Draw();
0293 fa_T0N->SetTitle( ti.Data() );
0294 return cTN;
0295 }
0296
0297 void plot() {
0298 gStyle->SetOptStat(0);
0299
0300 TString file = "oldUpdate";
0301
0302 TFile *fa = new TFile( Form("%s.root",file.Data()) );
0303
0304 fa->ls();
0305 MakeTH1F(fa,"Eta","Truths","_Eta",true,false,true)->Draw();
0306 MakeTH1F(fa,"Pt [GeV]","Truths","_Pt",true,true,true)->Draw();
0307
0308 MakeTH1F(fa,"Eta","Tracks","_Eta",true,false,true)->Draw();
0309 MakeTH1F(fa,"Pt [GeV]","Tracks","_Pt",true,true,true)->Draw();
0310
0311 TCanvas *cres = MakePtResolution(fa,"PtResolution");
0312 TCanvas *cdca = MakeDCA2DResolution(fa,"DCA2DResolution");
0313
0314 TCanvas *cef1 = MakeEfficiency(fa,"Efficiency",1.23e-2,1.85e-3);
0315 TCanvas *cef2 = MakeEfficiencyFast(fa,"Efficiency","_Pt");
0316
0317 cres->SaveAs( Form("%s_cres.png",file.Data()), "png"); cres->Draw();
0318 cdca->SaveAs( Form("%s_cdca.png",file.Data()), "png"); cdca->Draw();
0319 cef1->SaveAs( Form("%s_cef1.png",file.Data()), "png"); cef1->Draw();
0320 cef2->SaveAs( Form("%s_cef2.png",file.Data()), "png"); cef2->Draw();
0321 }