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