31#ifndef CLASSIC_MULTIPOLET_H
32#define CLASSIC_MULTIPOLET_H
137 double& endField)
override;
141 bool bends()
const override;
167 const double& lambda_right);
202 void setAperture(
const double& vertAp,
const double& horizAp);
253 double getTransDeriv(
const std::size_t& n,
const double& x)
const;
Component(const std::string &name)
Constructor with given name.
ElementBase(const std::string &name)
Constructor with given name.
Vector_t toMagnetCoords(const Vector_t &R)
void setRotation(double rot)
std::size_t getTransMaxOrder() const
std::vector< double > transProfile_m
double getBoundingBoxLength() const
void setScalingName(const std::string &name)
Vector_t localCartesianToOpalCartesian(const Vector_t &r)
size_t getMaxFOrder() const
const EMField & getField() const override
bool getVariableRadius() const
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::tuple< double, double > getAperture()
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
~MultipoleT() override=default
bool insideAperture(const Vector_t &R) const
double getTransDeriv(const std::size_t &n, const double &x) const
size_t getMaxXOrder() const
BGeometryBase & getGeometry() override
void setScalingModel(const std::shared_ptr< AbstractTimeDependence > &td)
bool bends() const override
double getRotation() const
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)
std::string getScalingName() const
double getEntranceAngle() const
void setFringeField(const double &s0, const double &lambda_left, const double &lambda_right)
std::tuple< double, double, double > getFringeField() const
double getBendAngle() const
void setEntryOffset(double offset)
void setBoundingBoxLength(double boundingBoxLength)
double getEntryOffset() const
void setTransProfile(const std::vector< double > &profile)
void getDimensions(double &, double &) const override
std::unique_ptr< MultipoleTBase > implementation_
Abstract base class for accelerator geometry classes.
The magnetic field of a multipole.
Abstract base class for electromagnetic fields.
Vektor< double, 3 > Vector_t