BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes
BDSMagnetOuterFactoryBase Class Referenceabstract

Abstract base class for magnet outer volume factories. More...

#include <BDSMagnetOuterFactoryBase.hh>

Inheritance diagram for BDSMagnetOuterFactoryBase:
Inheritance graph
Collaboration diagram for BDSMagnetOuterFactoryBase:
Collaboration graph

Public Member Functions

virtual BDSMagnetOuterCreateSectorBend (G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 sector bend outer volume
 
virtual BDSMagnetOuterCreateRectangularBend (G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 rectangular bend outer volume
 
virtual BDSMagnetOuterCreateQuadrupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 quadrupole outer volume
 
virtual BDSMagnetOuterCreateSextupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 sextupole outer volume
 
virtual BDSMagnetOuterCreateOctupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 octupole outer volume
 
virtual BDSMagnetOuterCreateDecapole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 decapole outer volume
 
virtual BDSMagnetOuterCreateSolenoid (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 solenoid outer volume
 
virtual BDSMagnetOuterCreateMultipole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 general multipole outer volume - could be any 2N order multipole
 
virtual BDSMagnetOuterCreateRfCavity (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 RF cavity outer volume.
 
virtual BDSMagnetOuterCreateMuonSpoiler (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0
 muon spoiler outer volume
 
virtual BDSMagnetOuterCreateKicker (G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe, G4bool vertical)=0
 horizontal and vertical kicker outer volume
 
virtual void CleanUp ()
 Empty containers for next use - factories are never deleted so can't rely on scope.
 
void CleanUpBase ()
 Non-virtual clean up that can be used in the constructor.
 
virtual ~BDSMagnetOuterFactoryBase ()
 Virtual base destructor.
 
- Public Member Functions inherited from BDSFactoryBase
virtual void FactoryBaseCleanUp ()
 Empty containers for next use - factories are never deleted so can't rely on scope.
 

Protected Member Functions

virtual void CreateLogicalVolumes (const G4String &name, G4Colour *colour, G4Material *outerMaterial)
 
virtual void SetUserLimits ()
 Attach default user limits to all logical volumes.
 
void BuildMagnetContainerSolidAngled (const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius, G4bool flatFaces=false)
 
void BuildMagnetContainerSolidStraight (const G4String &name, G4double magnetContainerLength, G4double magnetContainerRadius)
 
void CreateMagnetContainerComponent ()
 
void SetFaceNormals (BDSMagnetOuter *outer)
 Copy face normals from members to an instance of outer.
 

Protected Attributes

G4VSolid * poleSolid
 Solid for an individual pole that will be placed multiple times.
 
G4VSolid * yokeSolid
 Solid for outer part that connects all poles.
 
G4VSolid * containerSolid
 
G4VSolid * magnetContainerSolid
 
G4LogicalVolume * poleLV
 
G4LogicalVolume * yokeLV
 
G4LogicalVolume * containerLV
 
G4LogicalVolume * magnetContainerLV
 
G4VPhysicalVolume * yokePV
 
G4VisAttributes * outerVisAttributes
 
BDSExtent magContExtent
 
BDSGeometryComponentmagnetContainer
 
G4ThreeVector inputFaceNormal
 
G4ThreeVector outputFaceNormal
 
G4bool sensitiveOuter
 Cache of global constants variable.
 
- Protected Attributes inherited from BDSFactoryBase
std::set< G4LogicalVolume * > allLogicalVolumes
 
std::set< G4VPhysicalVolume * > allPhysicalVolumes
 
std::set< G4RotationMatrix * > allRotationMatrices
 
std::set< G4UserLimits * > allUserLimits
 
std::set< G4VSolid * > allSolids
 
std::set< G4VisAttributes * > allVisAttributes
 
G4double lengthSafety
 Cache of global constants variable.
 
G4double lengthSafetyLarge
 Cache of global constants variable.
 
G4bool checkOverlaps
 Cache of global constants variable.
 
G4bool visDebug
 Cache of global constants variable.
 
G4int nSegmentsPerCircle
 Cache of global constants variable.
 
G4VisAttributes * containerVisAttr
 Cache of global constants variable.
 
G4UserLimits * defaultUserLimits
 Cache of global constants variable.
 

Detailed Description

Abstract base class for magnet outer volume factories.

Abstract base class that defines the interface of each factory to build any type of outer logical volume required.

Uses Geant4 default units by default, ie mm, rad (not metres)

Strictly the naming should contain 'Outer' at the end to distinguish that the function doesn't create the whole magnet, however this is implied by the factory name and omitting it will reduce the name length.

Each factory should implement a method for every type of magnet - ie for each class that inherits BDSMagnet.

NOTE each derived class is expected to be a singleton but this can't be specified here as it'd refer to the abstract base class - must be implemented in each derived class. 'In' in argument variables is used to distinguish between that and possible internal member variables with the same name - avoiding 'itsVariable'.

Author
Laurie Nevay

Definition at line 65 of file BDSMagnetOuterFactoryBase.hh.

Constructor & Destructor Documentation

◆ ~BDSMagnetOuterFactoryBase()

virtual BDSMagnetOuterFactoryBase::~BDSMagnetOuterFactoryBase ( )
inlinevirtual

Virtual base destructor.

Definition at line 165 of file BDSMagnetOuterFactoryBase.hh.

◆ BDSMagnetOuterFactoryBase()

BDSMagnetOuterFactoryBase::BDSMagnetOuterFactoryBase ( )
protected

Definition at line 38 of file BDSMagnetOuterFactoryBase.cc.

Member Function Documentation

◆ BuildMagnetContainerSolidAngled()

void BDSMagnetOuterFactoryBase::BuildMagnetContainerSolidAngled ( const G4String &  name,
G4double  magnetContainerLength,
G4double  magnetContainerRadius,
G4bool  flatFaces = false 
)
protected

Utility function to make cylindrical magnetContainerSolid in the case of one with angled faces

Definition at line 126 of file BDSMagnetOuterFactoryBase.cc.

References BDSFactoryBase::lengthSafetyLarge.

Referenced by BDSMagnetOuterFactoryLHC::CreateLHCDipole(), BDSMagnetOuterFactoryCylindrical::CreateRectangularBend(), and BDSMagnetOuterFactoryCylindrical::CreateSectorBend().

Here is the caller graph for this function:

◆ BuildMagnetContainerSolidStraight()

void BDSMagnetOuterFactoryBase::BuildMagnetContainerSolidStraight ( const G4String &  name,
G4double  magnetContainerLength,
G4double  magnetContainerRadius 
)
protected

◆ CleanUp()

void BDSMagnetOuterFactoryBase::CleanUp ( )
virtual

Empty containers for next use - factories are never deleted so can't rely on scope.

Reimplemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryPolesBase, and BDSMagnetOuterFactoryPolesSquare.

Definition at line 46 of file BDSMagnetOuterFactoryBase.cc.

References CleanUpBase().

Referenced by BDSMagnetOuterFactoryCylindrical::CleanUp(), BDSMagnetOuterFactoryPolesBase::CleanUp(), BDSMagnetOuterFactoryLHC::CreateLHCDipole(), and BDSMagnetOuterFactoryLHC::CreateQuadrupole().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CleanUpBase()

void BDSMagnetOuterFactoryBase::CleanUpBase ( )

Non-virtual clean up that can be used in the constructor.

Definition at line 51 of file BDSMagnetOuterFactoryBase.cc.

References BDSFactoryBase::FactoryBaseCleanUp(), poleSolid, and yokeSolid.

Referenced by CleanUp().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateDecapole()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateDecapole ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateKicker()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateKicker ( G4String  name,
G4double  length,
const BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe,
G4bool  vertical 
)
pure virtual

horizontal and vertical kicker outer volume

Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.

Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().

Here is the caller graph for this function:

◆ CreateLogicalVolumes()

void BDSMagnetOuterFactoryBase::CreateLogicalVolumes ( const G4String &  name,
G4Colour *  colour,
G4Material *  outerMaterial 
)
protectedvirtual

Create logical volumes for yoke, container and magnet container - derived classes can override to extend as they need.

Reimplemented in BDSMagnetOuterFactoryPolesBase, and BDSMagnetOuterFactoryPolesSquare.

Definition at line 71 of file BDSMagnetOuterFactoryBase.cc.

References BDSFactoryBase::containerVisAttr, BDSMaterials::GetMaterial(), BDSColours::Instance(), BDSGlobalConstants::Instance(), BDSMaterials::Instance(), BDSFactoryBase::nSegmentsPerCircle, poleSolid, and yokeSolid.

Referenced by BDSMagnetOuterFactoryCylindrical::CommonFinalConstructor(), and BDSMagnetOuterFactoryPolesBase::CreateLogicalVolumes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateMagnetContainerComponent()

void BDSMagnetOuterFactoryBase::CreateMagnetContainerComponent ( )
protected

Definition at line 160 of file BDSMagnetOuterFactoryBase.cc.

◆ CreateMultipole()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateMultipole ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateMuonSpoiler()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateMuonSpoiler ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateOctupole()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateOctupole ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateQuadrupole()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateQuadrupole ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

quadrupole outer volume

Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.

Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().

Here is the caller graph for this function:

◆ CreateRectangularBend()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateRectangularBend ( G4String  name,
G4double  length,
const BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

rectangular bend outer volume

Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.

Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().

Here is the caller graph for this function:

◆ CreateRfCavity()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateRfCavity ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateSectorBend()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateSectorBend ( G4String  name,
G4double  length,
const BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

sector bend outer volume

Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.

Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().

Here is the caller graph for this function:

◆ CreateSextupole()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateSextupole ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ CreateSolenoid()

virtual BDSMagnetOuter * BDSMagnetOuterFactoryBase::CreateSolenoid ( G4String  name,
G4double  length,
BDSBeamPipe beamPipe,
G4double  containerLength,
const BDSMagnetOuterInfo recipe 
)
pure virtual

◆ SetFaceNormals()

void BDSMagnetOuterFactoryBase::SetFaceNormals ( BDSMagnetOuter outer)
protected

Copy face normals from members to an instance of outer.

Definition at line 168 of file BDSMagnetOuterFactoryBase.cc.

References BDSMagnetOuter::SetInputFaceNormal(), and BDSMagnetOuter::SetOutputFaceNormal().

Referenced by BDSMagnetOuterFactoryPolesBase::CommonConstructor(), BDSMagnetOuterFactoryCylindrical::CommonFinalConstructor(), BDSMagnetOuterFactoryLHC::CreateLHCDipole(), and BDSMagnetOuterFactoryLHC::CreateQuadrupole().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetUserLimits()

void BDSMagnetOuterFactoryBase::SetUserLimits ( )
protectedvirtual

Attach default user limits to all logical volumes.

Definition at line 114 of file BDSMagnetOuterFactoryBase.cc.

References BDSFactoryBase::defaultUserLimits.

Referenced by BDSMagnetOuterFactoryPolesBase::CommonConstructor(), and BDSMagnetOuterFactoryCylindrical::CommonFinalConstructor().

Here is the caller graph for this function:

Field Documentation

◆ containerLV

G4LogicalVolume* BDSMagnetOuterFactoryBase::containerLV
protected

Definition at line 210 of file BDSMagnetOuterFactoryBase.hh.

◆ containerSolid

G4VSolid* BDSMagnetOuterFactoryBase::containerSolid
protected

Definition at line 206 of file BDSMagnetOuterFactoryBase.hh.

◆ inputFaceNormal

G4ThreeVector BDSMagnetOuterFactoryBase::inputFaceNormal
protected

Definition at line 218 of file BDSMagnetOuterFactoryBase.hh.

◆ magContExtent

BDSExtent BDSMagnetOuterFactoryBase::magContExtent
protected

Definition at line 215 of file BDSMagnetOuterFactoryBase.hh.

◆ magnetContainer

BDSGeometryComponent* BDSMagnetOuterFactoryBase::magnetContainer
protected

Definition at line 216 of file BDSMagnetOuterFactoryBase.hh.

◆ magnetContainerLV

G4LogicalVolume* BDSMagnetOuterFactoryBase::magnetContainerLV
protected

Definition at line 211 of file BDSMagnetOuterFactoryBase.hh.

◆ magnetContainerSolid

G4VSolid* BDSMagnetOuterFactoryBase::magnetContainerSolid
protected

Definition at line 207 of file BDSMagnetOuterFactoryBase.hh.

◆ outerVisAttributes

G4VisAttributes* BDSMagnetOuterFactoryBase::outerVisAttributes
protected

Definition at line 213 of file BDSMagnetOuterFactoryBase.hh.

◆ outputFaceNormal

G4ThreeVector BDSMagnetOuterFactoryBase::outputFaceNormal
protected

Definition at line 219 of file BDSMagnetOuterFactoryBase.hh.

◆ poleLV

G4LogicalVolume* BDSMagnetOuterFactoryBase::poleLV
protected

Definition at line 208 of file BDSMagnetOuterFactoryBase.hh.

◆ poleSolid

G4VSolid* BDSMagnetOuterFactoryBase::poleSolid
protected

◆ sensitiveOuter

G4bool BDSMagnetOuterFactoryBase::sensitiveOuter
protected

◆ yokeLV

G4LogicalVolume* BDSMagnetOuterFactoryBase::yokeLV
protected

Definition at line 209 of file BDSMagnetOuterFactoryBase.hh.

◆ yokePV

G4VPhysicalVolume* BDSMagnetOuterFactoryBase::yokePV
protected

Definition at line 212 of file BDSMagnetOuterFactoryBase.hh.

◆ yokeSolid

G4VSolid* BDSMagnetOuterFactoryBase::yokeSolid
protected

The documentation for this class was generated from the following files: