82 std::shared_ptr<ParticleContainer_t> pc =
RefPartBunch_m->getParticleContainer();
83 auto Rview = pc->R.getView();
84 auto Pview = pc->P.getView();
88 return apply(R, P, t, E, B);
123 double r = std::sqrt(pos[0] * pos[0] + pos[2] * pos[2]);
124 double phi = std::atan2(
131 B[0] += bCyl[0] * std::cos(phi) - bCyl[2] * std::sin(phi);
132 B[2] += bCyl[0] * std::sin(phi) + bCyl[2] * std::cos(phi);
141 if (r < rMin_m || r >
rMax_m) {
145 double normRadius = r /
r0_m;
148 double h = std::pow(normRadius,
k_m) *
Bz_m;
158 std::vector<double> fringeDerivatives(
maxOrder_m + 1, 0.);
159 for (
size_t i = 0; i < fringeDerivatives.size(); ++i) {
160 fringeDerivatives[i] =
endField_m->function(phiSpiral, i);
168 deltaB[1] = f2n * h * std::pow(z / r, n);
175 deltaB[0] = (f2n * (
k_m - n) / (n + 1) -
tanDelta_m * f2nplus1) * h
176 * std::pow(z / r, n + 1);
178 f2nplus1 * h * std::pow(z / r, n + 1);
230 std::shared_ptr<endfieldmodel::EndFieldModel> efm =
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &)=0
Component(const std::string &name)
Constructor with given name.
PartBunch_t * RefPartBunch_m
static std::shared_ptr< EndFieldModel > getEndFieldModel(std::string name)
virtual void rescale(double scaleFactor)=0
virtual double getCentreLength() const =0
virtual double getEndLength() const =0
virtual EndFieldModel * clone() const =0
std::string endFieldName_m
void accept(BeamlineVisitor &visitor) const override
void setAzimuthalExtent(double azimuthalExtent)
endfieldmodel::EndFieldModel * endField_m
ScalingFFAMagnet * clone() const override
ScalingFFAMagnet(const std::string &name)
void calculateDfCoefficients()
void setPhiStart(double phiStart)
EMField & getField() override
void setEndField(endfieldmodel::EndFieldModel *endField)
bool apply(const size_t &i, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
void setPhiEnd(double phiEnd)
bool getFieldValue(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &B) const
Vector_t< double, 3 > centre_m
std::vector< std::vector< double > > dfCoefficients_m
bool getFieldValueCylindrical(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &B) const
double getPhiStart() const
BGeometryBase & getGeometry() override
bool bends() const override
void initialise(PartBunch_t *bunch, double &startField, double &endField) override
PlanarArcGeometry planarArcGeometry_m
Abstract base class for accelerator geometry classes.
Abstract base class for electromagnetic fields.