]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AOD/AliAODEvent.h
Bad channels and recalibration factors.
[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"
30#include "AliAODPmdCluster.h"
31#include "AliAODFmdCluster.h"
866d8d78 32#include "AliAODDimuon.h"
ae2bccf1 33#include "AliAODVZERO.h"
16d867eb 34#include "AliAODZDC.h"
820b4d9e 35#ifdef MFT_UPGRADE
36#include "AliAODMFT.h"
37#endif
df9db588 38
8ff33247 39class TTree;
5c1dc41f 40class TFolder;
befa9db4 41class AliCentrality;
ce7adfe9 42class AliEventplane;
ec4af4c1 43
08e4c457 44class AliAODEvent : public AliVEvent {
df9db588 45
46 public :
08e4c457 47 enum AODListIndex_t {kAODHeader,
48 kAODTracks,
49 kAODVertices,
3dd9f9e3 50 kAODv0,
9a244178 51 kAODcascade,
08e4c457 52 kAODTracklets,
3dd9f9e3 53 kAODJets,
37792174 54 kAODEmcalCells,
55 kAODPhosCells,
3dd9f9e3 56 kAODCaloClusters,
57 kAODFmdClusters,
58 kAODPmdClusters,
866d8d78 59 kAODDimuons,
ae2bccf1 60 kAODVZERO,
16d867eb 61 kAODZDC,
08e4c457 62 kAODListN
820b4d9e 63 #ifdef MFT_UPGRADE
64 ,kAODVZERO
65 #endif
08e4c457 66 };
67
df9db588 68 AliAODEvent();
69 virtual ~AliAODEvent();
70
9a244178 71 AliAODEvent(const AliAODEvent& aodevent);
72 AliAODEvent& operator=(const AliAODEvent& aodevent);
df9db588 73
74 void AddObject(TObject *obj);
4b3de353 75 void RemoveObject(TObject *obj);
2811495d 76 TObject *FindListObject(const char *objName) const;
df9db588 77 TList *GetList() const { return fAODObjects; }
788578f5 78 void SetConnected(Bool_t conn=kTRUE) {fConnected=conn;}
79 Bool_t GetConnected() const {return fConnected;}
df9db588 80
81 // -- Header
08e4c457 82 AliAODHeader *GetHeader() const { return fHeader; }
df9db588 83 void AddHeader(const AliAODHeader* hdx)
635db10f 84 {
85 delete fHeader; fHeader = new AliAODHeader(*hdx);
86 (fAODObjects->FirstLink())->SetObject(fHeader);
87 }
df9db588 88
08e4c457 89 // setters and getters for header information
90 void SetRunNumber(Int_t n) {if (fHeader) fHeader->SetRunNumber(n);}
91 void SetPeriodNumber(UInt_t n){if (fHeader) fHeader->SetPeriodNumber(n);}
92 void SetOrbitNumber(UInt_t n) {if (fHeader) fHeader->SetOrbitNumber(n);}
93 void SetBunchCrossNumber(UShort_t n) {if (fHeader) fHeader->SetBunchCrossNumber(n);}
94 void SetMagneticField(Double_t mf){if (fHeader) fHeader->SetMagneticField(mf);}
33fe5eb1 95 void SetMuonMagFieldScale(Double_t mf){if (fHeader) fHeader->SetMuonMagFieldScale(mf);}
3bfd99da 96 void SetDiamond(Float_t xy[2],Float_t cov[3]){if (fHeader) fHeader->SetDiamond(xy,cov);}
a98c78e5 97 void SetDiamondZ(Float_t z, Float_t sig2z){if (fHeader) fHeader->SetDiamondZ(z,sig2z);}
08e4c457 98 Int_t GetRunNumber() const {return fHeader ? fHeader->GetRunNumber() : -999;}
99 UInt_t GetPeriodNumber() const {return fHeader ? fHeader->GetPeriodNumber() : 0;}
100 UInt_t GetOrbitNumber() const {return fHeader ? fHeader->GetOrbitNumber() : 0;}
101 UShort_t GetBunchCrossNumber() const {return fHeader ? fHeader->GetBunchCrossNumber() : 0;}
102 Double_t GetMagneticField() const {return fHeader ? fHeader->GetMagneticField() : -999.;}
33fe5eb1 103 Double_t GetMuonMagFieldScale() const {return fHeader ? fHeader->GetMuonMagFieldScale() : -999.;}
3bfd99da 104 Double_t GetDiamondX() const {return fHeader ? fHeader->GetDiamondX() : -999.;}
105 Double_t GetDiamondY() const {return fHeader ? fHeader->GetDiamondY() : -999.;}
a98c78e5 106 Double_t GetDiamondZ() const {return fHeader ? fHeader->GetDiamondZ() : -999.;}
3bfd99da 107 void GetDiamondCovXY(Float_t cov[3]) const {cov[0]=-999.; if(fHeader) fHeader->GetDiamondCovXY(cov);}
a98c78e5 108 Double_t GetSigma2DiamondX() const {return fHeader ? fHeader->GetSigma2DiamondX() : -999.;}
109 Double_t GetSigma2DiamondY() const {return fHeader ? fHeader->GetSigma2DiamondY() : -999.;}
110 Double_t GetSigma2DiamondZ() const {return fHeader ? fHeader->GetSigma2DiamondZ() : -999.;}
08e4c457 111
112 void SetEventType(UInt_t eventType){fHeader->SetEventType(eventType);}
113 void SetTriggerMask(ULong64_t n) {fHeader->SetTriggerMask(n);}
114 void SetTriggerCluster(UChar_t n) {fHeader->SetTriggerCluster(n);}
115
27346f69 116 UInt_t GetEventType() const { return fHeader ? fHeader->GetEventType() : 0;}
117 ULong64_t GetTriggerMask() const { return fHeader ? fHeader->GetTriggerMask() : 0;}
118 UChar_t GetTriggerCluster() const { return fHeader ? fHeader->GetTriggerCluster() : 0;}
119 TString GetFiredTriggerClasses()const { return fHeader->GetFiredTriggerClasses();};
08e4c457 120 Double_t GetZDCN1Energy() const { return fHeader ? fHeader->GetZDCN1Energy() : -999.; }
121 Double_t GetZDCP1Energy() const { return fHeader ? fHeader->GetZDCP1Energy() : -999.; }
122 Double_t GetZDCN2Energy() const { return fHeader ? fHeader->GetZDCN2Energy() : -999.; }
123 Double_t GetZDCP2Energy() const { return fHeader ? fHeader->GetZDCP2Energy() : -999.; }
a85132e7 124 Double_t GetZDCEMEnergy(Int_t i) const { return fHeader ? fHeader->GetZDCEMEnergy(i) : -999.; }
08e4c457 125
df9db588 126 // -- Tracks
127 TClonesArray *GetTracks() const { return fTracks; }
5d691d96 128 Int_t GetNTracks() const { return fTracks? fTracks->GetEntriesFast() : 0; }
08e4c457 129 Int_t GetNumberOfTracks() const { return GetNTracks(); }
5d691d96 130 AliAODTrack *GetTrack(Int_t nTrack) const { return fTracks ? (AliAODTrack*)fTracks->UncheckedAt(nTrack):0; }
08e4c457 131 Int_t AddTrack(const AliAODTrack* trk)
132 {new((*fTracks)[fTracks->GetEntriesFast()]) AliAODTrack(*trk); return fTracks->GetEntriesFast()-1;}
fb41236c 133 Int_t GetMuonTracks(TRefArray *muonTracks) const;
fa8b0e56 134 Int_t GetNumberOfMuonTracks() const;
df9db588 135
136 // -- Vertex
137 TClonesArray *GetVertices() const { return fVertices; }
5d691d96 138 Int_t GetNumberOfVertices() const { return fVertices?fVertices->GetEntriesFast():0; }
139 AliAODVertex *GetVertex(Int_t nVertex) const { return fVertices?(AliAODVertex*)fVertices->At(nVertex):0; }
08e4c457 140 Int_t AddVertex(const AliAODVertex* vtx)
141 {new((*fVertices)[fVertices->GetEntriesFast()]) AliAODVertex(*vtx); return fVertices->GetEntriesFast()-1;}
5c2fdfa2 142
3dd9f9e3 143 // primary vertex
144 virtual AliAODVertex *GetPrimaryVertex() const { return GetVertex(0); }
a98c78e5 145 virtual AliAODVertex *GetPrimaryVertexSPD() const;
146
147 // -- Pileup vertices
148 Int_t GetNumberOfPileupVerticesTracks() const;
149 Int_t GetNumberOfPileupVerticesSPD() const;
150 virtual AliAODVertex *GetPileupVertexSPD(Int_t iV=0) const;
151 virtual AliAODVertex *GetPileupVertexTracks(Int_t iV=0) const;
152 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 153 virtual Bool_t IsPileupFromSPDInMultBins() const;
a98c78e5 154
df9db588 155
3dd9f9e3 156 // V0
157 TClonesArray *GetV0s() const { return fV0s; }
c1b93f02 158 Int_t GetNumberOfV0s() const { return fV0s->GetEntriesFast(); }
3dd9f9e3 159 AliAODv0 *GetV0(Int_t nV0) const { return (AliAODv0*)fV0s->UncheckedAt(nV0); }
160 Int_t AddV0(const AliAODv0* v0)
161 {new((*fV0s)[fV0s->GetEntriesFast()]) AliAODv0(*v0); return fV0s->GetEntriesFast()-1;}
162
9a244178 163 // Cascades
164 TClonesArray *GetCascades() const { return fCascades; }
165 Int_t GetNumberOfCascades() const { return fCascades->GetEntriesFast(); }
166 AliAODcascade *GetCascade(Int_t nCasc) const { return (AliAODcascade*)fCascades->UncheckedAt(nCasc); }
167 Int_t AddCascade(const AliAODcascade* cascade)
168 {new((*fCascades)[fCascades->GetEntriesFast()]) AliAODcascade(*cascade); return fCascades->GetEntriesFast()-1;}
169
3dd9f9e3 170 // -- EMCAL and PHOS Cluster
c8fe2783 171 TClonesArray *GetCaloClusters() const { return fCaloClusters; }
172 Int_t GetNumberOfCaloClusters() const { return fCaloClusters->GetEntriesFast(); }
3dd9f9e3 173 AliAODCaloCluster *GetCaloCluster(Int_t nCluster) const { return (AliAODCaloCluster*)fCaloClusters->UncheckedAt(nCluster); }
174 Int_t AddCaloCluster(const AliAODCaloCluster* clus)
175 {new((*fCaloClusters)[fCaloClusters->GetEntriesFast()]) AliAODCaloCluster(*clus); return fCaloClusters->GetEntriesFast()-1;}
176
78902954 177 Int_t GetEMCALClusters(TRefArray *clusters) const;
178 Int_t GetPHOSClusters(TRefArray *clusters) const;
179
180
3dd9f9e3 181 // -- FMD Cluster
182 TClonesArray *GetFmdClusters() const { return fFmdClusters; }
183 Int_t GetNFmdClusters() const { return fFmdClusters->GetEntriesFast(); }
184 AliAODFmdCluster *GetFmdCluster(Int_t nCluster) const { return (AliAODFmdCluster*)fFmdClusters->UncheckedAt(nCluster); }
185 Int_t AddFmdCluster(const AliAODFmdCluster* clus)
186 {new((*fFmdClusters)[fFmdClusters->GetEntriesFast()]) AliAODFmdCluster(*clus); return fFmdClusters->GetEntriesFast()-1;}
187
188 // -- PMD Cluster
189 TClonesArray *GetPmdClusters() const { return fPmdClusters; }
190 Int_t GetNPmdClusters() const { return fPmdClusters->GetEntriesFast(); }
191 AliAODPmdCluster *GetPmdCluster(Int_t nCluster) const { return (AliAODPmdCluster*)fPmdClusters->UncheckedAt(nCluster); }
192 Int_t AddPmdCluster(const AliAODPmdCluster* clus)
193 {new((*fPmdClusters)[fPmdClusters->GetEntriesFast()]) AliAODPmdCluster(*clus); return fPmdClusters->GetEntriesFast()-1;}
df9db588 194
195 // -- Jet
196 TClonesArray *GetJets() const { return fJets; }
5d691d96 197 Int_t GetNJets() const { return fJets?fJets->GetEntriesFast():0; }
198 AliAODJet *GetJet(Int_t nJet) const { return fJets?(AliAODJet*)fJets->UncheckedAt(nJet):0; }
08e4c457 199 Int_t AddJet(const AliAODJet* vtx)
200 {new((*fJets)[fJets->GetEntriesFast()]) AliAODJet(*vtx); return fJets->GetEntriesFast()-1;}
df9db588 201
821f8f1d 202 // -- Tracklets
203 AliAODTracklets *GetTracklets() const { return fTracklets; }
204
3dd9f9e3 205 // -- Calorimeter Cells
e649177a 206 AliAODCaloCells *GetEMCALCells() const { return fEmcalCells; }
207 AliAODCaloCells *GetPHOSCells() const { return fPhosCells; }
c8fe2783 208 const TGeoHMatrix* GetPHOSMatrix(Int_t /*i*/) const { return NULL; }
209 const TGeoHMatrix* GetEMCALMatrix(Int_t /*i*/)const { return NULL; }
210
3dd9f9e3 211
866d8d78 212 // -- Dimuons
213 TClonesArray *GetDimuons() const { return fDimuons; }
214 Int_t GetNDimuons() const { return fDimuons->GetEntriesFast(); }
215 Int_t GetNumberOfDimuons() const { return GetNDimuons(); }
216 AliAODDimuon *GetDimuon(Int_t nDimu) const { return (AliAODDimuon*)fDimuons->UncheckedAt(nDimu); }
217 Int_t AddDimuon(const AliAODDimuon* dimu)
218 {new((*fDimuons)[fDimuons->GetEntriesFast()]) AliAODDimuon(*dimu); return fDimuons->GetEntriesFast()-1;}
219
df9db588 220 // -- Services
ec4af4c1 221 void CreateStdContent();
08e4c457 222 void SetStdNames();
ec4af4c1 223 void GetStdContent();
5c1dc41f 224 void CreateStdFolders();
3dd9f9e3 225 void ResetStd(Int_t trkArrSize = 0,
226 Int_t vtxArrSize = 0,
227 Int_t v0ArrSize = 0,
9a244178 228 Int_t cascadeArrSize = 0,
3dd9f9e3 229 Int_t jetSize = 0,
230 Int_t caloClusSize = 0,
231 Int_t fmdClusSize = 0,
866d8d78 232 Int_t pmdClusSize = 0,
233 Int_t dimuonArrsize =0
9a244178 234 );
ec4af4c1 235 void ClearStd();
ec8aded8 236 void Reset() {ClearStd();}
3b93c32a 237 void ReadFromTree(TTree *tree, Option_t* opt = "");
f12d42ce 238 void WriteToTree(TTree* tree) const {tree->Branch(fAODObjects);}
08e4c457 239
240 void Print(Option_t *option="") const;
c8e4f399 241 void MakeEntriesReferencable();
5e6a3170 242 static void AssignIDtoCollection(const TCollection* col);
c8fe2783 243
244 //Following needed only for mixed event
245 virtual Int_t EventIndex(Int_t) const {return 0;}
246 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
247 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
248 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
befa9db4 249 AliCentrality* GetCentrality() {return fHeader->GetCentralityP();}
ce7adfe9 250 AliEventplane* GetEventplane() {return fHeader->GetEventplaneP();}
ae2bccf1 251
252 // VZERO
253 AliAODVZERO *GetVZEROData() const { return fAODVZERO; }
254
16d867eb 255 //ZDC
256 AliAODZDC *GetZDCData() const { return fAODZDC; }
257
820b4d9e 258#ifdef MFT_UPGRADE
259 // MFT
260 AliAODMFT *GetMFTData() const { return fAODMFT; }
261#endif
262
c8fe2783 263 private :
df9db588 264
5c1dc41f 265 TList *fAODObjects; // list of AODObjects
266 TFolder *fAODFolder; // folder structure of branches
dd389a30 267 Bool_t fConnected; //! flag if leaves are alreday connected
df9db588 268 // standard content
3dd9f9e3 269 AliAODHeader *fHeader; //! event information
270 TClonesArray *fTracks; //! charged tracks
271 TClonesArray *fVertices; //! vertices
272 TClonesArray *fV0s; //! V0s
9a244178 273 TClonesArray *fCascades; //! Cascades
3dd9f9e3 274 AliAODTracklets *fTracklets; //! SPD tracklets
275 TClonesArray *fJets; //! jets
37792174 276 AliAODCaloCells *fEmcalCells; //! EMCAL calorimenter cells
277 AliAODCaloCells *fPhosCells; //! PHOS calorimenter cells
3dd9f9e3 278 TClonesArray *fCaloClusters; //! calorimeter clusters
279 TClonesArray *fFmdClusters; //! FMDclusters
280 TClonesArray *fPmdClusters; //! PMDclusters
866d8d78 281 TClonesArray *fDimuons; //! dimuons
ae2bccf1 282 AliAODVZERO *fAODVZERO; //! VZERO AOD
16d867eb 283 AliAODZDC *fAODZDC; //! ZDC AOD
820b4d9e 284#ifdef MFT_UPGRADE
285 AliAODMFT *fAODMFT; //! VZERO AOD
286#endif
16d867eb 287
08e4c457 288 static const char* fAODListName[kAODListN]; //!
289
16d867eb 290 ClassDef(AliAODEvent,87);
df9db588 291};
292
293#endif