18#ifndef BDSMAGNETOUTERFACTORYBASE_H
19#define BDSMAGNETOUTERFACTORYBASE_H
21#include "BDSExtent.hh"
22#include "BDSFactoryBase.hh"
23#include "BDSMagnetOuter.hh"
38class G4VPhysicalVolume;
71 G4double containerLength,
79 G4double containerLength,
87 G4double containerLength,
96 G4double containerLength,
104 G4double containerLength,
112 G4double containerLength,
120 G4double containerLength,
128 G4double containerLength,
136 G4double containerLength,
144 G4double containerLength,
152 G4double containerLength,
173 G4Material* outerMaterial);
181 G4double magnetContainerLength,
182 G4double magnetContainerRadius,
183 G4bool flatFaces =
false);
188 G4double magnetContainerLength,
189 G4double magnetContainerRadius);
191 void CreateMagnetContainerComponent();
205 G4VSolid* containerSolid;
206 G4VSolid* magnetContainerSolid;
207 G4LogicalVolume* poleLV;
208 G4LogicalVolume* yokeLV;
209 G4LogicalVolume* containerLV;
210 G4LogicalVolume* magnetContainerLV;
211 G4VPhysicalVolume* yokePV;
212 G4VisAttributes* outerVisAttributes;
217 G4ThreeVector inputFaceNormal;
218 G4ThreeVector outputFaceNormal;
A holder class for a piece of beam pipe geometry.
Holder for +- extents in 3 dimensions.
Common temporary storage for all factories no matter what geometry.
A generic geometry component for a bdsim model.
Abstract base class for magnet outer volume factories.
virtual BDSMagnetOuter * CreateQuadrupole(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
quadrupole outer volume
virtual BDSMagnetOuter * CreateSolenoid(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
solenoid outer volume
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.
virtual BDSMagnetOuter * CreateKicker(G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe, G4bool vertical)=0
horizontal and vertical kicker outer volume
void CleanUpBase()
Non-virtual clean up that can be used in the constructor.
virtual BDSMagnetOuter * CreateRectangularBend(G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
rectangular bend outer volume
virtual BDSMagnetOuter * CreateDecapole(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
decapole outer volume
virtual BDSMagnetOuter * CreateSectorBend(G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
sector bend outer volume
G4VSolid * poleSolid
Solid for an individual pole that will be placed multiple times.
virtual BDSMagnetOuter * CreateMuonSpoiler(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
muon spoiler outer volume
virtual ~BDSMagnetOuterFactoryBase()
Virtual base destructor.
virtual void SetUserLimits()
Attach default user limits to all logical volumes.
G4bool sensitiveOuter
Cache of global constants variable.
virtual BDSMagnetOuter * CreateMultipole(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
general multipole outer volume - could be any 2N order multipole
G4VSolid * yokeSolid
Solid for outer part that connects all poles.
virtual BDSMagnetOuter * CreateOctupole(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
octupole outer volume
virtual BDSMagnetOuter * CreateRfCavity(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
RF cavity outer volume.
virtual BDSMagnetOuter * CreateSextupole(G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
sextupole outer volume
void BuildMagnetContainerSolidStraight(const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius)
void BuildMagnetContainerSolidAngled(const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius, G4bool flatFaces=false)
Holder struct of all information required to create the outer geometry of a magnet.
An object for both the returned magnet outer body but also a tight fitting container for the whole ma...