16 #if !defined(__CINT__) || defined(__MAKECINT__) 31 #include "TDirectoryFile.h" 32 #include "TGraphErrors.h" 84 TString histoDir =
"Pi0IM_GammaTrackCorr_EMCAL",
103 printf(
"Settings: prodname %s, filename %s, histoDir %s, histoList %s, particle %s, calorimeter %s, \n" 104 " \t mix %d, polN %d, n combi %d, n pairs cut %2.2e\n",
105 prodname.Data(),
filename.Data(),histoDir.Data(),histoList.Data(), part.Data(),
calorimeter.Data(),
110 printf(
"Could not recover file <%p> or dir <%p> or list <%p>\n",
fil,
direc,lis);
117 const Int_t ncombFix = 100;
118 const Int_t nFixBins = 50;
120 const Int_t nPtEta = 8;
121 Double_t xPtLimitsEta[] = {2.,4.,6.,8.,10.,14.,18.,24.};
123 const Int_t nPtPi0 = 12;
124 Double_t xPtLimitsPi0[] = {2.,3.,4.,5.,6.,7.,8.,9.,10.,12.,14.,16.,18.};
131 if(part ==
"Eta") nPt = nPtEta;
133 for(
Int_t i = 0; i < nPt+1; i++)
137 xPtLimits[i] = xPtLimitsPi0[i];
138 exPt[i] = (xPtLimitsPi0[i+1]-xPtLimitsPi0[i])/2;
139 xPt [i] = xPtLimitsPi0[i]+exPt[i];
143 xPtLimits[i] = xPtLimitsEta[i];
144 exPt[i] = (xPtLimitsEta[i+1]-xPtLimitsEta[i])/2;
145 xPt [i] = xPtLimitsEta[i]+exPt[i];
168 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};
169 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};
182 TH2F * hRe [ncombFix];
184 TH2F * hMi [ncombFix];
195 hRe[0] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hRe_cen0_pidbit0_asy0_dist1",icalo));
196 hMi[0] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMi_cen0_pidbit0_asy0_dist1",icalo));
200 hRe[0] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hRe_cen0_pidbit0_asy0_dist1",icalo));
201 hMi[0] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMi_cen0_pidbit0_asy0_dist1",icalo));
206 printf(
"histo Re %p - Mix %p\n",hRe[0],hMi[0]);
208 comment[0] =
"All SM";
230 for(imod = firstMod; imod<lastMod; imod++)
232 printf(
"imod+1 %d\n",imod+1);
235 hRe[imod+1] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReMod_%d",icalo,imod));
236 hMi[imod+1] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiMod_%d",icalo,imod));
240 hRe[imod+1] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReMod_%d",icalo,imod));
241 hMi[imod+1] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiMod_%d",icalo,imod));
244 comment[imod+1] = Form(
"both clusters in SM %d",imod);
245 leg [imod+1] = Form(
"SM %d",imod);
246 hname [imod+1] = Form(
"SM%d" ,imod);
248 printf(
"histo mod %d Re %p - Mix %p\n",imod, hRe[imod],hMi[imod]);
254 for(isector = 0; isector<5; isector++)
256 printf(
"imod+1+isector %d\n",imod+1+isector);
260 hRe[imod+1+isector] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReSameSectorEMCALMod_%d",icalo,isector));
261 hMi[imod+1+isector] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiSameSectorEMCALMod_%d",icalo,isector));
265 hRe[imod+1+isector] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReSameSectorEMCALMod_%d",icalo,isector));
266 hMi[imod+1+isector] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiSameSectorEMCALMod_%d",icalo,isector));
269 comment[imod+1+isector] = Form(
"both clusters in Sector %d",isector);
270 leg [imod+1+isector] = Form(
"Sector %d",isector);
271 hname [imod+1+isector] = Form(
"Sector%d" ,isector);
273 printf(
"histo sector %d Re %p - Mix %p\n",isector, hRe[imod+1+isector],hMi[imod+1+isector]);
279 for(iside = 0; iside < 8; iside++)
281 printf(
"imod+1+isector+iside %d\n",imod+1+isector+iside);
285 hRe[imod+1+isector+iside] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hReSameSideEMCALMod_%d",icalo,iside));
286 hMi[imod+1+isector+iside] = (
TH2F *)
fil->Get(Form(
"AnaPi0_Calo%d_hMiSameSideEMCALMod_%d",icalo,iside));
290 hRe[imod+1+isector+iside] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hReSameSideEMCALMod_%d",icalo,iside));
291 hMi[imod+1+isector+iside] = (
TH2F *) lis->FindObject(Form(
"AnaPi0_Calo%d_hMiSameSideEMCALMod_%d",icalo,iside));
293 comment[imod+1+isector+iside] = Form(
"both clusters in Side %d",iside);
294 leg [imod+1+isector+iside] = Form(
"Side %d",iside);
295 hname [imod+1+isector+iside] = Form(
"Side%d" ,iside);
297 printf(
"histo side %d Re %p - Mix %p\n",isector, hRe[imod+1+isector+iside],hMi[imod+1+isector+iside]);
300 for(
Int_t icomb = 0; icomb<ncomb; icomb++)
301 printf(
"icomb %d p %p ; %p ; %s, %s, %s\n",icomb,hRe[icomb],hMi[icomb],comment[icomb].
Data(),leg[icomb].
Data(),hname[icomb].
Data());
309 TLegend * pLegendIM[nFixBins];
311 TH1D* hIM [ncombFix][nFixBins];
312 TH1D* hIMPu [nFixBins];
313 TH1D* hMix [ncombFix][nFixBins];
314 TH1D* hMixCorrected [ncombFix][nFixBins];
315 TH1D* hRatio [ncombFix][nFixBins];
318 Double_t mesonPt [ncombFix][nFixBins];
319 Double_t mesonPtBC [ncombFix][nFixBins];
322 Double_t mesonWidth [ncombFix][nFixBins];
323 Double_t mesonEffPt [ncombFix][nFixBins];
326 Double_t emesonPt [ncombFix][nFixBins];
327 Double_t emesonPtBC [ncombFix][nFixBins];
329 Double_t emesonMass [ncombFix][nFixBins];
330 Double_t emesonWidth[ncombFix][nFixBins];
331 Double_t emesonEffPt[ncombFix][nFixBins];
338 for(
Int_t icomb = 0; icomb< ncomb ; icomb++)
340 for(
Int_t ipt = 0; ipt< nPt; ipt++)
342 hIM [icomb][ipt] = 0 ;
344 hMix [icomb][ipt] = 0 ;
345 hMixCorrected[icomb][ipt] = 0 ;
346 hRatio [icomb][ipt] = 0 ;
347 hSignal [icomb][ipt] = 0 ;
349 mesonPt [icomb][ipt] = 0 ;
350 mesonPtBC [icomb][ipt] = 0 ;
351 mesonPtBCPu [ipt] = 0 ;
352 mesonMass [icomb][ipt] = 0 ;
353 mesonWidth [icomb][ipt] = 0 ;
354 mesonEffPt [icomb][ipt] = 0 ;
356 emesonPt [icomb][ipt] = 0 ;
357 emesonPtBC [icomb][ipt] = 0 ;
358 emesonPtBCPu [ipt] = 0 ;
359 emesonMass [icomb][ipt] = 0 ;
360 emesonWidth [icomb][ipt] = 0 ;
361 emesonEffPt [icomb][ipt] = 0 ;
375 gStyle->SetOptTitle(1);
376 gStyle->SetTitleOffset(2,
"Y");
377 gStyle->SetOptStat(0);
378 gStyle->SetOptFit(000000);
380 Int_t col = TMath::Ceil(TMath::Sqrt(nPt));
382 for(
Int_t icomb = 0; icomb< ncomb; icomb++)
384 TCanvas * cIMModi =
new TCanvas(Form(
"Combination_%d\n", icomb), Form(
"Combination_%d\n", icomb), 1200, 1200) ;
385 cIMModi->Divide(col, col);
387 for(
Int_t i = 0; i < nPt; i++)
389 if(icomb >10 && i > 8)
continue;
395 printf(
"Bin %d (%f, %f)\n",i, ptMin,ptMax);
397 hIM[icomb][i] = hRe[icomb]->ProjectionY(Form(
"IM_Comb%d_PtBin%d",icomb,i),
398 hRe[icomb]->GetXaxis()->FindBin(ptMin),
399 hRe[icomb]->GetXaxis()->FindBin(ptMax));
400 hIM[icomb][i]->SetTitle(Form(
"%2.1f < p_{T, #gamma#gamma} < %2.1f GeV/c",ptMin,ptMax));
402 hIM[icomb][i]->Rebin(rebin);
404 hIM[icomb][i]->Rebin(rebin2);
407 hIM[icomb][i]->Sumw2();
409 hIM[icomb][i]->SetXTitle(
"M_{#gamma,#gamma} (GeV/c^{2})");
410 hIM[icomb][i]->SetLineColor(modColorIndex[icomb]);
412 hIM[icomb][i]->SetAxisRange(mmin,mmax,
"X");
413 hIM[icomb][i] ->SetLineWidth(2);
414 hIM[icomb][i] ->SetLineColor(4);
445 nMax= hIM[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.09),
446 hIM[icomb][i]->FindBin(0.25));
450 nMax = hIM[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.4),
451 hIM[icomb][i]->FindBin(0.65));
456 fitfun->SetParLimits(0,nMax/100,nMax*100);
462 fitfun->SetParameters(nMax/4,0.135,0.02,1.,0.);
464 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.09,0.25);
466 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.10,0.25);
470 fitfun->SetParameters(nMax/4,0.54,0.04,1.,0.);
472 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
474 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.3,0.8);
476 hIM[icomb][i]->Fit(
"fitfun",
"QR",
"",0.3,0.8);
483 hIM[icomb][i]->SetMaximum(nMax/5.);
485 hIM[icomb][i]->SetMaximum(nMax/2.);
491 hIM[icomb][i]->SetMaximum(nMax/20.);
493 hIM[icomb][i]->SetMaximum(nMax/8.);
497 Double_t mStep = hIM[icomb][i]->GetBinWidth(i);
498 hIM[icomb][i]->SetMinimum(0.1);
499 hIM[icomb][i]->SetAxisRange(mmin,mmax,
"X");
503 if ( hIM[icomb][i]->GetFunction(
"fitfun") && !
mix )
505 if(hIM[icomb][i]->GetFunction(
"fitfun")->GetChisquare()/hIM[icomb][i]->GetFunction(
"fitfun")->GetNDF()<100)
507 Double_t A = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(0);
508 Double_t mean = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(1);
509 Double_t sigm = hIM[icomb][i]->GetFunction(
"fitfun")->GetParameter(2);
516 Double_t eA = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(0);
517 Double_t emean = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(1);
518 Double_t esigm = hIM[icomb][i]->GetFunction(
"fitfun")->GetParError(2);
525 pLegendIM[i] =
new TLegend(0.55,0.65,0.95,0.93);
526 pLegendIM[i]->SetTextSize(0.035);
527 pLegendIM[i]->SetFillColor(10);
528 pLegendIM[i]->SetBorderSize(1);
529 pLegendIM[i]->SetHeader(Form(
"#pi %s",leg[icomb].
Data()));
530 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.2f #pm %2.2f ",A,eA),
"");
531 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %2.3f #pm %2.3f ",mean,emean),
"");
532 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %2.3f #pm %2.3f ",sigm,esigm),
"");
537 mesonPt[icomb] [i] = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
539 TMath::Power(eA/A,2) +
540 TMath::Power(esigm/sigm,2);
541 emesonPt[icomb][i]= TMath::Sqrt(ePi0)* mesonPt[icomb][i];
543 emesonPt[icomb][i] = TMath::Min(emesonPt[icomb][i], TMath::Sqrt(mesonPt[icomb] [i]));
545 mesonPt [icomb] [i]/=(
nEvt*(exPt[i]*2));
546 emesonPt[icomb] [i]/=(
nEvt*(exPt[i]*2));
548 cout <<
"N(pi0) fit = " << mesonPt[icomb][i] <<
"+-"<< emesonPt[icomb][i] <<
" mstep " << mStep<<endl;
550 mesonMass [icomb][i] = mean*1000.;
551 emesonMass[icomb][i] = emean*1000.;
553 mesonWidth [icomb][i] = sigm*1000.;
554 emesonWidth[icomb][i] = esigm*1000.;
559 mesonPt[icomb][i] =-1;
560 emesonPt[icomb][i] = -1;
562 mesonMass[icomb][i] = -1;
563 emesonMass[icomb][i] = -1;
565 mesonWidth[icomb][i] = -1;
566 emesonWidth[icomb][i] = -1;
570 mesonPt[icomb][i] =-1;
571 emesonPt[icomb][i] = -1;
573 mesonMass[icomb][i] = -1;
574 emesonMass[icomb][i] = -1;
576 mesonWidth[icomb][i] = -1;
577 emesonWidth[icomb][i] = -1;
586 hMix[icomb][i] = (
TH1D*) hMi[icomb]->ProjectionY(Form(
"MiMass_PtBin%d_Combi%d",i,icomb),
587 hMi[icomb]->GetXaxis()->FindBin(ptMin),
588 hMi[icomb]->GetXaxis()->FindBin(ptMax));
589 hMix[icomb][i]->SetLineColor(1);
590 hMix[icomb][i]->SetTitle(Form(
"%2.2f < p_{T, #gamma#gamma} < %2.2f GeV/c",ptMin,ptMax));
592 hMix[icomb][i]->Rebin(rebin);
594 hMix[icomb][i]->Rebin(rebin2);
615 hMix[icomb][i]->Sumw2();
618 hRatio[icomb][i] = (
TH1D*)hIM[icomb][i]->Clone(Form(
"RatioRealMix_PtBin%d_comb%d",i,icomb));
619 hRatio[icomb][i]->SetAxisRange(mmin,mmax,
"X");
620 hRatio[icomb][i]->Divide(hMix[icomb][i]);
626 if(hRatio[icomb][i]->GetEntries()>100)
667 Float_t scale = hRatio[icomb][i]->GetBinContent(hRatio[icomb][i]->FindBin(0.9));
668 hMix[icomb][i]->Scale(scale);
672 hSignal[icomb][i] = (
TH1D*)hIM[icomb][i]->Clone(Form(
"Signal_PtBin%d_comb%d",i,icomb));
674 hSignal[icomb][i] ->Add(hMix[icomb][i],-1);
675 hSignal[icomb][i] ->SetLineColor(kViolet);
680 nMax= hSignal[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.1),
681 hIM[icomb][i]->FindBin(0.2));
685 nMax = hSignal[icomb][i]->Integral(hIM[icomb][i]->FindBin(0.4),
686 hIM[icomb][i]->FindBin(0.65));
691 fitfun->SetParLimits(0,nMax/100,nMax*100);
694 if(polN < 4 )
fitfun->SetParameters(nMax/5,0.135,20,0);
695 else fitfun->SetParameters(nMax/5,20,0.135,20,20,nMax/5);
698 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
700 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.11,0.3);
705 if(polN < 4 )
fitfun->SetParameters(nMax/5,0.54,40,0);
706 else fitfun->SetParameters(nMax/5,40,0.54,40,40,nMax/5);
708 hSignal[icomb][i]->Fit(
"fitfun",
"QR",
"",0.4,0.7);
716 if(hSignal[icomb][i]->GetFunction(
"fitfun"))
722 if(hSignal[icomb][i]->GetFunction(
"fitfun")->GetChisquare()/hSignal[icomb][i]->GetFunction(
"fitfun")->GetNDF()<1000){
723 Double_t A = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(0);
724 Double_t mean = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(1);
725 Double_t sigm = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParameter(2);
732 Double_t eA = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(0);
733 Double_t emean = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(1);
734 Double_t esigm = hSignal[icomb][i]->GetFunction(
"fitfun")->GetParError(2);
740 pLegendIM[i] =
new TLegend(0.55,0.65,0.95,0.93);
741 pLegendIM[i]->SetTextSize(0.035);
742 pLegendIM[i]->SetFillColor(10);
743 pLegendIM[i]->SetBorderSize(1);
744 pLegendIM[i]->SetHeader(Form(
"#pi %s",leg[icomb].
Data()));
745 pLegendIM[i]->AddEntry(
"",Form(
"A = %2.2f #pm %2.2f ",A,eA),
"");
746 pLegendIM[i]->AddEntry(
"",Form(
"#mu = %2.3f #pm %2.3f ",mean,emean),
"");
747 pLegendIM[i]->AddEntry(
"",Form(
"#sigma = %2.3f #pm %2.3f ",sigm,esigm),
"");
753 mesonPt[icomb] [i] = A*sigm / mStep * TMath::Sqrt(TMath::TwoPi());
755 TMath::Power(eA/A,2) +
756 TMath::Power(esigm/sigm,2);
757 emesonPt[icomb][i]= TMath::Sqrt(ePi0)* mesonPt[icomb][i];
759 emesonPt[icomb][i] = TMath::Min(emesonPt[icomb][i], TMath::Sqrt(mesonPt[icomb] [i]));
761 mesonPt [icomb] [i]/=(
nEvt*(exPt[i]*2));
762 emesonPt[icomb] [i]/=(
nEvt*(exPt[i]*2));
766 mesonMass [icomb][i] = mean *1000.;
767 emesonMass[icomb][i] = emean*1000.;
769 mesonWidth [icomb][i] = sigm *1000.;
770 emesonWidth[icomb][i] = esigm*1000.;
775 mesonPt[icomb][i] =-1;
776 emesonPt[icomb][i] = -1;
778 mesonMass[icomb][i] = -1;
779 emesonMass[icomb][i] = -1;
781 mesonWidth[icomb][i] = -1;
782 emesonWidth[icomb][i] = -1;
786 mesonPt[icomb][i] =-1;
787 emesonPt[icomb][i] = -1;
789 mesonMass[icomb][i] = -1;
790 emesonMass[icomb][i] = -1;
792 mesonWidth[icomb][i] = -1;
793 emesonWidth[icomb][i] = -1;
797 Double_t width = mesonWidth[icomb][i];
798 Double_t mMinBin = mass - 2 * width;
799 Double_t mMaxBin = mass + 2 * width;
800 if(mass <= 0 || width <= 0)
804 mMinBin = 0.115; mMaxBin = 0.3 ;
807 mMinBin = 0.4; mMaxBin = 0.9 ;
812 if(hSignal[icomb][i])
814 mesonPtBC[icomb] [i] = hSignal[icomb][i]->Integral(hSignal[icomb][i]->FindBin(mMinBin), hSignal[icomb][i]->FindBin(mMaxBin)) ;
816 emesonPtBC[icomb] [i] = TMath::Sqrt(mesonPtBC[icomb] [i]);
818 mesonPtBC[icomb] [i]/=(
nEvt*(exPt[i]*2));
819 emesonPtBC[icomb] [i]/=(
nEvt*(exPt[i]*2));
835 printf(
"N(pi0) BC = %2.3e +- %2.4e\n",mesonPtBC[icomb][i],emesonPtBC[icomb][i]);
836 if(
filename.Contains(
"imu") && icomb==0)
838 printf(
"N(pi0) Pu = %2.3e +- %2.4e\n",mesonPtBCPu[i],emesonPtBCPu[i]);
839 if(mesonPtBCPu[i]>0)printf(
"\t ratio BC / Pu %f \n",mesonPtBC[icomb][i]/mesonPtBCPu[i]);
846 hIM[icomb][i]->Draw(
"HE");
848 hMix[icomb][i]->Draw(
"same");
851 if(hSignal[icomb][i]) hSignal[icomb][i] ->
Draw(
"same");
853 if(hSignal[icomb][i] && hSignal[icomb][i]->GetFunction(
"fitfun") && pLegendIM[i]) pLegendIM[i]->Draw();
861 hIM[icomb][i]->Draw(
"HE");
870 cIMModi->Print(Form(
"IMfigures/%s_%s_Mgg_%s_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(), hname[icomb].Data(),fileFormat.Data()));
878 for(
Int_t icomb = 0; icomb< ncomb; icomb++)
880 printf(
"Do real/mix\n");
882 TCanvas * cRat =
new TCanvas(Form(
"CombinationRatio_%d\n", icomb), Form(
"CombinationRatio_%d\n", icomb), 1200, 1200) ;
883 cRat->Divide(col, col);
885 for(
Int_t i = 0; i < nPt; i++){
889 if(!hRatio[icomb][i]) {
896 nMax = hRatio[icomb][i]->Integral(hRatio[icomb][i]->FindBin(0.005),
897 hRatio[icomb][i]->FindBin(0.20));
899 nMax = hRatio[icomb][i]->Integral(hRatio[icomb][i]->FindBin(0.4),
900 hRatio[icomb][i]->FindBin(0.6));
902 hRatio[icomb][i]->SetMaximum(nMax/4);
903 hRatio[icomb][i]->SetMinimum(1e-6);
904 hRatio[icomb][i]->SetAxisRange(mmin,mmax,
"X");
906 hRatio[icomb][i]->Draw();
912 cRat->Print(Form(
"IMfigures/%s_%s_MggRatio_%s_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(), hname[icomb].Data(),fileFormat.Data()));
921 gStyle->SetOptTitle(0);
930 TString particleN =
" #pi^{0}";
931 if(part==
"Eta") particleN =
" #eta";
933 for(
Int_t icomb = 0; icomb<ncomb; icomb++)
936 gPt[icomb] =
new TGraphErrors(nPt,xPt,mesonPt[icomb],exPt,emesonPt[icomb]);
937 gPt[icomb] ->SetName(Form(
"gPt_%s",hname[icomb].
Data()));
938 gPt[icomb] ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
939 gPt[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
940 gPt[icomb] ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
941 gPt[icomb] ->GetHistogram()->SetAxisRange(0.,30);
942 gPt[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
943 gPt[icomb] ->SetMarkerStyle(20);
944 gPt[icomb] ->SetMarkerSize(1);
945 gPt[icomb] ->SetMarkerColor(1);
949 gPtBC[icomb] =
new TGraphErrors(nPt,xPt,mesonPtBC[icomb],exPt,emesonPtBC[icomb]);
950 gPtBC[icomb] ->SetName(Form(
"gPtBC_%s",hname[icomb].
Data()));
951 gPtBC[icomb] ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
952 gPtBC[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
953 gPtBC[icomb] ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
954 gPtBC[icomb] ->GetHistogram()->SetAxisRange(0.,30);
955 gPtBC[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
956 gPtBC[icomb] ->SetMarkerStyle(20);
957 gPtBC[icomb] ->SetMarkerSize(1);
958 gPtBC[icomb] ->SetMarkerColor(1);
964 gMass[icomb] =
new TGraphErrors(nPt,xPt,mesonMass[icomb],exPt,emesonMass[icomb]);
965 gMass[icomb] ->SetName(Form(
"gMass_%s",hname[icomb].
Data()));
966 gMass[icomb] ->GetHistogram()->SetTitle(Form(
"mass vs p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
967 gMass[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
968 gMass[icomb] ->GetHistogram()->SetYTitle(Form(
"mass_{%s} (MeV/c)^{2} ",particleN.Data()));
970 gMass[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
971 gMass[icomb] ->SetMarkerStyle(20);
972 gMass[icomb] ->SetMarkerSize(1);
973 gMass[icomb] ->SetMarkerColor(1);
976 gWidth[icomb] =
new TGraphErrors(nPt,xPt,mesonWidth[icomb],exPt,emesonWidth[icomb]);
977 gWidth[icomb] ->SetName(Form(
"gWidth_%s",hname[icomb].
Data()));
978 gWidth[icomb] ->GetHistogram()->SetTitle(Form(
"Width vs p_{T} of reconstructed %s, %s ",particleN.Data(), comment[icomb].Data()));
979 gWidth[icomb] ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
980 gWidth[icomb] ->GetHistogram()->SetYTitle(Form(
"#sigma_{%s} (MeV/c)^{2} ",particleN.Data()));
982 gWidth[icomb] ->GetHistogram()->SetTitleOffset(1.5,
"Y");
983 gWidth[icomb] ->SetMarkerStyle(20);
984 gWidth[icomb] ->SetMarkerSize(1);
985 gWidth[icomb] ->SetMarkerColor(1);
992 gPtBCPu =
new TGraphErrors(nPt,xPt,mesonPtBCPu,exPt,emesonPtBCPu);
993 gPtBCPu ->SetName(Form(
"gPtBC_%s_Pure",hname[0].
Data()));
994 gPtBCPu ->GetHistogram()->SetTitle(Form(
"p_{T} of reconstructed %s, %s ",particleN.Data(), comment[0].Data()));
995 gPtBCPu ->GetHistogram()->SetXTitle(
"p_{T} (GeV/c) ");
996 gPtBCPu ->GetHistogram()->SetYTitle(Form(
"dN_{%s}/dp_{T} (GeV/c)^{-1} / N_{events} ",particleN.Data()));
998 gPtBCPu ->GetHistogram()->SetTitleOffset(1.6,
"Y");
999 gPtBCPu ->SetMarkerStyle(24);
1000 gPtBCPu ->SetMarkerSize(1);
1001 gPtBCPu ->SetMarkerColor(2);
1009 TLegend pLegendFitM(0.15,0.53,0.3,0.93);
1010 pLegendFitM.SetTextSize(0.03);
1011 pLegendFitM.SetFillColor(10);
1012 pLegendFitM.SetBorderSize(1);
1014 TLegend pLegendFitW(0.4,0.53,0.6,0.93);
1015 pLegendFitW.SetTextSize(0.03);
1016 pLegendFitW.SetFillColor(10);
1017 pLegendFitW.SetBorderSize(1);
1019 TCanvas *cFitSM =
new TCanvas(
"cFitSM",
"cFitSM",1200,600);
1020 cFitSM->Divide(2, 1);
1029 gMass[0]->SetMaximum(180);
1030 gMass[0]->SetMinimum(120);
1034 gMass[0]->SetMaximum(660);
1035 gMass[0]->SetMinimum(420);
1038 gMass[0]->SetMarkerStyle(modStyleIndex[0]);
1039 gMass[0]->SetMarkerColor(modColorIndex[0]);
1040 gMass[0]->SetLineColor(modColorIndex[0]);
1042 gMass[0]->Draw(
"AP");
1044 pLegendFitM.AddEntry(gMass[0],Form(
"%s",leg[0].
Data()),
"P");
1048 for(
Int_t icomb = 1; icomb <11; icomb++)
1051 pLegendFitM.AddEntry(gMass[icomb],Form(
"%s",leg[icomb].
Data()),
"P");
1052 gMass[icomb]->SetMarkerStyle(modStyleIndex[icomb]);
1053 gMass[icomb]->SetMarkerColor(modColorIndex[icomb]);
1054 gMass[icomb]->SetLineColor(modColorIndex[icomb]);
1055 gMass[icomb]->Draw(
"P");
1059 gMass[0]->Draw(
"P");
1060 if(ncomb > 1) pLegendFitM.Draw();
1068 gWidth[0]->SetMaximum(16);
1069 gWidth[0]->SetMinimum(6);
1073 gWidth[0]->SetMaximum(60);
1074 gWidth[0]->SetMinimum(0);
1077 gWidth[0]->SetMarkerStyle(modStyleIndex[0]);
1078 gWidth[0]->SetMarkerColor(modColorIndex[0]);
1079 gWidth[0]->SetLineColor (modColorIndex[0]);
1081 gWidth[0]->Draw(
"AP");
1082 pLegendFitW.AddEntry(gWidth[0],Form(
"%s",leg[0].
Data()),
"P");
1086 for(
Int_t icomb = 1; icomb <11; icomb++)
1089 pLegendFitW.AddEntry(gWidth[icomb],Form(
"%s",leg[icomb].
Data()),
"P");
1090 gWidth[icomb]->SetMarkerStyle(modStyleIndex[icomb]);
1091 gWidth[icomb]->SetMarkerColor(modColorIndex[icomb]);
1092 gWidth[icomb]->SetLineColor(modColorIndex[icomb]);
1093 gWidth[icomb]->Draw(
"P");
1098 gWidth[0]->Draw(
"P");
1099 if(ncomb > 1) pLegendFitW.Draw();
1101 cFitSM->Print(Form(
"IMfigures/%s_%s_SingleSM_MassWidth_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1228 TLegend pLegendFitPt(0.6,0.6,0.9,0.9);
1229 pLegendFitPt.SetTextSize(0.03);
1230 pLegendFitPt.SetFillColor(10);
1231 pLegendFitPt.SetBorderSize(1);
1233 TCanvas *cFitPt =
new TCanvas(
"cFitPt",
"cFitPt",600,600);
1234 cFitPt->Divide(1, 1);
1242 gPt[0]->SetTitle(Form(
" Number of %s vs p_{T}, %s ",particle.Data(),comment[0].Data()));
1243 gPt[0]->SetMarkerStyle(modStyleIndex[0]);
1244 gPt[0]->SetMarkerColor(modColorIndex[0]);
1245 gPt[0]->SetLineColor(modColorIndex[0]);
1258 cFitPt->Print(Form(
"IMfigures/%s_%s_Pt_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1327 TCanvas *cFitPtBC =
new TCanvas(
"cFitPtBC",
"cFitPtBC",600,600);
1328 cFitPtBC->Divide(1, 1);
1337 gPtBC[0]->SetTitle(Form(
" Number of %s vs p_{T}, bin counting, %s ",particle.Data(),comment[0].Data()));
1338 gPtBC[0]->SetMarkerStyle(modStyleIndex[0]);
1339 gPtBC[0]->SetMarkerColor(modColorIndex[0]);
1340 gPtBC[0]->SetLineColor(modColorIndex[0]);
1350 gPtBC[0]->Draw(
"AP");
1352 gPt[0]->SetMarkerColor(2);
1353 gPt[0]->SetMarkerStyle(22);
1358 gPtBCPu->SetMaximum(1e-1);
1359 gPtBCPu->SetMinimum(1e-6);
1377 TLegend legBC(0.5,0.5,0.9,0.9);
1378 legBC.AddEntry(gPt[0],
"Fit",
"P");
1379 legBC.AddEntry(gPtBC[0],
"Integrated",
"P");
1380 legBC.AddEntry(gPtBCPu ,
"Integrated pure",
"P");
1384 cFitPtBC->Print(Form(
"IMfigures/%s_%s_PtBC_%s_%s.%s",prodname.Data(),
calorimeter.Data(),part.Data(),
filename.Data(),fileFormat.Data()));
1391 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");
1393 for(
Int_t icomb = 0; icomb <ncomb; icomb++)
1395 for(
Int_t ipt = 0; ipt < nPt; ipt++)
1398 if(hIM[icomb][ipt]) { hIM[icomb][ipt]->Write(); }
1405 if(hMix [icomb][ipt]) { hMix [icomb][ipt]->Write();}
1406 if(hMixCorrected[icomb][ipt]) { hMixCorrected[icomb][ipt]->Write();}
1407 if(hRatio [icomb][ipt]) { hRatio [icomb][ipt]->Write();}
1408 if(hSignal [icomb][ipt]) { hSignal [icomb][ipt]->Write();}
1412 gPt [icomb]->Write();
1413 gMass [icomb]->Write();
1414 gWidth[icomb]->Write();
1415 if(
mix) gPtBC [icomb]->Write();
1418 if(gEff) gEff->Write();
1419 if(gPtBCPu) gPtBCPu->Write();
1422 if(hMi[0])hMi[0]->Write();
1434 fil =
new TFile(Form(
"%s/%s.root",prodname.Data(),filename.Data()),
"read");
1436 if ( !
fil )
return kFALSE;
1438 direc = (TDirectoryFile*)
fil->Get(dirName);
1440 if ( !
direc && dirName !=
"" )
return kFALSE;
1449 if ( !lis && listName !=
"")
return kFALSE;
1452 nEvt = ((TH1F*)
fil->Get(
"hNEvents"))->GetEntries();
1454 nEvt = ((TH1F*) lis->FindObject(
"hNEvents"))->GetEntries();
1456 printf(
"nEvt = %d\n",
nEvt);
1483 printf(
"*** <<< Set Crystal Ball!!! >>> ***\n");
1490 fitfun->SetParLimits(1, 0.105,0.185);
1491 fitfun->SetParLimits(2, 0.001,0.040);
1496 fitfun->SetParLimits(2, 0.105,0.185);
1497 fitfun->SetParLimits(1, 0.001,0.040);
1498 fitfun->SetParLimits(3, 0.001,0.040);
1499 fitfun->SetParLimits(4, 0,10);
1500 fitfun->SetParLimits(5, 1,1.e+6);
1516 fitfun->SetParLimits(1, 0.20,0.80);
1517 fitfun->SetParLimits(2, 0.001,0.06);
1521 fitfun->SetLineColor(kRed);
1524 fitfun->SetParName(0,
"A");
1525 fitfun->SetParName(1,
"m_{0}");
1526 fitfun->SetParName(2,
"#sigma");
1532 fitfun->SetParName(5,
"a_{2}");
1541 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1542 (2*par[2]*par[2]) );
1543 Double_t back = par[3] + par[4]*x[0] + par[5]*x[0]*x[0] + par[6]*x[0]*x[0]*x[0];
1550 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1551 (2*par[2]*par[2]) );
1552 Double_t back = par[3] + par[4]*x[0] + par[5]*x[0]*x[0];
1559 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1560 (2*par[2]*par[2]) );
1561 Double_t back = par[3] + par[4]*x[0];
1568 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
1569 (2*par[2]*par[2]) );
1577 if ((x[0] > 0.425 && x[0] < 0.65) ) {
1582 return par[0] + par[1]*x[0];
1588 if ((x[0] > 0.07 && x[0] < 0.2)) {
1593 return par[0] + par[1]*x[0];
1607 Double_t A = pow(n/fabs(alpha),n)*exp(-pow(alpha,2)/2);
1608 Double_t B = n/fabs(alpha) - fabs(alpha);
1610 if ((x[0]-mean)/sigma>-alpha)
1611 return N*width*TMath::Gaus(x[0],mean,sigma,1);
1613 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="")
Float_t nPairCut
Plot also many SM combinations.
Bool_t drawAllCombi
Apply Root method Sumw2()
Double_t pi0massP3(Double_t *x, Double_t *par)
void InvMassFit(TString prodname="LHC18c3_NystromOn", TString filename="AnalysisResults", TString histoDir="Pi0IM_GammaTrackCorr_EMCAL", TString histoList="default", TString calorimeter="DCAL", TString particle="Pi0", Bool_t mixed=0, Int_t pol=1, Int_t ncomb=1, Float_t nPairMin=20, TString fileFormat="eps")
Int_t nEvt
Minimum number of cluster pairs in pi0 or eta window.
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)
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)