QA mods to fix warnings
[u/mrichter/AliRoot.git] / PWG2 / EBYE / LRC / AliLRCProcess.cxx
1 // This class is creatig TH2D histogramms for Nch - Nch , Nch - Pt , Pt - Pt \r
2 // dirtributions for given ETA windows and some supplementary data for Long Range Correlation (LRC) analysis .  \r
3 // Class is designid to work with AliAnalysisTaskLRC\r
4 \r
5 // Author : Andrey Ivanov , St.Peterburg State University\r
6 // Email: Andrey.Ivanov@cern.ch\r
7 \r
8 // Version line : 3.5\r
9 // Version 3.5.5\r
10 \r
11 \r
12 #include "Riostream.h"\r
13 #include "AliLRCProcess.h"\r
14 #include "iostream"\r
15 ClassImp(AliLRCProcess)\r
16 \r
17 AliLRCProcess::AliLRCProcess(Double_t _StartForwardETA,Double_t _EndForwardETA,Double_t _StartBakwardETA,Double_t _EndBakwardETA): fIsEventOpend(kFALSE), fIsOnline(kFALSE), fDisplayInitOnDemandWarning(kTRUE), fEventCount(0),fStartForwardETA(0), fEndForwardETA(0), fStartBakwardETA(0), fEndBakwardETA(0),fHiPt(0),fLoPt(0),fHiMult(0),fLoMult(0),fMultBins(0),fPtBins(0),fSumPtFw(0),  fSumPtBw(0),fNchFw(0), fNchBw(0),fOutList(0), fShortDef(0), fHistPt(0),fHistEta(0),fHistNN(0),fHistPtN(0),fHistPtPt(0),fProfNberr(0),fProfdPtB(0),fProfTestLRC(0),fHistPtForward(0),fHistEtaForward(0),fHistNchForward(0),fHistPtBakward(0),fHistEtaBakward(0),fHistNchBakward(0)\r
18 {\r
19 // Constructor with window setup makes ready-to-run processor\r
20 fEventCount=0;\r
21 \r
22 SetETAWindows( _StartForwardETA, _EndForwardETA,_StartBakwardETA,_EndBakwardETA);\r
23 SetPtRange(0.0,4.0,160);\r
24 SetMultRange(0,100);     \r
25 }\r
26 \r
27 AliLRCProcess::AliLRCProcess(const AliLRCProcess& lrc):\r
28   TObject(),\r
29   fIsEventOpend(lrc.fIsEventOpend),\r
30   fIsOnline(lrc.fIsOnline),\r
31   fDisplayInitOnDemandWarning(lrc.fDisplayInitOnDemandWarning),\r
32   fEventCount(lrc.fEventCount),\r
33   fStartForwardETA(lrc.fStartForwardETA),\r
34   fEndForwardETA(lrc.fEndForwardETA),\r
35   fStartBakwardETA(lrc.fStartBakwardETA),\r
36   fEndBakwardETA(lrc.fEndBakwardETA),\r
37   fHiPt(lrc.fHiPt),\r
38   fLoPt(lrc.fLoPt),\r
39   fHiMult(lrc.fHiMult),\r
40   fLoMult(lrc.fLoMult),\r
41   fMultBins(lrc.fMultBins),\r
42   fPtBins(lrc.fPtBins),\r
43   fSumPtFw(lrc.fSumPtFw),\r
44   fSumPtBw(lrc.fSumPtBw),\r
45   fNchFw(lrc.fNchFw),\r
46   fNchBw(lrc.fNchBw),\r
47   fOutList(lrc.fOutList),\r
48   fShortDef(lrc.fShortDef),\r
49   fHistPt(lrc.fHistPt),\r
50   fHistEta(lrc.fHistEta),\r
51   fHistNN(lrc.fHistNN),\r
52   fHistPtN(lrc.fHistPtN),\r
53   fHistPtPt(lrc.fHistPtPt),\r
54   fProfNberr(lrc.fProfNberr),\r
55   fProfdPtB(lrc.fProfdPtB),\r
56   fProfTestLRC(lrc.fProfTestLRC),\r
57   fHistPtForward(lrc.fHistPtForward),\r
58   fHistEtaForward(lrc.fHistEtaForward),\r
59   fHistNchForward(lrc.fHistNchForward),\r
60   fHistPtBakward(lrc.fHistPtBakward),\r
61   fHistEtaBakward(lrc.fHistEtaBakward),\r
62   fHistNchBakward(lrc.fHistNchBakward) {\r
63   //copy constructor\r
64 }\r
65 \r
66 AliLRCProcess& AliLRCProcess::operator = (const AliLRCProcess& lrc) {\r
67   //assignment operator\r
68   if(this != &lrc) {\r
69     TObject::operator=(lrc);\r
70     fIsEventOpend = lrc.fIsEventOpend;\r
71     fIsOnline = lrc.fIsOnline;\r
72     fDisplayInitOnDemandWarning = lrc.fDisplayInitOnDemandWarning;\r
73     fEventCount = lrc.fEventCount;\r
74     fStartForwardETA = lrc.fStartForwardETA;\r
75     fEndForwardETA = lrc.fEndForwardETA;\r
76     fStartBakwardETA = lrc.fStartBakwardETA;\r
77     fEndBakwardETA = lrc.fEndBakwardETA;\r
78     fHiPt = lrc.fHiPt;\r
79     fLoPt = lrc.fLoPt;\r
80     fHiMult = lrc.fHiMult;\r
81     fLoMult = lrc.fLoMult;\r
82     fMultBins = lrc.fMultBins;\r
83     fPtBins = lrc.fPtBins;\r
84     fSumPtFw = lrc.fSumPtFw;\r
85     fSumPtBw = lrc.fSumPtBw;\r
86     fNchFw = lrc.fNchFw;\r
87     fNchBw = lrc.fNchBw;\r
88     fOutList = lrc.fOutList;\r
89     fShortDef = lrc.fShortDef;\r
90     fHistPt = lrc.fHistPt;\r
91     fHistEta = lrc.fHistEta;\r
92     fHistNN = lrc.fHistNN;\r
93     fHistPtN = lrc.fHistPtN;\r
94     fHistPtPt = lrc.fHistPtPt;\r
95     fProfNberr = lrc.fProfNberr;\r
96     fProfdPtB = lrc.fProfdPtB;\r
97     fProfTestLRC = lrc.fProfTestLRC;\r
98     fHistPtForward = lrc.fHistPtForward;\r
99     fHistEtaForward = lrc.fHistEtaForward;\r
100     fHistNchForward = lrc.fHistNchForward;\r
101     fHistPtBakward = lrc.fHistPtBakward;\r
102     fHistEtaBakward = lrc.fHistEtaBakward;\r
103     fHistNchBakward = lrc.fHistNchBakward;\r
104   }\r
105   return *this;\r
106 }\r
107 \r
108 Bool_t AliLRCProcess::InitDataMembers()\r
109 {\r
110 // This method is actualy creating output histogramms\r
111 // Thist method  is to be called in CreateOutputObjects method of AliAnalysisTask\r
112 cout<<" # Init for "<<fShortDef<<" this="<<this<<"\n";\r
113 if(fIsOnline)\r
114 {\r
115 Printf("Can't init data members more then one time! \n");\r
116 return kFALSE;\r
117 }\r
118 fEventCount=0;\r
119 fOutList = new TList();\r
120 fOutList->SetName(fShortDef);\r
121 \r
122    Double_t LoMult,HiMult;\r
123    \r
124    LoMult=fLoMult-0.5;\r
125    HiMult=fHiMult+0.5;\r
126 \r
127    // Window statistics histograms\r
128   \r
129    // Forward\r
130   \r
131   fHistPtForward = new TH1D("fHistPtForward", "P_{T} distribution in Forward window", 100, 0.0, 5);\r
132   fHistPtForward->GetXaxis()->SetTitle("P_{T} (GeV/c)");\r
133   fHistPtForward->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");\r
134   fHistPtForward->SetMarkerStyle(kFullCircle);\r
135   \r
136   \r
137   fHistEtaForward = new TH1D("fEtaForward", "#eta distribution in Forward window", 200, -2, 2);\r
138   fHistEtaForward->GetXaxis()->SetTitle("ETA");\r
139   fHistEtaForward->GetYaxis()->SetTitle("dN/ETA");\r
140   fHistEtaForward->SetMarkerStyle(kFullCircle);\r
141   \r
142   \r
143   fHistNchForward = new TH1D("fHistNchForward", "N_{ch} distribution in Forward window", fMultBins, LoMult, HiMult);\r
144   fHistNchForward->GetXaxis()->SetTitle("N_{ch}");\r
145   fHistNchForward->GetYaxis()->SetTitle("dN/dN_{ch}");\r
146   fHistNchForward->SetMarkerStyle(kFullCircle);\r
147  \r
148      // Bakward\r
149   \r
150   fHistPtBakward = new TH1D("fHistPtBakward", "P_{T} distribution in Bakward window", 100, 0.0, 5);\r
151   fHistPtBakward->GetXaxis()->SetTitle("P_{T} (GeV/c)");\r
152   fHistPtBakward->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");\r
153   fHistPtBakward->SetMarkerStyle(kFullCircle);\r
154   \r
155   \r
156   fHistEtaBakward = new TH1D("fEtaBakward", "#eta distribution in Bakward window", 200, -2, 2);\r
157   fHistEtaBakward->GetXaxis()->SetTitle("ETA");\r
158   fHistEtaBakward->GetYaxis()->SetTitle("dN/ETA");\r
159   fHistEtaBakward->SetMarkerStyle(kFullCircle);\r
160   \r
161   \r
162   fHistNchBakward = new TH1D("fHistNchBakward", "N_{ch} distribution in Bakward window", fMultBins, LoMult, HiMult);\r
163   fHistNchBakward->GetXaxis()->SetTitle("P_{T} (GeV/c)");\r
164   fHistNchBakward->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");\r
165   fHistNchBakward->SetMarkerStyle(kFullCircle);\r
166 \r
167 \r
168     //Overal statistics histograms\r
169   \r
170   fHistPt = new TH1F("fHistPt", "P_{T} distribution", 100, 0.0, 5.0);\r
171   fHistPt->GetXaxis()->SetTitle("P_{T} (GeV/c)");\r
172   fHistPt->GetYaxis()->SetTitle("dN/dP_{T} (c/GeV)");\r
173   fHistPt->SetMarkerStyle(kFullCircle);\r
174   \r
175   \r
176   fHistEta = new TH1F("fHistEta", "#eta distribution", 200, -2, 2);\r
177   fHistEta->GetXaxis()->SetTitle("ETA");\r
178   fHistEta->GetYaxis()->SetTitle("dN/ETA");\r
179   fHistEta->SetMarkerStyle(kFullCircle);\r
180     \r
181     \r
182     \r
183     // -------- LRC histograms\r
184   \r
185   fHistNN = new TH2D("NN","NN",fMultBins, LoMult, HiMult,fMultBins, LoMult, HiMult);\r
186   fHistPtN = new TH2D("PtN","PtN",fMultBins, LoMult, HiMult,fPtBins,fLoPt,fHiPt);\r
187   fHistPtPt = new TH2D("PtPt","PtPt",fPtBins,fLoPt,fHiPt,fPtBins,fLoPt,fHiPt);\r
188   fProfNberr = new TProfile("nber","nber",fMultBins, LoMult, HiMult);\r
189   fProfdPtB = new TProfile("dPtB","Overal multievent Pt_Backward (first bin) Pt_Backward^2 (sec. bin) ",2,0.5,2.5);  \r
190   fProfTestLRC = new TProfile("TestLRC","Test LRC calculaion via TProfile",fMultBins, LoMult, HiMult);  \r
191 \r
192 \r
193    // ---------- Adding data members to output list\r
194   \r
195   // Adding overal statistics\r
196   \r
197   fOutList->Add(fHistPt);\r
198   fOutList->Add(fHistEta);\r
199   \r
200   //Adding LRC hists\r
201   \r
202   fOutList->Add(fHistNN);\r
203   fOutList->Add(fHistPtN);\r
204   fOutList->Add(fHistPtPt);\r
205   fOutList->Add(fProfNberr);\r
206   fOutList->Add(fProfdPtB);\r
207   fOutList->Add(fProfTestLRC);\r
208 \r
209   \r
210   //Adding window statistics\r
211 \r
212   fOutList->Add(fHistPtForward);\r
213   fOutList->Add(fHistEtaForward);\r
214   fOutList->Add(fHistNchForward);\r
215   fOutList->Add(fHistPtBakward);\r
216   fOutList->Add(fHistEtaBakward);\r
217   fOutList->Add(fHistNchBakward);\r
218   \r
219  \r
220 \r
221 \r
222 fIsOnline=kTRUE;\r
223 return kTRUE;\r
224 }\r
225 AliLRCProcess::~AliLRCProcess()\r
226 {\r
227 //Destructor\r
228 \r
229 }\r
230 \r
231 // ---------------------------------------  Setters ------------------\r
232   void AliLRCProcess::SetShortDef()\r
233   {\r
234   // Creating task and output container name \r
235    TString lF,hF,lB,hB;\r
236    lF+=fStartForwardETA; lF.Remove(TString::kBoth,' ');\r
237    hF+=fEndForwardETA; hF.Remove(TString::kBoth,' ');\r
238    lB+=fStartBakwardETA; lB.Remove(TString::kBoth,' ');\r
239    hB+=fEndBakwardETA; hB.Remove(TString::kBoth,' ');\r
240    \r
241    fShortDef= "TaskLRCw"+lF+"to"+hF+"vs"+lB+"to"+hB;\r
242 \r
243   }\r
244 \r
245   void AliLRCProcess::SetForwardWindow(Double_t StartETA,Double_t EndETA)\r
246   {\r
247     //setter for the forward eta window\r
248   fStartForwardETA=StartETA;\r
249   fEndForwardETA=EndETA;\r
250   SetShortDef();\r
251   }\r
252   void AliLRCProcess::SetBackwardWindow(Double_t StartETA,Double_t EndETA)\r
253   {\r
254     //setter for the backward eta window\r
255   fStartBakwardETA=StartETA;\r
256   fEndBakwardETA=EndETA;\r
257   SetShortDef();\r
258   }\r
259   void AliLRCProcess::SetETAWindows(Double_t _StartForwardETA,Double_t _EndForwardETA,Double_t _StartBakwardETA,Double_t _EndBakwardETA)\r
260   {\r
261   //setter for the eta windows\r
262   fStartForwardETA=_StartForwardETA;\r
263   fEndForwardETA=_EndForwardETA;\r
264   fStartBakwardETA=_StartBakwardETA;\r
265   fEndBakwardETA=_EndBakwardETA;\r
266   SetShortDef();\r
267   }\r
268 \r
269   void AliLRCProcess::SetPtRange(Double_t LoPt,Double_t HiPt,Int_t PtBins)\r
270   {\r
271   // Setter for Pt range and N bins in histos\r
272   fLoPt=LoPt;\r
273   fHiPt=HiPt;\r
274   fPtBins=PtBins;  \r
275   }\r
276   void AliLRCProcess::SetMultRange(Int_t LoMult,Int_t HiMult,Int_t MultBins)\r
277   {\r
278   // Setter for multiplicity range and N bins in histos\r
279   fLoMult=LoMult;\r
280   fHiMult=HiMult;\r
281   if(!MultBins)\r
282         {\r
283         fMultBins=fHiMult-fLoMult+1;\r
284         }else\r
285         {\r
286         fMultBins=MultBins;  \r
287         }\r
288   }\r
289 \r
290 \r
291 //________________________________________________________________________\r
292 \r
293 \r
294 \r
295 TList* AliLRCProcess::CreateOutput()\r
296 {\r
297 // Creates a link to output data TList\r
298 return fOutList;\r
299 }\r
300 \r
301 TString AliLRCProcess::GetShortDef()\r
302 {\r
303 return fShortDef;\r
304 }\r
305 \r
306 void AliLRCProcess::StartEvent()\r
307 {\r
308 // Open new Event for track by track event import\r
309 if(fIsEventOpend)\r
310         {Printf("Event is already opened! Auto finishing ! \n");\r
311          cout<<fShortDef<<": event count = "<<fEventCount<<" ";\r
312          Printf("NchF = %i,NchB = %i \n",fNchFw,fNchBw);\r
313          \r
314          FinishEvent();\r
315         }\r
316         \r
317 fNchFw=0;\r
318 fSumPtFw=0;\r
319 fNchBw=0;\r
320 fSumPtBw=0;\r
321 \r
322 fIsEventOpend=kTRUE;\r
323 }\r
324 void AliLRCProcess::AddTrackPtEta(Double_t Pt, Double_t Eta )\r
325 {\r
326 //Track by track event import :  Imports track to the event \r
327 \r
328 if(!fIsEventOpend)\r
329         {Printf("Event is not opened!\n");\r
330         return;}\r
331 \r
332     Double_t lPt=Pt;\r
333     Double_t lEta=Eta;\r
334     \r
335     //  Glabal trak data\r
336     fHistPt->Fill(lPt);\r
337     fHistEta->Fill(lEta);\r
338     \r
339        \r
340     //Forward window\r
341     if( (fStartForwardETA<lEta)&&(lEta<fEndForwardETA))\r
342         {\r
343         fNchFw++;\r
344         fSumPtFw+=lPt;\r
345         fHistPtForward->Fill(lPt);\r
346         fHistEtaForward->Fill(lEta);\r
347         \r
348         }\r
349     \r
350     //Backward window\r
351     if((fStartBakwardETA<lEta)&&(lEta<fEndBakwardETA))\r
352         {\r
353         fNchBw++;\r
354         fSumPtBw+=lPt; \r
355         if(lPt<4.0)\r
356         {\r
357         fProfdPtB->Fill(1,lPt); \r
358         fProfdPtB->Fill(2,lPt*lPt);\r
359         }\r
360          \r
361         fHistPtBakward->Fill(lPt);\r
362         fHistEtaBakward->Fill(lEta);\r
363  \r
364         }\r
365     \r
366         \r
367 \r
368 }\r
369 void AliLRCProcess::FinishEvent()\r
370 {\r
371 // Track by track event import : Close opened event and fill event summary histos\r
372 \r
373 if(!fIsEventOpend)\r
374         {Printf("Event is not opened!\n");\r
375         return;}\r
376 \r
377  //Filling even-total data\r
378   \r
379   fHistNN->Fill(fNchFw,fNchBw);\r
380   \r
381   if(fNchBw!=0)\r
382   {\r
383         fSumPtBw=fSumPtBw/fNchBw;\r
384         fProfTestLRC->Fill(fNchFw,fSumPtBw);\r
385         fHistPtN->Fill(fNchFw,fSumPtBw);\r
386         fProfNberr->Fill(fNchFw,1.0/fNchBw);\r
387         \r
388         if(fNchFw!=0)\r
389         {\r
390                 fSumPtFw=fSumPtFw/fNchFw;\r
391                 fHistPtPt->Fill(fSumPtFw,fSumPtBw);\r
392         }\r
393   }\r
394         \r
395   \r
396  fHistNchForward->Fill(fNchFw);\r
397  fHistNchBakward->Fill(fNchBw);\r
398 \r
399 fEventCount++;\r
400 fIsEventOpend=kFALSE;\r
401 //cout<<fShortDef<<": event count = "<<fEventCount<<" ";\r
402 //       Printf("NchF = %i,NchB = %i",fNchFw,fNchBw);\r
403 }\r
404 \r