]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODEvent.h
Coverity (Ruben)
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODEvent.h
CommitLineData
df9db588 1#ifndef AliAODEvent_H
2#define AliAODEvent_H
3/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/* $Id$ */
7
8//-------------------------------------------------------------------------
9// AOD base class
10// Author: Markus Oldenburg, CERN
11//-------------------------------------------------------------------------
12
13#include <TBuffer.h>
14#include <TClonesArray.h>
15#include <TList.h>
8ff33247 16#include <TTree.h>
df9db588 17#include <TNamed.h>
18
08e4c457 19#include "AliVEvent.h"
20#include "AliVParticle.h"
df9db588 21#include "AliAODHeader.h"
22#include "AliAODTrack.h"
23#include "AliAODVertex.h"
3dd9f9e3 24#include "AliAODv0.h"
9a244178 25#include "AliAODcascade.h"
821f8f1d 26#include "AliAODTracklets.h"
3dd9f9e3 27#include "AliAODJet.h"
28#include "AliAODCaloCells.h"
29#include "AliAODCaloCluster.h"
30#include "AliAODPmdCluster.h"
31#include "AliAODFmdCluster.h"
866d8d78 32#include "AliAODDimuon.h"
a1f96974 33#include "AliAODTZERO.h"
ae2bccf1 34#include "AliAODVZERO.h"
16d867eb 35#include "AliAODZDC.h"
820b4d9e 36#ifdef MFT_UPGRADE
37#include "AliAODMFT.h"
38#endif
df9db588 39
8ff33247 40class TTree;
5c1dc41f 41class TFolder;
befa9db4 42class AliCentrality;
ce7adfe9 43class AliEventplane;
ec4af4c1 44
08e4c457 45class AliAODEvent : public AliVEvent {
df9db588 46
47 public :
08e4c457 48 enum AODListIndex_t {kAODHeader,
49 kAODTracks,
50 kAODVertices,
3dd9f9e3 51 kAODv0,
9a244178 52 kAODcascade,
08e4c457 53 kAODTracklets,
3dd9f9e3 54 kAODJets,
37792174 55 kAODEmcalCells,
56 kAODPhosCells,
3dd9f9e3 57 kAODCaloClusters,
58 kAODFmdClusters,
59 kAODPmdClusters,
866d8d78 60 kAODDimuons,
a1f96974 61 kAODTZERO,
ae2bccf1 62 kAODVZERO,
16d867eb 63 kAODZDC,
08e4c457 64 kAODListN
820b4d9e 65 #ifdef MFT_UPGRADE
66 ,kAODVZERO
67 #endif
08e4c457 68 };
69
df9db588 70 AliAODEvent();
71 virtual ~AliAODEvent();
72
9a244178 73 AliAODEvent(const AliAODEvent& aodevent);
74 AliAODEvent& operator=(const AliAODEvent& aodevent);
df9db588 75
76 void AddObject(TObject *obj);
4b3de353 77 void RemoveObject(TObject *obj);
2811495d 78 TObject *FindListObject(const char *objName) const;
df9db588 79 TList *GetList() const { return fAODObjects; }
788578f5 80 void SetConnected(Bool_t conn=kTRUE) {fConnected=conn;}
81 Bool_t GetConnected() const {return fConnected;}
df9db588 82
83 // -- Header
08e4c457 84 AliAODHeader *GetHeader() const { return fHeader; }
df9db588 85 void AddHeader(const AliAODHeader* hdx)
635db10f 86 {
87 delete fHeader; fHeader = new AliAODHeader(*hdx);
88 (fAODObjects->FirstLink())->SetObject(fHeader);
89 }
df9db588 90
08e4c457 91 // setters and getters for header information
92 void SetRunNumber(Int_t n) {if (fHeader) fHeader->SetRunNumber(n);}
93 void SetPeriodNumber(UInt_t n){if (fHeader) fHeader->SetPeriodNumber(n);}
94 void SetOrbitNumber(UInt_t n) {if (fHeader) fHeader->SetOrbitNumber(n);}
95 void SetBunchCrossNumber(UShort_t n) {if (fHeader) fHeader->SetBunchCrossNumber(n);}
96 void SetMagneticField(Double_t mf){if (fHeader) fHeader->SetMagneticField(mf);}
33fe5eb1 97 void SetMuonMagFieldScale(Double_t mf){if (fHeader) fHeader->SetMuonMagFieldScale(mf);}
3bfd99da 98 void SetDiamond(Float_t xy[2],Float_t cov[3]){if (fHeader) fHeader->SetDiamond(xy,cov);}
a98c78e5 99 void SetDiamondZ(Float_t z, Float_t sig2z){if (fHeader) fHeader->SetDiamondZ(z,sig2z);}
08e4c457 100 Int_t GetRunNumber() const {return fHeader ? fHeader->GetRunNumber() : -999;}
101 UInt_t GetPeriodNumber() const {return fHeader ? fHeader->GetPeriodNumber() : 0;}
102 UInt_t GetOrbitNumber() const {return fHeader ? fHeader->GetOrbitNumber() : 0;}
103 UShort_t GetBunchCrossNumber() const {return fHeader ? fHeader->GetBunchCrossNumber() : 0;}
104 Double_t GetMagneticField() const {return fHeader ? fHeader->GetMagneticField() : -999.;}
33fe5eb1 105 Double_t GetMuonMagFieldScale() const {return fHeader ? fHeader->GetMuonMagFieldScale() : -999.;}
3bfd99da 106 Double_t GetDiamondX() const {return fHeader ? fHeader->GetDiamondX() : -999.;}
107 Double_t GetDiamondY() const {return fHeader ? fHeader->GetDiamondY() : -999.;}
a98c78e5 108 Double_t GetDiamondZ() const {return fHeader ? fHeader->GetDiamondZ() : -999.;}
3bfd99da 109 void GetDiamondCovXY(Float_t cov[3]) const {cov[0]=-999.; if(fHeader) fHeader->GetDiamondCovXY(cov);}
a98c78e5 110 Double_t GetSigma2DiamondX() const {return fHeader ? fHeader->GetSigma2DiamondX() : -999.;}
111 Double_t GetSigma2DiamondY() const {return fHeader ? fHeader->GetSigma2DiamondY() : -999.;}
112 Double_t GetSigma2DiamondZ() const {return fHeader ? fHeader->GetSigma2DiamondZ() : -999.;}
08e4c457 113
114 void SetEventType(UInt_t eventType){fHeader->SetEventType(eventType);}
115 void SetTriggerMask(ULong64_t n) {fHeader->SetTriggerMask(n);}
116 void SetTriggerCluster(UChar_t n) {fHeader->SetTriggerCluster(n);}
117
27346f69 118 UInt_t GetEventType() const { return fHeader ? fHeader->GetEventType() : 0;}
119 ULong64_t GetTriggerMask() const { return fHeader ? fHeader->GetTriggerMask() : 0;}
120 UChar_t GetTriggerCluster() const { return fHeader ? fHeader->GetTriggerCluster() : 0;}
121 TString GetFiredTriggerClasses()const { return fHeader->GetFiredTriggerClasses();};
08e4c457 122 Double_t GetZDCN1Energy() const { return fHeader ? fHeader->GetZDCN1Energy() : -999.; }
123 Double_t GetZDCP1Energy() const { return fHeader ? fHeader->GetZDCP1Energy() : -999.; }
124 Double_t GetZDCN2Energy() const { return fHeader ? fHeader->GetZDCN2Energy() : -999.; }
125 Double_t GetZDCP2Energy() const { return fHeader ? fHeader->GetZDCP2Energy() : -999.; }
a85132e7 126 Double_t GetZDCEMEnergy(Int_t i) const { return fHeader ? fHeader->GetZDCEMEnergy(i) : -999.; }
08e4c457 127
df9db588 128 // -- Tracks
129 TClonesArray *GetTracks() const { return fTracks; }
5d691d96 130 Int_t GetNTracks() const { return fTracks? fTracks->GetEntriesFast() : 0; }
08e4c457 131 Int_t GetNumberOfTracks() const { return GetNTracks(); }
5d691d96 132 AliAODTrack *GetTrack(Int_t nTrack) const { return fTracks ? (AliAODTrack*)fTracks->UncheckedAt(nTrack):0; }
08e4c457 133 Int_t AddTrack(const AliAODTrack* trk)
134 {new((*fTracks)[fTracks->GetEntriesFast()]) AliAODTrack(*trk); return fTracks->GetEntriesFast()-1;}
fb41236c 135 Int_t GetMuonTracks(TRefArray *muonTracks) const;
fa8b0e56 136 Int_t GetNumberOfMuonTracks() const;
df9db588 137
138 // -- Vertex
139 TClonesArray *GetVertices() const { return fVertices; }
5d691d96 140 Int_t GetNumberOfVertices() const { return fVertices?fVertices->GetEntriesFast():0; }
141 AliAODVertex *GetVertex(Int_t nVertex) const { return fVertices?(AliAODVertex*)fVertices->At(nVertex):0; }
08e4c457 142 Int_t AddVertex(const AliAODVertex* vtx)
143 {new((*fVertices)[fVertices->GetEntriesFast()]) AliAODVertex(*vtx); return fVertices->GetEntriesFast()-1;}
5c2fdfa2 144
3dd9f9e3 145 // primary vertex
146 virtual AliAODVertex *GetPrimaryVertex() const { return GetVertex(0); }
a98c78e5 147 virtual AliAODVertex *GetPrimaryVertexSPD() const;
148
149 // -- Pileup vertices
150 Int_t GetNumberOfPileupVerticesTracks() const;
151 Int_t GetNumberOfPileupVerticesSPD() const;
152 virtual AliAODVertex *GetPileupVertexSPD(Int_t iV=0) const;
153 virtual AliAODVertex *GetPileupVertexTracks(Int_t iV=0) const;
154 virtual Bool_t IsPileupFromSPD(Int_t minContributors=3, Double_t minZdist=0.8, Double_t nSigmaZdist=3., Double_t nSigmaDiamXY=2., Double_t nSigmaDiamZ=5.) const;
b46ff4b0 155 virtual Bool_t IsPileupFromSPDInMultBins() const;
a98c78e5 156
df9db588 157
3dd9f9e3 158 // V0
159 TClonesArray *GetV0s() const { return fV0s; }
c1b93f02 160 Int_t GetNumberOfV0s() const { return fV0s->GetEntriesFast(); }
3dd9f9e3 161 AliAODv0 *GetV0(Int_t nV0) const { return (AliAODv0*)fV0s->UncheckedAt(nV0); }
162 Int_t AddV0(const AliAODv0* v0)
163 {new((*fV0s)[fV0s->GetEntriesFast()]) AliAODv0(*v0); return fV0s->GetEntriesFast()-1;}
164
9a244178 165 // Cascades
166 TClonesArray *GetCascades() const { return fCascades; }
167 Int_t GetNumberOfCascades() const { return fCascades->GetEntriesFast(); }
168 AliAODcascade *GetCascade(Int_t nCasc) const { return (AliAODcascade*)fCascades->UncheckedAt(nCasc); }
169 Int_t AddCascade(const AliAODcascade* cascade)
170 {new((*fCascades)[fCascades->GetEntriesFast()]) AliAODcascade(*cascade); return fCascades->GetEntriesFast()-1;}
171
3dd9f9e3 172 // -- EMCAL and PHOS Cluster
c8fe2783 173 TClonesArray *GetCaloClusters() const { return fCaloClusters; }
174 Int_t GetNumberOfCaloClusters() const { return fCaloClusters->GetEntriesFast(); }
3dd9f9e3 175 AliAODCaloCluster *GetCaloCluster(Int_t nCluster) const { return (AliAODCaloCluster*)fCaloClusters->UncheckedAt(nCluster); }
176 Int_t AddCaloCluster(const AliAODCaloCluster* clus)
177 {new((*fCaloClusters)[fCaloClusters->GetEntriesFast()]) AliAODCaloCluster(*clus); return fCaloClusters->GetEntriesFast()-1;}
178
78902954 179 Int_t GetEMCALClusters(TRefArray *clusters) const;
180 Int_t GetPHOSClusters(TRefArray *clusters) const;
181
182
3dd9f9e3 183 // -- FMD Cluster
184 TClonesArray *GetFmdClusters() const { return fFmdClusters; }
185 Int_t GetNFmdClusters() const { return fFmdClusters->GetEntriesFast(); }
186 AliAODFmdCluster *GetFmdCluster(Int_t nCluster) const { return (AliAODFmdCluster*)fFmdClusters->UncheckedAt(nCluster); }
187 Int_t AddFmdCluster(const AliAODFmdCluster* clus)
188 {new((*fFmdClusters)[fFmdClusters->GetEntriesFast()]) AliAODFmdCluster(*clus); return fFmdClusters->GetEntriesFast()-1;}
189
190 // -- PMD Cluster
191 TClonesArray *GetPmdClusters() const { return fPmdClusters; }
192 Int_t GetNPmdClusters() const { return fPmdClusters->GetEntriesFast(); }
193 AliAODPmdCluster *GetPmdCluster(Int_t nCluster) const { return (AliAODPmdCluster*)fPmdClusters->UncheckedAt(nCluster); }
194 Int_t AddPmdCluster(const AliAODPmdCluster* clus)
195 {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
df9db588 196
197 // -- Jet
198 TClonesArray *GetJets() const { return fJets; }
5d691d96 199 Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
200 AliAODJet *GetJet(Int_t nJet) const { return fJets?(AliAODJet*)fJets->UncheckedAt(nJet):0; }
08e4c457 201 Int_t AddJet(const AliAODJet* vtx)
202 {new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
df9db588 203
821f8f1d 204 // -- Tracklets
205 AliAODTracklets *GetTracklets() const { return fTracklets; }
206
3dd9f9e3 207 // -- Calorimeter Cells
e649177a 208 AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
209 AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
c8fe2783 210 const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/) const { return NULL; }
211 const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)const { return NULL; }
212
3dd9f9e3 213
866d8d78 214 // -- Dimuons
215 TClonesArray *GetDimuons() const { return fDimuons; }
216 Int_t GetNDimuons() const { return fDimuons->GetEntriesFast(); }
217 Int_t GetNumberOfDimuons() const { return GetNDimuons(); }
218 AliAODDimuon *GetDimuon(Int_t nDimu) const { return (AliAODDimuon*)fDimuons->UncheckedAt(nDimu); }
219 Int_t AddDimuon(const AliAODDimuon* dimu)
220 {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
221
df9db588 222 // -- Services
ec4af4c1 223 void CreateStdContent();
08e4c457 224 void SetStdNames();
ec4af4c1 225 void GetStdContent();
5c1dc41f 226 void CreateStdFolders();
3dd9f9e3 227 void ResetStd(Int_t trkArrSize = 0,
228 Int_t vtxArrSize = 0,
229 Int_t v0ArrSize = 0,
9a244178 230 Int_t cascadeArrSize = 0,
3dd9f9e3 231 Int_t jetSize = 0,
232 Int_t caloClusSize = 0,
233 Int_t fmdClusSize = 0,
866d8d78 234 Int_t pmdClusSize = 0,
235 Int_t dimuonArrsize =0
9a244178 236 );
ec4af4c1 237 void ClearStd();
ec8aded8 238 void Reset() {ClearStd();}
3b93c32a 239 void ReadFromTree(TTree *tree, Option_t* opt = "");
f12d42ce 240 void WriteToTree(TTree* tree) const {tree->Branch(fAODObjects);}
08e4c457 241
242 void Print(Option_t *option="") const;
c8e4f399 243 void MakeEntriesReferencable();
5e6a3170 244 static void AssignIDtoCollection(const TCollection* col);
c8fe2783 245
246 //Following needed only for mixed event
247 virtual Int_t EventIndex(Int_t) const {return 0;}
248 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
249 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
250 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
befa9db4 251 AliCentrality* GetCentrality() {return fHeader->GetCentralityP();}
ce7adfe9 252 AliEventplane* GetEventplane() {return fHeader->GetEventplaneP();}
ae2bccf1 253
a1f96974 254 // TZERO
255 AliAODTZERO *GetTZEROData() const { return fAODTZERO; }
256
ae2bccf1 257 // VZERO
258 AliAODVZERO *GetVZEROData() const { return fAODVZERO; }
5e14e698 259 virtual const Float_t* GetVZEROEqFactors() const {return fHeader?fHeader->GetVZEROEqFactors():0x0;}
260 virtual Float_t GetVZEROEqMultiplicity(Int_t i) const;
261 void SetVZEROEqFactors(const Float_t *factors) const {
262 if(fHeader && factors)
263 fHeader->SetVZEROEqFactors(factors);}
ae2bccf1 264
16d867eb 265 //ZDC
266 AliAODZDC *GetZDCData() const { return fAODZDC; }
267
820b4d9e 268#ifdef MFT_UPGRADE
269 // MFT
270 AliAODMFT *GetMFTData() const { return fAODMFT; }
271#endif
272
c8fe2783 273 private :
df9db588 274
5c1dc41f 275 TList *fAODObjects; // list of AODObjects
276 TFolder *fAODFolder; // folder structure of branches
dd389a30 277 Bool_t fConnected; //! flag if leaves are alreday connected
df9db588 278 // standard content
3dd9f9e3 279 AliAODHeader *fHeader; //! event information
280 TClonesArray *fTracks; //! charged tracks
281 TClonesArray *fVertices; //! vertices
282 TClonesArray *fV0s; //! V0s
9a244178 283 TClonesArray *fCascades; //! Cascades
3dd9f9e3 284 AliAODTracklets *fTracklets; //! SPD tracklets
285 TClonesArray *fJets; //! jets
37792174 286 AliAODCaloCells *fEmcalCells; //! EMCAL calorimenter cells
287 AliAODCaloCells *fPhosCells; //! PHOS calorimenter cells
3dd9f9e3 288 TClonesArray *fCaloClusters; //! calorimeter clusters
289 TClonesArray *fFmdClusters; //! FMDclusters
290 TClonesArray *fPmdClusters; //! PMDclusters
866d8d78 291 TClonesArray *fDimuons; //! dimuons
a1f96974 292 AliAODTZERO *fAODTZERO; //! TZERO AOD
ae2bccf1 293 AliAODVZERO *fAODVZERO; //! VZERO AOD
16d867eb 294 AliAODZDC *fAODZDC; //! ZDC AOD
820b4d9e 295#ifdef MFT_UPGRADE
296 AliAODMFT *fAODMFT; //! VZERO AOD
297#endif
16d867eb 298
08e4c457 299 static const char* fAODListName[kAODListN]; //!
300
a1f96974 301 ClassDef(AliAODEvent,89);
df9db588 302};
303
304#endif