30 #ifndef CLASSIC_MULTIPOLET_H
31 #define CLASSIC_MULTIPOLET_H
86 #include "gsl/gsl_sf.h"
106 void getDimensions(
double &zBegin,
double &zEnd)
const override;
135 double &endField)
override;
142 bool bends()
const override;
192 bool setFringeField(
double s0,
double lambda_left,
double lambda_right);
336 double getFnDerivX(std::size_t n,
double x,
double s);
344 double getFnDerivS(std::size_t n,
double x,
double s);
351 double getFn(std::size_t n,
double x,
double s);
std::vector< double > getTransProfile() const
std::vector< double > getFringeLength() const
std::vector< double > transProfile_m
std::size_t getMaxOrder() const
item[EANGLE] Entrance edge angle(radians).\item[ROTATION] Rotation of the magnet about its central axis(radians
void setMaxXOrder(std::size_t maxXOrder)
void setBoundingBoxLength(const double &boundingBoxLength)
double getFn(std::size_t n, double x, double s)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
Abstract base class for electromagnetic fields.
double getBendAngle() const
double getTransDeriv(std::size_t n, double x)
void setBendAngle(double angle)
void setDipoleConstant(double B0)
ElementBase * clone() const override
void setTransMaxOrder(std::size_t transMaxOrder)
double getFringeDeriv(int n, double s)
A simple arc in the XZ plane.
double getBoundingBoxLength() const
void setEntranceAngle(double entranceAngle)
std::size_t getTransMaxOrder() const
void setLength(double length)
Vector_t rotateFrame(const Vector_t &R)
double getScaleFactor(double x, double s)
endfieldmodel::Tanh fringeField_l
double getDipoleConstant() const
bool getVarRadius() const
void setMaxOrder(std::size_t maxOrder)
bool bends() const override
double getEntranceAngle() const
double getChordLength() const
bool apply(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
std::size_t getMaxXOrder() const
void setAperture(double vertAp, double horizAp)
double getBz(const Vector_t &R)
EMField & getField() override
double getFnDerivS(std::size_t n, double x, double s)
endfieldmodel::Tanh fringeField_r
Vector_t transformCoords(const Vector_t &R)
double getBx(const Vector_t &R)
double getRadius(double s)
double getRotation() const
std::vector< double > getAperture() const
double getBs(const Vector_t &R)
MultipoleT(const std::string &name)
double boundingBoxLength_m
bool insideAperture(const Vector_t &R)
std::vector< polynomial::RecursionRelation > recursion_ConstRadius_m
bool setFringeField(double s0, double lambda_left, double lambda_right)
std::size_t transMaxOrder_m
double getFnDerivX(std::size_t n, double x, double s)
void getDimensions(double &zBegin, double &zEnd) const override
Interface for a single beam element.
void setTransProfile(std::size_t n, double Bn)
MultipoleT operator=(const MultipoleT &rhs)
std::vector< polynomial::RecursionRelationTwo > recursion_VarRadius_m
Vector_t rotateFrameInverse(Vector_t &B)
double getBendRadius() const
PlanarArcGeometry planarArcGeometry_m
The magnetic field of a multipole.
void setRotation(double rot)
PlanarArcGeometry & getGeometry() override
void accept(BeamlineVisitor &visitor) const override