]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowAnalyser.h
69861d200c1523b041460bbf86b1ae857eb1efd5
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalyser.h
1 //////////////////////////////////////////////////////////////////////
2 //
3 // $Id$
4 //
5 // Author: Emanuele Simili
6 //
7 //////////////////////////////////////////////////////////////////////
8 //
9 // Description: ALICE flow analysis for AliFlowEvent(s), 
10 // adapted from the STAR flow analysis .
11 // Original Authors:                 Raimond Snellings & Art Poskanzer
12 //
13 //////////////////////////////////////////////////////////////////////
14
15 #ifndef ALIFLOWANALYSER_H
16 #define ALIFLOWANALYSER_H
17
18 #include <TVector2.h>
19 #include <TFile.h>
20 #include "AliFlowConstants.h"
21
22 class TH1F;
23 class TH1D;
24 class TH2F;
25 class TH2D;
26 class TH3F;
27 class TProfile;
28 class TProfile2D;
29 class TOrdCollection;
30
31 class TClonesArray;
32
33 class AliFlowTrack;
34 class AliFlowV0;
35 class AliFlowEvent;
36 class AliFlowSelection;
37 class AliFlowConstants;
38
39 class AliFlowAnalyser {
40
41
42 public:
43   
44   AliFlowAnalyser(const AliFlowSelection* flowSelect = 0);      // Constructor with selection object (default selection if no one given)
45   virtual  ~AliFlowAnalyser();                                  // Default destructor (no actions)
46
47  // Steps of the flow analysis
48   Bool_t   Init() ;                                             // Books histograms for flow analysis
49   Bool_t   Finish() ;                                           // Saves histograms, Closes stuff
50
51  // Analysis of 1 event (can be called from outside)
52   Bool_t   Analyse(AliFlowEvent* flowEvent = 0) ;               // Fills the defaults histograms (init them first!) and performs the calculation for the given event         
53
54  // Resolution corrections to v_n (call it at the end of the evts loop)
55   Bool_t   Resolution() ;                                       // Calculates resolution and mean flow values
56  
57  // Weights calculation and saving (call it at the end of the evts loop)
58   void     Weightening() ;                                      // Calculates weights and fills PhiWgt histograms
59
60  // Options
61   void     SetEtaSub(Bool_t es = kTRUE)                         { fEtaSub = es ; }              // Set eta subevents
62   void     SetV1Ep1Ep2(Bool_t v1Ep1Ep2 = kTRUE)                 { fV1Ep1Ep2 = v1Ep1Ep2 ; }      // Switches the v_1{EP1,EP2} calculation on/off
63   void     SetShuffle(Bool_t sh = kTRUE)                        { fShuffle = sh ; }             // Set to re-shuffle evt tracks
64   void     SetUsePhiWgt(Bool_t pw = kTRUE)                      { fReadPhiWgt = pw ; }          // Set to use phi weights (true by default...if there)
65   void     SetUseBayWgt(Bool_t bw = kTRUE)                      { fBayWgt = bw ; }              // Set to use bayesian weights for p.id. (false by default)
66   void     SetUsePtWgt(Bool_t ptw = kTRUE)                      { fPtWgt = ptw ; }              // uses pT as a weight for RP determination
67   void     SetUseEtaWgt(Bool_t etw = kTRUE)                     { fEtaWgt = etw ; }             // uses eta as a weight for RP determination
68   void     SetUseOnePhiWgt(Bool_t opw = kTRUE)                  { fOnePhiWgt = opw ; }          // just one wgt histogram
69   void     SetUseFirstLastPhiWgt(Bool_t flw = kTRUE)            { fOnePhiWgt = !flw ; }         // uses 3 wgt histograms
70   void     SetFlowForV0(Bool_t v0 = kTRUE)                      { fV0loop = v0 ; }              // Enables Flow study for v0
71   void     SetTrackLoop(Bool_t trkl = kTRUE)                    { fTrackLoop = trkl ; }         // Enables Tracks loop (keep it kTRUE)
72   //void     SetDebugg(Int_t db = 1) ;                          // set the cout's for debug (default is 1)
73
74  // Histograms
75   void     SetPtRangevEta(Float_t lo, Float_t hi)               { fPtRangevEta[0] = lo ; fPtRangevEta[1] = hi ; }  // Sets the pt range for the v(eta) histograms.
76   void     SetEtaRangevPt(Float_t lo, Float_t hi)               { fEtaRangevPt[0] = lo ; fEtaRangevPt[1] = hi ; }  // Sets the |eta| range for the v(pt) histograms.
77   //void     SetMaxLabel(Int_t lab = 100)                       { fMaxLabel = lab ; }
78   
79  // Output 
80   void     SetHistFileName(TString name)                        { fHistFileName = name ; }      // Sets output file name
81   TString  GetHistFileName() const                              { return fHistFileName ; }
82
83  // Phi Weights 
84   TString  GetWgtFileName() const                               { return (TString)fPhiWgtFile->GetName() ; }
85   void     FillWgtArrays(TFile* wgtFile) ;                      // Loads phi & bayesian weights from file (flowPhiWgt.hist.root) and fills the arrays
86
87  // Results
88   Float_t  GetRunBayesian(Int_t nPid=2, Int_t selN=0) const ;   // Normalized Particle abundance (all events up to here)
89   void     PrintRunBayesian(Int_t selN=0) const ;               // Prints the normalized Particle abundance (up to here)
90   void     PrintEventQuantities() const ;                       // Prints event by event calculated quantities
91   Float_t  Res(Int_t eventN, Int_t harN) const                  { return fRes[eventN][harN]; }    // Returns the calculated resolution for the RP
92   Float_t  ResErr(Int_t eventN, Int_t harN) const               { return fResErr[eventN][harN]; } // Returns the estimated error on the resolution 
93
94
95  protected:
96  
97  // Internal methods to fill the histogram
98   Bool_t   FillFromFlowEvent(AliFlowEvent* fFlowEvent) ;        // Fills internal variables and array from Flow Events
99   void     FillEventHistograms(AliFlowEvent* fFlowEvent) ;      // Fills Events' histograms (from AliFlowEvent)
100   void     FillParticleHistograms(TClonesArray* fFlowTracks) ;          // Fills Tracks' histograms (from AliFlowTrack)
101   void     FillV0Histograms(TClonesArray* fFlowV0s) ;           // Fills V0s' histograms
102   Int_t    HarmonicsLoop(AliFlowTrack* fFlowTrack) ;            // Harmonics & Selections histograms (from AliFlowTracks)
103   //void     FillLabels() ;                                     // fills an histogram of Labels (the ones from ESD) 
104
105  // Weights plugged to the event
106   void     FillBayesianWgt(AliFlowEvent* fFlowEvent) ;          // Plugs the bayesian weights (fBayesianWgt[0]*) into the AliFlowEvent
107   void     FillEvtPhiWgt(AliFlowEvent* fFlowEvent) ;            // Plugs the PhiWeights (fPhiWgt*, etc.) into the AliFlowEvent
108  
109  // Resolution Calculation
110   Double_t Chi(Double_t res) ;                                  // Calculates chi from the event plane resolution
111   Double_t ResEventPlane(Double_t chi) ;                        // Calculates the event plane resolution as a function of chi
112   Double_t ResEventPlaneK2(Double_t chi) ;                      // Calculates the event plane resolution as a function of chi for the case k=2.
113   Double_t ResEventPlaneK3(Double_t chi) ;                      // Calculates the event plane resolution as a function of chi for the case k=3.
114   Double_t ResEventPlaneK4(Double_t chi) ;                      // Calculates the event plane resolution as a function of chi for the case k=4.
115
116
117  private:
118
119  // to make the code checker happy
120   AliFlowAnalyser(const AliFlowAnalyser &flowAnal) ;            // Copy Constructor (dummy)
121   AliFlowAnalyser &operator=(const AliFlowAnalyser &flowAnal) ; // Assignment Operator
122
123  // Flags
124   Bool_t           fTrackLoop ;                                 //! tracks main loop
125   Bool_t           fV0loop ;                                    //! correlation analysis is done also for neutral secundary vertex
126   Bool_t           fShuffle ;                                   //! to randomly reshuffle tracks
127   Bool_t           fV1Ep1Ep2;                                   //! Flag for v_1{EP1,EP2} calculation on/off
128   Bool_t           fEtaSub;                                     //! eta subevents
129   Bool_t           fReadPhiWgt ;                                //! Phi Weights are applied to Phi distrib. (default is false)
130   Bool_t           fBayWgt ;                                    //! Bayesian Weights are applied to P.Id. (default is false) 
131   Bool_t           fRePid ;                                     //! Re-Calculates the P.Id. basing on the bayesian wgts (if plugged in)
132
133   Bool_t           fPtWgt ;                                     //! flag to use pT as a weight for RP determination
134   Bool_t           fEtaWgt ;                                    //! flag to use eta as a weight for RP determination
135   Bool_t           fOnePhiWgt ;                                 //! if kTRUE: just one phi-wgt histogram, if kFALSE: three phi-wgt histogram (TPC+,TPC-,cross)
136
137  // Files
138   TFile*           fHistFile ;                                  //! histograms file (output)
139   TFile*           fPhiWgtFile ;                                //! phi weight file 
140   TString          fHistFileName ;                              //! Output File Name (histograms from flow analysis)
141   //TString        fFlowEvtFileName ;                           //! Input file name (Flow Events)
142
143  // enumerators                             
144   Int_t            fEventNumber ;                               //! progressive enumeration of AliFlowEvents
145   Int_t            fTrackNumber ;                               //! progressive enumeration of AliFlowTracks
146   Int_t            fV0Number ;                                  //! progressive enumeration of AliFlowV0s
147   //Int_t          fNumberOfEvents ;                            //! total number of AliFlowEvents in file
148   Int_t            fNumberOfTracks ;                            //! total number of tracks in the current event
149   Int_t            fNumberOfV0s ;                               //! total number of v0s in the current event
150   Int_t            fPidId ;                                     //! Particle Id hypothesys of the track (0..4 for e,mu,pi,k,p)
151   Int_t            fSelParts ;                                  //! n. of tracks selected for correlation analysis
152   Int_t            fSelV0s ;                                    //! n. of v0s selected for correlation analysis
153
154  // Internal pointers
155   AliFlowEvent*     fFlowEvent ;                                //! pointer to AliFlowEvent
156   AliFlowTrack*     fFlowTrack ;                                //! pointer to AliFlowTrack
157   AliFlowV0*        fFlowV0 ;                                   //! pointer to AliFlowV0
158   AliFlowSelection* fFlowSelect ;                               //! selection object
159   TClonesArray*     fFlowTracks ;                               //! pointer to the TrackCollection
160   TClonesArray*     fFlowV0s ;                                  //! pointer to the V0Collection
161
162   Float_t           fVertex[3] ;                                //! Event's Vertex position 
163
164  // For weights
165   Int_t             fPhiBins ;                                  //! n. of phi bins     
166   Float_t           fPhiMin ;                                   //! wgt histo range (phi)
167   Float_t           fPhiMax ;                                   //! wgt histo range (phi) 
168
169   AliFlowConstants::PhiWgt_t    fPhiWgt ;                       //! PhiWgt Array (all TPC)
170   AliFlowConstants::PhiWgt_t    fPhiWgtPlus ;                   //! PhiWgt Array (TPC+)
171   AliFlowConstants::PhiWgt_t    fPhiWgtMinus ;                  //! PhiWgt Array (TPC-)
172   AliFlowConstants::PhiWgt_t    fPhiWgtCross ;                  //! PhiWgt Array (TPC/)     
173
174  // For bayesian weights
175   Double_t fBayesianWgt[AliFlowConstants::kSels][AliFlowConstants::kPid] ;      //! Bayesian weights (expected particle abundance)
176   TVector2 fQ[AliFlowConstants::kSels][AliFlowConstants::kHars];                        //! flow vector
177   Float_t  fPsi[AliFlowConstants::kSels][AliFlowConstants::kHars];                      //! event plane angle
178   UInt_t   fMult[AliFlowConstants::kSels][AliFlowConstants::kHars];                     //! multiplicity
179   Float_t  fQnorm[AliFlowConstants::kSels][AliFlowConstants::kHars];                    //! Q/Sqrt(Mult)
180   TVector2 fQSub[AliFlowConstants::kSubs][AliFlowConstants::kSels][AliFlowConstants::kHars];            //! flow vector subs
181   Float_t  fPsiSub[AliFlowConstants::kSubs][AliFlowConstants::kSels][AliFlowConstants::kHars];          //! plane angle of subevents
182   UInt_t   fMultSub[AliFlowConstants::kSubs][AliFlowConstants::kSels][AliFlowConstants::kHars];         //! multiplicity subs
183   Float_t  fRes[AliFlowConstants::kSels][AliFlowConstants::kHars];                      //! event plane resolution
184   Float_t  fResErr[AliFlowConstants::kSels][AliFlowConstants::kHars];                   //! event plane resolution error
185
186  // for Histograms
187   TString           fLabel ;                                    //! label axis : rapidity or pseudorapidity
188   Float_t           fEtaMin ;                                   //! histo range (eta)
189   Float_t           fEtaMax ;                                   //! histo range (eta) 
190   Float_t           fPtMin ;                                    //! histo range (pt)       
191   Float_t           fPtMax ;                                    //! histo range (pt)       
192   Float_t           fPtMaxPart ;                                //! max pt for _part histo
193   Int_t             fEtaBins ;                                  //! n. of eta bins
194   Int_t             fPtBins ;                                   //! n. of pt bins     
195   Int_t             fPtBinsPart ;                               //! n. of pt bins for _part histo
196   Float_t           fPtRangevEta[2] ;                           //! pt range for the v(eta) histograms.
197   Float_t           fEtaRangevPt[2] ;                           //! |eta| range for the v(pt) histograms.
198   Int_t             fMaxLabel ;                                 //! for the MC labels histogram (max bin)
199
200   TOrdCollection*   fPhiWgtHistList ;                           //! Weights:  histogram list
201   TOrdCollection*   fVnResHistList ;                            //! Resolution and Vn:  histogram list
202  
203 // for Single histograms
204
205  // *****************
206  // EVENTs HISTOGRAMS
207  // *****************
208   TH1F*     fHistTrigger;                                  //! histogram ...
209   TH1F*     fHistMult;                                     //! histogram ...
210   TH1F*     fHistV0Mult;                                   //! histogram ...
211   TH1F*     fHistOrigMult;                                 //! histogram ...
212   TH1F*     fHistMultOverOrig;                             //! histogram ...
213   TH1F*     fHistMultEta;                                  //! histogram ...
214   TH1F*     fHistCent;                                     //! histogram ...
215   TH1F*     fHistVertexZ;                                  //! histogram ...
216   TH2F*     fHistVertexXY2D;                               //! histogram ...
217   TH2F*     fHistEnergyZDC;                                //! histogram ...
218   TH1F*     fHistPartZDC;                                  //! histogram ...
219   TProfile* fHistPidMult;                                  //! histogram ...
220   TH1F*     fHistBayPidMult;                               //! histogram ...
221   TH1F*     fHistEtaSym;                                   //! histogram ...
222   TH1F*     fHistEtaSymPart;                               //! histogram ...
223   TH2F*     fHistEtaSymVerZ2D;                             //! histogram ...
224   TH2F*     fHistEtaSymVerZ2DPart;                         //! histogram ...
225  // selected (TR & V0)
226   TH1F*     fHistMultPart;                                 //! histogram ...
227   TH1F*     fHistV0MultPart;                               //! histogram ...
228   TH1F*     fHistBayPidMultPart;                           //! histogram ...
229   TH1F*     fHistMultPartUnit;                             //! histogram ...
230   
231  // *****************
232  // TRACKs HISTOGRAMS (all tracks)
233  // *****************
234   TH1F*     fHistPtot ;                                    //! histogram ...
235   TH1F*     fHistPt ;                                      //! histogram ...
236   TH1F*     fHistCharge;                                   //! histogram ...
237   TH1F*     fHistDcaGlobal;                                //! histogram ...
238   TH1F*     fHistDca;                                      //! histogram ...
239   TH1F*     fHistTransDca;                                 //! histogram ...
240   TH1F*     fHistChi2;                                     //! histogram ...
241   TH1F*     fHistLenght;                                   //! histogram ...
242   TH1F*     fHistInvMass ;                                 //! histogram ...
243   TH1F*     fHistFitOverMax;                               //! histogram ...
244   TH2D*     fHistPhiPtCon ;                                //! histogram ...
245   TH2D*     fHistPhiPtUnc ;                                //! histogram ...
246   TH2D*     fHistPtPhiPos ;                                //! histogram ...
247   TH2D*     fHistPtPhiNeg ;                                //! histogram ...
248   TH3F*     fHistAllEtaPtPhi3D;                            //! histogram ...
249   TProfile* fHistCosPhi;                                   //! histogram ...
250   TH2F*     fHistPidPt;                                    //! histogram ...
251   TH1F*     fHistPhi ;                                     //! histogram ...
252   TH1F*     fHistPhiCons ;                                 //! histogram ...
253   TH2D*     fHistYieldAll2D;                               //! histogram ...
254   TH2D*     fHistYieldCon2D;                               //! histogram ...
255   TH2D*     fHistYieldUnc2D;                               //! histogram ...
256   TH3F*     fHistConsEtaPtPhi3D;                           //! histogram ...
257   TH3F*     fHistGlobEtaPtPhi3D;                           //! histogram ...
258   TH3F*     fHistUncEtaPtPhi3D ;                           //! histogram ...
259   // fit & dE/dX for each detector (all tracks)
260   TH1F*     fHistChi2ITS;                                  //! histogram ...
261   TH1F*     fHistChi2normITS;                              //! histogram ...
262   TH1F*     fHistFitPtsITS;                                //! histogram ...
263   TH1F*     fHistMaxPtsITS;                                //! histogram ...
264   TH2F*     fHistMeanDedxPos2DITS;                         //! histogram ...
265   TH2F*     fHistMeanDedxNeg2DITS;                         //! histogram ...
266   // -
267   TH1F*     fHistChi2TPC;                                  //! histogram ...
268   TH1F*     fHistChi2normTPC;                              //! histogram ...
269   TH1F*     fHistFitPtsTPC;                                //! histogram ...
270   TH1F*     fHistMaxPtsTPC;                                //! histogram ...
271   TH1F*     fHistFitOverMaxTPC;                            //! histogram ...
272   TH2F*     fHistMeanDedxPos2D;                            //! histogram ...
273   TH2F*     fHistMeanDedxNeg2D;                            //! histogram ...
274   // -
275   TH1F*     fHistChi2TRD;                                  //! histogram ...
276   TH1F*     fHistChi2normTRD;                              //! histogram ...
277   TH1F*     fHistFitPtsTRD;                                //! histogram ...
278   TH1F*     fHistMaxPtsTRD;                                //! histogram ...
279   TH2F*     fHistMeanDedxPos2DTRD;                         //! histogram ...
280   TH2F*     fHistMeanDedxNeg2DTRD;                         //! histogram ...
281   // -
282   TH1F*     fHistChi2TOF;                                  //! histogram ...
283   TH1F*     fHistChi2normTOF;                              //! histogram ...
284   TH1F*     fHistFitPtsTOF;                                //! histogram ...
285   TH1F*     fHistMaxPtsTOF;                                //! histogram ...
286   TH2F*     fHistMeanDedxPos2DTOF;                         //! histogram ...
287   TH2F*     fHistMeanDedxNeg2DTOF;                         //! histogram ...
288   // detector response for particle type (all tracks, based on Pid)
289   TH2F*     fHistMeanTPCPiPlus ;                           //! histogram ...
290   TH2F*     fHistMeanTPCPiMinus ;                          //! histogram ...
291   TH2F*     fHistMeanTPCProton ;                           //! histogram ...
292   TH2F*     fHistMeanTPCPbar ;                             //! histogram ...
293   TH2F*     fHistMeanTPCKplus ;                            //! histogram ...
294   TH2F*     fHistMeanTPCKminus ;                           //! histogram ...
295   TH2F*     fHistMeanTPCDeuteron ;                         //! histogram ...
296   TH2F*     fHistMeanTPCAntiDeuteron ;                     //! histogram ...
297   TH2F*     fHistMeanTPCPositron ;                         //! histogram ...
298   TH2F*     fHistMeanTPCElectron ;                         //! histogram ...
299   TH2F*     fHistMeanTPCMuonPlus ;                         //! histogram ...
300   TH2F*     fHistMeanTPCMuonMinus ;                        //! histogram ...
301   // -
302   TH2F*     fHistMeanITSPiPlus ;                           //! histogram ...
303   TH2F*     fHistMeanITSPiMinus ;                          //! histogram ...
304   TH2F*     fHistMeanITSProton ;                           //! histogram ...
305   TH2F*     fHistMeanITSPbar ;                             //! histogram ...
306   TH2F*     fHistMeanITSKplus ;                            //! histogram ...
307   TH2F*     fHistMeanITSKminus ;                           //! histogram ...
308   TH2F*     fHistMeanITSDeuteron ;                         //! histogram ...
309   TH2F*     fHistMeanITSAntiDeuteron ;                     //! histogram ...
310   TH2F*     fHistMeanITSPositron ;                         //! histogram ...
311   TH2F*     fHistMeanITSElectron ;                         //! histogram ...
312   TH2F*     fHistMeanITSMuonPlus ;                         //! histogram ...
313   TH2F*     fHistMeanITSMuonMinus ;                        //! histogram ...
314   // -
315   TH2F*     fHistMeanTOFPiPlus ;                           //! histogram ...
316   TH2F*     fHistMeanTOFPiMinus ;                          //! histogram ...
317   TH2F*     fHistMeanTOFProton ;                           //! histogram ...
318   TH2F*     fHistMeanTOFPbar ;                             //! histogram ...
319   TH2F*     fHistMeanTOFKplus ;                            //! histogram ...
320   TH2F*     fHistMeanTOFKminus ;                           //! histogram ...
321   TH2F*     fHistMeanTOFDeuteron ;                         //! histogram ...
322   TH2F*     fHistMeanTOFAntiDeuteron ;                     //! histogram ...
323   TH2F*     fHistMeanTOFPositron ;                         //! histogram ...
324   TH2F*     fHistMeanTOFElectron ;                         //! histogram ...
325   TH2F*     fHistMeanTOFMuonPlus ;                         //! histogram ...
326   TH2F*     fHistMeanTOFMuonMinus ;                        //! histogram ...
327   // -
328   TH2F*     fHistMeanTRDPiPlus ;                           //! histogram ...
329   TH2F*     fHistMeanTRDPiMinus ;                          //! histogram ...
330   TH2F*     fHistMeanTRDProton ;                           //! histogram ...
331   TH2F*     fHistMeanTRDPbar ;                             //! histogram ...
332   TH2F*     fHistMeanTRDKplus ;                            //! histogram ...
333   TH2F*     fHistMeanTRDKminus ;                           //! histogram ...
334   TH2F*     fHistMeanTRDDeuteron ;                         //! histogram ...
335   TH2F*     fHistMeanTRDAntiDeuteron ;                     //! histogram ...
336   TH2F*     fHistMeanTRDPositron ;                         //! histogram ...
337   TH2F*     fHistMeanTRDElectron ;                         //! histogram ...
338   TH2F*     fHistMeanTRDMuonPlus ;                         //! histogram ...
339   TH2F*     fHistMeanTRDMuonMinus ;                        //! histogram ...
340   // pid probability for all particle (all tracks)
341   TH1F*     fHistPidPiPlus;                                //! histogram ...
342   TH1F*     fHistPidPiMinus;                               //! histogram ...
343   TH1F*     fHistPidProton;                                //! histogram ...
344   TH1F*     fHistPidAntiProton;                            //! histogram ...
345   TH1F*     fHistPidKplus;                                 //! histogram ...
346   TH1F*     fHistPidKminus;                                //! histogram ...
347   TH1F*     fHistPidDeuteron;                              //! histogram ...
348   TH1F*     fHistPidAntiDeuteron;                          //! histogram ...
349   TH1F*     fHistPidElectron;                              //! histogram ...
350   TH1F*     fHistPidPositron;                              //! histogram ...
351   TH1F*     fHistPidMuonMinus;                             //! histogram ...
352   TH1F*     fHistPidMuonPlus;                              //! histogram ...
353   // pid probability for particle type (all tracks, based on Pid)
354   TH1F*     fHistPidPiPlusPart;                            //! histogram ...
355   TH1F*     fHistPidPiMinusPart;                           //! histogram ...
356   TH1F*     fHistPidProtonPart;                            //! histogram ...
357   TH1F*     fHistPidAntiProtonPart;                        //! histogram ...
358   TH1F*     fHistPidKplusPart;                             //! histogram ...
359   TH1F*     fHistPidKminusPart;                            //! histogram ...
360   TH1F*     fHistPidDeuteronPart;                          //! histogram ...
361   TH1F*     fHistPidAntiDeuteronPart;                      //! histogram ...
362   TH1F*     fHistPidElectronPart;                          //! histogram ...
363   TH1F*     fHistPidPositronPart;                          //! histogram ...
364   TH1F*     fHistPidMuonMinusPart;                         //! histogram ...
365   TH1F*     fHistPidMuonPlusPart;                          //! histogram ...
366   // MC labels from the simulation (all tracks)
367   //TH2F*     fLabHist;                                    //! histogram ... 
368  // *****************
369  // selected TRACKS
370  // *****************
371   TProfile* fHistBinEta;                                   //! histogram ...
372   TProfile* fHistBinPt;                                    //! histogram ...
373   //
374   TH3F*     fHistEtaPtPhi3DPart ;                          //! histogram ...
375   TH2D*     fHistYieldPart2D;                              //! histogram ...
376   TH1F*     fHistDcaGlobalPart ;                           //! histogram ...
377   TH1F*     fHistInvMassPart ;                             //! histogram ...
378   TH3F*     fHistEtaPtPhi3DOut ;                           //! histogram ...
379   TH2D*     fHistYieldOut2D;                               //! histogram ...
380   TH1F*     fHistDcaGlobalOut ;                            //! histogram ...
381   TH1F*     fHistInvMassOut ;                              //! histogram ...
382   TH3F*     fHistMeanDedxPos3DPart ;                       //! histogram ...
383   TH3F*     fHistMeanDedxNeg3DPart ;                       //! histogram ...
384   TH3F*     fHistMeanDedxPos3DPartITS ;                    //! histogram ...
385   TH3F*     fHistMeanDedxNeg3DPartITS ;                    //! histogram ...
386 //
387
388  // *****************
389  // V0s HISTOGRAMS (all v0s)
390  // *****************
391   TH1F*     fHistV0Mass;                                   //! histogram ...
392   TH3F*     fHistV0EtaPtPhi3D;                             //! histogram ...
393   TH2D*     fHistV0YieldAll2D;                             //! histogram ...
394   TH2D*     fHistV0PYall2D;                                //! histogram ...
395   TH1F*     fHistV0Dca;                                    //! histogram ...
396   TH1F*     fHistV0Chi2;                                   //! histogram ...
397   TH1F*     fHistV0Lenght;                                 //! histogram ...
398   TH1F*     fHistV0Sigma;                                  //! histogram ...
399   TProfile* fHistV0CosPhi;                                 //! histogram ... 
400   TH2D*     fHistV0MassPtSlices;                           //! histogram ...
401  // *****************
402  // selected V0s
403  // *****************
404   TProfile* fHistV0BinEta;                                 //! histogram ... 
405   TProfile* fHistV0BinPt;                                  //! histogram ... 
406   TProfile* fHistV0sbBinEta;                               //! histogram ... 
407   TProfile* fHistV0sbBinPt;                                //! histogram ...
408   //
409   TH1F*     fHistV0MassWin ;                               //! histogram ...
410   TH3F*     fHistV0EtaPtPhi3DPart ;                        //! histogram ...
411   TH2D*     fHistV0YieldPart2D;                            //! histogram ...
412   TH1F*     fHistV0DcaPart ;                               //! histogram ...
413   TH1F*     fHistV0LenghtPart ;                            //! histogram ...
414   TH1F*     fHistV0sbMassSide ;                            //! histogram ...
415   TH3F*     fHistV0sbEtaPtPhi3DPart ;                      //! histogram ...
416   TH2D*     fHistV0sbYieldPart2D;                          //! histogram ...
417   TH1F*     fHistV0sbDcaPart ;                             //! histogram ...
418   TH1F*     fHistV0sbLenghtPart ;                          //! histogram ...
419
420 // for each harmonic, each selection, and each sub-event
421
422  // *****************
423  // SUB-EVENTs HISTOGRAMS
424  // *****************
425   struct AliHistSubHars {
426    TH1F*     fHistPsiSubs;                                 //! histogram ...
427   };
428
429   struct AliHistSubs {
430    struct AliHistSubHars fHistSubHar[AliFlowConstants::kHars];         //! structure array ... 
431   };
432   struct AliHistSubs fHistSub[AliFlowConstants::kSels*AliFlowConstants::kSubs];    //! structure ...
433
434 // for each harmonic and each selection
435
436   struct AliHistFullHars 
437   {
438    // weights
439     TH1D*       fHistPhiPlus;                              //! histogram ...
440     TH1D*       fHistPhiMinus;                             //! histogram ...
441     TH1D*       fHistPhiAll;                               //! histogram ...
442     TH1D*       fHistPhiWgtPlus;                           //! histogram ...
443     TH1D*       fHistPhiWgtMinus;                          //! histogram ...
444     TH1D*       fHistPhiWgtAll;                            //! histogram ...
445     TH1D*       fHistPhiFlatPlus;                          //! histogram ...
446     TH1D*       fHistPhiFlatMinus;                         //! histogram ...
447     TH1D*       fHistPhiFlatAll;                           //! histogram ...
448     TH1D*       fHistPhi;                                  //! histogram ...
449     TH1D*       fHistPhiWgt;                               //! histogram ...
450     TH1D*       fHistPhiFlat;                              //! histogram ...
451    // flow (events)
452     TH1F*       fHistPsi;                                  //! histogram ...
453     TH1F*       fHistPsiSubCorr;                           //! histogram ...
454     TH1F*       fHistPsiSubCorrDiff;                       //! histogram ...
455     TH1F*       fHistPsiDiff;                              //! histogram ...
456     TH1F*       fHistMult;                                 //! histogram ...
457     TH1F*       fHistQnorm;                                //! histogram ...
458    // flow (tracks)
459     TH1F*       fHistPhiCorr;                              //! histogram ...
460     TProfile2D* fHistvObs2D;                               //! histogram ...
461     TProfile*   fHistvObsEta;                              //! histogram ...
462     TProfile*   fHistvObsPt;                               //! histogram ...
463     TH2D*       fHistv2D;                                  //! histogram ...
464     TH1D*       fHistvEta;                                 //! histogram ...
465     TH1D*       fHistvPt;                                  //! histogram ...
466    // flow (v0s)                                           
467     TH1F*       fHistV0PhiCorr;                            //! histogram ...
468     TProfile2D* fHistV0vObs2D;                             //! histogram ...
469     TProfile*   fHistV0vObsEta;                            //! histogram ...
470     TProfile*   fHistV0vObsPt;                             //! histogram ...
471     TH2D*       fHistV0v2D;                                //! histogram ...
472     TH1D*       fHistV0vEta;                               //! histogram ...     
473     TH1D*       fHistV0vPt;                                //! histogram ...     
474    // flow (v0s sidebands)
475     TProfile*   fHistV0sbvObsEtaSx ;                       //! histogram ...  
476     TProfile*   fHistV0sbvObsPtSx ;                        //! histogram ...
477     TProfile*   fHistV0sbvObsEtaDx ;                       //! histogram ...
478     TProfile*   fHistV0sbvObsPtDx ;                        //! histogram ...
479     TH1F*       fHistV0sbPhiCorr ;                         //! histogram ...
480     TProfile2D* fHistV0sbvObs2D ;                          //! histogram ...
481     TProfile*   fHistV0sbvObsEta ;                         //! histogram ...
482     TProfile*   fHistV0sbvObsPt ;                          //! histogram ...
483     TH2D*       fHistV0sbv2D ;                             //! histogram ...
484     TH1D*       fHistV0sbvEta ;                            //! histogram ...
485     TH1D*       fHistV0sbvPt ;                             //! histogram ...
486    // check (tracks used for R.P.)
487     TH1F*       fHistYieldPt ;                             //! histogram ...
488     TH3F*       fHistEtaPtPhi3D ;                          //! histogram ...
489     TH2D*       fHistYield2D ;                             //! histogram ...
490     TH1F*       fHistDcaGlob ;                             //! histogram ...
491    // check (tracks excluded)
492     TH1F*       fHistYieldPtout;                           //! histogram ...
493     TH3F*       fHistEtaPtPhi3Dout ;                       //! histogram ...
494     TH2D*       fHistYield2Dout ;                          //! histogram ...
495     TH1F*       fHistDcaGlobout ;                          //! histogram ...
496   };
497
498 // for each selection
499
500   struct AliHistFulls 
501   {
502    TH1F*     fHistBayPidMult;                             //! histogram ...
503   // flow (events)
504    TProfile* fHistCos;                                    //! histogram ...
505    TH1F*     fHistRes;                                    //! histogram ...
506    TProfile* fHistvObs;                                   //! histogram ...
507    TH1D*     fHistv;                                      //! histogram ...
508    TProfile* fHistV0vObs;                                 //! histogram ...
509    TProfile* fHistV0sbvObsSx;                             //! histogram ...
510    TProfile* fHistV0sbvObsDx;                             //! histogram ...
511    TH1D*     fHistV0v;                                    //! histogram ...
512   // wgt, evts, trks, v0s (as defined above)
513    struct AliHistFullHars  fHistFullHar[AliFlowConstants::kHars];         //! structure array ...
514   };
515   struct AliHistFulls fHistFull[AliFlowConstants::kSels];             //! structure array ...
516
517   ClassDef(AliFlowAnalyser,0)              // macro for rootcint
518 };
519
520 #endif
521
522
523
524 // lame = not productive; poorly designed; uncool ...