18#include "BDSColours.hh"
19#include "BDSColourFromMaterial.hh"
20#include "BDSGeometryExternal.hh"
21#include "BDSGeometryFactoryBase.hh"
22#include "BDSGlobalConstants.hh"
23#include "BDSSDType.hh"
24#include "BDSUtilities.hh"
27#include "G4AssemblyVolume.hh"
29#include "G4LogicalVolume.hh"
30#include "G4RotationMatrix.hh"
32#include "G4VisAttributes.hh"
33#include "G4VPhysicalVolume.hh"
40BDSGeometryFactoryBase::BDSGeometryFactoryBase()
45BDSGeometryFactoryBase::~BDSGeometryFactoryBase()
49 const std::map<G4String, G4Colour*>& mapping,
51 const G4String& prefixToStripFromName)
53 std::set<G4VisAttributes*> visAttributes;
56 if (mapping.empty() && !autoColour)
57 {
return visAttributes;}
59 if (mapping.size() == 1)
62 vis->SetVisibility(
true);
63 visAttributes.insert(vis);
65 {lv->SetVisAttributes(*vis);}
71 std::map<G4String, G4VisAttributes*> attMap;
72 for (
const auto& it : mapping)
74 G4VisAttributes* vis =
new G4VisAttributes(*(it.second));
75 vis->SetVisibility(
true);
76 visAttributes.insert(vis);
77 attMap[it.first] = vis;
82 const G4String& name = lv->GetName();
83 for (
const auto& it : attMap)
87 lv->SetVisAttributes(it.second);
97 const G4VisAttributes* existingVis = lv->GetVisAttributes();
101 G4VisAttributes* vis =
new G4VisAttributes(*c);
102 vis->SetVisibility(
true);
103 visAttributes.insert(vis);
104 lv->SetVisAttributes(vis);
108 return visAttributes;
112 G4UserLimits* userLimits)
114 for (
auto& lv : lvsIn)
115 {lv->SetUserLimits(userLimits);}
119 const std::set<G4LogicalVolume*>& allLogicalVolumesIn,
121 const std::set<G4LogicalVolume*>& vacuumLogicalVolumes,
124 std::map<G4LogicalVolume*, BDSSDType> sensitivityMapping;
125 std::set<G4LogicalVolume*> notVacuumVolumes;
126 std::set_difference(allLogicalVolumesIn.begin(),
127 allLogicalVolumesIn.end(),
128 vacuumLogicalVolumes.begin(),
129 vacuumLogicalVolumes.end(),
130 std::inserter(notVacuumVolumes, notVacuumVolumes.begin()));
131 for (
auto lv : notVacuumVolumes)
132 {sensitivityMapping[lv] = generalSensitivity;}
133 for (
auto lv : vacuumLogicalVolumes)
134 {sensitivityMapping[lv] = vacuumSensitivity;}
144 const G4String& )
const
148 std::vector<G4String>* volumeNames,
149 G4bool preprocessFile,
150 const G4String& componentName)
const
153 {
return std::set<G4LogicalVolume*>();}
155 std::vector<G4String> expectedVolumeNames;
159 expectedVolumeNames.resize(volumeNames->size());
160 std::transform(volumeNames->begin(),
162 expectedVolumeNames.begin(),
163 [&](
const G4String& n){return PreprocessedName(n, componentName);});
166 {expectedVolumeNames = *volumeNames;}
168 std::set<G4LogicalVolume*> volsMatched;
169 for (
const auto& en : expectedVolumeNames)
171 for (
auto lv : allLVs)
173 if (lv->GetName() == en)
174 {volsMatched.insert(lv);}
202 G4double y0, G4double ry,
203 G4double z0, G4double rz)
214 G4double y0, G4double yLow, G4double yHigh,
215 G4double z0, G4double zLow, G4double zHigh)
static BDSColourFromMaterial * Instance()
Singleton pattern.
G4Colour * GetColour(const G4Material *material, const G4String &prefixToStripFromName="")
Get colour from name.
static BDSColours * Instance()
singleton pattern
Holder for +- extents in 3 dimensions.
G4double XPos() const
Accessor.
G4double ZPos() const
Accessor.
G4double XNeg() const
Accessor.
G4double YNeg() const
Accessor.
G4double YPos() const
Accessor.
G4double ZNeg() const
Accessor.
virtual void FactoryBaseCleanUp()
Empty containers for next use - factories are never deleted so can't rely on scope.
void RegisterSensitiveVolume(G4LogicalVolume *sensitiveVolume, BDSSDType sensitivityType)
A loaded piece of externally provided geometry.
G4double ymax
Extent in one dimension.
virtual void ApplySensitivity(BDSGeometryExternal *result, const std::set< G4LogicalVolume * > &allLogicalVolumesIn, BDSSDType generalSensitivity, const std::set< G4LogicalVolume * > &vacuumLogicalVolumes, BDSSDType vacuumSensitivity)
Attach the relevant general and vacuum sensitivity to each volume.
void ExpandExtent(const BDSExtent &extent)
Expand the acuumulated extents using a (possibly asymmetric) extent instance.
virtual G4String PreprocessedName(const G4String &objectName, const G4String &acceleratorComponentName) const
std::set< G4LogicalVolume * > GetVolumes(const std::set< G4LogicalVolume * > &allLVs, std::vector< G4String > *volumeNames, G4bool preprocessGDML, const G4String &componentName) const
Get the volumes that match the name. Volume names are matched exactly and are case sensitive.
virtual void CleanUp()
Virtual clean up that derived classes can override that calls CleanUpBase().
G4double xmin
Extent in one dimension.
G4double ymin
Extent in one dimension.
G4double zmin
Extent in one dimension.
G4double zmax
Extent in one dimension.
G4double xmax
Extent in one dimension.
virtual void ApplyUserLimits(const std::set< G4LogicalVolume * > &lvsIn, G4UserLimits *userLimits)
Attach a set of user limits to every logical volume supplied.
virtual std::set< G4VisAttributes * > ApplyColourMapping(const std::set< G4LogicalVolume * > &lvs, const std::map< G4String, G4Colour * > &mapping, G4bool autoColour, const G4String &preprocessPrefix="")
Improve type-safety of native enum data type in C++.
G4bool StrContains(const G4String &str, const G4String &test)
Utility function to simplify lots of syntax changes for pedantic g4 changes.