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