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
G4MTRunManagerKernel.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// G4MTRunManagerKernel
27//
28// Class description:
29//
30// This is a class for mandatory control of the Geant4 kernel.
31// This class implements Worker behavior in a MT application.
32//
33// This class is constructed by G4MTRunManager. If a user uses his/her own
34// class instead of G4MTRunManager, this class must be instantiated by at the
35// very beginning of the application and must be deleted at the very end.
36// Also, the following methods must be invoked in the proper order:
37// DefineWorldVolume()
38// InitializePhysics()
39// RunInitialization()
40// RunTermination()
41//
42// User must provide his/her own classes derived from the following
43// abstract class and register it to the RunManagerKernel:
44// G4VUserPhysicsList - Particle types, Processes and Cuts
45//
46// G4MTRunManagerKernel does not have an event loop. Handling of events
47// is managed by G4RunManager.
48//
49// This class re-implements only the methods that require special treatment
50// to implement worker behavior
51
52// Author: M.Asai - July 2013
53// --------------------------------------------------------------------
54#ifndef G4MTRunManagerKernel_hh
55#define G4MTRunManagerKernel_hh 1
56
57#include <vector>
58
59#include "G4MTRunManager.hh"
60#include "G4RunManagerKernel.hh"
61#include "G4Threading.hh"
62
63class G4WorkerThread;
65
67{
68 public:
69
71 virtual ~G4MTRunManagerKernel();
72
73 static void StartThread(G4WorkerThread* context);
74 // Used to start a worker thread. Virtual methods to be invoked
75 // from this method are defined in G4UserWorkerInitialization class.
76
78
79 void SetUpDecayChannels();
80 // Fill decay tables with particle definition pointers of decay products.
81 // This method has to be invoked by G4MTRunManager before the event loop
82 // starts on workers.
83
84 void BroadcastAbortRun(G4bool softAbort);
85 // This method should be invoked by G4MTRunManager.
86
87 protected:
88
89 void SetupShadowProcess() const;
90
91 private:
92
93 static G4ThreadLocal G4WorkerThread* wThreadContext;
94
95 static std::vector<G4WorkerRunManager*>* workerRMvector;
96};
97
98#endif // G4MTRunManagerKernel_hh
bool G4bool
Definition: G4Types.hh:86
void BroadcastAbortRun(G4bool softAbort)
static G4WorkerThread * GetWorkerThread()
static void StartThread(G4WorkerThread *context)
#define G4ThreadLocal
Definition: tls.hh:77