ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4UserWorkerThreadInitialization.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4UserWorkerThreadInitialization.hh
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 // class description:
27 //
28 // This class is used for multi-threaded Geant4.
29 // It encapsulates the mechanism of starting/stopping threads.
30 
31 #ifndef G4UserWorkerThreadInitialization_hh
32 #define G4UserWorkerThreadInitialization_hh
33 
35 class G4UserRunAction;
36 class G4UserEventAction;
40 
41 class G4WorkerThread;
42 class G4WorkerRunManager;
43 
44 #include "G4Threading.hh"
45 #include "Randomize.hh"
46 
48 public: // with description
51 
52  virtual G4Thread* CreateAndStartWorker(G4WorkerThread* workerThreadContext);
53  // Called by the kernel to create a new thread/worker
54  // and start work.
55  // Usere should not re-implement this function (in derived class), except only if he/she
56  // wants to verwrite the default threading model (see StartThread function)
57 
58  virtual void SetupRNGEngine(const CLHEP::HepRandomEngine* aRNGEngine) const;
59  // Called by worker threads to set the Random Number Generator Engine
60  // The default implementation "clones" the engine from the master thread
61  // User needs to re-implement this method if using a non-standard
62  // RNG Engine (i.e. a different one w.r.t. the one provided in the CLHEP
63  // version supported by G4.
64  // Important: this method is called by all threads at the same time
65  // if is user responsibilitiy to make it thread-safe
66 
67  virtual void JoinWorker(G4Thread* aThread);
68  // Called by the kernel when threads need to be terminated. Implements logic of
69  // joining the aThread. Calling thread will wait for aThread to end.
70  // Usere should not re-implement this function (in derived class), except only if he/she
71  // wants to verwrite the default threading model (see StartThread function)
72 
74  // Called by StartThread function to create a run-manager implementing worker behvior.
75  // User should re-implemtn this function in derived class to instantiate his/her
76  // user-defined WorkerRunManager.
77  // By default this method instantiates G4WorkerRunManager object.
78 
79 };
80 
81 #endif //G4UserWorkerThreadInitialization_hh
82