29#ifndef CLASSIC_MULTIPOLET_H
30#define CLASSIC_MULTIPOLET_H
86#include "gsl/gsl_sf.h"
105 void getDimensions(
double& zBegin,
double& zEnd)
const override;
141 bool bends()
const override;
191 bool setFringeField(
double s0,
double lambda_left,
double lambda_right);
335 double getFnDerivX(std::size_t n,
double x,
double s);
343 double getFnDerivS(std::size_t n,
double x,
double s);
350 double getFn(std::size_t n,
double x,
double s);
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
Component(const std::string &name)
Constructor with given name.
ElementBase(const std::string &name)
Constructor with given name.
void setBendAngle(double angle)
void setRotation(double rot)
std::size_t getTransMaxOrder() const
std::vector< double > transProfile_m
void setDipoleConstant(double B0)
double getBoundingBoxLength() const
std::size_t transMaxOrder_m
void setMaxXOrder(std::size_t maxXOrder)
void setAperture(double vertAp, double horizAp)
Vector_t< double, 3 > rotateFrameInverse(Vector_t< double, 3 > &B)
Vector_t< double, 3 > transformCoords(const Vector_t< double, 3 > &R)
MultipoleT operator=(const MultipoleT &rhs)
double getTransDeriv(std::size_t n, double x)
void setMaxOrder(std::size_t maxOrder)
std::vector< polynomial::RecursionRelationTwo > recursion_VarRadius_m
bool apply(const Vector_t< double, 3 > &R, const Vector_t< double, 3 > &P, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
endfieldmodel::Tanh fringeField_r
endfieldmodel::Tanh fringeField_l
void setEntranceAngle(double entranceAngle)
double getBz(const Vector_t< double, 3 > &R)
ElementBase * clone() const override
bool insideAperture(const Vector_t< double, 3 > &R)
void setTransMaxOrder(std::size_t transMaxOrder)
EMField & getField() override
double getScaleFactor(double x, double s)
double getFnDerivX(std::size_t n, double x, double s)
void accept(BeamlineVisitor &visitor) const override
void setBoundingBoxLength(const double &boundingBoxLength)
double getChordLength() const
std::size_t getMaxOrder() const
void getDimensions(double &zBegin, double &zEnd) const override
bool getVarRadius() const
double getFnDerivS(std::size_t n, double x, double s)
double getRadius(double s)
std::vector< polynomial::RecursionRelation > recursion_ConstRadius_m
double getBx(const Vector_t< double, 3 > &R)
std::size_t getMaxXOrder() const
double getFn(std::size_t n, double x, double s)
bool setFringeField(double s0, double lambda_left, double lambda_right)
void initialise(PartBunch_t *, double &startField, double &endField) override
double getFringeDeriv(int n, double s)
double getDipoleConstant() const
PlanarArcGeometry planarArcGeometry_m
void setLength(double length)
bool bends() const override
std::vector< double > getAperture() const
double getRotation() const
void setTransProfile(std::size_t n, double Bn)
double getBendRadius() const
double boundingBoxLength_m
MultipoleT(const std::string &name)
std::vector< double > getTransProfile() const
double getEntranceAngle() const
Vector_t< double, 3 > rotateFrame(const Vector_t< double, 3 > &R)
double getBendAngle() const
double getBs(const Vector_t< double, 3 > &R)
PlanarArcGeometry & getGeometry() override
std::vector< double > getFringeLength() const
A simple arc in the XZ plane.
The magnetic field of a multipole.
Abstract base class for electromagnetic fields.