1 #ifndef CLASSIC_RFCavity_HH
2 #define CLASSIC_RFCavity_HH
91 virtual void setFast(
bool fast);
99 virtual double getAutoPhaseEstimate(
const double & E0,
const double & t0,
const double & q,
const double & m);
107 std::ofstream *out = NULL);
113 virtual bool apply(
const size_t &i,
133 std::shared_ptr<AbstractTimeDependence> freq_atd,
134 std::shared_ptr<AbstractTimeDependence> ampl_atd,
135 std::shared_ptr<AbstractTimeDependence> phase_atd);
139 virtual bool bends()
const override;
141 virtual void goOnline(
const double &kineticEnergy)
override;
145 virtual void setDesignEnergy(
const double& ekin,
bool changeable =
true)
override;
160 virtual double getRmin()
const;
162 virtual double getRmax()
const;
174 virtual double getPhi0()
const;
182 void getMomentaKick(
const double normalRadius,
double momentum[],
const double t,
const double dtCorrt,
const int PID,
const double restMass,
const int chargenumber);
184 double spline(
double z,
double *za);
188 virtual void getDimensions(
double &zBegin,
double &zEnd)
const override;
196 void setPhaseModel(std::shared_ptr<AbstractTimeDependence> time_dep);
206 double &end)
const override;
253 double getdE(
const int & i,
254 const std::vector<double> & t,
257 const double & frequency,
258 const std::vector<double> & F)
const;
260 double getdT(
const int & i,
261 const std::vector<double> & E,
263 const double mass)
const;
265 double getdA(
const int & i,
266 const std::vector<double> & t,
268 const double & frequency,
269 const std::vector<double> & F)
const;
271 double getdB(
const int & i,
272 const std::vector<double> & t,
274 const double & frequency,
275 const std::vector<double> & F)
const;
283 const std::vector<double> & t,
286 const double & frequency,
287 const std::vector<double> & F)
const {
288 return dz / (frequency * frequency * (t[i] - t[i-1]) * (t[i] - t[i-1])) *
289 (frequency * (t[i] - t[i-1]) * (F[i] *
sin(frequency * t[i] + phi) - F[i-1] *
sin(frequency * t[i-1] + phi)) +
290 (F[i] - F[i-1]) * (
cos(frequency * t[i] + phi) -
cos(frequency * t[i-1] + phi)));
295 const std::vector<double> & E,
297 const double mass)
const {
298 double gamma1 = 1. + (19. * E[i-1] + 1. * E[i]) / (20. * mass);
299 double gamma2 = 1. + (17. * E[i-1] + 3. * E[i]) / (20. * mass);
300 double gamma3 = 1. + (15. * E[i-1] + 5. * E[i]) / (20. * mass);
301 double gamma4 = 1. + (13. * E[i-1] + 7. * E[i]) / (20. * mass);
302 double gamma5 = 1. + (11. * E[i-1] + 9. * E[i]) / (20. * mass);
303 double gamma6 = 1. + (9. * E[i-1] + 11. * E[i]) / (20. * mass);
304 double gamma7 = 1. + (7. * E[i-1] + 13. * E[i]) / (20. * mass);
305 double gamma8 = 1. + (5. * E[i-1] + 15. * E[i]) / (20. * mass);
306 double gamma9 = 1. + (3. * E[i-1] + 17. * E[i]) / (20. * mass);
307 double gamma10 = 1. + (1. * E[i-1] + 19. * E[i]) / (20. * mass);
309 (1. /
sqrt(1. - 1. / (gamma1 * gamma1)) +
310 1. /
sqrt(1. - 1. / (gamma2 * gamma2)) +
311 1. /
sqrt(1. - 1. / (gamma3 * gamma3)) +
312 1. /
sqrt(1. - 1. / (gamma4 * gamma4)) +
313 1. /
sqrt(1. - 1. / (gamma5 * gamma5)) +
314 1. /
sqrt(1. - 1. / (gamma6 * gamma6)) +
315 1. /
sqrt(1. - 1. / (gamma7 * gamma7)) +
316 1. /
sqrt(1. - 1. / (gamma8 * gamma8)) +
317 1. /
sqrt(1. - 1. / (gamma9 * gamma9)) +
323 const std::vector<double> & t,
325 const double & frequency,
326 const std::vector<double> & F)
const {
327 double dt = t[i] - t[i-1];
328 return dz / (frequency * frequency * dt * dt) *
329 (frequency * dt * (F[i] *
cos(frequency * t[i]) - F[i-1] *
cos(frequency * t[i-1])) -
330 (F[i] - F[i-1]) * (
sin(frequency * t[i]) -
sin(frequency * t[i-1])));
335 const std::vector<double> & t,
337 const double & frequency,
338 const std::vector<double> & F)
const {
339 double dt = t[i] - t[i-1];
340 return dz / (frequency * frequency * dt * dt) *
341 (frequency * dt * (F[i] *
sin(frequency * t[i]) - F[i-1] *
sin(frequency * t[i-1])) +
342 (F[i] - F[i-1]) * (
cos(frequency * t[i]) -
cos(frequency * t[i-1])));
527 #endif // CLASSIC_RFCavity_HH
virtual std::string getFieldMapFN() const
virtual void setAmplitudeError(double vPeakError)
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
virtual void addKR(int i, double t, Vector_t &K) override
void setRmin(double rmin)
virtual ElementBase::ElementType getType() const override
Get element type std::string.
virtual double getAmplitude() const =0
Get RF amplitude.
virtual bool getFast() const
void setPhaseModelName(std::string name)
virtual void goOffline() override
virtual double getPhase() const =0
Get RF phase.
Tps< T > sin(const Tps< T > &x)
Sine.
virtual double getAmplitudem() const
double spline(double z, double *za)
double getdB(const int &i, const std::vector< double > &t, const double &dz, const double &frequency, const std::vector< double > &F) const
virtual void setComponentType(std::string name) override
virtual double getElementLength() const override
Get design length.
void setRmax(double rmax)
virtual void getElementDimensions(double &begin, double &end) const override
virtual void finalise() override
virtual void setAmplitudem(double vPeak)
virtual double getFrequencym() const
virtual bool getAutophaseVeto() const
std::string frequency_name_m
void operator=(const RFCavity &)
void setAmplitudeModel(std::shared_ptr< AbstractTimeDependence > time_dep)
virtual void setFrequencym(double freq)
virtual double getRmin() const
void setFrequencyModelName(std::string name)
double getdT(const int &i, const std::vector< double > &E, const double &dz, const double mass) const
double getdE(const int &i, const std::vector< double > &t, const double &dz, const double &phi, const double &frequency, const std::vector< double > &F) const
std::unique_ptr< double[]> RNormal_m
void setCavityType(std::string type)
std::unique_ptr< double[]> VrNormal_m
void setFrequencyModel(std::shared_ptr< AbstractTimeDependence > time_dep)
virtual void getDimensions(double &zBegin, double &zEnd) const override
virtual double getAzimuth() const
void setPhaseModel(std::shared_ptr< AbstractTimeDependence > time_dep)
void setPhi0(double phi0)
virtual bool bends() const override
std::unique_ptr< double[]> DvDr_m
virtual double getPhi0() const
virtual double getGapWidth() const
void setAzimuth(double angle)
virtual double getAmplitudeError() const
virtual double getPerpenDistance() const
virtual std::string getComponentType() const override
virtual double getPhasem() const
void setFrequency(double freq)
virtual double getFrequency() const =0
Get RF frequencey.
constexpr double c
The velocity of light in m/s.
void setAmplitudeModelName(std::string name)
virtual CoordinateSystemTrafo getEdgeToEnd() const override
std::string getFrequencyModelName()
void setGapWidth(double gapwidth)
virtual double getPhaseError() const
Vektor< double, 3 > Vector_t
double getdA(const int &i, const std::vector< double > &t, const double &dz, const double &frequency, const std::vector< double > &F) const
virtual void setFieldMapFN(std::string fmapfn)
Set the name of the field map.
void setPerpenDistance(double pdis)
Tps< T > sqrt(const Tps< T > &x)
Square root.
virtual void addKT(int i, double t, Vector_t &K) override
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
virtual void setAutophaseVeto(bool veto=true)
virtual void setPhasem(double phase)
virtual double getAutoPhaseEstimateFallback(double E0, double t0, double q, double m)
virtual double getCycFrequency() const
void getMomentaKick(const double normalRadius, double momentum[], const double t, const double dtCorrt, const int PID, const double restMass, const int chargenumber)
used in OPAL-cycl
virtual double getRmax() const
virtual void setFast(bool fast)
virtual double getSinAzimuth() const
Tps< T > cos(const Tps< T > &x)
Cosine.
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
std::shared_ptr< AbstractTimeDependence > phase_td_m
virtual void accept(BeamlineVisitor &) const override
Apply visitor to RFCavity.
virtual bool isInside(const Vector_t &r) const override
std::string getCavityType() const
std::shared_ptr< AbstractTimeDependence > frequency_td_m
std::string getAmplitudeModelName()
virtual void setPhaseError(double phaseError)
std::shared_ptr< AbstractTimeDependence > amplitude_td_m
virtual std::pair< double, double > trackOnAxisParticle(const double &p0, const double &t0, const double &dt, const double &q, const double &mass, std::ofstream *out=NULL)
virtual double getCosAzimuth() const
Interface for a single beam element.
virtual void setDesignEnergy(const double &ekin, bool changeable=true) override
virtual double getDesignEnergy() const override
virtual CoordinateSystemTrafo getEdgeToBegin() const override
virtual double getAutoPhaseEstimate(const double &E0, const double &t0, const double &q, const double &m)
std::string getPhaseModelName()
std::string amplitude_name_m
virtual void goOnline(const double &kineticEnergy) override