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 "AliMCParticle.h"
28 class AliGenEventHeader;
33 class AliMCEvent : public AliVEvent {
38 virtual ~AliMCEvent() {;}
39 AliMCEvent(const AliMCEvent& mcEvnt);
40 AliMCEvent& operator=(const AliMCEvent& mcEvnt);
42 // Methods implementing the interface
45 virtual void AddObject(TObject* /*obj*/) {;}
46 virtual TObject* FindListObject(const char */*name*/) {return 0;}
47 virtual TList* GetList() const {return 0;}
48 virtual void CreateStdContent() {;}
49 virtual void GetStdContent() {;}
50 virtual void ReadFromTree(TTree * /*tree*/, Option_t* /*opt*/) {;}
51 virtual void WriteToTree(TTree* /*tree*/) const {;}
53 virtual void SetStdNames() {;}
54 virtual void Print(Option_t */*option=""*/) const {;}
58 virtual AliVHeader* GetHeader() const {return 0;}
60 // Delegated methods for fESDRun or AODHeader
62 virtual void SetRunNumber(Int_t /*n*/) {;}
63 virtual void SetPeriodNumber(UInt_t /*n*/) {;}
64 virtual void SetMagneticField(Double_t /*mf*/) {;}
67 virtual Int_t GetRunNumber() const {return 0;}
68 virtual UInt_t GetPeriodNumber() const {return 0;}
69 virtual Double_t GetMagneticField() const {return 0.;}
72 virtual void SetOrbitNumber(UInt_t /*n*/) {;}
73 virtual void SetBunchCrossNumber(UShort_t /*n*/) {;}
74 virtual void SetEventType(UInt_t /*eventType*/) {;}
75 virtual void SetTriggerMask(ULong64_t /*n*/) {;}
76 virtual void SetTriggerCluster(UChar_t /*n*/) {;}
78 virtual UInt_t GetOrbitNumber() const {return 0;}
79 virtual UShort_t GetBunchCrossNumber() const {return 0;}
81 virtual UInt_t GetEventType() const {return 0;}
83 virtual ULong64_t GetTriggerMask() const {return 0;}
84 virtual UChar_t GetTriggerCluster() const {return 0;}
85 virtual Double_t GetZDCN1Energy() const {return 0.;}
86 virtual Double_t GetZDCP1Energy() const {return 0.;}
87 virtual Double_t GetZDCN2Energy() const {return 0.;}
88 virtual Double_t GetZDCP2Energy() const {return 0.;}
89 virtual Double_t GetZDCEMEnergy(Int_t /*i*/)
92 virtual AliVParticle *GetTrack(Int_t i) const;
93 virtual Int_t GetNumberOfTracks() const {return fNparticles;}
94 virtual Int_t GetNumberOfV0s() const {return -1;}
95 virtual Int_t GetNumberOfCascades() const {return -1;}
98 // MC Specific methods
101 AliStack* Stack() {return fStack;}
102 AliHeader* Header() {return fHeader;}
103 AliGenEventHeader* GenEventHeader();
105 virtual void ConnectTreeE (TTree* tree);
106 virtual void ConnectTreeK (TTree* tree);
107 virtual void ConnectTreeTR(TTree* tree);
108 virtual void Clean();
109 virtual void InitEvent();
110 virtual void FinishEvent();
111 virtual Int_t GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs);
112 virtual void DrawCheck(Int_t i, Int_t search);
113 virtual void AddSubsidiaryEvent(AliMCEvent* event);
114 virtual Int_t GetNumberOfPrimaries() {return fNprimaries;}
115 virtual Int_t GetPrimaryOffset() const {return fPrimaryOffset;}
116 virtual Int_t GetSecondaryOffset() const {return fSecondaryOffset;}
117 virtual void SetPrimaryOffset(Int_t ioff) {fPrimaryOffset = ioff;}
118 virtual void SetSecondaryOffset(Int_t ioff) {fSecondaryOffset = ioff;}
119 virtual Bool_t IsPhysicalPrimary(Int_t i);
120 virtual Int_t BgLabelToIndex(Int_t label);
121 static Int_t BgLabelOffset() {return fgkBgLabelOffset;}
122 // External particle array
123 virtual void SetParticleArray(TClonesArray* mcParticles)
124 {fMCParticles = mcParticles; fNparticles = fMCParticles->GetEntries(); fExternal = kTRUE;}
128 virtual void ReorderAndExpandTreeTR();
129 virtual Int_t FindIndexAndEvent(Int_t oldidx, AliMCEvent*& event) const;
131 // Stanndard implementation for ESD production
132 AliStack *fStack; // Current pointer to stack
133 TClonesArray *fMCParticles; // Pointer to list of particles
134 TRefArray *fMCParticleMap; // Map of MC Particles
135 AliHeader *fHeader; // Current pointer to header
136 TClonesArray *fTRBuffer; // Track reference buffer
137 TClonesArray *fTrackReferences; // Array of track references
138 TTree *fTreeTR; // Pointer to Track Reference Tree
139 TTree *fTmpTreeTR; // Temporary tree TR to read old format
140 TFile *fTmpFileTR; // Temporary file with TreeTR to read old format
141 Int_t fNprimaries; // Number of primaries
142 Int_t fNparticles; // Number of particles
143 TList *fSubsidiaryEvents; // List of possible subsidiary events (for example merged underlying event)
144 Int_t fPrimaryOffset; // Offset for primaries
145 Int_t fSecondaryOffset; // Offset for secondaries
146 Bool_t fExternal; // True if external particle array
147 static Int_t fgkBgLabelOffset; // Standard branch name
148 ClassDef(AliMCEvent, 1) // AliVEvent realisation for MC data