]>
Commit | Line | Data |
---|---|---|
aee8290b | 1 | #ifndef ALIRUN_H |
2 | #define ALIRUN_H | |
3da30618 | 3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | /* $Id$ */ | |
7 | ||
94de3818 | 8 | #include <TArrayF.h> |
e2afb3b6 | 9 | #include <TArrayI.h> |
88cb7938 | 10 | #include <TClonesArray.h> |
98490ea9 | 11 | #include <TMCProcess.h> |
fe4da5cc | 12 | #include <TStopwatch.h> |
b9d0a01d | 13 | #include <TVirtualMCApplication.h> |
88cb7938 | 14 | #include <TVirtualMC.h> |
b8c3b0cc | 15 | #include <TError.h> |
116cbefd | 16 | |
e2afb3b6 | 17 | class TBranch; |
18 | class TBrowser; | |
19 | class TDatabasePDG; | |
20 | class TFile; | |
21 | class TGeometry; | |
22 | class TList; | |
23 | class TParticle; | |
24 | class TRandom; | |
25 | class TTree; | |
1578254f | 26 | |
88cb7938 | 27 | #include "AliRunLoader.h" |
94de3818 | 28 | class AliDetector; |
94de3818 | 29 | class AliDisplay; |
e2afb3b6 | 30 | class AliGenEventHeader; |
65fb704d | 31 | class AliGenerator; |
e2afb3b6 | 32 | class AliHeader; |
33 | class AliLego; | |
34 | class AliLegoGenerator; | |
65fb704d | 35 | class AliLegoGenerator; |
2ab0c725 | 36 | class AliMCQA; |
e2afb3b6 | 37 | class AliMagF; |
38 | class AliModule; | |
9e1a0ddb | 39 | class AliStack; |
40 | ||
88cb7938 | 41 | |
aee8290b | 42 | enum {kKeepBit=1, kDaughtersBit=2, kDoneBit=4}; |
1578254f | 43 | |
fe4da5cc | 44 | |
b9d0a01d | 45 | class AliRun : public TVirtualMCApplication { |
fe4da5cc | 46 | public: |
47 | // Creators - distructors | |
48 | AliRun(); | |
49 | AliRun(const char *name, const char *title); | |
e2afb3b6 | 50 | AliRun(const AliRun &arun); |
fe4da5cc | 51 | virtual ~AliRun(); |
52 | ||
e2afb3b6 | 53 | AliRun& operator = (const AliRun &arun) |
54 | {arun.Copy(*this); return (*this);} | |
fe4da5cc | 55 | virtual void AddHit(Int_t id, Int_t track, Int_t *vol, Float_t *hits) const; |
56 | virtual void AddDigit(Int_t id, Int_t *tracks, Int_t *digits) const; | |
1cedd08a | 57 | virtual void AddHitList(TCollection *hitList) {fHitLists->Add(hitList);} |
fe4da5cc | 58 | virtual void Browse(TBrowser *b); |
59 | virtual void Build(); | |
60 | virtual void BuildSimpleGeometry(); | |
61 | virtual void CleanDetectors(); | |
8494b010 | 62 | TObjArray *Detectors() const {return fModules;} |
63 | TObjArray *Modules() const {return fModules;} | |
642f15cf | 64 | Int_t GetCurrentTrackNumber() const; |
37d06d5b | 65 | AliDisplay *Display() const { return fDisplay;} |
116cbefd | 66 | virtual Int_t DistancetoPrimitive(Int_t px, Int_t py) const; |
94de3818 | 67 | virtual void DumpPart (Int_t i) const; |
68 | virtual void DumpPStack () const; | |
fe4da5cc | 69 | virtual AliMagF *Field() const {return fField;} |
fe4da5cc | 70 | virtual void FinishRun(); |
71 | virtual void FlagTrack(Int_t track); | |
875c717b | 72 | void AddEnergyDeposit(Int_t id, Float_t edep) |
73 | {fEventEnergy[id]+=edep;} | |
88cb7938 | 74 | void AddModule(AliModule* mod); |
75 | Int_t GetEvNumber() const; | |
fe4da5cc | 76 | Int_t GetRunNumber() const {return fRun;} |
8494b010 | 77 | void SetRunNumber(Int_t run) {fRun=run;} |
eef4b160 | 78 | void SetEventNrInRun(Int_t event) {fEventNrInRun=event;} |
79 | Int_t GetEventNrInRun() const {return fEventNrInRun;} | |
6df200c3 | 80 | Int_t GetEventsPerRun() const {return fEventsPerRun;} |
fe4da5cc | 81 | Int_t GetDebug() const {return fDebug;} |
94de3818 | 82 | AliModule *GetModule(const char *name) const; |
9e1a0ddb | 83 | TList* GetHitLists() const {return fHitLists ;} |
94de3818 | 84 | AliDetector *GetDetector(const char *name) const; |
65fb704d | 85 | AliMCQA *GetMCQA() const {return fMCQA;} |
94de3818 | 86 | Int_t GetModuleID(const char *name) const; |
39de14fb | 87 | virtual const char *GetBaseFile() const |
88 | {return fBaseFileName.Data();} | |
fe4da5cc | 89 | virtual Int_t GetEvent(Int_t event); |
45189757 | 90 | virtual void SetEvent(Int_t event) {fEvent=event;} |
94de3818 | 91 | virtual void SetConfigFunction(const char * config="Config();"); |
45189757 | 92 | virtual const char *GetConfigFunction() const |
93 | {return fConfigFunction.Data();} | |
fe4da5cc | 94 | TGeometry *GetGeometry(); |
42f33748 | 95 | virtual void SetGenEventHeader(AliGenEventHeader* header); |
9e1a0ddb | 96 | Int_t GetNtrack() const; |
97 | virtual Int_t GetPrimary(Int_t track) const; | |
d47c658f | 98 | virtual void Hits2Digits(const char *detector=0); |
99 | virtual void Hits2SDigits(const char *detector=0) {Tree2Tree("S",detector);} | |
100 | virtual void SDigits2Digits(const char *detector=0) {Tree2Tree("D",detector);} | |
101 | virtual void Digits2Reco(const char *detector=0) {Tree2Tree("R",detector);} | |
875c717b | 102 | virtual void InitMC(const char *setup="Config.C"); |
103 | virtual void Init(const char *setup="Config.C") {InitMC(setup);} | |
b21a3d1a | 104 | Bool_t IsFolder() const {return kTRUE;} |
838edcaf | 105 | virtual AliLego* Lego() const {return fLego;} |
2ab0c725 | 106 | |
37d06d5b | 107 | TObjArray *Particles() const; |
108 | TParticle *Particle(Int_t i) const; | |
fe4da5cc | 109 | virtual void ResetDigits(); |
2ab0c725 | 110 | virtual void ResetSDigits(); |
fe4da5cc | 111 | virtual void ResetHits(); |
aab9c8d5 | 112 | virtual void ResetTrackReferences(); |
fe4da5cc | 113 | virtual void ResetPoints(); |
e2afb3b6 | 114 | virtual void SetTransPar(const char *filename="$(ALICE_ROOT)/data/galice.cuts"); |
115 | virtual void SetBaseFile(const char *filename="galice.root"); | |
65fb704d | 116 | virtual void ReadTransPar(); |
875c717b | 117 | virtual void RunMC(Int_t nevent=1, const char *setup="Config.C"); |
88cb7938 | 118 | virtual void Run(Int_t nevent=1, const char *setup="Config.C") {RunMC(nevent,setup);} |
dea76e7a | 119 | virtual void RunLego(const char *setup="Config.C",Int_t nc1=60,Float_t c1min=2,Float_t c1max=178, |
88cb7938 | 120 | Int_t nc2=60,Float_t c2min=0,Float_t c2max=360,Float_t rmin=0, |
121 | Float_t rmax=430,Float_t zmax=10000, AliLegoGenerator* gener=NULL); | |
dffd31ef | 122 | virtual Bool_t IsLegoRun() const {return (fLego!=0);} |
7f6f9ab2 | 123 | virtual void RunReco(const char *detector=0, Int_t first = 0, Int_t last = 0); |
fe4da5cc | 124 | virtual void SetCurrentTrack(Int_t track); |
9e1a0ddb | 125 | virtual void SetDebug(const Int_t level=0) {fDebug = level;} |
fe4da5cc | 126 | virtual void SetDisplay(AliDisplay *display) {fDisplay = display;} |
fe4da5cc | 127 | 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"); |
d8408e76 | 128 | virtual void SetField(AliMagF* magField); |
642f15cf | 129 | virtual void PushTrack(Int_t done, Int_t parent, Int_t pdg, |
47c8bcbe | 130 | Float_t *pmom, Float_t *vpos, Float_t *polar, |
98490ea9 | 131 | Float_t tof, TMCProcess mech, Int_t &ntr, |
47c8bcbe | 132 | Float_t weight = 1, Int_t is = 0); |
642f15cf | 133 | virtual void PushTrack(Int_t done, Int_t parent, Int_t pdg, |
47c8bcbe | 134 | Double_t px, Double_t py, Double_t pz, Double_t e, |
135 | Double_t vx, Double_t vy, Double_t vz, Double_t tof, | |
136 | Double_t polx, Double_t poly, Double_t polz, | |
98490ea9 | 137 | TMCProcess mech, Int_t &ntr, Float_t weight=1, |
47c8bcbe | 138 | Int_t is = 0); |
caaac55b | 139 | virtual void SetHighWaterMark(const Int_t nt); |
4d69d91e | 140 | |
141 | virtual void KeepTrack(const Int_t itra); | |
fe4da5cc | 142 | virtual void MediaTable(); |
fe4da5cc | 143 | virtual void TrackingLimits( Float_t rmax=1.e10, Float_t zmax=1.e10) {fTrRmax=rmax; fTrZmax=zmax;} |
94de3818 | 144 | virtual Int_t DetFromMate(Int_t i) const { return (*fImedia)[i];} |
145 | virtual AliGenerator* Generator() const {return fGenerator;} | |
fe4da5cc | 146 | virtual void SetGenerator(AliGenerator *generator); |
ee1dd322 | 147 | virtual void ResetGenerator(AliGenerator *generator); |
fe4da5cc | 148 | virtual void EnergySummary(); |
94de3818 | 149 | virtual TDatabasePDG* PDGDB() const {return fPDGDB;} |
b9d0a01d | 150 | |
151 | // MC Application | |
152 | // | |
153 | virtual void ConstructGeometry(); | |
154 | virtual void InitGeometry(); | |
155 | virtual void GeneratePrimaries(); | |
156 | virtual void BeginEvent(); | |
157 | virtual void BeginPrimary(); | |
158 | virtual void PreTrack(); | |
159 | virtual void Stepping(); | |
160 | virtual void PostTrack(); | |
161 | virtual void FinishPrimary(); | |
162 | virtual void FinishEvent(); | |
163 | virtual Double_t TrackingZmax() const {return fTrZmax;} | |
164 | virtual Double_t TrackingRmax() const {return fTrRmax;} | |
165 | virtual void Field(const Double_t* x, Double_t* b) const; | |
88cb7938 | 166 | |
b9d0a01d | 167 | // |
168 | // End of MC Application | |
fe4da5cc | 169 | |
88cb7938 | 170 | TTree *TreeE() {return (fRunLoader)?fRunLoader->TreeE():0x0;} |
171 | TTree *TreeK() {return (fRunLoader)?fRunLoader->TreeK():0x0;} | |
172 | AliStack *Stack() {return (fRunLoader)?fRunLoader->Stack():0x0;} | |
173 | AliHeader* GetHeader() {return (fRunLoader)?fRunLoader->GetHeader():0x0;} | |
fe4da5cc | 174 | |
88cb7938 | 175 | TTree *TreeD() {MayNotUse("TreeD"); return 0x0;} |
176 | TTree *TreeS() {MayNotUse("TreeS"); return 0x0;} | |
177 | TTree *TreeR() {MayNotUse("TreeR"); return 0x0;} | |
b8c3b0cc | 178 | |
88cb7938 | 179 | |
180 | void SetRunLoader(AliRunLoader* rloader); | |
181 | AliRunLoader* GetRunLoader() const {return fRunLoader;} | |
182 | // void SetEventFolderName(const char* eventfoldername); | |
183 | virtual void Announce() const; | |
184 | ||
185 | virtual void InitLoaders(); //prepares run (i.e. creates getters) | |
186 | static void Deprecated(TObject *obj, const char *method, | |
187 | const char *replacement) { | |
188 | if (obj) | |
189 | ::Warning(Form("%s::%s", obj->ClassName(), method), | |
190 | "method is depricated\nPlease use: %s", replacement); | |
191 | else | |
192 | ::Warning(method, "method is depricated\nPlease use: %s", replacement); | |
193 | } | |
aee8290b | 194 | protected: |
9e1a0ddb | 195 | virtual void Tree2Tree(Option_t *option, const char *detector=0); |
2ab0c725 | 196 | Int_t fRun; //! Current run number |
197 | Int_t fEvent; //! Current event number (from 1) | |
eef4b160 | 198 | Int_t fEventNrInRun; //! Current unique event number in run |
6df200c3 | 199 | Int_t fEventsPerRun; // Number of events per run |
2ab0c725 | 200 | Int_t fDebug; // Debug flag |
2ab0c725 | 201 | TObjArray *fModules; // List of Detectors |
2ab0c725 | 202 | TGeometry *fGeometry; // Pointer to geometry |
203 | AliDisplay *fDisplay; //! Pointer to event display | |
204 | TStopwatch fTimer; // Timer object | |
205 | AliMagF *fField; // Magnetic Field Map | |
98490ea9 | 206 | TVirtualMC *fMC; //! Pointer to MonteCarlo object |
2ab0c725 | 207 | TArrayI *fImedia; //! Array of correspondence between media and detectors |
208 | Int_t fNdets; // Number of detectors | |
209 | Float_t fTrRmax; // Maximum radius for tracking | |
210 | Float_t fTrZmax; // Maximu z for tracking | |
211 | AliGenerator *fGenerator; // Generator used in the MC | |
212 | Bool_t fInitDone; //! True when initialisation done | |
213 | AliLego *fLego; //! Pointer to aliLego object if it exists | |
214 | TDatabasePDG *fPDGDB; // Particle factory object | |
215 | TList *fHitLists; //! Lists of hits to be remapped by PurifyKine | |
216 | TArrayF fEventEnergy; //! Energy deposit for current event | |
217 | TArrayF fSummEnergy; //! Energy per event in each volume | |
218 | TArrayF fSum2Energy; //! Energy squared per event in each volume | |
219 | TString fConfigFunction; // Configuration file to be executed | |
220 | TRandom *fRandom; // Pointer to the random number generator | |
221 | AliMCQA *fMCQA; // Pointer to MC Quality assurance class | |
222 | TString fTransParName; // Name of the transport parameters file | |
223 | TString fBaseFileName; // Name of the base root file | |
88cb7938 | 224 | |
225 | AliRunLoader *fRunLoader; //!run getter - written as a separate object | |
ef42d733 | 226 | private: |
e2afb3b6 | 227 | void Copy(AliRun &arun) const; |
ef42d733 | 228 | |
88cb7938 | 229 | ClassDef(AliRun,8) //Supervisor class for all Alice detectors |
fe4da5cc | 230 | }; |
231 | ||
75a25b1b | 232 | R__EXTERN AliRun *gAlice; |
fe4da5cc | 233 | |
234 | #endif |