17 #if !defined(__CINT__) || defined(__MAKECINT__) 32 #include <TDirectoryFile.h> 33 #include <TGraphErrors.h> 70 Int_t modColorIndex[]={1 , 1, 2, 2, 3, 3, 4, 4, 7, 7, 6, 6, 2, 3, 4, 7, 6, 2, 2, 3, 3, 4, 4, 6, 6};
71 Int_t modStyleIndex[]={24,25,25,24,25,24,25,24,25,24,25,21,21,21,21,21,22,26,22,26,22,26,22,26};
79 fil =
new TFile(Form(
"%s/%s.root",kProdName.Data(),kFileName.Data()),
"read");
81 printf(
"Open Input File: %s/%s.root\n",kProdName.Data(),kFileName.Data());
83 if ( !
fil )
return kFALSE;
85 direc = (TDirectoryFile*)
fil->Get(dirName);
87 if ( !
direc && dirName !=
"" )
return kFALSE;
97 if ( !lis && listName !=
"")
return kFALSE;
100 nEvt = ((TH1F*)
fil->Get(
"hNEvents"))->GetBinContent(1);
102 nEvt = ((TH1F*) lis->FindObject(
"hNEvents"))->GetBinContent(1);
104 printf(
"nEvt = %2.3e\n",
nEvt);
120 if(kParticle ==
"Pi0")
132 printf(
"*** <<< Set Crystal Ball!!! >>> ***\n");
139 fitfun->SetParLimits(1, 0.105,0.185);
140 fitfun->SetParLimits(2, 0.001,0.040);
145 fitfun->SetParLimits(2, 0.105,0.185);
146 fitfun->SetParLimits(1, 0.001,0.040);
147 fitfun->SetParLimits(3, 0.001,0.040);
148 fitfun->SetParLimits(4, 0,10);
149 fitfun->SetParLimits(5, 1,1.e+6);
166 fitfun->SetParLimits(1, 0.20,0.80);
167 fitfun->SetParLimits(2, 0.001,0.06);
171 fitfun->SetLineColor(kRed);
174 fitfun->SetParName(0,
"A");
175 fitfun->SetParName(1,
"m_{0}");
176 fitfun->SetParName(2,
"#sigma");
182 fitfun->SetParName(5,
"a_{2}");
201 gStyle->SetOptTitle(1);
202 gStyle->SetTitleOffset(2,
"Y");
203 gStyle->SetOptStat(0);
204 gStyle->SetOptFit(000000);
208 if ( !gPrim || !gPrimAcc ) return ;
210 TArrayD effPt ; effPt .Set(nPt);
211 TArrayD effBCPt ; effBCPt .Set(nPt);
212 TArrayD effPtAcc ; effPtAcc .Set(nPt);
213 TArrayD effBCPtAcc ; effBCPtAcc .Set(nPt);
214 TArrayD effPtErr ; effPtErr .Set(nPt);
215 TArrayD effBCPtErr ; effBCPtErr .Set(nPt);
216 TArrayD effPtAccErr ; effPtAccErr .Set(nPt);
217 TArrayD effBCPtAccErr; effBCPtAccErr.Set(nPt);
219 for(
Int_t ibin = 0; ibin < nPt; ibin++ )
225 if ( gPrim->GetY()[ibin] > 0 && mesonPt[ibin] > 0 )
227 effPt [ibin] = 100 * mesonPt[ibin] / gPrim->GetY()[ibin];
228 effPtErr[ibin] = 100 *
GetFractionError( mesonPt[ibin], gPrim->GetY ()[ibin],
229 emesonPt[ibin], gPrim->GetEY()[ibin]);
233 else { effPt[ibin] = 0; effPtErr[ibin] = 0; }
235 if ( gPrimAcc->GetY()[ibin] > 0 && mesonPt[ibin] > 0 )
237 effPtAcc [ibin] = 100 * mesonPt[ibin] / gPrimAcc->GetY()[ibin];
238 effPtAccErr[ibin] = 100 *
GetFractionError( mesonPt[ibin], gPrimAcc->GetY ()[ibin],
239 emesonPt[ibin], gPrimAcc->GetEY()[ibin]);
242 else { effPtAcc[ibin] = 0; effPtAccErr[ibin] = 0; }
244 if (
kMix || hname.Contains(
"MCpT") )
249 if ( gPrim->GetY()[ibin] > 0 && mesonPtBC[ibin] > 0 )
251 effBCPt [ibin] = 100 * mesonPtBC[ibin] / gPrim->GetY()[ibin];
252 effBCPtErr[ibin] = 100 *
GetFractionError( mesonPtBC[ibin], gPrim->GetY ()[ibin],
253 emesonPtBC[ibin], gPrim->GetEY()[ibin]);
256 else { effBCPt[ibin] = 0; effBCPtErr[ibin] = 0; }
258 if ( gPrimAcc->GetY()[ibin] > 0 && mesonPtBC[ibin] > 0 )
260 effBCPtAcc [ibin] = 100 * mesonPtBC[ibin] / gPrimAcc->GetY()[ibin];
261 effBCPtAccErr[ibin] = 100 *
GetFractionError( mesonPtBC[ibin], gPrimAcc->GetY ()[ibin],
262 emesonPtBC[ibin], gPrimAcc->GetEY()[ibin]);
265 else { effBCPtAcc[ibin] = 0; effBCPtAccErr[ibin] = 0; }
272 gEff->SetName(Form(
"EfficiencyxAcceptance_%s",hname.Data()));
273 gEff->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID #times Acc} (%)");
274 gEff->GetHistogram()->SetTitleOffset(1.4,
"Y");
275 gEff->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
276 gEff->GetHistogram()->SetTitleOffset(1.2,
"X");
277 gEff->GetHistogram()->SetTitle(
"Reconstruction efficiency #times acceptance");
278 gEff->SetMarkerColor(1);
279 gEff->SetLineColor(1);
280 gEff->SetMarkerStyle(20);
283 TGraphErrors *gEffAcc =
new TGraphErrors(nPt,xPt.GetArray(),effPtAcc.GetArray(),exPt.GetArray(),effPtAccErr.GetArray());
284 gEffAcc->SetName(Form(
"Efficiency_%s",hname.Data()));
285 gEffAcc->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID} (%)");
286 gEffAcc->GetHistogram()->SetTitleOffset(1.5,
"Y");
287 gEffAcc->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
288 gEffAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
289 gEffAcc->SetMarkerColor(1);
290 gEffAcc->SetLineColor(1);
291 gEffAcc->SetMarkerStyle(20);
292 gEffAcc->GetHistogram()->SetTitle(
"Reconstruction efficiency");
300 gBCEff =
new TGraphErrors(nPt,xPt.GetArray(),effBCPt.GetArray(),exPt.GetArray(),effBCPtErr.GetArray());
301 gBCEff->SetName(Form(
"EfficiencyxAcceptance_BC_%s",hname.Data()));
302 gBCEff->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID #times Acc}");
303 gBCEff->GetHistogram()->SetTitleOffset(1.5,
"Y");
304 gBCEff->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
305 gBCEff->GetHistogram()->SetTitleOffset(1.2,
"X");
306 gBCEff->SetMarkerColor(4);
307 gBCEff->SetLineColor(4);
308 gBCEff->SetMarkerStyle(24);
311 gBCEffAcc =
new TGraphErrors(nPt,xPt.GetArray(),effBCPtAcc.GetArray(),exPt.GetArray(),effBCPtAccErr.GetArray());
312 gBCEffAcc->SetName(Form(
"Efficiency_BC_%s",hname.Data()));
313 gBCEffAcc->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID}");
314 gBCEffAcc->GetHistogram()->SetTitleOffset(1.4,
"Y");
315 gBCEffAcc->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
316 gBCEffAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
317 gBCEffAcc->SetMarkerColor(4);
318 gBCEffAcc->SetLineColor(4);
319 gBCEffAcc->SetMarkerStyle(24);
325 TCanvas *cEff =
new TCanvas(Form(
"cEff_%s",hname.Data()),
326 Form(
"Efficiency Graphs for %s",hname.Data()),2*600,600);
343 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
344 legend->AddEntry(gEff ,
"From fit",
"P");
345 legend->AddEntry(gBCEff,
"From bin counting",
"P");
361 gBCEffAcc->Draw(
"P");
363 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
364 legend->AddEntry(gEffAcc ,
"From fit",
"P");
365 legend->AddEntry(gBCEffAcc,
"From bin counting",
"P");
369 cEff->Print(Form(
"%s/%s/%s/%s/Efficiency_%s.%s",
370 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),hname.Data(),
371 kPlotFormat.Data()));
387 printf(
"ProjectAndFit() - Null inv mass 2D histo for %s, skip!\n",hname.Data());
391 gStyle->SetOptTitle(1);
392 gStyle->SetTitleOffset(2,
"Y");
393 gStyle->SetOptStat(0);
394 gStyle->SetOptFit(000000);
404 particleN =
" #pi^{0}";
413 TLegend * pLegendIM[nPt];
416 TH1D* hMixCorrected [nPt];
419 for(
Int_t ipt = 0; ipt< nPt; ipt++)
423 hMixCorrected[ipt] = 0 ;
428 TArrayD mesonPt ; mesonPt .Set(nPt);
429 TArrayD mesonPtBC ; mesonPtBC .Set(nPt);
431 TArrayD mesonWidth; mesonWidth.Set(nPt);
432 TArrayD emesonPt ; emesonPt .Set(nPt);
433 TArrayD emesonPtBC ; emesonPtBC .Set(nPt);
434 TArrayD emesonMass ; emesonMass .Set(nPt);
435 TArrayD emesonWidth; emesonWidth.Set(nPt);
439 Int_t col = TMath::Ceil(TMath::Sqrt(nPt));
446 TF1 * fitFunction = 0;
449 TCanvas * cIMModi =
new TCanvas(Form(
"c%s", hname.Data()), Form(
"%s", leg.Data()), 1200, 1200) ;
450 cIMModi->Divide(col, col);
452 for(
Int_t i = 0; i < nPt; i++)
461 hIM[i] = hRe->ProjectionY(Form(
"IM_%s_PtBin%d",hname.Data(),i),
462 hRe->GetXaxis()->FindBin(ptMin),
463 hRe->GetXaxis()->FindBin(ptMax));
464 hIM[i]->SetTitle(Form(
"%2.1f < #it{p}_{T, #gamma#gamma} < %2.1f GeV/#it{c}",ptMin,ptMax));
468 hIM[i]->Rebin(rebin2);
473 hIM[i]->SetXTitle(
"M_{#gamma,#gamma} (GeV/#it{c}^{2})");
475 hIM[i]->SetAxisRange(mmin,mmax,
"X");
476 hIM[i]->SetLineWidth(2);
477 hIM[i]->SetLineColor(4);
479 Double_t mStep = hIM[i]->GetBinWidth(1);
481 hSignal[i] = (
TH1D*) hIM[i]->Clone();
488 hMix[i] = (
TH1D*) hMi->ProjectionY(Form(
"MiMass_PtBin%d_%s",i,hname.Data()),
489 hMi->GetXaxis()->FindBin(ptMin),
490 hMi->GetXaxis()->FindBin(ptMax));
491 hMix[i]->SetLineColor(1);
492 hMix[i]->SetTitle(Form(
"%2.2f < #it{p}_{T, #gamma#gamma} < %2.2f GeV/#it{c}",ptMin,ptMax));
496 hMix[i]->Rebin(rebin2);
518 hRatio[i] = (
TH1D*)hIM[i]->Clone(Form(
"RatioRealMix_PtBin%d_%s",i,hname.Data()));
519 hRatio[i]->SetAxisRange(mmin,mmax,
"X");
520 hRatio[i]->Divide(hMix[i]);
527 hSignal[i] ->SetName(Form(
"Signal_PtBin%d_%s",i,hname.Data()));
529 if ( hMix[i]->GetEntries() >
kNPairCut*3 )
531 hSignal[i] ->SetLineColor(kViolet);
535 if ( kParticle ==
"Pi0" )
537 hRatio[i]->Fit(
"truncatedPolPi0",
"NQRL",
"",0.11,0.4);
545 hRatio[i]->SetAxisRange(mmin,mmax);
546 hRatio[i]->Fit(
"truncatedPolEta",
"NQRL",
"",0.35,0.95);
554 line3[i] =
new TF1(
"line3",
"[0]+[1]*x", mmin, mmax);
555 line3[i]->SetParameters(p0,p1,p2,p3);
558 hMixCorrected[i] = (
TH1D*) hMix[i]->Clone(Form(
"MixCorrected_PtBin%d_%s",i,hname.Data()));
559 for(
Int_t j = 0; j< hMix[i]->GetNbinsX(); j++)
561 Double_t x = hMix[i]->GetBinCenter(j);
562 Double_t correction = line3[i]->Eval(x);
563 Double_t corrected = hMix[i]->GetBinContent(j)*correction;
564 Double_t ecorrected = hMix[i]->GetBinError(j) *correction;
566 hMixCorrected[i]->SetBinContent(j, corrected);
567 hMixCorrected[i]->SetBinError (j,ecorrected);
571 hSignal[i] ->Add(hMixCorrected[i],-1);
575 Float_t scale = hRatio[i]->GetBinContent(hRatio[i]->FindBin(0.7));
576 hMix[i]->Scale(scale);
578 hSignal[i] ->Add(hMix[i],-1);
589 nMax= hSignal[i]->Integral(hIM[i]->FindBin(0.1),
590 hIM[i]->FindBin(0.2));
594 nMax = hSignal[i]->Integral(hIM[i]->FindBin(0.5),
595 hIM[i]->FindBin(0.7));
600 fitfun->SetParLimits(0,nMax/100,nMax*100);
604 if(
kPolN < 4 )
fitfun->SetParameters(nMax/5,0.135,20,0);
605 else fitfun->SetParameters(nMax/5,20,0.135,20,20,nMax/5);
608 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
610 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
615 if (
kPolN < 4 )
fitfun->SetParameters(nMax/5,0.54,40,0);
616 else fitfun->SetParameters(nMax/5,40,0.54,40,40,nMax/5);
618 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
626 printf(
"Skip bin %d: n max %2.3e < cut %2.3e\n",i, nMax,
kNPairCut);
633 mesonPt .SetAt(-1,i);
634 emesonPt .SetAt(-1,i);
635 mesonPtBC .SetAt(-1,i);
636 emesonPtBC .SetAt(-1,i);
637 mesonMass .SetAt(-1,i);
638 emesonMass .SetAt(-1,i);
639 mesonWidth.SetAt(-1,i);
640 emesonWidth.SetAt(-1,i);
642 fitFunction = (TF1*) hSignal[i]->GetFunction(
"fitfun");
652 Float_t chi2 = fitFunction->GetChisquare();
653 Int_t ndf = fitFunction->GetNDF();
654 if( ndf > 0 ) chi2ndf = chi2 / ndf;
658 Double_t A = fitFunction->GetParameter(0);
659 Double_t mean = fitFunction->GetParameter(1);
660 Double_t sigm = fitFunction->GetParameter(2);
667 Double_t eA = fitFunction->GetParError(0);
668 Double_t emean = fitFunction->GetParError(1);
669 Double_t esigm = fitFunction->GetParError(2);
675 pLegendIM[i] =
new TLegend(0.48,0.65,0.95,0.93);
676 pLegendIM[i]->SetTextSize(0.035);
677 pLegendIM[i]->SetFillColor(10);
678 pLegendIM[i]->SetBorderSize(1);
679 pLegendIM[i]->SetHeader(Form(
" %s - %s",particleN.Data(), leg.Data()));
680 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.1e#pm%2.1e ",A,eA),
"");
681 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %3.1f #pm %3.1f GeV/#it{c}^{2}",mean*1000,emean*1000),
"");
682 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %3.1f #pm %3.1f GeV/#it{c}^{2}",sigm*1000,esigm*1000),
"");
688 Double_t counts = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
690 TMath::Power(eA/A,2) +
691 TMath::Power(esigm/sigm,2);
692 eCounts = TMath::Sqrt(eCounts) * counts;
695 counts/=(
nEvt*(exPt.At(i)*2));
696 eCounts/=(
nEvt*(exPt.At(i)*2));
698 mesonPt.SetAt( counts,i);
699 emesonPt.SetAt(eCounts,i);
705 mesonMass .SetAt( mean*1000.,i);
706 emesonMass .SetAt(emean*1000.,i);
708 mesonWidth.SetAt( sigm*1000.,i);
709 emesonWidth.SetAt(esigm*1000.,i);
713 printf(
"Bin %d, Bad fit, Chi2 %f ndf %d, ratio %f!\n",
718 else printf(
"Bin %d, NO fit available!\n",i);
723 Double_t width = mesonWidth[i]/1000.;
724 Double_t mMinBin = mass - 2 * width;
725 Double_t mMaxBin = mass + 2 * width;
726 if(mass <= 0 || width <= 0)
730 mMinBin = 0.115; mMaxBin = 0.3 ;
734 mMinBin = 0.4; mMaxBin = 0.9 ;
742 if ( hSignal[i] && ( hMix[i] || hname.Contains(
"MCpT") ) )
748 GetRangeIntegralAndError(hSignal[i], hSignal[i]->FindBin(mMinBin), hSignal[i]->FindBin(mMaxBin), countsBin, eCountsBin );
750 countsBin/=(
nEvt*(exPt.At(i)*2));
751 eCountsBin/=(
nEvt*(exPt.At(i)*2));
753 mesonPtBC.SetAt( countsBin,i);
754 emesonPtBC.SetAt(eCountsBin,i);
762 if(
kMix && hMix[i] )
767 hIM[i]->SetMaximum(hIM[i]->GetMaximum()*1.2);
768 hIM[i]->SetMinimum(hSignal[i]->GetMinimum()*0.2);
771 pLegendIM[i]->AddEntry(hIM[i],
"Raw pairs" ,
"L");
773 if ( hMix[i]->GetEntries() >
kNPairCut*3 )
777 hMixCorrected[i]->Draw(
"same");
778 pLegendIM[i]->AddEntry(hMixCorrected[i],
"Mixed pairs" ,
"L");
782 hMix[i]->Draw(
"same");
783 pLegendIM[i]->AddEntry(hMix[i],
"Mixed pairs" ,
"L");
789 hSignal[i] ->
Draw(
"same");
790 pLegendIM[i]->AddEntry(hSignal[i],
"Signal pairs",
"L");
795 hSignal[i]->SetMaximum(hSignal[i]->GetMaximum()*1.2);
796 hSignal[i]->SetMinimum(hSignal[i]->GetMinimum()*0.8);
798 pLegendIM[i]->AddEntry(hSignal[i],
"Raw pairs",
"L");
799 hSignal[i] ->
Draw(
"HE");
803 if ( hname.Contains(
"All") )
805 TH1F* hMesonPairOrigin = (TH1F*)
fout->Get(Form(
"IM_MCpTReco_PtBin%d",i));
806 if ( hMesonPairOrigin )
808 hMesonPairOrigin->SetLineColor(8);
809 hMesonPairOrigin->Draw(
"same");
810 pLegendIM[i]->AddEntry(hMesonPairOrigin,Form(
"%s origin",particleN.Data()),
"L");
817 pLegendIM[i]->Draw();
827 cIMModi->Print(Form(
"%s/%s/%s/%s/Mgg_%s.%s",
828 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),
829 hname.Data(),kPlotFormat.Data()));
836 TCanvas * cRat =
new TCanvas(Form(
"Ratio_%s\n",hname.Data()), Form(
"Ratio %s\n", leg.Data()), 1200, 1200) ;
837 cRat->Divide(col, col);
839 for(
Int_t i = 0; i < nPt; i++)
852 nMax = hRatio[i]->Integral(hRatio[i]->FindBin(0.005),
853 hRatio[i]->FindBin(0.20));
855 nMax = hRatio[i]->Integral(hRatio[i]->FindBin(0.4),
856 hRatio[i]->FindBin(0.6));
858 if ( nMax <= 0 )
continue;
862 hRatio[i]->SetMaximum(nMax/4);
863 hRatio[i]->SetMinimum(1e-6);
864 hRatio[i]->SetAxisRange(mmin,mmax,
"X");
868 hRatio[i]->SetYTitle(
"Real pairs / Mixed pairs");
869 hRatio[i]->SetTitleOffset(1.5,
"Y");
877 cRat->Print(Form(
"%s/%s/%s/%s/MggRatio_%s.%s",
878 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),
879 hname.Data(),kPlotFormat.Data()));
890 gPt->SetName(Form(
"gPt_%s",hname.Data()));
891 gPt->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
892 gPt->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
893 gPt->GetHistogram()->SetYTitle(Form(
"dN_{%s}/d#it{p}_{T} (GeV/#it{c})^{-1} / N_{events} ",particleN.Data()));
895 gPt->GetHistogram()->SetTitleOffset(1.5,
"Y");
896 gPt->SetMarkerStyle(20);
898 gPt->SetMarkerColor(1);
902 TGraphErrors* gPtBC =
new TGraphErrors(nPt,xPt.GetArray(),mesonPtBC.GetArray(),exPt.GetArray(),emesonPtBC.GetArray());
903 gPtBC->SetName(Form(
"gPtBC_%s",hname.Data()));
904 gPtBC->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
905 gPtBC->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
906 gPtBC->GetHistogram()->SetYTitle(Form(
"d#it{N}_{%s}/d#it{p}_{T} (GeV/#it{c})^{-1} / #it{N}_{events} ",particleN.Data()));
908 gPtBC->GetHistogram()->SetTitleOffset(1.5,
"Y");
909 gPtBC->SetMarkerStyle(24);
911 gPtBC->SetMarkerColor(4);
915 TGraphErrors* gMass =
new TGraphErrors(nPt,xPt.GetArray(),mesonMass.GetArray(),exPt.GetArray(),emesonMass.GetArray());
916 gMass->SetName(Form(
"gMass_%s",hname.Data()));
917 gMass->GetHistogram()->SetTitle(Form(
"mass vs #it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
918 gMass->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
919 gMass->GetHistogram()->SetYTitle(Form(
"mass_{%s} (MeV/#it{c}^{2}) ",particleN.Data()));
921 gMass->GetHistogram()->SetTitleOffset(1.5,
"Y");
922 gMass->SetMarkerStyle(20);
924 gMass->SetMarkerColor(1);
926 TGraphErrors* gWidth=
new TGraphErrors(nPt,xPt.GetArray(),mesonWidth.GetArray(),exPt.GetArray(),emesonWidth.GetArray());
927 gWidth->SetName(Form(
"gWidth_%s",hname.Data()));
928 gWidth->GetHistogram()->SetTitle(Form(
"Width vs #it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
929 gWidth->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
930 gWidth->GetHistogram()->SetYTitle(Form(
"#sigma_{%s} (MeV/#it{c}^{2}) ",particleN.Data()));
932 gWidth->GetHistogram()->SetTitleOffset(1.5,
"Y");
933 gWidth->SetMarkerStyle(20);
935 gWidth->SetMarkerColor(1);
939 TCanvas *cFitGraph =
new TCanvas(Form(
"cFitGraph_%s",hname.Data()),
940 Form(
"Fit Graphs for %s",hname.Data()),600,600);
941 cFitGraph->Divide(2, 2);
948 if ( kParticle==
"Pi0" )
950 gMass->SetMaximum(160);
951 gMass->SetMinimum(100);
955 gMass->SetMaximum(660);
956 gMass->SetMinimum(420);
967 gWidth->SetMaximum(16);
968 gWidth->SetMinimum(6);
972 gWidth->SetMaximum(60);
973 gWidth->SetMinimum(0);
985 Double_t maximum = gPt->GetHistogram()->GetMaximum();
986 Double_t minimum = gPt->GetHistogram()->GetMinimum();
1002 if(maximum < gPtBC->GetHistogram()->GetMaximum()) maximum = gPtBC->GetHistogram()->GetMaximum();
1003 if(minimum > gPtBC->GetHistogram()->GetMinimum()) minimum = gPtBC->GetHistogram()->GetMaximum();
1006 if(minimum < 0 ) minimum = 2.e-9 ;
1007 gPtBC->SetMaximum(maximum*2.);
1008 gPtBC->SetMinimum(minimum/2.);
1010 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
1011 legend->AddEntry(gPt ,
"From fit",
"P");
1012 legend->AddEntry(gPtBC,
"From bin counting",
"P");
1016 gPt->SetMaximum(maximum*2.);
1017 gPt->SetMinimum(minimum/2.);
1019 cFitGraph->Print(Form(
"%s/%s/%s/%s/MassWidthPtSpectra_%s.%s",
1020 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),hname.Data(),
1021 kPlotFormat.Data()));
1027 if ( hMi ) hMi->Write();
1029 for(
Int_t ipt = 0; ipt < nPt; ipt++)
1031 if ( hIM[ipt] ) hIM[ipt]->Write();
1035 if (hMix [ipt] ) hMix [ipt]->Write();
1036 if (hMixCorrected[ipt] ) hMixCorrected[ipt]->Write();
1037 if (hRatio [ipt] ) hRatio [ipt]->Write();
1038 if (hSignal [ipt] ) hSignal [ipt]->Write();
1045 if (
kMix ) gPtBC->Write();
1048 Efficiency(nPt, xPt, exPt, mesonPt, emesonPt, mesonPtBC, emesonPtBC, hname);
1058 gStyle->SetOptTitle(1);
1059 gStyle->SetTitleOffset(2,
"Y");
1060 gStyle->SetOptStat(0);
1061 gStyle->SetOptFit(000000);
1063 const Int_t nCombi = last-first+1;
1064 Int_t nCombiActive = 0;
1071 if(opt.Contains(
"Group"))
1077 if(opt.Contains(
"Sector"))
1083 if(opt.Contains(
"Side"))
1088 TLegend * legend =
new TLegend(xmin,ymin,xmax,ymax);
1089 legend->SetTextSize(0.05);
1091 TString particleN =
" #pi^{0}";
1092 if(kParticle==
"Eta") particleN =
" #eta";
1100 if(opt.Contains(
"SMGroup")) opt2 =
"SM";
1108 if ( !gSumMass ) return ;
1110 gSumPt ->SetMarkerStyle(20);
1111 gSumPt ->SetMarkerColor(1);
1112 gSumPt ->SetLineColor (1);
1114 gSumMass->SetMarkerStyle(20);
1115 gSumMass->SetMarkerColor(1);
1116 gSumMass->SetLineColor (1);
1118 gSumWidth->SetMarkerStyle(20);
1119 gSumWidth->SetMarkerColor(1);
1120 gSumWidth->SetLineColor (1);
1124 gSumPtBC ->SetMarkerStyle(20);
1125 gSumPtBC ->SetMarkerColor(1);
1126 gSumPtBC ->SetLineColor (1);
1129 legend->AddEntry(gSumPt,
"Sum",
"P");
1132 if ( opt !=
"SMGroup" )
1134 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1136 gSumPt->GetY ()[ibin] /= nCombi;
1137 gSumPt->GetEY()[ibin] /= nCombi;
1140 gSumPtBC->GetY ()[ibin] /= nCombi;
1141 gSumPtBC->GetEY()[ibin] /= nCombi;
1160 gSumTRDnotPt = (
TGraphErrors*)
fout->Get(Form(
"gPt_Same%sTRDNot" ,opt2.Data()));
1161 gSumTRDnotPtBC = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_Same%sTRDNot" ,opt2.Data()));
1162 gSumTRDnotMass = (
TGraphErrors*)
fout->Get(Form(
"gMass_Same%sTRDNot" ,opt2.Data()));
1163 gSumTRDnotWidth = (
TGraphErrors*)
fout->Get(Form(
"gWidth_Same%sTRDNot",opt2.Data()));
1164 printf(
"\t Sum Not TRD %p %p %p %p\n",gSumTRDnotPt,gSumTRDnotPtBC,gSumTRDnotMass,gSumTRDnotWidth);
1166 gSumTRDnotPt ->SetMarkerStyle(20);
1167 gSumTRDnotPt ->SetMarkerColor(kGray);
1168 gSumTRDnotPt ->SetLineColor (kGray);
1170 gSumTRDnotMass->SetMarkerStyle(20);
1171 gSumTRDnotMass->SetMarkerColor(kGray);
1172 gSumTRDnotMass->SetLineColor (kGray);
1174 gSumTRDnotWidth->SetMarkerStyle(20);
1175 gSumTRDnotWidth->SetMarkerColor(kGray);
1176 gSumTRDnotWidth->SetLineColor (kGray);
1180 gSumTRDnotPtBC ->SetMarkerStyle(20);
1181 gSumTRDnotPtBC ->SetMarkerColor(kGray);
1182 gSumTRDnotPtBC ->SetLineColor (kGray);
1185 legend->AddEntry(gSumTRDnotPt,
"w/o TRD",
"P");
1187 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1198 gSumTRDyesPt = (
TGraphErrors*)
fout->Get(Form(
"gPt_Same%sTRDYes" ,opt2.Data()));
1199 gSumTRDyesPtBC = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_Same%sTRDYes" ,opt2.Data()));
1200 gSumTRDyesMass = (
TGraphErrors*)
fout->Get(Form(
"gMass_Same%sTRDYes" ,opt2.Data()));
1201 gSumTRDyesWidth = (
TGraphErrors*)
fout->Get(Form(
"gWidth_Same%sTRDYes",opt2.Data()));
1202 printf(
"\t Sum Yes TRD %p %p %p %p\n",gSumTRDyesPt,gSumTRDyesPtBC,gSumTRDyesMass,gSumTRDyesWidth);
1204 gSumTRDyesPt ->SetMarkerStyle(20);
1205 gSumTRDyesPt ->SetMarkerColor(kCyan);
1206 gSumTRDyesPt ->SetLineColor (kCyan);
1208 gSumTRDyesMass->SetMarkerStyle(20);
1209 gSumTRDyesMass->SetMarkerColor(kCyan);
1210 gSumTRDyesMass->SetLineColor (kCyan);
1212 gSumTRDyesWidth->SetMarkerStyle(20);
1213 gSumTRDyesWidth->SetMarkerColor(kCyan);
1214 gSumTRDyesWidth->SetLineColor (kCyan);
1218 gSumTRDyesPtBC ->SetMarkerStyle(20);
1219 gSumTRDyesPtBC ->SetMarkerColor(kCyan);
1220 gSumTRDyesPtBC ->SetLineColor (kCyan);
1223 legend->AddEntry(gSumTRDyesPt,
"w/ TRD",
"P");
1226 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1228 gSumTRDyesPt->GetY ()[ibin] /= nCovered;
1229 gSumTRDyesPt->GetEY()[ibin] /= nCovered;
1232 gSumTRDyesPtBC->GetY ()[ibin] /= nCovered;
1233 gSumTRDyesPtBC->GetEY()[ibin] /= nCovered;
1247 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1249 gPt [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gPt_%s%d" ,opt.Data(),icomb+first));
1250 gPtBC [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_%s%d" ,opt.Data(),icomb+first));
1251 gMass [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gMass_%s%d" ,opt.Data(),icomb+first));
1252 gWidth[icomb] = (
TGraphErrors*)
fout->Get(Form(
"gWidth_%s%d",opt.Data(),icomb+first));
1255 if ( !gPt[icomb] ) continue ;
1271 gPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1272 gWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1273 gMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1280 gPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1283 if ( !opt.Contains(
"Group") )
1288 legend->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb+first),
"P");
1292 if(icomb == 0) legend->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1293 if(icomb == 1) legend->AddEntry(gPt[icomb],
"SM1+2",
"P");
1294 if(icomb == 2) legend->AddEntry(gPt[icomb],
"SM3+7",
"P");
1298 if ( !gMass[0] ) return ;
1303 TCanvas *cFitGraph =
new TCanvas(Form(
"cFitGraph_%sCombinations",opt.Data()),
1304 Form(
"Fit Graphs for %s combinations",opt.Data()),1000,1000);
1305 cFitGraph->Divide(2, 2);
1312 if ( kParticle ==
"Pi0" )
1314 gMass[0]->SetMaximum(141);
1315 gMass[0]->SetMinimum(116);
1319 gMass[0]->SetMaximum(600);
1320 gMass[0]->SetMinimum(450);
1322 gMass[0]->Draw(
"AP");
1323 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1325 if ( gMass[icomb] ) gMass[icomb]->Draw(
"P");
1328 gSumMass->Draw(
"P");
1331 gSumTRDnotMass->Draw(
"P");
1332 gSumTRDyesMass->Draw(
"P");
1341 if ( kParticle ==
"Pi0" )
1343 gWidth[0]->SetMaximum(17);
1344 gWidth[0]->SetMinimum(7);
1345 if(opt==
"Side") gWidth[0]->SetMinimum(2);
1349 gWidth[0]->SetMaximum(50);
1350 gWidth[0]->SetMinimum(10);
1353 gWidth[0]->Draw(
"AP");
1354 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1356 if ( gWidth[icomb] ) gWidth[icomb]->Draw(
"P");
1359 gSumWidth->Draw(
"P");
1362 gSumTRDnotWidth->Draw(
"P");
1363 gSumTRDyesWidth->Draw(
"P");
1374 gPt[0]->SetMaximum(1);
1375 gPt[0]->SetMinimum(1e-8);
1378 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1380 if ( gPt[icomb] ) gPt[icomb]->Draw(
"P");
1386 gSumTRDnotPt->Draw(
"P");
1387 gSumTRDyesPt->Draw(
"P");
1400 gPtBC[0]->SetMaximum(1);
1401 gPtBC[0]->SetMinimum(1e-8);
1403 gPtBC[0]->Draw(
"AP");
1405 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1407 if ( gPtBC[icomb] ) gPtBC[icomb]->Draw(
"P");
1410 gSumPtBC->Draw(
"P");
1413 gSumTRDnotPtBC->Draw(
"P");
1414 gSumTRDyesPtBC->Draw(
"P");
1419 cFitGraph->Print(Form(
"%s/%s/%s/%s/MassWidthPtSpectra_%sCombinations.%s",
1420 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),opt.Data(),
1421 kPlotFormat.Data()));
1430 TLegend * legendR =
new TLegend(xmin,ymin,xmax,ymax);
1431 legendR->SetTextSize(0.05);
1433 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1439 gRatPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumPtBC );
1441 gRatMass [icomb] =
DivideGraphs(gMass [icomb],gSumMass );
1443 gRatWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumWidth);
1445 if(!gRatMass[icomb])
continue;
1459 gRatPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1460 gRatWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1461 gRatMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1463 gRatPt [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1464 gRatWidth[icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1465 gRatMass [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1467 gRatPt [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1468 gRatWidth[icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1469 gRatMass [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1471 gRatPt [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1472 gRatWidth[icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1473 gRatMass [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1480 gRatPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1481 gRatPtBC [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1482 gRatPtBC [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1483 gRatPtBC [icomb]->GetHistogram()->SetTitleOffset(1.5,
"Y");
1486 if ( !opt.Contains(
"Group") )
1491 legendR->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb+first),
"P");
1495 if(icomb == 0) legendR->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1496 if(icomb == 1) legendR->AddEntry(gPt[icomb],
"SM1+2",
"P");
1497 if(icomb == 2) legendR->AddEntry(gPt[icomb],
"SM3+7",
"P");
1504 TCanvas *cFitGraphRatio =
new TCanvas(Form(
"cFitGraphSumRatio_%sCombinations",opt.Data()),
1505 Form(
"Fit Graphs ratio to sum for %s combinations",opt.Data()),1000,1000);
1506 cFitGraphRatio->Divide(2, 2);
1509 cFitGraphRatio->cd(1);
1513 gRatMass[0]->SetMaximum(1.03);
1514 gRatMass[0]->SetMinimum(0.97);
1516 gRatMass[0]->Draw(
"AP");
1517 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1519 if ( gRatMass[icomb] ) gRatMass[icomb]->Draw(
"P");
1524 cFitGraphRatio->cd(2);
1528 gRatWidth[0]->SetMaximum(1.5);
1529 gRatWidth[0]->SetMinimum(0.7);
1531 gRatWidth[0]->Draw(
"AP");
1532 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1534 if ( gRatWidth[icomb] ) gRatWidth[icomb]->Draw(
"P");
1539 cFitGraphRatio->cd(3);
1545 gRatPt[0]->SetMaximum(2);
1546 gRatPt[0]->SetMinimum(0);
1548 gRatPt[0]->Draw(
"AP");
1549 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1551 if ( gRatPt[icomb] ) gRatPt[icomb]->Draw(
"P");
1558 cFitGraphRatio->cd(4);
1564 gRatPtBC[0]->SetMaximum(2);
1565 gRatPtBC[0]->SetMinimum(0);
1567 gRatPtBC[0]->Draw(
"AP");
1568 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1570 if ( gRatPtBC[icomb] ) gRatPtBC[icomb]->Draw(
"P");
1576 cFitGraphRatio->Print(Form(
"%s/%s/%s/%s/MassWidthPtSpectra_%sCombinations_RatioToSum.%s",
1577 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),opt.Data(),
1578 kPlotFormat.Data()));
1592 TLegend * legendR =
new TLegend(xmin,ymin,xmax,ymax);
1593 legendR->SetTextSize(0.05);
1595 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1603 gRatTRDPt [icomb] =
DivideGraphs(gPt [icomb],gSumTRDnotPt );
1604 gRatTRDPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumTRDnotPtBC );
1605 gRatTRDMass [icomb] =
DivideGraphs(gMass [icomb],gSumTRDnotMass );
1606 gRatTRDWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumTRDnotWidth);
1610 gRatTRDPt [icomb] =
DivideGraphs(gPt [icomb],gSumTRDyesPt );
1611 gRatTRDPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumTRDyesPtBC );
1612 gRatTRDMass [icomb] =
DivideGraphs(gMass [icomb],gSumTRDyesMass );
1613 gRatTRDWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumTRDyesWidth);
1617 if(!gRatTRDMass[icomb])
continue;
1631 gRatTRDPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1632 gRatTRDWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1633 gRatTRDMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1635 gRatTRDPt [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1636 gRatTRDWidth[icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1637 gRatTRDMass [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1639 gRatTRDPt [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1640 gRatTRDWidth[icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1641 gRatTRDMass [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1643 gRatTRDPt [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1644 gRatTRDWidth[icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1645 gRatTRDMass [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1652 gRatTRDPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1653 gRatTRDPtBC [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1654 gRatTRDPtBC [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1655 gRatTRDPtBC [icomb]->GetHistogram()->SetTitleOffset(1.5,
"Y");
1658 if ( !opt.Contains(
"Group") )
1659 legendR->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb),
"P");
1662 if(icomb == 0) legendR->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1663 if(icomb == 1) legendR->AddEntry(gPt[icomb],
"SM1+2",
"P");
1664 if(icomb == 2) legendR->AddEntry(gPt[icomb],
"SM3+7",
"P");
1671 TCanvas *cFitGraphRatioTRD =
new TCanvas(Form(
"cFitGraphSumRatioTRD_%sCombinations",opt.Data()),
1672 Form(
"Fit Graphs ratio to sum for %s combinations for TRD cases",opt.Data()),1000,1000);
1673 cFitGraphRatioTRD->Divide(2, 2);
1676 cFitGraphRatioTRD->cd(1);
1680 gRatTRDMass[0]->SetMaximum(1.03);
1681 gRatTRDMass[0]->SetMinimum(0.97);
1683 gRatTRDMass[0]->Draw(
"AP");
1684 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1686 if ( gRatTRDMass[icomb] ) gRatTRDMass[icomb]->Draw(
"P");
1691 cFitGraphRatioTRD->cd(2);
1695 gRatTRDWidth[0]->SetMaximum(1.5);
1696 gRatTRDWidth[0]->SetMinimum(0.7);
1698 gRatTRDWidth[0]->Draw(
"AP");
1699 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1701 if ( gRatTRDWidth[icomb] ) gRatTRDWidth[icomb]->Draw(
"P");
1706 cFitGraphRatioTRD->cd(3);
1712 gRatTRDPt[0]->SetMaximum(2);
1713 gRatTRDPt[0]->SetMinimum(0);
1715 gRatTRDPt[0]->Draw(
"AP");
1716 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1718 if ( gRatTRDPt[icomb] ) gRatTRDPt[icomb]->Draw(
"P");
1725 cFitGraphRatioTRD->cd(4);
1731 gRatTRDPtBC[0]->SetMaximum(2);
1732 gRatTRDPtBC[0]->SetMinimum(0);
1734 gRatTRDPtBC[0]->Draw(
"AP");
1735 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1737 if ( gRatTRDPtBC[icomb] ) gRatTRDPtBC[icomb]->Draw(
"P");
1743 cFitGraphRatioTRD->Print(Form(
"%s/%s/%s/%s/MassWidthPtSpectra_%sCombinations_RatioToSumTRD.%s",
1744 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),opt.Data(),
1745 kPlotFormat.Data()));
1748 TLegend * legendSums =
new TLegend(xmin,ymin,xmax,ymax);
1754 TCanvas *cFitGraphSums =
new TCanvas(Form(
"cFitGraph_%sSums",opt.Data()),
1755 Form(
"Fit Graphs for %s Sums",opt.Data()),1000,1000);
1756 cFitGraphSums->Divide(2, 2);
1759 cFitGraphSums->cd(1);
1763 if ( kParticle ==
"Pi0" )
1765 gSumMass->SetMaximum(135);
1766 gSumMass->SetMinimum(125);
1770 gSumMass->SetMaximum(560);
1771 gSumMass->SetMinimum(520);
1774 gSumMass->Draw(
"AP");
1776 gSumTRDnotMass->Draw(
"P");
1777 gSumTRDyesMass->Draw(
"P");
1779 legendSums->AddEntry(gSumMass,
"Sum",
"P");
1780 legendSums->AddEntry(gSumTRDnotMass,
"w/o TRD",
"P");
1781 legendSums->AddEntry(gSumTRDyesMass,
"w/ TRD",
"P");
1785 cFitGraphSums->cd(2);
1789 if ( kParticle ==
"Pi0" )
1791 gSumWidth->SetMaximum(17);
1792 gSumWidth->SetMinimum(7);
1793 if(opt==
"Side") gSumWidth->SetMinimum(2);
1797 gSumWidth->SetMaximum(50);
1798 gSumWidth->SetMinimum(10);
1801 gSumWidth->Draw(
"AP");
1802 gSumTRDnotWidth->Draw(
"P");
1803 gSumTRDyesWidth->Draw(
"P");
1807 cFitGraphSums->cd(3);
1813 gSumPt->SetMaximum(1);
1814 gSumPt->SetMinimum(1e-8);
1817 gSumTRDnotPt->Draw(
"P");
1818 gSumTRDyesPt->Draw(
"P");
1824 cFitGraphSums->cd(4);
1830 gSumPtBC->SetMaximum(1);
1831 gSumPtBC->SetMinimum(1e-8);
1833 gSumPtBC->Draw(
"AP");
1834 gSumTRDnotPtBC->Draw(
"P");
1835 gSumTRDyesPtBC->Draw(
"P");
1840 cFitGraphSums->Print(Form(
"%s/%s/%s/%s/MassWidthPtSpectra_%sSums.%s",
1841 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),opt.Data(),
1842 kPlotFormat.Data()));
1853 gStyle->SetOptTitle(1);
1854 gStyle->SetTitleOffset(2,
"Y");
1855 gStyle->SetOptStat(0);
1856 gStyle->SetOptFit(000000);
1858 TArrayD primMesonPt ; primMesonPt .Set(nPt);
1859 TArrayD eprimMesonPt ; eprimMesonPt .Set(nPt);
1860 TArrayD primMesonPtAcc; primMesonPtAcc.Set(nPt);
1861 TArrayD eprimMesonPtAcc; eprimMesonPtAcc.Set(nPt);
1862 TArrayD primMesonAcc ; primMesonAcc.Set(nPt);
1863 TArrayD eprimMesonAcc ; eprimMesonAcc.Set(nPt);
1865 TH2D* h2PrimMesonPtY = (
TH2D*)
fil->Get( Form(
"%s_hPrim%sRapidity" ,kHistoStartName.Data(), kParticle.Data() ) );
1866 TH2D* h2PrimMesonPtYAcc = (
TH2D*)
fil->Get( Form(
"%s_hPrim%sAccRapidity",kHistoStartName.Data(), kParticle.Data() ) );
1868 if ( !h2PrimMesonPtY ) return ;
1872 h2PrimMesonPtY ->Sumw2();
1873 h2PrimMesonPtYAcc->Sumw2();
1883 h2PrimMesonPtY ->Scale(1./
nEvt);
1884 h2PrimMesonPtYAcc->Scale(1./
nEvt);
1887 h2PrimMesonPtY ->Write();
1888 h2PrimMesonPtYAcc->Write();
1890 TH1D* hY = h2PrimMesonPtY->ProjectionY(
"Rapidity",-1,-1);
1891 Int_t binYmin = hY->FindBin(-0.65);
1892 Int_t binYmax = hY->FindBin(+0.65);
1894 TH1D* hPrimMesonPt = (
TH1D*) h2PrimMesonPtY->ProjectionX(
"PrimaryPt" ,binYmin ,binYmax );
1895 hPrimMesonPt->Write();
1897 TH1D* hYAcc = h2PrimMesonPtYAcc->ProjectionY(
"RapidityAcc",-1,-1);
1898 binYmin = hYAcc->FindBin(-0.65);
1899 binYmax = hYAcc->FindBin(+0.65);
1901 TH1D* hPrimMesonPtAcc = (
TH1D*) h2PrimMesonPtYAcc->ProjectionX(
"PrimaryPtAccepted" ,binYmin ,binYmax );
1902 hPrimMesonPtAcc->Write();
1916 for(
Int_t ibin = 0; ibin < nPt; ibin++ )
1918 ptMin = xPtLimits[ibin];
1919 ptMax = xPtLimits[ibin+1];
1921 binMin = hPrimMesonPt->FindBin(ptMin);
1922 binMax = hPrimMesonPt->FindBin(ptMax)-1;
1928 primMesonPt [ibin] = integralA;
1929 eprimMesonPt [ibin] = integralAErr;
1930 primMesonPtAcc[ibin] = integralB;
1931 eprimMesonPtAcc[ibin] = integralBErr;
1933 if ( integralA > 0 && integralB > 0 )
1935 primMesonAcc[ibin] = integralB / integralA ;
1936 eprimMesonAcc[ibin] =
GetFractionError(integralB,integralA,integralBErr,integralAErr);
1940 primMesonAcc[ibin] = 0;
1941 eprimMesonAcc[ibin] = 0;
1947 primMesonPt [ibin]/=((exPt[ibin]*4));
1948 primMesonPtAcc[ibin]/=((exPt[ibin]*4));
1967 TGraphErrors * gPrim =
new TGraphErrors(nPt,xPt.GetArray(),primMesonPt.GetArray(),exPt.GetArray(),eprimMesonPt.GetArray());
1968 gPrim->SetName(
"Primary");
1969 gPrim->GetHistogram()->SetYTitle(
"d #it{N}/d #it{p}_{T}");
1970 gPrim->GetHistogram()->SetTitleOffset(1.4,
"Y");
1971 gPrim->GetHistogram()->SetXTitle(
"#it{p}_{T,gen} (GeV/#it{c})");
1972 gPrim->GetHistogram()->SetTitleOffset(1.2,
"X");
1973 gPrim->GetHistogram()->SetTitle(
"#it{p}_{T} spectra for |#it{Y}| < 0.65");
1976 TGraphErrors * gPrimAcc =
new TGraphErrors(nPt,xPt.GetArray(),primMesonPtAcc.GetArray(),exPt.GetArray(),eprimMesonPtAcc.GetArray());
1977 gPrimAcc->SetName(
"PrimaryInAcceptance");
1978 gPrimAcc->GetHistogram()->SetYTitle(
"d#it{N}/d #it{p}_{T}");
1979 gPrimAcc->GetHistogram()->SetTitle(Form(
"|#it{Y}| < 0.65 in %s",kCalorimeter.Data()));
1983 TH1D* hAcc = (
TH1D*) hPrimMesonPtAcc->Clone(
"hAcceptance");
1984 hAcc->Divide(hPrimMesonPt);
1986 TGraphErrors * gAcc =
new TGraphErrors(nPt,xPt.GetArray(),primMesonAcc.GetArray(),exPt.GetArray(),eprimMesonAcc.GetArray());
1987 gAcc->SetName(
"Acceptance");
1988 gAcc->GetHistogram()->SetYTitle(
"Acceptance");
1989 gAcc->GetHistogram()->SetTitleOffset(1.4,
"Y");
1990 gAcc->GetHistogram()->SetXTitle(
"#it{p}_{T,gen} (GeV/#it{c})");
1991 gAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
1992 gAcc->GetHistogram()->SetTitle(Form(
"Acceptance for |#it{Y}| < 0.65 in %s",kCalorimeter.Data()));
1997 TCanvas *cAcc =
new TCanvas(Form(
"cAcceptance"),
1998 Form(
"Primary generated p_{T} spectra and acceptance"),2*600,600);
2006 Double_t maximum = gPrim->GetHistogram()->GetMaximum();
2007 Double_t minimum = gPrim->GetHistogram()->GetMinimum();
2009 if ( gPrimAcc->GetMaximum() > maximum ) maximum = gPrimAcc->GetMaximum() ;
2010 if ( gPrimAcc->GetMinimum() > minimum ) minimum = gPrimAcc->GetMinimum() ;
2012 gPrim->SetMaximum(maximum*10);
2013 gPrim->SetMinimum(minimum/10);
2016 gPrimAcc->Draw(
"P");
2018 gPrim ->SetMarkerColor(1);
2019 gPrimAcc->SetMarkerColor(4);
2020 gPrim ->SetLineColor(1);
2021 gPrimAcc->SetLineColor(4);
2022 gPrim ->SetMarkerStyle(24);
2023 gPrimAcc->SetMarkerStyle(24);
2025 hPrimMesonPt ->Draw(
"same");
2026 hPrimMesonPtAcc->Draw(
"same");
2028 hPrimMesonPt ->Draw(
"Hsame");
2029 hPrimMesonPtAcc->Draw(
"Hsame");
2030 hPrimMesonPt ->SetLineColor(1);
2031 hPrimMesonPtAcc->SetLineColor(4);
2033 TLegend * legendS =
new TLegend(0.4,0.7,0.9,0.9);
2034 legendS->AddEntry(gPrim,
"|Y| < 0.65",
"P");
2035 legendS->AddEntry(gPrimAcc,Form(
"Both in %s",kCalorimeter.Data()),
"P");
2037 legendS->AddEntry(hPrimMesonPt,
"Histo |Y| < 0.65",
"L");
2038 legendS->AddEntry(hPrimMesonPtAcc,Form(
"Histo Both in %s",kCalorimeter.Data()),
"L");
2047 gAcc->SetMaximum(gAcc->GetHistogram()->GetMaximum()*1.3);
2048 gAcc->SetMinimum(0);
2051 gAcc->SetMarkerColor(1);
2052 gAcc->SetMarkerStyle(24);
2054 hAcc->Draw(
"Hsame");
2055 hAcc->SetLineColor(4);
2057 TLegend * legendA =
new TLegend(0.7,0.75,0.9,0.9);
2058 legendA->AddEntry(gAcc,
"Graph",
"P");
2059 legendA->AddEntry(hAcc,
"Histo",
"L");
2063 cAcc->Print(Form(
"%s/%s/%s/%s/PrimarySpectraAcceptance.%s",
2064 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data(),
2065 kPlotFormat.Data()));
2097 TString histoDir =
"Pi0IM_GammaTrackCorr_EMCAL",
2098 TString histoList =
"default",
2107 Bool_t truncmix = kFALSE,
2110 Bool_t drawMCAll = kFALSE,
2111 Bool_t drawPerSM = kTRUE,
2112 Bool_t drawPerSMGr = kFALSE,
2113 Bool_t drawPerSector= kFALSE,
2114 Bool_t drawPerSide = kFALSE,
2125 kParticle = particle;
2126 kProdName = prodname;
2128 kPlotFormat = plotFormat;
2133 kHistoList = histoList;
2136 kHistoStartName = histoStart;
2139 kHistoStartName =
"AnaPi0_Calo0";
2140 if(kCalorimeter==
"DCAL")
2141 kHistoStartName =
"AnaPi0_Calo1";
2144 if(drawPerSMGr) drawPerSM = kTRUE;
2152 TString processline = Form(
".! mkdir -p %s/%s/%s/%s",
2153 prodname.Data(),
calorimeter.Data(),histoList.Data(),particle.Data()) ;
2154 gROOT->ProcessLine(processline.Data());
2161 if( kFileName !=
"AnalysisResults" && !kFileName.Contains(
"Scale") )
2162 kProdName+=kFileName;
2164 printf(
"Settings: prodname <%s>, filename <%s>, histoDir <%s>, histoList <%s>,\n" 2165 " \t histo start name <%s>, particle <%s>, calorimeter <%s>, \n" 2166 " \t mix %d, kPolN %d, sumw2 %d, n pairs cut %2.2e\n",
2167 kProdName.Data(), kFileName.Data(),histoDir.Data(),histoList.Data(), kHistoStartName.Data(),
2172 printf(
"Could not recover file <%p> or dir <%p> or list <%p>\n",
fil,
direc,lis);
2183 fout =
new TFile(Form(
"%s/%s/%s/%s/MassWidthPtHistograms.root",
2184 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data() ),
"recreate");
2185 printf(
"Open Output File: %s/%s/%s/%s/MassWidthPtHistograms.root\n",
2186 kProdName.Data(),kCalorimeter.Data(),kHistoList.Data(),kParticle.Data());
2192 const Int_t nPtEta = 13;
2193 Double_t xPtLimitsEta[] = {2.,3.,4.,5.,6.,8.,10.,14.,18.,24.,28.,34.,40.,50.};
2198 const Int_t nPtPi0 = 23;
2199 Double_t xPtLimitsPi0[] = {1.6,1.8,2.,2.2,2.4,2.6,2.8,3.,3.4,3.8,4.2,4.6,5.,5.5,6.,6.5,7.,7.5,8.,9.,10.,12.,15.,17.,20.};
2202 if(kParticle ==
"Eta") nPt = nPtEta;
2204 TArrayD xPtLimits; xPtLimits.Set(nPt+1);
2206 TArrayD exPt ; exPt .Set(nPt);
2208 for(
Int_t i = 0; i < nPt; i++)
2210 if(kParticle ==
"Pi0")
2212 xPtLimits.SetAt(xPtLimitsPi0[i],i);
2213 exPt .SetAt((xPtLimitsPi0[i+1]-xPtLimitsPi0[i])/2,i);
2214 xPt .SetAt(xPtLimitsPi0[i]+exPt[i],i);
2218 xPtLimits.SetAt(xPtLimitsEta[i],i);
2219 exPt .SetAt((xPtLimitsEta[i+1]-xPtLimitsEta[i])/2,i);
2220 xPt .SetAt(xPtLimitsEta[i]+exPt[i],i);
2226 if ( kParticle ==
"Pi0" ) xPtLimits.SetAt(xPtLimitsPi0[nPt],nPt);
2227 else xPtLimits.SetAt(xPtLimitsEta[nPt],nPt);
2259 hRe = (
TH2F *)
fil->Get( Form(
"%s_hMC%sMassPtRec", kHistoStartName.Data(), kParticle.Data()) );
2260 comment =
"MC pT reconstructed";
2261 leg =
"MC pT reconstructed";
2262 hname =
"MCpTReco" ;
2263 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, 0x0 );
2267 hRe = (
TH2F *)
fil->Get( Form(
"%s_hMC%sMassPtTrue", kHistoStartName.Data(), kParticle.Data()) );
2268 comment =
"MC pT generated";
2269 leg =
"MC pT generated";
2270 hname =
"MCpTGener" ;
2271 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, 0x0 );
2282 hRe = (
TH2F *)
fil->Get(Form(
"%s_hRe_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2283 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMi_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2288 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hRe_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2289 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMi_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2292 printf(
"histo Re %p - Mix %p All SM\n",hRe,hMi);
2294 if( !hMi )
kMix = kFALSE;
2299 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2316 if ( kCalorimeter==
"DCAL" )
2326 TH2F * hReSMGroups[3] ;
2327 TH2F * hMiSMGroups[3] ;
2330 TH2F * hReSMTRDYes = 0;
2331 TH2F * hMiSMTRDYes = 0;
2332 TH2F * hReSMTRDNot = 0;
2333 TH2F * hMiSMTRDNot = 0;
2335 for(
Int_t imodgroup = 0; imodgroup<=2; imodgroup++)
2337 hReSMGroups[imodgroup] = hMiSMGroups[imodgroup] = 0x0;
2340 for(imod = firstMod; imod<=lastMod; imod++)
2344 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReMod_%d", kHistoStartName.Data(), imod));
2345 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiMod_%d", kHistoStartName.Data(), imod));
2349 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReMod_%d", kHistoStartName.Data(), imod));
2350 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiMod_%d", kHistoStartName.Data(), imod));
2355 comment = Form(
"both clusters in SM %d",imod);
2356 leg = Form(
"SM %d",imod);
2357 hname = Form(
"SM%d" ,imod);
2359 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2362 if( imod == firstMod )
2364 hReSM = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM");
2365 if(
kMix) hMiSM = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM");
2370 if(
kMix) hMiSM ->Add( hMi );
2380 hReSMTRDYes = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM_TRD_Yes");
2381 if(
kMix) hMiSMTRDYes = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM_TRD_Yes");
2385 hReSMTRDYes->Add( hRe );
2386 if(
kMix) hMiSMTRDYes ->Add( hMi );
2396 hReSMGroups[0] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM045689");
2398 hMiSMGroups[0] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM045689");
2400 else if ( imod == 1 )
2402 hReSMGroups[1] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM12");
2403 if(
kMix) hMiSMGroups[1] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM12");
2405 else if ( imod == 3 )
2407 hReSMGroups[2] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM37");
2408 if(
kMix) hMiSMGroups[2] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM37");
2410 else if ( imod == 2 )
2412 hReSMGroups[1]->Add(hRe);
2413 if(
kMix) hMiSMGroups[1]->Add(hMi);
2415 else if ( imod == 7 )
2417 hReSMGroups[2]->Add(hRe);
2418 if(
kMix) hMiSMGroups[2]->Add(hMi);
2420 else if ( imod < 10 )
2422 hReSMGroups[0]->Add(hRe);
2423 if(
kMix) hMiSMGroups[0]->Add(hMi);
2429 comment =
"both clusters in same SM";
2432 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSM, hMiSM );
2437 comment =
"both clusters in same SM, TRD covered";
2438 leg =
"Same SM, TRD Yes";
2439 hname =
"SameSMTRDYes";
2440 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSMTRDYes, hMiSMTRDYes );
2443 hReSMTRDNot = (
TH2F*) hReSM->Clone(
"h2D_Re_IM_SM_TRD_Not");
2444 hReSMTRDNot->Add(hReSMTRDYes,-1);
2447 hMiSMTRDNot = (
TH2F*) hMiSM->Clone(
"h2D_Mi_IM_SM_TRD_Not");
2448 hMiSMTRDNot->Add(hMiSMTRDYes,-1);
2450 comment =
"both clusters in same SM, NOT TRD covered";
2451 leg =
"Same SM, TRD No";
2452 hname =
"SameSMTRDNot";
2453 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSMTRDNot, hMiSMTRDNot );
2462 for(
Int_t imodgroup = 0; imodgroup<=2; imodgroup++)
2467 comment = Form(
"both clusters in same SM, group %d",imodgroup);
2468 leg = Form(
"SMGroup %d",imodgroup);
2469 hname = Form(
"SMGroup%d" ,imodgroup);
2471 if ( imodgroup != 0 )
2473 hReSMGroups[imodgroup]->Scale(1./2.);
2474 if (
kMix ) hMiSMGroups[imodgroup]->Scale(1./2.);
2478 hReSMGroups[imodgroup]->Scale(1./6.);
2479 if (
kMix ) hMiSMGroups[imodgroup]->Scale(1./6.);
2482 ProjectAndFit(nPt, comment, leg, hname, xPtLimits, xPt, exPt,
2483 hReSMGroups[imodgroup], hMiSMGroups[imodgroup] );
2497 Int_t firstSector = 0;
2498 Int_t lastSector = 5;
2499 if ( kCalorimeter==
"DCAL" )
2505 TH2F * hReSector = 0;
2506 TH2F * hMiSector = 0;
2508 for(isector = firstSector; isector<=lastSector; isector++)
2512 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2513 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2517 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2518 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2522 if( isector == firstSector )
2524 hReSector = (
TH2F*) hRe->Clone(
"h2D_Re_IM_Sector");
2525 if(
kMix) hMiSector = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_Sector");
2529 hReSector->Add( hRe );
2530 if(
kMix) hMiSector ->Add( hMi );
2535 comment = Form(
"both clusters in Sector %d",isector);
2536 leg = Form(
"Sector %d",isector);
2537 hname = Form(
"Sector%d" ,isector);
2539 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2543 comment =
"both clusters in same Sector";
2544 leg =
"Same Sector";
2545 hname =
"SameSector";
2546 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSector, hMiSector );
2549 PlotGraphs(
"Sector" ,firstSector,lastSector);
2557 Int_t firstSide = 0;
2560 if ( kCalorimeter==
"DCAL" )
2569 for(iside = firstSide; iside <= lastSide; iside++)
2573 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2574 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2578 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2579 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2583 if( iside == firstSide )
2585 hReSide = (
TH2F*) hRe->Clone(
"h2D_Re_IM_Side");
2586 if(
kMix) hMiSide = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_Side");
2590 hReSide->Add( hRe );
2591 if(
kMix) hMiSide ->Add( hMi );
2596 comment = Form(
"both clusters in Side %d",iside);
2597 leg = Form(
"Side %d",iside);
2598 hname = Form(
"Side%d" ,iside);
2600 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2604 comment =
"both clusters in same Side";
2607 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSide, hMiSide );
Float_t kFirstTRDSM
Minimum number of cluster pairs in pi0 or eta window.
static Double_t FunctionCrystalBall(Double_t *x, Double_t *par)
TString kHistoList
Common starting name in histograms.
static Double_t FunctionTruncatedPolPi0(Double_t *x, Double_t *par)
void Draw(const char *filename, const char *title="", const char *others="ALL", const char *options="DEFAULT", const char *outFlg="ALL", UShort_t rebin=5, Float_t eff=0, const char *base="")
static void ScaleBinBySize(TH1D *h)
Scale histogram bins by its size.
Bool_t kSumw2
polinomyal type for residual background under the peak
static Double_t FunctionGaussPol0(Double_t *x, Double_t *par)
Int_t kPolN
use mixed event to constrain combinatorial background
static Double_t FunctionGaussPol1(Double_t *x, Double_t *par)
TString kFileName
Input production directory name where input file is located.
void ProjectAndFit(const Int_t nPt, TString comment, TString leg, TString hname, TArrayD xPtLimits, TArrayD xPt, TArrayD exPt, TH2F *hRe, TH2F *hMi)
TString kParticle
Calorimeter, EMCAL, DCAL (PHOS)
Float_t kNPairCut
Apply Root method Sumw2(), off for pT hard prod where already done before.
void Efficiency(Int_t nPt, TArrayD xPt, TArrayD exPt, TArrayD mesonPt, TArrayD emesonPt, TArrayD mesonPtBC, TArrayD emesonPtBC, TString hname)
Efficiency calculation called in ProjectAndFit()
TString kCalorimeter
Automatic plots format.
const TString calorimeter
static TGraphErrors * DivideGraphs(TGraphErrors *gNum, TGraphErrors *gDen)
static Double_t GetFractionError(Double_t num, Double_t den, Double_t numErr, Double_t denErr)
TString kHistoStartName
First Calo SM covered by a TRD SM, 6 in 2011 and 4 in 2012-13.
Int_t kRebin
Maximum value of chi2/ndf to define a fit as good (set lower than 1e6)
Bool_t GetFileAndEvents(TString dirName, TString listName)
Bool_t kTrunMixFunc
Particle searched: "Pi0", "Eta".
static Double_t FunctionGaussPol3(Double_t *x, Double_t *par)
static void GetRangeIntegralAndError(TH1D *h, Int_t binMin, Int_t binMax, Double_t &integral, Double_t &integralErr)
void PlotGraphs(TString opt, Int_t first, Int_t last)
void PrimarySpectra(Int_t nPt, TArrayD xPtLimits, TArrayD xPt, TArrayD exPt)
void InvMassFit(TString prodname="LHC18c3_NystromOn", TString filename="AnalysisResults", TString histoDir="Pi0IM_GammaTrackCorr_EMCAL", TString histoList="default", TString histoStart="", TString calorimeter="EMCAL", TString particle="Pi0", Float_t nPairMin=20, Bool_t sumw2=kTRUE, Int_t rebin=1, Int_t firstTRD=0, Bool_t mixed=kTRUE, Bool_t truncmix=kFALSE, Int_t pol=1, Bool_t drawAll=kTRUE, Bool_t drawMCAll=kFALSE, Bool_t drawPerSM=kTRUE, Bool_t drawPerSMGr=kFALSE, Bool_t drawPerSector=kFALSE, Bool_t drawPerSide=kFALSE, TString plotFormat="eps")
Double_t nEvt
Rebin invariant mass histograms default binning with this value.
static Double_t FunctionGaussPol2(Double_t *x, Double_t *par)
static Double_t FunctionTruncatedPolEta(Double_t *x, Double_t *par)
TString kProdName
TList name, usually each list is a different trigger.
Float_t kChi2NDFMax
Use a truncated function to get the mixed event scale.
TString kPlotFormat
Name of file with input histograms.