42 fParallelWorldSafety( 0.0 ),
43 fIsTrackingTime ( false ),
64 <<
"': adding a parallel world volume at tracking time is not allowed." <<
G4endl;
65 G4Exception(
"G4ParallelGeometriesLimiterProcess::AddParallelWorld(const G4String& parallelWorldName)",
81 tellWhatIsWrong <<
"Volume `" << parallelWorldName
82 <<
"' is not a parallel world nor the mass world volume."
84 G4Exception(
"G4ParallelGeometriesLimiterProcess::SetWorldVolume(const G4String)",
95 <<
"': trying to add the world volume for tracking as a parallel world." <<
G4endl;
96 G4Exception(
"G4ParallelGeometriesLimiterProcess::AddParallelWorld(const G4String& parallelWorldName)",
107 if ( knownWorld == newWorld ) isNew =
false;
114 <<
"': trying to re-add the parallel world volume `" << parallelWorldName <<
"'." <<
G4endl;
115 G4Exception(
"G4ParallelGeometriesLimiterProcess::AddParallelWorld(const G4String& parallelWorldName)",
134 <<
"': removing a parallel world volume at tracking time is not allowed." <<
G4endl;
135 G4Exception(
"G4ParallelGeometriesLimiterProcess::RemoveParallelWorld(const G4String& parallelWorldName)",
152 <<
"': trying to remove an inexisting parallel world '" << parallelWorldName <<
"'." <<
G4endl;
153 G4Exception(
"G4ParallelGeometriesLimiterProcess::RemoveParallelWorld(const G4String& parallelWorldName)",
164 if ( knownWorld == newWorld )
break;
172 <<
"': trying to remove an non-registerered parallel world '" << parallelWorldName <<
"'." <<
G4endl;
173 G4Exception(
"G4ParallelGeometriesLimiterProcess::RemoveParallelWorld(const G4String& parallelWorldName)",
269 if (!endTrack_G4MT_TLS_) endTrack_G4MT_TLS_ =
new G4FieldTrack (
'0') ;
273 if (!eLimited_G4MT_TLS_) eLimited_G4MT_TLS_ =
new ELimited ;
274 ELimited &eLimited = *eLimited_G4MT_TLS_;
280 if ( previousStepSize > 0.0 )
284 parallelWorldSafety -= previousStepSize;
285 if ( parallelWorldSafety < 0. ) parallelWorldSafety = 0.0;
298 returnedStep = currentMinimumStep;
304 G4double smallestReturnedStep = -1.0;
321 if ( ( smallestReturnedStep < 0.0 ) || ( tmpReturnedStep <= smallestReturnedStep ) )
323 smallestReturnedStep = tmpReturnedStep;
324 eLimitedForSmallestStep = eLimited;
345 if ( eLimitedForSmallestStep ==
kDoNot )
347 returnedStep = currentMinimumStep;
350 if ( eLimitedForSmallestStep ==
kUnique ||
354 returnedStep = smallestReturnedStep;
358 returnedStep = smallestReturnedStep* (1.0 + 1.0e-9);
396 ed <<
" Trying to add more than one G4ParallelGeometriesLimiterProcess process to the process manager " << mgr
398 G4Exception(
" G4ParallelGeometriesLimiterProcess::SetProcessManager(...)",
412 if ( world == parallelWorld )
G4double condition(const G4ErrorSymMatrix &m)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
@ NotCandidateForSelection
G4ParallelGeometriesLimiterProcess * fParallelGeometriesLimiterProcess
static G4MapCache< const G4ProcessManager *, G4BiasingProcessSharedData * > fSharedDataMap
static void Update(G4FieldTrack *, const G4Track *)
G4ThreeVector GetPosition() const
G4VPhysicalVolume * GetWorldVolume() const
std::vector< G4int > fParallelWorldNavigatorIndeces
std::vector< const G4VPhysicalVolume * > fPreviousVolumes
G4TransportationManager * fTransportationManager
G4ParallelGeometriesLimiterProcess(const G4String &processName="biasLimiter")
G4PathFinder * fPathFinder
std::vector< G4double > fParallelWorldSafeties
G4double fParallelWorldSafety
void AddParallelWorld(const G4String ¶llelWorldName)
std::vector< G4bool > fParallelWorldWasLimiting
G4int GetParallelWorldIndex(const G4VPhysicalVolume *parallelWorld) const
G4double PostStepGetPhysicalInteractionLength(const G4Track &, G4double, G4ForceCondition *)
const G4Navigator * GetNavigator(G4int worldIndex) const
std::vector< G4Navigator * > fParallelWorldNavigators
std::vector< G4bool > fParallelWorldIsLimiting
void RemoveParallelWorld(const G4String ¶llelWorldName)
std::vector< const G4VPhysicalVolume * > fCurrentVolumes
G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
virtual void SetProcessManager(const G4ProcessManager *)
void StartTracking(G4Track *)
G4ParticleChangeForNothing fDummyParticleChange
std::vector< G4VPhysicalVolume * > fParallelWorlds
G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &step)
virtual void Initialize(const G4Track &track)
const G4String & GetParticleName() const
G4VPhysicalVolume * GetLocatedVolume(G4int navId) const
G4double ComputeStep(const G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4int navigatorId, G4int stepNo, G4double &pNewSafety, ELimited &limitedStep, G4FieldTrack &EndState, G4VPhysicalVolume *currentVolume)
void PrepareNewTrack(const G4ThreeVector &position, const G4ThreeVector &direction, G4VPhysicalVolume *massStartVol=nullptr)
static G4PathFinder * GetInstance()
G4ParticleDefinition * GetParticleType() const
G4VPhysicalVolume * GetVolume() const
const G4ThreeVector & GetPosition() const
G4int GetCurrentStepNumber() const
const G4ThreeVector & GetMomentumDirection() const
static G4TransportationManager * GetTransportationManager()
G4VPhysicalVolume * IsWorldExisting(const G4String &worldName)
G4Navigator * GetNavigatorForTracking() const
G4int ActivateNavigator(G4Navigator *aNavigator)
void DeActivateNavigator(G4Navigator *aNavigator)
const G4String & GetProcessName() const