18#include "BDSFieldManager.hh"
19#include "BDSGlobalConstants.hh"
20#include "BDSFieldInfo.hh"
21#include "BDSFieldObjects.hh"
23#include "G4ChordFinder.hh"
24#include "G4ElectroMagneticField.hh"
26#include "G4FieldManager.hh"
27#include "G4LogicalVolume.hh"
28#include "G4MagIntegratorDriver.hh"
29#include "G4MagIntegratorStepper.hh"
30#include "G4MagneticField.hh"
31#include "G4Version.hh"
37 G4EquationOfMotion* equationOfMotionIn,
38 G4MagIntegratorStepper* magIntegratorStepperIn,
39 G4ChordFinder* chordFinderIn,
40 G4FieldManager* fieldManagerIn):
43 equationOfMotion(equationOfMotionIn),
44 magIntegratorStepper(magIntegratorStepperIn),
45 chordFinder(chordFinderIn),
46 fieldManager(fieldManagerIn),
51 G4ElectroMagneticField* fieldIn,
52 G4EquationOfMotion* equationOfMotionIn,
53 G4MagIntegratorStepper* magIntegratorStepperIn):
56 equationOfMotion(equationOfMotionIn),
57 magIntegratorStepper(magIntegratorStepperIn)
60 if (chordStepMinimum <= 0)
78#if G4VERSION_NUMBER > 1049
80 G4MagneticField* fieldIn,
81 G4EquationOfMotion* equationOfMotionIn,
82 G4MagIntegratorStepper* magIntegratorStepperIn):
85 equationOfMotion(equationOfMotionIn),
86 magIntegratorStepper(magIntegratorStepperIn)
89 if (chordStepMinimum <= 0)
117 G4bool penetrateToDaughterVolumes)
const
119 volume->SetFieldManager(
fieldManager, penetrateToDaughterVolumes);
130 G4bool penetrateToDaughterVolumes)
const
132 for (
auto volume : volumes)
137 G4UserLimits* userLimits,
138 G4bool penetrateToDaughterVolumes)
const
140 volume->SetUserLimits(userLimits);
141 if (penetrateToDaughterVolumes)
143 for (G4int i = 0; i < (G4int)volume->GetNoDaughters(); i++)
151 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
152 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStep());
153 fieldManager->SetMaximumEpsilonStep(globals->MaximumEpsilonStep());
160 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
161 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStepThin());
162 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.