46 #define G4MT_fsmanager ((subInstanceManager.offset[instanceID]).fFastSimulationManager) 47 #define G4MT_rsaction ((subInstanceManager.offset[instanceID]).fRegionalSteppingAction) 81 std::ostringstream message;
82 message <<
"The region has NOT been registered !" <<
G4endl 83 <<
" Region " << pName <<
" already existing in store !" 179 std::ostringstream message;
180 message <<
"Logical volume <" << lv->
GetName() <<
">" <<
G4endl 181 <<
"does not have a valid material pointer." <<
G4endl 182 <<
"A logical volume belonging to the (tracking) world volume " 183 <<
"must have a valid material.";
184 G4Exception(
"G4Region::ScanVolumeTree()",
"GeomMgt0002",
189 currentRegion =
this;
205 if(noDaughters==0)
return;
223 std::ostringstream message;
224 message <<
"The parameterisation for the physical volume <" 226 <<
"does not return a valid material pointer." <<
G4endl 227 <<
"A volume belonging to the (tracking) world volume must " 228 <<
"have a valid material.";
229 G4Exception(
"G4Region::ScanVolumeTree()",
"GeomMgt0002",
243 for (
size_t rep=0; rep<repNo; rep++)
248 std::ostringstream message;
249 message <<
"The parameterisation for the physical volume <" 251 <<
"does not return a valid material pointer." <<
G4endl 252 <<
"A volume belonging to the (tracking) world volume must " 253 <<
"have a valid material.";
254 G4Exception(
"G4Region::ScanVolumeTree()",
"GeomMgt0002",
270 for (
size_t i=0; i<noDaughters; i++)
294 G4RootLVList::iterator
pos;
323 G4RootLVList::iterator
pos;
369 G4RootLVList::iterator pLV;
401 if (currLog->
GetRegion()==
this) {
return true;}
430 std::ostringstream message;
431 message <<
"Region <" <<
fName <<
"> belongs to more than" 432 <<
" one parent region !" <<
G4endl 433 <<
"A region cannot belong to more than one direct parent region," 435 <<
"to have fast-simulation assigned.";
436 G4Exception(
"G4Region::ClearFastSimulationManager()",
455 G4Region* parent = 0; unique =
true;
457 G4LogicalVolumeStore::iterator lvItr;
461 for(lvItr=lvStore->begin(); lvItr!=lvStore->end(); lvItr++)
463 G4int nD = (*lvItr)->GetNoDaughters();
464 G4Region* aR = (*lvItr)->GetRegion();
468 for(
G4int iD=0; iD<nD; iD++)
470 if((*lvItr)->GetDaughter(iD)->GetLogicalVolume()->GetRegion()==
this)
474 if(parent!=aR) { unique =
false; }
G4Region * GetParentRegion(G4bool &unique) const
virtual G4VVolumeMaterialScanner * GetMaterialScanner()
virtual G4Material * ComputeMaterial(const G4int repNo, G4VPhysicalVolume *currentVol, const G4VTouchable *parentTouch=0)
static G4GEOM_DLL G4RegionManager subInstanceManager
void AddRootLogicalVolume(G4LogicalVolume *lv)
G4int GetNoDaughters() const
void SetRegionRootFlag(G4bool rreg)
virtual G4int GetMultiplicity() const
G4VUserRegionInformation * fUserInfo
G4Material * GetMaterial() const
G4int CreateSubInstance()
static void DeRegister(G4Region *pRegion)
G4VPhysicalVolume * fWorldPhys
virtual G4int GetNumberOfMaterials() const =0
static G4RegionStore * GetInstance()
void SetFastSimulationManager(G4FastSimulationManager *fsm)
void SetRegion(G4Region *reg)
G4UserLimits * fUserLimits
virtual G4Material * GetMaterial(G4int idx) const =0
G4Region(const G4String &name)
void ScanVolumeTree(G4LogicalVolume *lv, G4bool region)
const G4String & GetName() const
G4FastSimulationManager * GetFastSimulationManager() const
G4bool IsRootRegion() const
virtual G4VPVParameterisation * GetParameterisation() const =0
void AddMaterial(G4Material *aMaterial)
static G4LogicalVolumeStore * GetInstance()
void ClearFastSimulationManager()
G4bool BelongsTo(G4VPhysicalVolume *thePhys) const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4bool IsParameterised() const =0
const G4String & GetName() const
void SetWorld(G4VPhysicalVolume *wp)
G4Region * GetRegion() const
G4VPhysicalVolume * GetDaughter(const G4int i) const
G4bool fInParallelGeometry
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const
void UpdateMaterialList()
void SetRegionalSteppingAction(G4UserSteppingAction *rusa)
G4MaterialList fMaterials
G4LogicalVolume * GetLogicalVolume() const
G4UserSteppingAction * GetRegionalSteppingAction() const
void RemoveRootLogicalVolume(G4LogicalVolume *lv, G4bool scan=true)
static const G4RegionManager & GetSubInstanceManager()
const G4Material * GetBaseMaterial() const
static void Register(G4Region *pRegion)
static const G4double pos
G4FieldManager * fFieldManager
G4RootLVList fRootVolumes