Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4VModularPhysicsList Class Reference

#include <G4VModularPhysicsList.hh>

Inheritance diagram for G4VModularPhysicsList:

Public Member Functions

 G4VModularPhysicsList ()
 ~G4VModularPhysicsList () override
void ConstructParticle () override
void ConstructProcess () override
void RegisterPhysics (G4VPhysicsConstructor *)
const G4VPhysicsConstructorGetPhysics (G4int index) const
const G4VPhysicsConstructorGetPhysics (const G4String &name) const
const G4VPhysicsConstructorGetPhysicsWithType (G4int physics_type) const
void ReplacePhysics (G4VPhysicsConstructor *)
void RemovePhysics (G4VPhysicsConstructor *)
void RemovePhysics (G4int type)
void RemovePhysics (const G4String &name)
G4int GetInstanceID () const
void TerminateWorker () override
void SetVerboseLevel (G4int value)
G4int GetVerboseLevel () const
Public Member Functions inherited from G4VUserPhysicsList
 G4VUserPhysicsList ()
virtual ~G4VUserPhysicsList ()
 G4VUserPhysicsList (const G4VUserPhysicsList &)
G4VUserPhysicsListoperator= (const G4VUserPhysicsList &)
void Construct ()
virtual void SetCuts ()
void SetDefaultCutValue (G4double newCutValue)
G4double GetDefaultCutValue () const
void BuildPhysicsTable ()
void PreparePhysicsTable (G4ParticleDefinition *)
void BuildPhysicsTable (G4ParticleDefinition *)
G4bool StorePhysicsTable (const G4String &directory=".")
G4bool IsPhysicsTableRetrieved () const
G4bool IsStoredInAscii () const
const G4StringGetPhysicsTableDirectory () const
void SetPhysicsTableRetrieved (const G4String &directory="")
void SetStoredInAscii ()
void ResetPhysicsTableRetrieved ()
void ResetStoredInAscii ()
void DumpList () const
void DumpCutValuesTable (G4int flag=1)
void DumpCutValuesTableIfRequested ()
void SetVerboseLevel (G4int value)
G4int GetVerboseLevel () const
void UseCoupledTransportation (G4bool vl=true)
void SetCutsWithDefault ()
void SetCutValue (G4double aCut, const G4String &pname)
G4double GetCutValue (const G4String &pname) const
void SetCutValue (G4double aCut, const G4String &pname, const G4String &rname)
void SetParticleCuts (G4double cut, G4ParticleDefinition *particle, G4Region *region=nullptr)
void SetParticleCuts (G4double cut, const G4String &particleName, G4Region *region=nullptr)
void SetCutsForRegion (G4double aCut, const G4String &rname)
void SetApplyCuts (G4bool value, const G4String &name)
G4bool GetApplyCuts (const G4String &name) const
void RemoveProcessManager ()
void RemoveTrackingManager ()
void AddProcessManager (G4ParticleDefinition *newParticle, G4ProcessManager *newManager=nullptr)
void CheckParticleList ()
void DisableCheckParticleList ()
G4int GetInstanceID () const
virtual void InitializeWorker ()

Static Public Member Functions

static const G4VMPLManagerGetSubInstanceManager ()
Static Public Member Functions inherited from G4VUserPhysicsList
static const G4VUPLManagerGetSubInstanceManager ()

Protected Types

using G4PhysConstVector = G4VMPLData::G4PhysConstVectorData

Protected Member Functions

 G4VModularPhysicsList (const G4VModularPhysicsList &)
G4VModularPhysicsListoperator= (const G4VModularPhysicsList &)
Protected Member Functions inherited from G4VUserPhysicsList
void AddTransportation ()
G4bool RegisterProcess (G4VProcess *process, G4ParticleDefinition *particle)
void BuildIntegralPhysicsTable (G4VProcess *, G4ParticleDefinition *)
virtual void RetrievePhysicsTable (G4ParticleDefinition *, const G4String &directory, G4bool ascii=false)
void InitializeProcessManager ()
G4ParticleTable::G4PTblDicIteratorGetParticleIterator () const

Protected Attributes

G4int verboseLevel = 0
G4int g4vmplInstanceID = 0
Protected Attributes inherited from G4VUserPhysicsList
G4ParticleTabletheParticleTable = nullptr
G4int verboseLevel = 1
G4double defaultCutValue = 1.0
G4bool isSetDefaultCutValue = false
G4ProductionCutsTablefCutsTable = nullptr
G4bool fRetrievePhysicsTable = false
G4bool fStoredInAscii = true
G4bool fIsCheckedForRetrievePhysicsTable = false
G4bool fIsRestoredCutValues = false
G4String directoryPhysicsTable = "."
G4bool fDisableCheckParticleList = false
G4int g4vuplInstanceID = 0

Static Protected Attributes

static G4RUN_DLL G4VMPLManager G4VMPLsubInstanceManager
Static Protected Attributes inherited from G4VUserPhysicsList
static G4RUN_DLL G4VUPLManager subInstanceManager

Detailed Description

Definition at line 85 of file G4VModularPhysicsList.hh.

Member Typedef Documentation

◆ G4PhysConstVector

Constructor & Destructor Documentation

◆ G4VModularPhysicsList() [1/2]

G4VModularPhysicsList::G4VModularPhysicsList ( )

Definition at line 50 of file G4VModularPhysicsList.cc.

51{
52 g4vmplInstanceID = G4VMPLsubInstanceManager.CreateSubInstance();
53}
static G4RUN_DLL G4VMPLManager G4VMPLsubInstanceManager

Referenced by G4VModularPhysicsList(), and operator=().

◆ ~G4VModularPhysicsList()

G4VModularPhysicsList::~G4VModularPhysicsList ( )
override

Definition at line 56 of file G4VModularPhysicsList.cc.

57{
58 if (G4MT_physicsVector != nullptr) {
59 for (auto& ptr : *G4MT_physicsVector) {
60 delete ptr;
61 }
62 delete G4MT_physicsVector;
63 G4MT_physicsVector = nullptr;
64 }
65}
#define G4MT_physicsVector

◆ G4VModularPhysicsList() [2/2]

G4VModularPhysicsList::G4VModularPhysicsList ( const G4VModularPhysicsList & right)
protected

Definition at line 68 of file G4VModularPhysicsList.cc.

69 : G4VUserPhysicsList(right)
70{
71 g4vmplInstanceID = G4VMPLsubInstanceManager.CreateSubInstance();
72 G4MT_physicsVector = nullptr;
73}

Member Function Documentation

◆ ConstructParticle()

void G4VModularPhysicsList::ConstructParticle ( )
overridevirtual

Implements G4VUserPhysicsList.

Reimplemented in LBE.

Definition at line 112 of file G4VModularPhysicsList.cc.

113{
114 // create particles
115 for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend(); ++itr) {
116 (*itr)->ConstructParticle();
117 }
118}

◆ ConstructProcess()

void G4VModularPhysicsList::ConstructProcess ( )
overridevirtual

Implements G4VUserPhysicsList.

Reimplemented in LBE.

Definition at line 134 of file G4VModularPhysicsList.cc.

135{
136 G4AutoLock l(&constructProcessMutex); // Protection to be removed (A.Dotti)
138
139 for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend(); ++itr) {
140 (*itr)->ConstructProcess();
141 }
142}
G4TemplateAutoLock< G4Mutex > G4AutoLock

◆ GetInstanceID()

G4int G4VModularPhysicsList::GetInstanceID ( ) const
inline

Definition at line 150 of file G4VModularPhysicsList.hh.

151{
152 return g4vmplInstanceID;
153}

Referenced by operator=().

◆ GetPhysics() [1/2]

const G4VPhysicsConstructor * G4VModularPhysicsList::GetPhysics ( const G4String & name) const

Definition at line 347 of file G4VModularPhysicsList.cc.

348{
349 auto itr = G4MT_physicsVector->cbegin();
350 for (; itr != G4MT_physicsVector->cend(); ++itr) {
351 if (name == (*itr)->GetPhysicsName()) break;
352 }
353 if (itr != G4MT_physicsVector->cend()) return (*itr);
354 return nullptr;
355}

◆ GetPhysics() [2/2]

const G4VPhysicsConstructor * G4VModularPhysicsList::GetPhysics ( G4int index) const

Definition at line 337 of file G4VModularPhysicsList.cc.

338{
339 auto itr = G4MT_physicsVector->cbegin();
340 for (G4int i = 0; i < idx && itr != G4MT_physicsVector->cend(); ++i)
341 ++itr;
342 if (itr != G4MT_physicsVector->cend()) return (*itr);
343 return nullptr;
344}
int G4int
Definition G4Types.hh:85

◆ GetPhysicsWithType()

const G4VPhysicsConstructor * G4VModularPhysicsList::GetPhysicsWithType ( G4int physics_type) const

Definition at line 358 of file G4VModularPhysicsList.cc.

359{
360 auto itr = G4MT_physicsVector->cbegin();
361 for (; itr != G4MT_physicsVector->cend(); ++itr) {
362 if (pType == (*itr)->GetPhysicsType()) break;
363 }
364 if (itr != G4MT_physicsVector->cend()) return (*itr);
365 return nullptr;
366}

◆ GetSubInstanceManager()

const G4VMPLManager & G4VModularPhysicsList::GetSubInstanceManager ( )
inlinestatic

Definition at line 155 of file G4VModularPhysicsList.hh.

156{
158}

Referenced by G4PhysicsListWorkspace::G4PhysicsListWorkspace(), and operator=().

◆ GetVerboseLevel()

G4int G4VModularPhysicsList::GetVerboseLevel ( ) const
inline

Definition at line 145 of file G4VModularPhysicsList.hh.

146{
147 return verboseLevel;
148}

Referenced by G4PhysListRegistry::GetModularPhysicsList().

◆ operator=()

G4VModularPhysicsList & G4VModularPhysicsList::operator= ( const G4VModularPhysicsList & right)
protected

Definition at line 76 of file G4VModularPhysicsList.cc.

77{
78 if (this != &right) {
86 (this->subInstanceManager.offset[this->g4vuplInstanceID])._fDisplayThreshold =
87 static_cast<const G4VUserPhysicsList&>(right)
88 .GetSubInstanceManager()
89 .offset[right.GetInstanceID()]
90 ._fDisplayThreshold;
91 (this->subInstanceManager.offset[this->g4vuplInstanceID])._fDisplayThreshold =
92 static_cast<G4int>(static_cast<const G4VUserPhysicsList&>(right)
94 .offset[right.GetInstanceID()]
95 ._fIsPhysicsTableBuilt);
98
99 if (G4MT_physicsVector != nullptr) {
100 for (auto& ptr : *G4MT_physicsVector) {
101 delete ptr;
102 }
103 delete G4MT_physicsVector;
104 G4MT_physicsVector = nullptr;
105 }
106 g4vmplInstanceID = G4VMPLsubInstanceManager.CreateSubInstance();
107 }
108 return *this;
109}
G4ThreadLocal T * G4GeomSplitter< T >::offset
static const G4VMPLManager & GetSubInstanceManager()
static G4RUN_DLL G4VUPLManager subInstanceManager

◆ RegisterPhysics()

void G4VModularPhysicsList::RegisterPhysics ( G4VPhysicsConstructor * fPhysics)

Definition at line 145 of file G4VModularPhysicsList.cc.

146{
147 G4StateManager* stateManager = G4StateManager::GetStateManager();
148 G4ApplicationState currentState = stateManager->GetCurrentState();
149 if (!(currentState == G4State_PreInit)) {
150 G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0201", JustWarning,
151 "Geant4 kernel is not PreInit state : Method ignored.");
152 return;
153 }
154
155 G4String pName = fPhysics->GetPhysicsName();
156 G4int pType = fPhysics->GetPhysicsType();
157 // If physics_type is equal to 0,
158 // following duplication check is omitted
159 // This is TEMPORAL treatment.
160 if (pType == 0) {
161 G4MT_physicsVector->push_back(fPhysics);
162#ifdef G4VERBOSE
163 if (verboseLevel > 1) {
164 G4cout << "G4VModularPhysicsList::RegisterPhysics: " << pName << " with type : " << pType
165 << " is added" << G4endl;
166 }
167#endif
168 return;
169 }
170
171 // Check if physics with the physics_type same as one of given physics
172 auto itr = G4MT_physicsVector->cbegin();
173 for (; itr != G4MT_physicsVector->cend(); ++itr) {
174 if (pType == (*itr)->GetPhysicsType()) break;
175 }
176 if (itr != G4MT_physicsVector->cend()) {
177#ifdef G4VERBOSE
178 if (verboseLevel > 0) {
179 G4cout << "G4VModularPhysicsList::RegisterPhysics: "
180 << "a physics with given type already exists " << G4endl;
181 G4cout << " Type = " << pType << " : "
182 << " existing physics is " << (*itr)->GetPhysicsName() << G4endl;
183 G4cout << " New " << pName << " can not be registered " << G4endl;
184 }
185#endif
186 G4String comment = "Duplicate type for ";
187 comment += pName;
188 G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0202", JustWarning, comment);
189 return;
190 }
191
192 // register
193 G4MT_physicsVector->push_back(fPhysics);
194}
G4ApplicationState
@ G4State_PreInit
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
const G4ApplicationState & GetCurrentState() const
static G4StateManager * GetStateManager()
const G4String & GetPhysicsName() const

Referenced by FTF_BIC::FTF_BIC(), FTFP_BERT::FTFP_BERT(), FTFP_BERT_ATL::FTFP_BERT_ATL(), FTFP_BERT_HP::FTFP_BERT_HP(), FTFP_BERT_TRV::FTFP_BERT_TRV(), FTFQGSP_BERT::FTFQGSP_BERT(), G4PhysListRegistry::GetModularPhysicsList(), G4PhysListFactory::GetReferencePhysList(), NuBeam::NuBeam(), QBBC::QBBC(), QBBC_ABLA::QBBC_ABLA(), QGS_BIC::QGS_BIC(), QGSP_BERT::QGSP_BERT(), QGSP_BERT_HP::QGSP_BERT_HP(), QGSP_BIC::QGSP_BIC(), QGSP_BIC_AllHP::QGSP_BIC_AllHP(), QGSP_BIC_HP::QGSP_BIC_HP(), QGSP_BIC_HPT::QGSP_BIC_HPT(), QGSP_FTFP_BERT::QGSP_FTFP_BERT(), and Shielding::Shielding().

◆ RemovePhysics() [1/3]

void G4VModularPhysicsList::RemovePhysics ( const G4String & name)

Definition at line 310 of file G4VModularPhysicsList.cc.

311{
312 G4StateManager* stateManager = G4StateManager::GetStateManager();
313 G4ApplicationState currentState = stateManager->GetCurrentState();
314 if (!(currentState == G4State_PreInit)) {
315 G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0206", JustWarning,
316 "Geant4 kernel is not PreInit state : Method ignored.");
317 return;
318 }
319
320 for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) {
321 G4String pName = (*itr)->GetPhysicsName();
322 if (name == pName) {
323#ifdef G4VERBOSE
324 if (verboseLevel > 0) {
325 G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl;
326 }
327#endif
328 G4MT_physicsVector->erase(itr);
329 break;
330 }
331
332 ++itr;
333 }
334}

◆ RemovePhysics() [2/3]

void G4VModularPhysicsList::RemovePhysics ( G4int type)

Definition at line 256 of file G4VModularPhysicsList.cc.

257{
258 G4StateManager* stateManager = G4StateManager::GetStateManager();
259 G4ApplicationState currentState = stateManager->GetCurrentState();
260 if (!(currentState == G4State_PreInit)) {
261 G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0204", JustWarning,
262 "Geant4 kernel is not PreInit state : Method ignored.");
263 return;
264 }
265
266 for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) {
267 if (pType == (*itr)->GetPhysicsType()) {
268 G4String pName = (*itr)->GetPhysicsName();
269#ifdef G4VERBOSE
270 if (verboseLevel > 0) {
271 G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl;
272 }
273#endif
274 G4MT_physicsVector->erase(itr);
275 break;
276 }
277
278 ++itr;
279 }
280}

◆ RemovePhysics() [3/3]

void G4VModularPhysicsList::RemovePhysics ( G4VPhysicsConstructor * fPhysics)

Definition at line 283 of file G4VModularPhysicsList.cc.

284{
285 G4StateManager* stateManager = G4StateManager::GetStateManager();
286 G4ApplicationState currentState = stateManager->GetCurrentState();
287 if (!(currentState == G4State_PreInit)) {
288 G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0205", JustWarning,
289 "Geant4 kernel is not PreInit state : Method ignored.");
290 return;
291 }
292
293 for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) {
294 if (fPhysics == (*itr)) {
295 G4String pName = (*itr)->GetPhysicsName();
296#ifdef G4VERBOSE
297 if (verboseLevel > 0) {
298 G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl;
299 }
300#endif
301 G4MT_physicsVector->erase(itr);
302 break;
303 }
304
305 ++itr;
306 }
307}

◆ ReplacePhysics()

void G4VModularPhysicsList::ReplacePhysics ( G4VPhysicsConstructor * fPhysics)

Definition at line 197 of file G4VModularPhysicsList.cc.

198{
199 G4StateManager* stateManager = G4StateManager::GetStateManager();
200 G4ApplicationState currentState = stateManager->GetCurrentState();
201 if (!(currentState == G4State_PreInit)) {
202 G4Exception("G4VModularPhysicsList::ReplacePhysics", "Run0203", JustWarning,
203 "Geant4 kernel is not PreInit state : Method ignored.");
204 return;
205 }
206
207 G4String pName = fPhysics->GetPhysicsName();
208 G4int pType = fPhysics->GetPhysicsType();
209 // If physics_type is equal to 0,
210 // duplication check is omitted and just added.
211 // This is TEMPORAL treatment.
212 if (pType == 0) {
213 // register
214 G4MT_physicsVector->push_back(fPhysics);
215#ifdef G4VERBOSE
216 if (verboseLevel > 0) {
217 G4cout << "G4VModularPhysicsList::ReplacePhysics: " << pName << " with type : " << pType
218 << " is added" << G4endl;
219 }
220#endif
221 return;
222 }
223
224 // Check if physics with the physics_type same as one of given physics
225 G4String pName0;
226 auto itr = G4MT_physicsVector->begin();
227 for (; itr != G4MT_physicsVector->end(); ++itr) {
228 if (pType == (*itr)->GetPhysicsType()) {
229 pName0 = (*itr)->GetPhysicsName();
230 break;
231 }
232 }
233 if (itr == G4MT_physicsVector->end()) {
234 // register new at the end of the vector
235 G4MT_physicsVector->push_back(fPhysics);
236 }
237 else {
238#ifdef G4VERBOSE
239 // it is not needed to print on replacement if the same physics configuration
240 // replaces the previous one - the previous will be silently deleted
241 if (verboseLevel > 0 && pName != pName0) {
242 G4cout << "G4VModularPhysicsList::ReplacePhysics: " << (*itr)->GetPhysicsName()
243 << " with type : " << pType << " is replaced with " << pName << G4endl;
244 }
245#endif
246
247 // delete exsiting one
248 delete (*itr);
249 // replace with given one
250 (*itr) = fPhysics;
251 }
252 return;
253}

Referenced by G4PhysListRegistry::GetModularPhysicsList(), and G4PhysListFactory::GetReferencePhysList().

◆ SetVerboseLevel()

◆ TerminateWorker()

void G4VModularPhysicsList::TerminateWorker ( )
overridevirtual

Reimplemented from G4VUserPhysicsList.

Definition at line 379 of file G4VModularPhysicsList.cc.

380{
381 // See https://jira-geant4.kek.jp/browse/DEV-284
382 std::for_each(G4MT_physicsVector->cbegin(), G4MT_physicsVector->cend(),
383 [](G4PhysConstVector::value_type el) { el->TerminateWorker(); });
385}
virtual void TerminateWorker()

Member Data Documentation

◆ g4vmplInstanceID

G4int G4VModularPhysicsList::g4vmplInstanceID = 0
protected

◆ G4VMPLsubInstanceManager

G4VMPLManager G4VModularPhysicsList::G4VMPLsubInstanceManager
staticprotected

◆ verboseLevel


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