Back to home page

sPhenix code displayed by LXR

 
 

    


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) { //debug
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"; //dpt/pt
0110   TString re2 = "Tracks2_Res2Pt"; //dpt/pt
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     //cout << mu1[b] << " " << emu1[b] << " || " << sg1[b] << " " << esg1[b] << endl;
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   //fun->SetParameter(0,0.01); fun->SetParLimits(0,0.001,0.02);
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   //TString file = "newTPCgeo";
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   //TCanvas *cef1 = MakeEfficiency(fa,"Efficiency",1.23e-2,2.17e-03);
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 }