]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/macrosJPSI/RaaPbPb2010/AliCorrelationReducedEvent.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / macrosJPSI / RaaPbPb2010 / AliCorrelationReducedEvent.h
CommitLineData
eac83c86 1// Classes used for creating a reduced information tree
2// Author: Ionut-Cristian Arsene (i.c.arsene@gsi.de)
3//
4// Basic structure:
5// 1. Event wise information
6// 2. List of tracks in the event
7// 3. List of resonance candidates
8
9#ifndef ALICORRELATIONREDUCEDEVENT_H
10#define ALICORRELATIONREDUCEDEVENT_H
11
12#include <TClonesArray.h>
13#include <TBits.h>
14#include <TMath.h>
15
16
17const Int_t fgkNMaxHarmonics = 10;
18/*class AliCorrelationReducedTrack;
19class AliCorrelationReducedPair;
20class AliCorrelationReducedEventFriend;
21class AliCorrelationReducedEvent;
22class AliCorrelationReducedCaloCluster;*/
23
24//_____________________________________________________________________
25class AliCorrelationReducedTrack : public TObject {
26
27 friend class AliAnalysisTaskCorrelationTree;
28
29 public:
30 AliCorrelationReducedTrack();
31 ~AliCorrelationReducedTrack();
32
33 // getters
34 UShort_t TrackId() const {return fTrackId;}
35 ULong_t Status() const {return fStatus;}
36 Bool_t CheckTrackStatus(UInt_t flag) const {return (flag<8*sizeof(ULong_t) ? (fStatus&(1<<flag)) : kFALSE);}
37 Int_t Charge() const {return (fGlobalPt>0.0 ? +1 : -1);}
38 Float_t Px() const {return TMath::Abs(fGlobalPt)*TMath::Cos(fGlobalPhi);}
39 Float_t Py() const {return TMath::Abs(fGlobalPt)*TMath::Sin(fGlobalPhi);}
40 Float_t Pz() const {return TMath::Abs(fGlobalPt)*TMath::SinH(fGlobalEta);}
41 Float_t P() const {return TMath::Abs(fGlobalPt)*TMath::CosH(fGlobalEta);};
42 Float_t Phi() const {return fGlobalPhi;}
43 Float_t Pt() const {return TMath::Abs(fGlobalPt);}
44 Float_t Eta() const {return fGlobalEta;}
45 Float_t Theta() const {return TMath::ACos(TMath::TanH(fGlobalEta));}
46 Float_t PxTPC() const {return fTPCPt*TMath::Cos(fTPCPhi);}
47 Float_t PyTPC() const {return fTPCPt*TMath::Sin(fTPCPhi);}
48 Float_t PzTPC() const {return fTPCPt*TMath::SinH(fTPCEta);}
49 Float_t PTPC() const {return fTPCPt*TMath::CosH(fTPCEta);};
50 Float_t PhiTPC() const {return fTPCPhi;}
51 Float_t PtTPC() const {return fTPCPt;}
52 Float_t EtaTPC() const {return fTPCEta;}
53 Float_t ThetaTPC() const {return TMath::ACos(TMath::TanH(fTPCEta));}
54 Float_t Pin() const {return fMomentumInner;}
55 Float_t DCAxy() const {return fDCA[0];}
56 Float_t DCAz() const {return fDCA[1];}
57
58 UShort_t ITSncls() const;
59 UChar_t ITSclusterMap() const {return fITSclusterMap;}
60 Bool_t ITSLayerHit(Int_t layer) const {return (layer>=0 && layer<6 ? (fITSclusterMap&(1<<layer)) : kFALSE);};
61 Float_t ITSsignal() const {return fITSsignal;}
62
63 UChar_t TPCncls() const {return fTPCNcls;}
64 UChar_t TPCFindableNcls() const {return fTPCNclsF;}
65 UChar_t TPCCrossedRows() const {return fTPCCrossedRows;}
66 UChar_t TPCnclsIter1() const {return fTPCNclsIter1;}
67 UChar_t TPCClusterMap() const {return fTPCClusterMap;}
68 Int_t TPCClusterMapBitsFired() const;
69 Bool_t TPCClusterMapBitFired(Int_t bit) const {return (bit>=0 && bit<8 ? (fTPCClusterMap&(1<<bit)) : kFALSE);};
70 Float_t TPCsignal() const {return fTPCsignal;}
71 Float_t TPCnSig(Int_t specie) const {return (specie>=0 && specie<=3 ? fTPCnSig[specie] : -999.);}
72
73 Float_t TOFbeta() const {return fTOFbeta;}
74 Float_t TOFnSig(Int_t specie) const {return (specie>=0 && specie<=3 ? fTOFnSig[specie] : -999.);}
75
76 Int_t TRDntracklets(Int_t type) const {return (type==0 || type==1 ? fTRDntracklets[type] : -1);}
77 Float_t TRDpid(Int_t specie) const {return (specie>=0 && specie<=1 ? fTRDpid[specie] : -999.);}
78
79 Int_t CaloClusterId() const {return fCaloClusterId;}
80 //Float_t CaloEnergy(AliCorrelationReducedEvent* event) const {if(fCaloClusterId>0) return event->GetCaloCluster(fCaloClusterId)->Energy();}
81 //Float_t CaloDx(AliCorrelationReducedEvent* event) const {if(fCaloClusterId>0) return event->GetCaloCluster(fCaloClusterId)->Dx();}
82 //Float_t CaloDz(AliCorrelationReducedEvent* event) const {if(fCaloClusterId>0) return event->GetCaloCluster(fCaloClusterId)->Dz();}
83
84 Float_t BayesPID(Int_t specie) const {return (specie>=0 && specie<=2 ? fBayesPID[specie] : -999.);}
85 Bool_t UsedForQvector() const {return fFlags&(1<<0);}
86
87 private:
88 UShort_t fTrackId; // track id
89 ULong_t fStatus; // tracking status
90 Float_t fGlobalPhi; // phi at the vertex from global track, in the [0,2pi) interval
91 Float_t fGlobalPt; // pt*charge at the vertex from global track
92 Float_t fGlobalEta; // eta at the vertex from global track
93 Float_t fTPCPhi; // phi at the vertex from TPC alone tracking , in the [0,2pi) interval
94 Float_t fTPCPt; // pt at the vertex from TPC alone tracking
95 Float_t fTPCEta; // eta at the vertex from TPC alone tracking
96 Float_t fMomentumInner; // inner param momentum (only the magnitude)
97 Float_t fDCA[2]; // DCA xy,z
98
99 // ITS
100 UChar_t fITSclusterMap; // ITS cluster map
101 Float_t fITSsignal; // ITS signal
102
103 // TPC
104 UChar_t fTPCNcls; // TPC ncls
105 UChar_t fTPCCrossedRows; // TPC crossed rows
106 UChar_t fTPCNclsF; // TPC findable ncls
107 UChar_t fTPCNclsIter1; // TPC no clusters after first iteration
108 UChar_t fTPCClusterMap; // TPC cluster distribution map
109 Float_t fTPCsignal; // TPC de/dx
110 Float_t fTPCnSig[4]; // 0-electron; 1-pion; 2-kaon; 3-proton
111
112 // TOF
113 Float_t fTOFbeta; // TOF pid info
114 Float_t fTOFnSig[4]; // TOF n-sigma deviation from expected signal
115
116 // TRD
117 UChar_t fTRDntracklets[2]; // 0 - AliESDtrack::GetTRDntracklets(); 1 - AliESDtrack::GetTRDntrackletsPID() TODO: use only 1 char
118 Float_t fTRDpid[2]; // TRD pid probabilities, [0]-electron, [1]-pion
119
120 // EMCAL/PHOS
121 Int_t fCaloClusterId; // ID for the calorimeter cluster (if any)
122
123 // Bayesian PID
124 Float_t fBayesPID[3]; // Combined Bayesian PID pi/K/p
125
126 UShort_t fFlags; // BIT0 toggled if track used for TPC event plane TODO combine with other posible flags, use for MC pid?
127 // TODO flag for which TPC part used for pid --> Char_t used in 2011 data
128
129 AliCorrelationReducedTrack(const AliCorrelationReducedTrack &c);
130 AliCorrelationReducedTrack& operator= (const AliCorrelationReducedTrack &c);
131
132 ClassDef(AliCorrelationReducedTrack, 2);
133};
134
135
136//_____________________________________________________________________
137class AliCorrelationReducedPair : public TObject {
138
139 friend class AliAnalysisTaskCorrelationTree;
140
141 public:
142 enum CandidateType {
143 kK0sToPiPi=0,
144 kPhiToKK,
145 kLambda0ToPPi,
146 kALambda0ToPPi,
147 kJpsiToEE,
148 kNMaxCandidateTypes
149 };
150 AliCorrelationReducedPair();
151 AliCorrelationReducedPair(const AliCorrelationReducedPair &c);
152 ~AliCorrelationReducedPair();
153
154 // getters
155 Char_t CandidateId() const {return fCandidateId;}
156 Char_t PairType() const {return fPairType;}
157 Int_t LegId(Int_t leg) const {return (leg==0 || leg==1 ? fLegIds[leg] : -1);}
158 Float_t Mass(Int_t idx=0) const {return (idx>=0 && idx<3 ? fMass[idx] : -999.);}
159 Float_t Px() const {return fPt*TMath::Cos(fPhi);}
160 Float_t Py() const {return fPt*TMath::Sin(fPhi);}
161 Float_t Pz() const {return fPt*TMath::SinH(fEta);}
162 Float_t P() const {return fPt*TMath::CosH(fEta);}
163 Float_t Phi() const {return fPhi;}
164 Float_t Pt() const {return fPt;}
165 Float_t Eta() const {return fEta;}
166 Float_t Energy() const;
167 Float_t Rapidity() const;
168 Float_t Theta() const {return TMath::ACos(TMath::TanH(fEta));}
169 Float_t Lxy() const {return fLxy;}
170 Float_t OpeningAngle() const {return fOpeningAngle;}
171 Bool_t IsOnTheFly() const {return fPairType;}
172 UInt_t MCid() const {return fMCid;}
173 Bool_t CheckMC(const Int_t flag) const {return (flag<32 ? (fMCid&(1<<flag)) : kFALSE);}
174
175 private:
176 Char_t fCandidateId; // candidate type (K0s, Lambda, J/psi, phi, etc)
177 Char_t fPairType; // 0 ++; 1 +-; 2 -- for dielectron pairs; 0- offline, 1- on the fly for V0 candidates
178 UShort_t fLegIds[2]; // leg ids
179 Float_t fMass[3]; // invariant mass for pairs (2 extra mass values for other V0 pid assumptions)
180 // idx=0 -> K0s assumption; idx=1 -> Lambda; idx=2 -> anti-Lambda
181 Float_t fPhi; // pair phi in the [0,2*pi) interval
182 Float_t fPt; // pair pt
183 Float_t fEta; // pair eta
184 Float_t fLxy; // pseudo-proper decay length
185 Float_t fOpeningAngle; // opening angle TODO remove ???
186 UInt_t fMCid; // Bit map with Monte Carlo info about the pair
187
188 AliCorrelationReducedPair& operator= (const AliCorrelationReducedPair &c);
189
190 ClassDef(AliCorrelationReducedPair, 1);
191};
192
193
194//_________________________________________________________________________
195class AliCorrelationReducedEventFriend : public TObject {
196
197 friend class AliAnalysisTaskCorrelationTree;
198
199 public:
200 enum EventPlaneStatus {
201 kRaw=0,
202 kCalibrated,
203 kRecentered,
204 kShifted,
205 kNMaxFlowFlags
206 };
207 enum EventPlaneDetector {
208 kTPC=0,
209 kTPCptWeights,
210 kTPCpos,
211 kTPCneg,
212 kVZEROA,
213 kVZEROC,
214 kFMD,
215 kZDCA,
216 kZDCC,
217 kNdetectors
218 };
219
220 AliCorrelationReducedEventFriend();
221 ~AliCorrelationReducedEventFriend();
222
223 Double_t Qx(Int_t det, Int_t harmonic) const {return (det>=0 && det<kNdetectors && harmonic>0 && harmonic<=fgkNMaxHarmonics ? fQvector[det][harmonic-1][0] : -999.);}
224 Double_t Qy(Int_t det, Int_t harmonic) const {return (det>=0 && det<kNdetectors && harmonic>0 && harmonic<=fgkNMaxHarmonics ? fQvector[det][harmonic-1][1] : -999.);}
225 Double_t EventPlane(Int_t det, Int_t h) const;
226 UChar_t GetEventPlaneStatus(Int_t det, Int_t h) const {return (det>=0 && det<kNdetectors && h>0 && h<=fgkNMaxHarmonics ? fEventPlaneStatus[det][h] : -999.);}
227 Bool_t CheckEventPlaneStatus(Int_t det, Int_t h, EventPlaneStatus flag) const;
228 void CopyEvent(AliCorrelationReducedEventFriend* event);
229
230 void SetQx(Int_t det, Int_t harmonic, Float_t qx) { if(det>=0 && det<kNdetectors && harmonic>0 && harmonic<=fgkNMaxHarmonics) fQvector[det][harmonic-1][0]=qx;}
231 void SetQy(Int_t det, Int_t harmonic, Float_t qy) { if(det>=0 && det<kNdetectors && harmonic>0 && harmonic<=fgkNMaxHarmonics) fQvector[det][harmonic-1][1]=qy;}
232 void SetEventPlaneStatus(Int_t det, Int_t harmonic, EventPlaneStatus status) {
233 if(det>=0 && det<kNdetectors && harmonic>0 && harmonic<=fgkNMaxHarmonics)
234 fEventPlaneStatus[det][harmonic-1] |= (1<<status);
235 }
236
237 private:
238 // Q-vectors for the first 10 harmonics from TPC, VZERO, FMD and ZDC detectors
239 Double_t fQvector[kNdetectors][fgkNMaxHarmonics][2]; // Q vector components for all detectors and 6 harmonics
240 UChar_t fEventPlaneStatus[kNdetectors][fgkNMaxHarmonics]; // Bit maps for the event plane status (1 char per detector and per harmonic)
241
242 void ClearEvent();
243 AliCorrelationReducedEventFriend(const AliCorrelationReducedEventFriend &c);
244 AliCorrelationReducedEventFriend& operator= (const AliCorrelationReducedEventFriend &c);
245
246 ClassDef(AliCorrelationReducedEventFriend, 1);
247};
248
249
250//_________________________________________________________________________
251class AliCorrelationReducedCaloCluster : public TObject {
252
253 friend class AliAnalysisTaskCorrelationTree;
254
255 public:
256 enum ClusterType {
257 kUndefined=0, kEMCAL, kPHOS
258 };
259
260 AliCorrelationReducedCaloCluster();
261 ~AliCorrelationReducedCaloCluster();
262
263 Bool_t IsEMCAL() const {return (fType==kEMCAL ? kTRUE : kFALSE);}
264 Bool_t IsPHOS() const {return (fType==kPHOS ? kTRUE : kFALSE);}
265 Float_t Energy() const {return fEnergy;}
266 Float_t Dx() const {return fTrackDx;}
267 Float_t Dz() const {return fTrackDz;}
268
269 private:
270 Char_t fType; // cluster type (EMCAL/PHOS)
271 Float_t fEnergy; // cluster energy
272 Float_t fTrackDx; // distance to closest track in phi
273 Float_t fTrackDz; // distance to closest track in z
274
275 AliCorrelationReducedCaloCluster(const AliCorrelationReducedCaloCluster &c);
276 AliCorrelationReducedCaloCluster& operator= (const AliCorrelationReducedCaloCluster &c);
277
278 ClassDef(AliCorrelationReducedCaloCluster, 1);
279};
280
281
282//_________________________________________________________________________
283class AliCorrelationReducedEvent : public TObject {
284
285 friend class AliAnalysisTaskCorrelationTree;
286
287 public:
288 AliCorrelationReducedEvent();
289 ~AliCorrelationReducedEvent();
290
291 // getters
292 Int_t RunNo() const {return fRunNo;}
293 UShort_t BC() const {return fBC;}
294 ULong64_t TriggerMask() const {return fTriggerMask;}
295 Bool_t IsPhysicsSelection() const {return fIsPhysicsSelection;}
296 Float_t Vertex(Int_t axis) const {return (axis>=0 && axis<=2 ? fVtx[axis] : 0);}
297 Int_t VertexNContributors() const {return fNVtxContributors;}
298 Float_t VertexTPC(Int_t axis) const {return (axis>=0 && axis<=2 ? fVtxTPC[axis] : 0);}
299 Int_t VertexTPCContributors() const {return fNVtxTPCContributors;}
300 Float_t CentralityVZERO() const {return fCentrality[0];}
301 Float_t CentralitySPD() const {return fCentrality[1];}
302 Float_t CentralityTPC() const {return fCentrality[2];}
303 Float_t CentralityZEMvsZDC() const {return fCentrality[3];}
304 Int_t CentralityQuality() const {return fCentQuality;}
305 Int_t NV0CandidatesTotal() const {return fNV0candidates[0];}
306 Int_t NV0Candidates() const {return fNV0candidates[1];}
307 Int_t NDielectrons() const {return fNDielectronCandidates;}
308 Int_t NTracksTotal() const {return fNtracks[0];}
309 Int_t NTracks() const {return fNtracks[1];}
310 Int_t SPDntracklets() const {return fSPDntracklets;}
311
312 Float_t MultChannelVZERO(Int_t channel) const {return (channel>=0 && channel<=63 ? fVZEROMult[channel] : -999.);}
313 Float_t MultVZEROA() const;
314 Float_t MultVZEROC() const;
315 Float_t MultVZERO() const;
316 Float_t MultRingVZEROA(Int_t ring) const;
317 Float_t MultRingVZEROC(Int_t ring) const;
318
319 Float_t EnergyZDC(Int_t channel) const {return (channel>=0 && channel<8 ? fZDCnEnergy[channel] : -999.);}
320 Float_t EnergyZDCnA(Int_t channel) const {return (channel>=0 && channel<4 ? fZDCnEnergy[channel+4] : -999.);}
321 Float_t EnergyZDCnC(Int_t channel) const {return (channel>=0 && channel<4 ? fZDCnEnergy[channel] : -999.);}
322
323 AliCorrelationReducedTrack* GetTrack(Int_t i) const {return (i<fNtracks[1] ? (AliCorrelationReducedTrack*)fTracks->At(i) : 0x0);}
324 AliCorrelationReducedPair* GetV0Pair(Int_t i) const {return (i>=0 && i<fNV0candidates[1] ? (AliCorrelationReducedPair*)fCandidates->At(i) : 0x0);}
325 AliCorrelationReducedPair* GetDielectronPair(Int_t i) const {return (i>=0 && i<fNDielectronCandidates ? (AliCorrelationReducedPair*)fCandidates->At(i+fNV0candidates[1]) : 0x0);}
326 TClonesArray* GetPairs() const {return fCandidates;}
327 TClonesArray* GetTracks() const {return fTracks;}
328
329 Int_t GetNCaloClusters() const {return fNCaloClusters;}
330 AliCorrelationReducedCaloCluster* GetCaloCluster(Int_t i) const {return (i>=0 && i<fNCaloClusters ? (AliCorrelationReducedCaloCluster*)fCaloClusters->At(i) : 0x0);}
331
332 void GetQvector(Double_t Qvec[][2], Int_t det);
333 void GetTPCQvector(Double_t Qvec[][2], Int_t det);
334 void GetVZEROQvector(Double_t Qvec[][2], Int_t det);
335 void GetVZEROQvector(Double_t Qvec[][2], Int_t det, Float_t* vzeroMult);
336 void GetZDCQvector(Double_t Qvec[][2], Int_t det);
337
338 private:
339 Int_t fRunNo; // run number
340 UShort_t fBC; // bunch crossing
341 ULong64_t fTriggerMask; // trigger mask
342 Bool_t fIsPhysicsSelection; // PhysicsSelection passed event
343 Float_t fVtx[3]; // global event vertex vector in cm
344 Int_t fNVtxContributors; // global event vertex contributors
345 Float_t fVtxTPC[3]; // TPC only event vertex
346 Int_t fNVtxTPCContributors; // TPC only event vertex contributors
347 Float_t fCentrality[4]; // centrality; 0-VZERO, 1-SPD, 2-TPC, 3-ZEMvsZDC
348 Int_t fCentQuality; // quality flag for the centrality
349 Int_t fNV0candidates[2]; // number of V0 candidates, [0]-total, [1]-selected for the tree
350 Int_t fNDielectronCandidates; // number of pairs selected as dielectrons
351 Int_t fNtracks[2]; // number of tracks, [0]-total, [1]-selected for the tree
352 Int_t fSPDntracklets; // number of SPD tracklets in |eta|<1.0
353
354 Float_t fVZEROMult[64]; // VZERO multiplicity in all 64 channels
355 Float_t fZDCnEnergy[8]; // neutron ZDC energy in all 8 channels
356
357 TClonesArray* fTracks; //-> array containing global tracks
358 static TClonesArray* fgTracks;
359
360 TClonesArray* fCandidates; //-> array containing pair candidates
361 static TClonesArray* fgCandidates;
362
363 Int_t fNCaloClusters; // number of calorimeter clusters
364 TClonesArray* fCaloClusters; //-> array containing calorimeter clusters
365 static TClonesArray* fgCaloClusters;
366
367 void ClearEvent();
368 AliCorrelationReducedEvent(const AliCorrelationReducedEvent &c);
369 AliCorrelationReducedEvent& operator= (const AliCorrelationReducedEvent &c);
370
371 ClassDef(AliCorrelationReducedEvent, 2);
372};
373
374//_______________________________________________________________________________
375inline UShort_t AliCorrelationReducedTrack::ITSncls() const
376{
377 //
378 // ITS number of clusters from the cluster map
379 //
380 UShort_t ncls=0;
381 for(Int_t i=0; i<6; ++i) ncls += (ITSLayerHit(i) ? 1 : 0);
382 return ncls;
383}
384
385
386//_______________________________________________________________________________
387inline Int_t AliCorrelationReducedTrack::TPCClusterMapBitsFired() const
388{
389 //
390 // Count the number of bits fired in the TPC cluster map
391 //
392 Int_t nbits=0;
393 for(Int_t i=0; i<8; ++i) nbits += (TPCClusterMapBitFired(i) ? 1 : 0);
394 return nbits;
395}
396
397
398//_______________________________________________________________________________
399inline Float_t AliCorrelationReducedPair::Energy() const
400{
401 //
402 // Return the energy
403 //
404 Float_t mass=fMass[0];
405 switch (fCandidateId) {
406 case kK0sToPiPi:
407 mass = fMass[0];
408 break;
409 case kLambda0ToPPi:
410 mass = fMass[1];
411 break;
412 case kALambda0ToPPi:
413 mass = fMass[2];
414 break;
415 default:
416 mass = fMass[0];
417 break;
418 }
419 Float_t p = P();
420 return TMath::Sqrt(mass*mass+p*p);
421}
422
423
424//_______________________________________________________________________________
425inline Float_t AliCorrelationReducedPair::Rapidity() const
426{
427 //
428 // return rapidity
429 //
430 Float_t e = Energy();
431 Float_t pz = Pz();
432 if(e-TMath::Abs(pz)>1.0e-10)
433 return 0.5*TMath::Log((e+pz)/(e-pz));
434 else
435 return -999.;
436}
437
438
439//_______________________________________________________________________________
440inline Double_t AliCorrelationReducedEventFriend::EventPlane(Int_t det, Int_t harmonic) const
441{
442 //
443 // Event plane from detector "det" and harmonic "harmonic"
444 //
445 if(det<0 || det>=kNdetectors || harmonic<1 || harmonic>fgkNMaxHarmonics) return -999.;
446 return TMath::ATan2(fQvector[det][harmonic-1][1], fQvector[det][harmonic-1][0])/Double_t(harmonic);
447}
448
449//_______________________________________________________________________________
450inline Bool_t AliCorrelationReducedEventFriend::CheckEventPlaneStatus(Int_t det, Int_t h, EventPlaneStatus flag) const {
451 //
452 // Check the status of the event plane for a given detector and harmonic
453 //
454 if(det<0 || det>=kNdetectors || h<1 || h>fgkNMaxHarmonics) return kFALSE;
455 return (flag<kNMaxFlowFlags ? (fEventPlaneStatus[det][h]&(1<<flag)) : kFALSE);
456}
457
458#endif