29#ifndef CLASSIC_MULTIPOLETBASE_H
30#define CLASSIC_MULTIPOLETBASE_H
142 virtual void setMaxOrder(
const std::size_t& maxOrder);
169 bool setFringeField(
const double& s0,
const double& lambda_left,
const double& lambda_right);
196 void setAperture(
const double& vertAp,
const double& horizAp);
215 virtual void getDimensions(
double& zBegin,
double& zEnd)
const;
303 double getFnDerivX(
const std::size_t& n,
const double& x,
const double& s);
311 double getFnDerivS(
const std::size_t& n,
const double& x,
const double& s);
318 virtual double getFn(
const std::size_t& n,
const double& x,
const double& s) = 0;
326 std::shared_ptr<ParticleContainer_t> pc =
RefPartBunch_m->getParticleContainer();
327 auto Rview = pc->R.getView();
328 auto Pview = pc->P.getView();
333 return apply(R(i), P(i), t, E, B);
408 std::vector<double> temp(2, 0.0);
414 std::vector<double> temp(2, 0.0);
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
Component(const std::string &name)
Constructor with given name.
PartBunch_t * RefPartBunch_m
virtual double getRadius(const double &s)=0
double getBoundingBoxLength() const
std::size_t getTransMaxOrder() const
virtual void setBendAngle(const double &angle)
bool insideAperture(const Vector_t< double, 3 > &R)
virtual double getFn(const std::size_t &n, const double &x, const double &s)=0
double boundingBoxLength_m
std::vector< double > getFringeLength() const
virtual void transformCoords(Vector_t< double, 3 > &R)=0
void setRotation(const double &rot)
virtual void transformBField(Vector_t< double, 3 > &B, const Vector_t< double, 3 > &R)=0
void setLength(const double &length)
double getDipoleConstant() const
endfieldmodel::Tanh fringeField_l
virtual void setMaxOrder(const std::size_t &maxOrder)
double getRotation() const
std::vector< double > getAperture() const
std::vector< double > transProfile_m
double getEntranceAngle() const
virtual double getBx(const Vector_t< double, 3 > &R)
std::size_t getMaxOrder() const
void initialise(PartBunch_t *, double &startField, double &endField)
virtual double getBs(const Vector_t< double, 3 > &R)
endfieldmodel::Tanh fringeField_r
std::vector< double > getTransProfile() const
Vector_t< double, 3 > rotateFrame(const Vector_t< double, 3 > &R)
double getTransDeriv(const std::size_t &n, const double &x)
double getBz(const Vector_t< double, 3 > &R)
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)
virtual double getScaleFactor(const double &x, const double &s)=0
void setEntranceAngle(const double &entranceAngle)
std::size_t transMaxOrder_m
void setTransProfile(const std::size_t &n, const double &Bn)
double getFnDerivX(const std::size_t &n, const double &x, const double &s)
bool setFringeField(const double &s0, const double &lambda_left, const double &lambda_right)
void setDipoleConstant(const double &B0)
double getFringeDeriv(const std::size_t &n, const double &s)
virtual void getDimensions(double &zBegin, double &zEnd) const
void setBoundingBoxLength(const double &boundingBoxLength)
Vector_t< double, 3 > rotateFrameInverse(Vector_t< double, 3 > &B)
double getFnDerivS(const std::size_t &n, const double &x, const double &s)
void setAperture(const double &vertAp, const double &horizAp)
void setTransMaxOrder(const std::size_t &transMaxOrder)
virtual double getBendAngle() const
The magnetic field of a multipole.
Abstract base class for electromagnetic fields.