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);
double getBx(const Vector_t &R)
double boundingBoxLength_m
double getBendRadius() const
void setDipoleConstant(double B0)
std::size_t getTransMaxOrder() const
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
double getScaleFactor(double x, double s)
void setTransMaxOrder(std::size_t transMaxOrder)
std::vector< double > transProfile_m
Interface for basic beam line object.
MultipoleT operator=(const MultipoleT &rhs)
double getDipoleConstant() const
PlanarArcGeometry & getGeometry() override
A simple arc in the XZ plane.
double getFn(std::size_t n, double x, double s)
bool setFringeField(double s0, double lambda_left, double lambda_right)
double getBs(const Vector_t &R)
Vector_t rotateFrameInverse(Vector_t &B)
std::size_t getMaxXOrder() const
std::size_t getMaxOrder() const
void setEntranceAngle(double entranceAngle)
double getRadius(double s)
void setBendAngle(double angle)
EMField & getField() override
PlanarArcGeometry planarArcGeometry_m
MultipoleT(const std::string &name)
void setMaxOrder(std::size_t maxOrder)
double getFnDerivX(std::size_t n, double x, double s)
double getFringeDeriv(int n, double s)
bool getVarRadius() const
double getEntranceAngle() const
Vector_t transformCoords(const Vector_t &R)
Vector_t rotateFrame(const Vector_t &R)
void setAperture(double vertAp, double horizAp)
std::vector< double > getAperture() const
Abstract base class for electromagnetic fields.
double getBz(const Vector_t &R)
std::vector< polynomial::RecursionRelationTwo > recursion_VarRadius_m
double getBoundingBoxLength() const
bool insideAperture(const Vector_t &R)
void setTransProfile(std::size_t n, double Bn)
The magnetic field of a multipole.
endfieldmodel::Tanh fringeField_r
void setRotation(double rot)
bool bends() const override
void setLength(double length)
void setMaxXOrder(std::size_t maxXOrder)
double getBendAngle() const
double getChordLength() const
void getDimensions(double &zBegin, double &zEnd) const override
void accept(BeamlineVisitor &visitor) const override
bool apply(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
double getFnDerivS(std::size_t n, double x, double s)
ElementBase * clone() const override
Interface for a single beam element.
std::vector< double > getTransProfile() const
void setBoundingBoxLength(const double &boundingBoxLength)
double getRotation() const
std::vector< double > getFringeLength() const
double getTransDeriv(std::size_t n, double x)
endfieldmodel::Tanh fringeField_l
std::vector< polynomial::RecursionRelation > recursion_ConstRadius_m
std::size_t transMaxOrder_m