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