30#include "gsl/gsl_sf_pow_int.h"
46 double alpha = std::atan(R[2] / (R[0] + radius));
48 R[0] = R[2] / std::sin(alpha) - radius;
49 R[2] = radius * alpha;
59 B[0] = Bx * std::cos(theta) - Bs * std::sin(theta);
60 B[2] = Bx * std::sin(theta) + Bs * std::cos(theta);
78 double theta =
element_m->getBendAngle() /2.0;
79 double ds = radius * std::sin(theta);
80 double dx = radius * (1 - std::cos(theta));
97 for (std::size_t j = 0;
100 double FringeDerivj =
element_m->getFringeDeriv(2 * j, s);
101 for (std::size_t i = 0;
107 func += (
recursion_m.at(n).evaluatePolynomial(x / rho, i, j)
108 *
element_m->getTransDeriv(i, x) * FringeDerivj)
109 / gsl_sf_pow_int(rho, 2 *
static_cast<int>(n) -
static_cast<int>(i) -
110 2 *
static_cast<int>(j));
113 func *= gsl_sf_pow_int(-1.0,
static_cast<int>(n));
MultipoleTBase(MultipoleT *element)
std::vector< polynomial::RecursionRelation > recursion_m
void setMaxOrder(size_t orderZ, size_t orderX) override
Vector_t localCartesianToOpalCartesian(const Vector_t &r) override
double getFn(size_t n, double x, double s) override
double getScaleFactor(double x, double s) override
PlanarArcGeometry planarArcGeometry_m
MultipoleTCurvedConstRadius(MultipoleT *element)
void initialise() override
void transformBField(Vector_t &, const Vector_t &) override
void transformCoords(Vector_t &) override
void resizeX(const std::size_t &xDerivatives)
void truncate(std::size_t highestXorder)
Vektor< double, 3 > Vector_t