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)
75 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
76 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStep());
77 fieldManager->SetMaximumEpsilonStep(globals->MaximumEpsilonStep());
81#if G4VERSION_NUMBER > 1049
83 G4MagneticField* fieldIn,
84 G4EquationOfMotion* equationOfMotionIn,
85 G4MagIntegratorStepper* magIntegratorStepperIn):
88 equationOfMotion(equationOfMotionIn),
89 magIntegratorStepper(magIntegratorStepperIn)
92 if (chordStepMinimum <= 0)
103 fieldManager->SetDeltaIntersection(globals->DeltaIntersection());
104 fieldManager->SetMinimumEpsilonStep(globals->MinimumEpsilonStep());
105 fieldManager->SetMaximumEpsilonStep(globals->MaximumEpsilonStep());
121 G4bool penetrateToDaughterVolumes)
const
123 volume->SetFieldManager(
fieldManager, penetrateToDaughterVolumes);
134 G4bool penetrateToDaughterVolumes)
const
136 for (
auto volume : volumes)
141 G4UserLimits* userLimits,
142 G4bool penetrateToDaughterVolumes)
const
144 volume->SetUserLimits(userLimits);
145 if (penetrateToDaughterVolumes)
147 for (G4int i = 0; i < (G4int)volume->GetNoDaughters(); i++)
All info required to build complete field of any type.
G4double ChordStepMinimum() 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.
~BDSFieldObjects()
Destructor deletes all objects apart from the magnetic field.
G4FieldManager * fieldManager
Field manager.
G4Field * field
Reference to field this instance is based on.
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.