]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliESDEvent.h
GC2,RS1,RS3 rules applied
[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);}
af885e0f 116
117
118 // HEADER
024c7734 119 AliESDHeader* GetHeader() const {return fHeader;}
af885e0f 120
121 // Delegated methods for fHeader
122 void SetTriggerMask(ULong64_t n) {fHeader->SetTriggerMask(n);}
123 void SetOrbitNumber(UInt_t n) {fHeader->SetOrbitNumber(n);}
124 void SetTimeStamp(UInt_t timeStamp){fHeader->SetTimeStamp(timeStamp);}
125 void SetEventType(UInt_t eventType){fHeader->SetEventType(eventType);}
126 void SetEventNumberInFile(Int_t n) {fHeader->SetEventNumberInFile(n);}
732a24fe 127 // void SetRunNumber(Int_t n) {fHeader->SetRunNumber(n);}
af885e0f 128 void SetBunchCrossNumber(UShort_t n) {fHeader->SetBunchCrossNumber(n);}
129 void SetTriggerCluster(UChar_t n) {fHeader->SetTriggerCluster(n);}
694aad0c 130
af885e0f 131 ULong64_t GetTriggerMask() const {return fHeader->GetTriggerMask();}
ed4e8b82 132 TString GetFiredTriggerClasses() const {return fESDRun->GetFiredTriggerClasses(fHeader->GetTriggerMask());}
133 Bool_t IsTriggerClassFired(const char *name) const {return fESDRun->IsTriggerClassFired(fHeader->GetTriggerMask(),name);}
af885e0f 134 UInt_t GetOrbitNumber() const {return fHeader->GetOrbitNumber();}
135 UInt_t GetTimeStamp() const { return fHeader->GetTimeStamp();}
136 UInt_t GetEventType() const { return fHeader->GetEventType();}
137 Int_t GetEventNumberInFile() const {return fHeader->GetEventNumberInFile();}
138 UShort_t GetBunchCrossNumber() const {return fHeader->GetBunchCrossNumber();}
139 UChar_t GetTriggerCluster() const {return fHeader->GetTriggerCluster();}
140
141 // ZDC CKB: put this in the header?
a85132e7 142 AliESDZDC* GetESDZDC() const {return fESDZDC;}
af885e0f 143
144 // Delegated methods for fESDZDC
024c7734 145 Double_t GetZDCN1Energy() const {return fESDZDC->GetZDCN1Energy();}
146 Double_t GetZDCP1Energy() const {return fESDZDC->GetZDCP1Energy();}
147 Double_t GetZDCN2Energy() const {return fESDZDC->GetZDCN2Energy();}
148 Double_t GetZDCP2Energy() const {return fESDZDC->GetZDCP2Energy();}
a85132e7 149 Double_t GetZDCEMEnergy(Int_t i=0) const {return fESDZDC->GetZDCEMEnergy(i);}
af885e0f 150 Int_t GetZDCParticipants() const {return fESDZDC->GetZDCParticipants();}
a85132e7 151 void SetZDC(Float_t n1Energy, Float_t p1Energy, Float_t em1Energy, Float_t em2Energy,
5f0ec064 152 Float_t n2Energy, Float_t p2Energy, Int_t participants, Int_t nPartA,
153 Int_t nPartC, Double_t b, Double_t bA, Double_t bC, UInt_t recoflag)
2b6cdc43 154 {fESDZDC->SetZDC(n1Energy, p1Energy, em1Energy, em2Energy, n2Energy, p2Energy,
5f0ec064 155 participants, nPartA, nPartC, b, bA, bC, recoflag);}
af885e0f 156
157
158 // FMD
159 void SetFMDData(AliESDFMD * obj);
160 AliESDFMD *GetFMDData(){ return fESDFMD; }
161
162
163 // TZERO CKB: put this in the header?
164 const AliESDTZERO* GetESDTZERO() const {return fESDTZERO;}
165 // delegetated methods for fESDTZERO
166
694aad0c 167 Double_t GetT0zVertex() const {return fESDTZERO->GetT0zVertex();}
af885e0f 168 void SetT0zVertex(Float_t z) {fESDTZERO->SetT0zVertex(z);}
694aad0c 169 Double_t GetT0() const {return fESDTZERO->GetT0();}
af885e0f 170 void SetT0(Float_t timeStart) {fESDTZERO->SetT0(timeStart);}
694aad0c 171 const Double_t * GetT0time() const {return fESDTZERO->GetT0time();}
af885e0f 172 void SetT0time(Float_t time[24]) {fESDTZERO->SetT0time(time);}
694aad0c 173 const Double_t * GetT0amplitude() const {return fESDTZERO->GetT0amplitude();}
af885e0f 174 void SetT0amplitude(Float_t amp[24]){fESDTZERO->SetT0amplitude(amp);}
175
176 // VZERO
177 AliESDVZERO *GetVZEROData() const { return fESDVZERO; }
178 void SetVZEROData(AliESDVZERO * obj);
179
bd95bae7 180 // ACORDE
181 AliESDACORDE *GetACORDEData() const { return fESDACORDE;}
182 void SetACORDEData(AliESDACORDE * obj);
af885e0f 183
7d44c466 184 void SetESDfriend(const AliESDfriend *f) const;
af885e0f 185 void GetESDfriend(AliESDfriend *f) const;
186
187
188
06cc9d95 189 void SetPrimaryVertexTPC(const AliESDVertex *vertex);
190 const AliESDVertex *GetPrimaryVertexTPC() const {return fTPCVertex;}
191
192 void SetPrimaryVertexSPD(const AliESDVertex *vertex);
193 const AliESDVertex *GetPrimaryVertexSPD() const {return fSPDVertex;}
194 const AliESDVertex *GetVertex() const {
195 //For the backward compatibily only
196 return GetPrimaryVertexSPD();
197 }
af885e0f 198
c264b61b 199 void SetPrimaryVertexTracks(const AliESDVertex *vertex);
200 const AliESDVertex *GetPrimaryVertexTracks() const {return fPrimaryVertex;}
201
202 const AliESDVertex *GetPrimaryVertex() const;
af885e0f 203
f0106218 204 void SetMultiplicity(const AliMultiplicity *mul);
205
af885e0f 206 const AliMultiplicity *GetMultiplicity() const {return fSPDMult;}
f0106218 207
208
7f68891d 209 Bool_t Clean(Float_t *cleanPars);
7d44c466 210 Bool_t RemoveKink(Int_t i) const;
211 Bool_t RemoveV0(Int_t i) const;
212 Bool_t RemoveTrack(Int_t i) const;
d64bd07d 213
04d01397 214 const AliESDVertex *GetPileupVertexSPD(Int_t i) const {
215 return (const AliESDVertex *)fSPDPileupVertices->UncheckedAt(i);
216 }
6dc21f57 217 Char_t AddPileupVertexSPD(const AliESDVertex *vtx);
04d01397 218
219 const AliESDVertex *GetPileupVertexTracks(Int_t i) const {
220 return (const AliESDVertex *)fTrkPileupVertices->UncheckedAt(i);
221 }
6dc21f57 222 Char_t AddPileupVertexTracks(const AliESDVertex *vtx);
04d01397 223
af885e0f 224 AliESDtrack *GetTrack(Int_t i) const {
225 return (AliESDtrack *)fTracks->UncheckedAt(i);
226 }
227 Int_t AddTrack(const AliESDtrack *t);
228
229
230 AliESDHLTtrack *GetHLTConfMapTrack(Int_t /*i*/) const {
231 // return (AliESDHLTtrack *)fHLTConfMapTracks->UncheckedAt(i);
232 return 0;
233 }
234 void AddHLTConfMapTrack(const AliESDHLTtrack */*t*/) {
235 printf("ESD:: AddHLTConfMapTrack do nothing \n");
236 // TClonesArray &fhlt = *fHLTConfMapTracks;
237 // new(fhlt[fHLTConfMapTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
238 }
239
240
241 AliESDHLTtrack *GetHLTHoughTrack(Int_t /*i*/) const {
242 // return (AliESDHLTtrack *)fHLTHoughTracks->UncheckedAt(i);
243 return 0;
244 }
245 void AddHLTHoughTrack(const AliESDHLTtrack */*t*/) {
246 printf("ESD:: AddHLTHoughTrack do nothing \n");
247 // TClonesArray &fhlt = *fHLTHoughTracks;
248 // new(fhlt[fHLTHoughTracks->GetEntriesFast()]) AliESDHLTtrack(*t);
249 }
250
251 AliESDMuonTrack *GetMuonTrack(Int_t i) const {
252 return (AliESDMuonTrack *)fMuonTracks->UncheckedAt(i);
253 }
f0106218 254
255 void AddMuonTrack(const AliESDMuonTrack *t);
af885e0f 256
257 AliESDPmdTrack *GetPmdTrack(Int_t i) const {
258 return (AliESDPmdTrack *)fPmdTracks->UncheckedAt(i);
259 }
f0106218 260
261 void AddPmdTrack(const AliESDPmdTrack *t);
262
af885e0f 263
264 AliESDTrdTrack *GetTrdTrack(Int_t i) const {
265 return (AliESDTrdTrack *)fTrdTracks->UncheckedAt(i);
266 }
f0106218 267
268
269 void AddTrdTrack(const AliESDTrdTrack *t);
af885e0f 270
271 AliESDv0 *GetV0(Int_t i) const {
272 return (AliESDv0*)fV0s->UncheckedAt(i);
273 }
274 Int_t AddV0(const AliESDv0 *v);
275
276 AliESDcascade *GetCascade(Int_t i) const {
277 return (AliESDcascade *)fCascades->UncheckedAt(i);
278 }
f0106218 279
280 void AddCascade(const AliESDcascade *c);
af885e0f 281
282 AliESDkink *GetKink(Int_t i) const {
283 return (AliESDkink *)fKinks->UncheckedAt(i);
284 }
285 Int_t AddKink(const AliESDkink *c);
286
287 AliESDCaloCluster *GetCaloCluster(Int_t i) const {
288 return (AliESDCaloCluster *)fCaloClusters->UncheckedAt(i);
289 }
e649177a 290
af885e0f 291 Int_t AddCaloCluster(const AliESDCaloCluster *c);
292
e649177a 293 AliESDCaloCells *GetEMCALCells() const {return fEMCALCells; }
294 AliESDCaloCells *GetPHOSCells() const {return fPHOSCells; }
295
af885e0f 296 AliRawDataErrorLog *GetErrorLog(Int_t i) const {
297 return (AliRawDataErrorLog *)fErrorLogs->UncheckedAt(i);
298 }
7d44c466 299 void AddRawDataErrorLog(const AliRawDataErrorLog *log) const;
f0106218 300
af885e0f 301 Int_t GetNumberOfErrorLogs() const {return fErrorLogs->GetEntriesFast();}
302
303
304 void AddPHOSTriggerPosition(TArrayF array) { fPHOSTrigger->AddTriggerPosition(array); }
305 void AddPHOSTriggerAmplitudes(TArrayF array) { fPHOSTrigger->AddTriggerAmplitudes(array);}
306 void AddEMCALTriggerPosition(TArrayF array) { fEMCALTrigger->AddTriggerPosition(array); }
307 void AddEMCALTriggerAmplitudes(TArrayF array){ fEMCALTrigger->AddTriggerAmplitudes(array); }
308
04d01397 309 Int_t GetNumberOfPileupVerticesSPD() const {
310 return fSPDPileupVertices->GetEntriesFast();
311 }
312 Int_t GetNumberOfPileupVerticesTracks() const {
313 return fTrkPileupVertices->GetEntriesFast();
314 }
af885e0f 315 Int_t GetNumberOfTracks() const {return fTracks->GetEntriesFast();}
316 Int_t GetNumberOfHLTConfMapTracks() const {return 0;}
317 // fHLTConfMapTracks->GetEntriesFast();}
318 Int_t GetNumberOfHLTHoughTracks() const {return 0; }
319 // fHLTHoughTracks->GetEntriesFast(); }
320
321 Int_t GetNumberOfMuonTracks() const {return fMuonTracks->GetEntriesFast();}
322 Int_t GetNumberOfPmdTracks() const {return fPmdTracks->GetEntriesFast();}
323 Int_t GetNumberOfTrdTracks() const {return fTrdTracks->GetEntriesFast();}
324 Int_t GetNumberOfV0s() const {return fV0s->GetEntriesFast();}
325 Int_t GetNumberOfCascades() const {return fCascades->GetEntriesFast();}
326 Int_t GetNumberOfKinks() const {return fKinks->GetEntriesFast();}
e649177a 327
cd1d4ee0 328 Int_t GetEMCALClusters(TRefArray *clusters) const;
329 Int_t GetPHOSClusters(TRefArray *clusters) const;
af885e0f 330 Int_t GetNumberOfCaloClusters() const {return fCaloClusters->GetEntriesFast();}
331
a2fbb067 332 void SetUseOwnList(Bool_t b){fUseOwnList = b;}
333 Bool_t GetUseOwnList(){return fUseOwnList;}
e649177a 334
335 // Remove this stuff CKB?
336 //---------------------------------------------------
af885e0f 337 Int_t GetNumberOfEMCALClusters() const {return fEMCALClusters;}
338 void SetNumberOfEMCALClusters(Int_t clus) {fEMCALClusters = clus;}
339 Int_t GetFirstEMCALCluster() const {return fFirstEMCALCluster;}
340 void SetFirstEMCALCluster(Int_t index) {fFirstEMCALCluster = index;}
e649177a 341
af885e0f 342 Int_t GetNumberOfPHOSClusters() const {return fPHOSClusters;}
343 void SetNumberOfPHOSClusters(Int_t part) { fPHOSClusters = part ; }
344 void SetFirstPHOSCluster(Int_t index) { fFirstPHOSCluster = index ; }
345 Int_t GetFirstPHOSCluster() const { return fFirstPHOSCluster ; }
e649177a 346 //-------------------------------------------------------
347
348 TArrayF *GetEMCALTriggerPosition() const {return fEMCALTrigger->GetTriggerPosition();}
349 TArrayF *GetEMCALTriggerAmplitudes() const {return fEMCALTrigger->GetTriggerAmplitudes();}
af885e0f 350 TArrayF *GetPHOSTriggerPosition() const {return fPHOSTrigger->GetTriggerPosition();}
351 TArrayF *GetPHOSTriggerAmplitudes() const {return fPHOSTrigger->GetTriggerAmplitudes();}
352
353 void ResetV0s() { fV0s->Clear(); }
354 void ResetCascades() { fCascades->Clear(); }
355 void Reset();
356
357 void Print(Option_t *option="") const;
358
359 void AddObject(TObject* obj);
1d0dd492 360 void ReadFromTree(TTree *tree, Option_t* opt = "");
001b9beb 361 TObject* FindListObject(const char *name);
af885e0f 362 AliESD *GetAliESDOld(){return fESDOld;}
f12d42ce 363 void WriteToTree(TTree* tree) const;
af885e0f 364 void GetStdContent();
365 void ResetStdContent();
366 void CreateStdContent();
a2fbb067 367 void CreateStdContent(Bool_t bUseThisList);
af885e0f 368 void SetStdNames();
369 void CopyFromOldESD();
024c7734 370 TList* GetList() const {return fESDObjects;}
af885e0f 371
372protected:
373 AliESDEvent(const AliESDEvent&);
102c56c8 374 static Bool_t ResetWithPlacementNew(TObject *pObject);
af885e0f 375
376 TList *fESDObjects; // List of esd Objects
377
378 AliESDRun *fESDRun; //! Run information tmp put in the Userdata
379 AliESDHeader *fHeader; //! ESD Event Header
380 AliESDZDC *fESDZDC; //! ZDC information
381 AliESDFMD *fESDFMD; //! FMD object containing rough multiplicity
382 AliESDVZERO *fESDVZERO; //! VZERO object containing rough multiplicity
383 AliESDTZERO *fESDTZERO; //! TZEROObject
06cc9d95 384 AliESDVertex *fTPCVertex; //! Primary vertex estimated by the TPC
af885e0f 385 AliESDVertex *fSPDVertex; //! Primary vertex estimated by the SPD
386 AliESDVertex *fPrimaryVertex; //! Primary vertex estimated using ESD tracks
387 AliMultiplicity *fSPDMult; //! SPD tracklet multiplicity
388 AliESDCaloTrigger* fPHOSTrigger; //! PHOS Trigger information
389 AliESDCaloTrigger* fEMCALTrigger; //! PHOS Trigger information
bd95bae7 390 AliESDACORDE *fESDACORDE; //! ACORDE ESD object caontaining bit pattern
af885e0f 391
04d01397 392 TClonesArray *fSPDPileupVertices;//! Pileup primary vertices reconstructed by SPD
393 TClonesArray *fTrkPileupVertices;//! Pileup primary vertices reconstructed using the tracks
af885e0f 394 TClonesArray *fTracks; //! ESD tracks
395 TClonesArray *fMuonTracks; //! MUON ESD tracks
396 TClonesArray *fPmdTracks; //! PMD ESD tracks
397 TClonesArray *fTrdTracks; //! TRD ESD tracks (triggered)
398 TClonesArray *fV0s; //! V0 vertices
399 TClonesArray *fCascades; //! Cascade vertices
400 TClonesArray *fKinks; //! Kinks
401 TClonesArray *fCaloClusters; //! Calorimeter clusters for PHOS/EMCAL
e649177a 402 AliESDCaloCells *fEMCALCells; //! EMCAL cell info
403 AliESDCaloCells *fPHOSCells; //! PHOS cell info
af885e0f 404 TClonesArray *fErrorLogs; //! Raw-data reading error messages
405
406
407
1bd10080 408 AliESD *fESDOld; //! Old esd Structure
409 AliESDfriend *fESDFriendOld; //! Old friend esd Structure
60e8f114 410 Bool_t fConnected; //! flag if leaves are alreday connected
a2fbb067 411 Bool_t fUseOwnList; //! Do not use the list from the esdTree but use the one created by this class
60e8f114 412
6989bff3 413 static const char* fgkESDListName[kESDListN]; //!
af885e0f 414
af885e0f 415 // Remove this stuff CKB
416 Int_t fEMCALClusters; // Number of EMCAL clusters (subset of caloclusters)
417 Int_t fFirstEMCALCluster; // First EMCAL cluster in the fCaloClusters list
418
419 Int_t fPHOSClusters; // Number of PHOS clusters (subset of caloclusters)
420 Int_t fFirstPHOSCluster; // First PHOS cluster in the fCaloClusters list
421
04d01397 422 ClassDef(AliESDEvent,10) //ESDEvent class
af885e0f 423};
424#endif
425