13 #ifndef ROOT_TVirtualMCApplication
14 #define ROOT_TVirtualMCApplication
29 class TVirtualMCApplication :
public TNamed {
33 TVirtualMCApplication(
const char *name,
const char *title);
36 TVirtualMCApplication();
39 virtual ~TVirtualMCApplication();
42 static TVirtualMCApplication *Instance();
49 void RequestMCManager();
52 void Register(TVirtualMC *mc);
55 TVirtualMC *GetMC()
const;
58 virtual void ConstructGeometry() = 0;
61 virtual Bool_t MisalignGeometry() {
return kFALSE; }
64 virtual void ConstructOpGeometry() {}
67 virtual void ConstructSensitiveDetectors() {}
71 virtual void InitGeometry() = 0;
74 virtual void AddParticles() {}
77 virtual void AddIons() {}
80 virtual void GeneratePrimaries() = 0;
83 virtual void BeginEvent() = 0;
86 virtual void BeginPrimary() = 0;
89 virtual void PreTrack() = 0;
92 virtual void Stepping() = 0;
95 virtual void PostTrack() = 0;
98 virtual void FinishPrimary() = 0;
101 virtual void EndOfEvent() {}
104 virtual void FinishEvent() = 0;
107 virtual Double_t TrackingRmax()
const {
return DBL_MAX; }
110 virtual Double_t TrackingZmax()
const {
return DBL_MAX; }
113 virtual void Field(
const Double_t *x, Double_t *b)
const;
116 virtual void GeaneStepping() { ; }
120 virtual TVirtualMCApplication *CloneForWorker()
const {
return 0; }
124 virtual void InitForWorker()
const {}
127 virtual void BeginWorkerRun()
const {}
130 virtual void FinishWorkerRun()
const {}
133 virtual void InitOnWorker() {}
135 virtual void BeginRunOnWorker() {}
137 virtual void FinishRunOnWorker() {}
139 virtual void Merge(TVirtualMCApplication * ) {}
148 TMCManager *fMCManager;
152 #if !defined(__CINT__)
153 static TMCThreadLocal TVirtualMCApplication
156 static TVirtualMCApplication *fgInstance;
159 static Bool_t fLockMultiThreading;
161 ClassDef(TVirtualMCApplication, 1)
164 inline void TVirtualMCApplication::Field(
const Double_t * , Double_t *b)
const
172 #endif // ROOT_TVirtualMCApplication