Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
G4WorkerRunManager Class Reference

#include <G4WorkerRunManager.hh>

Inheritance diagram for G4WorkerRunManager:
G4RunManager tbbWorkerRunManager

Public Member Functions

 G4WorkerRunManager ()
 
 ~G4WorkerRunManager ()
 
virtual void InitializeGeometry ()
 
virtual void RunInitialization ()
 
virtual void DoEventLoop (G4int n_event, const char *macroFile=0, G4int n_select=-1)
 
virtual void ProcessOneEvent (G4int i_event)
 
virtual G4EventGenerateEvent (G4int i_event)
 
virtual void RunTermination ()
 
void SetWorkerThread (G4WorkerThread *wc)
 Sets the worker context. More...
 
virtual void SetUserInitialization (G4VUserPhysicsList *userInit)
 
virtual void SetUserInitialization (G4VUserDetectorConstruction *userInit)
 
virtual void SetUserInitialization (G4VUserActionInitialization *userInit)
 
virtual void SetUserInitialization (G4UserWorkerInitialization *userInit)
 
virtual void SetUserInitialization (G4UserWorkerThreadInitialization *userInit)
 
virtual void SetUserAction (G4UserRunAction *userAction)
 
virtual void SetUserAction (G4VUserPrimaryGeneratorAction *userAction)
 
virtual void SetUserAction (G4UserEventAction *userAction)
 
virtual void SetUserAction (G4UserStackingAction *userAction)
 
virtual void SetUserAction (G4UserTrackingAction *userAction)
 
virtual void SetUserAction (G4UserSteppingAction *userAction)
 
- Public Member Functions inherited from G4RunManager
 G4RunManager ()
 
virtual ~G4RunManager ()
 
virtual void BeamOn (G4int n_event, const char *macroFile=0, G4int n_select=-1)
 
virtual void Initialize ()
 
virtual void DefineWorldVolume (G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
 
virtual void AbortRun (G4bool softAbort=false)
 
virtual void AbortEvent ()
 
virtual void InitializePhysics ()
 
virtual G4bool ConfirmBeamOnCondition ()
 
virtual void InitializeEventLoop (G4int n_event, const char *macroFile=0, G4int n_select=-1)
 
virtual void TerminateOneEvent ()
 
virtual void TerminateEventLoop ()
 
virtual void AnalyzeEvent (G4Event *anEvent)
 
void DumpRegion (const G4String &rname) const
 
void DumpRegion (G4Region *region=0) const
 
virtual void rndmSaveThisRun ()
 
virtual void rndmSaveThisEvent ()
 
virtual void RestoreRandomNumberStatus (const G4String &fileN)
 
const G4VUserDetectorConstructionGetUserDetectorConstruction () const
 
const G4VUserPhysicsListGetUserPhysicsList () const
 
const G4VUserActionInitializationGetUserActionInitialization () const
 
G4VUserActionInitializationGetNonConstUserActionInitialization () const
 
const G4UserWorkerInitializationGetUserWorkerInitialization () const
 
const
G4UserWorkerThreadInitialization
GetUserWorkerThreadInitialization () const
 
const G4UserRunActionGetUserRunAction () const
 
const
G4VUserPrimaryGeneratorAction
GetUserPrimaryGeneratorAction () const
 
const G4UserEventActionGetUserEventAction () const
 
const G4UserStackingActionGetUserStackingAction () const
 
const G4UserTrackingActionGetUserTrackingAction () const
 
const G4UserSteppingActionGetUserSteppingAction () const
 
void SetNumberOfAdditionalWaitingStacks (G4int iAdd)
 
const G4StringGetVersionString () const
 
void SetPrimaryTransformer (G4PrimaryTransformer *pt)
 
void StoreRandomNumberStatusToG4Event (G4int vl)
 
G4int GetFlagRandomNumberStatusToG4Event () const
 
void SetRandomNumberStore (G4bool flag)
 
G4bool GetRandomNumberStore () const
 
void SetRandomNumberStoreDir (const G4String &dir)
 
const G4StringGetRandomNumberStoreDir () const
 
const G4StringGetRandomNumberStatusForThisRun () const
 
const G4StringGetRandomNumberStatusForThisEvent () const
 
void SetRandomNumberStorePerEvent (G4bool flag)
 
G4bool GetRandomNumberStorePerEvent () const
 
void GeometryHasBeenModified (G4bool prop=true)
 
void ReinitializeGeometry (G4bool destroyFirst=false, G4bool prop=true)
 
void PhysicsHasBeenModified ()
 
void CutOffHasBeenModified ()
 
void ReOptimizeMotherOf (G4VPhysicalVolume *)
 
void ReOptimize (G4LogicalVolume *)
 
void SetVerboseLevel (G4int vl)
 
G4int GetVerboseLevel () const
 
G4int GetPrintProgress ()
 
void SetPrintProgress (G4int i)
 
void SetGeometryToBeOptimized (G4bool vl)
 
G4bool GetGeometryToBeOptimized ()
 
void SetNumberOfEventsToBeStored (G4int val)
 
const G4RunGetCurrentRun () const
 
G4RunGetNonConstCurrentRun () const
 
const G4EventGetCurrentEvent () const
 
const G4EventGetPreviousEvent (G4int i) const
 
void SetRunIDCounter (G4int i)
 
G4int GetNumberOfParallelWorld () const
 
void SetNumberOfEventsToBeProcessed (G4int val)
 
G4int GetNumberOfEventsToBeProcessed () const
 
G4int GetNumberOfSelectEvents () const
 
G4String GetSelectMacro () const
 
void SetDCtable (G4DCtable *DCtbl)
 
RMType GetRunManagerType () const
 

Static Public Member Functions

static G4WorkerRunManagerGetWorkerRunManager ()
 
static G4WorkerRunManagerKernelGetWorkerRunManagerKernel ()
 
- Static Public Member Functions inherited from G4RunManager
static G4RunManagerGetRunManager ()
 

Protected Member Functions

virtual void ConstructScoringWorlds ()
 
virtual void StoreRNGStatus (const G4String &filenamePrefix)
 
virtual void MergePartialResults ()
 
- Protected Member Functions inherited from G4RunManager
void StackPreviousEvent (G4Event *anEvent)
 
 G4RunManager (RMType rmType)
 
void UpdateScoring ()
 
virtual void DeleteUserInitializations ()
 

Protected Attributes

G4bool eventLoopOnGoing
 
G4int nevModulo
 
G4int currEvID
 
G4SeedsQueue seedsQueue
 
- Protected Attributes inherited from G4RunManager
G4RunManagerKernelkernel
 
G4EventManagereventManager
 
G4VUserDetectorConstructionuserDetector
 
G4VUserPhysicsListphysicsList
 
G4VUserActionInitializationuserActionInitialization
 
G4UserWorkerInitializationuserWorkerInitialization
 
G4UserWorkerThreadInitializationuserWorkerThreadInitialization
 
G4UserRunActionuserRunAction
 
G4VUserPrimaryGeneratorActionuserPrimaryGeneratorAction
 
G4UserEventActionuserEventAction
 
G4UserStackingActionuserStackingAction
 
G4UserTrackingActionuserTrackingAction
 
G4UserSteppingActionuserSteppingAction
 
G4bool geometryInitialized
 
G4bool physicsInitialized
 
G4bool runAborted
 
G4bool initializedAtLeastOnce
 
G4bool geometryToBeOptimized
 
G4int runIDCounter
 
G4int verboseLevel
 
G4int printModulo
 
G4Timertimer
 
G4DCtableDCtable
 
G4RuncurrentRun
 
G4EventcurrentEvent
 
std::vector< G4Event * > * previousEvents
 
G4int n_perviousEventsToBeStored
 
G4int numberOfEventToBeProcessed
 
G4bool storeRandomNumberStatus
 
G4int storeRandomNumberStatusToG4Event
 
G4String randomNumberStatusDir
 
G4String randomNumberStatusForThisRun
 
G4String randomNumberStatusForThisEvent
 
G4bool rngStatusEventsFlag
 
G4VPhysicalVolumecurrentWorld
 
G4int nParallelWorlds
 
G4String msgText
 
G4int n_select_msg
 
G4int numberOfEventProcessed
 
G4String selectMacro
 
G4bool fakeRun
 
RMType runManagerType
 

Additional Inherited Members

- Public Types inherited from G4RunManager
enum  RMType { sequentialRM, masterRM, workerRM }
 

Detailed Description

Definition at line 47 of file G4WorkerRunManager.hh.

Constructor & Destructor Documentation

G4WorkerRunManager::G4WorkerRunManager ( )

Definition at line 56 of file G4WorkerRunManager.cc.

References currEvID, eventLoopOnGoing, FatalException, G4Exception(), G4VVisManager::GetConcreteInstance(), G4MTRunManager::GetMasterScoringManager(), G4ParticleTable::GetParticleTable(), G4ScoringManager::GetScoringManager(), G4UImanager::GetUIpointer(), nevModulo, G4UImanager::SetIgnoreCmdNotFound(), and G4ParticleTable::WorkerG4ParticleTable().

57  //This constructor should never be called in non-multithreaded mode
58 #ifndef G4MULTITHREADED
60  msg<<"Geant4 code is compiled without multi-threading support (-DG4MULTITHREADED is set to off).";
61  msg<<" This type of RunManager can only be used in mult-threaded applications.";
62  G4Exception("G4WorkerRunManager::G4WorkerRunManager()","Run0035",FatalException,msg);
63 #endif
66  if(masterScM) G4ScoringManager::GetScoringManager(); //TLS instance for a worker
67 
68  eventLoopOnGoing = false;
69  nevModulo = -1;
70  currEvID = -1;
71 
73 
74 #ifdef G4MULTITHREADED
76  if(pVVis)
77  {
78  pVVis->SetUpForAThread();
79  visIsSetUp = true;
80  }
81  else
82  { visIsSetUp = false; }
83 #endif
84 }
void WorkerG4ParticleTable()
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
static G4VVisManager * GetConcreteInstance()
void SetIgnoreCmdNotFound(G4bool val)
Definition: G4UImanager.hh:269
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:58
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4ScoringManager * GetMasterScoringManager()
static G4ParticleTable * GetParticleTable()
static G4ScoringManager * GetScoringManager()
G4WorkerRunManager::~G4WorkerRunManager ( )

Definition at line 88 of file G4WorkerRunManager.cc.

References G4cout, G4endl, G4RunManager::physicsList, G4VUserPhysicsList::RemoveProcessManager(), G4RunManager::userActionInitialization, G4RunManager::userDetector, G4RunManager::userWorkerInitialization, G4RunManager::userWorkerThreadInitialization, and G4RunManager::verboseLevel.

88  {
89  // Delete thread-local process manager objects
91 
92  //Put these pointers to zero: owned by master thread
93  //If not to zero, the base class destructor will attempt to
94  //delete them
95  userDetector = 0;
99  physicsList = 0;
100  if(verboseLevel>0) G4cout<<"Destroying WorkerRunManager ("<<this<<")"<<G4endl;
101 }
G4VUserPhysicsList * physicsList
G4VUserActionInitialization * userActionInitialization
G4UserWorkerThreadInitialization * userWorkerThreadInitialization
G4GLOB_DLL std::ostream G4cout
G4UserWorkerInitialization * userWorkerInitialization
#define G4endl
Definition: G4ios.hh:61
G4VUserDetectorConstruction * userDetector
G4int verboseLevel

Member Function Documentation

void G4WorkerRunManager::ConstructScoringWorlds ( )
protectedvirtual

Reimplemented from G4RunManager.

Reimplemented in tbbWorkerRunManager.

Definition at line 377 of file G4WorkerRunManager.cc.

References G4ProcessManager::AddProcess(), assert, FatalException, G4Exception(), G4ParticleTable::GetIterator(), G4MTRunManager::GetMasterScoringManager(), G4ScoringManager::GetMesh(), G4VScoringMesh::GetMeshElementLogical(), G4ScoringManager::GetNumberOfMesh(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetProcessManager(), G4ScoringManager::GetScoringManagerIfExist(), G4TransportationManager::GetTransportationManager(), G4ScoringManager::GetWorldName(), idxAlongStep, idxAtRest, idxPostStep, G4ParallelWorldProcess::IsAtRestRequired(), G4TransportationManager::IsWorldExisting(), G4RunManager::kernel, G4ParticleTableIterator< K, V >::reset(), G4VScoringMesh::SetMeshElementLogical(), G4ParallelWorldProcess::SetParallelWorld(), G4ProcessManager::SetProcessOrdering(), G4ProcessManager::SetProcessOrderingToSecond(), G4TemplateAutoLock< M, L, U >::unlock(), G4ParticleTableIterator< K, V >::value(), G4VScoringMesh::WorkerConstruct(), and G4RunManagerKernel::WorkerUpdateWorldVolume().

Referenced by tbbWorkerRunManager::ConstructScoringWorlds().

378 {
379  // Return if unnecessary
381  if(!ScM) return;
382  G4int nPar = ScM->GetNumberOfMesh();
383  if(nPar<1) return;
384 
385  // Update thread-local G4TransportationManager of all the world volumes
387 
389  assert( masterScM != NULL );
390 
393 
394  for(G4int iw=0;iw<nPar;iw++)
395  {
396  G4VScoringMesh* mesh = ScM->GetMesh(iw);
397  G4VPhysicalVolume* pWorld
399  ->IsWorldExisting(ScM->GetWorldName(iw));
400  if(!pWorld)
401  {
403  ed<<"Mesh name <"<<ScM->GetWorldName(iw)<<"> is not found in the masther thread.";
404  G4Exception("G4WorkerRunManager::ConstructScoringWorlds()","RUN79001",
405  FatalException,ed);
406  }
407  if(!(mesh->GetMeshElementLogical()))
408  {
409  G4AutoLock l(&ConstructScoringWorldsMutex);
410  G4VScoringMesh* masterMesh = masterScM->GetMesh(iw);
411  mesh->SetMeshElementLogical(masterMesh->GetMeshElementLogical());
412  l.unlock();
413 
414  G4ParallelWorldProcess* theParallelWorldProcess
415  = new G4ParallelWorldProcess(ScM->GetWorldName(iw));
416  theParallelWorldProcess->SetParallelWorld(ScM->GetWorldName(iw));
417 
418  particleIterator->reset();
419  while( (*particleIterator)() ){
420  G4ParticleDefinition* particle = particleIterator->value();
421  G4ProcessManager* pmanager = particle->GetProcessManager();
422  if(pmanager)
423  {
424  pmanager->AddProcess(theParallelWorldProcess);
425  if(theParallelWorldProcess->IsAtRestRequired(particle))
426  { pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9999); }
427  pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, idxAlongStep);
428  pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9999);
429  } //if(pmanager)
430  }//while
431  }
432  mesh->WorkerConstruct(pWorld);
433  }
434 }
G4VPhysicalVolume * IsWorldExisting(const G4String &worldName)
G4String GetWorldName(G4int i) const
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
void SetProcessOrderingToSecond(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
void SetMeshElementLogical(G4LogicalVolume *val)
G4bool IsAtRestRequired(G4ParticleDefinition *)
#define assert(x)
Definition: mymalloc.cc:1309
virtual void WorkerConstruct(G4VPhysicalVolume *fWorldPhys)
G4ProcessManager * GetProcessManager() const
int G4int
Definition: G4Types.hh:78
void SetParallelWorld(G4String parallelWorldName)
void reset(G4bool ifSkipIon=true)
static G4ScoringManager * GetScoringManagerIfExist()
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
void SetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt, G4int ordDoIt=ordDefault)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
static G4TransportationManager * GetTransportationManager()
static G4ScoringManager * GetMasterScoringManager()
static G4ParticleTable * GetParticleTable()
G4LogicalVolume * GetMeshElementLogical() const
std::vector< G4InuclElementaryParticle >::iterator particleIterator
Definition: G4BigBanger.cc:64
G4RunManagerKernel * kernel
size_t GetNumberOfMesh() const
G4VScoringMesh * GetMesh(G4int i) const
G4PTblDicIterator * GetIterator() const
void G4WorkerRunManager::DoEventLoop ( G4int  n_event,
const char *  macroFile = 0,
G4int  n_select = -1 
)
virtual

Reimplemented from G4RunManager.

Definition at line 193 of file G4WorkerRunManager.cc.

References currEvID, eventLoopOnGoing, FatalException, G4Exception(), G4RunManager::InitializeEventLoop(), nevModulo, ProcessOneEvent(), G4RunManager::runAborted, seedsQueue, G4RunManager::TerminateEventLoop(), G4RunManager::TerminateOneEvent(), and G4RunManager::userPrimaryGeneratorAction.

194 {
196  {
197  G4Exception("G4RunManager::GenerateEvent()", "Run0032", FatalException,
198  "G4VUserPrimaryGeneratorAction is not defined!");
199  }
200 
201  //This is the same as in the sequential case, just the for-loop indexes are
202  //different
203  InitializeEventLoop(n_event,macroFile,n_select);
204 
205  // Reset random number seeds queue
206  while(seedsQueue.size()>0)
207  { seedsQueue.pop(); }
208 
209  // Event loop
210  eventLoopOnGoing = true;
211 /////// G4int i_event = workerContext->GetThreadId();
212  G4int i_event = -1;
213  nevModulo = -1;
214  currEvID = -1;
215 
216  while(eventLoopOnGoing)
217  {
218  ProcessOneEvent(i_event);
219  if(eventLoopOnGoing)
220  {
222  if(runAborted)
223  { eventLoopOnGoing = false; }
224 ////// else
225 ////// {
226 ////// i_event += workerContext->GetNumberThreads();
227 ////// eventLoopOnGoing = i_event<n_event;
228 ////// }
229  }
230  }
231 
233 }
virtual void TerminateEventLoop()
int G4int
Definition: G4Types.hh:78
G4bool runAborted
G4VUserPrimaryGeneratorAction * userPrimaryGeneratorAction
virtual void ProcessOneEvent(G4int i_event)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
virtual void InitializeEventLoop(G4int n_event, const char *macroFile=0, G4int n_select=-1)
virtual void TerminateOneEvent()
G4Event * G4WorkerRunManager::GenerateEvent ( G4int  i_event)
virtual

Reimplemented from G4RunManager.

Definition at line 247 of file G4WorkerRunManager.cc.

References G4RunManager::currentRun, currEvID, eventLoopOnGoing, G4cout, G4endl, G4VUserPrimaryGeneratorAction::GeneratePrimaries(), G4Event::GetEventID(), G4MTRunManager::GetEventModulo(), G4TemplateRNGHelper< T >::GetInstance(), G4MTRunManager::GetMasterRunManager(), G4Run::GetRunID(), G4TemplateRNGHelper< T >::GetSeed(), nevModulo, G4RunManager::printModulo, G4RunManager::randomNumberStatusForThisEvent, G4RunManager::rngStatusEventsFlag, seedsQueue, G4Event::SetEventID(), G4Event::SetRandomNumberStatus(), G4MTRunManager::SetUpAnEvent(), G4MTRunManager::SetUpNEvents(), G4RunManager::storeRandomNumberStatus, G4RunManager::storeRandomNumberStatusToG4Event, StoreRNGStatus(), and G4RunManager::userPrimaryGeneratorAction.

Referenced by ProcessOneEvent().

248 {
249  G4Event* anEvent = new G4Event(i_event);
250  long s1, s2;
251  long s3 = 0;
252 
253  if(i_event<0)
254  {
256  if(nevM==1)
257  {
259  ->SetUpAnEvent(anEvent,s1,s2,s3);
260  }
261  else
262  {
263  if(nevModulo<=0)
264  {
266  ->SetUpNEvents(anEvent,&seedsQueue);
267  if(nevToDo==0)
268  { eventLoopOnGoing = false; }
269  else
270  {
271  currEvID = anEvent->GetEventID();
272  nevModulo = nevToDo - 1;
273  }
274  }
275  else
276  {
277  anEvent->SetEventID(++currEvID);
278  nevModulo--;
279  }
280  if(eventLoopOnGoing)
281  {
282  s1 = seedsQueue.front(); seedsQueue.pop();
283  s2 = seedsQueue.front(); seedsQueue.pop();
284  }
285  }
286 
287  if(!eventLoopOnGoing)
288  {
289  delete anEvent;
290  return 0;
291  }
292  }
293  else
294  {
295  //Need to reseed random number generator
297  s1 = helper->GetSeed(i_event*2);
298  s2 = helper->GetSeed(i_event*2+1);
299  }
300 
301  long seeds[3] = { s1, s2, 0 };
302  G4Random::setTheSeeds(seeds,-1);
303 
305  {
306  std::ostringstream oss;
307  G4Random::saveFullState(oss);
308  randomNumberStatusForThisEvent = oss.str();
310  }
311 
313  G4String fileN = "currentEvent";
314  if ( rngStatusEventsFlag ) {
315  std::ostringstream os;
316  os << "run" << currentRun->GetRunID() << "evt" << anEvent->GetEventID();
317  fileN = os.str();
318  }
319  StoreRNGStatus(fileN);
320  }
321 
322  if(printModulo > 0 && anEvent->GetEventID()%printModulo == 0 )
323  {
324  G4cout << "--> Event " << anEvent->GetEventID() << " starts with initial seeds ("
325  << s1 << "," << s2 << ")." << G4endl;
326  }
328  return anEvent;
329 }
static G4TemplateRNGHelper * GetInstance()
Definition: G4RNGHelper.hh:52
virtual G4bool SetUpAnEvent(G4Event *, long &s1, long &s2, long &s3)
G4String randomNumberStatusForThisEvent
G4bool storeRandomNumberStatus
virtual const T GetSeed(const G4int &sdId)
Definition: G4RNGHelper.hh:77
int G4int
Definition: G4Types.hh:78
G4int GetEventID() const
Definition: G4Event.hh:140
G4VUserPrimaryGeneratorAction * userPrimaryGeneratorAction
G4GLOB_DLL std::ostream G4cout
G4bool rngStatusEventsFlag
virtual G4int SetUpNEvents(G4Event *, G4SeedsQueue *seedsQueue)
static G4MTRunManager * GetMasterRunManager()
G4int storeRandomNumberStatusToG4Event
G4int GetRunID() const
Definition: G4Run.hh:76
void SetRandomNumberStatus(G4String &st)
Definition: G4Event.hh:124
virtual void GeneratePrimaries(G4Event *anEvent)=0
G4int GetEventModulo() const
G4Run * currentRun
#define G4endl
Definition: G4ios.hh:61
void SetEventID(G4int i)
Definition: G4Event.hh:114
virtual void StoreRNGStatus(const G4String &filenamePrefix)
G4WorkerRunManager * G4WorkerRunManager::GetWorkerRunManager ( )
static
G4WorkerRunManagerKernel * G4WorkerRunManager::GetWorkerRunManagerKernel ( )
static

Definition at line 53 of file G4WorkerRunManager.cc.

References GetWorkerRunManager(), and G4RunManager::kernel.

54 { return static_cast<G4WorkerRunManagerKernel*>(GetWorkerRunManager()->kernel); }
static G4WorkerRunManager * GetWorkerRunManager()
G4RunManagerKernel * kernel
void G4WorkerRunManager::InitializeGeometry ( )
virtual

Reimplemented from G4RunManager.

Definition at line 104 of file G4WorkerRunManager.cc.

References G4VUserDetectorConstruction::ConstructParallelSD(), G4VUserDetectorConstruction::ConstructSDandField(), FatalException, G4Exception(), G4RunManager::geometryInitialized, G4RunManagerKernel::GetCurrentWorld(), G4MTRunManager::GetMasterRunManagerKernel(), G4RunManagerKernel::GetNumberOfParallelWorld(), G4RunManager::kernel, G4RunManagerKernel::SetNumberOfParallelWorld(), G4RunManager::userDetector, and G4RunManagerKernel::WorkerDefineWorldVolume().

104  {
105  if(!userDetector)
106  {
107  G4Exception("G4RunManager::InitializeGeometry", "Run0033",
108  FatalException, "G4VUserDetectorConstruction is not defined!");
109  return;
110  }
111  //Step1: Get pointer to the physiWorld (note: needs to get the "super pointer, i.e. the one shared by all threads"
113  G4VPhysicalVolume* worldVol = masterKernel->GetCurrentWorld();
114  //Step2:, Call a new "WorkerDefineWorldVolume( pointer from 2-, false);
115  kernel->WorkerDefineWorldVolume(worldVol,false);
117  //Step3: Call user's ConstructSDandField()
120  geometryInitialized = true;
121 }
G4int GetNumberOfParallelWorld() const
void SetNumberOfParallelWorld(G4int i)
void WorkerDefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
G4bool geometryInitialized
static G4RunManagerKernel * GetMasterRunManagerKernel()
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
G4RunManagerKernel * kernel
G4VUserDetectorConstruction * userDetector
G4VPhysicalVolume * GetCurrentWorld() const
void G4WorkerRunManager::MergePartialResults ( )
protectedvirtual

Reimplemented in tbbWorkerRunManager.

Definition at line 331 of file G4WorkerRunManager.cc.

References G4RunManager::currentRun, G4MTRunManager::GetMasterRunManager(), G4ScoringManager::GetScoringManagerIfExist(), G4MTRunManager::MergeRun(), and G4MTRunManager::MergeScores().

Referenced by RunTermination().

332 {
333  //Merge partial results into global run
336  if(ScM) mtRM->MergeScores(ScM);
337  mtRM->MergeRun(currentRun);
338 }
void MergeRun(const G4Run *localRun)
static G4ScoringManager * GetScoringManagerIfExist()
static G4MTRunManager * GetMasterRunManager()
G4Run * currentRun
void MergeScores(const G4ScoringManager *localScoringManager)
void G4WorkerRunManager::ProcessOneEvent ( G4int  i_event)
virtual

Reimplemented from G4RunManager.

Definition at line 235 of file G4WorkerRunManager.cc.

References G4RunManager::AnalyzeEvent(), G4UImanager::ApplyCommand(), G4RunManager::currentEvent, eventLoopOnGoing, G4RunManager::eventManager, GenerateEvent(), G4Event::GetEventID(), G4UImanager::GetUIpointer(), G4RunManager::msgText, G4RunManager::n_select_msg, G4EventManager::ProcessOneEvent(), and G4RunManager::UpdateScoring().

Referenced by DoEventLoop().

236 {
237  currentEvent = GenerateEvent(i_event);
238  if(eventLoopOnGoing)
239  {
242  UpdateScoring();
244  }
245 }
G4int n_select_msg
G4String msgText
G4Event * currentEvent
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:58
G4int GetEventID() const
Definition: G4Event.hh:140
virtual void AnalyzeEvent(G4Event *anEvent)
virtual G4Event * GenerateEvent(G4int i_event)
void ProcessOneEvent(G4Event *anEvent)
G4EventManager * eventManager
void UpdateScoring()
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:419
void G4WorkerRunManager::RunInitialization ( )
virtual

Reimplemented from G4RunManager.

Definition at line 123 of file G4WorkerRunManager.cc.

References G4UserRunAction::BeginOfRunAction(), G4RunManager::currentRun, G4RunManager::DCtable, G4RunManager::fakeRun, G4cout, G4endl, G4Threading::G4GetThreadId(), G4UserRunAction::GenerateRun(), G4VVisManager::GetConcreteInstance(), G4SDManager::GetHCtable(), G4MTRunManager::GetMasterRunManager(), G4Run::GetRunID(), G4SDManager::GetSDMpointerIfExist(), G4RunManager::GetUserWorkerInitialization(), G4RunManager::kernel, G4RunManager::n_perviousEventsToBeStored, G4RunManager::numberOfEventProcessed, G4RunManager::numberOfEventToBeProcessed, G4RunManager::previousEvents, G4RunManager::printModulo, G4RunManager::randomNumberStatusForThisRun, G4RunManager::rngStatusEventsFlag, G4RunManager::runAborted, G4RunManager::runIDCounter, G4RunManagerKernel::RunInitialization(), G4Run::SetDCtable(), G4Run::SetHCtable(), G4Run::SetNumberOfEventToBeProcessed(), G4Run::SetRandomNumberStatus(), G4Run::SetRunID(), G4RunManager::storeRandomNumberStatus, StoreRNGStatus(), G4MTRunManager::ThisWorkerReady(), G4RunManager::userRunAction, G4RunManager::verboseLevel, and G4UserWorkerInitialization::WorkerRunStart().

124 {
125 #ifdef G4MULTITHREADED
126  if(!visIsSetUp)
127  {
129  if(pVVis)
130  {
131  pVVis->SetUpForAThread();
132  visIsSetUp = true;
133  }
134  }
135 #endif
136 
137  if(!(kernel->RunInitialization(fakeRun))) return;
138 
139  //Signal this thread can start event loop.
140  //Note this will return only when all threads reach this point
142  if(fakeRun) return;
143 
144  const G4UserWorkerInitialization* uwi
146  if(currentRun) delete currentRun;
147  currentRun = 0;
148 
149  //Call a user hook: this is guaranteed all threads are "synchronized"
150  if(uwi) uwi->WorkerRunStart();
151 
153  if(!currentRun) currentRun = new G4Run();
154 
157 
160  if(fSDM)
161  { currentRun->SetHCtable(fSDM->GetHCtable()); }
162 
163  std::ostringstream oss;
164  G4Random::saveFullState(oss);
165  randomNumberStatusForThisRun = oss.str();
167 
168  previousEvents->clear();
169  for(G4int i_prev=0;i_prev<n_perviousEventsToBeStored;i_prev++)
170  { previousEvents->push_back((G4Event*)0); }
171 
172  if(printModulo>0 || verboseLevel>0)
173  {
174  G4cout << "### Run " << currentRun->GetRunID() << " starts on worker thread "
175  << G4Threading::G4GetThreadId() << "." << G4endl;
176  }
178 
180  G4String fileN = "currentRun";
181  if ( rngStatusEventsFlag ) {
182  std::ostringstream os;
183  os << "run" << currentRun->GetRunID();
184  fileN = os.str();
185  }
186  StoreRNGStatus(fileN);
187  }
188 
189  runAborted = false;
191 }
void SetNumberOfEventToBeProcessed(G4int n_ev)
Definition: G4Run.hh:97
G4int numberOfEventToBeProcessed
void SetDCtable(G4DCtable *DCtbl)
Definition: G4Run.hh:101
G4int numberOfEventProcessed
G4String randomNumberStatusForThisRun
static G4VVisManager * GetConcreteInstance()
G4bool storeRandomNumberStatus
const G4UserWorkerInitialization * GetUserWorkerInitialization() const
int G4int
Definition: G4Types.hh:78
G4bool runAborted
G4bool RunInitialization(G4bool fakeRun=false)
G4HCtable * GetHCtable() const
Definition: G4SDManager.hh:101
G4GLOB_DLL std::ostream G4cout
G4bool rngStatusEventsFlag
static G4MTRunManager * GetMasterRunManager()
G4int GetRunID() const
Definition: G4Run.hh:76
Definition: G4Run.hh:46
G4UserRunAction * userRunAction
void SetHCtable(G4HCtable *HCtbl)
Definition: G4Run.hh:99
G4int runIDCounter
virtual void ThisWorkerReady()
virtual void BeginOfRunAction(const G4Run *aRun)
G4Run * currentRun
#define G4endl
Definition: G4ios.hh:61
G4RunManagerKernel * kernel
void SetRunID(G4int id)
Definition: G4Run.hh:95
void SetRandomNumberStatus(G4String &st)
Definition: G4Run.hh:103
virtual G4Run * GenerateRun()
std::vector< G4Event * > * previousEvents
G4DCtable * DCtable
G4int n_perviousEventsToBeStored
G4int G4GetThreadId()
Definition: G4Threading.cc:103
G4int verboseLevel
static G4SDManager * GetSDMpointerIfExist()
Definition: G4SDManager.cc:49
virtual void StoreRNGStatus(const G4String &filenamePrefix)
void G4WorkerRunManager::RunTermination ( )
virtual

Reimplemented from G4RunManager.

Definition at line 340 of file G4WorkerRunManager.cc.

References G4RunManager::fakeRun, G4MTRunManager::GetMasterRunManager(), G4RunManager::GetUserWorkerInitialization(), MergePartialResults(), G4RunManager::RunTermination(), G4MTRunManager::ThisWorkerEndEventLoop(), and G4UserWorkerInitialization::WorkerRunEnd().

341 {
342  if(!fakeRun)
343  {
345 
346  //Call a user hook: note this is before the next barrier
347  //so threads execute this method asyncrhonouzly
348  //(TerminateRun allows for synch via G4RunAction::EndOfRun)
349  const G4UserWorkerInitialization* uwi
351  if(uwi) uwi->WorkerRunEnd();
352  }
353 
355  //Signal this thread has finished envent-loop.
356  //Note this will return only whan all threads reach this point
358 
359 }
virtual void RunTermination()
virtual void ThisWorkerEndEventLoop()
const G4UserWorkerInitialization * GetUserWorkerInitialization() const
static G4MTRunManager * GetMasterRunManager()
virtual void MergePartialResults()
void G4WorkerRunManager::SetUserAction ( G4UserRunAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 466 of file G4WorkerRunManager.cc.

References G4UserRunAction::SetMaster(), and G4RunManager::SetUserAction().

Referenced by G4RTWorkerInitialization::WorkerRunEnd(), and G4RTWorkerInitialization::WorkerRunStart().

467 {
468  G4RunManager::SetUserAction(userAction);
469  userAction->SetMaster(false);
470 }
void SetMaster(G4bool val=true)
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserAction ( G4VUserPrimaryGeneratorAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 488 of file G4WorkerRunManager.cc.

References G4RunManager::SetUserAction().

489 {
491 }
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserAction ( G4UserEventAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 483 of file G4WorkerRunManager.cc.

References G4RunManager::SetUserAction().

484 {
486 }
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserAction ( G4UserStackingAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 493 of file G4WorkerRunManager.cc.

References G4RunManager::SetUserAction().

494 {
496 }
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserAction ( G4UserTrackingAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 498 of file G4WorkerRunManager.cc.

References G4RunManager::SetUserAction().

499 {
501 }
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserAction ( G4UserSteppingAction userAction)
virtual

Reimplemented from G4RunManager.

Definition at line 503 of file G4WorkerRunManager.cc.

References G4RunManager::SetUserAction().

504 {
506 }
virtual void SetUserAction(G4UserRunAction *userAction)
void G4WorkerRunManager::SetUserInitialization ( G4VUserPhysicsList userInit)
virtual

Reimplemented from G4RunManager.

Definition at line 460 of file G4WorkerRunManager.cc.

References G4VUserPhysicsList::InitializeWorker(), and G4RunManager::SetUserInitialization().

Referenced by G4MTRunManagerKernel::StartThread().

461 {
462  pl->InitializeWorker();
464 }
virtual void SetUserInitialization(G4VUserDetectorConstruction *userInit)
tuple pl
Definition: readPY.py:5
void G4WorkerRunManager::SetUserInitialization ( G4VUserDetectorConstruction userInit)
virtual

Reimplemented from G4RunManager.

Definition at line 454 of file G4WorkerRunManager.cc.

References FatalException, and G4Exception().

455 {
456  G4Exception("G4RunManager::SetUserInitialization(G4VUserDetectorConstruction*)", "Run3021",
457  FatalException, "This method should be used only with an instance of G4MTRunManager");
458 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void G4WorkerRunManager::SetUserInitialization ( G4VUserActionInitialization userInit)
virtual

Reimplemented from G4RunManager.

Definition at line 448 of file G4WorkerRunManager.cc.

References FatalException, and G4Exception().

449 {
450  G4Exception("G4RunManager::SetUserInitialization(G4VUserActionInitialization*)", "Run3021",
451  FatalException, "This method should be used only with an instance of G4MTRunManager");
452 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void G4WorkerRunManager::SetUserInitialization ( G4UserWorkerInitialization userInit)
virtual

Reimplemented from G4RunManager.

Definition at line 436 of file G4WorkerRunManager.cc.

References FatalException, and G4Exception().

437 {
438  G4Exception("G4RunManager::SetUserInitialization(G4UserWorkerInitialization*)", "Run3021",
439  FatalException, "This method should be used only with an instance of G4MTRunManager");
440 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void G4WorkerRunManager::SetUserInitialization ( G4UserWorkerThreadInitialization userInit)
virtual

Reimplemented from G4RunManager.

Definition at line 442 of file G4WorkerRunManager.cc.

References FatalException, and G4Exception().

443 {
444  G4Exception("G4RunManager::SetUserInitialization(G4UserWorkerThreadInitialization*)", "Run3021",
445  FatalException, "This method should be used only with an instance of G4MTRunManager");
446 }
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
Definition: G4Exception.cc:41
void G4WorkerRunManager::SetWorkerThread ( G4WorkerThread wc)
inline

Sets the worker context.

Definition at line 74 of file G4WorkerRunManager.hh.

Referenced by G4MTRunManagerKernel::StartThread().

74 { workerContext = wc; }
void G4WorkerRunManager::StoreRNGStatus ( const G4String filenamePrefix)
protectedvirtual

Reimplemented from G4RunManager.

Definition at line 508 of file G4WorkerRunManager.cc.

References G4WorkerThread::GetThreadId(), and G4RunManager::randomNumberStatusDir.

Referenced by GenerateEvent(), and RunInitialization().

509 {
510  std::ostringstream os;
511  os << randomNumberStatusDir << "G4Worker"<<workerContext->GetThreadId()<<"_"<<fn <<".rndm";
512  G4Random::saveEngineStatus(os.str().c_str());
513 }
G4String randomNumberStatusDir
G4int GetThreadId() const

Field Documentation

G4int G4WorkerRunManager::currEvID
protected

Definition at line 95 of file G4WorkerRunManager.hh.

Referenced by DoEventLoop(), G4WorkerRunManager(), and GenerateEvent().

G4bool G4WorkerRunManager::eventLoopOnGoing
protected
G4int G4WorkerRunManager::nevModulo
protected

Definition at line 94 of file G4WorkerRunManager.hh.

Referenced by DoEventLoop(), G4WorkerRunManager(), and GenerateEvent().

G4SeedsQueue G4WorkerRunManager::seedsQueue
protected

Definition at line 96 of file G4WorkerRunManager.hh.

Referenced by DoEventLoop(), and GenerateEvent().


The documentation for this class was generated from the following files: