|
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. | |
| BDSFieldInfo * | GetDefinition (const G4String &name) const |
| BDSModulatorInfo * | GetModulatorDefinition (const G4String &modulatorName) const |
Static Public Member Functions | |
| static BDSFieldFactory * | Instance () |
| Public accessor method for singleton pattern. | |
| static void | SetDesignParticle (const BDSParticleDefinition *designParticleIn) |
| Update the internal cache of the rigidity. | |
| static void | SetPrimaryGeneratorAction (BDSPrimaryGeneratorAction *pgaIn) |
| Update the internal cache of the primary generator action. | |
| static BDSInterpolatorType | DefaultInterpolatorType (G4int numberOfDimensions) |
| Suggest a default interpolator. | |
Private Member Functions | |
| BDSFieldObjects * | CreateFieldMag (const BDSFieldInfo &info, const BDSMagnetStrength *scalingStrength=nullptr, const G4String &scalingKey="none") |
| Create a purely magnetic field. | |
| BDSFieldObjects * | CreateFieldEM (const BDSFieldInfo &info) |
| Create a general EM field. | |
| BDSFieldObjects * | CreateFieldE (const BDSFieldInfo &info) |
| Create an electric field. | |
| BDSFieldObjects * | CreateFieldIrregular (const BDSFieldInfo &info) |
| Create an irregular (special) field. | |
| BDSFieldMag * | CreateFieldMagRaw (const BDSFieldInfo &info, const BDSMagnetStrength *scalingStrength=nullptr, const G4String &scalingKey="none") |
| Creat just the magnetic field object. | |
| BDSFieldE * | CreateFieldERaw (const BDSFieldInfo &info) |
| Creat just the electric field object. | |
| 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. | |
| BDSFieldObjects * | CreateCavityFringe (const BDSFieldInfo &info) |
| Create special rf cavity fringe 'field' that applies an rmatrix. | |
| BDSFieldObjects * | CreateParallelTransport (const BDSFieldInfo &info) |
| G4double | GetOuterScaling (const BDSMagnetStrength *st) const |
| Return the parameter "outerScaling" from strength st, but default to 1. | |
| BDSModulator * | CreateModulator (const BDSModulatorInfo *modulatorRecipe, const BDSFieldInfo &info) const |
| Create the necessary modulator. | |
| BDSFieldEM * | CreateMuonCoolerField (const BDSFieldInfo &info, G4double brho) const |
| Create a composite muon cooler field EM field. | |
| BDSFieldFactory () | |
| Private default constructor as singleton class. | |
| void | PrepareFieldDefinitions (const std::vector< GMAD::Field > &definitions, G4double defaultBRho) |
| Prepare all required definitions that can be used dynamically. | |
| void | PrepareModulatorDefinitions (const std::vector< GMAD::Modulator > &definitions) |
| Prepare all required modulator definitions that can be used dynamically. | |
| 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. | |
| 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. | |
| std::map< G4String, BDSModulatorInfo * > | parserModulatorDefinitions |
| G4bool | useOldMultipoleOuterFields |
Static Private Attributes | |
| static BDSFieldFactory * | instance = nullptr |
| Instance - singleton pattern. | |
| static const BDSParticleDefinition * | designParticle = nullptr |
| Cache of design particle for fields. | |
| static BDSPrimaryGeneratorAction * | primaryGeneratorAction = nullptr |
| Cache of primary generator action. | |
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.
This owns the converted modulator definitions (BDSModulatorInfo*) despite the design of a factory that should give up ownership. This is so we don't duplicate the instance for the sake of ownership.
Definition at line 76 of file BDSFieldFactory.hh.
| BDSFieldFactory::~BDSFieldFactory | ( | ) |
Definition at line 185 of file BDSFieldFactory.cc.
|
private |
Private default constructor as singleton class.
Definition at line 170 of file BDSFieldFactory.cc.
References BDSParticleDefinition::BRho(), designParticle, BDSGlobalConstants::Instance(), BDSParser::Instance(), BDSParser::IsInitialised(), PrepareFieldDefinitions(), and PrepareModulatorDefinitions().
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 423 of file BDSFieldFactory.cc.
Referenced by PrepareFieldStrengthFromParameters().

|
private |
Create special rf cavity fringe 'field' that applies an rmatrix.
Definition at line 1271 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), BDSFieldInfo::BRho(), 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 509 of file BDSFieldFactory.cc.
References CreateFieldE(), CreateFieldEM(), CreateFieldIrregular(), CreateFieldMag(), BDS::DetermineFieldClassType(), BDSFieldInfo::FieldType(), BDSFieldInfo::NameOfParserDefinition(), and BDSTypeSafeEnum< def, inner >::underlying().

|
private |
Create an electric field.
Definition at line 939 of file BDSFieldFactory.cc.
References CreateFieldERaw(), CreateIntegratorE(), BDSFieldInfo::ProvideGlobal(), and BDSFieldInfo::UsePlacementWorldTransform().
Referenced by CreateField().


|
private |
Create a general EM field.
Definition at line 874 of file BDSFieldFactory.cc.
References BDSFieldInfo::BRho(), CreateIntegratorEM(), CreateModulator(), CreateMuonCoolerField(), BDSFieldInfo::FieldType(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadEMField(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::ModulatorInfo(), BDSFieldInfo::NameOfParserDefinition(), BDSFieldInfo::ProvideGlobal(), BDSModulator::RecommendedMaxStepLength(), BDSFieldEM::SetModulator(), BDSFieldEM::SetTransform(), BDSFieldEM::TimeVarying(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize(), BDSFieldInfo::UsePlacementWorldTransform(), and BDSModulator::VariesWithTime().
Referenced by CreateField().


|
private |
Creat just the electric field object.
Definition at line 962 of file BDSFieldFactory.cc.
References CreateFieldERaw(), CreateModulator(), BDSFieldInfo::ElectricSubFieldName(), BDSFieldInfo::FieldType(), GetDefinition(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadEField(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::ModulatorInfo(), BDSFieldInfo::NameOfParserDefinition(), BDSModulator::RecommendedMaxStepLength(), BDSFieldE::SetModulator(), BDSFieldE::SetTransform(), BDSFieldE::TimeVarying(), BDSFieldInfo::Transform(), BDSFieldInfo::TransformBeamline(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize(), and BDSModulator::VariesWithTime().
Referenced by CreateFieldE(), and CreateFieldERaw().


|
private |
Create an irregular (special) field.
Definition at line 1027 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 564 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 590 of file BDSFieldFactory.cc.
References BDSFieldInfo::BeamPipeRadius(), BDSMagnetOuterFactoryLHC::beamSeparation, BDSFieldInfo::BRho(), CreateFieldMagRaw(), CreateModulator(), BDSFieldInfo::FieldType(), GetDefinition(), GetOuterScaling(), BDSFieldInfo::IgnoreUpdateOfMaximumStepSize(), BDSFieldLoader::Instance(), BDSFieldLoader::LoadMagField(), BDSFieldInfo::MagneticSubFieldName(), BDSFieldInfo::MagnetStrength(), BDSFieldInfo::ModulatorInfo(), BDSFieldInfo::NameOfParserDefinition(), BDSFieldInfo::PoleTipRadius(), BDSModulator::RecommendedMaxStepLength(), BDSFieldInfo::SecondFieldOnLeft(), BDSFieldMag::SetModulator(), BDSFieldMag::SetTransform(), BDSFieldMag::TimeVarying(), BDSFieldInfo::Transform(), BDSFieldInfo::TransformBeamline(), BDSFieldInfo::TransformComplete(), BDSTypeSafeEnum< def, inner >::underlying(), BDSFieldInfo::UpdateUserLimitsLengthMaximumStepSize(), and BDSModulator::VariesWithTime().
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 1231 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 1135 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 1047 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 the necessary modulator.
Definition at line 1310 of file BDSFieldFactory.cc.
References BDSModulatorInfo::amplitudeOffset, BDSModulatorInfo::frequency, BDSModulatorInfo::modulatorType, BDSFieldInfo::NameOfParserDefinition(), BDSModulatorInfo::phase, BDSModulatorInfo::scale, BDSModulatorInfo::T0, BDSModulatorInfo::T1, and BDSTypeSafeEnum< def, inner >::underlying().
Referenced by CreateFieldEM(), CreateFieldERaw(), and CreateFieldMagRaw().


|
private |
Create a composite muon cooler field EM field.
Definition at line 1299 of file BDSFieldFactory.cc.
References BDSFieldInfo::ExtraInfo(), and BDSFieldInfo::NameOfParserDefinition().
Referenced by CreateFieldEM().


|
private |
Create special parallel transport 'field' that applies a parallel transport along beam line.
Definition at line 1281 of file BDSFieldFactory.cc.
Referenced by CreateFieldIrregular().

|
private |
Create special rmatrix 'field' that applies an rmatrix.
Definition at line 1261 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 1237 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 545 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 is found but will return nullptr if empty string supplied.
Definition at line 472 of file BDSFieldFactory.cc.
References parserDefinitions.
Referenced by CreateFieldERaw(), and CreateFieldMagRaw().

| BDSModulatorInfo * BDSFieldFactory::GetModulatorDefinition | ( | const G4String & | modulatorName | ) | const |
Return a BDSModulatorInfo instance from the parser definitions. Will exit if no matching modulator definition is found but will return nullptr if empty string supplied.
Definition at line 491 of file BDSFieldFactory.cc.
Referenced by BDSComponentFactory::ModulatorDefinition(), and PrepareFieldDefinitions().

|
private |
Return the parameter "outerScaling" from strength st, but default to 1.
Definition at line 1291 of file BDSFieldFactory.cc.
References BDSMagnetStrength::KeyHasBeenSet().
Referenced by CreateFieldMagRaw().


|
static |
Public accessor method for singleton pattern.
Definition at line 163 of file BDSFieldFactory.cc.
References BDSFieldFactory(), and instance.
Referenced by BDS::BuildPlacementGeometry(), BDSComponentFactory::ModulatorDefinition(), BDSComponentFactory::SetFieldDefinitions(), BDSIM::~BDSIM(), and BDSIMLink::~BDSIMLink().


|
private |
Prepare all required definitions that can be used dynamically.
Definition at line 193 of file BDSFieldFactory.cc.
References BDSBeamPipeInfo::aper1, BDS::CreateUserLimits(), DefaultInterpolatorType(), BDS::DetermineArrayReflectionTypeSet(), BDS::DetermineFieldFormat(), BDS::DetermineFieldType(), BDS::DetermineIntegratorType(), BDS::DetermineInterpolatorType(), BDS::GetFullPath(), GetModulatorDefinition(), 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 439 of file BDSFieldFactory.cc.
References BDSMagnetStrength::AllKeys(), ConvertToDoubleWithException(), BDS::GetUserParametersMap(), BDSMagnetStrength::Unit(), and BDSMagnetStrength::ValidKey().
Referenced by PrepareFieldDefinitions().


|
private |
Prepare all required modulator definitions that can be used dynamically.
Definition at line 387 of file BDSFieldFactory.cc.
References BDS::DetermineModulatorType(), and BDS::IsFinite().
Referenced by BDSFieldFactory().


|
inlinestatic |
Update the internal cache of the rigidity.
Definition at line 83 of file BDSFieldFactory.hh.
References designParticle.
Referenced by BDSIM::Initialise().

|
inlinestatic |
Update the internal cache of the primary generator action.
Definition at line 86 of file BDSFieldFactory.hh.
References primaryGeneratorAction.
Referenced by BDSIM::Initialise().

|
staticprivate |
Cache of design particle for fields.
Definition at line 201 of file BDSFieldFactory.hh.
Referenced by BDSFieldFactory(), CreateIntegratorMag(), CreateTeleporter(), and SetDesignParticle().
|
staticprivate |
Instance - singleton pattern.
Definition at line 177 of file BDSFieldFactory.hh.
Referenced by Instance().
|
private |
BDSFieldInfo definitions prepare from parser vector of definitions.
Definition at line 197 of file BDSFieldFactory.hh.
Referenced by GetDefinition(), and PrepareFieldDefinitions().
|
private |
Definition at line 198 of file BDSFieldFactory.hh.
|
staticprivate |
Cache of primary generator action.
Definition at line 204 of file BDSFieldFactory.hh.
Referenced by CreateTeleporter(), and SetPrimaryGeneratorAction().
|
private |
Definition at line 206 of file BDSFieldFactory.hh.