49 : theParticleType(aParticleType)
55 G4Exception(
"G4ProcessManager::G4ProcessManager()",
"ProcMan012",
65 G4Exception(
"G4ProcessManager::G4ProcessManager()",
"ProcMan012",
91 : theParticleType(right.theParticleType),
92 verboseLevel(right.verboseLevel)
97 G4cout <<
"G4ProcessManager::G4ProcessManager() [copy constructor]"
107 G4Exception(
"G4ProcessManager::G4ProcessManager() [copy constructor]",
130 G4Exception(
"G4ProcessManager::G4ProcessManager() [copy constructor]",
136 for (std::size_t j=0; j< src->
entries() ; ++j)
141 if ( (*src)[j] !=
nullptr )
143 theProcessTable->
Insert((*src)[j],
this);
189 G4cout <<
"G4ProcessManagerMessenger is deleted" <<
G4endl;
206 if ( ( idxProc >=0) && (ivec >=0) )
215 G4cout <<
" G4ProcessManager::GetProcessVectorIndex:";
221 G4cout <<
" is not registered yet ";
225 G4cout <<
" illegal DoIt Index [= " <<
G4int(idx) <<
","
244 G4cout <<
"G4ProcessManager::GetAttribute():";
256 G4VProcess* aProcess = (*theProcessList)[index];
257 if (aProcess ==
nullptr)
259 G4String aErrorMessage(
"Bad ProcessList: Null Pointer for ");
261 G4Exception(
"G4ProcessManager::GetAttribute()",
"ProcMan012",
278 G4cout <<
"G4ProcessManager::GetAttribute():";
281 G4cout <<
"Warning: attribute vector index is inconsistent"
282 <<
" with process List index"
290 if ( (*itr)->idxProcessList == index)
311 if ( (ip<0) || (ip >
G4int(pVector->
entries())) )
return -1;
320 if (aAttr !=
nullptr)
332 G4cout <<
" G4ProcessManager::InsertAt : No Process Attribute "
347 if ( (ip<0) || (ip >=
G4int(pVector->
entries())) )
return -1;
356 if (aAttr !=
nullptr)
358 if (ip < aAttr->idxProcVector[ivec])
373 G4cout <<
" G4ProcessManager::RemoveAt(): No Process Attribute "
408 G4int ordAlongStepDoIt,
409 G4int ordPostStepDoIt
419 G4cout <<
"This process is not applicable to this particle" <<
G4endl;
434 theProcessTable->
Insert(aProcess,
this);
444 G4String anErrorMessage(
"Inconsistent process List size for ");
447 G4Exception(
"G4ProcessManager::AddProcess()",
"ProcMan012",
457 if (ordAtRestDoIt==0) ordAtRestDoIt = 1;
458 if (ordAlongStepDoIt==0) ordAlongStepDoIt = 1;
459 if (ordPostStepDoIt==0) ordPostStepDoIt = 1;
493 G4cout <<
" in ProcessVetor[" << ivec<<
"]";
494 G4cout <<
" with Ordering parameter = " ;
522 if (pAttr ==
nullptr)
return nullptr;
525 G4VProcess* removedProcess = (*theProcessList)[index];
536 if (
RemoveAt(idx, removedProcess, ivec) <0)
538 G4String anErrorMessage(
"Bad index in attribute");
539 anErrorMessage +=
"for particle["
541 anErrorMessage +=
"process["
543 G4Exception(
"G4ProcessManager::RemoveProcess()",
"Fatal Error",
555 G4String anErrorMessage(
"Bad ProcessList: Index is out of range ");
557 anErrorMessage +=
"process[" + removedProcess->
GetProcessName() +
"] " ;
558 G4Exception(
"G4ProcessManager::RemoveProcess()",
"ProcMan012",
568 if ( (*itr) == pAttr)
588 theProcessTable->
Remove(removedProcess,
this);
590 return removedProcess;
611 if (pAttr !=
nullptr)
626 const G4String aErrorMessage(
"G4ProcessManager::SetProcessOrdering() - ");
647 G4cout <<
" illegal DoIt Index [= " <<
G4int(idDoIt) <<
"]";
657 if (pAttr ==
nullptr)
672 if (ordDoIt == 0) ordDoIt = 1;
692 G4cout <<
" in ProcessVetor[" << ivec<<
"]";
693 G4cout <<
" with Ordering parameter = " << ordDoIt ;
719 G4cout <<
"G4ProcessManager::SetProcessOrderingToFirst(): ";
720 G4cout <<
" illegal DoIt Index [= " <<
G4int(idDoIt) <<
"]";
729 if (pAttr ==
nullptr)
756 G4cout <<
"G4ProcessManager::SetProcessOrderingToFirst(): ";
758 G4cout <<
" in ProcessVetor[" << ivec<<
"]";
766 G4String anErrMsg =
"Set Ordering First is invoked twice for ";
770 G4Exception(
"G4ProcessManager::SetProcessOrderingToFirst()",
788 const G4String aErrorMessage(
"G4ProcessManager::SetProcessOrderingToSecond() - ");
809 G4cout <<
" illegal DoIt Index [= " <<
G4int(idDoIt) <<
"]";
818 if (pAttr ==
nullptr)
872 G4cout <<
" in ProcessVetor[" << ivec<<
"]";
873 G4cout <<
" with Ordering parameter = 1 ";
895 G4String anErrMsg =
"Set Ordering Last is invoked twice for ";
899 G4Exception(
"G4ProcessManager::SetProcessOrderingToLast()",
"ProcMan114",
915 G4cout <<
"G4ProcessManager::InActivateProcess is not valid in ";
932 if (pAttr ==
nullptr)
return nullptr;
935 G4VProcess* pProcess = (*theProcessList)[index];
937 const G4String aErrorMessage(
"G4ProcessManager::InactivateProcess() - ");
951 else if ((idx >= 0) && (idx <
G4int(pVector->
entries())))
954 if ((*pVector)[idx]== pProcess)
956 (*pVector)[idx]=
nullptr;
960 G4String anErrorMessage(
"Bad ProcessList: Bad index in attribute");
962 anErrorMessage +=
"process[" + pProcess->
GetProcessName() +
"] " ;
963 G4Exception(
"G4ProcessManager::InactivateProcess()",
"ProcMan012",
971 G4String anErrorMessage(
"Bad ProcessList: Index is out of range");
973 anErrorMessage +=
"process[" + pProcess->
GetProcessName() +
"] " ;
974 G4Exception(
"G4ProcessManager::InactivateProcess()",
"ProcMan012",
994 G4cout <<
"G4ProcessManager::ActivateProcess() is not valid in ";
1011 if (pAttr ==
nullptr)
return nullptr;
1014 G4VProcess* pProcess = (*theProcessList)[index];
1027 else if ((idx >= 0) && (idx <
G4int(pVector->
entries())))
1030 if ((*pVector)[idx] ==
nullptr)
1032 (*pVector)[idx] = pProcess;
1036 G4String anErrorMessage(
"Bad ProcessList: Bad index in attribute");
1038 anErrorMessage +=
"process[" + pProcess->
GetProcessName() +
"] " ;
1039 G4Exception(
"G4ProcessManager::ActivateProcess()",
"ProcMan012",
1047 G4String anErrorMessage(
"bad ProcessList: Index is out of range");
1048 anErrorMessage +=
"for particle["
1050 anErrorMessage +=
"process[" + pProcess->
GetProcessName() +
"] " ;
1051 G4Exception(
"G4ProcessManager::ActivateProcess()",
"ProcMan012",
1064 return (
this == &right);
1070 return (
this != &right);
1079 G4cout <<
"G4ProcessManager: particle["
1087 G4cout <<
"[" << idx <<
"]";
1088 G4cout <<
"=== process[" << ((*theProcessList)(idx))->GetProcessName()
1096 if ( pAttr-> isActive )
1110 G4cout <<
" Ordering:: ";
1111 G4cout <<
" AtRest AlongStep PostStep ";
1114 G4cout <<
" GetPIL/ DoIt GetPIL/ DoIt GetPIL/ DoIt ";
1118 for (
G4int idx2 = 0; idx2 <6 ; ++idx2)
1124 for (
G4int idx3 = 0; idx3 <6 ; ++idx3)
1153 for(
G4int j=nproc-1;j>=0;--j)
1223 G4cout <<
"G4ProcessManager::GetProcessActivation ";
1224 G4cout <<
" process (or its index) not found ";
1238 if (aProcess ==
nullptr)
return;
1240 if (pAttr ==
nullptr)
1245 G4cout <<
"G4ProcessManager::CheckOrderingParameters()" <<
G4endl;
1247 <<
" has no attribute" <<
G4endl;
1261 G4cerr <<
"G4ProcessManager::CheckOrderingParameters()" <<
G4endl;
1262 G4cerr <<
"You cannot set ordering parameter ["
1264 <<
"] for AtRest DoIt to the process "
1276 G4cerr <<
"G4ProcessManager::CheckOrderingParameters()" <<
G4endl;
1277 G4cerr <<
"You cannot set ordering parameter ["
1279 <<
"] for AlongStep DoIt to the process "
1292 G4cerr <<
"G4ProcessManager::CheckOrderingParameters()" <<
G4endl;
1293 G4cerr <<
"You cannot set ordering parameter ["
1295 <<
"] for PostStep DoIt to the process"
1305 msg =
"Invalid ordering parameters are set for ";
1307 G4Exception(
"G4ProcessManager::CheckOrderingParameters()",
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
const G4String & GetParticleName() const
G4int ordProcVector[G4ProcessManager::SizeOfProcVectorArray]
G4int idxProcVector[G4ProcessManager::SizeOfProcVectorArray]
void SetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt, G4int ordDoIt=ordDefault)
G4VProcess * GetProcess(const G4String &) const
std::vector< G4ProcessAttribute * > G4ProcessAttrVector
G4ProcessVector * theProcessList
G4VProcess * SetProcessActivation(G4VProcess *aProcess, G4bool fActive)
G4ProcessManager()=delete
G4ProcessAttrVector * theAttrVector
static G4ThreadLocal G4ProcessManagerMessenger * fProcessManagerMessenger
void CheckOrderingParameters(G4VProcess *) const
G4int GetProcessVectorId(G4ProcessVectorDoItIndex idx, G4ProcessVectorTypeIndex typ=typeGPIL) const
G4bool isSetOrderingFirstInvoked[NDoit]
G4ProcessAttribute * GetAttribute(G4int index) const
G4int GetProcessVectorIndex(G4VProcess *aProcess, G4ProcessVectorDoItIndex idx, G4ProcessVectorTypeIndex typ=typeGPIL) const
G4int GetProcessOrdering(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
void SetProcessOrderingToSecond(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
G4VProcess * InActivateProcess(G4int index)
G4bool GetProcessActivation(G4VProcess *aProcess) const
const G4ParticleDefinition * theParticleType
G4int GetProcessIndex(G4VProcess *) const
G4int FindInsertPosition(G4int ord, G4int ivec)
G4VProcess * ActivateProcess(G4int index)
G4bool isSetOrderingLastInvoked[NDoit]
G4bool operator==(const G4ProcessManager &right) const
G4VProcess * RemoveProcess(G4VProcess *aProcess)
G4int AddProcess(G4VProcess *aProcess, G4int ordAtRestDoIt=ordInActive, G4int ordAlongSteptDoIt=ordInActive, G4int ordPostStepDoIt=ordInActive)
G4int InsertAt(G4int position, G4VProcess *process, G4int ivec)
void SetProcessOrderingToLast(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
G4int GetVerboseLevel() const
static G4ThreadLocal G4int counterOfObjects
G4bool operator!=(const G4ProcessManager &right) const
void SetProcessOrderingToFirst(G4VProcess *aProcess, G4ProcessVectorDoItIndex idDoIt)
G4ProcessVector * theProcVector[SizeOfProcVectorArray]
void StartTracking(G4Track *aTrack=nullptr)
G4int RemoveAt(G4int position, G4VProcess *process, G4int ivec)
static G4ProcessTable * GetProcessTable()
G4int Insert(G4VProcess *aProcess, G4ProcessManager *aProcMgr)
G4int Remove(G4VProcess *aProcess, G4ProcessManager *aProcMgr)
std::size_t entries() const
G4bool insertAt(G4int i, G4VProcess *aProcess)
G4bool insert(G4VProcess *aProcess)
G4VProcess * removeLast()
G4VProcess * removeAt(G4int i)
const G4ApplicationState & GetCurrentState() const
static G4StateManager * GetStateManager()
static const G4String & GetProcessTypeName(G4ProcessType)
virtual G4bool IsApplicable(const G4ParticleDefinition &)
G4bool isAtRestDoItIsEnabled() const
G4bool isPostStepDoItIsEnabled() const
G4bool isAlongStepDoItIsEnabled() const
virtual void SetProcessManager(const G4ProcessManager *)
const G4String & GetProcessName() const
G4ProcessVectorTypeIndex typ