#include <G4TransportationManager.hh>
Definition at line 57 of file G4TransportationManager.hh.
G4TransportationManager::G4TransportationManager | ( | ) | [protected] |
Definition at line 55 of file G4TransportationManager.cc.
References G4Navigator::Activate(), FatalException, G4Exception(), and G4Navigator::GetWorldVolume().
00056 { 00057 if (fTransportationManager) 00058 { 00059 G4Exception("G4TransportationManager::G4TransportationManager()", 00060 "GeomNav0002", FatalException, 00061 "Only ONE instance of G4TransportationManager is allowed!"); 00062 } 00063 00064 // Create the navigator for tracking and activate it; add to collections 00065 // 00066 G4Navigator* trackingNavigator = new G4Navigator(); 00067 trackingNavigator->Activate(true); 00068 fNavigators.push_back(trackingNavigator); 00069 fActiveNavigators.push_back(trackingNavigator); 00070 fWorlds.push_back(trackingNavigator->GetWorldVolume()); // NULL registered 00071 00072 fGeomMessenger = new G4GeometryMessenger(this); 00073 fFieldManager = new G4FieldManager(); 00074 fPropagatorInField= new G4PropagatorInField(trackingNavigator,fFieldManager); 00075 fSafetyHelper = new G4SafetyHelper(); 00076 }
G4TransportationManager::~G4TransportationManager | ( | ) | [protected] |
Definition at line 81 of file G4TransportationManager.cc.
00082 { 00083 delete fFieldManager; 00084 delete fPropagatorInField; 00085 ClearNavigators(); 00086 delete fGeomMessenger; 00087 delete fSafetyHelper; 00088 }
G4int G4TransportationManager::ActivateNavigator | ( | G4Navigator * | aNavigator | ) |
Definition at line 286 of file G4TransportationManager.cc.
References G4Navigator::Activate(), G4Exception(), G4VPhysicalVolume::GetName(), G4Navigator::GetWorldVolume(), and JustWarning.
Referenced by G4CoupledTransportation::G4CoupledTransportation(), G4SafetyHelper::InitialiseNavigator(), G4WeightWindowProcess::StartTracking(), G4WeightCutOffProcess::StartTracking(), G4ParallelWorldScoringProcess::StartTracking(), G4ParallelWorldProcess::StartTracking(), G4ImportanceProcess::StartTracking(), G4FastSimulationManagerProcess::StartTracking(), and G4CoupledTransportation::StartTracking().
00287 { 00288 std::vector<G4Navigator*>::iterator pNav = 00289 std::find(fNavigators.begin(), fNavigators.end(), aNavigator); 00290 if (pNav == fNavigators.end()) 00291 { 00292 G4String message 00293 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName() 00294 + "- not found in memory!"; 00295 G4Exception("G4TransportationManager::ActivateNavigator()", 00296 "GeomNav1002", JustWarning, message); 00297 return -1; 00298 } 00299 00300 aNavigator->Activate(true); 00301 G4int id = 0; 00302 std::vector<G4Navigator*>::iterator pActiveNav; 00303 for(pActiveNav=fActiveNavigators.begin(); 00304 pActiveNav!=fActiveNavigators.end(); pActiveNav++) 00305 { 00306 if (*pActiveNav == aNavigator) { return id; } 00307 id++; 00308 } 00309 00310 fActiveNavigators.push_back(aNavigator); 00311 return id; 00312 }
void G4TransportationManager::DeActivateNavigator | ( | G4Navigator * | aNavigator | ) |
Definition at line 321 of file G4TransportationManager.cc.
References G4Exception(), G4VPhysicalVolume::GetName(), G4Navigator::GetWorldVolume(), and JustWarning.
Referenced by G4FastSimulationManagerProcess::EndTracking().
00322 { 00323 std::vector<G4Navigator*>::iterator pNav = 00324 std::find(fNavigators.begin(), fNavigators.end(), aNavigator); 00325 if (pNav != fNavigators.end()) 00326 { 00327 (*pNav)->Activate(false); 00328 } 00329 else 00330 { 00331 G4String message 00332 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName() 00333 + "- not found in memory!"; 00334 G4Exception("G4TransportationManager::DeActivateNavigator()", 00335 "GeomNav1002", JustWarning, message); 00336 } 00337 00338 std::vector<G4Navigator*>::iterator pActiveNav = 00339 std::find(fActiveNavigators.begin(), fActiveNavigators.end(), aNavigator); 00340 if (pActiveNav != fActiveNavigators.end()) 00341 { 00342 fActiveNavigators.erase(pActiveNav); 00343 } 00344 }
void G4TransportationManager::DeRegisterNavigator | ( | G4Navigator * | aNavigator | ) |
Definition at line 247 of file G4TransportationManager.cc.
References FatalException, G4Exception(), G4VPhysicalVolume::GetName(), G4Navigator::GetWorldVolume(), and JustWarning.
00248 { 00249 if (aNavigator == fNavigators[0]) 00250 { 00251 G4Exception("G4TransportationManager::DeRegisterNavigator()", 00252 "GeomNav0003", FatalException, 00253 "The navigator for tracking CANNOT be deregistered!"); 00254 } 00255 std::vector<G4Navigator*>::iterator pNav = 00256 std::find(fNavigators.begin(), fNavigators.end(), aNavigator); 00257 if (pNav != fNavigators.end()) 00258 { 00259 // Deregister associated world volume 00260 // 00261 DeRegisterWorld((*pNav)->GetWorldVolume()); 00262 00263 // Deregister the navigator 00264 // 00265 fNavigators.erase(pNav); 00266 } 00267 else 00268 { 00269 G4String message 00270 = "Navigator for volume -" + aNavigator->GetWorldVolume()->GetName() 00271 + "- not found in memory!"; 00272 G4Exception("G4TransportationManager::DeRegisterNavigator()", 00273 "GeomNav1002", JustWarning, message); 00274 } 00275 }
std::vector< G4Navigator * >::iterator G4TransportationManager::GetActiveNavigatorsIterator | ( | ) | [inline] |
Definition at line 126 of file G4TransportationManager.icc.
Referenced by G4PathFinder::ComputeSafety(), G4MultiNavigator::GetGlobalExitNormal(), G4PathFinder::Locate(), G4MultiNavigator::LocateGlobalPointAndSetup(), G4MultiNavigator::LocateGlobalPointWithinVolume(), G4PathFinder::PrepareNewTrack(), G4PathFinder::ReLocate(), and G4MultiNavigator::ResetHierarchyAndLocate().
00127 { 00128 std::vector<G4Navigator*>::iterator iterator 00129 = std::vector<G4Navigator*>::iterator(fActiveNavigators.begin()); 00130 return iterator; 00131 }
G4FieldManager * G4TransportationManager::GetFieldManager | ( | ) | const [inline] |
Definition at line 103 of file G4TransportationManager.icc.
Referenced by G4ErrorSurfaceTrajState::BuildErrorMatrix(), G4Transportation::DoesGlobalFieldExist(), G4ITTransportation::DoesGlobalFieldExist(), G4CoupledTransportation::DoesGlobalFieldExist(), G4ErrorFreeTrajState::G4ErrorFreeTrajState(), G4ErrorPropagatorManager::InitFieldForBackwards(), G4ErrorMagFieldLimitProcess::PostStepGetPhysicalInteractionLength(), and G4ErrorFreeTrajState::PropagateError().
G4Navigator * G4TransportationManager::GetNavigator | ( | G4VPhysicalVolume * | aWorld | ) |
Definition at line 211 of file G4TransportationManager.cc.
References FatalException, G4Exception(), G4VPhysicalVolume::GetName(), and G4Navigator::SetWorldVolume().
00212 { 00213 std::vector<G4Navigator*>::iterator pNav; 00214 for (pNav=fNavigators.begin(); pNav!=fNavigators.end(); pNav++) 00215 { 00216 if ((*pNav)->GetWorldVolume() == aWorld) { return *pNav; } 00217 } 00218 G4Navigator* aNavigator = 0; 00219 std::vector<G4VPhysicalVolume*>::iterator pWorld = 00220 std::find(fWorlds.begin(), fWorlds.end(), aWorld); 00221 if (pWorld != fWorlds.end()) 00222 { 00223 aNavigator = new G4Navigator(); 00224 aNavigator->SetWorldVolume(aWorld); 00225 fNavigators.push_back(aNavigator); 00226 } 00227 else 00228 { 00229 G4String message 00230 = "World volume with name -" + aWorld->GetName() 00231 + "- does not exist. Create it first by GetParallelWorld() method!"; 00232 G4Exception("G4TransportationManager::GetNavigator(pointer)", 00233 "GeomNav0002", FatalException, message); 00234 } 00235 00236 return aNavigator; 00237 }
G4Navigator * G4TransportationManager::GetNavigator | ( | const G4String & | worldName | ) |
Definition at line 171 of file G4TransportationManager.cc.
References FatalException, G4Exception(), IsWorldExisting(), and G4Navigator::SetWorldVolume().
Referenced by G4WeightWindowProcess::SetParallelWorld(), G4WeightCutOffProcess::SetParallelWorld(), G4ParallelWorldScoringProcess::SetParallelWorld(), G4ParallelWorldProcess::SetParallelWorld(), G4ImportanceProcess::SetParallelWorld(), and G4FastSimulationManagerProcess::StartTracking().
00172 { 00173 // If already existing, return the stored pointer to the navigator 00174 // 00175 std::vector<G4Navigator*>::iterator pNav; 00176 for (pNav=fNavigators.begin(); pNav!=fNavigators.end(); pNav++) 00177 { 00178 if ((*pNav)->GetWorldVolume()->GetName() == worldName) { return *pNav; } 00179 } 00180 00181 // Check if world of that name already exists, 00182 // create a navigator and register it 00183 // 00184 G4Navigator* aNavigator = 0; 00185 G4VPhysicalVolume* aWorld = IsWorldExisting(worldName); 00186 if(aWorld) 00187 { 00188 aNavigator = new G4Navigator(); 00189 aNavigator->SetWorldVolume(aWorld); 00190 fNavigators.push_back(aNavigator); 00191 } 00192 else 00193 { 00194 G4String message 00195 = "World volume with name -" + worldName 00196 + "- does not exist. Create it first by GetParallelWorld() method!"; 00197 G4Exception("G4TransportationManager::GetNavigator(name)", 00198 "GeomNav0002", FatalException, message); 00199 } 00200 00201 return aNavigator; 00202 }
G4Navigator * G4TransportationManager::GetNavigatorForTracking | ( | ) | const [inline] |
Definition at line 44 of file G4TransportationManager.icc.
Referenced by G4RayTrajectory::AppendStep(), G4MultiNavigator::CheckMassWorld(), G4TheRayTracer::CreateBitMap(), G4TrajectoryDrawByOriginVolume::Draw(), G4PathFinder::EnableParallelNavigation(), G4ASCIITreeSceneHandler::EndModeling(), G4TrajectoryOriginVolumeFilter::Evaluate(), G4CoupledTransportation::G4CoupledTransportation(), G4FastSimulationManagerProcess::G4FastSimulationManagerProcess(), G4MultiNavigator::G4MultiNavigator(), G4ParallelWorldProcess::G4ParallelWorldProcess(), G4SPSPosDistribution::G4SPSPosDistribution(), G4Transportation::G4Transportation(), GetParallelWorld(), G4SafetyHelper::InitialiseNavigator(), G4FastSimulationManager::ListTitle(), G4VTransitionRadiation::PostStepDoIt(), G4FastSimulationManagerProcess::StartTracking(), and G4CoupledTransportation::StartTracking().
size_t G4TransportationManager::GetNoActiveNavigators | ( | ) | const [inline] |
size_t G4TransportationManager::GetNoWorlds | ( | ) | const [inline] |
Definition at line 139 of file G4TransportationManager.icc.
Referenced by G4VisCommandSceneAddVolume::SetNewValue(), and G4PhysicalVolumeModel::Validate().
G4VPhysicalVolume * G4TransportationManager::GetParallelWorld | ( | const G4String & | worldName | ) |
Definition at line 147 of file G4TransportationManager.cc.
References G4VPhysicalVolume::GetLogicalVolume(), GetNavigatorForTracking(), G4LogicalVolume::GetSolid(), G4Navigator::GetWorldVolume(), and IsWorldExisting().
Referenced by G4RunManager::ConstructScoringWorlds(), G4VUserParallelWorld::GetWorld(), G4WeightWindowProcess::SetParallelWorld(), G4WeightCutOffProcess::SetParallelWorld(), G4ParallelWorldScoringProcess::SetParallelWorld(), G4ParallelWorldProcess::SetParallelWorld(), and G4ImportanceProcess::SetParallelWorld().
00148 { 00149 G4VPhysicalVolume* wPV = IsWorldExisting(worldName); 00150 if (!wPV) 00151 { 00152 wPV = GetNavigatorForTracking()->GetWorldVolume(); 00153 G4LogicalVolume* wLV = wPV->GetLogicalVolume(); 00154 wLV = new G4LogicalVolume(wLV->GetSolid(), 0, 00155 worldName); 00156 wPV = new G4PVPlacement (wPV->GetRotation(), 00157 wPV->GetTranslation(), 00158 wLV, worldName, 0, false, 0); 00159 RegisterWorld(wPV); 00160 } 00161 return wPV; 00162 }
G4PropagatorInField * G4TransportationManager::GetPropagatorInField | ( | ) | const [inline] |
Definition at line 80 of file G4TransportationManager.icc.
Referenced by G4DecayWithSpin::DecayIt(), G4CoupledTransportation::G4CoupledTransportation(), G4ITTransportation::G4ITTransportation(), G4PathFinder::G4PathFinder(), G4SynchrotronRadiation::G4SynchrotronRadiation(), G4SynchrotronRadiationInMat::G4SynchrotronRadiationInMat(), G4Transportation::G4Transportation(), and G4QSynchRad::GetRadius().
G4SafetyHelper * G4TransportationManager::GetSafetyHelper | ( | ) | const [inline] |
Definition at line 164 of file G4TransportationManager.icc.
Referenced by G4PathFinder::EnableParallelNavigation(), G4CoupledTransportation::G4CoupledTransportation(), G4Transportation::G4Transportation(), G4VEnergyLossProcess::G4VEnergyLossProcess(), G4VMscModel::GetParticleChangeForMSC(), G4PathFinder::PrepareNewTrack(), and G4VMultipleScattering::PreparePhysicsTable().
G4TransportationManager * G4TransportationManager::GetTransportationManager | ( | ) | [static] |
Definition at line 95 of file G4TransportationManager.cc.
Referenced by G4Scene::AddWorldIfEmpty(), G4RayTrajectory::AppendStep(), G4ErrorSurfaceTrajState::BuildErrorMatrix(), G4VPrimaryGenerator::CheckVertexInsideWorld(), G4RunManager::ConstructScoringWorlds(), G4TheRayTracer::CreateBitMap(), G4DecayWithSpin::DecayIt(), G4RunManagerKernel::DefineWorldVolume(), G4Transportation::DoesGlobalFieldExist(), G4ITTransportation::DoesGlobalFieldExist(), G4CoupledTransportation::DoesGlobalFieldExist(), G4TrajectoryDrawByOriginVolume::Draw(), G4DrawVoxels::DrawVoxels(), G4ASCIITreeSceneHandler::EndModeling(), G4CoupledTransportation::EndTracking(), G4TrajectoryOriginVolumeFilter::Evaluate(), G4CoupledTransportation::G4CoupledTransportation(), G4ErrorFreeTrajState::G4ErrorFreeTrajState(), G4FastSimulationManagerProcess::G4FastSimulationManagerProcess(), G4ImportanceProcess::G4ImportanceProcess(), G4ITTransportation::G4ITTransportation(), G4MultiNavigator::G4MultiNavigator(), G4ParallelWorldProcess::G4ParallelWorldProcess(), G4ParallelWorldScoringProcess::G4ParallelWorldScoringProcess(), G4PathFinder::G4PathFinder(), G4SPSPosDistribution::G4SPSPosDistribution(), G4SteppingManager::G4SteppingManager(), G4SynchrotronRadiation::G4SynchrotronRadiation(), G4SynchrotronRadiationInMat::G4SynchrotronRadiationInMat(), G4Transportation::G4Transportation(), G4VEnergyLossProcess::G4VEnergyLossProcess(), G4WeightCutOffProcess::G4WeightCutOffProcess(), G4WeightWindowProcess::G4WeightWindowProcess(), G4VisManager::GeometryHasChanged(), G4VMscModel::GetParticleChangeForMSC(), G4QSynchRad::GetRadius(), G4VUserParallelWorld::GetWorld(), G4ErrorPropagatorManager::InitFieldForBackwards(), G4SafetyHelper::InitialiseNavigator(), G4ErrorRunManagerHelper::InitializeGeometry(), G4FastSimulationManager::ListTitle(), GFlashHitMaker::make(), G4VTransitionRadiation::PostStepDoIt(), G4OpBoundaryProcess::PostStepDoIt(), G4ErrorMagFieldLimitProcess::PostStepGetPhysicalInteractionLength(), G4VMultipleScattering::PreparePhysicsTable(), G4ErrorFreeTrajState::PropagateError(), G4VisCommandSceneAddVolume::SetNewValue(), G4VisCommandSceneAddTrajectories::SetNewValue(), G4GlobalFastSimulationManager::ShowSetup(), G4FastSimulationManagerProcess::StartTracking(), G4CoupledTransportation::StartTracking(), G4PhysicalVolumeModel::Validate(), and G4GDMLParser::Write().
00096 { 00097 static G4TransportationManager theInstance; 00098 if (!fTransportationManager) 00099 fTransportationManager = &theInstance; 00100 00101 return fTransportationManager; 00102 }
std::vector< G4VPhysicalVolume * >::iterator G4TransportationManager::GetWorldsIterator | ( | ) | [inline] |
Definition at line 151 of file G4TransportationManager.icc.
Referenced by G4VisCommandSceneAddVolume::SetNewValue(), and G4PhysicalVolumeModel::Validate().
00152 { 00153 std::vector<G4VPhysicalVolume*>::iterator iterator 00154 = std::vector<G4VPhysicalVolume*>::iterator(fWorlds.begin()); 00155 return iterator; 00156 }
void G4TransportationManager::InactivateAll | ( | ) |
Definition at line 352 of file G4TransportationManager.cc.
Referenced by G4CoupledTransportation::EndTracking().
00353 { 00354 std::vector<G4Navigator*>::iterator pNav; 00355 for (pNav=fActiveNavigators.begin(); pNav!=fActiveNavigators.end(); pNav++) 00356 { 00357 (*pNav)->Activate(false); 00358 } 00359 fActiveNavigators.clear(); 00360 00361 // Restore status for the navigator for tracking 00362 // 00363 fNavigators[0]->Activate(true); 00364 fActiveNavigators.push_back(fNavigators[0]); 00365 }
G4VPhysicalVolume * G4TransportationManager::IsWorldExisting | ( | const G4String & | worldName | ) |
Definition at line 374 of file G4TransportationManager.cc.
Referenced by G4RunManager::ConstructScoringWorlds(), GetNavigator(), GetParallelWorld(), and G4FastSimulationManagerProcess::SetWorldVolume().
00375 { 00376 std::vector<G4VPhysicalVolume*>::iterator pWorld = fWorlds.begin(); 00377 if (*pWorld==0) { *pWorld=fNavigators[0]->GetWorldVolume(); } 00378 00379 for (pWorld=fWorlds.begin(); pWorld!=fWorlds.end(); pWorld++) 00380 { 00381 if ((*pWorld)->GetName() == name ) { return *pWorld; } 00382 } 00383 return 0; 00384 }
void G4TransportationManager::SetFieldManager | ( | G4FieldManager * | newFieldManager | ) |
Definition at line 109 of file G4TransportationManager.cc.
00110 { 00111 fFieldManager = newFieldManager; 00112 00113 // Message the PropagatorInField, 00114 // which also maintains this information (to be reviewed) 00115 // 00116 if( fPropagatorInField ) 00117 { 00118 fPropagatorInField -> SetDetectorFieldManager( newFieldManager ); 00119 } 00120 }
void G4TransportationManager::SetNavigatorForTracking | ( | G4Navigator * | newNavigator | ) | [inline] |
void G4TransportationManager::SetPropagatorInField | ( | G4PropagatorInField * | newFieldPropagator | ) | [inline] |
void G4TransportationManager::SetWorldForTracking | ( | G4VPhysicalVolume * | theWorld | ) | [inline] |
Definition at line 56 of file G4TransportationManager.icc.
Referenced by G4RunManagerKernel::DefineWorldVolume().