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