19#include "BDSFieldManager.hh"
20#include "BDSGlobalConstants.hh"
21#include "BDSFieldInfo.hh"
22#include "BDSFieldObjects.hh"
24#include "G4ChordFinder.hh"
25#include "G4ElectroMagneticField.hh"
27#include "G4FieldManager.hh"
28#include "G4LogicalVolume.hh"
29#include "G4MagIntegratorDriver.hh"
30#include "G4MagIntegratorStepper.hh"
31#include "G4MagneticField.hh"
32#include "G4Version.hh"
38 G4EquationOfMotion* equationOfMotionIn,
39 G4MagIntegratorStepper* magIntegratorStepperIn,
40 G4ChordFinder* chordFinderIn,
41 G4FieldManager* fieldManagerIn):
44 equationOfMotion(equationOfMotionIn),
45 magIntegratorStepper(magIntegratorStepperIn),
46 chordFinder(chordFinderIn),
47 fieldManager(fieldManagerIn),
52 G4ElectroMagneticField* fieldIn,
53 G4EquationOfMotion* equationOfMotionIn,
54 G4MagIntegratorStepper* magIntegratorStepperIn):
57 equationOfMotion(equationOfMotionIn),
58 magIntegratorStepper(magIntegratorStepperIn)
61 if (chordStepMinimum <= 0)
79#if G4VERSION_NUMBER > 1049
81 G4MagneticField* fieldIn,
82 G4EquationOfMotion* equationOfMotionIn,
83 G4MagIntegratorStepper* magIntegratorStepperIn):
86 equationOfMotion(equationOfMotionIn),
87 magIntegratorStepper(magIntegratorStepperIn)
90 if (chordStepMinimum <= 0)
118 G4bool penetrateToDaughterVolumes)
const
120 volume->SetFieldManager(
fieldManager, penetrateToDaughterVolumes);
131 G4bool penetrateToDaughterVolumes)
const
133 for (
auto volume : volumes)
138 G4UserLimits* userLimits,
139 G4bool penetrateToDaughterVolumes)
const
141 volume->SetUserLimits(userLimits);
142 if (penetrateToDaughterVolumes)
144 for (G4int i = 0; i < (G4int)volume->GetNoDaughters(); i++)
152 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
153 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStep());
154 fieldManager->SetMaximumEpsilonStep(globals->MaximumEpsilonStep());
161 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
162 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStepThin());
163 fieldManager->SetMaximumEpsilonStep(globals->MaximumEpsilonStepThin());
All info required to build complete field of any type.
G4double ChordStepMinimum() const
Accessor.
G4bool IsThin() const
Accessor.
G4UserLimits * UserLimits() const
Accessor.
Wrapper for Geant4's G4FieldManager to distinguish primaries.
void AttachToVolume(G4LogicalVolume *volume, G4bool penetrateToDaughterVolumes=true) const
Interface to easily attach to logical volume.
void SetFieldManagerOptions()
Field manager settings.
~BDSFieldObjects()
Destructor deletes all objects apart from the magnetic field.
G4FieldManager * fieldManager
Field manager.
G4Field * field
Reference to field this instance is based on.
void SetFieldManagerOptionsThin()
Field manager settings for thin elements.
const BDSFieldInfo * info
The complete information required to build this field.
G4MagIntegratorStepper * magIntegratorStepper
Stepper, selectable depending on smoothness of the field etc.
G4ChordFinder * chordFinder
Chord manager.
G4EquationOfMotion * equationOfMotion
Equation of motion, typically G4Mag_UsualEqRhs instance.
void AttachUserLimitsToVolume(G4LogicalVolume *volume, G4UserLimits *userLimits, G4bool penetrateToDaughterVolumes=true) const
G4MagInt_Driver * magIntDriver
EM field integrator driver (optional) - only for EM fields.
A class that holds global options and constants.
static BDSGlobalConstants * Instance()
Access method.