5 Bool_t kVZEROrescorr = kTRUE; // VZERO resolution corrections
6 Bool_t kNUAcorr = kTRUE; // NUA corrections
7 Bool_t kNUOcorr = kFALSE; // Not Uniform Occupancy (TOF) corrections
8 Bool_t kPIDcorr = kFALSE; // PID corrections
9 Bool_t kFEEDcorr = kFALSE; // antiproton feed-down corrections
10 Bool_t kCleanMemory = kTRUE; // if kFALSE take care of the large numbers of TCanvases
12 TH1D *hNUO[8]; // NUO corrections
15 void extractFlowVZERO(Int_t icentr,const char *type="",Int_t arm=2,Float_t pTh=0.8,Bool_t isMC=kFALSE,Int_t addbin=0);
16 TProfile *extractFlowVZEROsingle(Int_t icentr,Int_t spec,Int_t arm=2,Bool_t isMC=kFALSE,Float_t pTh=0.9,Int_t addbin=0,const char *nameSp="",Float_t detMin=0,Float_t detMax=1,Int_t chMin=-1,Int_t chMax=1);
17 void compareTPCTOF(Int_t icentr,Int_t spec,Int_t arm=2,Float_t pTh=0.9,Int_t addbin=0);
18 void plotQApid(Int_t ic,Float_t pt,Int_t addbin=0);
22 gSystem->Load("libVMC.so");
23 gSystem->Load("libPhysics.so");
24 gSystem->Load("libTree.so");
25 gSystem->Load("libSTEERBase.so");
26 gSystem->Load("libANALYSIS.so");
27 gSystem->Load("libAOD.so");
28 gSystem->Load("libESD.so");
29 gSystem->Load("libANALYSIS.so");
30 gSystem->Load("libANALYSISalice.so");
31 gSystem->Load("libCORRFW.so");
32 gSystem->Load("libNetx.so");
33 gSystem->Load("libPWGflowBase.so");
34 gSystem->Load("libPWGflowTasks.so");
40 void extractFlowVZERO(Int_t icentr,const char *type,Int_t arm,Float_t pTh,Bool_t isMC,Int_t addbin){
44 snprintf(name,100,"AnalysisResults%s.root",type);
45 if(!fo) fo = new TFile(name);
49 Int_t cMin[] = {0,5,10,20,30,40,50,60,70};
50 Int_t cMax[] = {5,10,20,30,40,50,60,70,80};
52 if(kNUOcorr){ // Compute correction for NUO in TOF
53 compareTPCTOF(icentr,0,arm,pTh,addbin);
54 // compareTPCTOF(icentr,1,arm,pTh,addbin);
55 // compareTPCTOF(icentr,2,arm,pTh,addbin);
56 // compareTPCTOF(icentr,3,arm,pTh,addbin);
57 // compareTPCTOF(icentr,4,arm,pTh,addbin);
61 pAll=extractFlowVZEROsingle(icentr,0,arm,0,pTh,addbin,"all",0,1);
62 pAll->SetMarkerStyle(24);
63 TProfile *pPiTOF,*pPiTPC,*pPiTPC2;
64 pPiTOF=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTOF",1,1);
65 pPiTPC=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTPC",0,0);
66 pPiTPC2=extractFlowVZEROsingle(icentr,1,arm,0,pTh,addbin,"piTPC2",2,2);
69 TH1D *hPi = pPiTOF->ProjectionX("hPi");
71 hPi->SetMarkerColor(4);
72 hPi->SetMarkerStyle(20);
73 for(Int_t i=1;i <=hPi->GetNbinsX();i++){
74 Float_t x = hPi->GetBinCenter(i);
76 hPi->SetBinContent(i,0);
77 hPi->SetBinError(i,0);
80 hPi->SetBinContent(i,pPiTPC->GetBinContent(i));
81 hPi->SetBinError(i,pPiTPC->GetBinError(i));
85 hPi->SetBinContent(i,pPiTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
86 hPi->SetBinError(i,pPiTOF->GetBinError(i));
89 hPi->SetBinContent(i,pPiTOF->GetBinContent(i));
90 hPi->SetBinError(i,pPiTOF->GetBinError(i));
95 TProfile *pElTOF,*pElTPC,*pElTPC2;
96 pElTOF=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTOF",1,1);
97 pElTPC=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTPC",0,0);
98 pElTPC2=extractFlowVZEROsingle(icentr,4,arm,0,pTh,addbin,"piTPC2",2,2);
101 TH1D *hEl = pElTOF->ProjectionX("hEl");
102 hEl->SetLineColor(6);
103 hEl->SetMarkerColor(6);
104 hEl->SetMarkerStyle(20);
105 for(Int_t i=1;i <=hEl->GetNbinsX();i++){
106 Float_t x = hEl->GetBinCenter(i);
108 hEl->SetBinContent(i,0);
109 hEl->SetBinError(i,0);
112 hEl->SetBinContent(i,pElTPC->GetBinContent(i));
113 hEl->SetBinError(i,pElTPC->GetBinError(i));
117 hEl->SetBinContent(i,pElTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
118 hEl->SetBinError(i,pElTOF->GetBinError(i));
121 hEl->SetBinContent(i,pElTOF->GetBinContent(i));
122 hEl->SetBinError(i,pElTOF->GetBinError(i));
127 TProfile *pKTOF,*pKTPC,*pKTPC2;
128 pKTOF=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTOF",1,1);
129 pKTPC=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTPC",0,0);
130 pKTPC2=extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kaTPC2",2,2);
133 TH1D *hK = pKTOF->ProjectionX("hKa");
135 hK->SetMarkerColor(1);
136 hK->SetMarkerStyle(21);
137 for(Int_t i=1;i <=hK->GetNbinsX();i++){
138 Float_t x = hK->GetBinCenter(i);
140 hK->SetBinContent(i,0);
141 hK->SetBinError(i,0);
144 hK->SetBinContent(i,pKTPC->GetBinContent(i));
145 hK->SetBinError(i,pKTPC->GetBinError(i));
149 hK->SetBinContent(i,pKTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
150 hK->SetBinError(i,pKTOF->GetBinError(i));
153 hK->SetBinContent(i,pKTOF->GetBinContent(i));
154 hK->SetBinError(i,pKTOF->GetBinError(i));
159 TProfile *pPrTOF,*pPrTOF2,*pPrTPC,*pPrTPC2;
160 pPrTOF=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTOF",1,1,-1,-1);
161 pPrTOF2=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTOF2",1,1,-1,1);
162 pPrTPC=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTPC",0,0,-1,-1);
163 pPrTPC2=extractFlowVZEROsingle(icentr,3,arm,0,pTh,addbin,"prTPC2",2,2,-1,-1);
164 pPrTPC->Add(pPrTPC2);
166 TH1D *hPr = pPrTOF->ProjectionX("hPr");
167 hPr->SetLineColor(2);
168 hPr->SetMarkerColor(2);
169 hPr->SetMarkerStyle(22);
170 for(Int_t i=1;i <=hPr->GetNbinsX();i++){
171 Float_t x = hPr->GetBinCenter(i);
173 hPr->SetBinContent(i,0);
174 hPr->SetBinError(i,0);
177 hPr->SetBinContent(i,pPrTPC->GetBinContent(i));
178 hPr->SetBinError(i,pPrTPC->GetBinError(i));
183 hPr->SetBinContent(i,pPrTOF->GetBinContent(i) + hNUO[0]->GetBinContent(i));
184 hPr->SetBinError(i,pPrTOF->GetBinError(i));
187 hPr->SetBinContent(i,pPrTOF->GetBinContent(i));
188 hPr->SetBinError(i,pPrTOF->GetBinError(i));
193 hPr->SetBinContent(i,pPrTOF2->GetBinContent(i) + hNUO[0]->GetBinContent(i));
194 hPr->SetBinError(i,pPrTOF2->GetBinError(i));
197 hPr->SetBinContent(i,pPrTOF2->GetBinContent(i));
198 hPr->SetBinError(i,pPrTOF2->GetBinError(i));
215 TFile *fPidTOF = new TFile("$ALICE_ROOT/PWGCF/FLOW/other/BayesianPIDcontTPCTOF.root");
216 TFile *fPidTPC = new TFile("$ALICE_ROOT/PWGCF/FLOW/other/BayesianPIDcontTPC.root");
218 sprintf(name,"Pi_IDas_Picentr%i_pth%4.2f",icentr,pTh);
219 TH1D *hPidPiPi=(TH1D *) fPidTOF->Get(name);
220 sprintf(name,"Pi_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
221 TH1D *hPidPiEl=(TH1D *) fPidTOF->Get(name);
222 sprintf(name,"Pi_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
223 TH1D *hPidPiKa=(TH1D *) fPidTOF->Get(name);
224 sprintf(name,"Pi_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
225 TH1D *hPidPiPr=(TH1D *) fPidTOF->Get(name);
226 TH1D *hPidAll = new TH1D(*hPidPiPi);
227 hPidAll->Add(hPidPiKa);
228 hPidAll->Add(hPidPiPr);
229 hPidAll->Add(hPidPiEl);
230 hPidPiPi->Divide(hPidAll);
231 hPidPiKa->Divide(hPidAll);
232 hPidPiPr->Divide(hPidAll);
233 hPidPiEl->Divide(hPidAll);
235 sprintf(name,"Pi_IDas_Picentr%i_pth%4.2f",icentr,pTh);
236 TH1D *hPidPiPiTPC=(TH1D *) fPidTPC->Get(name);
237 sprintf(name,"Pi_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
238 TH1D *hPidPiElTPC=(TH1D *) fPidTPC->Get(name);
239 sprintf(name,"Pi_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
240 TH1D *hPidPiKaTPC=(TH1D *) fPidTPC->Get(name);
241 sprintf(name,"Pi_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
242 TH1D *hPidPiPrTPC=(TH1D *) fPidTPC->Get(name);
244 hPidAll->Add(hPidPiPiTPC);
245 hPidAll->Add(hPidPiKaTPC);
246 hPidAll->Add(hPidPiPrTPC);
247 hPidAll->Add(hPidPiElTPC);
248 hPidPiPiTPC->Divide(hPidAll);
249 hPidPiKaTPC->Divide(hPidAll);
250 hPidPiPrTPC->Divide(hPidAll);
251 hPidPiElTPC->Divide(hPidAll);
254 sprintf(name,"Ka_IDas_Picentr%i_pth%4.2f",icentr,pTh);
255 TH1D *hPidKaPi=(TH1D *) fPidTOF->Get(name);
256 sprintf(name,"Ka_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
257 TH1D *hPidKaEl=(TH1D *) fPidTOF->Get(name);
258 sprintf(name,"Ka_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
259 TH1D *hPidKaKa=(TH1D *) fPidTOF->Get(name);
260 sprintf(name,"Ka_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
261 TH1D *hPidKaPr=(TH1D *) fPidTOF->Get(name);
263 hPidAll->Add(hPidKaPi);
264 hPidAll->Add(hPidKaKa);
265 hPidAll->Add(hPidKaPr);
266 hPidAll->Add(hPidKaEl);
267 hPidKaPi->Divide(hPidAll);
268 hPidKaKa->Divide(hPidAll);
269 hPidKaPr->Divide(hPidAll);
270 hPidKaEl->Divide(hPidAll);
272 sprintf(name,"Ka_IDas_Picentr%i_pth%4.2f",icentr,pTh);
273 TH1D *hPidKaPiTPC=(TH1D *) fPidTPC->Get(name);
274 sprintf(name,"Ka_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
275 TH1D *hPidKaElTPC=(TH1D *) fPidTPC->Get(name);
276 sprintf(name,"Ka_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
277 TH1D *hPidKaKaTPC=(TH1D *) fPidTPC->Get(name);
278 sprintf(name,"Ka_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
279 TH1D *hPidKaPrTPC=(TH1D *) fPidTPC->Get(name);
281 hPidAll->Add(hPidKaPiTPC);
282 hPidAll->Add(hPidKaKaTPC);
283 hPidAll->Add(hPidKaPrTPC);
284 hPidAll->Add(hPidKaElTPC);
285 hPidKaPiTPC->Divide(hPidAll);
286 hPidKaKaTPC->Divide(hPidAll);
287 hPidKaPrTPC->Divide(hPidAll);
288 hPidKaElTPC->Divide(hPidAll);
291 sprintf(name,"Pr_IDas_Picentr%i_pth%4.2f",icentr,pTh);
292 TH1D *hPidPrPi=(TH1D *) fPidTOF->Get(name);
293 sprintf(name,"Pr_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
294 TH1D *hPidPrEl=(TH1D *) fPidTOF->Get(name);
295 sprintf(name,"Pr_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
296 TH1D *hPidPrKa=(TH1D *) fPidTOF->Get(name);
297 sprintf(name,"Pr_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
298 TH1D *hPidPrPr=(TH1D *) fPidTOF->Get(name);
300 hPidAll->Add(hPidPrPi);
301 hPidAll->Add(hPidPrKa);
302 hPidAll->Add(hPidPrPr);
303 hPidAll->Add(hPidPrEl);
304 hPidPrPi->Divide(hPidAll);
305 hPidPrKa->Divide(hPidAll);
306 hPidPrPr->Divide(hPidAll);
307 hPidPrEl->Divide(hPidAll);
309 sprintf(name,"Pr_IDas_Picentr%i_pth%4.2f",icentr,pTh);
310 TH1D *hPidPrPiTPC=(TH1D *) fPidTPC->Get(name);
311 sprintf(name,"Pr_IDas_Elcentr%i_pth%4.2f",icentr,pTh);
312 TH1D *hPidPrElTPC=(TH1D *) fPidTPC->Get(name);
313 sprintf(name,"Pr_IDas_Kacentr%i_pth%4.2f",icentr,pTh);
314 TH1D *hPidPrKaTPC=(TH1D *) fPidTPC->Get(name);
315 sprintf(name,"Pr_IDas_Prcentr%i_pth%4.2f",icentr,pTh);
316 TH1D *hPidPrPrTPC=(TH1D *) fPidTPC->Get(name);
318 hPidAll->Add(hPidPrPiTPC);
319 hPidAll->Add(hPidPrKaTPC);
320 hPidAll->Add(hPidPrPrTPC);
321 hPidAll->Add(hPidPrElTPC);
322 hPidPrPiTPC->Divide(hPidAll);
323 hPidPrKaTPC->Divide(hPidAll);
324 hPidPrPrTPC->Divide(hPidAll);
325 hPidPrElTPC->Divide(hPidAll);
327 for(Int_t k=1;k <=hPi->GetNbinsX();k++){
328 Float_t pt = hPi->GetBinCenter(k);
329 Float_t xPi=hPi->GetBinContent(k)*hPidPiPi->Interpolate(pt) + hK->GetBinContent(k)*hPidPiKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidPiPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidPiEl->Interpolate(pt);
331 xPi=hPi->GetBinContent(k)*hPidPiPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidPiKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidPiPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidPiElTPC->Interpolate(pt);
332 Float_t xKa=hPi->GetBinContent(k)*hPidKaPi->Interpolate(pt) + hK->GetBinContent(k)*hPidKaKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidKaPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidKaEl->Interpolate(pt);
334 xKa=hPi->GetBinContent(k)*hPidKaPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidKaKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidKaPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidKaElTPC->Interpolate(pt);
335 Float_t xPr=hPi->GetBinContent(k)*hPidPrPi->Interpolate(pt) + hK->GetBinContent(k)*hPidPrKa->Interpolate(pt) + hPr->GetBinContent(k)*hPidPrPr->Interpolate(pt) + hEl->GetBinContent(k)*hPidPrEl->Interpolate(pt);
337 xPr=hPi->GetBinContent(k)*hPidPrPiTPC->Interpolate(pt) + hK->GetBinContent(k)*hPidPrKaTPC->Interpolate(pt) + hPr->GetBinContent(k)*hPidPrPrTPC->Interpolate(pt) + hEl->GetBinContent(k)*hPidPrElTPC->Interpolate(pt);
339 hPi->SetBinContent(k,hPi->GetBinContent(k)*2 - xPi);
340 hK->SetBinContent(k,hK->GetBinContent(k)*2 - xKa);
341 hPr->SetBinContent(k,hPr->GetBinContent(k)*2 - xPr);
346 // antiproton Feed down
347 TProfile *pFromLambda = extractFlowVZEROsingle(icentr,11,arm,0,pTh,addbin,"pFromLambda",1,1);
348 TProfile *piFromK = extractFlowVZEROsingle(icentr,12,arm,0,pTh,addbin,"piFromK",1,1,1,1);
349 TProfile *pFromLambda2 = extractFlowVZEROsingle(icentr,11,arm,0,0.6,addbin,"pFromLambdanoPID",0,1);
350 TProfile *piFromK2 = extractFlowVZEROsingle(icentr,12,arm,0,0.6,addbin,"piFromKnoPID",0,1);
351 TProfile *piFromK3 = extractFlowVZEROsingle(icentr,12,arm,0,0.6,addbin,"piFromKnoPIDtof",1,1);
353 TH1D *hFeedSyst = NULL;
356 hFeedSyst = new TH1D(*hPr);
357 hFeedSyst->SetName("hFeedSyst");
359 for(Int_t k=1;k <=hPr->GetNbinsX();k++){
360 Float_t contam = 3.23174e-01 * TMath::Exp(- 9.46743e-01 * hPr->GetBinCenter(k));
361 Float_t corr = contam * pFromLambda->GetBinContent(k)/(1-contam);
362 Float_t corrErr = contam * pFromLambda->GetBinError(k)/(1-contam);
363 Float_t value = hPr->GetBinContent(k)/(1-contam) - corr;
364 Float_t valueErr = hPr->GetBinError(k)/(1-contam);
366 hFeedSyst->SetBinContent(k,hPr->GetBinContent(k) - value);
367 hFeedSyst->SetBinContent(k,sqrt(corrErr*corrErr + valueErr*valueErr - hPr->GetBinError(k)*hPr->GetBinError(k)));
369 hPr->SetBinContent(k,value);
370 hPr->SetBinError(k,sqrt(corrErr*corrErr + valueErr*valueErr));
373 hFeedSyst->Divide(hPr);
377 snprintf(name,100,"results%03i-%03iv%i_pTh%3.1f%s.root",cMin[icentr],cMax[icentr+addbin],arm,pTh,type);
378 TFile *fout = new TFile(name,"RECREATE");
379 pAll->ProjectionX()->Write();
384 TH1D *pTmp = extractFlowVZEROsingle(icentr,0,arm,1,pTh,addbin,"allMC",1,1,-1,1)->ProjectionX();
385 pTmp->SetLineColor(6);
386 pTmp->SetMarkerColor(6);
387 pTmp->SetMarkerStyle(24);
389 pTmp = extractFlowVZEROsingle(icentr,1,arm,1,pTh,addbin,"piMC",1,1,-1,1)->ProjectionX();
390 pTmp->SetLineColor(4);
391 pTmp->SetMarkerColor(4);
392 pTmp->SetMarkerStyle(24);
394 pTmp = extractFlowVZEROsingle(icentr,2,arm,1,pTh,addbin,"kaMC",1,1,-1,1)->ProjectionX();
395 pTmp->SetLineColor(1);
396 pTmp->SetMarkerColor(1);
397 pTmp->SetMarkerStyle(25);
399 pTmp = extractFlowVZEROsingle(icentr,3,arm,1,pTh,addbin,"prMC",1,1,-1,-1)->ProjectionX();
400 pTmp->SetLineColor(2);
401 pTmp->SetMarkerColor(2);
402 pTmp->SetMarkerStyle(26);
405 extractFlowVZEROsingle(icentr,2,arm,0,pTh,addbin,"kProf")->Write();
406 extractFlowVZEROsingle(icentr,9,arm,0,pTh,addbin,"ks",0,1,1,1)->Write();
407 extractFlowVZEROsingle(icentr,9,arm,0,pTh,addbin,"ksMy",0,1,-1,-1)->Write();
408 extractFlowVZEROsingle(icentr,10,arm,0,pTh,addbin,"lambda")->Write();
409 pFromLambda->Write();
411 pFromLambda2->Write();
414 if(hFeedSyst) hFeedSyst->Write();
418 TProfile *extractFlowVZEROsingle(Int_t icentr,Int_t spec,Int_t arm,Bool_t isMC,Float_t pTh,Int_t addbin,const char *nameSp,Float_t detMin,Float_t detMax,Int_t chMin,Int_t chMax){
423 // NUA correction currently are missing
427 snprintf(name,100,"AnalysisResults.root");
428 if(!fo) fo = new TFile(name);
429 snprintf(name,100,"contVZEROv%i",arm);
430 TList *cont = (TList *) fo->Get(name);
434 Float_t xMin[5] = {icentr/*centrality bin*/,chMin/*charge*/,pTh/*prob*/,-TMath::Pi()/arm/*Psi*/,detMin/*PID mask*/};
435 Float_t xMax[5] = {icentr+addbin,chMax,1.0,TMath::Pi()/arm,detMax};
439 TProfile *p1 = cont->At(2);
440 TProfile *p2 = cont->At(3);
441 TProfile *p3 = cont->At(4);
443 TH2F *hPsi2DA = cont->At(5);
444 TH2F *hPsi2DC = cont->At(6);
446 TH1D *hPsiA = hPsi2DA->ProjectionY("PsiA",icentr+1,icentr+addbin+1);
447 TH1D *hPsiC = hPsi2DC->ProjectionY("PsiC",icentr+1,icentr+addbin+1);
449 if(!fPsi) fPsi = new TF1("fPsi","pol0",-TMath::Pi()/arm,TMath::Pi()/arm);
450 hPsiA->Fit(fPsi,"0");
451 Float_t offsetA = fPsi->GetParameter(0);
452 hPsiC->Fit(fPsi,"0");
453 Float_t offsetC = fPsi->GetParameter(0);
455 Int_t nbinPsi = hPsiA->GetNbinsX();
457 Float_t *NUAcorrA = new Float_t[nbinPsi];
458 Float_t *NUAcorrC = new Float_t[nbinPsi];
460 for(Int_t i=0;i < nbinPsi;i++){
461 NUAcorrA[i] = offsetA/(hPsiA->GetBinContent(i+1));
462 NUAcorrC[i] = offsetC/(hPsiC->GetBinContent(i+1));
465 Float_t res1=0,res2=0,res3=0;
466 Float_t eres1=0,eres2=0,eres3=0;
468 for(Int_t i = icentr; i <= icentr+addbin;i++){
469 if(p1->GetBinError(i+1)){
470 eres1 += 1./p1->GetBinError(i+1)/p1->GetBinError(i+1);
471 res1 += p1->GetBinContent(i+1)/p1->GetBinError(i+1)/p1->GetBinError(i+1);
473 if(p2->GetBinError(i+1)){
474 eres2 += 1./p2->GetBinError(i+1)/p2->GetBinError(i+1);
475 res2 += p2->GetBinContent(i+1)/p2->GetBinError(i+1)/p2->GetBinError(i+1);
477 if(p3->GetBinError(i+1)){
478 eres3 += 1./p3->GetBinError(i+1)/p3->GetBinError(i+1);
479 res3 += p3->GetBinContent(i+1)/p3->GetBinError(i+1)/p3->GetBinError(i+1);
487 eres1 = sqrt(1./eres1);
488 eres2 = sqrt(1./eres2);
489 eres3 = sqrt(1./eres3);
491 AliFlowVZEROResults *a = (AliFlowVZEROResults *) cont->At(0);
492 AliFlowVZEROResults *b = (AliFlowVZEROResults *) cont->At(1);
494 if(kNUAcorr){ // with NUA corrections
495 pp = a->GetV2reweight(spec,xMin,xMax,3,NUAcorrA);
496 pp2 = b->GetV2reweight(spec,xMin,xMax,3,NUAcorrC);
499 pp = a->GetV2(spec,xMin,xMax);
500 pp2 = b->GetV2(spec,xMin,xMax);
503 Float_t scaling = sqrt(res1*res3/res2);
505 pp->Scale(1./scaling);
508 Float_t err1_2 = eres1*eres1/res1/res1/4 +
509 eres2*eres2/res2/res2/4 +
510 eres3*eres3/res3/res3/4;
511 Float_t err2_2 = err1_2;
512 err1_2 /= scaling*scaling;
513 printf("resolution V0A = %f +/- %f\n",scaling,err1_2);
514 scaling = sqrt(res2*res3/res1);
515 err2_2 /= scaling*scaling;
517 pp2->Scale(1./scaling);
519 printf("resolution V0C =%f +/- %f\n",scaling,err2_2);
530 TProfile *pData = new TProfile(*pp);
532 snprintf(stringa,100,"%sData",nameSp);
533 pData->SetName(stringa);
535 TProfile *pMc = NULL;
541 snprintf(name,100,"contVZEROmc");
542 cont = (TList *) fo->Get(name);
545 AliFlowVZEROResults *c = (AliFlowVZEROResults *) cont->At(0);
546 if(! kCleanMemory) c->GetV2(spec,xMin,xMax)->Draw("SAME");
548 AliFlowVZEROResults *cA;
549 if(fo->Get("contVZEROv2")) cA = (AliFlowVZEROResults *) cont->At(1+2*(arm==3));
550 else cA = (AliFlowVZEROResults *) cont->At(0);
551 AliFlowVZEROResults *cC;
552 if(fo->Get("contVZEROv2")) cC = (AliFlowVZEROResults *) cont->At(2+2*(arm==3));
553 else cC = (AliFlowVZEROResults *) cont->At(1);
555 TProfile *p1mc = cont->At(5+3*(arm==3));
556 TProfile *p2mc = cont->At(6+3*(arm==3));
557 TProfile *p3mc = cont->At(7+3*(arm==3));
559 Float_t resMC1=0,resMC2=0,resMC3=0;
560 Float_t eresMC1=0,eresMC2=0,eresMC3=0;
562 for(Int_t i = icentr; i <= icentr+addbin;i++){
563 if(p1mc->GetBinError(i+1)){
564 eresMC1 += 1./p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1);
565 resMC1 += p1mc->GetBinContent(i+1)/p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1);
567 if(p2mc->GetBinError(i+1)){
568 eresMC2 += 1./p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1);
569 resMC2 += p2mc->GetBinContent(i+1)/p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1);
571 if(p3mc->GetBinError(i+1)){
572 eresMC3 += 1./p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1);
573 resMC3 += p3mc->GetBinContent(i+1)/p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1);
581 eresMC1 = sqrt(1./eresMC1);
582 eresMC2 = sqrt(1./eresMC2);
583 eresMC3 = sqrt(1./eresMC3);
585 ppMC = cA->GetV2(spec,xMin,xMax);
586 ppMC2 = cC->GetV2(spec,xMin,xMax);
588 scaling = sqrt(resMC1*resMC3/resMC2);
589 ppMC->Scale(1./scaling);
591 err1_2 = eresMC1*eresMC1/resMC1/resMC1/4 +
592 eresMC2*eresMC2/resMC2/resMC2/4 +
593 eresMC3*eresMC3/resMC3/resMC3/4;
595 err1_2 /= scaling*scaling;
596 printf("resolution V0A (MC) = %f +/- %f\n",scaling,err1_2);
597 scaling = sqrt(resMC2*resMC3/resMC1);
598 err2_2 /= scaling*scaling;
599 ppMC2->Scale(1./scaling);
600 printf("resolution V0C (MC) =%f +/- %f\n",scaling,err2_2);
602 ppMC->SetName("V0Amc");
603 ppMC2->SetName("V0Cmc");
610 pMc = new TProfile(*ppMC);
612 snprintf(stringa,100,"%sMC",nameSp);
613 pMc->SetName(stringa);
614 pMc->SetLineColor(2);
621 if(pMc && !kCleanMemory){
623 TH1D *hData = pData->ProjectionX();
624 TH1D *hMc = pMc->ProjectionX();
636 if(ppMC) delete ppMC;
637 if(ppMC2) delete ppMC2;
645 void compareTPCTOF(Int_t icentr,Int_t spec,Int_t arm,Float_t pTh,Int_t addbin){
647 Float_t ptMaxFit[8] = {20,0.7,0.55,1.2,2,2,2,2};
649 TProfile *pTPC = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPC",0,0,-1,-1+2*(spec!=3)); // TPC && !TOF (TPC PID)
650 TProfile *pTPC2 = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPCextra",2,2,-1,-1+2*(spec!=3)); //TPC && TOF (TPC PID)
652 TProfile *pTOF = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TOF",1,1,-1,-1+2*(spec!=3)); //TPC && TOF (TPC&TOF PID)
654 if(spec > 0) pTPC->Add(pTPC2);
655 else pTPC->Add(pTOF);
658 snprintf(name,100,"NUO_%i",spec);
660 hNUO[spec] = pTPC->ProjectionX(name);
661 hNUO[spec]->Add(pTOF,-1);
663 if(spec && hNUO[0]) hNUO[spec]->Add(hNUO[0],-1);
671 pTPC->SetLineColor(1);
672 pTOF->SetLineColor(2);
678 if(pTPC) delete pTPC;
679 if(pTPC2) delete pTPC2;
680 if(pTOF) delete pTOF;
684 void plotQApid(Int_t ic,Float_t pt,Int_t addbin){
689 snprintf(name,100,"AnalysisResults.root");
690 if(!fo) fo = new TFile(name);
691 snprintf(name,100,"contVZEROv2");
692 TList *cont = (TList *) fo->Get(name);
693 AliFlowVZEROResults *pidqa = cont->FindObject("qaPID");
694 Float_t xval[2] = {2.,pt+0.00001};
695 Float_t xval2[2] = {2.+addbin,pt+0.00001};
697 TProfile *proTPCpi = pidqa->GetV2(0,xval,xval2);
698 TProfile *proTOFpi = pidqa->GetV2(1,xval,xval2);
699 TProfile *proTPCka = pidqa->GetV2(2,xval,xval2);
700 TProfile *proTOFka = pidqa->GetV2(3,xval,xval2);
701 TProfile *proTPCpr = pidqa->GetV2(4,xval,xval2);
702 TProfile *proTOFpr = pidqa->GetV2(5,xval,xval2);
704 proTPCpi->SetName("hPiTPC");
705 proTOFpi->SetName("hPiTOF");
706 proTPCka->SetName("hKaTPC");
707 proTOFka->SetName("hKaTOF");
708 proTPCpr->SetName("hPrTPC");
709 proTOFpr->SetName("hPrTOF");
711 proTPCpi->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{#pi} (a.u)");
712 proTOFpi->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{#pi} (ps)");
713 proTPCka->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{K} (a.u)");
714 proTOFka->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{K} (ps)");
715 proTPCpr->GetXaxis()->SetTitle("dE/dx - dE/dx_{calc}^{p} (a.u)");
716 proTOFpr->GetXaxis()->SetTitle("t_{tof} - t_{calc}^{p} (ps)");
718 TCanvas *c = new TCanvas("cVproj","cVproj");