]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODEvent.h
Various fixes
[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"
720f7306 30#include "AliAODCaloTrigger.h"
3dd9f9e3 31#include "AliAODPmdCluster.h"
32#include "AliAODFmdCluster.h"
866d8d78 33#include "AliAODDimuon.h"
a1f96974 34#include "AliAODTZERO.h"
ae2bccf1 35#include "AliAODVZERO.h"
08b38f3f 36#include "AliAODHMPIDrings.h"
16d867eb 37#include "AliAODZDC.h"
9aa7ebff 38#include "AliAODTrdTrack.h"
820b4d9e 39#ifdef MFT_UPGRADE
40#include "AliAODMFT.h"
41#endif
df9db588 42
8ff33247 43class TTree;
5c1dc41f 44class TFolder;
befa9db4 45class AliCentrality;
ce7adfe9 46class AliEventplane;
ec4af4c1 47
08e4c457 48class AliAODEvent : public AliVEvent {
df9db588 49
50 public :
08e4c457 51 enum AODListIndex_t {kAODHeader,
52 kAODTracks,
53 kAODVertices,
3dd9f9e3 54 kAODv0,
9a244178 55 kAODcascade,
08e4c457 56 kAODTracklets,
3dd9f9e3 57 kAODJets,
37792174 58 kAODEmcalCells,
59 kAODPhosCells,
3dd9f9e3 60 kAODCaloClusters,
720f7306 61 kAODEMCALTrigger,
62 kAODPHOSTrigger,
3dd9f9e3 63 kAODFmdClusters,
64 kAODPmdClusters,
08b38f3f 65 kAODHMPIDrings,
866d8d78 66 kAODDimuons,
a1f96974 67 kAODTZERO,
ae2bccf1 68 kAODVZERO,
16d867eb 69 kAODZDC,
08b38f3f 70 kTOFHeader,
9aa7ebff 71 kAODTrdTracks,
b541b806 72#ifdef MFT_UPGRADE
73 kAODVZERO,
74#endif
08e4c457 75 kAODListN
76 };
77
df9db588 78 AliAODEvent();
79 virtual ~AliAODEvent();
80
9a244178 81 AliAODEvent(const AliAODEvent& aodevent);
82 AliAODEvent& operator=(const AliAODEvent& aodevent);
df9db588 83
84 void AddObject(TObject *obj);
4b3de353 85 void RemoveObject(TObject *obj);
2811495d 86 TObject *FindListObject(const char *objName) const;
df9db588 87 TList *GetList() const { return fAODObjects; }
788578f5 88 void SetConnected(Bool_t conn=kTRUE) {fConnected=conn;}
89 Bool_t GetConnected() const {return fConnected;}
df9db588 90
91 // -- Header
08e4c457 92 AliAODHeader *GetHeader() const { return fHeader; }
df9db588 93 void AddHeader(const AliAODHeader* hdx)
635db10f 94 {
95 delete fHeader; fHeader = new AliAODHeader(*hdx);
96 (fAODObjects->FirstLink())->SetObject(fHeader);
97 }
df9db588 98
08e4c457 99 // setters and getters for header information
100 void SetRunNumber(Int_t n) {if (fHeader) fHeader->SetRunNumber(n);}
101 void SetPeriodNumber(UInt_t n){if (fHeader) fHeader->SetPeriodNumber(n);}
102 void SetOrbitNumber(UInt_t n) {if (fHeader) fHeader->SetOrbitNumber(n);}
103 void SetBunchCrossNumber(UShort_t n) {if (fHeader) fHeader->SetBunchCrossNumber(n);}
104 void SetMagneticField(Double_t mf){if (fHeader) fHeader->SetMagneticField(mf);}
33fe5eb1 105 void SetMuonMagFieldScale(Double_t mf){if (fHeader) fHeader->SetMuonMagFieldScale(mf);}
3bfd99da 106 void SetDiamond(Float_t xy[2],Float_t cov[3]){if (fHeader) fHeader->SetDiamond(xy,cov);}
a98c78e5 107 void SetDiamondZ(Float_t z, Float_t sig2z){if (fHeader) fHeader->SetDiamondZ(z,sig2z);}
08e4c457 108 Int_t GetRunNumber() const {return fHeader ? fHeader->GetRunNumber() : -999;}
109 UInt_t GetPeriodNumber() const {return fHeader ? fHeader->GetPeriodNumber() : 0;}
110 UInt_t GetOrbitNumber() const {return fHeader ? fHeader->GetOrbitNumber() : 0;}
111 UShort_t GetBunchCrossNumber() const {return fHeader ? fHeader->GetBunchCrossNumber() : 0;}
112 Double_t GetMagneticField() const {return fHeader ? fHeader->GetMagneticField() : -999.;}
33fe5eb1 113 Double_t GetMuonMagFieldScale() const {return fHeader ? fHeader->GetMuonMagFieldScale() : -999.;}
3bfd99da 114 Double_t GetDiamondX() const {return fHeader ? fHeader->GetDiamondX() : -999.;}
115 Double_t GetDiamondY() const {return fHeader ? fHeader->GetDiamondY() : -999.;}
a98c78e5 116 Double_t GetDiamondZ() const {return fHeader ? fHeader->GetDiamondZ() : -999.;}
3bfd99da 117 void GetDiamondCovXY(Float_t cov[3]) const {cov[0]=-999.; if(fHeader) fHeader->GetDiamondCovXY(cov);}
a98c78e5 118 Double_t GetSigma2DiamondX() const {return fHeader ? fHeader->GetSigma2DiamondX() : -999.;}
119 Double_t GetSigma2DiamondY() const {return fHeader ? fHeader->GetSigma2DiamondY() : -999.;}
120 Double_t GetSigma2DiamondZ() const {return fHeader ? fHeader->GetSigma2DiamondZ() : -999.;}
08e4c457 121
122 void SetEventType(UInt_t eventType){fHeader->SetEventType(eventType);}
123 void SetTriggerMask(ULong64_t n) {fHeader->SetTriggerMask(n);}
124 void SetTriggerCluster(UChar_t n) {fHeader->SetTriggerCluster(n);}
125
27346f69 126 UInt_t GetEventType() const { return fHeader ? fHeader->GetEventType() : 0;}
127 ULong64_t GetTriggerMask() const { return fHeader ? fHeader->GetTriggerMask() : 0;}
128 UChar_t GetTriggerCluster() const { return fHeader ? fHeader->GetTriggerCluster() : 0;}
129 TString GetFiredTriggerClasses()const { return fHeader->GetFiredTriggerClasses();};
08e4c457 130 Double_t GetZDCN1Energy() const { return fHeader ? fHeader->GetZDCN1Energy() : -999.; }
131 Double_t GetZDCP1Energy() const { return fHeader ? fHeader->GetZDCP1Energy() : -999.; }
132 Double_t GetZDCN2Energy() const { return fHeader ? fHeader->GetZDCN2Energy() : -999.; }
133 Double_t GetZDCP2Energy() const { return fHeader ? fHeader->GetZDCP2Energy() : -999.; }
a85132e7 134 Double_t GetZDCEMEnergy(Int_t i) const { return fHeader ? fHeader->GetZDCEMEnergy(i) : -999.; }
ef7661fd 135 Int_t GetNumberOfESDTracks() const { return fHeader ? fHeader->GetNumberOfESDTracks() : 0; }
136
68919bd9 137 void SetTOFHeader(const AliTOFHeader * tofEventTime);
138 const AliTOFHeader *GetTOFHeader() const {return fTOFHeader;}
139 Float_t GetEventTimeSpread() const {if (fTOFHeader) return fTOFHeader->GetT0spread(); else return 0.;}
140 Float_t GetTOFTimeResolution() const {if (fTOFHeader) return fTOFHeader->GetTOFResolution(); else return 0.;}
78cbd205 141 Float_t GetT0spread(Int_t i) const {return fHeader->GetT0spread(i);}
68919bd9 142
143
df9db588 144 // -- Tracks
145 TClonesArray *GetTracks() const { return fTracks; }
5d691d96 146 Int_t GetNTracks() const { return fTracks? fTracks->GetEntriesFast() : 0; }
08e4c457 147 Int_t GetNumberOfTracks() const { return GetNTracks(); }
aab77ed0 148 AliAODTrack *GetTrack(Int_t nTrack) const { if(fTracks && fTracks->UncheckedAt(nTrack)) ((AliAODTrack*)fTracks->UncheckedAt(nTrack))->SetAODEvent(this);return fTracks ? (AliAODTrack*)fTracks->UncheckedAt(nTrack):0; }
08e4c457 149 Int_t AddTrack(const AliAODTrack* trk)
150 {new((*fTracks)[fTracks->GetEntriesFast()]) AliAODTrack(*trk); return fTracks->GetEntriesFast()-1;}
fb41236c 151 Int_t GetMuonTracks(TRefArray *muonTracks) const;
fa8b0e56 152 Int_t GetNumberOfMuonTracks() const;
df9db588 153
154 // -- Vertex
155 TClonesArray *GetVertices() const { return fVertices; }
5d691d96 156 Int_t GetNumberOfVertices() const { return fVertices?fVertices->GetEntriesFast():0; }
157 AliAODVertex *GetVertex(Int_t nVertex) const { return fVertices?(AliAODVertex*)fVertices->At(nVertex):0; }
08e4c457 158 Int_t AddVertex(const AliAODVertex* vtx)
159 {new((*fVertices)[fVertices->GetEntriesFast()]) AliAODVertex(*vtx); return fVertices->GetEntriesFast()-1;}
5c2fdfa2 160
3dd9f9e3 161 // primary vertex
162 virtual AliAODVertex *GetPrimaryVertex() const { return GetVertex(0); }
a98c78e5 163 virtual AliAODVertex *GetPrimaryVertexSPD() const;
164
165 // -- Pileup vertices
166 Int_t GetNumberOfPileupVerticesTracks() const;
167 Int_t GetNumberOfPileupVerticesSPD() const;
168 virtual AliAODVertex *GetPileupVertexSPD(Int_t iV=0) const;
169 virtual AliAODVertex *GetPileupVertexTracks(Int_t iV=0) const;
170 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 171 virtual Bool_t IsPileupFromSPDInMultBins() const;
a98c78e5 172
df9db588 173
3dd9f9e3 174 // V0
175 TClonesArray *GetV0s() const { return fV0s; }
c1b93f02 176 Int_t GetNumberOfV0s() const { return fV0s->GetEntriesFast(); }
3dd9f9e3 177 AliAODv0 *GetV0(Int_t nV0) const { return (AliAODv0*)fV0s->UncheckedAt(nV0); }
178 Int_t AddV0(const AliAODv0* v0)
179 {new((*fV0s)[fV0s->GetEntriesFast()]) AliAODv0(*v0); return fV0s->GetEntriesFast()-1;}
180
9a244178 181 // Cascades
182 TClonesArray *GetCascades() const { return fCascades; }
183 Int_t GetNumberOfCascades() const { return fCascades->GetEntriesFast(); }
184 AliAODcascade *GetCascade(Int_t nCasc) const { return (AliAODcascade*)fCascades->UncheckedAt(nCasc); }
185 Int_t AddCascade(const AliAODcascade* cascade)
186 {new((*fCascades)[fCascades->GetEntriesFast()]) AliAODcascade(*cascade); return fCascades->GetEntriesFast()-1;}
187
3dd9f9e3 188 // -- EMCAL and PHOS Cluster
c8fe2783 189 TClonesArray *GetCaloClusters() const { return fCaloClusters; }
c7d82ff7 190 Int_t GetNumberOfCaloClusters() const { return fCaloClusters?fCaloClusters->GetEntriesFast():0; }
191 AliAODCaloCluster *GetCaloCluster(Int_t nCluster) const { return fCaloClusters?(AliAODCaloCluster*)fCaloClusters->UncheckedAt(nCluster):0x0; }
3dd9f9e3 192 Int_t AddCaloCluster(const AliAODCaloCluster* clus)
193 {new((*fCaloClusters)[fCaloClusters->GetEntriesFast()]) AliAODCaloCluster(*clus); return fCaloClusters->GetEntriesFast()-1;}
720f7306 194 AliAODCaloTrigger *GetCaloTrigger(TString calo) const
195 {
196 if (calo.Contains("EMCAL")) return fEMCALTrigger;
197 else
198 return fPHOSTrigger;
199 }
200
78902954 201 Int_t GetEMCALClusters(TRefArray *clusters) const;
202 Int_t GetPHOSClusters(TRefArray *clusters) const;
203
204
3dd9f9e3 205 // -- FMD Cluster
206 TClonesArray *GetFmdClusters() const { return fFmdClusters; }
207 Int_t GetNFmdClusters() const { return fFmdClusters->GetEntriesFast(); }
208 AliAODFmdCluster *GetFmdCluster(Int_t nCluster) const { return (AliAODFmdCluster*)fFmdClusters->UncheckedAt(nCluster); }
209 Int_t AddFmdCluster(const AliAODFmdCluster* clus)
210 {new((*fFmdClusters)[fFmdClusters->GetEntriesFast()]) AliAODFmdCluster(*clus); return fFmdClusters->GetEntriesFast()-1;}
211
212 // -- PMD Cluster
213 TClonesArray *GetPmdClusters() const { return fPmdClusters; }
214 Int_t GetNPmdClusters() const { return fPmdClusters->GetEntriesFast(); }
215 AliAODPmdCluster *GetPmdCluster(Int_t nCluster) const { return (AliAODPmdCluster*)fPmdClusters->UncheckedAt(nCluster); }
216 Int_t AddPmdCluster(const AliAODPmdCluster* clus)
217 {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
df9db588 218
08b38f3f 219 // -- HMPID objects
fc05a533 220 TClonesArray *GetHMPIDrings() const {return fHMPIDrings; }
567624b5 221 Int_t GetNHMPIDrings() const;
222 AliAODHMPIDrings *GetHMPIDring(Int_t nRings) const;
08b38f3f 223 Int_t AddHMPIDrings(const AliAODHMPIDrings* ring)
224 {new((*fHMPIDrings)[fHMPIDrings->GetEntriesFast()]) AliAODHMPIDrings(*ring); return fHMPIDrings->GetEntriesFast()-1;}
225
567624b5 226 AliAODHMPIDrings *GetHMPIDringForTrackID(Int_t trackID) const;
08b38f3f 227
228
df9db588 229 // -- Jet
230 TClonesArray *GetJets() const { return fJets; }
5d691d96 231 Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
232 AliAODJet *GetJet(Int_t nJet) const { return fJets?(AliAODJet*)fJets->UncheckedAt(nJet):0; }
08e4c457 233 Int_t AddJet(const AliAODJet* vtx)
234 {new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
df9db588 235
821f8f1d 236 // -- Tracklets
237 AliAODTracklets *GetTracklets() const { return fTracklets; }
238
3dd9f9e3 239 // -- Calorimeter Cells
e649177a 240 AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
241 AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
c8fe2783 242 const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/) const { return NULL; }
243 const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)const { return NULL; }
244
3dd9f9e3 245
866d8d78 246 // -- Dimuons
247 TClonesArray *GetDimuons() const { return fDimuons; }
248 Int_t GetNDimuons() const { return fDimuons->GetEntriesFast(); }
249 Int_t GetNumberOfDimuons() const { return GetNDimuons(); }
250 AliAODDimuon *GetDimuon(Int_t nDimu) const { return (AliAODDimuon*)fDimuons->UncheckedAt(nDimu); }
251 Int_t AddDimuon(const AliAODDimuon* dimu)
252 {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
253
9aa7ebff 254 // // -- TRD
255 Int_t GetNumberOfTrdTracks() const { return fTrdTracks ? fTrdTracks->GetEntriesFast() : 0; }
256 AliAODTrdTrack* GetTrdTrack(Int_t i) const {
257 return (AliAODTrdTrack *) (fTrdTracks ? fTrdTracks->At(i) : 0x0);
258 }
259 AliAODTrdTrack& AddTrdTrack(const AliVTrdTrack *track);
260
df9db588 261 // -- Services
ec4af4c1 262 void CreateStdContent();
08e4c457 263 void SetStdNames();
ec4af4c1 264 void GetStdContent();
5c1dc41f 265 void CreateStdFolders();
3dd9f9e3 266 void ResetStd(Int_t trkArrSize = 0,
267 Int_t vtxArrSize = 0,
268 Int_t v0ArrSize = 0,
9a244178 269 Int_t cascadeArrSize = 0,
3dd9f9e3 270 Int_t jetSize = 0,
271 Int_t caloClusSize = 0,
272 Int_t fmdClusSize = 0,
866d8d78 273 Int_t pmdClusSize = 0,
08b38f3f 274 Int_t hmpidRingsSize = 0,
9aa7ebff 275 Int_t dimuonArrsize =0,
276 Int_t nTrdTracks = 0
9a244178 277 );
ec4af4c1 278 void ClearStd();
1da0e888 279 void Reset();
3b93c32a 280 void ReadFromTree(TTree *tree, Option_t* opt = "");
f12d42ce 281 void WriteToTree(TTree* tree) const {tree->Branch(fAODObjects);}
08e4c457 282
283 void Print(Option_t *option="") const;
c8e4f399 284 void MakeEntriesReferencable();
5e6a3170 285 static void AssignIDtoCollection(const TCollection* col);
c8fe2783 286
287 //Following needed only for mixed event
288 virtual Int_t EventIndex(Int_t) const {return 0;}
289 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
290 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
291 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
befa9db4 292 AliCentrality* GetCentrality() {return fHeader->GetCentralityP();}
ce7adfe9 293 AliEventplane* GetEventplane() {return fHeader->GetEventplaneP();}
ae2bccf1 294
a1f96974 295 // TZERO
296 AliAODTZERO *GetTZEROData() const { return fAODTZERO; }
900a6b52 297 Double32_t GetT0TOF(Int_t icase) const { return fAODTZERO?fAODTZERO->GetT0TOF(icase):999999;}
298 const Double32_t * GetT0TOF() const { return fAODTZERO?fAODTZERO->GetT0TOF():0x0;}
a1f96974 299
ae2bccf1 300 // VZERO
301 AliAODVZERO *GetVZEROData() const { return fAODVZERO; }
5e14e698 302 virtual const Float_t* GetVZEROEqFactors() const {return fHeader?fHeader->GetVZEROEqFactors():0x0;}
303 virtual Float_t GetVZEROEqMultiplicity(Int_t i) const;
cc4d0e9c 304 virtual void SetVZEROEqFactors(Float_t factors[64]) const {
305 SetVZEROEqFactors(&factors[0]);}
5e14e698 306 void SetVZEROEqFactors(const Float_t *factors) const {
307 if(fHeader && factors)
308 fHeader->SetVZEROEqFactors(factors);}
ae2bccf1 309
16d867eb 310 //ZDC
311 AliAODZDC *GetZDCData() const { return fAODZDC; }
312
820b4d9e 313#ifdef MFT_UPGRADE
314 // MFT
315 AliAODMFT *GetMFTData() const { return fAODMFT; }
316#endif
317
c8fe2783 318 private :
df9db588 319
5c1dc41f 320 TList *fAODObjects; // list of AODObjects
321 TFolder *fAODFolder; // folder structure of branches
dd389a30 322 Bool_t fConnected; //! flag if leaves are alreday connected
df9db588 323 // standard content
3dd9f9e3 324 AliAODHeader *fHeader; //! event information
325 TClonesArray *fTracks; //! charged tracks
326 TClonesArray *fVertices; //! vertices
327 TClonesArray *fV0s; //! V0s
9a244178 328 TClonesArray *fCascades; //! Cascades
3dd9f9e3 329 AliAODTracklets *fTracklets; //! SPD tracklets
330 TClonesArray *fJets; //! jets
37792174 331 AliAODCaloCells *fEmcalCells; //! EMCAL calorimenter cells
332 AliAODCaloCells *fPhosCells; //! PHOS calorimenter cells
3dd9f9e3 333 TClonesArray *fCaloClusters; //! calorimeter clusters
720f7306 334 AliAODCaloTrigger *fEMCALTrigger; //! EMCAL Trigger information
335 AliAODCaloTrigger *fPHOSTrigger; //! PHOS Trigger information
3dd9f9e3 336 TClonesArray *fFmdClusters; //! FMDclusters
337 TClonesArray *fPmdClusters; //! PMDclusters
08b38f3f 338 TClonesArray *fHMPIDrings; //! HMPID signals
866d8d78 339 TClonesArray *fDimuons; //! dimuons
a1f96974 340 AliAODTZERO *fAODTZERO; //! TZERO AOD
ae2bccf1 341 AliAODVZERO *fAODVZERO; //! VZERO AOD
16d867eb 342 AliAODZDC *fAODZDC; //! ZDC AOD
68919bd9 343 AliTOFHeader *fTOFHeader; //! event times (and sigmas) as estimated by TOF
344 // combinatorial algorithm.
345 // It contains also TOF time resolution
346 // and T0spread as written in OCDB
9aa7ebff 347 TClonesArray *fTrdTracks; //! TRD AOD tracks (triggered)
820b4d9e 348#ifdef MFT_UPGRADE
349 AliAODMFT *fAODMFT; //! VZERO AOD
350#endif
16d867eb 351
08e4c457 352 static const char* fAODListName[kAODListN]; //!
353
08b38f3f 354 ClassDef(AliAODEvent,91);
df9db588 355};
356
357#endif