]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/ESD/AliESDEvent.h
Reverting the full pools implementation
[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
f858b00e 42#include "AliTOFHeader.h"
024c7734 43
ae2bccf1 44#include "AliESDVZERO.h"
820b4d9e 45#ifdef MFT_UPGRADE
46//#include "AliESDMFT.h"
47#endif
ae2bccf1 48
af885e0f 49class AliESDfriend;
af885e0f 50class AliESDHLTtrack;
f0106218 51class AliESDVertex;
52class AliESDPmdTrack;
53class AliESDFMD;
54class AliESDkink;
f0106218 55class AliESDv0;
f0106218 56class AliMultiplicity;
57class AliRawDataErrorLog;
58class AliESDRun;
6c8e0967 59class AliESDTrdTrigger;
f0106218 60class AliESDTrdTrack;
52cd0cc0 61class AliESDTrdTracklet;
f0106218 62class AliESDMuonTrack;
af885e0f 63class AliESD;
f0106218 64class AliESDcascade;
fba4b2e2 65class AliCentrality;
ce7adfe9 66class AliEventplane;
cd1d4ee0 67class TRefArray;
bd95bae7 68class AliESDACORDE;
8b12d288 69class AliESDHLTDecision;
af885e0f 70
80791508 71class TList;
72class TString;
73
74
024c7734 75class AliESDEvent : public AliVEvent {
af885e0f 76public:
77
78
6989bff3 79 enum ESDListIndex {kESDRun,
af885e0f 80 kHeader,
81 kESDZDC,
82 kESDFMD,
83 kESDVZERO,
84 kESDTZERO,
06cc9d95 85 kTPCVertex,
af885e0f 86 kSPDVertex,
87 kPrimaryVertex,
88 kSPDMult,
89 kPHOSTrigger,
90 kEMCALTrigger,
04d01397 91 kSPDPileupVertices,
92 kTrkPileupVertices,
af885e0f 93 kTracks,
94 kMuonTracks,
95 kPmdTracks,
6c8e0967 96 kTrdTrigger,
af885e0f 97 kTrdTracks,
52cd0cc0 98 kTrdTracklets,
af885e0f 99 kV0s,
100 kCascades,
101 kKinks,
102 kCaloClusters,
e649177a 103 kEMCALCells,
104 kPHOSCells,
af885e0f 105 kErrorLogs,
bd95bae7 106 kESDACORDE,
f858b00e 107 kTOFHeader,
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);}
1dc767cf 171 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
af6f24c9 205 void SetZDCData(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;}
b0e13b29 230 void SetTZEROData(AliESDTZERO * obj);
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; }
251 void SetVZEROData(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 }
417
af885e0f 418 AliRawDataErrorLog *GetErrorLog(Int_t i) const {
c017f53f 419 return (AliRawDataErrorLog *)(fErrorLogs?fErrorLogs->UncheckedAt(i):0x0);
af885e0f 420 }
7d44c466 421 void AddRawDataErrorLog(const AliRawDataErrorLog *log) const;
f0106218 422
c017f53f 423 Int_t GetNumberOfErrorLogs() const {return fErrorLogs?fErrorLogs->GetEntriesFast():0;}
af885e0f 424
04d01397 425 Int_t GetNumberOfPileupVerticesSPD() const {
642f673b 426 return (fSPDPileupVertices?fSPDPileupVertices->GetEntriesFast():0);
04d01397 427 }
428 Int_t GetNumberOfPileupVerticesTracks() const {
642f673b 429 return (fTrkPileupVertices?fTrkPileupVertices->GetEntriesFast():0);
04d01397 430 }
c017f53f 431 Int_t GetNumberOfTracks() const {return fTracks?fTracks->GetEntriesFast():0;}
af885e0f 432 Int_t GetNumberOfHLTConfMapTracks() const {return 0;}
433 // fHLTConfMapTracks->GetEntriesFast();}
434 Int_t GetNumberOfHLTHoughTracks() const {return 0; }
435 // fHLTHoughTracks->GetEntriesFast(); }
436
c017f53f 437 Int_t GetNumberOfMuonTracks() const {return fMuonTracks?fMuonTracks->GetEntriesFast():0;}
438 Int_t GetNumberOfPmdTracks() const {return fPmdTracks?fPmdTracks->GetEntriesFast():0;}
439 Int_t GetNumberOfTrdTracks() const {return fTrdTracks?fTrdTracks->GetEntriesFast():0;}
52cd0cc0 440 Int_t GetNumberOfTrdTracklets() const {return fTrdTracklets?fTrdTracklets->GetEntriesFast():0;}
c017f53f 441 Int_t GetNumberOfV0s() const {return fV0s?fV0s->GetEntriesFast():0;}
442 Int_t GetNumberOfCascades() const {return fCascades?fCascades->GetEntriesFast():0;}
443 Int_t GetNumberOfKinks() const {return fKinks?fKinks->GetEntriesFast():0;}
e649177a 444
cd1d4ee0 445 Int_t GetEMCALClusters(TRefArray *clusters) const;
446 Int_t GetPHOSClusters(TRefArray *clusters) const;
c017f53f 447 Int_t GetNumberOfCaloClusters() const {return fCaloClusters?fCaloClusters->GetEntriesFast():0;}
af885e0f 448
a2fbb067 449 void SetUseOwnList(Bool_t b){fUseOwnList = b;}
b19cc8d0 450 Bool_t GetUseOwnList() const {return fUseOwnList;}
e649177a 451
c017f53f 452 void ResetV0s() { if(fV0s) fV0s->Clear(); }
453 void ResetCascades() { if(fCascades) fCascades->Clear(); }
af885e0f 454 void Reset();
455
456 void Print(Option_t *option="") const;
457
458 void AddObject(TObject* obj);
1d0dd492 459 void ReadFromTree(TTree *tree, Option_t* opt = "");
2811495d 460 TObject* FindListObject(const char *name) const;
af885e0f 461 AliESD *GetAliESDOld(){return fESDOld;}
f12d42ce 462 void WriteToTree(TTree* tree) const;
af885e0f 463 void GetStdContent();
464 void ResetStdContent();
465 void CreateStdContent();
a2fbb067 466 void CreateStdContent(Bool_t bUseThisList);
af885e0f 467 void SetStdNames();
468 void CopyFromOldESD();
024c7734 469 TList* GetList() const {return fESDObjects;}
c8fe2783 470
471 //Following needed only for mixed event
472 virtual Int_t EventIndex(Int_t) const {return 0;}
473 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
474 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
475 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
476
a8f382ab 477 void SetDetectorStatus(ULong_t detMask) {fDetectorStatus|=detMask;}
478 void ResetDetectorStatus(ULong_t detMask) {fDetectorStatus&=~detMask;}
479 ULong_t GetDetectorStatus() const {return fDetectorStatus;}
480 Bool_t IsDetectorOn(ULong_t detMask) const {return (fDetectorStatus&detMask)>0;}
af885e0f 481
482protected:
483 AliESDEvent(const AliESDEvent&);
102c56c8 484 static Bool_t ResetWithPlacementNew(TObject *pObject);
af885e0f 485
486 TList *fESDObjects; // List of esd Objects
487
488 AliESDRun *fESDRun; //! Run information tmp put in the Userdata
489 AliESDHeader *fHeader; //! ESD Event Header
490 AliESDZDC *fESDZDC; //! ZDC information
491 AliESDFMD *fESDFMD; //! FMD object containing rough multiplicity
492 AliESDVZERO *fESDVZERO; //! VZERO object containing rough multiplicity
493 AliESDTZERO *fESDTZERO; //! TZEROObject
06cc9d95 494 AliESDVertex *fTPCVertex; //! Primary vertex estimated by the TPC
af885e0f 495 AliESDVertex *fSPDVertex; //! Primary vertex estimated by the SPD
496 AliESDVertex *fPrimaryVertex; //! Primary vertex estimated using ESD tracks
497 AliMultiplicity *fSPDMult; //! SPD tracklet multiplicity
498 AliESDCaloTrigger* fPHOSTrigger; //! PHOS Trigger information
499 AliESDCaloTrigger* fEMCALTrigger; //! PHOS Trigger information
bd95bae7 500 AliESDACORDE *fESDACORDE; //! ACORDE ESD object caontaining bit pattern
6c8e0967 501 AliESDTrdTrigger *fTrdTrigger; //! TRD trigger information
af885e0f 502
04d01397 503 TClonesArray *fSPDPileupVertices;//! Pileup primary vertices reconstructed by SPD
504 TClonesArray *fTrkPileupVertices;//! Pileup primary vertices reconstructed using the tracks
af885e0f 505 TClonesArray *fTracks; //! ESD tracks
506 TClonesArray *fMuonTracks; //! MUON ESD tracks
507 TClonesArray *fPmdTracks; //! PMD ESD tracks
508 TClonesArray *fTrdTracks; //! TRD ESD tracks (triggered)
52cd0cc0 509 TClonesArray *fTrdTracklets; //! TRD tracklets (for trigger)
af885e0f 510 TClonesArray *fV0s; //! V0 vertices
511 TClonesArray *fCascades; //! Cascade vertices
512 TClonesArray *fKinks; //! Kinks
513 TClonesArray *fCaloClusters; //! Calorimeter clusters for PHOS/EMCAL
e649177a 514 AliESDCaloCells *fEMCALCells; //! EMCAL cell info
515 AliESDCaloCells *fPHOSCells; //! PHOS cell info
af885e0f 516 TClonesArray *fErrorLogs; //! Raw-data reading error messages
517
518
519
1bd10080 520 AliESD *fESDOld; //! Old esd Structure
521 AliESDfriend *fESDFriendOld; //! Old friend esd Structure
60e8f114 522 Bool_t fConnected; //! flag if leaves are alreday connected
a2fbb067 523 Bool_t fUseOwnList; //! Do not use the list from the esdTree but use the one created by this class
60e8f114 524
6989bff3 525 static const char* fgkESDListName[kESDListN]; //!
af885e0f 526
f858b00e 527 AliTOFHeader *fTOFHeader; //! event times (and sigmas) as estimated by TOF
528 // combinatorial algorithm.
529 // It contains also TOF time resolution
530 // and T0spread as written in OCDB
fba4b2e2 531 AliCentrality *fCentrality; //! Centrality for AA collision
ce7adfe9 532 AliEventplane *fEventplane; //! Event plane for AA collision
a8f382ab 533
534 ULong_t fDetectorStatus; // set detector event status bit for good event selection
535
536 ClassDef(AliESDEvent,17) //ESDEvent class
af885e0f 537};
538#endif
539