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