Geant4
11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4UserTaskThreadInitialization.cc
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
27
#include "
G4UserTaskThreadInitialization.hh
"
28
29
#include "
G4AutoLock.hh
"
30
#include "
G4TaskRunManagerKernel.hh
"
31
#include "
G4UImanager.hh
"
32
#include "
G4VUserActionInitialization.hh
"
33
#include "
G4VUserPhysicsList.hh
"
34
#include "
G4WorkerRunManager.hh
"
35
#include "
G4WorkerTaskRunManager.hh
"
36
#include "
G4WorkerThread.hh
"
37
#include "
globals.hh
"
38
39
#include <sstream>
40
41
//============================================================================//
42
43
namespace
44
{
45
G4Mutex
rngCreateMutex;
46
}
47
48
//============================================================================//
49
50
G4Thread
*
G4UserTaskThreadInitialization::CreateAndStartWorker
(
G4WorkerThread
*)
51
{
52
// Note: this method is called by G4MTRunManager, here we are still sequential
53
// Create a new thread/worker structure
54
return
nullptr
;
55
}
56
57
//============================================================================//
58
59
// Avoid compilation warning in sequential
60
void
G4UserTaskThreadInitialization::JoinWorker
(
G4Thread
* aThread)
61
{
62
if
(aThread !=
nullptr
) {
63
G4THREADJOIN
(*aThread);
64
}
65
}
66
67
//============================================================================//
68
69
void
G4UserTaskThreadInitialization::SetupRNGEngine
(
const
CLHEP::HepRandomEngine
* aNewRNG)
const
70
{
71
G4AutoLock
l(&rngCreateMutex);
72
// No default available, let's create the instance of random stuff
73
// A Call to this just forces the creation to defaults
74
G4Random::getTheEngine();
75
// Poor man's solution to check which RNG Engine is used in master thread
76
CLHEP::HepRandomEngine
* retRNG =
nullptr
;
77
78
// Need to make these calls thread safe
79
if
(
dynamic_cast<
const
CLHEP::HepJamesRandom
*
>
(aNewRNG) !=
nullptr
)
80
retRNG =
new
CLHEP::HepJamesRandom
;
81
if
(
dynamic_cast<
const
CLHEP::MixMaxRng
*
>
(aNewRNG) !=
nullptr
) retRNG =
new
CLHEP::MixMaxRng
;
82
if
(
dynamic_cast<
const
CLHEP::RanecuEngine
*
>
(aNewRNG) !=
nullptr
)
83
retRNG =
new
CLHEP::RanecuEngine
;
84
if
(
dynamic_cast<
const
CLHEP::Ranlux64Engine
*
>
(aNewRNG) !=
nullptr
)
85
retRNG =
new
CLHEP::Ranlux64Engine
;
86
if
(
dynamic_cast<
const
CLHEP::RanluxppEngine
*
>
(aNewRNG) !=
nullptr
)
87
retRNG =
new
CLHEP::RanluxppEngine
;
88
if
(
dynamic_cast<
const
CLHEP::MTwistEngine
*
>
(aNewRNG) !=
nullptr
)
89
retRNG =
new
CLHEP::MTwistEngine
;
90
if
(
dynamic_cast<
const
CLHEP::DualRand
*
>
(aNewRNG) !=
nullptr
) retRNG =
new
CLHEP::DualRand
;
91
if
(
dynamic_cast<
const
CLHEP::RanluxEngine
*
>
(aNewRNG) !=
nullptr
)
92
retRNG =
new
CLHEP::RanluxEngine
;
93
if
(
dynamic_cast<
const
CLHEP::RanshiEngine
*
>
(aNewRNG) !=
nullptr
)
94
retRNG =
new
CLHEP::RanshiEngine
;
95
96
if
(retRNG !=
nullptr
)
97
G4Random::setTheEngine(retRNG);
98
else
{
99
// Does a new method, such as aNewRng->newEngine() exist to clone it ?
100
G4ExceptionDescription
msg;
101
msg <<
" Unknown type of RNG Engine - "
<<
G4endl
102
<<
" Can cope only with HepJamesRandom, MixMaxRng, Ranecu, Ranlux64,"
103
<<
" Ranlux++, MTwistEngine, DualRand, Ranlux or Ranshi."
<<
G4endl
104
<<
" Cannot clone this type of RNG engine, as required for this thread"
<<
G4endl
105
<<
" Aborting... "
<<
G4endl
;
106
G4Exception
(
"G4UserTaskInitializition::SetupRNGEngine()"
,
"Run0122"
,
FatalException
, msg);
107
}
108
}
109
110
//============================================================================//
111
112
G4WorkerRunManager
*
G4UserTaskThreadInitialization::CreateWorkerRunManager
()
const
113
{
114
return
new
G4WorkerTaskRunManager
();
115
}
116
117
//============================================================================//
G4AutoLock.hh
FatalException
@ FatalException
Definition
G4ExceptionSeverity.hh:67
G4Exception
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition
G4Exception.cc:59
G4ExceptionDescription
std::ostringstream G4ExceptionDescription
Definition
G4Exception.hh:40
G4TaskRunManagerKernel.hh
G4THREADJOIN
#define G4THREADJOIN(worker)
Definition
G4Threading.hh:243
G4Mutex
std::mutex G4Mutex
Definition
G4Threading.hh:81
G4UImanager.hh
G4UserTaskThreadInitialization.hh
G4VUserActionInitialization.hh
G4VUserPhysicsList.hh
G4WorkerRunManager.hh
G4WorkerTaskRunManager.hh
G4WorkerThread.hh
G4endl
#define G4endl
Definition
G4ios.hh:67
CLHEP::DualRand
Definition
DualRand.h:49
CLHEP::HepJamesRandom
Definition
JamesRandom.h:43
CLHEP::HepRandomEngine
Definition
RandomEngine.h:53
CLHEP::MTwistEngine
Definition
MTwistEngine.h:34
CLHEP::MixMaxRng
Definition
MixMaxRng.h:53
CLHEP::RanecuEngine
Definition
RanecuEngine.h:46
CLHEP::Ranlux64Engine
Definition
Ranlux64Engine.h:48
CLHEP::RanluxEngine
Definition
RanluxEngine.h:44
CLHEP::RanluxppEngine
Definition
RanluxppEngine.h:35
CLHEP::RanshiEngine
Definition
RanshiEngine.h:51
G4DummyThread
Definition
G4Threading.hh:200
G4TemplateAutoLock
Definition
G4AutoLock.hh:274
G4UserTaskThreadInitialization::CreateWorkerRunManager
G4WorkerRunManager * CreateWorkerRunManager() const override
Definition
G4UserTaskThreadInitialization.cc:112
G4UserTaskThreadInitialization::JoinWorker
void JoinWorker(G4Thread *aThread) override
Definition
G4UserTaskThreadInitialization.cc:60
G4UserTaskThreadInitialization::SetupRNGEngine
void SetupRNGEngine(const CLHEP::HepRandomEngine *aRNGEngine) const override
Definition
G4UserTaskThreadInitialization.cc:69
G4UserTaskThreadInitialization::CreateAndStartWorker
G4Thread * CreateAndStartWorker(G4WorkerThread *workerThreadContext) override
Definition
G4UserTaskThreadInitialization.cc:50
G4WorkerRunManager
Definition
G4WorkerRunManager.hh:49
G4WorkerTaskRunManager
Definition
G4WorkerTaskRunManager.hh:49
G4WorkerThread
Definition
G4WorkerThread.hh:43
globals.hh
geant4-v11.2.2
source
run
src
G4UserTaskThreadInitialization.cc
Generated by
1.12.0