]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODEvent.h
Update master to aliroot
[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; }
4cd87297 155 AliVTrack *GetTrack(Int_t nTrack) const { return fTracks ? (AliVTrack*)fTracks->UncheckedAt(nTrack):0; }
d38034b8 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
15da855d 170 using AliVEvent::GetPrimaryVertex;
171 using AliVEvent::GetPrimaryVertexSPD;
d5e58968 172 using AliVEvent::GetPrimaryVertexTPC;
3dd9f9e3 173 virtual AliAODVertex *GetPrimaryVertex() const { return GetVertex(0); }
a98c78e5 174 virtual AliAODVertex *GetPrimaryVertexSPD() const;
c4d9b22d 175 virtual AliAODVertex *GetVertex() const { return GetPrimaryVertexSPD(); }
176 virtual AliAODVertex *GetPrimaryVertexTPC() const;
a98c78e5 177
178 // -- Pileup vertices
179 Int_t GetNumberOfPileupVerticesTracks() const;
180 Int_t GetNumberOfPileupVerticesSPD() const;
181 virtual AliAODVertex *GetPileupVertexSPD(Int_t iV=0) const;
182 virtual AliAODVertex *GetPileupVertexTracks(Int_t iV=0) const;
183 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 184 virtual Bool_t IsPileupFromSPDInMultBins() const;
a98c78e5 185
df9db588 186
3dd9f9e3 187 // V0
188 TClonesArray *GetV0s() const { return fV0s; }
c1b93f02 189 Int_t GetNumberOfV0s() const { return fV0s->GetEntriesFast(); }
15da855d 190 using AliVEvent::GetV0;
3dd9f9e3 191 AliAODv0 *GetV0(Int_t nV0) const { return (AliAODv0*)fV0s->UncheckedAt(nV0); }
192 Int_t AddV0(const AliAODv0* v0)
193 {new((*fV0s)[fV0s->GetEntriesFast()]) AliAODv0(*v0); return fV0s->GetEntriesFast()-1;}
194
9a244178 195 // Cascades
196 TClonesArray *GetCascades() const { return fCascades; }
197 Int_t GetNumberOfCascades() const { return fCascades->GetEntriesFast(); }
198 AliAODcascade *GetCascade(Int_t nCasc) const { return (AliAODcascade*)fCascades->UncheckedAt(nCasc); }
199 Int_t AddCascade(const AliAODcascade* cascade)
200 {new((*fCascades)[fCascades->GetEntriesFast()]) AliAODcascade(*cascade); return fCascades->GetEntriesFast()-1;}
201
3dd9f9e3 202 // -- EMCAL and PHOS Cluster
c8fe2783 203 TClonesArray *GetCaloClusters() const { return fCaloClusters; }
c7d82ff7 204 Int_t GetNumberOfCaloClusters() const { return fCaloClusters?fCaloClusters->GetEntriesFast():0; }
205 AliAODCaloCluster *GetCaloCluster(Int_t nCluster) const { return fCaloClusters?(AliAODCaloCluster*)fCaloClusters->UncheckedAt(nCluster):0x0; }
3dd9f9e3 206 Int_t AddCaloCluster(const AliAODCaloCluster* clus)
207 {new((*fCaloClusters)[fCaloClusters->GetEntriesFast()]) AliAODCaloCluster(*clus); return fCaloClusters->GetEntriesFast()-1;}
720f7306 208 AliAODCaloTrigger *GetCaloTrigger(TString calo) const
209 {
210 if (calo.Contains("EMCAL")) return fEMCALTrigger;
211 else
212 return fPHOSTrigger;
213 }
214
78902954 215 Int_t GetEMCALClusters(TRefArray *clusters) const;
216 Int_t GetPHOSClusters(TRefArray *clusters) const;
217
218
3dd9f9e3 219 // -- FMD Cluster
220 TClonesArray *GetFmdClusters() const { return fFmdClusters; }
221 Int_t GetNFmdClusters() const { return fFmdClusters->GetEntriesFast(); }
222 AliAODFmdCluster *GetFmdCluster(Int_t nCluster) const { return (AliAODFmdCluster*)fFmdClusters->UncheckedAt(nCluster); }
223 Int_t AddFmdCluster(const AliAODFmdCluster* clus)
224 {new((*fFmdClusters)[fFmdClusters->GetEntriesFast()]) AliAODFmdCluster(*clus); return fFmdClusters->GetEntriesFast()-1;}
225
226 // -- PMD Cluster
227 TClonesArray *GetPmdClusters() const { return fPmdClusters; }
228 Int_t GetNPmdClusters() const { return fPmdClusters->GetEntriesFast(); }
229 AliAODPmdCluster *GetPmdCluster(Int_t nCluster) const { return (AliAODPmdCluster*)fPmdClusters->UncheckedAt(nCluster); }
230 Int_t AddPmdCluster(const AliAODPmdCluster* clus)
231 {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
df9db588 232
08b38f3f 233 // -- HMPID objects
fc05a533 234 TClonesArray *GetHMPIDrings() const {return fHMPIDrings; }
567624b5 235 Int_t GetNHMPIDrings() const;
236 AliAODHMPIDrings *GetHMPIDring(Int_t nRings) const;
08b38f3f 237 Int_t AddHMPIDrings(const AliAODHMPIDrings* ring)
238 {new((*fHMPIDrings)[fHMPIDrings->GetEntriesFast()]) AliAODHMPIDrings(*ring); return fHMPIDrings->GetEntriesFast()-1;}
239
567624b5 240 AliAODHMPIDrings *GetHMPIDringForTrackID(Int_t trackID) const;
08b38f3f 241
242
df9db588 243 // -- Jet
244 TClonesArray *GetJets() const { return fJets; }
5d691d96 245 Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
246 AliAODJet *GetJet(Int_t nJet) const { return fJets?(AliAODJet*)fJets->UncheckedAt(nJet):0; }
08e4c457 247 Int_t AddJet(const AliAODJet* vtx)
248 {new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
df9db588 249
821f8f1d 250 // -- Tracklets
9a003bdc 251 AliAODTracklets *GetTracklets() const { return fTracklets; }
252 AliAODTracklets *GetMultiplicity() const {return GetTracklets();}
3dd9f9e3 253 // -- Calorimeter Cells
e649177a 254 AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
255 AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
c8fe2783 256 const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/) const { return NULL; }
257 const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)const { return NULL; }
258
3dd9f9e3 259
866d8d78 260 // -- Dimuons
261 TClonesArray *GetDimuons() const { return fDimuons; }
262 Int_t GetNDimuons() const { return fDimuons->GetEntriesFast(); }
263 Int_t GetNumberOfDimuons() const { return GetNDimuons(); }
264 AliAODDimuon *GetDimuon(Int_t nDimu) const { return (AliAODDimuon*)fDimuons->UncheckedAt(nDimu); }
265 Int_t AddDimuon(const AliAODDimuon* dimu)
266 {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
267
9aa7ebff 268 // // -- TRD
269 Int_t GetNumberOfTrdTracks() const { return fTrdTracks ? fTrdTracks->GetEntriesFast() : 0; }
270 AliAODTrdTrack* GetTrdTrack(Int_t i) const {
271 return (AliAODTrdTrack *) (fTrdTracks ? fTrdTracks->At(i) : 0x0);
272 }
273 AliAODTrdTrack& AddTrdTrack(const AliVTrdTrack *track);
274
df9db588 275 // -- Services
ec4af4c1 276 void CreateStdContent();
08e4c457 277 void SetStdNames();
ec4af4c1 278 void GetStdContent();
5c1dc41f 279 void CreateStdFolders();
3dd9f9e3 280 void ResetStd(Int_t trkArrSize = 0,
281 Int_t vtxArrSize = 0,
282 Int_t v0ArrSize = 0,
9a244178 283 Int_t cascadeArrSize = 0,
3dd9f9e3 284 Int_t jetSize = 0,
285 Int_t caloClusSize = 0,
286 Int_t fmdClusSize = 0,
866d8d78 287 Int_t pmdClusSize = 0,
08b38f3f 288 Int_t hmpidRingsSize = 0,
9aa7ebff 289 Int_t dimuonArrsize =0,
290 Int_t nTrdTracks = 0
9a244178 291 );
ec4af4c1 292 void ClearStd();
1da0e888 293 void Reset();
3b93c32a 294 void ReadFromTree(TTree *tree, Option_t* opt = "");
f12d42ce 295 void WriteToTree(TTree* tree) const {tree->Branch(fAODObjects);}
08e4c457 296
297 void Print(Option_t *option="") const;
c8e4f399 298 void MakeEntriesReferencable();
5e6a3170 299 static void AssignIDtoCollection(const TCollection* col);
c8fe2783 300
301 //Following needed only for mixed event
302 virtual Int_t EventIndex(Int_t) const {return 0;}
303 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
304 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
305 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
befa9db4 306 AliCentrality* GetCentrality() {return fHeader->GetCentralityP();}
ce7adfe9 307 AliEventplane* GetEventplane() {return fHeader->GetEventplaneP();}
ae2bccf1 308
a1f96974 309 // TZERO
310 AliAODTZERO *GetTZEROData() const { return fAODTZERO; }
900a6b52 311 Double32_t GetT0TOF(Int_t icase) const { return fAODTZERO?fAODTZERO->GetT0TOF(icase):999999;}
312 const Double32_t * GetT0TOF() const { return fAODTZERO?fAODTZERO->GetT0TOF():0x0;}
a1f96974 313
ae2bccf1 314 // VZERO
315 AliAODVZERO *GetVZEROData() const { return fAODVZERO; }
5e14e698 316 virtual const Float_t* GetVZEROEqFactors() const {return fHeader?fHeader->GetVZEROEqFactors():0x0;}
317 virtual Float_t GetVZEROEqMultiplicity(Int_t i) const;
cc4d0e9c 318 virtual void SetVZEROEqFactors(Float_t factors[64]) const {
548d7326 319 if(fHeader)
5e14e698 320 fHeader->SetVZEROEqFactors(factors);}
ae2bccf1 321
16d867eb 322 //ZDC
323 AliAODZDC *GetZDCData() const { return fAODZDC; }
324
15da855d 325 virtual AliVEvent::EDataLayoutType GetDataLayoutType() const;
820b4d9e 326
c8fe2783 327 private :
df9db588 328
5c1dc41f 329 TList *fAODObjects; // list of AODObjects
330 TFolder *fAODFolder; // folder structure of branches
dd389a30 331 Bool_t fConnected; //! flag if leaves are alreday connected
d38034b8 332 Bool_t fTracksConnected; //! flag if tracks have already pointer to event set
df9db588 333 // standard content
f8faa5ab 334 AliVAODHeader *fHeader; //! event information
3dd9f9e3 335 TClonesArray *fTracks; //! charged tracks
336 TClonesArray *fVertices; //! vertices
337 TClonesArray *fV0s; //! V0s
9a244178 338 TClonesArray *fCascades; //! Cascades
3dd9f9e3 339 AliAODTracklets *fTracklets; //! SPD tracklets
340 TClonesArray *fJets; //! jets
37792174 341 AliAODCaloCells *fEmcalCells; //! EMCAL calorimenter cells
342 AliAODCaloCells *fPhosCells; //! PHOS calorimenter cells
3dd9f9e3 343 TClonesArray *fCaloClusters; //! calorimeter clusters
720f7306 344 AliAODCaloTrigger *fEMCALTrigger; //! EMCAL Trigger information
345 AliAODCaloTrigger *fPHOSTrigger; //! PHOS Trigger information
3dd9f9e3 346 TClonesArray *fFmdClusters; //! FMDclusters
347 TClonesArray *fPmdClusters; //! PMDclusters
08b38f3f 348 TClonesArray *fHMPIDrings; //! HMPID signals
866d8d78 349 TClonesArray *fDimuons; //! dimuons
a1f96974 350 AliAODTZERO *fAODTZERO; //! TZERO AOD
ae2bccf1 351 AliAODVZERO *fAODVZERO; //! VZERO AOD
16d867eb 352 AliAODZDC *fAODZDC; //! ZDC AOD
68919bd9 353 AliTOFHeader *fTOFHeader; //! event times (and sigmas) as estimated by TOF
354 // combinatorial algorithm.
355 // It contains also TOF time resolution
356 // and T0spread as written in OCDB
9aa7ebff 357 TClonesArray *fTrdTracks; //! TRD AOD tracks (triggered)
16d867eb 358
08e4c457 359 static const char* fAODListName[kAODListN]; //!
360
08b38f3f 361 ClassDef(AliAODEvent,91);
df9db588 362};
363
364#endif