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