]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/ESD/AliESDEvent.h
Adding flatenning to V0A,V0C and total V0 in addition to the existing ring-by-ring...
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDEvent.h
CommitLineData
af885e0f 1// -*- mode: C++ -*-
2#ifndef ALIESDEVENT_H
3#define ALIESDEVENT_H
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7
8/* $Id$ */
9
10//-------------------------------------------------------------------------
f56a9fa7 11// Class AliESDEvent
6989bff3 12// This is the class to deal with during the physics analysis of data.
f56a9fa7 13// It also ensures the backward compatibility with the old ESD format.
af885e0f 14//
f56a9fa7 15// Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch
af885e0f 16//-------------------------------------------------------------------------
17
18#include <TClonesArray.h>
19#include <TObject.h>
20#include <TTree.h>
21#include <TArrayF.h>
22
af885e0f 23
024c7734 24#include "AliVEvent.h"
694aad0c 25// some includes for delegated methods
f0106218 26#include "AliESDCaloTrigger.h"
af885e0f 27#include "AliESDRun.h"
28#include "AliESDHeader.h"
3f47e572 29#include "AliESDTZERO.h"
f0106218 30#include "AliESDZDC.h"
bd95bae7 31#include "AliESDACORDE.h"
af885e0f 32
024c7734 33// AliESDtrack has to be included so that the compiler
34// knows its inheritance tree (= that it is a AliVParticle).
35#include "AliESDtrack.h"
5303c167 36// same for AliESDVertex (which is a AliVVertex)
37#include "AliESDVertex.h"
c8fe2783 38// same for CaloCells and CaloClusters (which is a AliVCaloCells, AliVCluster)
39#include "AliESDCaloCluster.h"
40#include "AliESDCaloCells.h"
41
ae2bccf1 42#include "AliESDVZERO.h"
820b4d9e 43#ifdef MFT_UPGRADE
44//#include "AliESDMFT.h"
45#endif
ae2bccf1 46
af885e0f 47class AliESDfriend;
af885e0f 48class AliESDHLTtrack;
f0106218 49class AliESDVertex;
50class AliESDPmdTrack;
51class AliESDFMD;
52class AliESDkink;
f0106218 53class AliESDv0;
f0106218 54class AliMultiplicity;
55class AliRawDataErrorLog;
56class AliESDRun;
6c8e0967 57class AliESDTrdTrigger;
f0106218 58class AliESDTrdTrack;
52cd0cc0 59class AliESDTrdTracklet;
f0106218 60class AliESDMuonTrack;
af885e0f 61class AliESD;
f0106218 62class AliESDcascade;
fba4b2e2 63class AliCentrality;
ce7adfe9 64class AliEventplane;
cd1d4ee0 65class TRefArray;
bd95bae7 66class AliESDACORDE;
8b12d288 67class AliESDHLTDecision;
8e1324ab 68class AliESDCosmicTrack;
af885e0f 69
80791508 70class TList;
71class TString;
72
73
024c7734 74class AliESDEvent : public AliVEvent {
af885e0f 75public:
76
77
6989bff3 78 enum ESDListIndex {kESDRun,
af885e0f 79 kHeader,
80 kESDZDC,
81 kESDFMD,
82 kESDVZERO,
83 kESDTZERO,
06cc9d95 84 kTPCVertex,
af885e0f 85 kSPDVertex,
86 kPrimaryVertex,
87 kSPDMult,
88 kPHOSTrigger,
89 kEMCALTrigger,
04d01397 90 kSPDPileupVertices,
91 kTrkPileupVertices,
af885e0f 92 kTracks,
93 kMuonTracks,
94 kPmdTracks,
6c8e0967 95 kTrdTrigger,
af885e0f 96 kTrdTracks,
52cd0cc0 97 kTrdTracklets,
af885e0f 98 kV0s,
99 kCascades,
100 kKinks,
101 kCaloClusters,
e649177a 102 kEMCALCells,
103 kPHOSCells,
af885e0f 104 kErrorLogs,
bd95bae7 105 kESDACORDE,
f858b00e 106 kTOFHeader,
8e1324ab 107 kCosmicTracks,
af885e0f 108 kESDListN
820b4d9e 109 #ifdef MFT_UPGRADE
110 // , kESDMFT
111 #endif
af885e0f 112 };
113
114 AliESDEvent();
732a24fe 115 virtual ~AliESDEvent();
116 AliESDEvent &operator=(const AliESDEvent& source); // or make private and use only copy?
117 virtual void Copy(TObject& obj) const;
af885e0f 118
119 // RUN
120 // move this to the UserData!!!
121 const AliESDRun* GetESDRun() const {return fESDRun;}
122
123 // Delegated methods for fESDRun
c017f53f 124 void SetRunNumber(Int_t n) {if(fESDRun) fESDRun->SetRunNumber(n);}
125 Int_t GetRunNumber() const {return fESDRun?fESDRun->GetRunNumber():-1;}
00d00f58 126 void SetPeriodNumber(UInt_t n){
127 if(fESDRun) fESDRun->SetPeriodNumber(n);
128 if(fHeader) fHeader->SetPeriodNumber(n);
129 }
c017f53f 130 UInt_t GetPeriodNumber() const {return fESDRun?fESDRun->GetPeriodNumber():0;}
131 void SetMagneticField(Double_t mf){if(fESDRun) fESDRun->SetMagneticField(mf);}
132 Double_t GetMagneticField() const {return fESDRun?fESDRun->GetMagneticField():0;}
133 void SetDiamond(const AliESDVertex *vertex) { if(fESDRun) fESDRun->SetDiamond(vertex);}
134 Double_t GetDiamondX() const {return fESDRun?fESDRun->GetDiamondX():0;}
135 Double_t GetDiamondY() const {return fESDRun?fESDRun->GetDiamondY():0;}
1c7554f9 136 Double_t GetDiamondZ() const {return fESDRun?fESDRun->GetDiamondZ():0;}
c017f53f 137 Double_t GetSigma2DiamondX() const {return fESDRun?fESDRun->GetSigma2DiamondX():0;}
138 Double_t GetSigma2DiamondY() const {return fESDRun?fESDRun->GetSigma2DiamondY():0;}
1c7554f9 139 Double_t GetSigma2DiamondZ() const {return fESDRun?fESDRun->GetSigma2DiamondZ():0;}
c017f53f 140 void GetDiamondCovXY(Float_t cov[3]) const {if(fESDRun) fESDRun->GetDiamondCovXY(cov);}
141 void SetTriggerClass(const char*name, Int_t index) {if(fESDRun) fESDRun->SetTriggerClass(name,index);}
142 void SetPHOSMatrix(TGeoHMatrix*matrix, Int_t i) {if(fESDRun) fESDRun->SetPHOSMatrix(matrix,i);}
143 const TGeoHMatrix* GetPHOSMatrix(Int_t i) const {return fESDRun?fESDRun->GetPHOSMatrix(i):0x0;}
144 void SetEMCALMatrix(TGeoHMatrix*matrix, Int_t i) {if(fESDRun) fESDRun->SetEMCALMatrix(matrix,i);}
145 const TGeoHMatrix* GetEMCALMatrix(Int_t i) const {return fESDRun?fESDRun->GetEMCALMatrix(i):0x0;}
da6062af 146 void SetCaloTriggerType(const Int_t* type) {if (fESDRun) fESDRun->SetCaloTriggerType(type);}
1dc767cf 147 Int_t* GetCaloTriggerType() const {return fESDRun?fESDRun->GetCaloTriggerType():0x0;}
5e14e698 148 virtual const Float_t* GetVZEROEqFactors() const {return fESDRun?fESDRun->GetVZEROEqFactors():0x0;}
149 virtual Float_t GetVZEROEqMultiplicity(Int_t i) const;
da6062af 150
33fe5eb1 151 //
c017f53f 152 void SetCurrentL3(Float_t cur) const {if(fESDRun) fESDRun->SetCurrentL3(cur);}
153 void SetCurrentDip(Float_t cur) const {if(fESDRun) fESDRun->SetCurrentDip(cur);}
154 void SetBeamEnergy(Float_t be) const {if(fESDRun) fESDRun->SetBeamEnergy(be);}
155 void SetBeamType(const char* bt) const {if(fESDRun) fESDRun->SetBeamType(bt);}
91460b26 156 void SetBeamParticle(Int_t az, Int_t ibeam) {if(fESDRun) fESDRun->SetBeamParticle(az,ibeam);}
c017f53f 157 void SetUniformBMap(Bool_t val=kTRUE) const {if(fESDRun) fESDRun->SetBit(AliESDRun::kUniformBMap,val);}
158 void SetBInfoStored(Bool_t val=kTRUE) const {if(fESDRun) fESDRun->SetBit(AliESDRun::kBInfoStored,val);}
33fe5eb1 159 //
c017f53f 160 Float_t GetCurrentL3() const {return fESDRun?fESDRun->GetCurrentL3():0;}
161 Float_t GetCurrentDip() const {return fESDRun?fESDRun->GetCurrentDip():0;}
162 Float_t GetBeamEnergy() const {return fESDRun?fESDRun->GetBeamEnergy():0;}
163 const char* GetBeamType() const {return fESDRun?fESDRun->GetBeamType():0;}
91460b26 164 Int_t GetBeamParticle(Int_t ibeam) const {return fESDRun?fESDRun->GetBeamParticle(ibeam):0;}
165 Int_t GetBeamParticleA(Int_t ibeam) const {return fESDRun?fESDRun->GetBeamParticleA(ibeam):0;}
166 Int_t GetBeamParticleZ(Int_t ibeam) const {return fESDRun?fESDRun->GetBeamParticleZ(ibeam):0;}
c017f53f 167 Bool_t IsUniformBMap() const {return fESDRun?fESDRun->TestBit(AliESDRun::kUniformBMap):kFALSE;}
33fe5eb1 168 //
c017f53f 169 Bool_t InitMagneticField() const {return fESDRun?fESDRun->InitMagneticField():kFALSE;}
8938f4e0 170 void SetT0spread(Float_t *t) const {if(fESDRun) fESDRun->SetT0spread(t);}
cc4d0e9c 171 virtual void SetVZEROEqFactors(Float_t factors[64]) const {if(fESDRun) fESDRun->SetVZEROEqFactors(factors);}
af885e0f 172 // HEADER
024c7734 173 AliESDHeader* GetHeader() const {return fHeader;}
af885e0f 174
175 // Delegated methods for fHeader
c017f53f 176 void SetTriggerMask(ULong64_t n) {if(fHeader) fHeader->SetTriggerMask(n);}
177 void SetOrbitNumber(UInt_t n) {if(fHeader) fHeader->SetOrbitNumber(n);}
178 void SetTimeStamp(UInt_t timeStamp){if(fHeader) fHeader->SetTimeStamp(timeStamp);}
179 void SetEventType(UInt_t eventType){if(fHeader) fHeader->SetEventType(eventType);}
180 void SetEventSpecie(UInt_t eventSpecie){if(fHeader) fHeader->SetEventSpecie(eventSpecie);}
181 void SetEventNumberInFile(Int_t n) {if(fHeader) fHeader->SetEventNumberInFile(n);}
182 // void SetRunNumber(Int_t n) {if(fHeader) fHeader->SetRunNumber(n);}
183 void SetBunchCrossNumber(UShort_t n) {if(fHeader) fHeader->SetBunchCrossNumber(n);}
184 void SetTriggerCluster(UChar_t n) {if(fHeader) fHeader->SetTriggerCluster(n);}
694aad0c 185
c017f53f 186 ULong64_t GetTriggerMask() const {return fHeader?fHeader->GetTriggerMask():0;}
187 TString GetFiredTriggerClasses() const {return (fESDRun&&fHeader)?fESDRun->GetFiredTriggerClasses(fHeader->GetTriggerMask()):"";}
188 Bool_t IsTriggerClassFired(const char *name) const {return (fESDRun&&fHeader)?fESDRun->IsTriggerClassFired(fHeader->GetTriggerMask(),name):kFALSE;}
2a3dfb14 189 Bool_t IsEventSelected(const char *trigExpr) const;
3b286f80 190 TObject* GetHLTTriggerDecision() const;
191 TString GetHLTTriggerDescription() const;
192 Bool_t IsHLTTriggerFired(const char* name=NULL) const;
158a76dd 193 UInt_t GetOrbitNumber() const {return fHeader?fHeader->GetOrbitNumber():0;}
c017f53f 194 UInt_t GetTimeStamp() const { return fHeader?fHeader->GetTimeStamp():0;}
195 UInt_t GetEventType() const { return fHeader?fHeader->GetEventType():0;}
196 UInt_t GetEventSpecie() const { return fHeader?fHeader->GetEventSpecie():0;}
197 Int_t GetEventNumberInFile() const {return fHeader?fHeader->GetEventNumberInFile():-1;}
198 UShort_t GetBunchCrossNumber() const {return fHeader?fHeader->GetBunchCrossNumber():0;}
199 UChar_t GetTriggerCluster() const {return fHeader?fHeader->GetTriggerCluster():0;}
af885e0f 200
201 // ZDC CKB: put this in the header?
16d867eb 202 AliESDZDC* GetESDZDC() const {return fESDZDC;}
203 AliESDZDC* GetZDCData() const {return fESDZDC;}
204
5d8eaff6 205 void SetZDCData(const AliESDZDC * obj);
af885e0f 206
207 // Delegated methods for fESDZDC
c017f53f 208 Double_t GetZDCN1Energy() const {return fESDZDC?fESDZDC->GetZDCN1Energy():0;}
209 Double_t GetZDCP1Energy() const {return fESDZDC?fESDZDC->GetZDCP1Energy():0;}
210 Double_t GetZDCN2Energy() const {return fESDZDC?fESDZDC->GetZDCN2Energy():0;}
211 Double_t GetZDCP2Energy() const {return fESDZDC?fESDZDC->GetZDCP2Energy():0;}
212 Double_t GetZDCEMEnergy(Int_t i=0) const {return fESDZDC?fESDZDC->GetZDCEMEnergy(i):0;}
213 Int_t GetZDCParticipants() const {return fESDZDC?fESDZDC->GetZDCParticipants():0;}
fba4b2e2 214 AliCentrality* GetCentrality();
ce7adfe9 215 AliEventplane* GetEventplane();
cb62947d 216
2eec2a33 217
b19cc8d0 218 void SetZDC(Float_t n1Energy, Float_t p1Energy, Float_t em1Energy, Float_t em2Energy,
219 Float_t n2Energy, Float_t p2Energy, Int_t participants, Int_t nPartA,
220 Int_t nPartC, Double_t b, Double_t bA, Double_t bC, UInt_t recoflag)
c017f53f 221 {if(fESDZDC) fESDZDC->SetZDC(n1Energy, p1Energy, em1Energy, em2Energy, n2Energy, p2Energy,
b19cc8d0 222 participants, nPartA, nPartC, b, bA, bC, recoflag);}
cb62947d 223 // FMD
af885e0f 224 void SetFMDData(AliESDFMD * obj);
5b96d6f1 225 AliESDFMD *GetFMDData() const { return fESDFMD; }
af885e0f 226
227
228 // TZERO CKB: put this in the header?
229 const AliESDTZERO* GetESDTZERO() const {return fESDTZERO;}
5d8eaff6 230 void SetTZEROData(const AliESDTZERO * obj);
b0e13b29 231 // delegetated methods for fESDTZERO
af885e0f 232
adf36b9d 233 Double32_t GetT0zVertex() const {return fESDTZERO?fESDTZERO->GetT0zVertex():0;}
234 void SetT0zVertex(Double32_t z) {if(fESDTZERO) fESDTZERO->SetT0zVertex(z);}
235 Double32_t GetT0() const {return fESDTZERO?fESDTZERO->GetT0():0;}
236 void SetT0(Double32_t timeStart) {if(fESDTZERO) fESDTZERO->SetT0(timeStart);}
237 Double32_t GetT0clock() const {return fESDTZERO?fESDTZERO->GetT0clock():0;}
238 void SetT0clock(Double32_t timeStart) {if(fESDTZERO) fESDTZERO->SetT0clock(timeStart);}
239 Double32_t GetT0TOF(Int_t icase) const {return fESDTZERO?fESDTZERO->GetT0TOF(icase):0;}
240 const Double32_t * GetT0TOF() const {return fESDTZERO?fESDTZERO->GetT0TOF():0x0;}
241 void SetT0TOF(Int_t icase,Double32_t timeStart) {if(fESDTZERO) fESDTZERO->SetT0TOF(icase,timeStart);}
242 const Double32_t * GetT0time() const {return fESDTZERO?fESDTZERO->GetT0time():0x0;}
243 void SetT0time(Double32_t time[24]) {if(fESDTZERO) fESDTZERO->SetT0time(time);}
244 const Double32_t * GetT0amplitude() const {return fESDTZERO?fESDTZERO->GetT0amplitude():0x0;}
245 void SetT0amplitude(Double32_t amp[24]){if(fESDTZERO) fESDTZERO->SetT0amplitude(amp);}
246 Int_t GetT0Trig() const { return fESDTZERO?fESDTZERO->GetT0Trig():0;}
247 void SetT0Trig(Int_t tvdc) {if(fESDTZERO) fESDTZERO->SetT0Trig(tvdc);}
af885e0f 248
249 // VZERO
250 AliESDVZERO *GetVZEROData() const { return fESDVZERO; }
5d8eaff6 251 void SetVZEROData(const AliESDVZERO * obj);
820b4d9e 252
253 #ifdef MFT_UPGRADE
254 // MFT
255// AliESDMFT *GetMFTData() const { return fESDMFT; }
256// void SetMFTData(AliESDMFT * obj);
257 #endif
258
bd95bae7 259 // ACORDE
260 AliESDACORDE *GetACORDEData() const { return fESDACORDE;}
261 void SetACORDEData(AliESDACORDE * obj);
af885e0f 262
7d44c466 263 void SetESDfriend(const AliESDfriend *f) const;
af885e0f 264 void GetESDfriend(AliESDfriend *f) const;
ddfbc51a 265
af885e0f 266
267
06cc9d95 268 void SetPrimaryVertexTPC(const AliESDVertex *vertex);
269 const AliESDVertex *GetPrimaryVertexTPC() const {return fTPCVertex;}
270
271 void SetPrimaryVertexSPD(const AliESDVertex *vertex);
272 const AliESDVertex *GetPrimaryVertexSPD() const {return fSPDVertex;}
273 const AliESDVertex *GetVertex() const {
274 //For the backward compatibily only
275 return GetPrimaryVertexSPD();
276 }
af885e0f 277
c264b61b 278 void SetPrimaryVertexTracks(const AliESDVertex *vertex);
279 const AliESDVertex *GetPrimaryVertexTracks() const {return fPrimaryVertex;}
518573d7 280 AliESDVertex *PrimaryVertexTracksUnconstrained() const;
c264b61b 281
282 const AliESDVertex *GetPrimaryVertex() const;
af885e0f 283
f858b00e 284
285
286 void SetTOFHeader(const AliTOFHeader * tofEventTime);
287 const AliTOFHeader *GetTOFHeader() const {return fTOFHeader;}
d9fc7e74 288 Float_t GetEventTimeSpread() const {if (fTOFHeader) return fTOFHeader->GetT0spread(); else return 0.;}
289 Float_t GetTOFTimeResolution() const {if (fTOFHeader) return fTOFHeader->GetTOFResolution(); else return 0.;}
f858b00e 290
291
f0106218 292 void SetMultiplicity(const AliMultiplicity *mul);
293
af885e0f 294 const AliMultiplicity *GetMultiplicity() const {return fSPDMult;}
4ace6760 295 void EstimateMultiplicity(Int_t &tracklets,Int_t &trITSTPC,Int_t &trITSSApure,
296 Double_t eta=1.,Bool_t useDCAFlag=kTRUE,Bool_t useV0Flag=kTRUE) const;
f0106218 297
7f68891d 298 Bool_t Clean(Float_t *cleanPars);
7d44c466 299 Bool_t RemoveKink(Int_t i) const;
300 Bool_t RemoveV0(Int_t i) const;
301 Bool_t RemoveTrack(Int_t i) const;
d64bd07d 302
04d01397 303 const AliESDVertex *GetPileupVertexSPD(Int_t i) const {
c017f53f 304 return (const AliESDVertex *)(fSPDPileupVertices?fSPDPileupVertices->UncheckedAt(i):0x0);
04d01397 305 }
6dc21f57 306 Char_t AddPileupVertexSPD(const AliESDVertex *vtx);
04d01397 307 const AliESDVertex *GetPileupVertexTracks(Int_t i) const {
c017f53f 308 return (const AliESDVertex *)(fTrkPileupVertices?fTrkPileupVertices->UncheckedAt(i):0x0);
04d01397 309 }
6dc21f57 310 Char_t AddPileupVertexTracks(const AliESDVertex *vtx);
3f2db92f 311 TClonesArray* GetPileupVerticesTracks() const {return (TClonesArray*)fTrkPileupVertices;}
312 TClonesArray* GetPileupVerticesSPD() const {return (TClonesArray*)fSPDPileupVertices;}
04d01397 313
a98c78e5 314 virtual Bool_t IsPileupFromSPD(Int_t minContributors=3,
315 Double_t minZdist=0.8,
316 Double_t nSigmaZdist=3.,
317 Double_t nSigmaDiamXY=2.,
318 Double_t nSigmaDiamZ=5.) const;
319
b46ff4b0 320 virtual Bool_t IsPileupFromSPDInMultBins() const;
321
af885e0f 322 AliESDtrack *GetTrack(Int_t i) const {
0ecbfc1b 323 if (!fTracks) return 0;
324 AliESDtrack* track = (AliESDtrack*) fTracks->UncheckedAt(i);
325 track->SetESDEvent(this);
326 return track;
af885e0f 327 }
328 Int_t AddTrack(const AliESDtrack *t);
329
65a0cf79 330 /// add new track at the end of tracks array and return instance
331 AliESDtrack* NewTrack();
af885e0f 332
333 AliESDHLTtrack *GetHLTConfMapTrack(Int_t /*i*/) const {
334 // return (AliESDHLTtrack *)fHLTConfMapTracks->UncheckedAt(i);
335 return 0;
336 }
337 void AddHLTConfMapTrack(const AliESDHLTtrack */*t*/) {
338 printf("ESD:: AddHLTConfMapTrack do nothing \n");
339 // TClonesArray &fhlt = *fHLTConfMapTracks;
340 // new(fhlt[fHLTConfMapTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
341 }
342
343
344 AliESDHLTtrack *GetHLTHoughTrack(Int_t /*i*/) const {
345 // return (AliESDHLTtrack *)fHLTHoughTracks->UncheckedAt(i);
346 return 0;
347 }
348 void AddHLTHoughTrack(const AliESDHLTtrack */*t*/) {
349 printf("ESD:: AddHLTHoughTrack do nothing \n");
350 // TClonesArray &fhlt = *fHLTHoughTracks;
351 // new(fhlt[fHLTHoughTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
352 }
353
354 AliESDMuonTrack *GetMuonTrack(Int_t i) const {
c017f53f 355 return (AliESDMuonTrack *)(fMuonTracks?fMuonTracks->UncheckedAt(i):0x0);
af885e0f 356 }
f0106218 357
358 void AddMuonTrack(const AliESDMuonTrack *t);
af885e0f 359
360 AliESDPmdTrack *GetPmdTrack(Int_t i) const {
c017f53f 361 return (AliESDPmdTrack *)(fPmdTracks?fPmdTracks->UncheckedAt(i):0x0);
af885e0f 362 }
f0106218 363
364 void AddPmdTrack(const AliESDPmdTrack *t);
365
af885e0f 366
367 AliESDTrdTrack *GetTrdTrack(Int_t i) const {
c017f53f 368 return (AliESDTrdTrack *)(fTrdTracks?fTrdTracks->UncheckedAt(i):0x0);
af885e0f 369 }
f0106218 370
371
6c8e0967 372 void SetTrdTrigger(const AliESDTrdTrigger *t);
373
374 AliESDTrdTrigger* GetTrdTrigger() const {
375 return (AliESDTrdTrigger*)(fTrdTrigger);
376 }
377
f0106218 378 void AddTrdTrack(const AliESDTrdTrack *t);
af885e0f 379
52cd0cc0 380 AliESDTrdTracklet* GetTrdTracklet(Int_t idx) const {
381 return (AliESDTrdTracklet*)(fTrdTracklets?fTrdTracklets->UncheckedAt(idx):0x0);
382 }
383
384 void AddTrdTracklet(const AliESDTrdTracklet *trkl);
385
af885e0f 386 AliESDv0 *GetV0(Int_t i) const {
c017f53f 387 return (AliESDv0*)(fV0s?fV0s->UncheckedAt(i):0x0);
af885e0f 388 }
389 Int_t AddV0(const AliESDv0 *v);
390
391 AliESDcascade *GetCascade(Int_t i) const {
c017f53f 392 return (AliESDcascade *)(fCascades?fCascades->UncheckedAt(i):0x0);
af885e0f 393 }
f0106218 394
395 void AddCascade(const AliESDcascade *c);
af885e0f 396
397 AliESDkink *GetKink(Int_t i) const {
c017f53f 398 return (AliESDkink *)(fKinks?fKinks->UncheckedAt(i):0x0);
af885e0f 399 }
400 Int_t AddKink(const AliESDkink *c);
401
402 AliESDCaloCluster *GetCaloCluster(Int_t i) const {
c017f53f 403 return (AliESDCaloCluster *)(fCaloClusters?fCaloClusters->UncheckedAt(i):0x0);
af885e0f 404 }
e649177a 405
af885e0f 406 Int_t AddCaloCluster(const AliESDCaloCluster *c);
407
e649177a 408 AliESDCaloCells *GetEMCALCells() const {return fEMCALCells; }
409 AliESDCaloCells *GetPHOSCells() const {return fPHOSCells; }
410
042d5330 411 AliESDCaloTrigger* GetCaloTrigger(TString calo) const
412 {
413 if (calo.Contains("EMCAL")) return fEMCALTrigger;
414 else
415 return fPHOSTrigger;
416 }
8e1324ab 417
418 AliESDCosmicTrack *GetCosmicTrack(Int_t i) const {
419 return fCosmicTracks ? (AliESDCosmicTrack*) fCosmicTracks->UncheckedAt(i) : 0;
420 }
421 const TClonesArray * GetCosmicTracks() const{ return fCosmicTracks;}
422
423 void AddCosmicTrack(const AliESDCosmicTrack *t);
042d5330 424
af885e0f 425 AliRawDataErrorLog *GetErrorLog(Int_t i) const {
c017f53f 426 return (AliRawDataErrorLog *)(fErrorLogs?fErrorLogs->UncheckedAt(i):0x0);
af885e0f 427 }
7d44c466 428 void AddRawDataErrorLog(const AliRawDataErrorLog *log) const;
f0106218 429
c017f53f 430 Int_t GetNumberOfErrorLogs() const {return fErrorLogs?fErrorLogs->GetEntriesFast():0;}
af885e0f 431
04d01397 432 Int_t GetNumberOfPileupVerticesSPD() const {
642f673b 433 return (fSPDPileupVertices?fSPDPileupVertices->GetEntriesFast():0);
04d01397 434 }
435 Int_t GetNumberOfPileupVerticesTracks() const {
642f673b 436 return (fTrkPileupVertices?fTrkPileupVertices->GetEntriesFast():0);
04d01397 437 }
c017f53f 438 Int_t GetNumberOfTracks() const {return fTracks?fTracks->GetEntriesFast():0;}
af885e0f 439 Int_t GetNumberOfHLTConfMapTracks() const {return 0;}
440 // fHLTConfMapTracks->GetEntriesFast();}
441 Int_t GetNumberOfHLTHoughTracks() const {return 0; }
442 // fHLTHoughTracks->GetEntriesFast(); }
443
c017f53f 444 Int_t GetNumberOfMuonTracks() const {return fMuonTracks?fMuonTracks->GetEntriesFast():0;}
445 Int_t GetNumberOfPmdTracks() const {return fPmdTracks?fPmdTracks->GetEntriesFast():0;}
446 Int_t GetNumberOfTrdTracks() const {return fTrdTracks?fTrdTracks->GetEntriesFast():0;}
52cd0cc0 447 Int_t GetNumberOfTrdTracklets() const {return fTrdTracklets?fTrdTracklets->GetEntriesFast():0;}
c017f53f 448 Int_t GetNumberOfV0s() const {return fV0s?fV0s->GetEntriesFast():0;}
449 Int_t GetNumberOfCascades() const {return fCascades?fCascades->GetEntriesFast():0;}
450 Int_t GetNumberOfKinks() const {return fKinks?fKinks->GetEntriesFast():0;}
8e1324ab 451
452 Int_t GetNumberOfCosmicTracks() const {return fCosmicTracks ? fCosmicTracks->GetEntriesFast():0;}
cd1d4ee0 453 Int_t GetEMCALClusters(TRefArray *clusters) const;
454 Int_t GetPHOSClusters(TRefArray *clusters) const;
c017f53f 455 Int_t GetNumberOfCaloClusters() const {return fCaloClusters?fCaloClusters->GetEntriesFast():0;}
af885e0f 456
a2fbb067 457 void SetUseOwnList(Bool_t b){fUseOwnList = b;}
b19cc8d0 458 Bool_t GetUseOwnList() const {return fUseOwnList;}
e649177a 459
c017f53f 460 void ResetV0s() { if(fV0s) fV0s->Clear(); }
461 void ResetCascades() { if(fCascades) fCascades->Clear(); }
af885e0f 462 void Reset();
463
464 void Print(Option_t *option="") const;
465
466 void AddObject(TObject* obj);
1d0dd492 467 void ReadFromTree(TTree *tree, Option_t* opt = "");
2811495d 468 TObject* FindListObject(const char *name) const;
af885e0f 469 AliESD *GetAliESDOld(){return fESDOld;}
f12d42ce 470 void WriteToTree(TTree* tree) const;
af885e0f 471 void GetStdContent();
472 void ResetStdContent();
473 void CreateStdContent();
a2fbb067 474 void CreateStdContent(Bool_t bUseThisList);
af885e0f 475 void SetStdNames();
476 void CopyFromOldESD();
024c7734 477 TList* GetList() const {return fESDObjects;}
c8fe2783 478
479 //Following needed only for mixed event
480 virtual Int_t EventIndex(Int_t) const {return 0;}
481 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
482 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
483 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
484
a8f382ab 485 void SetDetectorStatus(ULong_t detMask) {fDetectorStatus|=detMask;}
486 void ResetDetectorStatus(ULong_t detMask) {fDetectorStatus&=~detMask;}
487 ULong_t GetDetectorStatus() const {return fDetectorStatus;}
488 Bool_t IsDetectorOn(ULong_t detMask) const {return (fDetectorStatus&detMask)>0;}
af885e0f 489
490protected:
491 AliESDEvent(const AliESDEvent&);
102c56c8 492 static Bool_t ResetWithPlacementNew(TObject *pObject);
af885e0f 493
494 TList *fESDObjects; // List of esd Objects
495
496 AliESDRun *fESDRun; //! Run information tmp put in the Userdata
497 AliESDHeader *fHeader; //! ESD Event Header
498 AliESDZDC *fESDZDC; //! ZDC information
499 AliESDFMD *fESDFMD; //! FMD object containing rough multiplicity
500 AliESDVZERO *fESDVZERO; //! VZERO object containing rough multiplicity
501 AliESDTZERO *fESDTZERO; //! TZEROObject
06cc9d95 502 AliESDVertex *fTPCVertex; //! Primary vertex estimated by the TPC
af885e0f 503 AliESDVertex *fSPDVertex; //! Primary vertex estimated by the SPD
504 AliESDVertex *fPrimaryVertex; //! Primary vertex estimated using ESD tracks
505 AliMultiplicity *fSPDMult; //! SPD tracklet multiplicity
506 AliESDCaloTrigger* fPHOSTrigger; //! PHOS Trigger information
507 AliESDCaloTrigger* fEMCALTrigger; //! PHOS Trigger information
bd95bae7 508 AliESDACORDE *fESDACORDE; //! ACORDE ESD object caontaining bit pattern
6c8e0967 509 AliESDTrdTrigger *fTrdTrigger; //! TRD trigger information
af885e0f 510
04d01397 511 TClonesArray *fSPDPileupVertices;//! Pileup primary vertices reconstructed by SPD
512 TClonesArray *fTrkPileupVertices;//! Pileup primary vertices reconstructed using the tracks
af885e0f 513 TClonesArray *fTracks; //! ESD tracks
514 TClonesArray *fMuonTracks; //! MUON ESD tracks
515 TClonesArray *fPmdTracks; //! PMD ESD tracks
516 TClonesArray *fTrdTracks; //! TRD ESD tracks (triggered)
52cd0cc0 517 TClonesArray *fTrdTracklets; //! TRD tracklets (for trigger)
af885e0f 518 TClonesArray *fV0s; //! V0 vertices
519 TClonesArray *fCascades; //! Cascade vertices
520 TClonesArray *fKinks; //! Kinks
521 TClonesArray *fCaloClusters; //! Calorimeter clusters for PHOS/EMCAL
e649177a 522 AliESDCaloCells *fEMCALCells; //! EMCAL cell info
523 AliESDCaloCells *fPHOSCells; //! PHOS cell info
8e1324ab 524 TClonesArray *fCosmicTracks; //! Tracks created by cosmics finder
af885e0f 525 TClonesArray *fErrorLogs; //! Raw-data reading error messages
526
527
528
1bd10080 529 AliESD *fESDOld; //! Old esd Structure
530 AliESDfriend *fESDFriendOld; //! Old friend esd Structure
60e8f114 531 Bool_t fConnected; //! flag if leaves are alreday connected
a2fbb067 532 Bool_t fUseOwnList; //! Do not use the list from the esdTree but use the one created by this class
60e8f114 533
6989bff3 534 static const char* fgkESDListName[kESDListN]; //!
af885e0f 535
f858b00e 536 AliTOFHeader *fTOFHeader; //! event times (and sigmas) as estimated by TOF
537 // combinatorial algorithm.
538 // It contains also TOF time resolution
539 // and T0spread as written in OCDB
fba4b2e2 540 AliCentrality *fCentrality; //! Centrality for AA collision
ce7adfe9 541 AliEventplane *fEventplane; //! Event plane for AA collision
a8f382ab 542
543 ULong_t fDetectorStatus; // set detector event status bit for good event selection
544
545 ClassDef(AliESDEvent,17) //ESDEvent class
af885e0f 546};
547#endif
548