]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODEvent.h
From Giacomo (AliRoot #96201): Patch for AliAODHMPIDrings in AODEvent + filtering
[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,
08e4c457 70 kAODListN
820b4d9e 71 #ifdef MFT_UPGRADE
72 ,kAODVZERO
73 #endif
08e4c457 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.;}
138
139
df9db588 140 // -- Tracks
141 TClonesArray *GetTracks() const { return fTracks; }
5d691d96 142 Int_t GetNTracks() const { return fTracks? fTracks->GetEntriesFast() : 0; }
08e4c457 143 Int_t GetNumberOfTracks() const { return GetNTracks(); }
aab77ed0 144 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 145 Int_t AddTrack(const AliAODTrack* trk)
146 {new((*fTracks)[fTracks->GetEntriesFast()]) AliAODTrack(*trk); return fTracks->GetEntriesFast()-1;}
fb41236c 147 Int_t GetMuonTracks(TRefArray *muonTracks) const;
fa8b0e56 148 Int_t GetNumberOfMuonTracks() const;
df9db588 149
150 // -- Vertex
151 TClonesArray *GetVertices() const { return fVertices; }
5d691d96 152 Int_t GetNumberOfVertices() const { return fVertices?fVertices->GetEntriesFast():0; }
153 AliAODVertex *GetVertex(Int_t nVertex) const { return fVertices?(AliAODVertex*)fVertices->At(nVertex):0; }
08e4c457 154 Int_t AddVertex(const AliAODVertex* vtx)
155 {new((*fVertices)[fVertices->GetEntriesFast()]) AliAODVertex(*vtx); return fVertices->GetEntriesFast()-1;}
5c2fdfa2 156
3dd9f9e3 157 // primary vertex
158 virtual AliAODVertex *GetPrimaryVertex() const { return GetVertex(0); }
a98c78e5 159 virtual AliAODVertex *GetPrimaryVertexSPD() const;
160
161 // -- Pileup vertices
162 Int_t GetNumberOfPileupVerticesTracks() const;
163 Int_t GetNumberOfPileupVerticesSPD() const;
164 virtual AliAODVertex *GetPileupVertexSPD(Int_t iV=0) const;
165 virtual AliAODVertex *GetPileupVertexTracks(Int_t iV=0) const;
166 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 167 virtual Bool_t IsPileupFromSPDInMultBins() const;
a98c78e5 168
df9db588 169
3dd9f9e3 170 // V0
171 TClonesArray *GetV0s() const { return fV0s; }
c1b93f02 172 Int_t GetNumberOfV0s() const { return fV0s->GetEntriesFast(); }
3dd9f9e3 173 AliAODv0 *GetV0(Int_t nV0) const { return (AliAODv0*)fV0s->UncheckedAt(nV0); }
174 Int_t AddV0(const AliAODv0* v0)
175 {new((*fV0s)[fV0s->GetEntriesFast()]) AliAODv0(*v0); return fV0s->GetEntriesFast()-1;}
176
9a244178 177 // Cascades
178 TClonesArray *GetCascades() const { return fCascades; }
179 Int_t GetNumberOfCascades() const { return fCascades->GetEntriesFast(); }
180 AliAODcascade *GetCascade(Int_t nCasc) const { return (AliAODcascade*)fCascades->UncheckedAt(nCasc); }
181 Int_t AddCascade(const AliAODcascade* cascade)
182 {new((*fCascades)[fCascades->GetEntriesFast()]) AliAODcascade(*cascade); return fCascades->GetEntriesFast()-1;}
183
3dd9f9e3 184 // -- EMCAL and PHOS Cluster
c8fe2783 185 TClonesArray *GetCaloClusters() const { return fCaloClusters; }
186 Int_t GetNumberOfCaloClusters() const { return fCaloClusters->GetEntriesFast(); }
3dd9f9e3 187 AliAODCaloCluster *GetCaloCluster(Int_t nCluster) const { return (AliAODCaloCluster*)fCaloClusters->UncheckedAt(nCluster); }
188 Int_t AddCaloCluster(const AliAODCaloCluster* clus)
189 {new((*fCaloClusters)[fCaloClusters->GetEntriesFast()]) AliAODCaloCluster(*clus); return fCaloClusters->GetEntriesFast()-1;}
720f7306 190 AliAODCaloTrigger *GetCaloTrigger(TString calo) const
191 {
192 if (calo.Contains("EMCAL")) return fEMCALTrigger;
193 else
194 return fPHOSTrigger;
195 }
196
78902954 197 Int_t GetEMCALClusters(TRefArray *clusters) const;
198 Int_t GetPHOSClusters(TRefArray *clusters) const;
199
200
3dd9f9e3 201 // -- FMD Cluster
202 TClonesArray *GetFmdClusters() const { return fFmdClusters; }
203 Int_t GetNFmdClusters() const { return fFmdClusters->GetEntriesFast(); }
204 AliAODFmdCluster *GetFmdCluster(Int_t nCluster) const { return (AliAODFmdCluster*)fFmdClusters->UncheckedAt(nCluster); }
205 Int_t AddFmdCluster(const AliAODFmdCluster* clus)
206 {new((*fFmdClusters)[fFmdClusters->GetEntriesFast()]) AliAODFmdCluster(*clus); return fFmdClusters->GetEntriesFast()-1;}
207
208 // -- PMD Cluster
209 TClonesArray *GetPmdClusters() const { return fPmdClusters; }
210 Int_t GetNPmdClusters() const { return fPmdClusters->GetEntriesFast(); }
211 AliAODPmdCluster *GetPmdCluster(Int_t nCluster) const { return (AliAODPmdCluster*)fPmdClusters->UncheckedAt(nCluster); }
212 Int_t AddPmdCluster(const AliAODPmdCluster* clus)
213 {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
df9db588 214
08b38f3f 215 // -- HMPID objects
216 TClonesArray *GetHMPIDrings() const { return fHMPIDrings; }
217 Int_t GetNHMPIDrings();
218 AliAODHMPIDrings *GetHMPIDring(Int_t nRings);
219 Int_t AddHMPIDrings(const AliAODHMPIDrings* ring)
220 {new((*fHMPIDrings)[fHMPIDrings->GetEntriesFast()]) AliAODHMPIDrings(*ring); return fHMPIDrings->GetEntriesFast()-1;}
221
222 AliAODHMPIDrings *GetHMPIDringForTrackID(Int_t trackID);
223
224
df9db588 225 // -- Jet
226 TClonesArray *GetJets() const { return fJets; }
5d691d96 227 Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
228 AliAODJet *GetJet(Int_t nJet) const { return fJets?(AliAODJet*)fJets->UncheckedAt(nJet):0; }
08e4c457 229 Int_t AddJet(const AliAODJet* vtx)
230 {new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
df9db588 231
821f8f1d 232 // -- Tracklets
233 AliAODTracklets *GetTracklets() const { return fTracklets; }
234
3dd9f9e3 235 // -- Calorimeter Cells
e649177a 236 AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
237 AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
c8fe2783 238 const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/) const { return NULL; }
239 const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)const { return NULL; }
240
3dd9f9e3 241
866d8d78 242 // -- Dimuons
243 TClonesArray *GetDimuons() const { return fDimuons; }
244 Int_t GetNDimuons() const { return fDimuons->GetEntriesFast(); }
245 Int_t GetNumberOfDimuons() const { return GetNDimuons(); }
246 AliAODDimuon *GetDimuon(Int_t nDimu) const { return (AliAODDimuon*)fDimuons->UncheckedAt(nDimu); }
247 Int_t AddDimuon(const AliAODDimuon* dimu)
248 {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
249
df9db588 250 // -- Services
ec4af4c1 251 void CreateStdContent();
08e4c457 252 void SetStdNames();
ec4af4c1 253 void GetStdContent();
5c1dc41f 254 void CreateStdFolders();
3dd9f9e3 255 void ResetStd(Int_t trkArrSize = 0,
256 Int_t vtxArrSize = 0,
257 Int_t v0ArrSize = 0,
9a244178 258 Int_t cascadeArrSize = 0,
3dd9f9e3 259 Int_t jetSize = 0,
260 Int_t caloClusSize = 0,
261 Int_t fmdClusSize = 0,
866d8d78 262 Int_t pmdClusSize = 0,
08b38f3f 263 Int_t hmpidRingsSize = 0,
866d8d78 264 Int_t dimuonArrsize =0
9a244178 265 );
ec4af4c1 266 void ClearStd();
1da0e888 267 void Reset();
3b93c32a 268 void ReadFromTree(TTree *tree, Option_t* opt = "");
f12d42ce 269 void WriteToTree(TTree* tree) const {tree->Branch(fAODObjects);}
08e4c457 270
271 void Print(Option_t *option="") const;
c8e4f399 272 void MakeEntriesReferencable();
5e6a3170 273 static void AssignIDtoCollection(const TCollection* col);
c8fe2783 274
275 //Following needed only for mixed event
276 virtual Int_t EventIndex(Int_t) const {return 0;}
277 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
278 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
279 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
befa9db4 280 AliCentrality* GetCentrality() {return fHeader->GetCentralityP();}
ce7adfe9 281 AliEventplane* GetEventplane() {return fHeader->GetEventplaneP();}
ae2bccf1 282
a1f96974 283 // TZERO
284 AliAODTZERO *GetTZEROData() const { return fAODTZERO; }
285
ae2bccf1 286 // VZERO
287 AliAODVZERO *GetVZEROData() const { return fAODVZERO; }
5e14e698 288 virtual const Float_t* GetVZEROEqFactors() const {return fHeader?fHeader->GetVZEROEqFactors():0x0;}
289 virtual Float_t GetVZEROEqMultiplicity(Int_t i) const;
cc4d0e9c 290 virtual void SetVZEROEqFactors(Float_t factors[64]) const {
291 SetVZEROEqFactors(&factors[0]);}
5e14e698 292 void SetVZEROEqFactors(const Float_t *factors) const {
293 if(fHeader && factors)
294 fHeader->SetVZEROEqFactors(factors);}
ae2bccf1 295
16d867eb 296 //ZDC
297 AliAODZDC *GetZDCData() const { return fAODZDC; }
298
820b4d9e 299#ifdef MFT_UPGRADE
300 // MFT
301 AliAODMFT *GetMFTData() const { return fAODMFT; }
302#endif
303
c8fe2783 304 private :
df9db588 305
5c1dc41f 306 TList *fAODObjects; // list of AODObjects
307 TFolder *fAODFolder; // folder structure of branches
dd389a30 308 Bool_t fConnected; //! flag if leaves are alreday connected
df9db588 309 // standard content
3dd9f9e3 310 AliAODHeader *fHeader; //! event information
311 TClonesArray *fTracks; //! charged tracks
312 TClonesArray *fVertices; //! vertices
313 TClonesArray *fV0s; //! V0s
9a244178 314 TClonesArray *fCascades; //! Cascades
3dd9f9e3 315 AliAODTracklets *fTracklets; //! SPD tracklets
316 TClonesArray *fJets; //! jets
37792174 317 AliAODCaloCells *fEmcalCells; //! EMCAL calorimenter cells
318 AliAODCaloCells *fPhosCells; //! PHOS calorimenter cells
3dd9f9e3 319 TClonesArray *fCaloClusters; //! calorimeter clusters
720f7306 320 AliAODCaloTrigger *fEMCALTrigger; //! EMCAL Trigger information
321 AliAODCaloTrigger *fPHOSTrigger; //! PHOS Trigger information
3dd9f9e3 322 TClonesArray *fFmdClusters; //! FMDclusters
323 TClonesArray *fPmdClusters; //! PMDclusters
08b38f3f 324 TClonesArray *fHMPIDrings; //! HMPID signals
866d8d78 325 TClonesArray *fDimuons; //! dimuons
a1f96974 326 AliAODTZERO *fAODTZERO; //! TZERO AOD
ae2bccf1 327 AliAODVZERO *fAODVZERO; //! VZERO AOD
16d867eb 328 AliAODZDC *fAODZDC; //! ZDC AOD
68919bd9 329 AliTOFHeader *fTOFHeader; //! event times (and sigmas) as estimated by TOF
330 // combinatorial algorithm.
331 // It contains also TOF time resolution
332 // and T0spread as written in OCDB
820b4d9e 333#ifdef MFT_UPGRADE
334 AliAODMFT *fAODMFT; //! VZERO AOD
335#endif
16d867eb 336
08e4c457 337 static const char* fAODListName[kAODListN]; //!
338
08b38f3f 339 ClassDef(AliAODEvent,91);
df9db588 340};
341
342#endif