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