]>
Commit | Line | Data |
---|---|---|
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 | ||
43 | class AliFlowTrack; | |
44 | class AliFlowV0; | |
45 | class AliFlowEvent; | |
46 | class AliFlowSelection; | |
47 | class Flow; | |
48 | class TH1F; | |
49 | class TH1D; | |
50 | class TH2F; | |
51 | class TH2D; | |
52 | class TH3F; | |
53 | class TProfile; | |
54 | class TProfile2D; | |
55 | ||
56 | class 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 | ||
66 | public: | |
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 | ||
126 | private: | |
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 ... |