41template <
class T,
unsigned Dim>
70 Ring(std::string ring);
94 virtual bool apply(
const size_t &
id,
const double &t,
Vector_t &E,
125 double &endField)
override;
141 virtual bool bends()
const override {
return true;}
152 virtual void getDimensions(
double &zBegin,
double &zEnd)
const override;
413 return Vector_t(vec_3d(0), vec_3d(1), vec_3d(2));
417 return Vector3D(vec_t[0], vec_t[1], vec_t[2]);
std::vector< RingSection * > RingSectionList
Tps< T > sqrt(const Tps< T > &x)
Square root.
Interface for a single beam element.
Ring describes a ring type geometry for tracking.
virtual const EMField & getField() const override
double getBeamRInit() const
Vector_t getNextPosition() const
std::vector< RingSection * > getSectionsAt(const Vector_t &pos)
void setSymmetry(double symmetry)
PartBunchBase< double, 3 > * getRefPartBunch() const
double getLatticePhiInit() const
double getRingMinR() const
Rotation3D getRotationStartToEnd(Euclid3D delta) const
virtual EMField & getField() override
static bool sectionCompare(RingSection const *const sec1, RingSection const *const sec2)
Vector_t getNextNormal() const
double getBeamPRInit() const
virtual void finalise() override
double getSymmetry() const
virtual bool apply(const size_t &id, const double &t, Vector_t &E, Vector_t &B) override
Ring & operator=(const Ring &ring)
RingSection * getLastSectionPlaced() const
void setBeamRInit(double rInit)
virtual const PlanarArcGeometry & getGeometry() const override
void setIsClosed(bool isClosed)
void setLatticeThetaInit(double thetaInit)
void setRefPartBunch(PartBunchBase< double, 3 > *bunch)
virtual ElementBase * clone() const override
void setHarmonicNumber(double cyclHarm)
void setLatticePhiInit(double phiInit)
virtual bool bends() const override
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
double getLatticeThetaInit() const
double latticeThetaInit_m
std::vector< RingSectionList > ringSections_m
virtual void accept(BeamlineVisitor &visitor) const override
void setRingAperture(double minR, double maxR)
void setScale(double scale)
RingSectionList section_list_m
double getBeamPhiInit() const
void setBeamPRInit(double pRInit)
double getIsClosed() const
double getRingMaxR() const
void checkMidplane(Euclid3D delta) const
void setLossDataSink(LossDataSink *sink)
void setBeamPhiInit(double phiInit)
PlanarArcGeometry planarArcGeometry_m
double getHarmonicNumber()
virtual void getDimensions(double &zBegin, double &zEnd) const override
void setRFFreq(double rfFreq)
PartBunchBase< double, 3 > * getLossDataSink() const
void setLatticeRInit(double rInit)
virtual PlanarArcGeometry & getGeometry() override
void appendElement(const Component &element)
void rotateToCyclCoordinates(Euclid3D &euclid3d) const
static Vector_t convert(const Vector3D &vec)
double getLatticeRInit() const
static const double lengthTolerance_m
PartBunchBase< double, 3 > * refPartBunch_m
static const double angleTolerance_m
Displacement and rotation in space.
A simple arc in the XZ plane.
Rotation in 3-dimensional space.
Abstract base class for electromagnetic fields.
Component placement handler in ring geometry.
Vektor< double, 3 > Vector_t