57 fWorldVolume ( nullptr ),
58 fIsTrackingTime ( false ),
59 fIsFirstStep ( false ),
60 fGhostNavigator ( nullptr ),
61 fGhostNavigatorIndex ( -1 ),
62 fIsGhostGeometry ( false ),
63 fGhostSafety ( -1.0 ),
65 fFastSimulationManager( nullptr ),
66 fFastSimulationTrigger( false )
77 <<
"' is created, and will message geometry with world volume `"
88 fWorldVolume ( nullptr ),
89 fIsTrackingTime ( false ),
90 fIsFirstStep ( false ),
91 fGhostNavigator ( nullptr ),
92 fGhostNavigatorIndex ( -1 ),
93 fIsGhostGeometry ( false ),
94 fGhostSafety ( -1.0 ),
96 fFastSimulationManager( nullptr ),
97 fFastSimulationTrigger( false )
108 <<
"' is created, and will message geometry with world volume `"
119 fWorldVolume ( nullptr ),
120 fIsTrackingTime ( false ),
121 fIsFirstStep ( false ),
122 fGhostNavigator ( nullptr ),
123 fGhostNavigatorIndex ( -1 ),
124 fIsGhostGeometry ( false ),
125 fGhostSafety ( -1.0 ),
127 fFastSimulationManager( nullptr ),
128 fFastSimulationTrigger( false )
139 <<
"' is created, and will message geometry with world volume `"
160 <<
"': changing of world volume at tracking time is not allowed." <<
G4endl;
161 G4Exception(
"G4FastSimulationManagerProcess::SetWorldVolume(const G4String)",
172 tellWhatIsWrong <<
"Volume newWorldName = `" << newWorldName
173 <<
"' is not a parallel world nor the mass world volume."
175 G4Exception(
"G4FastSimulationManagerProcess::SetWorldVolume(const G4String)",
183 <<
"': changing world volume from '" << fWorldVolume->
GetName()
184 <<
"' to `" << newWorld <<
"'." <<
G4endl;
186 <<
"': setting world volume from to `"<< newWorld->
GetName() <<
"'." <<
G4endl;
188 fWorldVolume = newWorld;
199 tellWhatIsWrong <<
"Null pointer passed for world volume." <<
G4endl;
200 G4Exception(
"G4FastSimulationManagerProcess::SetWorldVolume(const G4VPhysicalVolume* newWorld)",
213 fIsTrackingTime =
true;
218 fGhostNavigator = transportationManager->
GetNavigator(fWorldVolume);
220 if (fIsGhostGeometry) fGhostNavigatorIndex = transportationManager->
ActivateNavigator(fGhostNavigator);
221 else fGhostNavigatorIndex = -1;
231 fIsTrackingTime =
false;
251 if ( fIsGhostGeometry ) currentVolume = fPathFinder->
GetLocatedVolume(fGhostNavigatorIndex);
257 if( fFastSimulationManager )
261 if( fFastSimulationTrigger )
310 if ( fIsGhostGeometry )
313 if (!endTrack_G4MT_TLS_) endTrack_G4MT_TLS_ =
new G4FieldTrack (
'0') ;
317 if (!eLimited_G4MT_TLS_) eLimited_G4MT_TLS_ =
new ELimited ;
318 ELimited &eLimited = *eLimited_G4MT_TLS_;
320 if (previousStepSize > 0.) fGhostSafety -= previousStepSize;
321 if (fGhostSafety < 0.) fGhostSafety = 0.0;
326 if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.)
329 returnedStep = currentMinimumStep;
330 proposedSafety = fGhostSafety - currentMinimumStep;
336 returnedStep = fPathFinder->
ComputeStep(fFieldTrack,
338 fGhostNavigatorIndex,
345 if(eLimited ==
kDoNot) fGhostSafety = fGhostNavigator->
ComputeSafety(endTrack.GetPosition());
346 proposedSafety = fGhostSafety;
367 return &fDummyParticleChange;
382 if ( fIsGhostGeometry ) currentVolume = fPathFinder->
GetLocatedVolume(fGhostNavigatorIndex);
385 if( fFastSimulationManager )
389 if( fFastSimulationTrigger )
void PrepareNewTrack(const G4ThreeVector &position, const G4ThreeVector &direction, G4VPhysicalVolume *massStartVol=0)
static G4PathFinder * GetInstance()
G4double condition(const G4ErrorSymMatrix &m)
void RemoveFSMP(G4FastSimulationManagerProcess *)
G4VPhysicalVolume * IsWorldExisting(const G4String &worldName)
virtual void Initialize(const G4Track &)
G4double AtRestGetPhysicalInteractionLength(const G4Track &, G4ForceCondition *)
void StartTracking(G4Track *)
G4VParticleChange * InvokePostStepDoIt()
G4bool AtRestGetFastSimulationManagerTrigger(const G4Track &, const G4Navigator *a=0)
std::ostringstream G4ExceptionDescription
G4double PostStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4ForceCondition *condition)
const G4ThreeVector & GetPosition() const
G4Navigator * GetNavigatorForTracking() const
static G4GlobalFastSimulationManager * GetGlobalFastSimulationManager()
G4VParticleChange * AlongStepDoIt(const G4Track &track, const G4Step &step)
virtual ~G4FastSimulationManagerProcess()
G4GLOB_DLL std::ostream G4cout
G4int GetCurrentStepNumber() const
const G4String & GetName() const
G4VPhysicalVolume * GetLocatedVolume(G4int navId) const
G4VParticleChange * PostStepDoIt(const G4Track &, const G4Step &)
G4FastSimulationManager * GetFastSimulationManager() const
void DeActivateNavigator(G4Navigator *aNavigator)
G4double ComputeStep(const G4FieldTrack &pFieldTrack, G4double pCurrentProposedStepLength, G4int navigatorId, G4int stepNo, G4double &pNewSafety, ELimited &limitedStep, G4FieldTrack &EndState, G4VPhysicalVolume *currentVolume)
void SetProcessSubType(G4int)
const G4String & GetProcessName() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
static G4TransportationManager * GetTransportationManager()
G4int ActivateNavigator(G4Navigator *aNavigator)
const G4ThreeVector & GetMomentumDirection() const
G4LogicalVolume * GetLogicalVolume() const
G4VParticleChange * InvokeAtRestDoIt()
G4Navigator * GetNavigator(const G4String &worldName)
void SetWorldVolume(G4String)
G4FastSimulationManagerProcess(const G4String &processName="G4FastSimulationManagerProcess", G4ProcessType theType=fParameterisation)
G4double AlongStepGetPhysicalInteractionLength(const G4Track &track, G4double previousStepSize, G4double currentMinimumStep, G4double &proposedSafety, G4GPILSelection *selection)
G4VPhysicalVolume * GetVolume() const
G4TrackStatus GetTrackStatus() const
void ProposeTrackStatus(G4TrackStatus status)
virtual G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength=DBL_MAX, const G4bool keepState=true)
G4bool PostStepGetFastSimulationManagerTrigger(const G4Track &, const G4Navigator *a=0)
G4VParticleChange * AtRestDoIt(const G4Track &, const G4Step &)
G4VPhysicalVolume * GetWorldVolume() const
static void Update(G4FieldTrack *, const G4Track *)
void AddFSMP(G4FastSimulationManagerProcess *)