19#include "BDSCavityInfo.hh"
20#include "BDSFieldEMRFCavity.hh"
21#include "BDSMagnetStrength.hh"
22#include "BDSUtilities.hh"
24#include "CLHEP/Units/PhysicalConstants.h"
26#include "G4ThreeVector.hh"
40 (*strength)[
"frequency"],
42 (*strength)[
"equatorradius"])
44 eFieldMax *= BDS::Sign(brho);
50 G4double cavityRadiusIn):
51 eFieldMax(eFieldAmplitude),
52 frequency(frequencyIn),
54 cavityRadius(cavityRadiusIn),
55 normalisedCavityRadius(j0FirstZero/cavityRadius),
56 angularFrequency(CLHEP::twopi * frequencyIn)
60 const G4double t)
const
63 G4double phi = std::atan2(position.y(),position.x());
64 G4double r = std::hypot(position.x(),position.y());
75 G4double J0r = TMath::BesselJ0(rNormalised);
76 G4double J1r = TMath::BesselJ1(rNormalised);
80 G4double Bmax = hMax * CLHEP::mu0;
87 G4double Bx = Bphi*std::sin(phi);
88 G4double By = Bphi*std::cos(phi);
91 G4ThreeVector LocalB = G4ThreeVector(Bx, By, 0);
92 G4ThreeVector LocalE = G4ThreeVector(0, 0, Ez);
94 auto result = std::make_pair(LocalB, LocalE);
Pill box cavity electro-magnetic field.
virtual std::pair< G4ThreeVector, G4ThreeVector > GetField(const G4ThreeVector &position, const G4double t) const
Accessor to get B and E field.
const G4double angularFrequency
Angular frequency calculated from frequency - cached to avoid repeated calculation.
G4double phase
Phase offset of the oscillator.
BDSFieldEMRFCavity()
Private constructor to force use of provided one.
static const G4double j0FirstZero
X coordinate of first 0 point for bessel J0.
static const G4double Z0
Impedance of free space.
G4double eFieldMax
Maximum field in V/m.
const G4double normalisedCavityRadius
Pre-calculated normalised calculated radius w.r.t. bessel first 0.
Efficient storage of magnet strengths.