38#include <boost/algorithm/string/case_conv.hpp>
91 R_pprime[1] = R_prime[1];
175 if (n > transMaxOrder) {
179 for (std::size_t i = 1; i <= n; i++) {
180 for (std::size_t j = 0; j <= transMaxOrder; j++) {
182 temp[j] = temp[j + 1] *
static_cast<double>(j + 1);
188 std::size_t k = transMaxOrder - n + 1;
191 func = func * x + temp[k];
201 double stepSize = 1e-3;
206 deriv /= 12 * stepSize;
215 double stepSize = 1e-3;
220 deriv /= 12 * stepSize;
298 double& ,
double& ) {
PETE_TUTree< FnFabs, typename T::PETE_Expr_t > fabs(const PETE_Expr< T > &l)
double integrate(const double &a, const double &s0, const double &lambdaleft, const double &lambdaright, const int &n)
virtual void visitMultipoleT(const MultipoleT &)=0
Apply the algorithm to an arbitrary multipole.
Component(const std::string &name)
Constructor with given name.
PartBunchBase< double, 3 > * RefPartBunch_m
bool getFlagDeleteOnTransverseExit() const
virtual void setElementLength(double length)
Set design length.
ElementBase(const std::string &name)
Constructor with given name.
static void setTanhDiffIndices(size_t n)
Vector_t toMagnetCoords(const Vector_t &R)
void setRotation(double rot)
std::size_t getTransMaxOrder() const
std::vector< double > transProfile_m
void setScalingName(const std::string &name)
Vector_t localCartesianToOpalCartesian(const Vector_t &r)
void setBendAngle(double angle, bool variableRadius)
double getFringeDeriv(const std::size_t &n, const double &s)
void setElementLength(double length) override
endfieldmodel::Tanh fringeField_r
endfieldmodel::Tanh fringeField_l
void setEntranceAngle(double entranceAngle)
void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
ElementBase * clone() const override
std::string scalingName_m
EMField & getField() override
void accept(BeamlineVisitor &visitor) const override
void setAperture(const double &vertAp, const double &horizAp)
void setMaxOrder(size_t orderZ, size_t orderX)
const std::vector< double > & getTransProfile() const
double localCartesianRotation()
bool apply(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Vector_t rotateFrame(const Vector_t &R) const
bool insideAperture(const Vector_t &R) const
double getTransDeriv(const std::size_t &n, const double &x) const
BGeometryBase & getGeometry() override
bool bends() const override
void initialiseTimeDepencencies() const
std::shared_ptr< AbstractTimeDependence > scalingTD_m
double getFnDerivS(const std::size_t &n, const double &x, const double &s)
double getFnDerivX(const std::size_t &n, const double &x, const double &s)
void chooseImplementation()
bool insideBoundingBox(const Vector_t &R) const
double boundingBoxLength_m
MultipoleT(const std::string &name)
void setFringeField(const double &s0, const double &lambda_left, const double &lambda_right)
std::tuple< double, double, double > getFringeField() const
void setEntryOffset(double offset)
void setBoundingBoxLength(double boundingBoxLength)
void setTransProfile(const std::vector< double > &profile)
std::unique_ptr< MultipoleTBase > implementation_
static std::shared_ptr< AbstractTimeDependence > getTimeDependence(std::string name)
Abstract base class for accelerator geometry classes.
Vektor< double, 3 > Vector_t