19#ifndef BDSMAGNETOUTERFACTORYBASE_H
20#define BDSMAGNETOUTERFACTORYBASE_H
22#include "BDSExtent.hh"
23#include "BDSFactoryBase.hh"
24#include "BDSMagnetOuter.hh"
39class G4VPhysicalVolume;
72 G4double containerLength,
80 G4double containerLength,
88 G4double containerLength,
97 G4double containerLength,
105 G4double containerLength,
113 G4double containerLength,
121 G4double containerLength,
129 G4double containerLength,
137 G4double containerLength,
145 G4double containerLength,
153 G4double containerLength,
174 G4Material* outerMaterial);
182 G4double magnetContainerLength,
183 G4double magnetContainerRadius,
184 G4bool flatFaces =
false);
189 G4double magnetContainerLength,
190 G4double magnetContainerRadius);
192 void CreateMagnetContainerComponent();
206 G4VSolid* containerSolid;
207 G4VSolid* magnetContainerSolid;
208 G4LogicalVolume* poleLV;
209 G4LogicalVolume* yokeLV;
210 G4LogicalVolume* containerLV;
211 G4LogicalVolume* magnetContainerLV;
212 G4VPhysicalVolume* yokePV;
213 G4VisAttributes* outerVisAttributes;
218 G4ThreeVector inputFaceNormal;
219 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...