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

G4TransportationManager is a singleton class which stores the navigator used by the transportation process to do the geometrical tracking. It also stores a pointer to the propagator used in a (magnetic) field and to the field manager. More...

#include <G4TransportationManager.hh>

Public Member Functions

G4PropagatorInFieldGetPropagatorInField () const
void SetPropagatorInField (G4PropagatorInField *newFieldPropagator)
G4FieldManagerGetFieldManager () const
void SetFieldManager (G4FieldManager *newFieldManager)
G4NavigatorGetNavigatorForTracking () const
void SetNavigatorForTracking (G4Navigator *newNavigator)
void SetWorldForTracking (G4VPhysicalVolume *theWorld)
std::vector< G4Navigator * >::iterator GetActiveNavigatorsIterator ()
std::size_t GetNoActiveNavigators () const
std::vector< G4VPhysicalVolume * >::iterator GetWorldsIterator ()
std::size_t GetNoWorlds () const
G4SafetyHelperGetSafetyHelper () const
G4VPhysicalVolumeGetParallelWorld (const G4String &worldName)
G4VPhysicalVolumeIsWorldExisting (const G4String &worldName)
G4NavigatorGetNavigator (const G4String &worldName)
G4NavigatorGetNavigator (G4VPhysicalVolume *aWorld)
G4bool RegisterWorld (G4VPhysicalVolume *aWorld)
void DeRegisterNavigator (G4Navigator *aNavigator)
G4int ActivateNavigator (G4Navigator *aNavigator)
void DeActivateNavigator (G4Navigator *aNavigator)
void InactivateAll ()
void ClearParallelWorlds ()
 ~G4TransportationManager ()

Static Public Member Functions

static G4TransportationManagerGetTransportationManager ()
static G4TransportationManagerGetInstanceIfExist ()
static G4NavigatorGetFirstTrackingNavigator ()
static void SetFirstTrackingNavigator (G4Navigator *nav)

Static Public Attributes

static constexpr G4int kMassNavigatorId = 0

Detailed Description

G4TransportationManager is a singleton class which stores the navigator used by the transportation process to do the geometrical tracking. It also stores a pointer to the propagator used in a (magnetic) field and to the field manager.

Definition at line 60 of file G4TransportationManager.hh.

Constructor & Destructor Documentation

◆ ~G4TransportationManager()

G4TransportationManager::~G4TransportationManager ( )

Destructor. Called internally only by G4RunManagerKernel.

Definition at line 96 of file G4TransportationManager.cc.

97{
98 delete fSafetyHelper;
99 delete fPropagatorInField;
100 delete fGeomMessenger;
101 ClearNavigators();
102 fTransportationManager = nullptr;
103}

Member Function Documentation

◆ ActivateNavigator()

G4int G4TransportationManager::ActivateNavigator ( G4Navigator * aNavigator)

Definition at line 323 of file G4TransportationManager.cc.

324{
325 auto pNav = std::find(fNavigators.cbegin(), fNavigators.cend(), aNavigator);
326 if (pNav == fNavigators.cend())
327 {
328 G4String message
329 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName()
330 + "- not found in memory!";
331 G4Exception("G4TransportationManager::ActivateNavigator()",
332 "GeomNav1002", FatalException, message);
333 return -1;
334 }
335
336 aNavigator->Activate(true);
337 G4int id = 0;
338 for(const auto & fActiveNavigator : fActiveNavigators)
339 {
340 if (fActiveNavigator == aNavigator) { return id; }
341 ++id;
342 }
343
344 fActiveNavigators.push_back(aNavigator);
345 return id;
346}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
int G4int
Definition G4Types.hh:85
void Activate(G4bool flag)
G4VPhysicalVolume * GetWorldVolume() const
const G4String & GetName() const

Referenced by G4FastSimulationManagerProcess::StartTracking().

◆ ClearParallelWorlds()

void G4TransportationManager::ClearParallelWorlds ( )

Clears collection of navigators and deletes the allocated objects associated with parallel worlds. Internal method, called only by the RunManager when the entire geometry is rebuilt from scratch.

Definition at line 469 of file G4TransportationManager.cc.

470{
471 auto pNav = fNavigators.cbegin();
472 G4Navigator* trackingNavigator = *pNav;
473 for (pNav=fNavigators.cbegin(); pNav!=fNavigators.cend(); ++pNav)
474 {
475 if (*pNav != trackingNavigator) { delete *pNav; }
476 }
477 fNavigators.clear();
478 fActiveNavigators.clear();
479 fWorlds.clear();
480
481 fNavigators.push_back(trackingNavigator);
482 fActiveNavigators.push_back(trackingNavigator);
483 fWorlds.push_back(nullptr); // NULL registered
484}

Referenced by G4WorkerRunManager::InitializeGeometry(), and G4RunManager::ReinitializeGeometry().

◆ DeActivateNavigator()

void G4TransportationManager::DeActivateNavigator ( G4Navigator * aNavigator)

Definition at line 355 of file G4TransportationManager.cc.

356{
357 auto pNav = std::find(fNavigators.cbegin(), fNavigators.cend(), aNavigator);
358 if (pNav != fNavigators.cend())
359 {
360 (*pNav)->Activate(false);
361 }
362 else
363 {
364 G4String message
365 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName()
366 + "- not found in memory!";
367 G4Exception("G4TransportationManager::DeActivateNavigator()",
368 "GeomNav1002", JustWarning, message);
369 }
370
371 auto pActiveNav = std::find(fActiveNavigators.cbegin(),
372 fActiveNavigators.cend(), aNavigator);
373 if (pActiveNav != fActiveNavigators.cend())
374 {
375 fActiveNavigators.erase(pActiveNav);
376 }
377}
@ JustWarning

◆ DeRegisterNavigator()

void G4TransportationManager::DeRegisterNavigator ( G4Navigator * aNavigator)

Definition at line 285 of file G4TransportationManager.cc.

286{
287 if (aNavigator == fNavigators[0])
288 {
289 G4Exception("G4TransportationManager::DeRegisterNavigator()",
290 "GeomNav0003", FatalException,
291 "The navigator for tracking CANNOT be deregistered!");
292 }
293 auto pNav = std::find(fNavigators.cbegin(), fNavigators.cend(), aNavigator);
294 if (pNav != fNavigators.cend())
295 {
296 // Deregister associated world volume
297 //
298 DeRegisterWorld((*pNav)->GetWorldVolume());
299
300 // Deregister the navigator
301 //
302 fNavigators.erase(pNav);
303 }
304 else
305 {
306 G4String message
307 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName()
308 + "- not found in memory!";
309 G4Exception("G4TransportationManager::DeRegisterNavigator()",
310 "GeomNav1002", JustWarning, message);
311 }
312}

◆ GetActiveNavigatorsIterator()

std::vector< G4Navigator * >::iterator G4TransportationManager::GetActiveNavigatorsIterator ( )
inline

Accessors for the active navigators.

Returns
An iterator to the list of active navigators.

Referenced by G4OpBoundaryProcess::PostStepDoIt().

◆ GetFieldManager()

◆ GetFirstTrackingNavigator()

G4Navigator * G4TransportationManager::GetFirstTrackingNavigator ( )
static

Accessor and modifier for the tracking navigator. Retrieves/sets the first navigator pointer for the 'mass' geometry. It will be used as a template for cloning the tracking navigator of additional threads.

Definition at line 491 of file G4TransportationManager.cc.

492{
493 return fFirstTrackingNavigator;
494}

◆ GetInstanceIfExist()

G4TransportationManager * G4TransportationManager::GetInstanceIfExist ( )
static

Retrieve singleton instance pointer.

Definition at line 124 of file G4TransportationManager.cc.

125{
126 return fTransportationManager;
127}

Referenced by G4RunManagerKernel::~G4RunManagerKernel().

◆ GetNavigator() [1/2]

G4Navigator * G4TransportationManager::GetNavigator ( const G4String & worldName)

Returns a navigator associated to either the world volume name or associated to the pointer to the world physical volume. If not existing already, creates it and registers it in the collection.

Returns
Pointer to a tracking navigator.

Definition at line 209 of file G4TransportationManager.cc.

210{
211 // If already existing, return the stored pointer to the navigator
212 //
213 for (const auto & fNavigator : fNavigators)
214 {
215 if (fNavigator->GetWorldVolume()->GetName() == worldName)
216 {
217 return fNavigator;
218 }
219 }
220
221 // Check if world of that name already exists,
222 // create a navigator and register it
223 //
224 G4Navigator* aNavigator = nullptr;
225 G4VPhysicalVolume* aWorld = IsWorldExisting(worldName);
226 if(aWorld != nullptr)
227 {
228 aNavigator = new G4Navigator();
229 aNavigator->SetWorldVolume(aWorld);
230 fNavigators.push_back(aNavigator);
231 }
232 else
233 {
234 G4String message
235 = "World volume with name -" + worldName
236 + "- does not exist. Create it first by GetParallelWorld() method!";
237 G4Exception("G4TransportationManager::GetNavigator(name)",
238 "GeomNav0002", FatalException, message);
239 }
240
241 return aNavigator;
242}
void SetWorldVolume(G4VPhysicalVolume *pWorld)
G4VPhysicalVolume * IsWorldExisting(const G4String &worldName)

Referenced by G4FastSimulationManagerProcess::StartTracking().

◆ GetNavigator() [2/2]

G4Navigator * G4TransportationManager::GetNavigator ( G4VPhysicalVolume * aWorld)

Definition at line 251 of file G4TransportationManager.cc.

252{
253 for (const auto & fNavigator : fNavigators)
254 {
255 if (fNavigator->GetWorldVolume() == aWorld) { return fNavigator; }
256 }
257 G4Navigator* aNavigator = nullptr;
258 auto pWorld = std::find(fWorlds.cbegin(), fWorlds.cend(), aWorld);
259 if (pWorld != fWorlds.cend())
260 {
261 aNavigator = new G4Navigator();
262 aNavigator->SetWorldVolume(aWorld);
263 fNavigators.push_back(aNavigator);
264 }
265 else
266 {
267 G4String message
268 = "World volume with name -" + aWorld->GetName()
269 + "- does not exist. Create it first by GetParallelWorld() method!";
270 G4Exception("G4TransportationManager::GetNavigator(pointer)",
271 "GeomNav0002", FatalException, message);
272 }
273
274 return aNavigator;
275}

◆ GetNavigatorForTracking()

◆ GetNoActiveNavigators()

std::size_t G4TransportationManager::GetNoActiveNavigators ( ) const
inline

◆ GetNoWorlds()

◆ GetParallelWorld()

G4VPhysicalVolume * G4TransportationManager::GetParallelWorld ( const G4String & worldName)

Returns an exact copy of the tracking world volume. If already existing just returns the pointer.

Returns
Pointer to the tracking world volume.

Definition at line 185 of file G4TransportationManager.cc.

186{
187 G4VPhysicalVolume* wPV = IsWorldExisting(worldName);
188 if (wPV == nullptr)
189 {
191 G4LogicalVolume* wLV = wPV->GetLogicalVolume();
192 wLV = new G4LogicalVolume(wLV->GetSolid(), nullptr,
193 worldName);
194 wPV = new G4PVPlacement (wPV->GetRotation(),
195 wPV->GetTranslation(),
196 wLV, worldName, nullptr, false, 0);
197 RegisterWorld(wPV);
198 }
199 return wPV;
200}
G4VSolid * GetSolid() const
G4bool RegisterWorld(G4VPhysicalVolume *aWorld)
G4Navigator * GetNavigatorForTracking() const
const G4RotationMatrix * GetRotation() const
const G4ThreeVector GetTranslation() const
G4LogicalVolume * GetLogicalVolume() const

Referenced by G4ParallelWorldPhysics::ConstructProcess(), G4RunManager::ConstructScoringWorlds(), G4ImportanceConfigurator::G4ImportanceConfigurator(), G4VUserParallelWorld::GetWorld(), G4FastSimHitMaker::make(), GFlashHitMaker::make(), G4IStore::SetParallelWorldVolume(), and G4WeightWindowStore::SetParallelWorldVolume().

◆ GetPropagatorInField()

◆ GetSafetyHelper()

◆ GetTransportationManager()

G4TransportationManager * G4TransportationManager::GetTransportationManager ( )
static

Retrieve the static instance.

Definition at line 110 of file G4TransportationManager.cc.

111{
112 if (fTransportationManager == nullptr)
113 {
114 fTransportationManager = new G4TransportationManager;
115 }
116 return fTransportationManager;
117}

Referenced by G4Scene::AddWorldIfEmpty(), G4RayTrajectory::AppendStep(), G4DecayWithSpin::AtRestDoIt(), G4ErrorSurfaceTrajState::BuildErrorMatrix(), G4RunManagerKernel::CheckRegions(), G4VPrimaryGenerator::CheckVertexInsideWorld(), G4AdjointPrimaryGenerator::ComputeAccumulatedDepthVectorAlongBackRay(), G4ParallelWorldPhysics::ConstructProcess(), G4MTRunManager::ConstructScoringWorlds(), G4RunManager::ConstructScoringWorlds(), G4SubEvtRunManager::ConstructScoringWorlds(), G4TaskRunManager::ConstructScoringWorlds(), G4WorkerRunManager::ConstructScoringWorlds(), G4TheRayTracer::CreateBitMap(), G4RunManagerKernel::DefineWorldVolume(), G4VFieldModel::DescribeYourselfTo(), G4ITTransportation::DoesGlobalFieldExist(), G4TrajectoryDrawByOriginVolume::Draw(), G4DrawVoxels::DrawVoxels(), G4CoupledTransportation::EndTracking(), G4ToolsSGSceneHandler::EstablishBaseNodes(), G4TrajectoryOriginVolumeFilter::Evaluate(), G4TouchableUtils::FindTouchableProperties(), G4ElNeutrinoNucleusProcess::G4ElNeutrinoNucleusProcess(), G4ErrorFreeTrajState::G4ErrorFreeTrajState(), G4FastSimulationManagerProcess::G4FastSimulationManagerProcess(), G4FastSimulationManagerProcess::G4FastSimulationManagerProcess(), G4FastSimulationManagerProcess::G4FastSimulationManagerProcess(), G4GeometrySampler::G4GeometrySampler(), G4ImportanceConfigurator::G4ImportanceConfigurator(), G4ImportanceProcess::G4ImportanceProcess(), G4ITTransportation::G4ITTransportation(), G4ITTransportation::G4ITTransportation(), G4MultiNavigator::G4MultiNavigator(), G4MuNeutrinoNucleusProcess::G4MuNeutrinoNucleusProcess(), G4NeutrinoElectronProcess::G4NeutrinoElectronProcess(), G4ParallelGeometriesLimiterProcess::G4ParallelGeometriesLimiterProcess(), G4ParallelWorldProcess::G4ParallelWorldProcess(), G4ParallelWorldScoringProcess::G4ParallelWorldScoringProcess(), G4SteppingManager::G4SteppingManager(), G4SynchrotronRadiation::G4SynchrotronRadiation(), G4SynchrotronRadiationInMat::G4SynchrotronRadiationInMat(), G4TauNeutrinoNucleusProcess::G4TauNeutrinoNucleusProcess(), G4Transportation::G4Transportation(), G4VEnergyLossProcess::G4VEnergyLossProcess(), G4VisManager::G4VisSubThread(), G4WeightCutOffProcess::G4WeightCutOffProcess(), G4WeightWindowProcess::G4WeightWindowProcess(), G4VisManager::GeometryHasChanged(), G4XrayReflection::GetMeanFreePath(), G4VMscModel::GetParticleChangeForMSC(), G4VUserParallelWorld::GetWorld(), G4ErrorPropagatorManager::InitFieldForBackwards(), G4TDNAOneStepThermalizationModel< MODEL >::Initialise(), G4SafetyHelper::InitialiseNavigator(), G4BOptnForceCommonTruncatedExp::Initialize(), G4ErrorRunManagerHelper::InitializeGeometry(), G4WorkerRunManager::InitializeGeometry(), G4FastSimulationManager::ListTitle(), G4FastSimHitMaker::make(), GFlashHitMaker::make(), G4MicroElecSurface::PostStepDoIt(), G4OpBoundaryProcess::PostStepDoIt(), G4UCNBoundaryProcess::PostStepDoIt(), G4VTransitionRadiation::PostStepDoIt(), G4ErrorMagFieldLimitProcess::PostStepGetPhysicalInteractionLength(), G4VMultipleScattering::PreparePhysicsTable(), G4ErrorFreeTrajState::PropagateError(), G4RunManager::ReinitializeGeometry(), G4TrackingMessenger::SetNewValue(), G4VisCommandSceneAddLocalAxes::SetNewValue(), G4VisCommandSceneAddVolume::SetNewValue(), G4VisCommandSetTouchable::SetNewValue(), G4VisCommandSetVolumeForField::SetNewValue(), G4VisCommandsTouchable::SetNewValue(), G4VisCommandViewerCentreOn::SetNewValue(), G4IStore::SetParallelWorldVolume(), G4WeightWindowStore::SetParallelWorldVolume(), G4RTPrimaryGeneratorAction::SetUp(), G4IStore::SetWorldVolume(), G4WeightWindowStore::SetWorldVolume(), G4GlobalFastSimulationManager::ShowSetup(), G4FastSimulationManagerProcess::StartTracking(), G4RunManagerKernel::WorkerDefineWorldVolume(), and G4RunManagerKernel::WorkerUpdateWorldVolume().

◆ GetWorldsIterator()

◆ InactivateAll()

void G4TransportationManager::InactivateAll ( )

Definition at line 385 of file G4TransportationManager.cc.

386{
387 for (const auto & fActiveNavigator : fActiveNavigators)
388 {
389 fActiveNavigator->Activate(false);
390 }
391 fActiveNavigators.clear();
392
393 // Restore status for the navigator for tracking
394 //
395 fNavigators[0]->Activate(true);
396 fActiveNavigators.push_back(fNavigators[0]);
397}

Referenced by G4CoupledTransportation::EndTracking().

◆ IsWorldExisting()

G4VPhysicalVolume * G4TransportationManager::IsWorldExisting ( const G4String & worldName)

Verifies existance or not of an istance of the world volume with same name in the collection.

Returns
Pointer to the tracking world volume.

Definition at line 406 of file G4TransportationManager.cc.

407{
408 auto pWorld = fWorlds.begin();
409 if ( *pWorld==nullptr ) { *pWorld=fNavigators[0]->GetWorldVolume(); }
410
411 for (const auto & fWorld : fWorlds)
412 {
413 if (fWorld->GetName() == name ) { return fWorld; }
414 }
415 return nullptr;
416}

Referenced by G4RunManager::ConstructScoringWorlds(), G4WorkerRunManager::ConstructScoringWorlds(), GetNavigator(), GetParallelWorld(), and G4RunManagerKernel::WorkerUpdateWorldVolume().

◆ RegisterWorld()

G4bool G4TransportationManager::RegisterWorld ( G4VPhysicalVolume * aWorld)

Methods for handling navigators. Navigator for tracking is always the first (i.e. position 0 in the collection) and cannot be de-registered.

Definition at line 425 of file G4TransportationManager.cc.

426{
427 G4bool done = false;
428
429 auto pWorld = std::find(fWorlds.cbegin(), fWorlds.cend(), aWorld);
430 if (pWorld == fWorlds.cend())
431 {
432 fWorlds.push_back(aWorld);
433 done = true;
434 }
435 return done;
436}
bool G4bool
Definition G4Types.hh:86

Referenced by GetParallelWorld(), G4RunManagerKernel::WorkerDefineWorldVolume(), and G4RunManagerKernel::WorkerUpdateWorldVolume().

◆ SetFieldManager()

void G4TransportationManager::SetFieldManager ( G4FieldManager * newFieldManager)

Definition at line 134 of file G4TransportationManager.cc.

135{
136 fFieldManager = newFieldManager;
138
139 // Message the PropagatorInField,
140 // which also maintains this information (to be reviewed)
141 //
142 if( fPropagatorInField != nullptr )
143 {
144 fPropagatorInField -> SetDetectorFieldManager( newFieldManager );
145 }
146}
static void SetGlobalFieldManager(G4FieldManager *fieldManager)

◆ SetFirstTrackingNavigator()

void G4TransportationManager::SetFirstTrackingNavigator ( G4Navigator * nav)
static

Definition at line 501 of file G4TransportationManager.cc.

502{
503 fFirstTrackingNavigator= nav;
504}

◆ SetNavigatorForTracking()

void G4TransportationManager::SetNavigatorForTracking ( G4Navigator * newNavigator)

Definition at line 154 of file G4TransportationManager.cc.

155{
156 fNavigators[0] = newNavigator;
157 fActiveNavigators[0] = newNavigator;
158 fPropagatorInField->SetNavigatorForPropagating(newNavigator);
159}

◆ SetPropagatorInField()

void G4TransportationManager::SetPropagatorInField ( G4PropagatorInField * newFieldPropagator)
inline

◆ SetWorldForTracking()

void G4TransportationManager::SetWorldForTracking ( G4VPhysicalVolume * theWorld)
inline

Sets the world volume for tracking. This method is to be invoked by G4RunManagerKernel.

Referenced by G4RunManagerKernel::DefineWorldVolume(), and G4RunManagerKernel::WorkerDefineWorldVolume().

Member Data Documentation

◆ kMassNavigatorId

G4int G4TransportationManager::kMassNavigatorId = 0
staticconstexpr

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