4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
10 //-------------------------------------------------------------------------
13 // Origin: Andreas.Morsch, CERN, andreas.morsch@cern.ch
14 //-------------------------------------------------------------------------
18 #include <TRefArray.h>
19 #include <TClonesArray.h>
21 #include "AliVEvent.h"
22 #include "AliVHeader.h"
23 #include "AliVParticle.h"
24 #include "AliVVertex.h"
25 #include "AliMCParticle.h"
31 class AliGenEventHeader;
36 class AliMCEvent : public AliVEvent {
41 virtual ~AliMCEvent() {;}
42 AliMCEvent(const AliMCEvent& mcEvnt);
43 AliMCEvent& operator=(const AliMCEvent& mcEvnt);
45 // Methods implementing the interface
48 virtual void AddObject(TObject* /*obj*/) {;}
49 virtual TObject* FindListObject(const char */*name*/) const {return 0;}
50 virtual TList* GetList() const {return 0;}
51 virtual void CreateStdContent() {;}
52 virtual void GetStdContent() {;}
53 virtual void ReadFromTree(TTree * /*tree*/, Option_t* /*opt*/) {;}
54 virtual void WriteToTree(TTree* /*tree*/) const {;}
56 virtual void SetStdNames() {;}
57 virtual void Print(Option_t */*option=""*/) const {;}
58 virtual void PreReadAll();
59 virtual void Reset() {;}
62 virtual AliVHeader* GetHeader() const {return 0;}
64 // Delegated methods for fESDRun or AODHeader
66 virtual void SetRunNumber(Int_t /*n*/) {;}
67 virtual void SetPeriodNumber(UInt_t /*n*/) {;}
68 virtual void SetMagneticField(Double_t /*mf*/) {;}
71 virtual Int_t GetRunNumber() const {return 0;}
72 virtual UInt_t GetPeriodNumber() const {return 0;}
73 virtual Double_t GetMagneticField() const {return 0.;}
76 virtual void SetOrbitNumber(UInt_t /*n*/) {;}
77 virtual void SetBunchCrossNumber(UShort_t /*n*/) {;}
78 virtual void SetEventType(UInt_t /*eventType*/) {;}
79 virtual void SetTriggerMask(ULong64_t /*n*/) {;}
80 virtual void SetTriggerCluster(UChar_t /*n*/) {;}
82 virtual UInt_t GetOrbitNumber() const {return 0;}
83 virtual UShort_t GetBunchCrossNumber() const {return 0;}
85 virtual UInt_t GetEventType() const {return 0;}
87 virtual ULong64_t GetTriggerMask() const {return 0;}
88 virtual UChar_t GetTriggerCluster() const {return 0;}
89 virtual TString GetFiredTriggerClasses()const {return ("");}
90 virtual Double_t GetZDCN1Energy() const {return 0.;}
91 virtual Double_t GetZDCP1Energy() const {return 0.;}
92 virtual Double_t GetZDCN2Energy() const {return 0.;}
93 virtual Double_t GetZDCP2Energy() const {return 0.;}
94 virtual Double_t GetZDCEMEnergy(Int_t /*i*/)
97 virtual AliVParticle *GetTrack(Int_t i) const;
98 virtual Int_t GetNumberOfTracks() const {return fNparticles;}
99 virtual Int_t GetNumberOfV0s() const {return -1;}
100 virtual Int_t GetNumberOfCascades() const {return -1;}
102 using AliVEvent::GetPrimaryVertex;
103 virtual const AliVVertex *GetPrimaryVertex() const;
106 // MC Specific methods
109 AliStack* Stack() {return fStack;}
110 AliHeader* Header() {return fHeader;}
111 AliGenEventHeader* GenEventHeader() const;
113 virtual void ConnectTreeE (TTree* tree);
114 virtual void ConnectTreeK (TTree* tree);
115 virtual void ConnectHeaderAndStack(AliHeader* header);
116 virtual void ConnectTreeTR(TTree* tree);
117 virtual void Clean();
118 virtual void InitEvent();
119 virtual void FinishEvent();
120 virtual Int_t GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs);
121 virtual void DrawCheck(Int_t i, Int_t search);
122 virtual void AddSubsidiaryEvent(AliMCEvent* event);
123 virtual Int_t GetNumberOfPrimaries() {return fNprimaries;}
124 virtual Int_t GetPrimaryOffset() const {return fPrimaryOffset;}
125 virtual Int_t GetSecondaryOffset() const {return fSecondaryOffset;}
126 virtual void SetPrimaryOffset(Int_t ioff) {fPrimaryOffset = ioff;}
127 virtual void SetSecondaryOffset(Int_t ioff) {fSecondaryOffset = ioff;}
128 virtual Bool_t IsPhysicalPrimary(Int_t i) const;
130 virtual Int_t BgLabelToIndex(Int_t label);
131 static Int_t BgLabelOffset() {return fgkBgLabelOffset;}
132 virtual Bool_t IsFromBGEvent(Int_t index);
133 TList* GetCocktailList();
134 TString GetGenerator(Int_t index);
135 Bool_t GetCocktailGenerator(Int_t index,TString &nameGen);
136 virtual Bool_t IsSecondaryFromWeakDecay(Int_t index);
137 virtual Bool_t IsSecondaryFromMaterial(Int_t index);
138 // External particle array
139 virtual void SetParticleArray(TClonesArray* mcParticles);
141 virtual void SetExternalHeader(AliVHeader* aodmcHeader)
142 {fAODMCHeader=aodmcHeader;}
143 virtual AliGenEventHeader *FindHeader(Int_t ipart);
144 //Following needed only for mixed event
145 virtual Int_t EventIndex(Int_t) const {return 0;}
146 virtual Int_t EventIndexForCaloCluster(Int_t) const {return 0;}
147 virtual Int_t EventIndexForPHOSCell(Int_t) const {return 0;}
148 virtual Int_t EventIndexForEMCALCell(Int_t) const {return 0;}
149 AliCentrality* GetCentrality() {return 0;}
150 AliEventplane* GetEventplane() {return 0;}
152 virtual AliVVZERO *GetVZEROData() const {return 0;}
153 virtual AliVZDC *GetZDCData() const {return 0;}
155 virtual AliVEvent::EDataLayoutType GetDataLayoutType() const;
158 virtual void ReorderAndExpandTreeTR();
159 virtual Int_t FindIndexAndEvent(Int_t oldidx, AliMCEvent*& event) const;
160 void UpdateEventInformation();
161 virtual void AssignGeneratorIndex();
162 virtual void AssignGeneratorIndex(Int_t index, Int_t dmin, Int_t dmax);
165 // Stanndard implementation for ESD production
166 AliStack *fStack; // Current pointer to stack
167 TClonesArray *fMCParticles; // Pointer to list of particles
168 TObjArray *fMCParticleMap; // Map of MC Particles
169 AliHeader *fHeader; // Current pointer to header
170 AliVHeader *fAODMCHeader; //Current pointer to AODMC header
171 TClonesArray *fTRBuffer; // Track reference buffer
172 TClonesArray *fTrackReferences; // Array of track references
173 TTree *fTreeTR; // Pointer to Track Reference Tree
174 TTree *fTmpTreeTR; // Temporary tree TR to read old format
175 TFile *fTmpFileTR; // Temporary file with TreeTR to read old format
176 Int_t fNprimaries; // Number of primaries
177 Int_t fNparticles; // Number of particles
178 TList *fSubsidiaryEvents; // List of possible subsidiary events (for example merged underlying event)
179 Int_t fPrimaryOffset; // Offset for primaries
180 Int_t fSecondaryOffset; // Offset for secondaries
181 Bool_t fExternal; // True if external particle array
182 static Int_t fgkBgLabelOffset; // Standard branch name
183 mutable AliVVertex* fVertex; // MC Vertex
184 Int_t fNBG; //! Background particles in current event
186 ClassDef(AliMCEvent, 2) // AliVEvent realisation for MC data