]>
Commit | Line | Data |
---|---|---|
1 | #ifndef ALIRUN_H | |
2 | #define ALIRUN_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
8 | class TBrowser; | |
9 | class TList; | |
10 | class TTree; | |
11 | class TGeometry; | |
12 | class TDatabasePDG; | |
13 | class TRandom; | |
14 | class TParticle; | |
15 | #include <TArrayI.h> | |
16 | #include "TClonesArray.h" | |
17 | #include <TArrayF.h> | |
18 | #include <TStopwatch.h> | |
19 | #include "TNamed.h" | |
20 | ||
21 | class AliDetector; | |
22 | class AliModule; | |
23 | class AliMagF; | |
24 | class AliMC; | |
25 | class AliLego; | |
26 | class AliDisplay; | |
27 | class AliLegoGenerator; | |
28 | #include "AliHeader.h" | |
29 | class AliGenerator; | |
30 | class AliLegoGenerator; | |
31 | #include "AliMCProcess.h" | |
32 | class AliMCQA; | |
33 | ||
34 | enum {kKeepBit=1, kDaughtersBit=2, kDoneBit=4}; | |
35 | ||
36 | ||
37 | class AliRun : public TNamed { | |
38 | public: | |
39 | // Creators - distructors | |
40 | AliRun(); | |
41 | AliRun(const char *name, const char *title); | |
42 | virtual ~AliRun(); | |
43 | ||
44 | virtual void AddHit(Int_t id, Int_t track, Int_t *vol, Float_t *hits) const; | |
45 | virtual void AddDigit(Int_t id, Int_t *tracks, Int_t *digits) const; | |
46 | virtual void AddHitList(TCollection *hitList) {fHitLists->Add(hitList);} | |
47 | virtual void Browse(TBrowser *b); | |
48 | virtual void Build(); | |
49 | virtual void BuildSimpleGeometry(); | |
50 | virtual void CleanDetectors(); | |
51 | virtual void CleanParents(); | |
52 | TObjArray *Detectors() const {return fModules;} | |
53 | TObjArray *Modules() const {return fModules;} | |
54 | Int_t CurrentTrack() const {return fCurrent;} | |
55 | AliDisplay *Display() { return fDisplay;} | |
56 | virtual Int_t DistancetoPrimitive(Int_t px, Int_t py); | |
57 | virtual void DumpPart (Int_t i) const; | |
58 | virtual void DumpPStack () const; | |
59 | virtual AliMagF *Field() const {return fField;} | |
60 | virtual void PreTrack(); | |
61 | virtual void PostTrack(); | |
62 | virtual void FinishPrimary(); | |
63 | virtual void FinishEvent(); | |
64 | virtual void FinishRun(); | |
65 | virtual void FlagTrack(Int_t track); | |
66 | void AddEnergyDeposit(Int_t id, Float_t edep) | |
67 | {fEventEnergy[id]+=edep;} | |
68 | Int_t GetEvNumber() const {return fEvent;} | |
69 | Int_t GetRunNumber() const {return fRun;} | |
70 | void SetRunNumber(Int_t run) {fRun=run;} | |
71 | Int_t GetDebug() const {return fDebug;} | |
72 | AliModule *GetModule(const char *name) const; | |
73 | AliDetector *GetDetector(const char *name) const; | |
74 | AliMCQA *GetMCQA() const {return fMCQA;} | |
75 | Int_t GetModuleID(const char *name) const; | |
76 | virtual Int_t GetEvent(Int_t event); | |
77 | virtual void SetEvent(Int_t event) {fEvent=event;} | |
78 | virtual void SetConfigFunction(const char * config="Config();"); | |
79 | virtual const char *GetConfigFunction() const | |
80 | {return fConfigFunction.Data();} | |
81 | TGeometry *GetGeometry(); | |
82 | AliHeader *GetHeader() {return &fHeader;} | |
83 | virtual void GetNextTrack(Int_t &mtrack, Int_t &ipart, Float_t *pmom, | |
84 | Float_t &e, Float_t *vpos, Float_t *polar, | |
85 | Float_t &tof); | |
86 | Int_t GetNtrack() const {return fNtrack;} | |
87 | virtual Int_t GetPrimary(Int_t track) const; | |
88 | virtual void Hits2Digits(const char *detector=0); | |
89 | virtual void Hits2SDigits(const char *detector=0); | |
90 | virtual void SDigits2Digits(const char *detector=0); | |
91 | virtual void InitMC(const char *setup="Config.C"); | |
92 | virtual void Init(const char *setup="Config.C") {InitMC(setup);} | |
93 | Bool_t IsFolder() const {return kTRUE;} | |
94 | virtual AliLego* Lego() const {return fLego;} | |
95 | virtual void MakeTree(Option_t *option="KH", char *file = 0); | |
96 | virtual void MakeBranchInTree(TTree *tree, const char* cname, void* address, Int_t size=32000, char *file=0); | |
97 | virtual void MakeBranchInTree(TTree *tree, const char* cname, const char* name, void* address, Int_t size=32000, Int_t splitlevel=1, char *file=0); | |
98 | ||
99 | TObjArray *Particles() {return fParticleMap;}; | |
100 | TParticle *Particle(Int_t i); | |
101 | virtual void PurifyKine(); | |
102 | virtual Int_t PurifyKine(Int_t lastSavedTrack, Int_t nofTracks); | |
103 | virtual void BeginEvent(); | |
104 | virtual void ResetDigits(); | |
105 | virtual void ResetSDigits(); | |
106 | virtual void ResetHits(); | |
107 | virtual void ResetPoints(); | |
108 | virtual void SetTransPar(char *filename="$(ALICE_ROOT)/data/galice.cuts"); | |
109 | virtual void SetBaseFile(char *filename="galice.root"); | |
110 | virtual void OpenBaseFile(const char *option); | |
111 | virtual void ReadTransPar(); | |
112 | virtual void ResetStack() {fCurrent=-1;fHgwmk=fNtrack=fLoadPoint=0;fParticles->Clear();} | |
113 | virtual void RunMC(Int_t nevent=1, const char *setup="Config.C"); | |
114 | virtual void Run(Int_t nevent=1, const char *setup="Config.C") | |
115 | {RunMC(nevent,setup);} | |
116 | virtual void RunLego(const char *setup="Config.C",Int_t nc1=60,Float_t c1min=2,Float_t c1max=178, | |
117 | Int_t nc2=60,Float_t c2min=0,Float_t c2max=360,Float_t rmin=0, | |
118 | Float_t rmax=430,Float_t zmax=10000, AliLegoGenerator* gener=NULL); | |
119 | virtual Bool_t IsLegoRun() const {return (fLego!=0);} | |
120 | virtual void SetCurrentTrack(Int_t track); | |
121 | virtual void SetDebug(const Int_t level=1) {fDebug = level;} | |
122 | virtual void SetDisplay(AliDisplay *display) {fDisplay = display;} | |
123 | virtual void StepManager(Int_t id); | |
124 | virtual void SetField(Int_t type=2, Int_t version=1, Float_t scale=1, Float_t maxField=10, char*filename="$(ALICE_ROOT)/data/field01.dat"); | |
125 | virtual void SetField(AliMagF* magField); | |
126 | virtual void SetTrack(Int_t done, Int_t parent, Int_t pdg, | |
127 | Float_t *pmom, Float_t *vpos, Float_t *polar, | |
128 | Float_t tof, AliMCProcess mech, Int_t &ntr, | |
129 | Float_t weight=1); | |
130 | virtual void SetTrack(Int_t done, Int_t parent, Int_t pdg, | |
131 | Double_t px, Double_t py, Double_t pz, Double_t e, | |
132 | Double_t vx, Double_t vy, Double_t vz, Double_t tof, | |
133 | Double_t polx, Double_t poly, Double_t polz, | |
134 | AliMCProcess mech, Int_t &ntr, Float_t weight=1); | |
135 | virtual void SetHighWaterMark(const Int_t nt); | |
136 | ||
137 | virtual void KeepTrack(const Int_t itra); | |
138 | virtual void MediaTable(); | |
139 | virtual Float_t TrackingZmax() const {return fTrZmax;} | |
140 | virtual Float_t TrackingRmax() const {return fTrRmax;} | |
141 | virtual void TrackingLimits( Float_t rmax=1.e10, Float_t zmax=1.e10) {fTrRmax=rmax; fTrZmax=zmax;} | |
142 | virtual Int_t DetFromMate(Int_t i) const { return (*fImedia)[i];} | |
143 | virtual AliGenerator* Generator() const {return fGenerator;} | |
144 | virtual void SetGenerator(AliGenerator *generator); | |
145 | virtual void ResetGenerator(AliGenerator *generator); | |
146 | virtual void EnergySummary(); | |
147 | virtual TDatabasePDG* PDGDB() const {return fPDGDB;} | |
148 | ||
149 | ||
150 | TTree *TreeD() {return fTreeD;} | |
151 | TTree *TreeS() {return fTreeS;} | |
152 | TTree *TreeE() {return fTreeE;} | |
153 | TTree *TreeH() {return fTreeH;} | |
154 | TTree *TreeK() {return fTreeK;} | |
155 | TTree *TreeR() {return fTreeR;} | |
156 | ||
157 | protected: | |
158 | Int_t fRun; //! Current run number | |
159 | Int_t fEvent; //! Current event number (from 1) | |
160 | Int_t fNtrack; // Number of tracks | |
161 | Int_t fHgwmk; //! Last track purified | |
162 | Int_t fLoadPoint; //! Next free position in the particle buffer | |
163 | Int_t fCurrent; //! Last track returned from the stack | |
164 | Int_t fDebug; // Debug flag | |
165 | AliHeader fHeader; // Header information | |
166 | TTree *fTreeD; //! Pointer to Tree for Digits | |
167 | TTree *fTreeS; //! Pointer to Tree for SDigits | |
168 | TTree *fTreeK; //! Pointer to Tree for Kinematics | |
169 | TTree *fTreeH; //! Pointer to Tree for Hits | |
170 | TTree *fTreeE; //! Pointer to Tree for Header | |
171 | TTree *fTreeR; //! Pointer to Tree for Reconstructed Objects | |
172 | TObjArray *fModules; // List of Detectors | |
173 | TClonesArray *fParticles; //! Pointer to list of particles | |
174 | TGeometry *fGeometry; // Pointer to geometry | |
175 | AliDisplay *fDisplay; //! Pointer to event display | |
176 | TStopwatch fTimer; // Timer object | |
177 | AliMagF *fField; // Magnetic Field Map | |
178 | AliMC *fMC; //! Pointer to MonteCarlo object | |
179 | TArrayI *fImedia; //! Array of correspondence between media and detectors | |
180 | Int_t fNdets; // Number of detectors | |
181 | Float_t fTrRmax; // Maximum radius for tracking | |
182 | Float_t fTrZmax; // Maximu z for tracking | |
183 | AliGenerator *fGenerator; // Generator used in the MC | |
184 | Bool_t fInitDone; //! True when initialisation done | |
185 | AliLego *fLego; //! Pointer to aliLego object if it exists | |
186 | TDatabasePDG *fPDGDB; // Particle factory object | |
187 | TList *fHitLists; //! Lists of hits to be remapped by PurifyKine | |
188 | TArrayF fEventEnergy; //! Energy deposit for current event | |
189 | TArrayF fSummEnergy; //! Energy per event in each volume | |
190 | TArrayF fSum2Energy; //! Energy squared per event in each volume | |
191 | TString fConfigFunction; // Configuration file to be executed | |
192 | TRandom *fRandom; // Pointer to the random number generator | |
193 | AliMCQA *fMCQA; // Pointer to MC Quality assurance class | |
194 | TString fTransParName; // Name of the transport parameters file | |
195 | TString fBaseFileName; // Name of the base root file | |
196 | TParticle *fParticleBuffer; //! Pointer to current particle for writing | |
197 | TObjArray *fParticleMap; //! Map of particles in the supporting TClonesArray | |
198 | TArrayI fParticleFileMap; // Map of particles in the file | |
199 | ||
200 | private: | |
201 | ||
202 | AliRun(const AliRun &) {} | |
203 | AliRun& operator = (const AliRun &) {return *this;} | |
204 | ||
205 | ClassDef(AliRun,4) //Supervisor class for all Alice detectors | |
206 | }; | |
207 | ||
208 | R__EXTERN AliRun *gAlice; | |
209 | ||
210 | #endif |