BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
|
Integrator that ignores the field and uses the analytical solution to a quadrupole. More...
#include <BDSIntegratorQuadrupole.hh>
Public Member Functions | |
BDSIntegratorQuadrupole (BDSMagnetStrength const *strength, G4double brho, G4Mag_EqRhs *eqOfMIn, G4double minimumRadiusOfCurvatureIn) | |
virtual void | Stepper (const G4double y[], const G4double dydx[], const G4double h, G4double yOut[], G4double yErr[]) |
![]() | |
BDSIntegratorMag (G4Mag_EqRhs *eqOfMIn, G4int nVariablesIn) | |
virtual G4double | DistChord () const |
Estimate maximum distance of curved solution and chord. | |
virtual G4int | IntegratorOrder () const |
Geant4 requires that the integrator order must be supplied by the derived class. | |
BDSIntegratorMag & | operator= (const BDSIntegratorMag &)=delete |
Assignment and copy constructor not implemented nor used. | |
BDSIntegratorMag (BDSIntegratorMag &)=delete | |
Assignment and copy constructor not implemented nor used. | |
![]() | |
void | AdvanceDriftMag (const G4double yIn[], const G4double h, G4double yOut[], G4double yErr[]) const |
Error array [6] all 0. | |
void | AdvanceDriftMag (const G4double yIn[], const G4ThreeVector &unitMomentum, const G4double h, G4double yOut[], G4double yErr[]) const |
![]() | |
G4VPhysicalVolume * | LocateGlobalPointAndSetup (const G4ThreeVector &point, const G4ThreeVector *direction=nullptr, const G4bool pRelativeSearch=true, const G4bool ignoreDirection=true, G4bool useCurvilinear=true) const |
A wrapper for the underlying static navigator instance located within this class. | |
G4VPhysicalVolume * | LocateGlobalPointAndSetup (G4Step const *const step, G4bool useCurvilinear=true) const |
BDSStep | ConvertToLocal (G4Step const *const step, G4bool useCurvilinear=true) const |
BDSStep | ConvertToLocal (const G4ThreeVector &globalPosition, const G4ThreeVector &globalDirection, const G4double stepLength=0, const G4bool useCurvilinear=true, const G4double marginLength=1) const |
BDSStep | ConvertToGlobalStep (const G4ThreeVector &localPosition, const G4ThreeVector &localDirection, const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertToLocal (const G4double globalPoint[3], const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertToLocal (const G4ThreeVector &globalPosition, const G4bool useCurvilinear=true) const |
Vector version - see notes above. | |
G4ThreeVector | ConvertToLocalNoSetup (const G4ThreeVector &globalPosition, const G4bool useCurvilinear=true) const |
Similar to above function but does NOT initialise the transforms. | |
G4ThreeVector | ConvertAxisToLocal (const G4ThreeVector &globalAxis, const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertAxisToLocal (const G4double globalPoint[3], const G4double globalAxis[3], const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertAxisToLocal (const G4ThreeVector &globalPoint, const G4ThreeVector &globalAxis, const G4bool useCurvilinear=true) const |
Vector version. | |
G4ThreeVector | ConvertAxisToGlobal (const G4ThreeVector &localAxis, const G4bool useCurvilinear=true) const |
std::pair< G4ThreeVector, G4ThreeVector > | ConvertAxisToGlobal (const std::pair< G4ThreeVector, G4ThreeVector > &localAxis, const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertToGlobal (const G4ThreeVector &localPosition, const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertAxisToGlobal (const G4ThreeVector &globalPosition, const G4ThreeVector &localAxis, const G4bool useCurvilinear=true) const |
G4ThreeVector | ConvertToGlobal (const G4ThreeVector &globalPosition, const G4ThreeVector &localPosition, const G4bool useCurvilinear=true) const |
BDSStep | GlobalToCurvilinear (const G4double fieldArcLength, const G4ThreeVector &unitField, const G4double angle, const G4ThreeVector &position, const G4ThreeVector &unitMomentum, const G4double h, const G4bool useCurvilinearWorld, const G4double FCof, const G4double tilt=0) |
BDSStep | GlobalToCurvilinear (const G4ThreeVector &position, const G4ThreeVector &unitMomentum, const G4double h, const G4bool useCurvilinearWorld) |
BDSStep | CurvilinearToGlobal (const G4ThreeVector &localPosition, const G4ThreeVector &localMomentum, const G4bool useCurvilinearWorld) |
BDSStep | CurvilinearToGlobal (const G4double fieldArcLength, const G4ThreeVector &unitField, const G4double angle, const G4ThreeVector &CLPosition, const G4ThreeVector &CLMomentum, const G4bool useCurvilinearWorld, const G4double FCof, const G4double tilt=0) |
Private Member Functions | |
BDSIntegratorQuadrupole () | |
Private default constructor to enforce use of supplied constructor. | |
Private Attributes | |
G4double | bPrime |
B Field Gradient. | |
G4double | minimumRadiusOfCurvature |
Additional Inherited Members | |
![]() | |
static void | AttachWorldVolumeToNavigator (G4VPhysicalVolume *worldPVIn) |
Setup the navigator w.r.t. to a world volume - typically real world. | |
static void | AttachWorldVolumeToNavigatorCL (G4VPhysicalVolume *curvilinearWorldPVIn) |
static void | RegisterCurvilinearBridgeWorld (G4VPhysicalVolume *curvilinearBridgeWorldPVIn) |
static void | ResetNavigatorStates () |
![]() | |
static G4double | thinElementLength = -1 |
static G4double | nominalMatrixRelativeMomCut = -1 |
static G4bool | currentTrackIsPrimary = false |
![]() | |
void | ConvertToGlobal (const G4ThreeVector &localPos, const G4ThreeVector &localMom, G4double yOut[], G4double yErr[], const G4double momScaling=1.0) |
scaling of momentum in case localMom is a unit vector | |
void | SetDistChord (G4double distChordIn) |
Setter for distChord to private member. | |
![]() | |
G4Mag_EqRhs * | eqOfM |
const G4int | nVariables |
Cache of the number of variables. | |
G4MagIntegratorStepper * | backupStepper |
G4bool | zeroStrength |
G4double | backupStepperMomLimit |
![]() | |
G4AffineTransform | globalToLocal |
G4AffineTransform | localToGlobal |
G4AffineTransform | globalToLocalCL |
G4AffineTransform | localToGlobalCL |
G4bool | bridgeVolumeWasUsed |
![]() | |
static G4Navigator * | auxNavigator = new G4Navigator() |
static G4Navigator * | auxNavigatorCL = new G4Navigator() |
static G4Navigator * | auxNavigatorCLB = new G4Navigator() |
Integrator that ignores the field and uses the analytical solution to a quadrupole.
Analytical solution to a quadrupole field. This integrator will use the analytical solution for a quadrupole (matrix) to transport a particle along a given step length. This will only do so for particles that are considered paraxial. For particles that don't meet this criteria the backupStepper from BDSIntegratorMag is used to integrate through the quadrupolar field. This ensures the integrator functions correctly with particles with large transverse momenta, or even ones that are travelling backwards such as secondaries.
Definition at line 42 of file BDSIntegratorQuadrupole.hh.
BDSIntegratorQuadrupole::BDSIntegratorQuadrupole | ( | BDSMagnetStrength const * | strength, |
G4double | brho, | ||
G4Mag_EqRhs * | eqOfMIn, | ||
G4double | minimumRadiusOfCurvatureIn | ||
) |
Definition at line 34 of file BDSIntegratorQuadrupole.cc.
|
inlinevirtual |
Definition at line 50 of file BDSIntegratorQuadrupole.hh.
|
virtual |
Check if the quadrupole has finite strength and use drift if not. If finite strength, convert to local curvilinear coordinates and check for paraxial approximation. If paraxial, use thick quadrupole matrix for transport, else use the G4ClassicalRK4 backup stepper.
Definition at line 52 of file BDSIntegratorQuadrupole.cc.
References BDSIntegratorDrift::AdvanceDriftMag(), BDSIntegratorMag::backupStepper, BDSIntegratorMag::backupStepperMomLimit, bPrime, BDSIntegratorMag::eqOfM, BDSAuxiliaryNavigator::GlobalToCurvilinear(), BDS::IsFiniteStrength(), minimumRadiusOfCurvature, BDSStep::PostStepPoint(), BDSStep::PreStepPoint(), BDSIntegratorMag::SetDistChord(), and BDSIntegratorMag::zeroStrength.
|
private |
B Field Gradient.
Definition at line 66 of file BDSIntegratorQuadrupole.hh.
Referenced by Stepper().
|
private |
Minimum radius of curvature in field. Below this, the backup integrator is used. Rarely, a particle may meet paraxial requirements but experience near spiralling in which case the thick matrix won't produce accurate or numerically stable results.
Definition at line 71 of file BDSIntegratorQuadrupole.hh.
Referenced by Stepper().