1 DrawPi0Flow(const TString filename = "AnalysisResults.root",
2 const TString eventType = "SemiCentral")
7 gStyle->SetPadGridX(1);
8 gStyle->SetPadGridY(1);
9 TFile * f = new TFile(filename) ;
11 if (eventType.Contains("Central"))
12 listName = Form("AliPHOSPi0Flow/PHOSPi0FlowCoutput1",
13 eventType.Data(),eventType.Data());
15 listName = Form("AliPHOSPi0Flow_%s/AliPHOSPi0Flow_%sCoutput1",
16 eventType.Data(),eventType.Data());
17 cout << listName << endl;
18 TList *histoList = (TList*)f->Get(listName.Data()); // lego train
20 TH1F *hev = (TH1F*)histoList->FindObject("hTotSelEvents") ;
21 TH2F* hZvertex = (TH2F*)histoList->FindObject("hZvertex");
22 TH2F* hCenTrack = (TH2F*)histoList->FindObject("hCenTrack");
23 TH2F *hCenPHOS = (TH2F*)histoList->FindObject("hCenPHOS") ;
24 TH2F* phiRP = (TH2F*)histoList->FindObject("phiRP");
25 TH2F* phiRPflat = (TH2F*)histoList->FindObject("phiRPflat");
26 TH2F* phiRPV0A = (TH2F*)histoList->FindObject("phiRPV0A");
27 TH2F* phiRPV0C = (TH2F*)histoList->FindObject("phiRPV0C");
28 TH2F* phiRPV0Aflat= (TH2F*)histoList->FindObject("phiRPV0Aflat");
29 TH2F* phiRPV0Cflat= (TH2F*)histoList->FindObject("phiRPV0Cflat");
30 TH2F* hCellNXZM1 = (TH2F*)histoList->FindObject("hCellNXZM1");
31 TH2F* hCellNXZM2 = (TH2F*)histoList->FindObject("hCellNXZM2");
32 TH2F* hCellNXZM3 = (TH2F*)histoList->FindObject("hCellNXZM3");
33 TH2F *hPi0All_cen0 = (TH2F*)histoList->FindObject("hPi0All_cen0");
34 TH2F *hPi0Allcore_cen0 = (TH2F*)histoList->FindObject("hPi0Allcore_cen0");
35 TH2F *hPi0M11 = (TH2F*)histoList->FindObject("hPi0M11");
36 TH2F *hPi0M22 = (TH2F*)histoList->FindObject("hPi0M22");
37 TH2F *hPi0M33 = (TH2F*)histoList->FindObject("hPi0M33");
39 //-----------------------------------------------------------------------------
40 TCanvas *c1 = new TCanvas("c1","Event selection");
41 hev->GetXaxis()->SetRangeUser(0,6);
42 hev->GetXaxis()->SetBinLabel(1,"Total");
43 hev->GetXaxis()->SetBinLabel(2,"Has Vertex");
44 hev->GetXaxis()->SetBinLabel(3,"abs(z_vertex) < 10.");
45 hev->GetXaxis()->SetBinLabel(4,"Has Centrality");
46 hev->GetXaxis()->SetBinLabel(5,"C. upper edge");
47 hev->GetXaxis()->SetBinLabel(6,"C. lower edge");
48 hev->GetXaxis()->SetBinLabel(7,"Has PClusters");
49 hev->SetYTitle("N_{events}");
50 hev->GetYaxis()->SetTitleOffset(1.2);
52 c1->Print("PHOS_EvSel.eps");
54 //-----------------------------------------------------------------------------
55 TCanvas *c2 = new TCanvas("c2","Track multiplicity vs centrality");
57 hCenTrack->SetXTitle("centrality (%)");
58 hCenTrack->SetYTitle("Number of tracks");
59 hCenTrack->Draw("colz");
60 c2->Print("TrackMultCentrality.eps");
62 //-----------------------------------------------------------------------------
63 TCanvas *c3 = new TCanvas("c3","PHOS multiplicity vs centrality");
65 hCenPHOS->SetXTitle("centrality (%)");
66 hCenPHOS->SetYTitle("Number of PHOS clusters");
67 hCenPHOS->Draw("colz");
68 c3->Print("PHOSMultCentrality.eps");
70 //-----------------------------------------------------------------------------
71 TCanvas *c3cent = new TCanvas("c3cent","Centrality");
72 hCenPHOS->SetXTitle("centrality (%)");
73 hCenPHOS->SetYTitle("Number of PHOS clusters");
74 TH1D *hCent = hCenPHOS->ProjectionX();
75 hCent->SetTitle("Centrality");
77 c3cent->Print("Centrality.eps");
79 //-----------------------------------------------------------------------------
80 TCanvas *c4V0 = new TCanvas("c4V0","RP phi in VZERO");
81 phiRPV0A1 = phiRPV0A->ProjectionX();
82 phiRPV0C1 = phiRPV0C->ProjectionX();
83 phiRPV0A1->SetLineColor(kRed);
84 phiRPV0C1->SetLineColor(kBlue);
85 phiRPV0A1->SetXTitle("VZERO RP #phi");
86 phiRPV0C1->SetXTitle("VZERO RP #phi");
87 phiRPV0A1->SetMinimum(phiRPV0A1->GetMinimum()*0.98);
88 phiRPV0A1->SetMaximum(phiRPV0A1->GetMaximum()*1.02);
90 phiRPV0C1->Draw("same");
91 leg = new TLegend(0.2,0.8,0.39,0.89);
92 leg->SetFillColor(kWhite);
93 leg->SetBorderSize(1);
94 leg->AddEntry(phiRPV0A1,"V0A","l");
95 leg->AddEntry(phiRPV0C1,"V0C","l");
97 c4V0->Print("V0RPphi.eps");
99 //-----------------------------------------------------------------------------
100 TCanvas *c4V0flat = new TCanvas("c4V0flat","RP phi in VZERO flattened");
101 phiRPV0Aflat1 = phiRPV0Aflat->ProjectionX();
102 phiRPV0Cflat1 = phiRPV0Cflat->ProjectionX();
103 phiRPV0Aflat1->SetLineColor(kRed);
104 phiRPV0Cflat1->SetLineColor(kBlue);
105 phiRPV0Aflat1->SetXTitle("VZERO RP #phi");
106 phiRPV0Cflat1->SetXTitle("VZERO RP #phi");
107 phiRPV0Aflat1->Draw();
108 phiRPV0Cflat1->Draw("same");
109 leg = new TLegend(0.2,0.8,0.39,0.89);
110 leg->SetFillColor(kWhite);
111 leg->SetBorderSize(1);
112 leg->AddEntry(phiRPV0Aflat1,"V0A","l");
113 leg->AddEntry(phiRPV0Cflat1,"V0C","l");
115 c4V0flat->Print("V0RPphiFlat.eps");
117 //-----------------------------------------------------------------------------
118 TCanvas *c4TPC = new TCanvas("c4TPC","TPC RP phi");
119 phiRP1 = phiRP->ProjectionX();
120 phiRP1->SetXTitle("TPC RP #phi");
122 c4TPC->Print("TPCRPphi.eps");
124 //-----------------------------------------------------------------------------
125 TCanvas *c4TPCflat = new TCanvas("c4TPCflat","TPC RP phi flattened");
126 phiRPflat1 = phiRPflat->ProjectionX();
127 phiRPflat1->SetXTitle("TPC RP #phi");
129 c4TPCflat->Print("TPCRPphiFlat.eps");
131 //-----------------------------------------------------------------------------
132 TCanvas *c5 = new TCanvas("c5","XZ in M1");
134 hCellNXZM1->SetTitle("Cell occupancy in module 4");
135 hCellNXZM1->SetXTitle("X (cells)");
136 hCellNXZM1->SetYTitle("X (cells)");
137 hCellNXZM1->Draw("colz");
138 c5->Print("PHOS_XYM4.eps");
140 //-----------------------------------------------------------------------------
141 TCanvas *c6 = new TCanvas("c6","XZ in M2");
143 hCellNXZM2->SetTitle("Cell occupancy in module 3");
144 hCellNXZM2->SetXTitle("X (cells)");
145 hCellNXZM2->SetYTitle("X (cells)");
146 hCellNXZM2->Draw("colz");
147 c6->Print("PHOS_XYM3.eps");
149 //-----------------------------------------------------------------------------
150 TCanvas *c7 = new TCanvas("c7","XZ in M3");
152 hCellNXZM3->SetTitle("Cell occupancy in module 2");
153 hCellNXZM3->SetXTitle("X (cells)");
154 hCellNXZM3->SetYTitle("X (cells)");
155 hCellNXZM3->Draw("colz");
156 c7->Print("PHOS_XYM2.eps");
158 //-----------------------------------------------------------------------------
159 TCanvas *c8 = new TCanvas("c8","gg mass vs pt, PID=All");
161 hPi0All_cen0->SetTitle("PID: All");
162 hPi0All_cen0->SetXTitle("M_{#gamma#gamma} (GeV/c^{2})");
163 hPi0All_cen0->SetYTitle("p_{T} (GeV/c)");
164 hPi0All_cen0->Draw("colz");
165 c8->Print("PHOS_MggAll.eps");
167 //-----------------------------------------------------------------------------
168 TCanvas *c9 = new TCanvas("c9","gg mass vs pt, PID=Allcore");
170 hPi0Allcore_cen0->SetTitle("PID: Allcore");
171 hPi0Allcore_cen0->SetXTitle("M_{#gamma#gamma} (GeV/c^{2})");
172 hPi0Allcore_cen0->SetYTitle("p_{T} (GeV/c)");
173 hPi0Allcore_cen0->Draw("colz");
174 c9->Print("PHOS_MggAllcore.eps");
176 //-----------------------------------------------------------------------------
177 TCanvas *c10 = new TCanvas("c10","gg mass in M1");
178 hM1 = hPi0M11->ProjectionX("m1",31,400);
179 hM1->SetAxisRange(0.,0.29.);
180 hM1->SetTitle("#gamma#gamma in module 1");
183 TPaveText *txtM1 = new TPaveText(0.6,0.7,0.89,0.89,"NDC");
184 txtM1->SetFillColor(kWhite);
185 txtM1->SetBorderSize(0);
186 txtM1->AddText("p_{T}>3 GeV/c");
187 txtM1->AddText(Form("M_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
188 hM1->GetFunction("fitfun")->GetParameter(1)*1000,
189 hM1->GetFunction("fitfun")->GetParError (1)*1000));
190 txtM1->AddText(Form("#sigma_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
191 hM1->GetFunction("fitfun")->GetParameter(2)*1000,
192 hM1->GetFunction("fitfun")->GetParError (2)*1000));
194 c10->Print("PHOS_MggM1.eps");
196 //-----------------------------------------------------------------------------
197 TCanvas *c11 = new TCanvas("c11","gg mass in M2");
198 hM2 = hPi0M22->ProjectionX("m2",31,400);
199 hM2->SetAxisRange(0.,0.29.);
200 hM2->SetTitle("#gamma#gamma in module 2");
203 TPaveText *txtM2 = new TPaveText(0.6,0.7,0.89,0.89,"NDC");
204 txtM2->SetFillColor(kWhite);
205 txtM2->SetBorderSize(0);
206 txtM2->AddText("p_{T}>3 GeV/c");
207 txtM2->AddText(Form("M_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
208 hM2->GetFunction("fitfun")->GetParameter(1)*1000,
209 hM2->GetFunction("fitfun")->GetParError (1)*1000));
210 txtM2->AddText(Form("#sigma_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
211 hM2->GetFunction("fitfun")->GetParameter(2)*1000,
212 hM2->GetFunction("fitfun")->GetParError (2)*1000));
214 c11->Print("PHOS_MggM2.eps");
216 //-----------------------------------------------------------------------------
217 TCanvas *c12 = new TCanvas("c12","gg mass in M3");
218 hM3 = hPi0M33->ProjectionX("m3",31,400);
219 hM3->SetAxisRange(0.,0.29.);
220 hM3->SetTitle("#gamma#gamma in module 3");
223 TPaveText *txtM3 = new TPaveText(0.6,0.7,0.89,0.89,"NDC");
224 txtM3->SetFillColor(kWhite);
225 txtM3->SetBorderSize(0);
226 txtM3->AddText("p_{T}>3 GeV/c");
227 txtM3->AddText(Form("M_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
228 hM3->GetFunction("fitfun")->GetParameter(1)*1000,
229 hM3->GetFunction("fitfun")->GetParError (1)*1000));
230 txtM3->AddText(Form("#sigma_{#pi^{0}} = %.2f #pm %.2f MeV/c^{2}",
231 hM3->GetFunction("fitfun")->GetParameter(2)*1000,
232 hM3->GetFunction("fitfun")->GetParError (2)*1000));
234 c12->Print("PHOS_MggM3.eps");
237 //=============================================================================
238 Fit1Pi0(const TH1D *hMass = 0,
239 const Int_t polN = 1)
241 // This script takes a 2D histogram hMassPt with invariant mass vs
242 // pt of cluster pairs:
243 // - slices them along pt bins,
244 // - fits 1D invariant mass specrta by Gaussian+polynomial
245 // - calculates the number of pi0's as an integral of Gaussian
246 // - calculates background under pi0 as an integral of polynomial
250 fitfun = new TF1("fitfun",pi0massP1,0.1,0.7,5);
252 fitfun = new TF1("fitfun",pi0massP2,0.1,0.7,6);
253 else if (polN == 101)
254 fitfun = new TF1("fitfun",CombiBG,0.0,1.0,6);
255 fitfun->SetLineColor(kRed);
256 fitfun->SetLineWidth(2);
259 fitfun->SetParName(0,"A");
260 fitfun->SetParName(1,"m_{0}");
261 fitfun->SetParName(2,"#sigma");
262 fitfun->SetParName(3,"a_{0}");
263 fitfun->SetParName(4,"a_{1}");
265 fitfun->SetParName(5,"a_{2}");
267 fitfun->SetParLimits(0, 1.000,1.e+5);
268 fitfun->SetParLimits(1, 0.12,0.14);
269 fitfun->SetParLimits(2, 0.003,0.020);
271 else if (polN == 101) {
272 fitfun->SetParName(0,"a_{0}");
273 fitfun->SetParName(1,"a_{1}");
274 fitfun->SetParName(2,"a_{2}");
275 fitfun->SetParName(3,"a_{3}");
276 fitfun->SetParName(4,"a_{4}");
277 fitfun->SetParName(5,"a_{5}");
280 Int_t nM = hMass->GetNbinsX();
281 Float_t mMin = hMass->GetXaxis()->GetXmin();
282 Float_t mMax = hMass->GetXaxis()->GetXmax();
283 Float_t mStep = (mMax-mMin)/nM;
285 hMass->SetXTitle("M_{#gamma#gamma}, GeV/c");
286 hMass->SetAxisRange(0.01,1.0);
287 Float_t nPi0Max = hMass->Integral(hMass->FindBin(0.30),
288 hMass->FindBin(0.40));
289 for (Int_t iM=1; iM<nM; iM++)
290 if (hMass->GetBinContent(iM) == 0) hMass->SetBinError(iM,1.0);
291 hMass->SetMinimum(0.01);
293 fitfun->SetParameters(nPi0Max/4,0.135,0.010,1.,0.);
295 fitfun->SetParameters(nPi0Max/4,0.135,0.010,1.,0.,0.);
296 // else if (polN == 101)
297 // fitfun->SetParameters(1.,1.,100.,1.,1.,10.);
298 Double_t mFitMin, mFitMax;
301 hMass->Fit("fitfun","Q","",mFitMin,mFitMax);
302 hMass->SetAxisRange(mFitMin,mFitMax);
303 fitfun->SetNpx(1./mStep);
304 // TH1F *bgFun = fitfun->GetHistogram();
305 // hMass->Add(bgFun,-1.);
308 //-----------------------------------------------------------------------------
309 Double_t pi0massP2(Double_t *x, Double_t *par)
311 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
313 Double_t back = par[3] + par[4]*x[0] + par[5]*x[0]*x[0];
317 //-----------------------------------------------------------------------------
318 Double_t pi0massP1(Double_t *x, Double_t *par)
320 Double_t gaus = par[0] * TMath::Exp( -(x[0]-par[1])*(x[0]-par[1]) /
322 Double_t back = par[3] + par[4]*x[0];
326 //-----------------------------------------------------------------------------
327 Double_t CombiBG(Double_t *x, Double_t *par)
329 if (x[0] > 0.12 && x[0] < 0.15) {
333 Double_t back = par[0] + par[1]*x[0]
334 + par[2]*TMath::Power(x[0],2)
335 + par[3]*TMath::Power(x[0],3)
336 + par[4]*TMath::Power(x[0],4)
337 + par[5]*TMath::Power(x[0],5);
341 //-----------------------------------------------------------------------------
342 Double_t CombiBGExp(Double_t *x, Double_t *par)
344 if (x[0] > 0.12 && x[0] < 0.15) {
348 Double_t back = par[0] * TMath::Power(x[0],1.5) * TMath::Exp(-par[1]*x[0]);