18#include "BDSAppropriateTubs.hh"
19#include "BDSColours.hh"
21#include "BDSExtent.hh"
22#include "BDSGeometryComponent.hh"
23#include "BDSGlobalConstants.hh"
24#include "BDSMagnetOuterFactoryBase.hh"
25#include "BDSMaterials.hh"
30#include "G4CutTubs.hh"
31#include "G4LogicalVolume.hh"
33#include "G4VisAttributes.hh"
37BDSMagnetOuterFactoryBase::BDSMagnetOuterFactoryBase()
55 containerSolid =
nullptr;
56 magnetContainerSolid =
nullptr;
59 containerLV =
nullptr;
60 magnetContainerLV =
nullptr;
62 outerVisAttributes =
nullptr;
64 magnetContainer =
nullptr;
66 inputFaceNormal = G4ThreeVector(0,0,-1);
67 outputFaceNormal = G4ThreeVector(0,0, 1);
72 G4Material* outerMaterial)
88 containerLV =
new G4LogicalVolume(containerSolid,
90 name +
"_outer_container_lv");
92 magnetContainerLV =
new G4LogicalVolume(magnetContainerSolid,
94 name +
"_container_lv");
97 G4VisAttributes* outerVisAttr;
99 {outerVisAttr =
new G4VisAttributes(*colour);}
102 outerVisAttr->SetVisibility(
true);
104 allVisAttributes.insert(outerVisAttr);
106 {poleLV->SetVisAttributes(outerVisAttr);}
107 yokeLV->SetVisAttributes(outerVisAttr);
121 for (
auto& lv : allLogicalVolumes)
126 G4double magnetContainerLength,
127 G4double magnetContainerRadius,
131 magnetContainerSolid = BDS::AppropriateTubs(name +
"_container_solid",
133 magnetContainerRadius,
134 magnetContainerLength * 0.5,
141 magContExtent =
BDSExtent(magnetContainerRadius, magnetContainerRadius, magnetContainerLength*0.5);
145 G4double magnetContainerLength,
146 G4double magnetContainerRadius)
149 magnetContainerSolid =
new G4Tubs(name +
"_container_solid",
151 magnetContainerRadius,
152 magnetContainerLength * 0.5,
156 magContExtent =
BDSExtent(magnetContainerRadius, magnetContainerRadius, magnetContainerLength*0.5);
159void 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.