Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4RunManagerKernel.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4RunManagerKernel
27//
28// Class description:
29//
30// This is a class for mandatory control of the Geant4 kernel.
31//
32// This class is constructed by G4RunManager. If a user adopts his/her own
33// class instead of G4RunManager, this class must be instantiated by at the
34// very beginning of the application and must be deleted at the very end.
35// In addition, the following methods must be invoked in the proper order:
36// DefineWorldVolume()
37// InitializePhysics()
38// RunInitialization()
39// RunTermination()
40//
41// User must provide his/her own classes derived from the following abstract
42// class and register it to G4RunManagerKernel:
43// G4VUserPhysicsList - Particle types, Processes and Cuts
44//
45// G4RunManagerKernel does not have any event loop. Handling of events
46// is managed by G4RunManager.
47
48// Author: M.Asai, 1 August 2003
49// --------------------------------------------------------------------
50#ifndef G4RunManagerKernel_hh
51#define G4RunManagerKernel_hh 1
52
53#include "globals.hh"
54#include "G4EventManager.hh"
55
58class G4Region;
60class G4StackManager;
63
65{
66 public:
67
69 // Static method returning the singleton pointer of
70 // G4RunManagerKernel or its derived class.
71
73 virtual ~G4RunManagerKernel();
74 // The constructor and the destructor. The user must construct this class
75 // object at the beginning of his/her main() and must delete it at the
76 // bottom of the main(), unless he/she used G4RunManager.
77
79 G4bool topologyIsChanged = true);
80
82 G4bool topologyIsChanged = true);
83 // This method must be invoked if the geometry setup has been changed
84 // between runs. The flag "topologyIsChanged" will specify if the
85 // geometry topology is different from the original one used in the
86 // previous run; if not, it must be set to false, so that the original
87 // optimisation and navigation history is preserved. This method is
88 // invoked also at initialisation.
89
90 void SetPhysics(G4VUserPhysicsList* uPhys);
91 // This method must be invoked at least once with a valid concrete
92 // implementation of user physics list.
93
94 void InitializePhysics();
95 // This method must be invoked at least once to build physics processes.
96
97 G4bool RunInitialization(G4bool fakeRun = false);
98 // Trigger geometry closing and physics table constructions.
99 // It returns TRUE if all procedures went well.
100
101 void RunTermination();
102 // Set the application state to 'Idle' so that the user can modify
103 // physics/geometry.
104
105 void UpdateRegion();
106 // Update region list. This method is mandatory before invoking the
107 // following two dump methods.
108 // At RunInitialization(), this method is automatically invoked.
109
110 void DumpRegion(const G4String& rname) const;
111 // Dump information of a region.
112
113 void DumpRegion(G4Region* region = nullptr) const;
114 // Dump information of a region.
115 // If the pointer is NULL, all regions are shown.
116
118
120 // This method must be invoked (or equivalent UI commands can be used)
121 // in case the user changes his/her detector geometry.
122 // This method is automatically invoked from DefineWorldVolume().
123
124 inline void PhysicsHasBeenModified() { physicsNeedsToBeReBuilt = true; }
125 // This method must be invoked in case the user changes his/her physics
126 // process(es), e.g. (in)activate some processes. Once this method is
127 // invoked, regardless of cuts changed or not, BuildPhysicsTable() of
128 // a PhysicsList is invoked for refreshing all physics tables.
129
130 inline G4EventManager* GetEventManager() const { return eventManager; }
132 {
133 return eventManager->GetStackManager();
134 }
136 {
137 return eventManager->GetTrackingManager();
138 }
140 {
141 eventManager->SetPrimaryTransformer(pt);
142 }
144 {
145 return eventManager->GetPrimaryTransformer();
146 }
147
148 inline const G4String& GetVersionString() const { return versionString; }
149
150 inline void SetVerboseLevel(G4int vl) { verboseLevel = vl; }
151
153 {
154 if(geometryToBeOptimized != vl)
155 {
156 geometryToBeOptimized = vl;
158 }
159 }
160
162 {
163 return numberOfParallelWorld;
164 }
165 inline void SetNumberOfParallelWorld(G4int i) { numberOfParallelWorld = i; }
166
167 inline G4VUserPhysicsList* GetPhysicsList() const { return physicsList; }
168
169 inline G4VPhysicalVolume* GetCurrentWorld() const { return currentWorld; }
170
172 {
173 return numberOfStaticAllocators;
174 }
175
177 {
181 };
182
183 protected:
184
186 // Constructor to be used by derived classes.
187
188 void SetupDefaultRegion();
189 // Called by DefineWorldVolume().
190 void SetupPhysics();
191 void ResetNavigator();
192 void BuildPhysicsTables(G4bool fakeRun);
193 void CheckRegions();
194
195 virtual void SetupShadowProcess() const;
196 // This method will setup the G4VProcesses instances to have a reference
197 // to the process instance created by the master thread.
198 // See G4VProcess::GetMasterProcess().
199
201
202 private:
203
204 void CheckRegularGeometry();
205 G4bool ConfirmCoupledTransportation();
206 void SetScoreSplitter();
207
208 protected:
209
214
215 private:
216
217 G4VUserPhysicsList* physicsList = nullptr;
218 G4VPhysicalVolume* currentWorld = nullptr;
219 G4bool geometryInitialized = false;
220 G4bool physicsInitialized = false;
221 G4bool geometryToBeOptimized = true;
222 G4bool physicsNeedsToBeReBuilt = true;
223 G4int verboseLevel = 0;
224 G4int numberOfParallelWorld = 0;
225
226 G4EventManager* eventManager = nullptr;
227 G4ExceptionHandler* defaultExceptionHandler = nullptr;
228 G4String versionString = "";
229
230 static G4ThreadLocal G4RunManagerKernel* fRunManagerKernel;
231
232 G4int numberOfStaticAllocators = 0;
233};
234
235#endif
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4PrimaryTransformer * GetPrimaryTransformer() const
void SetPrimaryTransformer(G4PrimaryTransformer *tf)
G4TrackingManager * GetTrackingManager() const
G4StackManager * GetStackManager() const
G4PrimaryTransformer * GetPrimaryTransformer() const
G4Region * defaultRegionForParallelWorld
static G4RunManagerKernel * GetRunManagerKernel()
void SetPhysics(G4VUserPhysicsList *uPhys)
G4StackManager * GetStackManager() const
G4VPhysicalVolume * GetCurrentWorld() const
G4int GetNumberOfStaticAllocators() const
void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
void SetNumberOfParallelWorld(G4int i)
G4EventManager * GetEventManager() const
void SetGeometryToBeOptimized(G4bool vl)
G4bool RunInitialization(G4bool fakeRun=false)
void WorkerDefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
G4VUserPhysicsList * GetPhysicsList() const
virtual void SetupShadowProcess() const
G4int GetNumberOfParallelWorld() const
void SetPrimaryTransformer(G4PrimaryTransformer *pt)
void DumpRegion(const G4String &rname) const
void BuildPhysicsTables(G4bool fakeRun)
const G4String & GetVersionString() const
void SetVerboseLevel(G4int vl)
G4TrackingManager * GetTrackingManager() const
#define G4ThreadLocal
Definition: tls.hh:77