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