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