BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
|
Factory that produces fields and their associated objects. More...
#include <BDSFieldFactory.hh>
Public Member Functions | |
BDSFieldObjects * | CreateField (const BDSFieldInfo &info, const BDSMagnetStrength *scalingStrength=nullptr, const G4String &scalingKey="none") |
Main interface to field factory. More... | |
BDSFieldInfo * | GetDefinition (const G4String &name) const |
Static Public Member Functions | |
static BDSFieldFactory * | Instance () |
Public accessor method for singleton pattern. More... | |
static void | SetDesignParticle (const BDSParticleDefinition *designParticleIn) |
Update the internal cache of the rigidity. More... | |
static void | SetPrimaryGeneratorAction (BDSPrimaryGeneratorAction *pgaIn) |
Update the internal cache of the primary generator action. More... | |
static BDSInterpolatorType | DefaultInterpolatorType (G4int numberOfDimensions) |
Suggest a default interpolator. More... | |
Private Member Functions | |
BDSFieldObjects * | CreateFieldMag (const BDSFieldInfo &info, const BDSMagnetStrength *scalingStrength=nullptr, const G4String &scalingKey="none") |
Create a purely magnetic field. More... | |
BDSFieldObjects * | CreateFieldEM (const BDSFieldInfo &info) |
Create a general EM field. More... | |
BDSFieldObjects * | CreateFieldE (const BDSFieldInfo &info) |
Create an electric field. More... | |
BDSFieldObjects * | CreateFieldIrregular (const BDSFieldInfo &info) |
Create an irregular (special) field. More... | |
BDSFieldMag * | CreateFieldMagRaw (const BDSFieldInfo &info, const BDSMagnetStrength *scalingStrength=nullptr, const G4String &scalingKey="none") |
Creat just the magnetic field object. More... | |
BDSFieldE * | CreateFieldERaw (const BDSFieldInfo &info) |
Creat just the electric field object. More... | |
G4MagIntegratorStepper * | CreateIntegratorMag (const BDSFieldInfo &info, G4Mag_EqRhs *eqOfM, const BDSMagnetStrength *strength) |
G4MagIntegratorStepper * | CreateIntegratorEM (const BDSFieldInfo &info, G4EquationOfMotion *eqOfM) |
G4MagIntegratorStepper * | CreateIntegratorE (const BDSFieldInfo &info, G4EquationOfMotion *eqOfM) |
BDSFieldObjects * | CreateTeleporter (const BDSFieldInfo &info) |
BDSFieldObjects * | CreateRMatrix (const BDSFieldInfo &info) |
Create special rmatrix 'field' that applies an rmatrix. More... | |
BDSFieldObjects * | CreateCavityFringe (const BDSFieldInfo &info) |
Create special rf cavity fringe 'field' that applies an rmatrix. More... | |
BDSFieldObjects * | CreateParallelTransport (const BDSFieldInfo &info) |
G4double | GetOuterScaling (const BDSMagnetStrength *st) const |
Return the parameter "outerScaling" from strength st, but default to 1. More... | |
BDSFieldFactory () | |
Private default constructor as singleton class. More... | |
void | PrepareFieldDefinitions (const std::vector< GMAD::Field > &definitions, G4double defaultBRho) |
Prepare all required definitions that can be used dynamically. More... | |
G4double | ConvertToDoubleWithException (const G4String &value, const G4String ¶meterNameForError) const |
Convert the string 'value' to a double. Throw an exception including the parameterNameForError if it doesn't work. More... | |
void | PrepareFieldStrengthFromParameters (BDSMagnetStrength *st, const G4String &fieldParameters, G4double &poleTipRadius) const |
Private Attributes | |
std::map< G4String, BDSFieldInfo * > | parserDefinitions |
BDSFieldInfo definitions prepare from parser vector of definitions. More... | |
G4bool | useOldMultipoleOuterFields |
Static Private Attributes | |
static BDSFieldFactory * | instance = nullptr |
Instance - singleton pattern. More... | |
static const BDSParticleDefinition * | designParticle = nullptr |
Cache of design particle for fields. More... | |
static BDSPrimaryGeneratorAction * | primaryGeneratorAction = nullptr |
Cache of primary generator action. More... | |
Factory that produces fields and their associated objects.
Field objects are created according to a BDSFieldType and the associated and required Geant4 objects to properly implement a field. These are packaged together in one object. This factory does not own any of its products. Construction follows in this order:
1 field 2 equation of motion (based on field object) 3 integrator 4 chord finder 5 field manager 6 package it up
This also makes use of BDSParser singleton class to create a series of BDSFieldInfo field specifications as defined by the parser.
Definition at line 69 of file BDSFieldFactory.hh.
BDSFieldFactory::~BDSFieldFactory | ( | ) |
Definition at line 168 of file BDSFieldFactory.cc.
|
private |
Private default constructor as singleton class.
Definition at line 158 of file BDSFieldFactory.cc.
References BDSParticleDefinition::BRho(), designParticle, BDSGlobalConstants::Instance(), BDSParser::Instance(), and PrepareFieldDefinitions().
Referenced by Instance().
|
private |
Convert the string 'value' to a double. Throw an exception including the parameterNameForError if it doesn't work.
Definition at line 358 of file BDSFieldFactory.cc.
Referenced by PrepareFieldStrengthFromParameters().
|
private |
Create special rf cavity fringe 'field' that applies an rmatrix.
Definition at line 1133 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), and BDSFieldInfo::MagnetStrength().
Referenced by CreateFieldIrregular().
BDSFieldObjects * BDSFieldFactory::CreateField | ( | const BDSFieldInfo & | info, |
const BDSMagnetStrength * | scalingStrength = nullptr , |
||
const G4String & | scalingKey = "none" |
||
) |
Main interface to field factory.
Definition at line 426 of file BDSFieldFactory.cc.
References CreateFieldE(), CreateFieldEM(), CreateFieldIrregular(), CreateFieldMag(), BDS::DetermineFieldClassType(), BDSFieldInfo::FieldType(), and BDSTypeSafeEnum< def, inner >::underlying().
|
private |
Create an electric field.
Definition at line 814 of file BDSFieldFactory.cc.
References CreateFieldERaw(), CreateIntegratorE(), BDSFieldInfo::ProvideGlobal(), and BDSFieldInfo::UsePlacementWorldTransform().
Referenced by CreateField().
|
private |
Create a general EM field.
Definition at line 765 of file BDSFieldFactory.cc.
References BDSFieldInfo::BRho(), CreateIntegratorEM(), BDSFieldInfo::FieldType(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadEMField(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::ProvideGlobal(), BDSFieldEM::SetTransform(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize(), and BDSFieldInfo::UsePlacementWorldTransform().
Referenced by CreateField().
|
private |
Creat just the electric field object.
Definition at line 837 of file BDSFieldFactory.cc.
References BDSFieldInfo::BRho(), CreateFieldERaw(), BDSFieldInfo::ElectricSubFieldName(), BDSFieldInfo::FieldType(), GetDefinition(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadEField(), BDSFieldInfo::MagnetStrength(), BDSFieldE::SetTransform(), BDSFieldInfo::Transform(), BDSFieldInfo::TransformBeamline(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), and BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize().
Referenced by CreateFieldE(), and CreateFieldERaw().
|
private |
Create an irregular (special) field.
Definition at line 889 of file BDSFieldFactory.cc.
References CreateCavityFringe(), CreateParallelTransport(), CreateRMatrix(), CreateTeleporter(), BDSFieldInfo::FieldType(), and BDSTypeSafeEnum< def, inner >::underlying().
Referenced by CreateField().
|
private |
Create a purely magnetic field.
Definition at line 476 of file BDSFieldFactory.cc.
References CreateFieldMagRaw(), CreateIntegratorMag(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::ProvideGlobal(), and BDSFieldInfo::UsePlacementWorldTransform().
Referenced by CreateField().
|
private |
Creat just the magnetic field object.
Definition at line 502 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), BDSMagnetOuterFactoryLHC::beamSeparation, BDSFieldInfo::BRho(), CreateFieldMagRaw(), BDSFieldInfo::FieldType(), GetDefinition(), GetOuterScaling(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadMagField(), BDSFieldInfo::MagneticSubFieldName(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::PoleTipRadius(), BDSFieldInfo::SecondFieldOnLeft(), BDSFieldMag::SetTransform(), BDSFieldInfo::Transform(), BDSFieldInfo::TransformBeamline(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), and BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize().
Referenced by CreateFieldMag(), and CreateFieldMagRaw().
|
private |
Create an integrator for a general E field. Same ones as EM but keep this method for clarity as Geant4 unclear - only based on their examples. examples/extended/field/field02/src/F02ElectricFieldSetup.cc
Definition at line 1093 of file BDSFieldFactory.cc.
References CreateIntegratorEM().
Referenced by CreateFieldE().
|
private |
Create an integrator for a general EM field. As it's a general field, this takes a G4EquationOfMotion* equation of motion instance.
Definition at line 997 of file BDSFieldFactory.cc.
References BDSFieldInfo::IntegratorType(), and BDSTypeSafeEnum< def, inner >::underlying().
Referenced by CreateFieldEM(), CreateIntegratorE(), and CreateIntegratorMag().
|
private |
Create a purely magnetic integrator. As it's purely magnetic, this requires a G4Mag_EqRhs* equation of motion instance.
Definition at line 909 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), BDSFieldInfo::BRho(), CreateIntegratorEM(), designParticle, BDSGlobalConstants::Instance(), BDSFieldInfo::IntegratorType(), BDSFieldInfo::Tilt(), and BDSTypeSafeEnum< def, inner >::underlying().
Referenced by CreateFieldMag().
|
private |
Create special parallel transport 'field' that applies a parallel transport along beam line.
Definition at line 1143 of file BDSFieldFactory.cc.
Referenced by CreateFieldIrregular().
|
private |
Create special rmatrix 'field' that applies an rmatrix.
Definition at line 1123 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), and BDSFieldInfo::MagnetStrength().
Referenced by CreateFieldIrregular().
|
private |
Create a special teleporter 'field' that shifts particles at the end of rings to match up correctly.
Definition at line 1099 of file BDSFieldFactory.cc.
References designParticle, BDSGlobalConstants::Instance(), BDSFieldInfo::MagnetStrength(), primaryGeneratorAction, BDSPrimaryGeneratorAction::RegisterPTCOneTurnMap(), and BDSFieldInfo::TransformComplete().
Referenced by CreateFieldIrregular().
|
static |
Suggest a default interpolator.
Definition at line 457 of file BDSFieldFactory.cc.
Referenced by PrepareFieldDefinitions().
BDSFieldInfo * BDSFieldFactory::GetDefinition | ( | const G4String & | name | ) | const |
Return a BDSFieldInfo instance from the parser definitions. Will exit if no matching field definition found.
Definition at line 407 of file BDSFieldFactory.cc.
References parserDefinitions.
Referenced by CreateFieldERaw(), and CreateFieldMagRaw().
|
private |
Return the parameter "outerScaling" from strength st, but default to 1.
Definition at line 1153 of file BDSFieldFactory.cc.
References BDSMagnetStrength::KeyHasBeenSet().
Referenced by CreateFieldMagRaw().
|
static |
Public accessor method for singleton pattern.
Definition at line 151 of file BDSFieldFactory.cc.
References BDSFieldFactory(), and instance.
Referenced by BDS::BuildPlacementGeometry(), BDSComponentFactory::SetFieldDefinitions(), BDSIM::~BDSIM(), and BDSIMLink::~BDSIMLink().
|
private |
Prepare all required definitions that can be used dynamically.
Definition at line 174 of file BDSFieldFactory.cc.
References BDSBeamPipeInfo::aper1, BDS::CreateUserLimits(), DefaultInterpolatorType(), BDS::DetermineArrayReflectionTypeSet(), BDS::DetermineFieldFormat(), BDS::DetermineFieldType(), BDS::DetermineIntegratorType(), BDS::DetermineInterpolatorType(), BDS::GetFullPath(), BDSGlobalConstants::Instance(), BDS::InterpolatorTypeIsAuto(), BDS::InterpolatorTypeSpecificFromAuto(), BDS::IsFinite(), BDS::NDimensionsOfFieldFormat(), BDS::NDimensionsOfInterpolatorType(), parserDefinitions, PrepareFieldStrengthFromParameters(), and BDS::SplitOnColon().
Referenced by BDSFieldFactory().
|
private |
Fill an instance of BDSMagnetStrength with parameters as defined in a string "fieldParameters" that is assumed to be a space-delimited set of parameter=value strings.
Definition at line 374 of file BDSFieldFactory.cc.
References BDSMagnetStrength::AllKeys(), ConvertToDoubleWithException(), BDS::GetUserParametersMap(), BDSMagnetStrength::Unit(), and BDSMagnetStrength::ValidKey().
Referenced by PrepareFieldDefinitions().
|
inlinestatic |
Update the internal cache of the rigidity.
Definition at line 76 of file BDSFieldFactory.hh.
References designParticle.
Referenced by BDSIM::Initialise().
|
inlinestatic |
Update the internal cache of the primary generator action.
Definition at line 79 of file BDSFieldFactory.hh.
References primaryGeneratorAction.
Referenced by BDSIM::Initialise().
|
staticprivate |
Cache of design particle for fields.
Definition at line 176 of file BDSFieldFactory.hh.
Referenced by BDSFieldFactory(), CreateIntegratorMag(), CreateTeleporter(), and SetDesignParticle().
|
staticprivate |
Instance - singleton pattern.
Definition at line 156 of file BDSFieldFactory.hh.
Referenced by Instance().
|
private |
BDSFieldInfo definitions prepare from parser vector of definitions.
Definition at line 173 of file BDSFieldFactory.hh.
Referenced by GetDefinition(), and PrepareFieldDefinitions().
|
staticprivate |
Cache of primary generator action.
Definition at line 179 of file BDSFieldFactory.hh.
Referenced by CreateTeleporter(), and SetPrimaryGeneratorAction().
|
private |
Definition at line 181 of file BDSFieldFactory.hh.