19#include "BDSAppropriateTubs.hh"
20#include "BDSColours.hh"
22#include "BDSExtent.hh"
23#include "BDSGeometryComponent.hh"
24#include "BDSGlobalConstants.hh"
25#include "BDSMagnetOuterFactoryBase.hh"
26#include "BDSMaterials.hh"
31#include "G4CutTubs.hh"
32#include "G4LogicalVolume.hh"
34#include "G4VisAttributes.hh"
38BDSMagnetOuterFactoryBase::BDSMagnetOuterFactoryBase()
56 containerSolid =
nullptr;
57 magnetContainerSolid =
nullptr;
60 containerLV =
nullptr;
61 magnetContainerLV =
nullptr;
63 outerVisAttributes =
nullptr;
65 magnetContainer =
nullptr;
67 inputFaceNormal = G4ThreeVector(0,0,-1);
68 outputFaceNormal = G4ThreeVector(0,0, 1);
73 G4Material* outerMaterial)
89 containerLV =
new G4LogicalVolume(containerSolid,
91 name +
"_outer_container_lv");
93 magnetContainerLV =
new G4LogicalVolume(magnetContainerSolid,
95 name +
"_container_lv");
98 G4VisAttributes* outerVisAttr;
100 {outerVisAttr =
new G4VisAttributes(*colour);}
103 outerVisAttr->SetVisibility(
true);
105 allVisAttributes.insert(outerVisAttr);
107 {poleLV->SetVisAttributes(outerVisAttr);}
108 yokeLV->SetVisAttributes(outerVisAttr);
122 for (
auto& lv : allLogicalVolumes)
127 G4double magnetContainerLength,
128 G4double magnetContainerRadius,
132 magnetContainerSolid = BDS::AppropriateTubs(name +
"_container_solid",
134 magnetContainerRadius,
135 magnetContainerLength * 0.5,
142 magContExtent =
BDSExtent(magnetContainerRadius, magnetContainerRadius, magnetContainerLength*0.5);
146 G4double magnetContainerLength,
147 G4double magnetContainerRadius)
150 magnetContainerSolid =
new G4Tubs(name +
"_container_solid",
152 magnetContainerRadius,
153 magnetContainerLength * 0.5,
157 magContExtent =
BDSExtent(magnetContainerRadius, magnetContainerRadius, magnetContainerLength*0.5);
160void BDSMagnetOuterFactoryBase::CreateMagnetContainerComponent()
static BDSColours * Instance()
singleton pattern
Holder for +- extents in 3 dimensions.
G4VisAttributes * containerVisAttr
Cache of global constants variable.
G4double lengthSafetyLarge
Cache of global constants variable.
G4int nSegmentsPerCircle
Cache of global constants variable.
G4UserLimits * defaultUserLimits
Cache of global constants variable.
virtual void FactoryBaseCleanUp()
Empty containers for next use - factories are never deleted so can't rely on scope.
A generic geometry component for a bdsim model.
static BDSGlobalConstants * Instance()
Access method.
virtual void CleanUp()
Empty containers for next use - factories are never deleted so can't rely on scope.
virtual void CreateLogicalVolumes(const G4String &name, G4Colour *colour, G4Material *outerMaterial)
void SetFaceNormals(BDSMagnetOuter *outer)
Copy face normals from members to an instance of outer.
void CleanUpBase()
Non-virtual clean up that can be used in the constructor.
G4VSolid * poleSolid
Solid for an individual pole that will be placed multiple times.
virtual void SetUserLimits()
Attach default user limits to all logical volumes.
G4bool sensitiveOuter
Cache of global constants variable.
G4VSolid * yokeSolid
Solid for outer part that connects all poles.
void BuildMagnetContainerSolidStraight(const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius)
void BuildMagnetContainerSolidAngled(const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius, G4bool flatFaces=false)
An object for both the returned magnet outer body but also a tight fitting container for the whole ma...
void SetInputFaceNormal(const G4ThreeVector &input)
Setter for face normals.
void SetOutputFaceNormal(const G4ThreeVector &output)
Setter for face normals.
static BDSMaterials * Instance()
Singleton pattern access.
G4Material * GetMaterial(G4String material) const
Get material by name.