16 #if !defined(__CINT__) || defined(__MAKECINT__) 31 #include "TDirectoryFile.h" 32 #include "TGraphErrors.h" 82 TString histoDir =
"Pi0IM_GammaTrackCorr_EMCAL",
95 printf(
"Settings: prodname %s, filename %s, histoDir %s, histoList %s, particle %s, calorimeter %s, mix %d, polN %d, n combi %d\n",
102 printf(
"Could not recover file <%p> or dir <%p> or list <%p>\n",
fil,
direc,lis);
109 const Int_t ncombFix = 100;
110 const Int_t nFixBins = 50;
112 const Int_t nPtEta = 8;
113 Double_t xPtLimitsEta[] = {2.,4.,6.,8.,10.,14.,18.,24.};
115 const Int_t nPtPi0 = 12;
116 Double_t xPtLimitsPi0[] = {2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.};
123 if(part ==
"Eta") nPt = nPtEta;
125 for(
Int_t i = 0; i < nPt+1; i++)
129 xPtLimits[i] = xPtLimitsPi0[i];
130 exPt[i] = (xPtLimitsPi0[i+1]-xPtLimitsPi0[i])/2;
131 xPt [i] = xPtLimitsPi0[i]+exPt[i];
135 xPtLimits[i] = xPtLimitsEta[i];
136 exPt[i] = (xPtLimitsEta[i+1]-xPtLimitsEta[i])/2;
137 xPt [i] = xPtLimitsEta[i]+exPt[i];
160 Int_t modColorIndex[]={1 , 2, 2, 3, 3, 4, 4, 7, 7, 6, 6, 2, 3, 4, 7, 6, 2, 2, 3, 3, 4, 4, 6, 6};
161 Int_t modStyleIndex[]={20,24,25,24,25,24,25,24,25,24,25,21,21,21,21,21,22,26,22,26,22,26,22,26};
174 TH2F * hRe [ncombFix];
176 TH2F * hMi [ncombFix];
187 hRe[0] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hRe_cen0_pidbit0_asy0_dist1",icalo));
188 hMi[0] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMi_cen0_pidbit0_asy0_dist1",icalo));
192 hRe[0] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hRe_cen0_pidbit0_asy0_dist1",icalo));
193 hMi[0] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMi_cen0_pidbit0_asy0_dist1",icalo));
198 printf(
"histo Re %p - Mix %p\n",hRe[0],hMi[0]);
200 comment[0] =
"All SM";
220 for(imod = firstMod; imod<lastMod; imod++)
222 printf(
"imod+1 %d\n",imod+1);
225 hRe[imod+1] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReMod_%d",icalo,imod));
226 hMi[imod+1] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiMod_%d",icalo,imod));
230 hRe[imod+1] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReMod_%d",icalo,imod));
231 hMi[imod+1] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiMod_%d",icalo,imod));
234 comment[imod+1] = Form(
"both clusters in SM %d",imod);
235 leg [imod+1] = Form(
"SM %d",imod);
236 hname [imod+1] = Form(
"SM%d" ,imod);
238 printf(
"histo mod %d Re %p - Mix %p\n",imod, hRe[imod],hMi[imod]);
244 for(isector = 0; isector<5; isector++)
246 printf(
"imod+1+isector %d\n",imod+1+isector);
250 hRe[imod+1+isector] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReSameSectorEMCALMod_%d",icalo,isector));
251 hMi[imod+1+isector] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiSameSectorEMCALMod_%d",icalo,isector));
255 hRe[imod+1+isector] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReSameSectorEMCALMod_%d",icalo,isector));
256 hMi[imod+1+isector] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiSameSectorEMCALMod_%d",icalo,isector));
259 comment[imod+1+isector] = Form(
"both clusters in Sector %d",isector);
260 leg [imod+1+isector] = Form(
"Sector %d",isector);
261 hname [imod+1+isector] = Form(
"Sector%d" ,isector);
263 printf(
"histo sector %d Re %p - Mix %p\n",isector, hRe[imod+1+isector],hMi[imod+1+isector]);
269 for(iside = 0; iside < 8; iside++)
271 printf(
"imod+1+isector+iside %d\n",imod+1+isector+iside);
275 hRe[imod+1+isector+iside] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReSameSideEMCALMod_%d",icalo,iside));
276 hMi[imod+1+isector+iside] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiSameSideEMCALMod_%d",icalo,iside));
280 hRe[imod+1+isector+iside] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReSameSideEMCALMod_%d",icalo,iside));
281 hMi[imod+1+isector+iside] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiSameSideEMCALMod_%d",icalo,iside));
283 comment[imod+1+isector+iside] = Form(
"both clusters in Side %d",iside);
284 leg [imod+1+isector+iside] = Form(
"Side %d",iside);
285 hname [imod+1+isector+iside] = Form(
"Side%d" ,iside);
287 printf(
"histo side %d Re %p - Mix %p\n",isector, hRe[imod+1+isector+iside],hMi[imod+1+isector+iside]);
290 for(
Int_t icomb = 0; icomb<ncomb; icomb++)
291 printf(
"icomb %d p %p ; %p ; %s, %s, %s\n",icomb,hRe[icomb],hMi[icomb],comment[icomb].
Data(),leg[icomb].
Data(),hname[icomb].
Data());
299 TLegend * pLegendIM[nFixBins];
301 TH1D* hIM [ncombFix][nFixBins];
302 TH1D* hIMPu [nFixBins];
303 TH1D* hMix [ncombFix][nFixBins];
304 TH1D* hMixCorrected [ncombFix][nFixBins];
305 TH1D* hRatio [ncombFix][nFixBins];
308 Double_t mesonPt [ncombFix][nFixBins];
309 Double_t mesonPtBC [ncombFix][nFixBins];
312 Double_t mesonWidth [ncombFix][nFixBins];
313 Double_t mesonEffPt [ncombFix][nFixBins];
316 Double_t emesonPt [ncombFix][nFixBins];
317 Double_t emesonPtBC [ncombFix][nFixBins];
319 Double_t emesonMass [ncombFix][nFixBins];
320 Double_t emesonWidth[ncombFix][nFixBins];
321 Double_t emesonEffPt[ncombFix][nFixBins];
328 for(
Int_t icomb = 0; icomb< ncomb ; icomb++)
330 for(
Int_t ipt = 0; ipt< nPt; ipt++)
332 hIM [icomb][ipt] = 0 ;
334 hMix [icomb][ipt] = 0 ;
335 hMixCorrected[icomb][ipt] = 0 ;
336 hRatio [icomb][ipt] = 0 ;
337 hSignal [icomb][ipt] = 0 ;
339 mesonPt [icomb][ipt] = 0 ;
340 mesonPtBC [icomb][ipt] = 0 ;
341 mesonPtBCPu [ipt] = 0 ;
342 mesonMass [icomb][ipt] = 0 ;
343 mesonWidth [icomb][ipt] = 0 ;
344 mesonEffPt [icomb][ipt] = 0 ;
346 emesonPt [icomb][ipt] = 0 ;
347 emesonPtBC [icomb][ipt] = 0 ;
348 emesonPtBCPu [ipt] = 0 ;
349 emesonMass [icomb][ipt] = 0 ;
350 emesonWidth [icomb][ipt] = 0 ;
351 emesonEffPt [icomb][ipt] = 0 ;
365 gStyle->SetOptTitle(1);
366 gStyle->SetTitleOffset(2,
"Y");
367 gStyle->SetOptStat(0);
368 gStyle->SetOptFit(000000);
370 Int_t col = TMath::Ceil(TMath::Sqrt(nPt));
372 for(
Int_t icomb = 0; icomb< ncomb; icomb++)
374 TCanvas * cIMModi =
new TCanvas(Form(
"Combination_%d\n", icomb), Form(
"Combination_%d\n", icomb), 1200, 1200) ;
375 cIMModi->Divide(col, col);
377 for(
Int_t i = 0; i < nPt; i++)
379 if(icomb >10 && i > 8)
continue;
385 printf(
"Bin %d (%f, %f)\n",i, ptMin,ptMax);
387 hIM[icomb][i] = hRe[icomb]->ProjectionY(Form(
"IM_Comb%d_PtBin%d",icomb,i),
388 hRe[icomb]->GetXaxis()->FindBin(ptMin),
389 hRe[icomb]->GetXaxis()->FindBin(ptMax));
390 hIM[icomb][i]->SetTitle(Form(
"%2.1f < p_{T, #gamma#gamma} < %2.1f GeV/c",ptMin,ptMax));
392 hIM[icomb][i]->Rebin(rebin);
394 hIM[icomb][i]->Rebin(rebin2);
397 hIM[icomb][i]->Sumw2();
399 hIM[icomb][i]->SetXTitle(
"M_{#gamma,#gamma} (GeV/c^{2})");
400 hIM[icomb][i]->SetLineColor(modColorIndex[icomb]);
402 hIM[icomb][i]->SetAxisRange(mmin,mmax,
"X");
403 hIM[icomb][i] ->SetLineWidth(2);
404 hIM[icomb][i] ->SetLineColor(4);
435 nMax= hIM[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.08),
436 hIM[icomb][i]->FindBin(0.17));
440 nMax = hIM[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.4),
441 hIM[icomb][i]->FindBin(0.65));
446 if(nMax > 20 && !
mix)
450 fitfun->SetParameters(nMax/5,0.135,20,1.,0.);
452 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.08,0.25);
454 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.10,0.25);
458 fitfun->SetParameters(nMax/5,0.54,40,1.,0.);
460 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
462 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.3,0.8);
464 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.3,0.8);
471 hIM[icomb][i]->SetMaximum(nMax/5.);
473 hIM[icomb][i]->SetMaximum(nMax/2.);
479 hIM[icomb][i]->SetMaximum(nMax/20.);
481 hIM[icomb][i]->SetMaximum(nMax/8.);
485 Double_t mStep = hIM[icomb][i]->GetBinWidth(i);
486 hIM[icomb][i]->SetMinimum(0.1);
487 hIM[icomb][i]->SetAxisRange(mmin,mmax,
"X");
491 if ( hIM[icomb][i]->GetFunction(
"fitfun") && !
mix )
493 if(hIM[icomb][i]->GetFunction(
"fitfun")->GetChisquare()/hIM[icomb][i]->GetFunction(
"fitfun")->GetNDF()<100)
495 Double_t A = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(0);
496 Double_t mean = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(1);
497 Double_t sigm = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(2);
504 Double_t eA = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(0);
505 Double_t emean = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(1);
506 Double_t esigm = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(2);
513 pLegendIM[i] =
new TLegend(0.55,0.65,0.95,0.93);
514 pLegendIM[i]->SetTextSize(0.035);
515 pLegendIM[i]->SetFillColor(10);
516 pLegendIM[i]->SetBorderSize(1);
517 pLegendIM[i]->SetHeader(Form(
"#pi %s",leg[icomb].
Data()));
518 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.2f #pm %2.2f ",A,eA),
"");
519 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %2.3f #pm %2.3f ",mean,emean),
"");
520 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %2.3f #pm %2.3f ",sigm,esigm),
"");
525 mesonPt[icomb] [i] = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
527 TMath::Power(eA/A,2) +
528 TMath::Power(esigm/sigm,2);
529 emesonPt[icomb][i]= TMath::Sqrt(ePi0)* mesonPt[icomb][i];
531 emesonPt[icomb][i] = TMath::Min(emesonPt[icomb][i], TMath::Sqrt(mesonPt[icomb] [i]));
533 mesonPt [icomb][i]/=(exPt[i]*2)/
nEvt;
534 emesonPt[icomb][i]/=(exPt[i]*2)/
nEvt;
538 mesonMass [icomb][i] = mean*1000.;
539 emesonMass[icomb][i] = emean*1000.;
541 mesonWidth [icomb][i] = sigm*1000.;
542 emesonWidth[icomb][i] = esigm*1000.;
547 mesonPt[icomb][i] =-1;
548 emesonPt[icomb][i] = -1;
550 mesonMass[icomb][i] = -1;
551 emesonMass[icomb][i] = -1;
553 mesonWidth[icomb][i] = -1;
554 emesonWidth[icomb][i] = -1;
558 mesonPt[icomb][i] =-1;
559 emesonPt[icomb][i] = -1;
561 mesonMass[icomb][i] = -1;
562 emesonMass[icomb][i] = -1;
564 mesonWidth[icomb][i] = -1;
565 emesonWidth[icomb][i] = -1;
574 hMix[icomb][i] = (
TH1D*) hMi[icomb]->ProjectionY(Form(
"MiMass_PtBin%d_Combi%d",i,icomb),
575 hMi[icomb]->GetXaxis()->FindBin(ptMin),
576 hMi[icomb]->GetXaxis()->FindBin(ptMax));
577 hMix[icomb][i]->SetLineColor(1);
578 hMix[icomb][i]->SetTitle(Form(
"%2.2f < p_{T, #gamma#gamma} < %2.2f GeV/c",ptMin,ptMax));
580 hMix[icomb][i]->Rebin(rebin);
582 hMix[icomb][i]->Rebin(rebin2);
603 hMix[icomb][i]->Sumw2();
606 hRatio[icomb][i] = (
TH1D*)hIM[icomb][i]->Clone(Form(
"RatioRealMix_PtBin%d_comb%d",i,icomb));
607 hRatio[icomb][i]->SetAxisRange(mmin,mmax,
"X");
608 hRatio[icomb][i]->Divide(hMix[icomb][i]);
614 if(hRatio[icomb][i]->GetEntries()>100)
655 Float_t scale = hRatio[icomb][i]->GetBinContent(hRatio[icomb][i]->FindBin(0.9));
656 hMix[icomb][i]->Scale(scale);
660 hSignal[icomb][i] = (
TH1D*)hIM[icomb][i]->Clone(Form(
"Signal_PtBin%d_comb%d",i,icomb));
662 hSignal[icomb][i] ->Add(hMix[icomb][i],-1);
663 hSignal[icomb][i] ->SetLineColor(kViolet);
668 nMax= hSignal[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.1),
669 hIM[icomb][i]->FindBin(0.2));
672 nMax = hSignal[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.4),
673 hIM[icomb][i]->FindBin(0.65));
679 if(polN < 4 )
fitfun->SetParameters(nMax/5,0.135,20,0);
680 else fitfun->SetParameters(nMax/5,20,0.135,20,20,nMax/5);
683 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
685 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
690 if(polN < 4 )
fitfun->SetParameters(nMax/5,0.54,40,0);
691 else fitfun->SetParameters(nMax/5,40,0.54,40,40,nMax/5);
693 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
701 if(hSignal[icomb][i]->GetFunction(
"fitfun"))
707 if(hSignal[icomb][i]->GetFunction(
"fitfun")->GetChisquare()/hSignal[icomb][i]->GetFunction(
"fitfun")->GetNDF()<1000){
708 Double_t A = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(0);
709 Double_t mean = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(1);
710 Double_t sigm = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(2);
717 Double_t eA = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(0);
718 Double_t emean = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(1);
719 Double_t esigm = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(2);
725 pLegendIM[i] =
new TLegend(0.55,0.65,0.95,0.93);
726 pLegendIM[i]->SetTextSize(0.035);
727 pLegendIM[i]->SetFillColor(10);
728 pLegendIM[i]->SetBorderSize(1);
729 pLegendIM[i]->SetHeader(Form(
"#pi %s",leg[icomb].
Data()));
730 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.2f #pm %2.2f ",A,eA),
"");
731 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %2.3f #pm %2.3f ",mean,emean),
"");
732 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %2.3f #pm %2.3f ",sigm,esigm),
"");
738 mesonPt[icomb] [i] = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
740 TMath::Power(eA/A,2) +
741 TMath::Power(esigm/sigm,2);
742 emesonPt[icomb][i]= TMath::Sqrt(ePi0)* mesonPt[icomb][i];
744 emesonPt[icomb][i] = TMath::Min(emesonPt[icomb][i], TMath::Sqrt(mesonPt[icomb] [i]));
747 mesonPt [icomb] [i]/=(
nEvt*(exPt[i]*2));
748 emesonPt[icomb] [i]/=(
nEvt*(exPt[i]*2));
752 mesonMass [icomb][i] = mean *1000.;
753 emesonMass[icomb][i] = emean*1000.;
755 mesonWidth [icomb][i] = sigm *1000.;
756 emesonWidth[icomb][i] = esigm*1000.;
761 mesonPt[icomb][i] =-1;
762 emesonPt[icomb][i] = -1;
764 mesonMass[icomb][i] = -1;
765 emesonMass[icomb][i] = -1;
767 mesonWidth[icomb][i] = -1;
768 emesonWidth[icomb][i] = -1;
772 mesonPt[icomb][i] =-1;
773 emesonPt[icomb][i] = -1;
775 mesonMass[icomb][i] = -1;
776 emesonMass[icomb][i] = -1;
778 mesonWidth[icomb][i] = -1;
779 emesonWidth[icomb][i] = -1;
783 Double_t width = mesonWidth[icomb][i];
784 Double_t mMinBin = mass - 2 * width;
785 Double_t mMaxBin = mass + 2 * width;
786 if(mass <= 0 || width <= 0)
790 mMinBin = 0.115; mMaxBin = 0.3 ;
793 mMinBin = 0.4; mMaxBin = 0.9 ;
798 if(hSignal[icomb][i])
800 mesonPtBC[icomb] [i] = hSignal[icomb][i]->Integral(hSignal[icomb][i]->FindBin(mMinBin), hSignal[icomb][i]->FindBin(mMaxBin)) ;
802 emesonPtBC[icomb] [i] = TMath::Sqrt(mesonPtBC[icomb] [i]);
804 mesonPtBC[icomb] [i]/=(
nEvt*(exPt[i]*2));
805 emesonPtBC[icomb] [i]/=(
nEvt*(exPt[i]*2));
821 printf(
"N(pi0) BC = %2.3e +- %2.4e\n",mesonPtBC[icomb][i],emesonPtBC[icomb][i]);
822 if(
filename.Contains(
"imu") && icomb==0)
824 printf(
"N(pi0) Pu = %2.3e +- %2.4e\n",mesonPtBCPu[i],emesonPtBCPu[i]);
825 if(mesonPtBCPu[i]>0)printf(
"\t ratio BC / Pu %f \n",mesonPtBC[icomb][i]/mesonPtBCPu[i]);
832 hIM[icomb][i]->Draw(
"HE");
834 hMix[icomb][i]->Draw(
"same");
837 if(hSignal[icomb][i]) hSignal[icomb][i] ->
Draw(
"same");
839 if(hSignal[icomb][i] && hSignal[icomb][i]->GetFunction(
"fitfun") && pLegendIM[i]) pLegendIM[i]->Draw();
847 hIM[icomb][i]->Draw(
"HE");
856 cIMModi->Print(Form(
"IMfigures/%s_%s_Mgg_%s_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(), hname[icomb].Data(),fileFormat.Data()));
864 for(
Int_t icomb = 0; icomb< ncomb; icomb++)
866 printf(
"Do real/mix\n");
868 TCanvas * cRat =
new TCanvas(Form(
"CombinationRatio_%d\n", icomb), Form(
"CombinationRatio_%d\n", icomb), 1200, 1200) ;
869 cRat->Divide(col, col);
871 for(
Int_t i = 0; i < nPt; i++){
875 if(!hRatio[icomb][i]) {
882 nMax = hRatio[icomb][i]->Integral(hRatio[icomb][i]->FindBin(0.005),
883 hRatio[icomb][i]->FindBin(0.20));
885 nMax = hRatio[icomb][i]->Integral(hRatio[icomb][i]->FindBin(0.4),
886 hRatio[icomb][i]->FindBin(0.6));
888 hRatio[icomb][i]->SetMaximum(nMax/4);
889 hRatio[icomb][i]->SetMinimum(1e-6);
890 hRatio[icomb][i]->SetAxisRange(mmin,mmax,
"X");
892 hRatio[icomb][i]->Draw();
898 cRat->Print(Form(
"IMfigures/%s_%s_MggRatio_%s_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(), hname[icomb].Data(),fileFormat.Data()));
907 gStyle->SetOptTitle(0);
916 TString particleN =
" #pi^{0}";
917 if(part==
"Eta") particleN =
" #eta";
919 for(
Int_t icomb = 0; icomb<ncomb; icomb++)
922 gPt[icomb] =
new TGraphErrors(nPt,xPt,mesonPt[icomb],exPt,emesonPt[icomb]);
923 gPt[icomb] ->SetName(Form(
"gPt_%s",hname[icomb].
Data()));
924 gPt[icomb] ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
925 gPt[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
926 gPt[icomb] ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
927 gPt[icomb] ->GetHistogram()->SetAxisRange(0.,30);
928 gPt[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
929 gPt[icomb] ->SetMarkerStyle(20);
930 gPt[icomb] ->SetMarkerSize(1);
931 gPt[icomb] ->SetMarkerColor(1);
935 gPtBC[icomb] =
new TGraphErrors(nPt,xPt,mesonPtBC[icomb],exPt,emesonPtBC[icomb]);
936 gPtBC[icomb] ->SetName(Form(
"gPtBC_%s",hname[icomb].
Data()));
937 gPtBC[icomb] ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
938 gPtBC[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
939 gPtBC[icomb] ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
940 gPtBC[icomb] ->GetHistogram()->SetAxisRange(0.,30);
941 gPtBC[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
942 gPtBC[icomb] ->SetMarkerStyle(20);
943 gPtBC[icomb] ->SetMarkerSize(1);
944 gPtBC[icomb] ->SetMarkerColor(1);
950 gMass[icomb] =
new TGraphErrors(nPt,xPt,mesonMass[icomb],exPt,emesonMass[icomb]);
951 gMass[icomb] ->SetName(Form(
"gMass_%s",hname[icomb].
Data()));
952 gMass[icomb] ->GetHistogram()->SetTitle(Form(
"mass vs p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
953 gMass[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
954 gMass[icomb] ->GetHistogram()->SetYTitle(Form(
"mass_{%s} (MeV/c)^{2} ",particleN.Data()));
956 gMass[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
957 gMass[icomb] ->SetMarkerStyle(20);
958 gMass[icomb] ->SetMarkerSize(1);
959 gMass[icomb] ->SetMarkerColor(1);
962 gWidth[icomb] =
new TGraphErrors(nPt,xPt,mesonWidth[icomb],exPt,emesonWidth[icomb]);
963 gWidth[icomb] ->SetName(Form(
"gWidth_%s",hname[icomb].
Data()));
964 gWidth[icomb] ->GetHistogram()->SetTitle(Form(
"Width vs p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
965 gWidth[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
966 gWidth[icomb] ->GetHistogram()->SetYTitle(Form(
"#sigma_{%s} (MeV/c)^{2} ",particleN.Data()));
968 gWidth[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
969 gWidth[icomb] ->SetMarkerStyle(20);
970 gWidth[icomb] ->SetMarkerSize(1);
971 gWidth[icomb] ->SetMarkerColor(1);
978 gPtBCPu =
new TGraphErrors(nPt,xPt,mesonPtBCPu,exPt,emesonPtBCPu);
979 gPtBCPu ->SetName(Form(
"gPtBC_%s_Pure",hname[0].
Data()));
980 gPtBCPu ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[0].Data()));
981 gPtBCPu ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
982 gPtBCPu ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
984 gPtBCPu ->GetHistogram()->SetTitleOffset(1.6,
"Y");
985 gPtBCPu ->SetMarkerStyle(24);
986 gPtBCPu ->SetMarkerSize(1);
987 gPtBCPu ->SetMarkerColor(2);
995 TLegend pLegendFitM(0.15,0.53,0.3,0.93);
996 pLegendFitM.SetTextSize(0.03);
997 pLegendFitM.SetFillColor(10);
998 pLegendFitM.SetBorderSize(1);
1000 TLegend pLegendFitW(0.4,0.53,0.6,0.93);
1001 pLegendFitW.SetTextSize(0.03);
1002 pLegendFitW.SetFillColor(10);
1003 pLegendFitW.SetBorderSize(1);
1005 TCanvas *cFitSM =
new TCanvas(
"cFitSM",
"cFitSM",1200,600);
1006 cFitSM->Divide(2, 1);
1015 gMass[0]->SetMaximum(180);
1016 gMass[0]->SetMinimum(120);
1020 gMass[0]->SetMaximum(660);
1021 gMass[0]->SetMinimum(420);
1024 gMass[0]->SetMarkerStyle(modStyleIndex[0]);
1025 gMass[0]->SetMarkerColor(modColorIndex[0]);
1026 gMass[0]->SetLineColor(modColorIndex[0]);
1028 gMass[0]->Draw(
"AP");
1030 pLegendFitM.AddEntry(gMass[0],Form(
"%s",leg[0].
Data()),
"P");
1034 for(
Int_t icomb = 1; icomb <11; icomb++)
1037 pLegendFitM.AddEntry(gMass[icomb],Form(
"%s",leg[icomb].
Data()),
"P");
1038 gMass[icomb]->SetMarkerStyle(modStyleIndex[icomb]);
1039 gMass[icomb]->SetMarkerColor(modColorIndex[icomb]);
1040 gMass[icomb]->SetLineColor(modColorIndex[icomb]);
1041 gMass[icomb]->Draw(
"P");
1045 gMass[0]->Draw(
"P");
1046 if(ncomb > 1) pLegendFitM.Draw();
1054 gWidth[0]->SetMaximum(16);
1055 gWidth[0]->SetMinimum(6);
1059 gWidth[0]->SetMaximum(60);
1060 gWidth[0]->SetMinimum(0);
1063 gWidth[0]->SetMarkerStyle(modStyleIndex[0]);
1064 gWidth[0]->SetMarkerColor(modColorIndex[0]);
1065 gWidth[0]->SetLineColor (modColorIndex[0]);
1067 gWidth[0]->Draw(
"AP");
1068 pLegendFitW.AddEntry(gWidth[0],Form(
"%s",leg[0].
Data()),
"P");
1072 for(
Int_t icomb = 1; icomb <11; icomb++)
1075 pLegendFitW.AddEntry(gWidth[icomb],Form(
"%s",leg[icomb].
Data()),
"P");
1076 gWidth[icomb]->SetMarkerStyle(modStyleIndex[icomb]);
1077 gWidth[icomb]->SetMarkerColor(modColorIndex[icomb]);
1078 gWidth[icomb]->SetLineColor(modColorIndex[icomb]);
1079 gWidth[icomb]->Draw(
"P");
1084 gWidth[0]->Draw(
"P");
1085 if(ncomb > 1) pLegendFitW.Draw();
1087 cFitSM->Print(Form(
"IMfigures/%s_%s_SingleSM_MassWidth_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1214 TLegend pLegendFitPt(0.6,0.6,0.9,0.9);
1215 pLegendFitPt.SetTextSize(0.03);
1216 pLegendFitPt.SetFillColor(10);
1217 pLegendFitPt.SetBorderSize(1);
1219 TCanvas *cFitPt =
new TCanvas(
"cFitPt",
"cFitPt",600,600);
1220 cFitPt->Divide(1, 1);
1228 gPt[0]->SetTitle(Form(
" Number of %s vs p_{T}, %s ",particle.Data(),comment[0].Data()));
1229 gPt[0]->SetMarkerStyle(modStyleIndex[0]);
1230 gPt[0]->SetMarkerColor(modColorIndex[0]);
1231 gPt[0]->SetLineColor(modColorIndex[0]);
1244 cFitPt->Print(Form(
"IMfigures/%s_%s_Pt_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1313 TCanvas *cFitPtBC =
new TCanvas(
"cFitPtBC",
"cFitPtBC",600,600);
1314 cFitPtBC->Divide(1, 1);
1323 gPtBC[0]->SetTitle(Form(
" Number of %s vs p_{T}, bin counting, %s ",particle.Data(),comment[0].Data()));
1324 gPtBC[0]->SetMarkerStyle(modStyleIndex[0]);
1325 gPtBC[0]->SetMarkerColor(modColorIndex[0]);
1326 gPtBC[0]->SetLineColor(modColorIndex[0]);
1336 gPtBC[0]->Draw(
"AP");
1338 gPt[0]->SetMarkerColor(2);
1339 gPt[0]->SetMarkerStyle(22);
1344 gPtBCPu->SetMaximum(1e-1);
1345 gPtBCPu->SetMinimum(1e-6);
1363 TLegend legBC(0.5,0.5,0.9,0.9);
1364 legBC.AddEntry(gPt[0],
"Fit",
"P");
1365 legBC.AddEntry(gPtBC[0],
"Integrated",
"P");
1366 legBC.AddEntry(gPtBCPu ,
"Integrated pure",
"P");
1370 cFitPtBC->Print(Form(
"IMfigures/%s_%s_PtBC_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1377 TFile *
fout =
new TFile(Form(
"IMfigures/%s_%s_MassWidthPtHistograms_%s_%s_%s.root",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),hname[0].Data()),
"recreate");
1379 for(
Int_t icomb = 0; icomb <ncomb; icomb++)
1381 for(
Int_t ipt = 0; ipt < nPt; ipt++)
1383 if(hIM[icomb][ipt]) { hIM[icomb][ipt]->Scale(1./
nEvt); hIM[icomb][ipt]->Write(); }
1390 if(hMix [icomb][ipt]) { hMix [icomb][ipt]->Write();}
1391 if(hMixCorrected[icomb][ipt]) { hMixCorrected[icomb][ipt]->Write();}
1392 if(hRatio [icomb][ipt]) { hRatio [icomb][ipt]->Write();}
1393 if(hSignal [icomb][ipt]) { hSignal [icomb][ipt]->Write();}
1397 gPt [icomb]->Write();
1398 gMass [icomb]->Write();
1399 gWidth[icomb]->Write();
1400 if(
mix) gPtBC [icomb]->Write();
1403 if(gEff) gEff->Write();
1404 if(gPtBCPu) gPtBCPu->Write();
1407 if(hMi[0])hMi[0]->Write();
1419 fil =
new TFile(Form(
"%s/%s.root",prodname.Data(),filename.Data()),
"read");
1421 if ( !
fil )
return kFALSE;
1423 direc = (TDirectoryFile*)
fil->Get(dirName);
1425 if ( !
direc && dirName !=
"" )
return kFALSE;
1434 if ( !lis && listName !=
"")
return kFALSE;
1437 nEvt = ((TH1F*)
fil->Get(
"hnEvt"))->GetEntries();
1439 nEvt = ((TH1F*) lis->FindObject(
"hNEvents"))->GetEntries();
1441 printf(
"nEvt = %d\n",
nEvt);
1468 printf(
"*** <<< Set Crystal Ball!!! >>> ***\n");
1474 fitfun->SetParLimits(0, 1,1.e+6);
1475 fitfun->SetParLimits(1, 0.105,0.165);
1476 fitfun->SetParLimits(2, 0.001,0.030);
1480 fitfun->SetParLimits(0, 1,1.e+6);
1481 fitfun->SetParLimits(2, 0.105,0.165);
1482 fitfun->SetParLimits(1, 0.001,0.030);
1483 fitfun->SetParLimits(3, 0.001,0.030);
1484 fitfun->SetParLimits(4, 0,10);
1485 fitfun->SetParLimits(5, 1,1.e+6);
1500 fitfun->SetParLimits(0, 1,1.e+6);
1501 fitfun->SetParLimits(1, 0.20,0.80);
1502 fitfun->SetParLimits(2, 0.001,0.06);
1506 fitfun->SetLineColor(kRed);
1509 fitfun->SetParName(0,
"A");
1510 fitfun->SetParName(1,
"m_{0}");
1511 fitfun->SetParName(2,
"#sigma");
1517 fitfun->SetParName(5,
"a_{2}");
1526 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1527 (2*par[2]*par[2]) );
1528 Double_t back = par[3] + par[4]*x[0] + par[5]*x[0]*x[0] + par[6]*x[0]*x[0]*x[0];
1535 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1536 (2*par[2]*par[2]) );
1537 Double_t back = par[3] + par[4]*x[0] + par[5]*x[0]*x[0];
1544 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1545 (2*par[2]*par[2]) );
1546 Double_t back = par[3] + par[4]*x[0];
1553 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1554 (2*par[2]*par[2]) );
1562 if ((x[0] > 0.425 && x[0] < 0.65) ) {
1567 return par[0] + par[1]*x[0];
1573 if ((x[0] > 0.07 && x[0] < 0.2)) {
1578 return par[0] + par[1]*x[0];
1592 Double_t A = pow(n/fabs(alpha),n)*exp(-pow(alpha,2)/2);
1593 Double_t B = n/fabs(alpha) - fabs(alpha);
1595 if ((x[0]-mean)/sigma>-alpha)
1596 return N*width*TMath::Gaus(x[0],mean,sigma,1);
1598 return N/(sqrt(TMath::TwoPi())*
sigma)*width*A*pow(B-(x[0]-mean)/
sigma,-n);
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="")
Bool_t drawAllCombi
Apply Root method Sumw2()
Double_t pi0massP3(Double_t *x, Double_t *par)
Int_t nEvt
Plot also many SM combinations.
Bool_t sumw2
polinomyal type for residual background under the peak
Bool_t GetFileAndEvents(TString prodname, TString filename, TString dirName, TString listName)
const TString calorimeter
TString part
use mixed event to constrain combinatorial background
Double_t pi0massP1(Double_t *x, Double_t *par)
Double_t CrystalBall(Double_t *x, Double_t *par)
Double_t truncatedPolPi0(Double_t *x, Double_t *par)
void InvMassFit(TString prodname="LHC17l3b_fast", TString filename="AnalysisResults", TString histoDir="Pi0IM_GammaTrackCorr_EMCAL", TString histoList="default", TString calorimeter="EMCAL", TString particle="Pi0", Bool_t mixed=0, Int_t pol=1, Int_t ncomb=1, TString fileFormat="pdf")
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t pi0massP0(Double_t *x, Double_t *par)
Double_t pi0massP2(Double_t *x, Double_t *par)
Int_t polN
define fitting and plotting ranges for particle
TFile * fout
input train file
Double_t truncatedPolEta(Double_t *x, Double_t *par)