]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliESDEvent.h
Previous commit had the bad side-effect of changing the behaviour of Raw QA to comput...
[u/mrichter/AliRoot.git] / STEER / 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
23class TList;
24
024c7734 25#include "AliVEvent.h"
694aad0c 26// some includes for delegated methods
f0106218 27#include "AliESDCaloTrigger.h"
af885e0f 28#include "AliESDRun.h"
29#include "AliESDHeader.h"
3f47e572 30#include "AliESDTZERO.h"
f0106218 31#include "AliESDZDC.h"
bd95bae7 32#include "AliESDACORDE.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"
024c7734 39
af885e0f 40class AliESDfriend;
41class AliESDVZERO;
42class AliESDHLTtrack;
f0106218 43class AliESDVertex;
44class AliESDPmdTrack;
45class AliESDFMD;
46class AliESDkink;
f0106218 47class AliESDCaloCluster;
e649177a 48class AliESDCaloCells;
f0106218 49class AliESDv0;
f0106218 50class AliMultiplicity;
51class AliRawDataErrorLog;
52class AliESDRun;
53class AliESDTrdTrack;
54class AliESDMuonTrack;
af885e0f 55class AliESD;
f0106218 56class AliESDcascade;
cd1d4ee0 57class TRefArray;
bd95bae7 58class AliESDACORDE;
af885e0f 59
024c7734 60class AliESDEvent : public AliVEvent {
af885e0f 61public:
62
63
6989bff3 64 enum ESDListIndex {kESDRun,
af885e0f 65 kHeader,
66 kESDZDC,
67 kESDFMD,
68 kESDVZERO,
69 kESDTZERO,
06cc9d95 70 kTPCVertex,
af885e0f 71 kSPDVertex,
72 kPrimaryVertex,
73 kSPDMult,
74 kPHOSTrigger,
75 kEMCALTrigger,
04d01397 76 kSPDPileupVertices,
77 kTrkPileupVertices,
af885e0f 78 kTracks,
79 kMuonTracks,
80 kPmdTracks,
81 kTrdTracks,
82 kV0s,
83 kCascades,
84 kKinks,
85 kCaloClusters,
e649177a 86 kEMCALCells,
87 kPHOSCells,
af885e0f 88 kErrorLogs,
bd95bae7 89 kESDACORDE,
af885e0f 90 kESDListN
91 };
92
93 AliESDEvent();
732a24fe 94 virtual ~AliESDEvent();
95 AliESDEvent &operator=(const AliESDEvent& source); // or make private and use only copy?
96 virtual void Copy(TObject& obj) const;
af885e0f 97
98 // RUN
99 // move this to the UserData!!!
100 const AliESDRun* GetESDRun() const {return fESDRun;}
101
102 // Delegated methods for fESDRun
024c7734 103 void SetRunNumber(Int_t n) {fESDRun->SetRunNumber(n);}
104 Int_t GetRunNumber() const {return fESDRun->GetRunNumber();}
105 void SetPeriodNumber(UInt_t n){fESDRun->SetPeriodNumber(n);}
106 UInt_t GetPeriodNumber() const {return fESDRun->GetPeriodNumber();}
107 void SetMagneticField(Double_t mf){fESDRun->SetMagneticField(mf);}
108 Double_t GetMagneticField() const {return fESDRun->GetMagneticField();}
109 void SetDiamond(const AliESDVertex *vertex) { fESDRun->SetDiamond(vertex);}
694aad0c 110 Double_t GetDiamondX() const {return fESDRun->GetDiamondX();}
111 Double_t GetDiamondY() const {return fESDRun->GetDiamondY();}
112 Double_t GetSigma2DiamondX() const {return fESDRun->GetSigma2DiamondX();}
113 Double_t GetSigma2DiamondY() const {return fESDRun->GetSigma2DiamondY();}
114 void GetDiamondCovXY(Float_t cov[3]) const {fESDRun->GetDiamondCovXY(cov);}
b024fd7f 115 void SetTriggerClass(const char*name, Int_t index) {fESDRun->SetTriggerClass(name,index);}
8d218603 116 void SetPHOSMatrix(TGeoHMatrix*matrix, Int_t i) {fESDRun->SetPHOSMatrix(matrix,i);}
117 const TGeoHMatrix* GetPHOSMatrix(Int_t i) const {return fESDRun->GetPHOSMatrix(i);}
af885e0f 118
119
120 // HEADER
024c7734 121 AliESDHeader* GetHeader() const {return fHeader;}
af885e0f 122
123 // Delegated methods for fHeader
124 void SetTriggerMask(ULong64_t n) {fHeader->SetTriggerMask(n);}
125 void SetOrbitNumber(UInt_t n) {fHeader->SetOrbitNumber(n);}
126 void SetTimeStamp(UInt_t timeStamp){fHeader->SetTimeStamp(timeStamp);}
127 void SetEventType(UInt_t eventType){fHeader->SetEventType(eventType);}
128 void SetEventNumberInFile(Int_t n) {fHeader->SetEventNumberInFile(n);}
732a24fe 129 // void SetRunNumber(Int_t n) {fHeader->SetRunNumber(n);}
af885e0f 130 void SetBunchCrossNumber(UShort_t n) {fHeader->SetBunchCrossNumber(n);}
131 void SetTriggerCluster(UChar_t n) {fHeader->SetTriggerCluster(n);}
694aad0c 132
af885e0f 133 ULong64_t GetTriggerMask() const {return fHeader->GetTriggerMask();}
ed4e8b82 134 TString GetFiredTriggerClasses() const {return fESDRun->GetFiredTriggerClasses(fHeader->GetTriggerMask());}
135 Bool_t IsTriggerClassFired(const char *name) const {return fESDRun->IsTriggerClassFired(fHeader->GetTriggerMask(),name);}
3b286f80 136 TObject* GetHLTTriggerDecision() const;
137 TString GetHLTTriggerDescription() const;
138 Bool_t IsHLTTriggerFired(const char* name=NULL) const;
af885e0f 139 UInt_t GetOrbitNumber() const {return fHeader->GetOrbitNumber();}
140 UInt_t GetTimeStamp() const { return fHeader->GetTimeStamp();}
141 UInt_t GetEventType() const { return fHeader->GetEventType();}
142 Int_t GetEventNumberInFile() const {return fHeader->GetEventNumberInFile();}
143 UShort_t GetBunchCrossNumber() const {return fHeader->GetBunchCrossNumber();}
144 UChar_t GetTriggerCluster() const {return fHeader->GetTriggerCluster();}
145
146 // ZDC CKB: put this in the header?
a85132e7 147 AliESDZDC* GetESDZDC() const {return fESDZDC;}
af885e0f 148
149 // Delegated methods for fESDZDC
024c7734 150 Double_t GetZDCN1Energy() const {return fESDZDC->GetZDCN1Energy();}
151 Double_t GetZDCP1Energy() const {return fESDZDC->GetZDCP1Energy();}
152 Double_t GetZDCN2Energy() const {return fESDZDC->GetZDCN2Energy();}
153 Double_t GetZDCP2Energy() const {return fESDZDC->GetZDCP2Energy();}
a85132e7 154 Double_t GetZDCEMEnergy(Int_t i=0) const {return fESDZDC->GetZDCEMEnergy(i);}
af885e0f 155 Int_t GetZDCParticipants() const {return fESDZDC->GetZDCParticipants();}
a85132e7 156 void SetZDC(Float_t n1Energy, Float_t p1Energy, Float_t em1Energy, Float_t em2Energy,
5f0ec064 157 Float_t n2Energy, Float_t p2Energy, Int_t participants, Int_t nPartA,
158 Int_t nPartC, Double_t b, Double_t bA, Double_t bC, UInt_t recoflag)
2b6cdc43 159 {fESDZDC->SetZDC(n1Energy, p1Energy, em1Energy, em2Energy, n2Energy, p2Energy,
5f0ec064 160 participants, nPartA, nPartC, b, bA, bC, recoflag);}
af885e0f 161
162
163 // FMD
164 void SetFMDData(AliESDFMD * obj);
165 AliESDFMD *GetFMDData(){ return fESDFMD; }
166
167
168 // TZERO CKB: put this in the header?
169 const AliESDTZERO* GetESDTZERO() const {return fESDTZERO;}
170 // delegetated methods for fESDTZERO
171
694aad0c 172 Double_t GetT0zVertex() const {return fESDTZERO->GetT0zVertex();}
af885e0f 173 void SetT0zVertex(Float_t z) {fESDTZERO->SetT0zVertex(z);}
694aad0c 174 Double_t GetT0() const {return fESDTZERO->GetT0();}
af885e0f 175 void SetT0(Float_t timeStart) {fESDTZERO->SetT0(timeStart);}
571b0564 176 Float_t GetT0clock() const {return fESDTZERO->GetT0clock();}
177 void SetT0clock(Float_t timeStart) {fESDTZERO->SetT0clock(timeStart);}
694aad0c 178 const Double_t * GetT0time() const {return fESDTZERO->GetT0time();}
af885e0f 179 void SetT0time(Float_t time[24]) {fESDTZERO->SetT0time(time);}
694aad0c 180 const Double_t * GetT0amplitude() const {return fESDTZERO->GetT0amplitude();}
af885e0f 181 void SetT0amplitude(Float_t amp[24]){fESDTZERO->SetT0amplitude(amp);}
182
183 // VZERO
184 AliESDVZERO *GetVZEROData() const { return fESDVZERO; }
185 void SetVZEROData(AliESDVZERO * obj);
186
bd95bae7 187 // ACORDE
188 AliESDACORDE *GetACORDEData() const { return fESDACORDE;}
189 void SetACORDEData(AliESDACORDE * obj);
af885e0f 190
7d44c466 191 void SetESDfriend(const AliESDfriend *f) const;
af885e0f 192 void GetESDfriend(AliESDfriend *f) const;
193
194
195
06cc9d95 196 void SetPrimaryVertexTPC(const AliESDVertex *vertex);
197 const AliESDVertex *GetPrimaryVertexTPC() const {return fTPCVertex;}
198
199 void SetPrimaryVertexSPD(const AliESDVertex *vertex);
200 const AliESDVertex *GetPrimaryVertexSPD() const {return fSPDVertex;}
201 const AliESDVertex *GetVertex() const {
202 //For the backward compatibily only
203 return GetPrimaryVertexSPD();
204 }
af885e0f 205
c264b61b 206 void SetPrimaryVertexTracks(const AliESDVertex *vertex);
207 const AliESDVertex *GetPrimaryVertexTracks() const {return fPrimaryVertex;}
518573d7 208 AliESDVertex *PrimaryVertexTracksUnconstrained() const;
c264b61b 209
210 const AliESDVertex *GetPrimaryVertex() const;
af885e0f 211
f0106218 212 void SetMultiplicity(const AliMultiplicity *mul);
213
af885e0f 214 const AliMultiplicity *GetMultiplicity() const {return fSPDMult;}
f0106218 215
216
7f68891d 217 Bool_t Clean(Float_t *cleanPars);
7d44c466 218 Bool_t RemoveKink(Int_t i) const;
219 Bool_t RemoveV0(Int_t i) const;
220 Bool_t RemoveTrack(Int_t i) const;
d64bd07d 221
04d01397 222 const AliESDVertex *GetPileupVertexSPD(Int_t i) const {
223 return (const AliESDVertex *)fSPDPileupVertices->UncheckedAt(i);
224 }
6dc21f57 225 Char_t AddPileupVertexSPD(const AliESDVertex *vtx);
04d01397 226
227 const AliESDVertex *GetPileupVertexTracks(Int_t i) const {
228 return (const AliESDVertex *)fTrkPileupVertices->UncheckedAt(i);
229 }
6dc21f57 230 Char_t AddPileupVertexTracks(const AliESDVertex *vtx);
04d01397 231
af885e0f 232 AliESDtrack *GetTrack(Int_t i) const {
233 return (AliESDtrack *)fTracks->UncheckedAt(i);
234 }
235 Int_t AddTrack(const AliESDtrack *t);
236
237
238 AliESDHLTtrack *GetHLTConfMapTrack(Int_t /*i*/) const {
239 // return (AliESDHLTtrack *)fHLTConfMapTracks->UncheckedAt(i);
240 return 0;
241 }
242 void AddHLTConfMapTrack(const AliESDHLTtrack */*t*/) {
243 printf("ESD:: AddHLTConfMapTrack do nothing \n");
244 // TClonesArray &fhlt = *fHLTConfMapTracks;
245 // new(fhlt[fHLTConfMapTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
246 }
247
248
249 AliESDHLTtrack *GetHLTHoughTrack(Int_t /*i*/) const {
250 // return (AliESDHLTtrack *)fHLTHoughTracks->UncheckedAt(i);
251 return 0;
252 }
253 void AddHLTHoughTrack(const AliESDHLTtrack */*t*/) {
254 printf("ESD:: AddHLTHoughTrack do nothing \n");
255 // TClonesArray &fhlt = *fHLTHoughTracks;
256 // new(fhlt[fHLTHoughTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
257 }
258
259 AliESDMuonTrack *GetMuonTrack(Int_t i) const {
260 return (AliESDMuonTrack *)fMuonTracks->UncheckedAt(i);
261 }
f0106218 262
263 void AddMuonTrack(const AliESDMuonTrack *t);
af885e0f 264
265 AliESDPmdTrack *GetPmdTrack(Int_t i) const {
266 return (AliESDPmdTrack *)fPmdTracks->UncheckedAt(i);
267 }
f0106218 268
269 void AddPmdTrack(const AliESDPmdTrack *t);
270
af885e0f 271
272 AliESDTrdTrack *GetTrdTrack(Int_t i) const {
273 return (AliESDTrdTrack *)fTrdTracks->UncheckedAt(i);
274 }
f0106218 275
276
277 void AddTrdTrack(const AliESDTrdTrack *t);
af885e0f 278
279 AliESDv0 *GetV0(Int_t i) const {
280 return (AliESDv0*)fV0s->UncheckedAt(i);
281 }
282 Int_t AddV0(const AliESDv0 *v);
283
284 AliESDcascade *GetCascade(Int_t i) const {
285 return (AliESDcascade *)fCascades->UncheckedAt(i);
286 }
f0106218 287
288 void AddCascade(const AliESDcascade *c);
af885e0f 289
290 AliESDkink *GetKink(Int_t i) const {
291 return (AliESDkink *)fKinks->UncheckedAt(i);
292 }
293 Int_t AddKink(const AliESDkink *c);
294
295 AliESDCaloCluster *GetCaloCluster(Int_t i) const {
296 return (AliESDCaloCluster *)fCaloClusters->UncheckedAt(i);
297 }
e649177a 298
af885e0f 299 Int_t AddCaloCluster(const AliESDCaloCluster *c);
300
e649177a 301 AliESDCaloCells *GetEMCALCells() const {return fEMCALCells; }
302 AliESDCaloCells *GetPHOSCells() const {return fPHOSCells; }
303
af885e0f 304 AliRawDataErrorLog *GetErrorLog(Int_t i) const {
305 return (AliRawDataErrorLog *)fErrorLogs->UncheckedAt(i);
306 }
7d44c466 307 void AddRawDataErrorLog(const AliRawDataErrorLog *log) const;
f0106218 308
af885e0f 309 Int_t GetNumberOfErrorLogs() const {return fErrorLogs->GetEntriesFast();}
310
311
312 void AddPHOSTriggerPosition(TArrayF array) { fPHOSTrigger->AddTriggerPosition(array); }
313 void AddPHOSTriggerAmplitudes(TArrayF array) { fPHOSTrigger->AddTriggerAmplitudes(array);}
314 void AddEMCALTriggerPosition(TArrayF array) { fEMCALTrigger->AddTriggerPosition(array); }
315 void AddEMCALTriggerAmplitudes(TArrayF array){ fEMCALTrigger->AddTriggerAmplitudes(array); }
316
04d01397 317 Int_t GetNumberOfPileupVerticesSPD() const {
642f673b 318 return (fSPDPileupVertices?fSPDPileupVertices->GetEntriesFast():0);
04d01397 319 }
320 Int_t GetNumberOfPileupVerticesTracks() const {
642f673b 321 return (fTrkPileupVertices?fTrkPileupVertices->GetEntriesFast():0);
04d01397 322 }
af885e0f 323 Int_t GetNumberOfTracks() const {return fTracks->GetEntriesFast();}
324 Int_t GetNumberOfHLTConfMapTracks() const {return 0;}
325 // fHLTConfMapTracks->GetEntriesFast();}
326 Int_t GetNumberOfHLTHoughTracks() const {return 0; }
327 // fHLTHoughTracks->GetEntriesFast(); }
328
329 Int_t GetNumberOfMuonTracks() const {return fMuonTracks->GetEntriesFast();}
330 Int_t GetNumberOfPmdTracks() const {return fPmdTracks->GetEntriesFast();}
331 Int_t GetNumberOfTrdTracks() const {return fTrdTracks->GetEntriesFast();}
332 Int_t GetNumberOfV0s() const {return fV0s->GetEntriesFast();}
333 Int_t GetNumberOfCascades() const {return fCascades->GetEntriesFast();}
334 Int_t GetNumberOfKinks() const {return fKinks->GetEntriesFast();}
e649177a 335
cd1d4ee0 336 Int_t GetEMCALClusters(TRefArray *clusters) const;
337 Int_t GetPHOSClusters(TRefArray *clusters) const;
af885e0f 338 Int_t GetNumberOfCaloClusters() const {return fCaloClusters->GetEntriesFast();}
339
a2fbb067 340 void SetUseOwnList(Bool_t b){fUseOwnList = b;}
341 Bool_t GetUseOwnList(){return fUseOwnList;}
e649177a 342
343 // Remove this stuff CKB?
344 //---------------------------------------------------
af885e0f 345 Int_t GetNumberOfEMCALClusters() const {return fEMCALClusters;}
346 void SetNumberOfEMCALClusters(Int_t clus) {fEMCALClusters = clus;}
347 Int_t GetFirstEMCALCluster() const {return fFirstEMCALCluster;}
348 void SetFirstEMCALCluster(Int_t index) {fFirstEMCALCluster = index;}
e649177a 349
af885e0f 350 Int_t GetNumberOfPHOSClusters() const {return fPHOSClusters;}
351 void SetNumberOfPHOSClusters(Int_t part) { fPHOSClusters = part ; }
352 void SetFirstPHOSCluster(Int_t index) { fFirstPHOSCluster = index ; }
353 Int_t GetFirstPHOSCluster() const { return fFirstPHOSCluster ; }
e649177a 354 //-------------------------------------------------------
355
356 TArrayF *GetEMCALTriggerPosition() const {return fEMCALTrigger->GetTriggerPosition();}
357 TArrayF *GetEMCALTriggerAmplitudes() const {return fEMCALTrigger->GetTriggerAmplitudes();}
af885e0f 358 TArrayF *GetPHOSTriggerPosition() const {return fPHOSTrigger->GetTriggerPosition();}
359 TArrayF *GetPHOSTriggerAmplitudes() const {return fPHOSTrigger->GetTriggerAmplitudes();}
360
361 void ResetV0s() { fV0s->Clear(); }
362 void ResetCascades() { fCascades->Clear(); }
363 void Reset();
364
365 void Print(Option_t *option="") const;
366
367 void AddObject(TObject* obj);
1d0dd492 368 void ReadFromTree(TTree *tree, Option_t* opt = "");
001b9beb 369 TObject* FindListObject(const char *name);
af885e0f 370 AliESD *GetAliESDOld(){return fESDOld;}
f12d42ce 371 void WriteToTree(TTree* tree) const;
af885e0f 372 void GetStdContent();
373 void ResetStdContent();
374 void CreateStdContent();
a2fbb067 375 void CreateStdContent(Bool_t bUseThisList);
af885e0f 376 void SetStdNames();
377 void CopyFromOldESD();
024c7734 378 TList* GetList() const {return fESDObjects;}
af885e0f 379
380protected:
381 AliESDEvent(const AliESDEvent&);
102c56c8 382 static Bool_t ResetWithPlacementNew(TObject *pObject);
af885e0f 383
384 TList *fESDObjects; // List of esd Objects
385
386 AliESDRun *fESDRun; //! Run information tmp put in the Userdata
387 AliESDHeader *fHeader; //! ESD Event Header
388 AliESDZDC *fESDZDC; //! ZDC information
389 AliESDFMD *fESDFMD; //! FMD object containing rough multiplicity
390 AliESDVZERO *fESDVZERO; //! VZERO object containing rough multiplicity
391 AliESDTZERO *fESDTZERO; //! TZEROObject
06cc9d95 392 AliESDVertex *fTPCVertex; //! Primary vertex estimated by the TPC
af885e0f 393 AliESDVertex *fSPDVertex; //! Primary vertex estimated by the SPD
394 AliESDVertex *fPrimaryVertex; //! Primary vertex estimated using ESD tracks
395 AliMultiplicity *fSPDMult; //! SPD tracklet multiplicity
396 AliESDCaloTrigger* fPHOSTrigger; //! PHOS Trigger information
397 AliESDCaloTrigger* fEMCALTrigger; //! PHOS Trigger information
bd95bae7 398 AliESDACORDE *fESDACORDE; //! ACORDE ESD object caontaining bit pattern
af885e0f 399
04d01397 400 TClonesArray *fSPDPileupVertices;//! Pileup primary vertices reconstructed by SPD
401 TClonesArray *fTrkPileupVertices;//! Pileup primary vertices reconstructed using the tracks
af885e0f 402 TClonesArray *fTracks; //! ESD tracks
403 TClonesArray *fMuonTracks; //! MUON ESD tracks
404 TClonesArray *fPmdTracks; //! PMD ESD tracks
405 TClonesArray *fTrdTracks; //! TRD ESD tracks (triggered)
406 TClonesArray *fV0s; //! V0 vertices
407 TClonesArray *fCascades; //! Cascade vertices
408 TClonesArray *fKinks; //! Kinks
409 TClonesArray *fCaloClusters; //! Calorimeter clusters for PHOS/EMCAL
e649177a 410 AliESDCaloCells *fEMCALCells; //! EMCAL cell info
411 AliESDCaloCells *fPHOSCells; //! PHOS cell info
af885e0f 412 TClonesArray *fErrorLogs; //! Raw-data reading error messages
413
414
415
1bd10080 416 AliESD *fESDOld; //! Old esd Structure
417 AliESDfriend *fESDFriendOld; //! Old friend esd Structure
60e8f114 418 Bool_t fConnected; //! flag if leaves are alreday connected
a2fbb067 419 Bool_t fUseOwnList; //! Do not use the list from the esdTree but use the one created by this class
60e8f114 420
6989bff3 421 static const char* fgkESDListName[kESDListN]; //!
af885e0f 422
af885e0f 423 // Remove this stuff CKB
424 Int_t fEMCALClusters; // Number of EMCAL clusters (subset of caloclusters)
425 Int_t fFirstEMCALCluster; // First EMCAL cluster in the fCaloClusters list
426
427 Int_t fPHOSClusters; // Number of PHOS clusters (subset of caloclusters)
428 Int_t fFirstPHOSCluster; // First PHOS cluster in the fCaloClusters list
429
04d01397 430 ClassDef(AliESDEvent,10) //ESDEvent class
af885e0f 431};
432#endif
433