BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
|
Abstract base class for magnet outer volume factories. More...
#include <BDSMagnetOuterFactoryBase.hh>
Public Member Functions | |
virtual BDSMagnetOuter * | CreateSectorBend (G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
sector bend outer volume | |
virtual BDSMagnetOuter * | CreateRectangularBend (G4String name, G4double length, const BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
rectangular bend outer volume | |
virtual BDSMagnetOuter * | CreateQuadrupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
quadrupole outer volume | |
virtual BDSMagnetOuter * | CreateSextupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
sextupole outer volume | |
virtual BDSMagnetOuter * | CreateOctupole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
octupole outer volume | |
virtual BDSMagnetOuter * | CreateDecapole (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
decapole outer volume | |
virtual BDSMagnetOuter * | CreateSolenoid (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
solenoid outer volume | |
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 | |
virtual BDSMagnetOuter * | CreateRfCavity (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
RF cavity outer volume. | |
virtual BDSMagnetOuter * | CreateMuonSpoiler (G4String name, G4double length, BDSBeamPipe *beamPipe, G4double containerLength, const BDSMagnetOuterInfo *recipe)=0 |
muon spoiler outer volume | |
virtual BDSMagnetOuter * | CreateKicker (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. | |
![]() | |
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 |
BDSGeometryComponent * | magnetContainer |
G4ThreeVector | inputFaceNormal |
G4ThreeVector | outputFaceNormal |
G4bool | sensitiveOuter |
Cache of global constants variable. | |
![]() | |
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. | |
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'.
Definition at line 65 of file BDSMagnetOuterFactoryBase.hh.
|
inlinevirtual |
Virtual base destructor.
Definition at line 165 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 38 of file BDSMagnetOuterFactoryBase.cc.
|
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().
|
protected |
Utility function to make cylindrical magnetContainerSolid in the case of flat faces
Definition at line 145 of file BDSMagnetOuterFactoryBase.cc.
References BDSFactoryBase::lengthSafetyLarge.
Referenced by BDSMagnetOuterFactoryCylindrical::CreateCylindricalSolids(), BDSMagnetOuterFactoryLHC::CreateQuadrupole(), BDSMagnetOuterFactoryCylindrical::CreateRectangularBend(), BDSMagnetOuterFactoryCylindrical::CreateSectorBend(), and BDSMagnetOuterFactoryPolesBase::CreateYokeAndContainerSolid().
|
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().
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().
|
pure virtual |
decapole outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactoryLHC::CreateDecapole(), and BDSMagnetOuterFactory::CreateMagnetOuter().
|
pure virtual |
horizontal and vertical kicker outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().
|
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().
|
protected |
Definition at line 160 of file BDSMagnetOuterFactoryBase.cc.
|
pure virtual |
general multipole outer volume - could be any 2N order multipole
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), BDSMagnetOuterFactoryLHC::CreateMultipole(), and BDSMagnetOuterFactoryPolesBase::CreateMultipole().
|
pure virtual |
muon spoiler outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), BDSMagnetOuterFactoryLHC::CreateMuonSpoiler(), and BDSMagnetOuterFactoryPolesBase::CreateMuonSpoiler().
|
pure virtual |
octupole outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), and BDSMagnetOuterFactoryLHC::CreateOctupole().
|
pure virtual |
quadrupole outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().
|
pure virtual |
rectangular bend outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().
|
pure virtual |
RF cavity outer volume.
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), BDSMagnetOuterFactoryLHC::CreateRfCavity(), and BDSMagnetOuterFactoryPolesBase::CreateRfCavity().
|
pure virtual |
sector bend outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter().
|
pure virtual |
sextupole outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), and BDSMagnetOuterFactoryLHC::CreateSextupole().
|
pure virtual |
solenoid outer volume
Implemented in BDSMagnetOuterFactoryCylindrical, BDSMagnetOuterFactoryLHC, BDSMagnetOuterFactoryNone, and BDSMagnetOuterFactoryPolesBase.
Referenced by BDSMagnetOuterFactory::CreateMagnetOuter(), BDSMagnetOuterFactoryLHC::CreateSolenoid(), and BDSMagnetOuterFactoryPolesBase::CreateSolenoid().
|
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().
|
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().
|
protected |
Definition at line 210 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 206 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 218 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 215 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 216 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 211 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 207 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 213 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 219 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 208 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Solid for an individual pole that will be placed multiple times.
Definition at line 204 of file BDSMagnetOuterFactoryBase.hh.
Referenced by CleanUpBase(), CreateLogicalVolumes(), BDSMagnetOuterFactoryPolesBase::CreatePoleSolid(), BDSMagnetOuterFactoryPolesBase::IntersectPoleWithYoke(), and BDSMagnetOuterFactoryPolesSquare::IntersectPoleWithYoke().
|
protected |
Cache of global constants variable.
Definition at line 198 of file BDSMagnetOuterFactoryBase.hh.
Referenced by BDSMagnetOuterFactoryPolesBase::CommonConstructor(), BDSMagnetOuterFactoryPolesSquare::CommonConstructor(), BDSMagnetOuterFactoryCylindrical::CommonFinalConstructor(), and BDSMagnetOuterFactoryPolesBase::CreateEndPiece().
|
protected |
Definition at line 209 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Definition at line 212 of file BDSMagnetOuterFactoryBase.hh.
|
protected |
Solid for outer part that connects all poles.
Definition at line 205 of file BDSMagnetOuterFactoryBase.hh.
Referenced by CleanUpBase(), BDSMagnetOuterFactoryCylindrical::CreateCylindricalSolids(), BDSMagnetOuterFactoryPolesBase::CreateDipoleC(), BDSMagnetOuterFactoryPolesBase::CreateDipoleH(), BDSMagnetOuterFactoryLHC::CreateLHCDipole(), CreateLogicalVolumes(), BDSMagnetOuterFactoryPolesSquare::CreateLogicalVolumes(), BDSMagnetOuterFactoryLHC::CreateQuadrupole(), BDSMagnetOuterFactoryPolesBase::CreateYokeAndContainerSolid(), BDSMagnetOuterFactoryPolesFacetCommon::CreateYokeAndContainerSolid(), and BDSMagnetOuterFactoryPolesSquare::CreateYokeAndContainerSolid().