17 #if !defined(__CINT__) || defined(__MAKECINT__) 32 #include <TDirectoryFile.h> 33 #include <TGraphErrors.h> 69 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};
70 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};
78 fil =
new TFile(Form(
"%s/%s.root",kProdName.Data(),kFileName.Data()),
"read");
80 printf(
"Open Input File: %s/%s.root\n",kProdName.Data(),kFileName.Data());
82 if ( !
fil )
return kFALSE;
84 direc = (TDirectoryFile*)
fil->Get(dirName);
86 if ( !
direc && dirName !=
"" )
return kFALSE;
95 if ( !lis && listName !=
"")
return kFALSE;
98 nEvt = ((TH1F*)
fil->Get(
"hNEvents"))->GetBinContent(1);
100 nEvt = ((TH1F*) lis->FindObject(
"hNEvents"))->GetBinContent(1);
102 printf(
"nEvt = %2.3e\n",
nEvt);
118 if(kParticle ==
"Pi0")
130 printf(
"*** <<< Set Crystal Ball!!! >>> ***\n");
137 fitfun->SetParLimits(1, 0.105,0.185);
138 fitfun->SetParLimits(2, 0.001,0.040);
143 fitfun->SetParLimits(2, 0.105,0.185);
144 fitfun->SetParLimits(1, 0.001,0.040);
145 fitfun->SetParLimits(3, 0.001,0.040);
146 fitfun->SetParLimits(4, 0,10);
147 fitfun->SetParLimits(5, 1,1.e+6);
164 fitfun->SetParLimits(1, 0.20,0.80);
165 fitfun->SetParLimits(2, 0.001,0.06);
169 fitfun->SetLineColor(kRed);
172 fitfun->SetParName(0,
"A");
173 fitfun->SetParName(1,
"m_{0}");
174 fitfun->SetParName(2,
"#sigma");
180 fitfun->SetParName(5,
"a_{2}");
199 gStyle->SetOptTitle(1);
200 gStyle->SetTitleOffset(2,
"Y");
201 gStyle->SetOptStat(0);
202 gStyle->SetOptFit(000000);
206 if ( !gPrim || !gPrimAcc ) return ;
208 TArrayD effPt ; effPt .Set(nPt);
209 TArrayD effBCPt ; effBCPt .Set(nPt);
210 TArrayD effPtAcc ; effPtAcc .Set(nPt);
211 TArrayD effBCPtAcc ; effBCPtAcc .Set(nPt);
212 TArrayD effPtErr ; effPtErr .Set(nPt);
213 TArrayD effBCPtErr ; effBCPtErr .Set(nPt);
214 TArrayD effPtAccErr ; effPtAccErr .Set(nPt);
215 TArrayD effBCPtAccErr; effBCPtAccErr.Set(nPt);
217 for(
Int_t ibin = 0; ibin < nPt; ibin++ )
223 if ( gPrim->GetY()[ibin] > 0 && mesonPt[ibin] > 0 )
225 effPt [ibin] = 100 * mesonPt[ibin] / gPrim->GetY()[ibin];
226 effPtErr[ibin] = 100 *
GetFractionError( mesonPt[ibin], gPrim->GetY ()[ibin],
227 emesonPt[ibin], gPrim->GetEY()[ibin]);
231 else { effPt[ibin] = 0; effPtErr[ibin] = 0; }
233 if ( gPrimAcc->GetY()[ibin] > 0 && mesonPt[ibin] > 0 )
235 effPtAcc [ibin] = 100 * mesonPt[ibin] / gPrimAcc->GetY()[ibin];
236 effPtAccErr[ibin] = 100 *
GetFractionError( mesonPt[ibin], gPrimAcc->GetY ()[ibin],
237 emesonPt[ibin], gPrimAcc->GetEY()[ibin]);
240 else { effPtAcc[ibin] = 0; effPtAccErr[ibin] = 0; }
242 if (
kMix || hname.Contains(
"MCpT") )
247 if ( gPrim->GetY()[ibin] > 0 && mesonPtBC[ibin] > 0 )
249 effBCPt [ibin] = 100 * mesonPtBC[ibin] / gPrim->GetY()[ibin];
250 effBCPtErr[ibin] = 100 *
GetFractionError( mesonPtBC[ibin], gPrim->GetY ()[ibin],
251 emesonPtBC[ibin], gPrim->GetEY()[ibin]);
254 else { effBCPt[ibin] = 0; effBCPtErr[ibin] = 0; }
256 if ( gPrimAcc->GetY()[ibin] > 0 && mesonPtBC[ibin] > 0 )
258 effBCPtAcc [ibin] = 100 * mesonPtBC[ibin] / gPrimAcc->GetY()[ibin];
259 effBCPtAccErr[ibin] = 100 *
GetFractionError( mesonPtBC[ibin], gPrimAcc->GetY ()[ibin],
260 emesonPtBC[ibin], gPrimAcc->GetEY()[ibin]);
263 else { effBCPtAcc[ibin] = 0; effBCPtAccErr[ibin] = 0; }
270 gEff->SetName(Form(
"EfficiencyxAcceptance_%s",hname.Data()));
271 gEff->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID #times Acc} (%)");
272 gEff->GetHistogram()->SetTitleOffset(1.4,
"Y");
273 gEff->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
274 gEff->GetHistogram()->SetTitleOffset(1.2,
"X");
275 gEff->GetHistogram()->SetTitle(
"Reconstruction efficiency #times acceptance");
276 gEff->SetMarkerColor(1);
277 gEff->SetLineColor(1);
278 gEff->SetMarkerStyle(20);
281 TGraphErrors *gEffAcc =
new TGraphErrors(nPt,xPt.GetArray(),effPtAcc.GetArray(),exPt.GetArray(),effPtAccErr.GetArray());
282 gEffAcc->SetName(Form(
"Efficiency_%s",hname.Data()));
283 gEffAcc->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID} (%)");
284 gEffAcc->GetHistogram()->SetTitleOffset(1.5,
"Y");
285 gEffAcc->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
286 gEffAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
287 gEffAcc->SetMarkerColor(1);
288 gEffAcc->SetLineColor(1);
289 gEffAcc->SetMarkerStyle(20);
290 gEffAcc->GetHistogram()->SetTitle(
"Reconstruction efficiency");
298 gBCEff =
new TGraphErrors(nPt,xPt.GetArray(),effBCPt.GetArray(),exPt.GetArray(),effBCPtErr.GetArray());
299 gBCEff->SetName(Form(
"EfficiencyxAcceptance_BC_%s",hname.Data()));
300 gBCEff->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID #times Acc}");
301 gBCEff->GetHistogram()->SetTitleOffset(1.5,
"Y");
302 gBCEff->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
303 gBCEff->GetHistogram()->SetTitleOffset(1.2,
"X");
304 gBCEff->SetMarkerColor(4);
305 gBCEff->SetLineColor(4);
306 gBCEff->SetMarkerStyle(24);
309 gBCEffAcc =
new TGraphErrors(nPt,xPt.GetArray(),effBCPtAcc.GetArray(),exPt.GetArray(),effBCPtAccErr.GetArray());
310 gBCEffAcc->SetName(Form(
"Efficiency_BC_%s",hname.Data()));
311 gBCEffAcc->GetHistogram()->SetYTitle(
"#epsilon_{Reco #times PID}");
312 gBCEffAcc->GetHistogram()->SetTitleOffset(1.4,
"Y");
313 gBCEffAcc->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
314 gBCEffAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
315 gBCEffAcc->SetMarkerColor(4);
316 gBCEffAcc->SetLineColor(4);
317 gBCEffAcc->SetMarkerStyle(24);
323 TCanvas *cEff =
new TCanvas(Form(
"cEff_%s",hname.Data()),
324 Form(
"Efficiency Graphs for %s",hname.Data()),2*600,600);
341 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
342 legend->AddEntry(gEff ,
"From fit",
"P");
343 legend->AddEntry(gBCEff,
"From bin counting",
"P");
359 gBCEffAcc->Draw(
"P");
361 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
362 legend->AddEntry(gEffAcc ,
"From fit",
"P");
363 legend->AddEntry(gBCEffAcc,
"From bin counting",
"P");
367 cEff->Print(Form(
"IMfigures/%s_%s_Efficiency_%s_%s.%s",
368 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),hname.Data(),
369 kPlotFormat.Data()));
385 printf(
"ProjectAndFit() - Null inv mass 2D histo for %s, skip!\n",hname.Data());
389 gStyle->SetOptTitle(1);
390 gStyle->SetTitleOffset(2,
"Y");
391 gStyle->SetOptStat(0);
392 gStyle->SetOptFit(000000);
402 particleN =
" #pi^{0}";
411 TLegend * pLegendIM[nPt];
414 TH1D* hMixCorrected [nPt];
417 for(
Int_t ipt = 0; ipt< nPt; ipt++)
421 hMixCorrected[ipt] = 0 ;
426 TArrayD mesonPt ; mesonPt .Set(nPt);
427 TArrayD mesonPtBC ; mesonPtBC .Set(nPt);
429 TArrayD mesonWidth; mesonWidth.Set(nPt);
430 TArrayD emesonPt ; emesonPt .Set(nPt);
431 TArrayD emesonPtBC ; emesonPtBC .Set(nPt);
432 TArrayD emesonMass ; emesonMass .Set(nPt);
433 TArrayD emesonWidth; emesonWidth.Set(nPt);
437 Int_t col = TMath::Ceil(TMath::Sqrt(nPt));
444 TF1 * fitFunction = 0;
447 TCanvas * cIMModi =
new TCanvas(Form(
"c%s", hname.Data()), Form(
"%s", leg.Data()), 1200, 1200) ;
448 cIMModi->Divide(col, col);
450 for(
Int_t i = 0; i < nPt; i++)
459 hIM[i] = hRe->ProjectionY(Form(
"IM_%s_PtBin%d",hname.Data(),i),
460 hRe->GetXaxis()->FindBin(ptMin),
461 hRe->GetXaxis()->FindBin(ptMax));
462 hIM[i]->SetTitle(Form(
"%2.1f < #it{p}_{T, #gamma#gamma} < %2.1f GeV/#it{c}",ptMin,ptMax));
466 hIM[i]->Rebin(rebin2);
471 hIM[i]->SetXTitle(
"M_{#gamma,#gamma} (GeV/#it{c}^{2})");
473 hIM[i]->SetAxisRange(mmin,mmax,
"X");
474 hIM[i]->SetLineWidth(2);
475 hIM[i]->SetLineColor(4);
477 Double_t mStep = hIM[i]->GetBinWidth(1);
479 hSignal[i] = (
TH1D*) hIM[i]->Clone();
486 hMix[i] = (
TH1D*) hMi->ProjectionY(Form(
"MiMass_PtBin%d_%s",i,hname.Data()),
487 hMi->GetXaxis()->FindBin(ptMin),
488 hMi->GetXaxis()->FindBin(ptMax));
489 hMix[i]->SetLineColor(1);
490 hMix[i]->SetTitle(Form(
"%2.2f < #it{p}_{T, #gamma#gamma} < %2.2f GeV/#it{c}",ptMin,ptMax));
494 hMix[i]->Rebin(rebin2);
516 hRatio[i] = (
TH1D*)hIM[i]->Clone(Form(
"RatioRealMix_PtBin%d_%s",i,hname.Data()));
517 hRatio[i]->SetAxisRange(mmin,mmax,
"X");
518 hRatio[i]->Divide(hMix[i]);
525 hSignal[i] ->SetName(Form(
"Signal_PtBin%d_%s",i,hname.Data()));
527 if ( hMix[i]->GetEntries() >
kNPairCut*3 )
529 hSignal[i] ->SetLineColor(kViolet);
533 if ( kParticle ==
"Pi0" )
535 hRatio[i]->Fit(
"truncatedPolPi0",
"NQRL",
"",0.11,0.4);
543 hRatio[i]->SetAxisRange(mmin,mmax);
544 hRatio[i]->Fit(
"truncatedPolEta",
"NQRL",
"",0.35,0.95);
552 line3[i] =
new TF1(
"line3",
"[0]+[1]*x", mmin, mmax);
553 line3[i]->SetParameters(p0,p1,p2,p3);
556 hMixCorrected[i] = (
TH1D*) hMix[i]->Clone(Form(
"MixCorrected_PtBin%d_%s",i,hname.Data()));
557 for(
Int_t j = 0; j< hMix[i]->GetNbinsX(); j++)
559 Double_t x = hMix[i]->GetBinCenter(j);
560 Double_t correction = line3[i]->Eval(x);
561 Double_t corrected = hMix[i]->GetBinContent(j)*correction;
562 Double_t ecorrected = hMix[i]->GetBinError(j) *correction;
564 hMixCorrected[i]->SetBinContent(j, corrected);
565 hMixCorrected[i]->SetBinError (j,ecorrected);
569 hSignal[i] ->Add(hMixCorrected[i],-1);
573 Float_t scale = hRatio[i]->GetBinContent(hRatio[i]->FindBin(0.7));
574 hMix[i]->Scale(scale);
576 hSignal[i] ->Add(hMix[i],-1);
587 nMax= hSignal[i]->Integral(hIM[i]->FindBin(0.1),
588 hIM[i]->FindBin(0.2));
592 nMax = hSignal[i]->Integral(hIM[i]->FindBin(0.5),
593 hIM[i]->FindBin(0.7));
598 fitfun->SetParLimits(0,nMax/100,nMax*100);
602 if(
kPolN < 4 )
fitfun->SetParameters(nMax/5,0.135,20,0);
603 else fitfun->SetParameters(nMax/5,20,0.135,20,20,nMax/5);
606 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
608 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
613 if (
kPolN < 4 )
fitfun->SetParameters(nMax/5,0.54,40,0);
614 else fitfun->SetParameters(nMax/5,40,0.54,40,40,nMax/5);
616 hSignal[i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
624 printf(
"Skip bin %d: n max %2.3e < cut %2.3e\n",i, nMax,
kNPairCut);
631 mesonPt .SetAt(-1,i);
632 emesonPt .SetAt(-1,i);
633 mesonPtBC .SetAt(-1,i);
634 emesonPtBC .SetAt(-1,i);
635 mesonMass .SetAt(-1,i);
636 emesonMass .SetAt(-1,i);
637 mesonWidth.SetAt(-1,i);
638 emesonWidth.SetAt(-1,i);
640 fitFunction = (TF1*) hSignal[i]->GetFunction(
"fitfun");
650 Float_t chi2 = fitFunction->GetChisquare();
651 Int_t ndf = fitFunction->GetNDF();
652 if( ndf > 0 ) chi2ndf = chi2 / ndf;
656 Double_t A = fitFunction->GetParameter(0);
657 Double_t mean = fitFunction->GetParameter(1);
658 Double_t sigm = fitFunction->GetParameter(2);
665 Double_t eA = fitFunction->GetParError(0);
666 Double_t emean = fitFunction->GetParError(1);
667 Double_t esigm = fitFunction->GetParError(2);
673 pLegendIM[i] =
new TLegend(0.48,0.65,0.95,0.93);
674 pLegendIM[i]->SetTextSize(0.035);
675 pLegendIM[i]->SetFillColor(10);
676 pLegendIM[i]->SetBorderSize(1);
677 pLegendIM[i]->SetHeader(Form(
" %s - %s",particleN.Data(), leg.Data()));
678 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.1e#pm%2.1e ",A,eA),
"");
679 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %3.1f #pm %3.1f GeV/#it{c}^{2}",mean*1000,emean*1000),
"");
680 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %3.1f #pm %3.1f GeV/#it{c}^{2}",sigm*1000,esigm*1000),
"");
686 Double_t counts = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
688 TMath::Power(eA/A,2) +
689 TMath::Power(esigm/sigm,2);
690 eCounts = TMath::Sqrt(eCounts) * counts;
693 counts/=(
nEvt*(exPt.At(i)*2));
694 eCounts/=(
nEvt*(exPt.At(i)*2));
696 mesonPt.SetAt( counts,i);
697 emesonPt.SetAt(eCounts,i);
703 mesonMass .SetAt( mean*1000.,i);
704 emesonMass .SetAt(emean*1000.,i);
706 mesonWidth.SetAt( sigm*1000.,i);
707 emesonWidth.SetAt(esigm*1000.,i);
711 printf(
"Bin %d, Bad fit, Chi2 %f ndf %d, ratio %f!\n",
716 else printf(
"Bin %d, NO fit available!\n",i);
721 Double_t width = mesonWidth[i]/1000.;
722 Double_t mMinBin = mass - 2 * width;
723 Double_t mMaxBin = mass + 2 * width;
724 if(mass <= 0 || width <= 0)
728 mMinBin = 0.115; mMaxBin = 0.3 ;
732 mMinBin = 0.4; mMaxBin = 0.9 ;
740 if ( hSignal[i] && ( hMix[i] || hname.Contains(
"MCpT") ) )
746 GetRangeIntegralAndError(hSignal[i], hSignal[i]->FindBin(mMinBin), hSignal[i]->FindBin(mMaxBin), countsBin, eCountsBin );
748 countsBin/=(
nEvt*(exPt.At(i)*2));
749 eCountsBin/=(
nEvt*(exPt.At(i)*2));
751 mesonPtBC.SetAt( countsBin,i);
752 emesonPtBC.SetAt(eCountsBin,i);
760 if(
kMix && hMix[i] )
765 hIM[i]->SetMaximum(hIM[i]->GetMaximum()*1.2);
766 hIM[i]->SetMinimum(hSignal[i]->GetMinimum()*0.2);
769 pLegendIM[i]->AddEntry(hIM[i],
"Raw pairs" ,
"L");
771 if ( hMix[i]->GetEntries() >
kNPairCut*3 )
775 hMixCorrected[i]->Draw(
"same");
776 pLegendIM[i]->AddEntry(hMixCorrected[i],
"Mixed pairs" ,
"L");
780 hMix[i]->Draw(
"same");
781 pLegendIM[i]->AddEntry(hMix[i],
"Mixed pairs" ,
"L");
787 hSignal[i] ->
Draw(
"same");
788 pLegendIM[i]->AddEntry(hSignal[i],
"Signal pairs",
"L");
793 hSignal[i]->SetMaximum(hSignal[i]->GetMaximum()*1.2);
794 hSignal[i]->SetMinimum(hSignal[i]->GetMinimum()*0.8);
796 pLegendIM[i]->AddEntry(hSignal[i],
"Raw pairs",
"L");
797 hSignal[i] ->
Draw(
"HE");
801 if ( hname.Contains(
"All") )
803 TH1F* hMesonPairOrigin = (TH1F*)
fout->Get(Form(
"IM_MCpTReco_PtBin%d",i));
804 if ( hMesonPairOrigin )
806 hMesonPairOrigin->SetLineColor(8);
807 hMesonPairOrigin->Draw(
"same");
808 pLegendIM[i]->AddEntry(hMesonPairOrigin,Form(
"%s origin",particleN.Data()),
"L");
815 pLegendIM[i]->Draw();
825 cIMModi->Print(Form(
"IMfigures/%s_%s_Mgg_%s_%s.%s",
826 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),
827 hname.Data(),kPlotFormat.Data()));
834 TCanvas * cRat =
new TCanvas(Form(
"Ratio_%s\n",hname.Data()), Form(
"Ratio %s\n", leg.Data()), 1200, 1200) ;
835 cRat->Divide(col, col);
837 for(
Int_t i = 0; i < nPt; i++)
850 nMax = hRatio[i]->Integral(hRatio[i]->FindBin(0.005),
851 hRatio[i]->FindBin(0.20));
853 nMax = hRatio[i]->Integral(hRatio[i]->FindBin(0.4),
854 hRatio[i]->FindBin(0.6));
856 if ( nMax <= 0 )
continue;
860 hRatio[i]->SetMaximum(nMax/4);
861 hRatio[i]->SetMinimum(1e-6);
862 hRatio[i]->SetAxisRange(mmin,mmax,
"X");
866 hRatio[i]->SetYTitle(
"Real pairs / Mixed pairs");
867 hRatio[i]->SetTitleOffset(1.5,
"Y");
875 cRat->Print(Form(
"IMfigures/%s_%s_MggRatio_%s_%s.%s",
876 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),
877 hname.Data(),kPlotFormat.Data()));
888 gPt->SetName(Form(
"gPt_%s",hname.Data()));
889 gPt->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
890 gPt->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
891 gPt->GetHistogram()->SetYTitle(Form(
"dN_{%s}/d#it{p}_{T} (GeV/#it{c})^{-1} / N_{events} ",particleN.Data()));
893 gPt->GetHistogram()->SetTitleOffset(1.5,
"Y");
894 gPt->SetMarkerStyle(20);
896 gPt->SetMarkerColor(1);
900 TGraphErrors* gPtBC =
new TGraphErrors(nPt,xPt.GetArray(),mesonPtBC.GetArray(),exPt.GetArray(),emesonPtBC.GetArray());
901 gPtBC->SetName(Form(
"gPtBC_%s",hname.Data()));
902 gPtBC->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
903 gPtBC->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
904 gPtBC->GetHistogram()->SetYTitle(Form(
"d#it{N}_{%s}/d#it{p}_{T} (GeV/#it{c})^{-1} / #it{N}_{events} ",particleN.Data()));
906 gPtBC->GetHistogram()->SetTitleOffset(1.5,
"Y");
907 gPtBC->SetMarkerStyle(24);
909 gPtBC->SetMarkerColor(4);
913 TGraphErrors* gMass =
new TGraphErrors(nPt,xPt.GetArray(),mesonMass.GetArray(),exPt.GetArray(),emesonMass.GetArray());
914 gMass->SetName(Form(
"gMass_%s",hname.Data()));
915 gMass->GetHistogram()->SetTitle(Form(
"mass vs #it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
916 gMass->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
917 gMass->GetHistogram()->SetYTitle(Form(
"mass_{%s} (MeV/#it{c}^{2}) ",particleN.Data()));
919 gMass->GetHistogram()->SetTitleOffset(1.5,
"Y");
920 gMass->SetMarkerStyle(20);
922 gMass->SetMarkerColor(1);
924 TGraphErrors* gWidth=
new TGraphErrors(nPt,xPt.GetArray(),mesonWidth.GetArray(),exPt.GetArray(),emesonWidth.GetArray());
925 gWidth->SetName(Form(
"gWidth_%s",hname.Data()));
926 gWidth->GetHistogram()->SetTitle(Form(
"Width vs #it{p}_{T} of reconstructed %s, %s ",particleN.Data(), comment.Data()));
927 gWidth->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c}) ");
928 gWidth->GetHistogram()->SetYTitle(Form(
"#sigma_{%s} (MeV/#it{c}^{2}) ",particleN.Data()));
930 gWidth->GetHistogram()->SetTitleOffset(1.5,
"Y");
931 gWidth->SetMarkerStyle(20);
933 gWidth->SetMarkerColor(1);
937 TCanvas *cFitGraph =
new TCanvas(Form(
"cFitGraph_%s",hname.Data()),
938 Form(
"Fit Graphs for %s",hname.Data()),600,600);
939 cFitGraph->Divide(2, 2);
946 if ( kParticle==
"Pi0" )
948 gMass->SetMaximum(160);
949 gMass->SetMinimum(100);
953 gMass->SetMaximum(660);
954 gMass->SetMinimum(420);
965 gWidth->SetMaximum(16);
966 gWidth->SetMinimum(6);
970 gWidth->SetMaximum(60);
971 gWidth->SetMinimum(0);
983 Double_t maximum = gPt->GetHistogram()->GetMaximum();
984 Double_t minimum = gPt->GetHistogram()->GetMinimum();
1000 if(maximum < gPtBC->GetHistogram()->GetMaximum()) maximum = gPtBC->GetHistogram()->GetMaximum();
1001 if(minimum > gPtBC->GetHistogram()->GetMinimum()) minimum = gPtBC->GetHistogram()->GetMaximum();
1004 if(minimum < 0 ) minimum = 2.e-9 ;
1005 gPtBC->SetMaximum(maximum*2.);
1006 gPtBC->SetMinimum(minimum/2.);
1008 TLegend * legend =
new TLegend(0.5,0.7,0.9,0.9);
1009 legend->AddEntry(gPt ,
"From fit",
"P");
1010 legend->AddEntry(gPtBC,
"From bin counting",
"P");
1014 gPt->SetMaximum(maximum*2.);
1015 gPt->SetMinimum(minimum/2.);
1017 cFitGraph->Print(Form(
"IMfigures/%s_%s_MassWidthPtSpectra_%s_%s.%s",
1018 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),hname.Data(),
1019 kPlotFormat.Data()));
1025 if ( hMi ) hMi->Write();
1027 for(
Int_t ipt = 0; ipt < nPt; ipt++)
1029 if ( hIM[ipt] ) hIM[ipt]->Write();
1033 if (hMix [ipt] ) hMix [ipt]->Write();
1034 if (hMixCorrected[ipt] ) hMixCorrected[ipt]->Write();
1035 if (hRatio [ipt] ) hRatio [ipt]->Write();
1036 if (hSignal [ipt] ) hSignal [ipt]->Write();
1043 if (
kMix ) gPtBC->Write();
1046 Efficiency(nPt, xPt, exPt, mesonPt, emesonPt, mesonPtBC, emesonPtBC, hname);
1056 gStyle->SetOptTitle(1);
1057 gStyle->SetTitleOffset(2,
"Y");
1058 gStyle->SetOptStat(0);
1059 gStyle->SetOptFit(000000);
1061 const Int_t nCombi = last-first+1;
1062 Int_t nCombiActive = 0;
1069 if(opt.Contains(
"Group"))
1075 if(opt.Contains(
"Sector"))
1081 TLegend * legend =
new TLegend(xmin,ymin,xmax,ymax);
1082 legend->SetTextSize(0.05);
1084 TString particleN =
" #pi^{0}";
1085 if(kParticle==
"Eta") particleN =
" #eta";
1093 if(opt.Contains(
"SMGroup")) opt2 =
"SM";
1101 if ( !gSumMass ) return ;
1103 gSumPt ->SetMarkerStyle(20);
1104 gSumPt ->SetMarkerColor(1);
1105 gSumPt ->SetLineColor (1);
1107 gSumMass->SetMarkerStyle(20);
1108 gSumMass->SetMarkerColor(1);
1109 gSumMass->SetLineColor (1);
1111 gSumWidth->SetMarkerStyle(20);
1112 gSumWidth->SetMarkerColor(1);
1113 gSumWidth->SetLineColor (1);
1117 gSumPtBC ->SetMarkerStyle(20);
1118 gSumPtBC ->SetMarkerColor(1);
1119 gSumPtBC ->SetLineColor (1);
1122 legend->AddEntry(gSumPt,
"Sum",
"P");
1125 if ( opt !=
"SMGroup" )
1127 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1129 gSumPt->GetY ()[ibin] /= nCombi;
1130 gSumPt->GetEY()[ibin] /= nCombi;
1133 gSumPtBC->GetY ()[ibin] /= nCombi;
1134 gSumPtBC->GetEY()[ibin] /= nCombi;
1153 gSumTRDnotPt = (
TGraphErrors*)
fout->Get(Form(
"gPt_Same%sTRDNot" ,opt2.Data()));
1154 gSumTRDnotPtBC = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_Same%sTRDNot" ,opt2.Data()));
1155 gSumTRDnotMass = (
TGraphErrors*)
fout->Get(Form(
"gMass_Same%sTRDNot" ,opt2.Data()));
1156 gSumTRDnotWidth = (
TGraphErrors*)
fout->Get(Form(
"gWidth_Same%sTRDNot",opt2.Data()));
1157 printf(
"\t Sum Not TRD %p %p %p %p\n",gSumTRDnotPt,gSumTRDnotPtBC,gSumTRDnotMass,gSumTRDnotWidth);
1159 gSumTRDnotPt ->SetMarkerStyle(20);
1160 gSumTRDnotPt ->SetMarkerColor(kGray);
1161 gSumTRDnotPt ->SetLineColor (kGray);
1163 gSumTRDnotMass->SetMarkerStyle(20);
1164 gSumTRDnotMass->SetMarkerColor(kGray);
1165 gSumTRDnotMass->SetLineColor (kGray);
1167 gSumTRDnotWidth->SetMarkerStyle(20);
1168 gSumTRDnotWidth->SetMarkerColor(kGray);
1169 gSumTRDnotWidth->SetLineColor (kGray);
1173 gSumTRDnotPtBC ->SetMarkerStyle(20);
1174 gSumTRDnotPtBC ->SetMarkerColor(kGray);
1175 gSumTRDnotPtBC ->SetLineColor (kGray);
1178 legend->AddEntry(gSumTRDnotPt,
"w/o TRD",
"P");
1180 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1191 gSumTRDyesPt = (
TGraphErrors*)
fout->Get(Form(
"gPt_Same%sTRDYes" ,opt2.Data()));
1192 gSumTRDyesPtBC = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_Same%sTRDYes" ,opt2.Data()));
1193 gSumTRDyesMass = (
TGraphErrors*)
fout->Get(Form(
"gMass_Same%sTRDYes" ,opt2.Data()));
1194 gSumTRDyesWidth = (
TGraphErrors*)
fout->Get(Form(
"gWidth_Same%sTRDYes",opt2.Data()));
1195 printf(
"\t Sum Yes TRD %p %p %p %p\n",gSumTRDyesPt,gSumTRDyesPtBC,gSumTRDyesMass,gSumTRDyesWidth);
1197 gSumTRDyesPt ->SetMarkerStyle(20);
1198 gSumTRDyesPt ->SetMarkerColor(kCyan);
1199 gSumTRDyesPt ->SetLineColor (kCyan);
1201 gSumTRDyesMass->SetMarkerStyle(20);
1202 gSumTRDyesMass->SetMarkerColor(kCyan);
1203 gSumTRDyesMass->SetLineColor (kCyan);
1205 gSumTRDyesWidth->SetMarkerStyle(20);
1206 gSumTRDyesWidth->SetMarkerColor(kCyan);
1207 gSumTRDyesWidth->SetLineColor (kCyan);
1211 gSumTRDyesPtBC ->SetMarkerStyle(20);
1212 gSumTRDyesPtBC ->SetMarkerColor(kCyan);
1213 gSumTRDyesPtBC ->SetLineColor (kCyan);
1216 legend->AddEntry(gSumTRDyesPt,
"w/ TRD",
"P");
1219 for (
Int_t ibin = 0; ibin < gSumPt->GetN(); ibin++)
1221 gSumTRDyesPt->GetY ()[ibin] /= nCovered;
1222 gSumTRDyesPt->GetEY()[ibin] /= nCovered;
1225 gSumTRDyesPtBC->GetY ()[ibin] /= nCovered;
1226 gSumTRDyesPtBC->GetEY()[ibin] /= nCovered;
1240 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1242 gPt [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gPt_%s%d" ,opt.Data(),icomb+first));
1243 gPtBC [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gPtBC_%s%d" ,opt.Data(),icomb+first));
1244 gMass [icomb] = (
TGraphErrors*)
fout->Get(Form(
"gMass_%s%d" ,opt.Data(),icomb+first));
1245 gWidth[icomb] = (
TGraphErrors*)
fout->Get(Form(
"gWidth_%s%d",opt.Data(),icomb+first));
1248 if ( !gPt[icomb] ) continue ;
1264 gPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1265 gWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1266 gMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1273 gPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1276 if ( !opt.Contains(
"Group") )
1277 legend->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb),
"P");
1280 if(icomb == 0) legend->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1281 if(icomb == 1) legend->AddEntry(gPt[icomb],
"SM1+2",
"P");
1282 if(icomb == 2) legend->AddEntry(gPt[icomb],
"SM3+7",
"P");
1286 if ( !gMass[0] ) return ;
1291 TCanvas *cFitGraph =
new TCanvas(Form(
"cFitGraph_%sCombinations",opt.Data()),
1292 Form(
"Fit Graphs for %s combinations",opt.Data()),1000,1000);
1293 cFitGraph->Divide(2, 2);
1300 if ( kParticle ==
"Pi0" )
1302 gMass[0]->SetMaximum(141);
1303 gMass[0]->SetMinimum(116);
1307 gMass[0]->SetMaximum(600);
1308 gMass[0]->SetMinimum(450);
1310 gMass[0]->Draw(
"AP");
1311 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1313 if ( gMass[icomb] ) gMass[icomb]->Draw(
"P");
1316 gSumMass->Draw(
"P");
1319 gSumTRDnotMass->Draw(
"P");
1320 gSumTRDyesMass->Draw(
"P");
1329 if ( kParticle ==
"Pi0" )
1331 gWidth[0]->SetMaximum(17);
1332 gWidth[0]->SetMinimum(7);
1333 if(opt==
"Side") gWidth[0]->SetMinimum(2);
1337 gWidth[0]->SetMaximum(50);
1338 gWidth[0]->SetMinimum(10);
1341 gWidth[0]->Draw(
"AP");
1342 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1344 if ( gWidth[icomb] ) gWidth[icomb]->Draw(
"P");
1347 gSumWidth->Draw(
"P");
1350 gSumTRDnotWidth->Draw(
"P");
1351 gSumTRDyesWidth->Draw(
"P");
1362 gPt[0]->SetMaximum(1);
1363 gPt[0]->SetMinimum(1e-8);
1366 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1368 if ( gPt[icomb] ) gPt[icomb]->Draw(
"P");
1374 gSumTRDnotPt->Draw(
"P");
1375 gSumTRDyesPt->Draw(
"P");
1388 gPtBC[0]->SetMaximum(1);
1389 gPtBC[0]->SetMinimum(1e-8);
1391 gPtBC[0]->Draw(
"AP");
1393 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1395 if ( gPtBC[icomb] ) gPtBC[icomb]->Draw(
"P");
1398 gSumPtBC->Draw(
"P");
1401 gSumTRDnotPtBC->Draw(
"P");
1402 gSumTRDyesPtBC->Draw(
"P");
1407 cFitGraph->Print(Form(
"IMfigures/%s_%s_MassWidthPtSpectra_%s_%sCombinations.%s",
1408 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),opt.Data(),
1409 kPlotFormat.Data()));
1418 TLegend * legendR =
new TLegend(xmin,ymin,xmax,ymax);
1419 legendR->SetTextSize(0.05);
1421 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1427 gRatPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumPtBC );
1429 gRatMass [icomb] =
DivideGraphs(gMass [icomb],gSumMass );
1431 gRatWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumWidth);
1433 if(!gRatMass[icomb])
continue;
1447 gRatPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1448 gRatWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1449 gRatMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1451 gRatPt [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1452 gRatWidth[icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1453 gRatMass [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1455 gRatPt [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1456 gRatWidth[icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1457 gRatMass [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1459 gRatPt [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1460 gRatWidth[icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1461 gRatMass [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1468 gRatPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1469 gRatPtBC [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1470 gRatPtBC [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1471 gRatPtBC [icomb]->GetHistogram()->SetTitleOffset(1.5,
"Y");
1474 if ( !opt.Contains(
"Group") )
1475 legendR->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb),
"P");
1478 if(icomb == 0) legendR->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1479 if(icomb == 1) legendR->AddEntry(gPt[icomb],
"SM1+2",
"P");
1480 if(icomb == 2) legendR->AddEntry(gPt[icomb],
"SM3+7",
"P");
1487 TCanvas *cFitGraphRatio =
new TCanvas(Form(
"cFitGraphSumRatio_%sCombinations",opt.Data()),
1488 Form(
"Fit Graphs ratio to sum for %s combinations",opt.Data()),1000,1000);
1489 cFitGraphRatio->Divide(2, 2);
1492 cFitGraphRatio->cd(1);
1496 gRatMass[0]->SetMaximum(1.03);
1497 gRatMass[0]->SetMinimum(0.97);
1499 gRatMass[0]->Draw(
"AP");
1500 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1502 if ( gRatMass[icomb] ) gRatMass[icomb]->Draw(
"P");
1507 cFitGraphRatio->cd(2);
1511 gRatWidth[0]->SetMaximum(1.5);
1512 gRatWidth[0]->SetMinimum(0.7);
1514 gRatWidth[0]->Draw(
"AP");
1515 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1517 if ( gRatWidth[icomb] ) gRatWidth[icomb]->Draw(
"P");
1522 cFitGraphRatio->cd(3);
1528 gRatPt[0]->SetMaximum(2);
1529 gRatPt[0]->SetMinimum(0);
1531 gRatPt[0]->Draw(
"AP");
1532 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1534 if ( gRatPt[icomb] ) gRatPt[icomb]->Draw(
"P");
1541 cFitGraphRatio->cd(4);
1547 gRatPtBC[0]->SetMaximum(2);
1548 gRatPtBC[0]->SetMinimum(0);
1550 gRatPtBC[0]->Draw(
"AP");
1551 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1553 if ( gRatPtBC[icomb] ) gRatPtBC[icomb]->Draw(
"P");
1559 cFitGraphRatio->Print(Form(
"IMfigures/%s_%s_MassWidthPtSpectra_%s_%sCombinations_RatioToSum.%s",
1560 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),opt.Data(),
1561 kPlotFormat.Data()));
1575 TLegend * legendR =
new TLegend(xmin,ymin,xmax,ymax);
1576 legendR->SetTextSize(0.05);
1578 for(
Int_t icomb = 0; icomb < nCombi; icomb ++)
1586 gRatTRDPt [icomb] =
DivideGraphs(gPt [icomb],gSumTRDnotPt );
1587 gRatTRDPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumTRDnotPtBC );
1588 gRatTRDMass [icomb] =
DivideGraphs(gMass [icomb],gSumTRDnotMass );
1589 gRatTRDWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumTRDnotWidth);
1593 gRatTRDPt [icomb] =
DivideGraphs(gPt [icomb],gSumTRDyesPt );
1594 gRatTRDPtBC [icomb] =
DivideGraphs(gPtBC [icomb],gSumTRDyesPtBC );
1595 gRatTRDMass [icomb] =
DivideGraphs(gMass [icomb],gSumTRDyesMass );
1596 gRatTRDWidth[icomb] =
DivideGraphs(gWidth[icomb],gSumTRDyesWidth);
1600 if(!gRatTRDMass[icomb])
continue;
1614 gRatTRDPt [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s from fit, %s " ,particleN.Data(), opt.Data()));
1615 gRatTRDWidth[icomb]->GetHistogram()->SetTitle(Form(
"%s mass #sigma vs #it{p}_{T}, %s ",particleN.Data(), opt.Data()));
1616 gRatTRDMass [icomb]->GetHistogram()->SetTitle(Form(
"%s mass #mu vs #it{p}_{T}, %s " ,particleN.Data(), opt.Data()));
1618 gRatTRDPt [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1619 gRatTRDWidth[icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1620 gRatTRDMass [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1622 gRatTRDPt [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1623 gRatTRDWidth[icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1624 gRatTRDMass [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1626 gRatTRDPt [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1627 gRatTRDWidth[icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1628 gRatTRDMass [icomb]->GetHistogram()->SetTitleOffset(1.4,
"Y");
1635 gRatTRDPtBC [icomb]->GetHistogram()->SetTitle(Form(
"#it{p}_{T} of %s bin counted, %s ",particleN.Data(), opt.Data()));
1636 gRatTRDPtBC [icomb]->GetHistogram()->SetYTitle(
"Ratio to sum");
1637 gRatTRDPtBC [icomb]->GetHistogram()->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1638 gRatTRDPtBC [icomb]->GetHistogram()->SetTitleOffset(1.5,
"Y");
1641 if ( !opt.Contains(
"Group") )
1642 legendR->AddEntry(gPt[icomb],Form(
"%s %d",opt.Data(),icomb),
"P");
1645 if(icomb == 0) legendR->AddEntry(gPt[icomb],
"SM0+4+5+6+7+8+9",
"P");
1646 if(icomb == 1) legendR->AddEntry(gPt[icomb],
"SM1+2",
"P");
1647 if(icomb == 2) legendR->AddEntry(gPt[icomb],
"SM3+7",
"P");
1654 TCanvas *cFitGraphRatioTRD =
new TCanvas(Form(
"cFitGraphSumRatioTRD_%sCombinations",opt.Data()),
1655 Form(
"Fit Graphs ratio to sum for %s combinations for TRD cases",opt.Data()),1000,1000);
1656 cFitGraphRatioTRD->Divide(2, 2);
1659 cFitGraphRatioTRD->cd(1);
1663 gRatTRDMass[0]->SetMaximum(1.03);
1664 gRatTRDMass[0]->SetMinimum(0.97);
1666 gRatTRDMass[0]->Draw(
"AP");
1667 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1669 if ( gRatTRDMass[icomb] ) gRatTRDMass[icomb]->Draw(
"P");
1674 cFitGraphRatioTRD->cd(2);
1678 gRatTRDWidth[0]->SetMaximum(1.5);
1679 gRatTRDWidth[0]->SetMinimum(0.7);
1681 gRatTRDWidth[0]->Draw(
"AP");
1682 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1684 if ( gRatTRDWidth[icomb] ) gRatTRDWidth[icomb]->Draw(
"P");
1689 cFitGraphRatioTRD->cd(3);
1695 gRatTRDPt[0]->SetMaximum(2);
1696 gRatTRDPt[0]->SetMinimum(0);
1698 gRatTRDPt[0]->Draw(
"AP");
1699 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1701 if ( gRatTRDPt[icomb] ) gRatTRDPt[icomb]->Draw(
"P");
1708 cFitGraphRatioTRD->cd(4);
1714 gRatTRDPtBC[0]->SetMaximum(2);
1715 gRatTRDPtBC[0]->SetMinimum(0);
1717 gRatTRDPtBC[0]->Draw(
"AP");
1718 for(
Int_t icomb = 1; icomb < nCombi; icomb ++)
1720 if ( gRatTRDPtBC[icomb] ) gRatTRDPtBC[icomb]->Draw(
"P");
1726 cFitGraphRatioTRD->Print(Form(
"IMfigures/%s_%s_MassWidthPtSpectra_%s_%sCombinations_RatioToSumTRD.%s",
1727 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),opt.Data(),
1728 kPlotFormat.Data()));
1731 TLegend * legendSums =
new TLegend(xmin,ymin,xmax,ymax);
1737 TCanvas *cFitGraphSums =
new TCanvas(Form(
"cFitGraph_%sSums",opt.Data()),
1738 Form(
"Fit Graphs for %s Sums",opt.Data()),1000,1000);
1739 cFitGraphSums->Divide(2, 2);
1742 cFitGraphSums->cd(1);
1746 if ( kParticle ==
"Pi0" )
1748 gSumMass->SetMaximum(135);
1749 gSumMass->SetMinimum(125);
1753 gSumMass->SetMaximum(560);
1754 gSumMass->SetMinimum(520);
1757 gSumMass->Draw(
"AP");
1759 gSumTRDnotMass->Draw(
"P");
1760 gSumTRDyesMass->Draw(
"P");
1762 legendSums->AddEntry(gSumMass,
"Sum",
"P");
1763 legendSums->AddEntry(gSumTRDnotMass,
"w/o TRD",
"P");
1764 legendSums->AddEntry(gSumTRDyesMass,
"w/ TRD",
"P");
1768 cFitGraphSums->cd(2);
1772 if ( kParticle ==
"Pi0" )
1774 gSumWidth->SetMaximum(17);
1775 gSumWidth->SetMinimum(7);
1776 if(opt==
"Side") gSumWidth->SetMinimum(2);
1780 gSumWidth->SetMaximum(50);
1781 gSumWidth->SetMinimum(10);
1784 gSumWidth->Draw(
"AP");
1785 gSumTRDnotWidth->Draw(
"P");
1786 gSumTRDyesWidth->Draw(
"P");
1790 cFitGraphSums->cd(3);
1796 gSumPt->SetMaximum(1);
1797 gSumPt->SetMinimum(1e-8);
1800 gSumTRDnotPt->Draw(
"P");
1801 gSumTRDyesPt->Draw(
"P");
1807 cFitGraphSums->cd(4);
1813 gSumPtBC->SetMaximum(1);
1814 gSumPtBC->SetMinimum(1e-8);
1816 gSumPtBC->Draw(
"AP");
1817 gSumTRDnotPtBC->Draw(
"P");
1818 gSumTRDyesPtBC->Draw(
"P");
1823 cFitGraphSums->Print(Form(
"IMfigures/%s_%s_MassWidthPtSpectra_%s_%sSums.%s",
1824 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),opt.Data(),
1825 kPlotFormat.Data()));
1836 gStyle->SetOptTitle(1);
1837 gStyle->SetTitleOffset(2,
"Y");
1838 gStyle->SetOptStat(0);
1839 gStyle->SetOptFit(000000);
1841 TArrayD primMesonPt ; primMesonPt .Set(nPt);
1842 TArrayD eprimMesonPt ; eprimMesonPt .Set(nPt);
1843 TArrayD primMesonPtAcc; primMesonPtAcc.Set(nPt);
1844 TArrayD eprimMesonPtAcc; eprimMesonPtAcc.Set(nPt);
1845 TArrayD primMesonAcc ; primMesonAcc.Set(nPt);
1846 TArrayD eprimMesonAcc ; eprimMesonAcc.Set(nPt);
1848 TH2D* h2PrimMesonPtY = (
TH2D*)
fil->Get( Form(
"%s_hPrim%sRapidity" ,kHistoStartName.Data(), kParticle.Data() ) );
1849 TH2D* h2PrimMesonPtYAcc = (
TH2D*)
fil->Get( Form(
"%s_hPrim%sAccRapidity",kHistoStartName.Data(), kParticle.Data() ) );
1851 if ( !h2PrimMesonPtY ) return ;
1855 h2PrimMesonPtY ->Sumw2();
1856 h2PrimMesonPtYAcc->Sumw2();
1866 h2PrimMesonPtY ->Scale(1./
nEvt);
1867 h2PrimMesonPtYAcc->Scale(1./
nEvt);
1870 h2PrimMesonPtY ->Write();
1871 h2PrimMesonPtYAcc->Write();
1873 TH1D* hY = h2PrimMesonPtY->ProjectionY(
"Rapidity",-1,-1);
1874 Int_t binYmin = hY->FindBin(-0.65);
1875 Int_t binYmax = hY->FindBin(+0.65);
1877 TH1D* hPrimMesonPt = (
TH1D*) h2PrimMesonPtY->ProjectionX(
"PrimaryPt" ,binYmin ,binYmax );
1878 hPrimMesonPt->Write();
1880 TH1D* hYAcc = h2PrimMesonPtYAcc->ProjectionY(
"RapidityAcc",-1,-1);
1881 binYmin = hYAcc->FindBin(-0.65);
1882 binYmax = hYAcc->FindBin(+0.65);
1884 TH1D* hPrimMesonPtAcc = (
TH1D*) h2PrimMesonPtYAcc->ProjectionX(
"PrimaryPtAccepted" ,binYmin ,binYmax );
1885 hPrimMesonPtAcc->Write();
1899 for(
Int_t ibin = 0; ibin < nPt; ibin++ )
1901 ptMin = xPtLimits[ibin];
1902 ptMax = xPtLimits[ibin+1];
1904 binMin = hPrimMesonPt->FindBin(ptMin);
1905 binMax = hPrimMesonPt->FindBin(ptMax)-1;
1911 primMesonPt [ibin] = integralA;
1912 eprimMesonPt [ibin] = integralAErr;
1913 primMesonPtAcc[ibin] = integralB;
1914 eprimMesonPtAcc[ibin] = integralBErr;
1916 if ( integralA > 0 && integralB > 0 )
1918 primMesonAcc[ibin] = integralB / integralA ;
1919 eprimMesonAcc[ibin] =
GetFractionError(integralB,integralA,integralBErr,integralAErr);
1923 primMesonAcc[ibin] = 0;
1924 eprimMesonAcc[ibin] = 0;
1930 primMesonPt [ibin]/=((exPt[ibin]*4));
1931 primMesonPtAcc[ibin]/=((exPt[ibin]*4));
1950 TGraphErrors * gPrim =
new TGraphErrors(nPt,xPt.GetArray(),primMesonPt.GetArray(),exPt.GetArray(),eprimMesonPt.GetArray());
1951 gPrim->SetName(
"Primary");
1952 gPrim->GetHistogram()->SetYTitle(
"d #it{N}/d #it{p}_{T}");
1953 gPrim->GetHistogram()->SetTitleOffset(1.4,
"Y");
1954 gPrim->GetHistogram()->SetXTitle(
"#it{p}_{T,gen} (GeV/#it{c})");
1955 gPrim->GetHistogram()->SetTitleOffset(1.2,
"X");
1956 gPrim->GetHistogram()->SetTitle(
"#it{p}_{T} spectra for |#it{Y}| < 0.65");
1959 TGraphErrors * gPrimAcc =
new TGraphErrors(nPt,xPt.GetArray(),primMesonPtAcc.GetArray(),exPt.GetArray(),eprimMesonPtAcc.GetArray());
1960 gPrimAcc->SetName(
"PrimaryInAcceptance");
1961 gPrimAcc->GetHistogram()->SetYTitle(
"d#it{N}/d #it{p}_{T}");
1962 gPrimAcc->GetHistogram()->SetTitle(Form(
"|#it{Y}| < 0.65 in %s",kCalorimeter.Data()));
1966 TH1D* hAcc = (
TH1D*) hPrimMesonPtAcc->Clone(
"hAcceptance");
1967 hAcc->Divide(hPrimMesonPt);
1969 TGraphErrors * gAcc =
new TGraphErrors(nPt,xPt.GetArray(),primMesonAcc.GetArray(),exPt.GetArray(),eprimMesonAcc.GetArray());
1970 gAcc->SetName(
"Acceptance");
1971 gAcc->GetHistogram()->SetYTitle(
"Acceptance");
1972 gAcc->GetHistogram()->SetTitleOffset(1.4,
"Y");
1973 gAcc->GetHistogram()->SetXTitle(
"#it{p}_{T,gen} (GeV/#it{c})");
1974 gAcc->GetHistogram()->SetTitleOffset(1.2,
"X");
1975 gAcc->GetHistogram()->SetTitle(Form(
"Acceptance for |#it{Y}| < 0.65 in %s",kCalorimeter.Data()));
1980 TCanvas *cAcc =
new TCanvas(Form(
"cAcceptance"),
1981 Form(
"Primary generated p_{T} spectra and acceptance"),2*600,600);
1989 Double_t maximum = gPrim->GetHistogram()->GetMaximum();
1990 Double_t minimum = gPrim->GetHistogram()->GetMinimum();
1992 if ( gPrimAcc->GetMaximum() > maximum ) maximum = gPrimAcc->GetMaximum() ;
1993 if ( gPrimAcc->GetMinimum() > minimum ) minimum = gPrimAcc->GetMinimum() ;
1995 gPrim->SetMaximum(maximum*10);
1996 gPrim->SetMinimum(minimum/10);
1999 gPrimAcc->Draw(
"P");
2001 gPrim ->SetMarkerColor(1);
2002 gPrimAcc->SetMarkerColor(4);
2003 gPrim ->SetLineColor(1);
2004 gPrimAcc->SetLineColor(4);
2005 gPrim ->SetMarkerStyle(24);
2006 gPrimAcc->SetMarkerStyle(24);
2008 hPrimMesonPt ->Draw(
"same");
2009 hPrimMesonPtAcc->Draw(
"same");
2011 hPrimMesonPt ->Draw(
"Hsame");
2012 hPrimMesonPtAcc->Draw(
"Hsame");
2013 hPrimMesonPt ->SetLineColor(1);
2014 hPrimMesonPtAcc->SetLineColor(4);
2016 TLegend * legendS =
new TLegend(0.4,0.7,0.9,0.9);
2017 legendS->AddEntry(gPrim,
"|Y| < 0.65",
"P");
2018 legendS->AddEntry(gPrimAcc,Form(
"Both in %s",kCalorimeter.Data()),
"P");
2020 legendS->AddEntry(hPrimMesonPt,
"Histo |Y| < 0.65",
"L");
2021 legendS->AddEntry(hPrimMesonPtAcc,Form(
"Histo Both in %s",kCalorimeter.Data()),
"L");
2030 gAcc->SetMaximum(gAcc->GetHistogram()->GetMaximum()*1.3);
2031 gAcc->SetMinimum(0);
2034 gAcc->SetMarkerColor(1);
2035 gAcc->SetMarkerStyle(24);
2037 hAcc->Draw(
"Hsame");
2038 hAcc->SetLineColor(4);
2040 TLegend * legendA =
new TLegend(0.7,0.75,0.9,0.9);
2041 legendA->AddEntry(gAcc,
"Graph",
"P");
2042 legendA->AddEntry(hAcc,
"Histo",
"L");
2046 cAcc->Print(Form(
"IMfigures/%s_%s_PrimarySpectraAcceptance_%s.%s",
2047 kProdName.Data(),kCalorimeter.Data(),kParticle.Data(),
2048 kPlotFormat.Data()));
2080 TString histoDir =
"Pi0IM_GammaTrackCorr_EMCAL",
2081 TString histoList =
"default",
2090 Bool_t truncmix = kFALSE,
2093 Bool_t drawMCAll = kFALSE,
2094 Bool_t drawPerSM = kTRUE,
2095 Bool_t drawPerSMGr = kFALSE,
2096 Bool_t drawPerSector= kFALSE,
2097 Bool_t drawPerSide = kFALSE,
2108 kParticle = particle;
2109 kProdName = prodname;
2111 kPlotFormat = plotFormat;
2118 kHistoStartName = histoStart;
2121 kHistoStartName =
"AnaPi0_Calo0";
2122 if(kCalorimeter==
"DCAL")
2123 kHistoStartName =
"AnaPi0_Calo1";
2126 if(drawPerSMGr) drawPerSM = kTRUE;
2135 kProdName.ReplaceAll(
"/",
"_");
2138 if( kFileName !=
"AnalysisResults" && !kFileName.Contains(
"Scale") )
2139 kProdName+=kFileName;
2141 printf(
"Settings: prodname <%s>, filename <%s>, histoDir <%s>, histoList <%s>,\n" 2142 " \t histo start name <%s>, particle <%s>, calorimeter <%s>, \n" 2143 " \t mix %d, kPolN %d, sumw2 %d, n pairs cut %2.2e\n",
2144 kProdName.Data(), kFileName.Data(),histoDir.Data(),histoList.Data(), kHistoStartName.Data(),
2149 printf(
"Could not recover file <%p> or dir <%p> or list <%p>\n",
fil,
direc,lis);
2160 fout =
new TFile(Form(
"IMfigures/%s_%s_MassWidthPtHistograms_%s.root",
2161 kProdName.Data(),kCalorimeter.Data(),kParticle.Data() ),
"recreate");
2162 printf(
"Open Output File: IMfigures/%s_%s_MassWidthPtHistograms_%s.root\n",
2163 kProdName.Data(),kCalorimeter.Data(),kParticle.Data());
2169 const Int_t nPtEta = 13;
2170 Double_t xPtLimitsEta[] = {2.,3.,4.,5.,6.,8.,10.,14.,18.,24.,28.,34.,40.,50.};
2175 const Int_t nPtPi0 = 23;
2176 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.};
2179 if(kParticle ==
"Eta") nPt = nPtEta;
2181 TArrayD xPtLimits; xPtLimits.Set(nPt+1);
2183 TArrayD exPt ; exPt .Set(nPt);
2185 for(
Int_t i = 0; i < nPt; i++)
2187 if(kParticle ==
"Pi0")
2189 xPtLimits.SetAt(xPtLimitsPi0[i],i);
2190 exPt .SetAt((xPtLimitsPi0[i+1]-xPtLimitsPi0[i])/2,i);
2191 xPt .SetAt(xPtLimitsPi0[i]+exPt[i],i);
2195 xPtLimits.SetAt(xPtLimitsEta[i],i);
2196 exPt .SetAt((xPtLimitsEta[i+1]-xPtLimitsEta[i])/2,i);
2197 xPt .SetAt(xPtLimitsEta[i]+exPt[i],i);
2203 if ( kParticle ==
"Pi0" ) xPtLimits.SetAt(xPtLimitsPi0[nPt],nPt);
2204 else xPtLimits.SetAt(xPtLimitsEta[nPt],nPt);
2236 hRe = (
TH2F *)
fil->Get( Form(
"%s_hMC%sMassPtRec", kHistoStartName.Data(), kParticle.Data()) );
2237 comment =
"MC pT reconstructed";
2238 leg =
"MC pT reconstructed";
2239 hname =
"MCpTReco" ;
2240 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, 0x0 );
2244 hRe = (
TH2F *)
fil->Get( Form(
"%s_hMC%sMassPtTrue", kHistoStartName.Data(), kParticle.Data()) );
2245 comment =
"MC pT generated";
2246 leg =
"MC pT generated";
2247 hname =
"MCpTGener" ;
2248 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, 0x0 );
2259 hRe = (
TH2F *)
fil->Get(Form(
"%s_hRe_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2260 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMi_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2264 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hRe_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2265 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMi_cen0_pidbit0_asy0_dist1", kHistoStartName.Data()));
2268 printf(
"histo Re %p - Mix %p All SM\n",hRe,hMi);
2270 if( !hMi )
kMix = kFALSE;
2275 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2292 if ( kCalorimeter==
"DCAL" )
2302 TH2F * hReSMGroups[3] ;
2303 TH2F * hMiSMGroups[3] ;
2306 TH2F * hReSMTRDYes = 0;
2307 TH2F * hMiSMTRDYes = 0;
2308 TH2F * hReSMTRDNot = 0;
2309 TH2F * hMiSMTRDNot = 0;
2311 for(
Int_t imodgroup = 0; imodgroup<=2; imodgroup++)
2313 hReSMGroups[imodgroup] = hMiSMGroups[imodgroup] = 0x0;
2316 for(imod = firstMod; imod<=lastMod; imod++)
2320 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReMod_%d", kHistoStartName.Data(), imod));
2321 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiMod_%d", kHistoStartName.Data(), imod));
2325 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReMod_%d", kHistoStartName.Data(), imod));
2326 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiMod_%d", kHistoStartName.Data(), imod));
2331 comment = Form(
"both clusters in SM %d",imod);
2332 leg = Form(
"SM %d",imod);
2333 hname = Form(
"SM%d" ,imod);
2335 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2338 if( imod == firstMod )
2340 hReSM = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM");
2341 if(
kMix) hMiSM = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM");
2346 if(
kMix) hMiSM ->Add( hMi );
2356 hReSMTRDYes = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM_TRD_Yes");
2357 if(
kMix) hMiSMTRDYes = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM_TRD_Yes");
2361 hReSMTRDYes->Add( hRe );
2362 if(
kMix) hMiSMTRDYes ->Add( hMi );
2372 hReSMGroups[0] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM045689");
2374 hMiSMGroups[0] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM045689");
2376 else if ( imod == 1 )
2378 hReSMGroups[1] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM12");
2379 if(
kMix) hMiSMGroups[1] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM12");
2381 else if ( imod == 3 )
2383 hReSMGroups[2] = (
TH2F*) hRe->Clone(
"h2D_Re_IM_SM37");
2384 if(
kMix) hMiSMGroups[2] = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_SM37");
2386 else if ( imod == 2 )
2388 hReSMGroups[1]->Add(hRe);
2389 if(
kMix) hMiSMGroups[1]->Add(hMi);
2391 else if ( imod == 7 )
2393 hReSMGroups[2]->Add(hRe);
2394 if(
kMix) hMiSMGroups[2]->Add(hMi);
2396 else if ( imod < 10 )
2398 hReSMGroups[0]->Add(hRe);
2399 if(
kMix) hMiSMGroups[0]->Add(hMi);
2405 comment =
"both clusters in same SM";
2408 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSM, hMiSM );
2413 comment =
"both clusters in same SM, TRD covered";
2414 leg =
"Same SM, TRD Yes";
2415 hname =
"SameSMTRDYes";
2416 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSMTRDYes, hMiSMTRDYes );
2419 hReSMTRDNot = (
TH2F*) hReSM->Clone(
"h2D_Re_IM_SM_TRD_Not");
2420 hReSMTRDNot->Add(hReSMTRDYes,-1);
2423 hMiSMTRDNot = (
TH2F*) hMiSM->Clone(
"h2D_Mi_IM_SM_TRD_Not");
2424 hMiSMTRDNot->Add(hMiSMTRDYes,-1);
2426 comment =
"both clusters in same SM, NOT TRD covered";
2427 leg =
"Same SM, TRD No";
2428 hname =
"SameSMTRDNot";
2429 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSMTRDNot, hMiSMTRDNot );
2438 for(
Int_t imodgroup = 0; imodgroup<=2; imodgroup++)
2443 comment = Form(
"both clusters in same SM, group %d",imodgroup);
2444 leg = Form(
"SMGroup %d",imodgroup);
2445 hname = Form(
"SMGroup%d" ,imodgroup);
2447 if ( imodgroup != 0 )
2449 hReSMGroups[imodgroup]->Scale(1./2.);
2450 if (
kMix ) hMiSMGroups[imodgroup]->Scale(1./2.);
2454 hReSMGroups[imodgroup]->Scale(1./6.);
2455 if (
kMix ) hMiSMGroups[imodgroup]->Scale(1./6.);
2458 ProjectAndFit(nPt, comment, leg, hname, xPtLimits, xPt, exPt,
2459 hReSMGroups[imodgroup], hMiSMGroups[imodgroup] );
2473 Int_t firstSector = 0;
2474 Int_t lastSector = 5;
2475 if ( kCalorimeter==
"DCAL" )
2481 TH2F * hReSector = 0;
2482 TH2F * hMiSector = 0;
2484 for(isector = firstSector; isector<=lastSector; isector++)
2488 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2489 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2493 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2494 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiSameSectorEMCALMod_%d", kHistoStartName.Data(), isector));
2498 if( isector == firstSector )
2500 hReSector = (
TH2F*) hRe->Clone(
"h2D_Re_IM_Sector");
2501 if(
kMix) hMiSector = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_Sector");
2505 hReSector->Add( hRe );
2506 if(
kMix) hMiSector ->Add( hMi );
2511 comment = Form(
"both clusters in Sector %d",isector);
2512 leg = Form(
"Sector %d",isector);
2513 hname = Form(
"Sector%d" ,isector);
2515 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2519 comment =
"both clusters in same Sector";
2520 leg =
"Same Sector";
2521 hname =
"SameSector";
2522 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hReSector, hMiSector );
2525 PlotGraphs(
"Sector" ,firstSector,lastSector);
2533 Int_t firstSide = 0;
2536 if ( kCalorimeter==
"DCAL" )
2545 for(iside = firstSide; iside <= lastSide; iside++)
2549 hRe = (
TH2F *)
fil->Get(Form(
"%s_hReSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2550 hMi = (
TH2F *)
fil->Get(Form(
"%s_hMiSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2554 hRe = (
TH2F *) lis->FindObject(Form(
"%s_hReSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2555 hMi = (
TH2F *) lis->FindObject(Form(
"%s_hMiSameSideEMCALMod_%d", kHistoStartName.Data(), iside));
2559 if( iside == firstSide )
2561 hReSide = (
TH2F*) hRe->Clone(
"h2D_Re_IM_Side");
2562 if(
kMix) hMiSide = (
TH2F*) hMi->Clone(
"h2D_Mi_IM_Side");
2566 hReSide->Add( hRe );
2567 if(
kMix) hMiSide ->Add( hMi );
2572 comment = Form(
"both clusters in Side %d",iside);
2573 leg = Form(
"Side %d",iside);
2574 hname = Form(
"Side%d" ,iside);
2576 ProjectAndFit(nPt,comment,leg,hname,xPtLimits, xPt, exPt, hRe, hMi );
2580 comment =
"both clusters in same Side";
2583 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)
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.
Fit invariant mass distributions.
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".
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=6, Bool_t mixed=kTRUE, Bool_t truncmix=kFALSE, Int_t pol=1, Bool_t drawAll=kFALSE, Bool_t drawMCAll=kFALSE, Bool_t drawPerSM=kTRUE, Bool_t drawPerSMGr=kFALSE, Bool_t drawPerSector=kFALSE, Bool_t drawPerSide=kFALSE, TString plotFormat="eps")
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)
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
Common starting name in histograms.
Float_t kChi2NDFMax
Use a truncated function to get the mixed event scale.
TString kPlotFormat
Name of file with input histograms.