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