41 MomentumX_m(right.MomentumX_m),
42 MomentumY_m(right.MomentumY_m),
43 MomentumZ_m(right.MomentumZ_m),
46 width_m(right.width_m),
47 height_m(right.height_m)
98 double frac = -
R(2) / (P(2) * recpgamma);
105 time_m.push_back(t + frac * dt);
137 *gmsg <<
"* Finalize degrader " <<
getName() <<
endl;
141 Inform msg(
"Degrader::goOnline ");
145 PosX_m.reserve(maximumSize);
146 PosY_m.reserve(maximumSize);
147 PosZ_m.reserve(maximumSize);
151 time_m.reserve(maximumSize);
152 id_m.reserve(maximumSize);
157 Inform msg(
"Degrader::goOffline ");
159 msg <<
" done..." <<
endl;
Tps< T > sqrt(const Tps< T > &x)
Square root.
constexpr double c
The velocity of light in m/s.
virtual void getDimensions(double &zBegin, double &zEnd) const override
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Degrader.
virtual bool isInside(const Vector_t &R) const override
virtual void finalise() override
ParticleAttrib< Vector_t > P
virtual ElementType getType() const override
Get element type std::string.
PartBunchBase< double, 3 > * RefPartBunch_m
std::vector< double > PosX_m
virtual const std::string & getName() const
Get element name.
double getQ() const
Access to reference data.
Inform & endl(Inform &inf)
T euclidean_norm(const Vector< T > &)
Euclidean norm.
virtual bool bends() const override
size_t getLocalNum() const
virtual bool computeEnergyLoss(PartBunchBase< double, 3 > *bunch, Vector_t &P, const double deltat, bool includeFluctuations=true) const =0
std::vector< double > PosZ_m
virtual void visitDegrader(const Degrader &)=0
Apply the algorithm to a degrader.
virtual double getElementLength() const
Get design length.
std::vector< double > MomentumY_m
std::vector< double > time_m
ParticleAttrib< double > dt
virtual void goOffline() override
virtual void goOnline(const double &kineticEnergy) override
virtual ParticleMatterInteractionHandler * getParticleMatterInteraction() const
std::vector< double > MomentumX_m
ParticleAttrib< int > Bin
Interface for a single beam element.
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
std::vector< double > MomentumZ_m
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
void setDimensions(double xsize, double ysize)
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
std::vector< double > PosY_m
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
double dot(const Vector3D &lhs, const Vector3D &rhs)
Vector dot product.