]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowAnalysisMaker.h
Adding needed includes
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisMaker.h
CommitLineData
30a892e3 1//////////////////////////////////////////////////////////////////////
2//
3// $Id$
4//
5// Author: Emanuele Simili
6//
7//////////////////////////////////////////////////////////////////////
8//
9// Description: routines to study Flow from AliFlowEvent, adapted from STAR
10// Original Authors: Raimond Snellings & Art Poskanzer
11//
12//////////////////////////////////////////////////////////////////////
13
14#ifndef AliFlowAnalysisMaker_H
15#define AliFlowAnalysisMaker_H
16
17#include <stdlib.h>
18#include <iostream>
19
20#include "AliFlowTrack.h"
21#include "AliFlowV0.h"
22#include "AliFlowEvent.h"
23#include "AliFlowSelection.h"
24#include "AliFlowConstants.h"
25
26#include "TTree.h"
27#include "TFile.h"
28#include "TString.h"
29#include "TH1.h"
30#include "TH2.h"
31#include "TH3.h"
32#include "TProfile.h"
33#include "TProfile2D.h"
34#include "TOrdCollection.h"
35#include "TMath.h"
36#include "TText.h"
37#include "TVector2.h"
38#include "TString.h"
39#include "TList.h"
40#include "TObjArray.h"
41#include "TObjString.h"
42
43class AliFlowTrack;
44class AliFlowV0;
45class AliFlowEvent;
46class AliFlowSelection;
47class Flow;
48class TH1F;
49class TH1D;
50class TH2F;
51class TH2D;
52class TH3F;
53class TProfile;
54class TProfile2D;
55
56class AliFlowAnalysisMaker {
57
58 /*!
59 \class AliFlowAnalysisMaker
60 Makes histograms for the flow analysis. It reads event and particle quantities
61 from AliFlowEvent. It removes autocorrelations of each particle with respect
62 to the event plane. For each harmonic and each selection makes a 2D histogram
63 of the anisotropic flow, v, vs. y and p_t.
64 */
65
66public:
67
68 AliFlowAnalysisMaker(const Char_t* name="FlowAnalysis"); // Default constructor
69 AliFlowAnalysisMaker(const Char_t* name, const AliFlowSelection& pFlowSelect); // Constructor with selection object
70 AliFlowAnalysisMaker(const AliFlowAnalysisMaker &from) {};
71 virtual ~AliFlowAnalysisMaker();
72
73 // Steps of the flow analysis
74 void InitDefault() ; // Default sets
75 Int_t Init() ; // Books histograms for flow analysis
76 Int_t Make() ; // Open FlowEvents, Gets quantities, Fills histograms
77 Int_t Finish() ; // Saves histograms, Closes stuff
78
79 // Analysis of 1 event (can be called from outside)
80 Bool_t Analyze(AliFlowEvent* pFlowEvent = 0) ; // Fills the defaults histograms (init them first!) and performs the calculation for the given event
81
82 // Analysis options
83 void SetEtaSub() ; // Set eta subevents
84 void SetV1Ep1Ep2(Bool_t v1Ep1Ep2 = kTRUE); // Switches the v_1{EP1,EP2} calculation on/off
85 void SetShuffle(Bool_t sh = kTRUE) ; // Set to re-shuffle evt tracks
86 void SetUsePhiWgt(Bool_t pw = kTRUE) ; // Set to use phi weights (true by default...if there)
87 void SetUseBayWgt(Bool_t bw = kTRUE) ; // Set to use bayesian weights for p.id. (false by default)
88
89 void SetUsePtWgt(Bool_t ptw = kTRUE); // uses pT as a weight for RP determination
90 void SetUseEtaWgt(Bool_t etw = kTRUE); // uses eta as a weight for RP determination
91 void SetUseOnePhiWgt(); // just one wgt histogram
92 void SetUseFirstLastPhiWgt(); // uses 3 wgt histograms
93
94 // Other options
95 void SetMakeAll(Bool_t mka=kTRUE) ; // Set to calculate all events variables in one shoot
96 void SetFlowForV0(Bool_t fV0 = kTRUE) ; // Enables Flow study for v0
97 void SetRedoWgt(Bool_t rd = kTRUE) ; // Set recalculation of weights
98
99 // Histograms
100 void SetHistoRanges(float etaMin = -1.,float etaMax = 1.,int EtaBins = 40) ; // Sets the histograms' limits
101 void SetPtRange_for_vEta(Float_t lo, Float_t hi); // Sets the pt range for the v(eta) histograms.
102 void SetEtaRange_for_vPt(Float_t lo, Float_t hi); // Sets the |eta| range for the v(pt) histograms.
103
104 // Input/Output
105 void SetHistFileName(TString name) ; // Sets output file name
106 void SetPhiWgtFileName(TString name) ; // Sets Wgt file name
107 void SetInputFileName(TString name) ; // Sets Input File name (the FlowEvents file)
108 void SetInputFileNames(TString name) ; // Sets Input Files (more than 1)
109 void SetOneInputFile(Bool_t in=kTRUE) ; // Sets just one Input file
110 TString GetHistFileName() const ; // Output File Name
111 TString GetPhiWgtFileName() const ; // Wgt File Name
112 TString GetInputFileName() const ; // Input (Flow Events) file Name
113
114 // MC simulation & debug
115 void SetDebugg(Int_t db = 1) ; // set the cout's for debug (default is 1)
116 void SetFillLabels(Bool_t lb=kTRUE) ; // fills labels histogram (execution is heavier)
117 void SetMaxLabel(Int_t bin) ; // set the last bin in the MC-label histogram
118
119 // Some Results
120 Float_t Res(Int_t eventN, Int_t harN) const ; // Returns the calculated resolution for the RP
121 Float_t ResErr(Int_t eventN, Int_t harN) const ; // Returns the estimated error on the resolution
122 void GetRunBayesian(Double_t bayes[Flow::nPid],int sel=0) ; // Normalized Particle abundance (all events up to here)
123 void PrintRunBayesian(int sel=0) ; // Prints the normalized Particle abundance (up to here)
124
125
126private:
127
128 // Weightening
129 void WgtChk() ; // Check for Read/Write weights, sets labels accordingly
130 void FillEvtPhiWgt() ; // Plugs the PhiWeights into the AliFlowEvent
131 void FillWgtArrays(TFile* wgtFile) ; // Loads phi & bayesian weights from file (flowPhiWgt.hist.root) and fills the specific arrays
132 void FillBayesianWgt(int sel=0) ; // Plugs the Bayesian Weights into the AliFlowEvent (selection 0)
133 void Weightening() ; // Calculates weights and fills PhiWgt histograms
134
135 // Open a new Imput File / Load a new Event
136 AliFlowEvent* GetEvt(Int_t evt = -1) ; // Gets flow event & V0s
137 Bool_t Open(const Char_t* filename="") ; // Open FlowEvents file
138 Bool_t FillFromFlowEvent() ; // Fills internal variables and array from Flow Events
139
140 // Internal methods to fill the histogram
141 void FillEventHistograms() ; // Fills Events' histograms (from AliFlowEvent)
142 void FillParticleHistograms() ; // Fills Tracks' histograms (from AliFlowTrack)
143 void FillV0Histograms() ; // Fills V0s' histograms
144 int HarmonicsLoop(float eta,float phi,float pt,int numPid=-1) ; // Harmonics & Selections relates histograms (from AliFlowTracks)
145 void FillLabels() ; // fills an histogram of Labels (the ones from ESD)
146
147 // Resolution Calculation
148 void Resolution() ; // Calculates resolution and mean flow values
149 Double_t chi(double res) ; // Calculates chi from the event plane resolution
150 Double_t resEventPlane(double chi) ; // Calculates the event plane resolution as a function of chi
151 Double_t resEventPlaneK2(double chi) ; // Calculates the event plane resolution as a function of chi for the case k=2.
152 Double_t resEventPlaneK3(double chi) ; // Calculates the event plane resolution as a function of chi for the case k=3.
153 Double_t resEventPlaneK4(double chi) ; // Calculates the event plane resolution as a function of chi for the case k=4.
154
155 // Flags
156 Bool_t mV0 ; //! correlation analysis is done also for neutral secundary vertex
157 Bool_t mShuffle ; //! to randomly reshuffle tracks
158 Bool_t mV1Ep1Ep2; //! Flag for v_1{EP1,EP2} calculation on/off
159 Bool_t mEtaSub; //! eta subevents
160 Bool_t mReadPhiWgt ; //! Flag for reading Wgt histograms from file (automatic if flowPhi.hist.root is there)
161 Bool_t mWritePhiWgt ; //! Flag for writing Wgt histograms to file (automatic if flowPhi.hist.root is NOT there)
162 Bool_t mRedoWgt ; //! Flag for recalculating Wgt histograms (even if flowPhi.hist.root exist)
163 Bool_t mPhiWgt ; //! Phi Weights are applied to Phi distrib. (default is true)
164 Bool_t mBayWgt ; //! Bayesian Weights are applied to P.Id. (default is false)
165 Bool_t mRePid ; //! Re-Calculates the P.Id. basing on the bayesian wgts (if plugged in)
166 Bool_t mOnlyConstrainable ; //! to loop just over constrainable tracks
167 Bool_t mMakeAll ; //! claculates all events vars in one shoot (should run faster)
168 Bool_t mLabellingFirst ; //! creates label file (internal)
169 Bool_t mLabelling ; //! takes note of Labels from ESD
170
171 Bool_t mPtWgt ; //! flag to use pT as a weight for RP determination
172 Bool_t mEtaWgt ; //! flag to use eta as a weight for RP determination
173 Bool_t mOnePhiWgt ; //! if kTRUE: just one phi-wgt histogram, if kFALSE: three phi-wgt histogram (TPC+,TPC-,cross)
174
175 // ...for debugging
176 Int_t mDebug ; //! Debug level (0,1,2,3)
177 Bool_t Debug0 ; //! Flag for Debug couts
178 Bool_t Debug1 ; //! Flag for Debug couts lev.1
179 Bool_t Debug2 ; //! Flag for Debug couts lev.2
180 Bool_t Debug3 ; //! Flag for Debug couts lev.3
181 Bool_t Debug4 ; //! Flag for Debug couts lev.3
182
183 // File names
184 TString mHistFileName ; //! Output File Name (histograms from flow analysis)
185 TString mPhiWgtFileName ; //! Wgt File Name (histograms for weight)
186 TString mFlowEvtFileName ; //! Input file name (Flow Events)
187 Bool_t fOneInputFile ; //! one/more imput file
188 TObjArray fFileNames ;
189
190 // Couts
191 TString mName ; //! Name from the constructor
192 TString FlowAnalysis ; //! Default mark for cout's
193 TString spaces ; //! Default spaces for cout's
194
195 // variables
196 Int_t nEvents ; //! number of FlowEvents in file
197 Int_t nTracks ; //! number of FlowTracks in FlowEvent
198 Int_t nV0s ; //! number of FlowV0s in FlowEvent
199 Int_t evtN ; //! current Event number (after selected ++)
200 TString evt_name ; //! current Event name (number)
201 Float_t vertex[3] ; //! Event's Vertex position
202
203 // For weights
204 Flow::PhiWgt_t nPhiWgt ; //! PhiWgt Array (all TPC)
205 Flow::PhiWgt_t nPhiWgtPlus ; //! PhiWgt Array (TPC+)
206 Flow::PhiWgt_t nPhiWgtMinus ; //! PhiWgt Array (TPC-)
207 Flow::PhiWgt_t nPhiWgtCross ; //! PhiWgt Array (TPC/)
208 // For bayesian weights
209 Double_t nBayWgt[Flow::nSels][Flow::nPid] ; //! Bayesian weights (expected particle abundance)
210
211#ifndef __CINT__
212 TVector2 mQ[Flow::nSels][Flow::nHars]; //! flow vector
213 Float_t mPsi[Flow::nSels][Flow::nHars]; //! event plane angle
214 UInt_t mMult[Flow::nSels][Flow::nHars]; //! multiplicity
215 Float_t m_q[Flow::nSels][Flow::nHars]; //! Q/::sqrt(Mult)
216 TVector2 mQSub[Flow::nSubs][Flow::nSels][Flow::nHars]; //! flow vector subs
217 Float_t mPsiSub[Flow::nSubs][Flow::nSels][Flow::nHars]; //! plane angle of subevents
218 UInt_t mMultSub[Flow::nSubs][Flow::nSels][Flow::nHars]; //! multiplicity subs
219 Float_t mRes[Flow::nSels][Flow::nHars]; //! event plane resolution
220 Float_t mResErr[Flow::nSels][Flow::nHars]; //! event plane resolution error
221#endif /*__CINT__*/
222
223 // Internal pointers
224 AliFlowEvent* pFlowEvent ; //! pointer to AliFlowEvent
225 AliFlowTrack* pFlowTrack ; //! pointer to AliFlowTrack
226 AliFlowV0* pFlowV0 ; //! pointer to AliFlowV0
227 AliFlowSelection* pFlowSelect ; //! selection object
228 TFile* pFlowEventsFile ; //! pointer to FlowEvents file (input)
229 TList* pFlowEventsList ; //! FlowEvents in the file (input)
230 TObjArray* pFlowTracks ; //! pointer to the TrackCollection
231 TObjArray* pFlowV0s ; //! pointer to the V0Collection
232 TFile* histFile ; //! histograms file (output)
233 //TTree* pFlowTree; //! flow events TTree (NEW input - not there)
234
235 // for Histograms
236 TString xLabel ; //! label axis with rapidity or pseudorapidity
237 Float_t mEtaMin ; //! histo range (eta)
238 Float_t mEtaMax ; //! histo range (eta)
239 Int_t mNEtaBins ; //! histo bins (eta)
240 Float_t mPtRange_for_vEta[2] ; //! pt range for the v(eta) histograms.
241 Float_t mEtaRange_for_vPt[2] ; //! |eta| range for the v(pt) histograms.
242 Int_t maxLabel ; //! for the MC labels histogram (max bin)
243
244 TOrdCollection* mPhiWgtHistList ; //! Weights: histogram list
245 TOrdCollection* mVnResHistList ; //! Resolution and Vn: histogram list
246
247// for Single histograms
248
249 // *****************
250 // EVENTs HISTOGRAMS
251 // *****************
252 TH1F* mHistTrigger; //!
253 TH1F* mHistMult; //!
254 TH1F* mHistV0Mult; //!
255 TH1F* mHistOrigMult; //!
256 TH1F* mHistMultOverOrig; //!
257 TH1F* mHistMultEta; //!
258 TH1F* mHistCent; //!
259 TH1F* mHistVertexZ; //!
260 TH2F* mHistVertexXY2D; //!
261 TH2F* mHistEnergyZDC; //!
262 TH1F* mHistPartZDC; //!
263 TProfile* mHistPidMult; //!
264 TH1F* mHistBayPidMult; //!
265 TH1F* mHistEtaSym; //! // ...part also
266 TH1F* mHistEtaSymPart; //!
267 TH2F* mHistEtaSymVerZ2D; //! // ...part also
268 TH2F* mHistEtaSymVerZ2DPart; //!
269 // selected (TR & V0)
270 TH1F* mHistMultPart; //!
271 TH1F* mHistV0MultPart; //!
272 TH1F* mHistBayPidMultPart; //!
273 TH1F* mHistMultPartUnit; //!
274
275 // *****************
276 // TRACKs HISTOGRAMS (all tracks)
277 // *****************
278 TH1F* mHistPtot ; //!
279 TH1F* mHistPt ; //!
280 TH1F* mHistCharge; //!
281 TH1F* mHistDcaGlobal; //!
282 TH1F* mHistDca; //!
283 TH1F* mHistTransDca; //!
284 TH1F* mHistChi2; //!
285 TH1F* mHistLenght; //!
286 TH1F* mHistInvMass ; //!
287 TH1F* mHistFitOverMax; //!
288 TH2D* mHistPhiPtCon ; //!
289 TH2D* mHistPhiPtUnc ; //!
290 TH2D* mHistPtPhiPos ; //!
291 TH2D* mHistPtPhiNeg ; //!
292 TH3F* mHistAllEtaPtPhi3D; //!
293 TProfile* mHistCosPhi; //!
294 TH2F* mHistPidPt; //!
295 TH1F* mHistPhi ; //!
296 TH1F* mHistPhiCons ; //!
297 TH2D* mHistYieldAll2D; //!
298 TH2D* mHistYieldCon2D; //!
299 TH2D* mHistYieldUnc2D; //!
300 TH3F* mHistConsEtaPtPhi3D; //!
301 TH3F* mHistGlobEtaPtPhi3D; //!
302 TH3F* mHistUncEtaPtPhi3D ; //!
303 // fit & dE/dX for each detector (all tracks)
304 TH1F* mHistChi2ITS; //!
305 TH1F* mHistChi2normITS; //!
306 TH1F* mHistFitPtsITS; //!
307 TH1F* mHistMaxPtsITS; //!
308 TH2F* mHistMeanDedxPos2DITS; //!
309 TH2F* mHistMeanDedxNeg2DITS; //!
310 // -
311 TH1F* mHistChi2TPC; //!
312 TH1F* mHistChi2normTPC; //!
313 TH1F* mHistFitPtsTPC; //!
314 TH1F* mHistMaxPtsTPC; //!
315 TH1F* mHistFitOverMaxTPC; //!
316 TH2F* mHistMeanDedxPos2D; //!
317 TH2F* mHistMeanDedxNeg2D; //!
318 // -
319 TH1F* mHistChi2TRD; //!
320 TH1F* mHistChi2normTRD; //!
321 TH1F* mHistFitPtsTRD; //!
322 TH1F* mHistMaxPtsTRD; //!
323 TH2F* mHistMeanDedxPos2DTRD; //!
324 TH2F* mHistMeanDedxNeg2DTRD; //!
325 // -
326 TH1F* mHistChi2TOF; //!
327 TH1F* mHistChi2normTOF; //!
328 TH1F* mHistFitPtsTOF; //!
329 TH1F* mHistMaxPtsTOF; //!
330 TH2F* mHistMeanDedxPos2DTOF; //!
331 TH2F* mHistMeanDedxNeg2DTOF; //!
332 // detector response for particle type (all tracks, based on Pid)
333 TH2F* mHistMeanTPCPiPlus ; //!
334 TH2F* mHistMeanTPCPiMinus ; //!
335 TH2F* mHistMeanTPCProton ; //!
336 TH2F* mHistMeanTPCPbar ; //!
337 TH2F* mHistMeanTPCKplus ; //!
338 TH2F* mHistMeanTPCKminus ; //!
339 TH2F* mHistMeanTPCDeuteron ; //!
340 TH2F* mHistMeanTPCAntiDeuteron ; //!
341 TH2F* mHistMeanTPCPositron ; //!
342 TH2F* mHistMeanTPCElectron ; //!
343 TH2F* mHistMeanTPCMuonPlus ; //!
344 TH2F* mHistMeanTPCMuonMinus ; //!
345 // -
346 TH2F* mHistMeanITSPiPlus ; //!
347 TH2F* mHistMeanITSPiMinus ; //!
348 TH2F* mHistMeanITSProton ; //!
349 TH2F* mHistMeanITSPbar ; //!
350 TH2F* mHistMeanITSKplus ; //!
351 TH2F* mHistMeanITSKminus ; //!
352 TH2F* mHistMeanITSDeuteron ; //!
353 TH2F* mHistMeanITSAntiDeuteron ; //!
354 TH2F* mHistMeanITSPositron ; //!
355 TH2F* mHistMeanITSElectron ; //!
356 TH2F* mHistMeanITSMuonPlus ; //!
357 TH2F* mHistMeanITSMuonMinus ; //!
358 // -
359 TH2F* mHistMeanTOFPiPlus ; //!
360 TH2F* mHistMeanTOFPiMinus ; //!
361 TH2F* mHistMeanTOFProton ; //!
362 TH2F* mHistMeanTOFPbar ; //!
363 TH2F* mHistMeanTOFKplus ; //!
364 TH2F* mHistMeanTOFKminus ; //!
365 TH2F* mHistMeanTOFDeuteron ; //!
366 TH2F* mHistMeanTOFAntiDeuteron ; //!
367 TH2F* mHistMeanTOFPositron ; //!
368 TH2F* mHistMeanTOFElectron ; //!
369 TH2F* mHistMeanTOFMuonPlus ; //!
370 TH2F* mHistMeanTOFMuonMinus ; //!
371 // -
372 TH2F* mHistMeanTRDPiPlus ; //!
373 TH2F* mHistMeanTRDPiMinus ; //!
374 TH2F* mHistMeanTRDProton ; //!
375 TH2F* mHistMeanTRDPbar ; //!
376 TH2F* mHistMeanTRDKplus ; //!
377 TH2F* mHistMeanTRDKminus ; //!
378 TH2F* mHistMeanTRDDeuteron ; //!
379 TH2F* mHistMeanTRDAntiDeuteron ; //!
380 TH2F* mHistMeanTRDPositron ; //!
381 TH2F* mHistMeanTRDElectron ; //!
382 TH2F* mHistMeanTRDMuonPlus ; //!
383 TH2F* mHistMeanTRDMuonMinus ; //!
384 // pid probability for all particle (all tracks)
385 TH1F* mHistPidPiPlus; //!
386 TH1F* mHistPidPiMinus; //!
387 TH1F* mHistPidProton; //!
388 TH1F* mHistPidAntiProton; //!
389 TH1F* mHistPidKplus; //!
390 TH1F* mHistPidKminus; //!
391 TH1F* mHistPidDeuteron; //!
392 TH1F* mHistPidAntiDeuteron; //!
393 TH1F* mHistPidElectron; //!
394 TH1F* mHistPidPositron; //!
395 TH1F* mHistPidMuonMinus; //!
396 TH1F* mHistPidMuonPlus; //!
397 // pid probability for particle type (all tracks, based on Pid)
398 TH1F* mHistPidPiPlusPart; //!
399 TH1F* mHistPidPiMinusPart; //!
400 TH1F* mHistPidProtonPart; //!
401 TH1F* mHistPidAntiProtonPart; //!
402 TH1F* mHistPidKplusPart; //!
403 TH1F* mHistPidKminusPart; //!
404 TH1F* mHistPidDeuteronPart; //!
405 TH1F* mHistPidAntiDeuteronPart; //!
406 TH1F* mHistPidElectronPart; //!
407 TH1F* mHistPidPositronPart; //!
408 TH1F* mHistPidMuonMinusPart; //!
409 TH1F* mHistPidMuonPlusPart; //!
410 // MC labels from the simulation (all tracks)
411 TH2F* mLabHist; //!
412 // *****************
413 // selected TRACKS
414 // *****************
415 TProfile* mHistBinEta; //!
416 TProfile* mHistBinPt; //!
417 //
418 TH3F* mHistEtaPtPhi3DPart ; //!
419 TH2D* mHistYieldPart2D; //!
420 TH1F* mHistDcaGlobalPart ; //!
421 TH1F* mHistInvMassPart ; //!
422 TH3F* mHistEtaPtPhi3DOut ; //!
423 TH2D* mHistYieldOut2D; //!
424 TH1F* mHistDcaGlobalOut ; //!
425 TH1F* mHistInvMassOut ; //!
426 TH3F* mHistMeanDedxPos3DPart ; //!
427 TH3F* mHistMeanDedxNeg3DPart ; //!
428 TH3F* mHistMeanDedxPos3DPartITS ; //!
429 TH3F* mHistMeanDedxNeg3DPartITS ; //!
430//
431
432 // *****************
433 // V0s HISTOGRAMS (all v0s)
434 // *****************
435 TH1F* mHistV0Mass; //!
436 TH3F* mHistV0EtaPtPhi3D; //!
437 TH2D* mHistV0YieldAll2D; //!
438 TH1F* mHistV0Dca; //!
439 TH1F* mHistV0Chi2; //!
440 TH1F* mHistV0Lenght; //!
441 TH1F* mHistV0Sigma; //!
442 TProfile* mHistV0CosPhi; //!
443 TH2D* mHistV0MassPtSlices; //!
444 // *****************
445 // selected V0s
446 // *****************
447 TProfile* mHistV0BinEta; //!
448 TProfile* mHistV0BinPt; //!
449 TProfile* mHistV0sbBinEta; //!
450 TProfile* mHistV0sbBinPt; //!
451 //
452 TH1F* mHistV0MassWin ; //!
453 TH3F* mHistV0EtaPtPhi3DPart ; //!
454 TH2D* mHistV0YieldPart2D; //!
455 TH1F* mHistV0DcaPart ; //!
456 TH1F* mHistV0LenghtPart ; //!
457 TH1F* mHistV0sbMassSide ; //!
458 TH3F* mHistV0sbEtaPtPhi3DPart ; //!
459 TH2D* mHistV0sbYieldPart2D; //!
460 TH1F* mHistV0sbDcaPart ; //!
461 TH1F* mHistV0sbLenghtPart ; //!
462
463// for each harmonic, each selection, and each sub-event
464
465 // *****************
466 // SUB-EVENTs HISTOGRAMS
467 // *****************
468 struct histSubHars {
469 TH1F* mHistPsiSubs;
470 };
471 struct histSubs;
472 friend struct histSubs;
473 struct histSubs {
474 struct histSubHars histSubHar[Flow::nHars];
475 };
476 struct histSubs histSub[Flow::nSels*Flow::nSubs]; //!
477
478// for each harmonic and each selection
479
480 struct histFullHars
481 {
482 // weights
483 TH1D* mHistPhiPlus;
484 TH1D* mHistPhiMinus;
485 TH1D* mHistPhiAll;
486 TH1D* mHistPhiWgtPlus;
487 TH1D* mHistPhiWgtMinus;
488 TH1D* mHistPhiWgtAll;
489 TH1D* mHistPhiFlatPlus;
490 TH1D* mHistPhiFlatMinus;
491 TH1D* mHistPhiFlatAll;
492 TH1D* mHistPhi;
493 TH1D* mHistPhiWgt;
494 TH1D* mHistPhiFlat;
495 // flow (events)
496 TH1F* mHistPsi;
497 TH1F* mHistPsiSubCorr;
498 TH1F* mHistPsiSubCorrDiff;
499 TH1F* mHistPsi_Diff;
500 TH1F* mHistMult;
501 TH1F* mHist_q;
502 // flow (tracks)
503 TH1F* mHistPhiCorr;
504 TProfile2D* mHist_vObs2D;
505 TProfile* mHist_vObsEta;
506 TProfile* mHist_vObsPt;
507 TH2D* mHist_v2D;
508 TH1D* mHist_vEta;
509 TH1D* mHist_vPt;
510 // flow (v0s)
511 TH1F* mHistV0PhiCorr;
512 TProfile2D* mHistV0_vObs2D;
513 TProfile* mHistV0_vObsEta;
514 TProfile* mHistV0_vObsPt;
515 TH2D* mHistV0_v2D;
516 TH1D* mHistV0_vEta;
517 TH1D* mHistV0_vPt;
518 // flow (v0s sidebands)
519 TProfile* mHistV0sb_vObsEta_sx ;
520 TProfile* mHistV0sb_vObsPt_sx ;
521 TProfile* mHistV0sb_vObsEta_dx ;
522 TProfile* mHistV0sb_vObsPt_dx ;
523 TH1F* mHistV0sbPhiCorr ;
524 TProfile2D* mHistV0sb_vObs2D ;
525 TProfile* mHistV0sb_vObsEta ;
526 TProfile* mHistV0sb_vObsPt ;
527 TH2D* mHistV0sb_v2D ;
528 TH1D* mHistV0sb_vEta ;
529 TH1D* mHistV0sb_vPt ;
530 // check (tracks used for R.P.)
531 TH1F* mHistYieldPt ;
532 TH3F* mHistEtaPtPhi3D ;
533 TH2D* mHistYield2D ;
534 TH1F* mHistDcaGlob ;
535 // check (tracks excluded)
536 TH1F* mHistYieldPtout;
537 TH3F* mHistEtaPtPhi3Dout ;
538 TH2D* mHistYield2Dout ;
539 TH1F* mHistDcaGlobout ;
540 };
541
542// for each selection
543
544 struct histFulls;
545 friend struct histFulls;
546 struct histFulls
547 {
548 TH1F* mHistBayPidMult;
549 // flow (events)
550 TProfile* mHistCos;
551 TH1F* mHistRes;
552 TProfile* mHist_vObs;
553 TH1D* mHist_v;
554 TProfile* mHistV0_vObs;
555 TProfile* mHistV0sb_vObs_sx;
556 TProfile* mHistV0sb_vObs_dx;
557 TH1D* mHistV0_v;
558 // wgt, evts, trks, v0s (as defined above)
559 struct histFullHars histFullHar[Flow::nHars];
560 };
561 struct histFulls histFull[Flow::nSels]; //!
562
563 ClassDef(AliFlowAnalysisMaker,2) // macro for rootcint
564};
565
566#endif
567
568
569
570// lame = not productive; poorly designed; uncool ...