26#include <boost/algorithm/string/case_conv.hpp>
118 "No field defined for VariableRFCavity");
123 "No field defined for VariableRFCavity");
146 const double phi =
phaseTD_m->getValue(t);
155 return apply(
R, P, t, E, B);
178 std::shared_ptr<AbstractTimeDependence> phaseTD =
180 cavity->
setPhaseModel(std::shared_ptr<AbstractTimeDependence>(phaseTD->clone()));
181 std::shared_ptr<AbstractTimeDependence> frequencyTD =
183 cavity->
setFrequencyModel(std::shared_ptr<AbstractTimeDependence>(frequencyTD->clone()));
184 std::shared_ptr<AbstractTimeDependence> amplitudeTD =
186 cavity->
setAmplitudeModel(std::shared_ptr<AbstractTimeDependence>(amplitudeTD->clone()));
190 "Height or width was not set on VariableRFCavity");
Tps< T > sin(const Tps< T > &x)
Sine.
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
constexpr double two_pi
The value of.
constexpr double e
The value of.
ParticleAttrib< Vector_t > P
virtual void visitVariableRFCavity(const VariableRFCavity &)=0
Apply the algorithm to a variable RF cavity.
Interface for a single beam element.
PartBunchBase< double, 3 > * RefPartBunch_m
virtual void setName(const std::string &name)
Set element name.
virtual const std::string & getName() const
Get element name.
Generates a field like E = a(t) * sin{2*pi * integral(f(tau),0,t) + q(t)} B = 0 where E0,...
std::shared_ptr< AbstractTimeDependence > frequencyTD_m
void initialise() const
Lookup the time dependencies and update.
StraightGeometry geometry
The cavity's geometry.
virtual void finalise() override
Finalise following tracking.
std::string amplitudeName_m
std::string frequencyName_m
virtual std::shared_ptr< AbstractTimeDependence > getFrequencyModel() const
VariableRFCavity()
Default constructor.
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Calculate the field at the position of the i^th particle.
virtual void setPhaseModel(std::shared_ptr< AbstractTimeDependence > time_dep)
Set the phase time dependence.
virtual ~VariableRFCavity()
Destructor does nothing.
virtual std::shared_ptr< AbstractTimeDependence > getAmplitudeModel() const
TimeDependenceCache frequencyCache_m
virtual void setFrequencyModel(std::shared_ptr< AbstractTimeDependence > time_dep)
Set the frequency time dependence.
virtual void setLength(double length)
Set the length of the cavity.
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Calculate the field at a given position.
std::shared_ptr< AbstractTimeDependence > amplitudeTD_m
virtual void accept(BeamlineVisitor &) const override
Apply visitor to RFCavity.
virtual std::shared_ptr< AbstractTimeDependence > getPhaseModel() const
virtual ElementBase * clone() const override
Inheritable deepcopy method.
virtual EMField & getField() override
Not implemented.
std::shared_ptr< AbstractTimeDependence > phaseTD_m
virtual StraightGeometry & getGeometry() override
Set the cavity geometry.
VariableRFCavity & operator=(const VariableRFCavity &)
Assignment operator; performs deepcopy on time-dependence models.
virtual void setAmplitudeModel(std::shared_ptr< AbstractTimeDependence > time_dep)
Set the amplitude (field gradient) time dependence.
static std::shared_ptr< AbstractTimeDependence > getTimeDependence(std::string name)
Look up the time dependence that has a given name.
double getIntegral(double time)
void setTimeDependence(AbstractTimeDependence *timeDependence)
A geometry representing a straight line.
virtual void setElementLength(double length)
Set design length.
Abstract base class for electromagnetic fields.
Vektor< double, 3 > Vector_t