23 #ifndef BEAMSTRIPPINGPHYSICS_H
24 #define BEAMSTRIPPINGPHYSICS_H
31 #include <gsl/gsl_math.h>
32 #include <gsl/gsl_rng.h>
38 template <
class T,
unsigned Dim>
55 const std::pair<Vector_t, double>& boundingSphere)
override;
57 virtual const std::string
getType()
const override;
61 virtual double getTime()
override;
62 virtual std::string
getName()
override;
76 double a1,
double a2,
double a3,
77 double a4,
double a5,
double a6);
93 bool )
const override {
182 return "BeamStrippingPhysics";
185 #endif //BEAMSTRIPPINGPHYSICS_H
double computeCrossSectionTabata(double energy, double energyThreshold, double a1, double a2, double a3, double a4, double a5, double a6)
virtual void print(Inform &msg) override
virtual void apply(PartBunchBase< double, 3 > *bunch, const std::pair< Vector_t, double > &boundingSphere) override
bool evalLorentzStripping(double &gamma, double &eField)
double computeCrossSectionBohr(double energy, int zTarget, double massInAmu)
static const double csCoefProtonProduction_H_Tabata[9]
void doPhysics(PartBunchBase< double, 3 > *bunch)
virtual const std::string getType() const override
static const double csCoefSingleLoss_H[3][9]
virtual std::string getName() override
void computeCrossSection(double energy)
static const double energyRangeH2plusinH2[2]
double nCSA_m
macroscopic cross sections
unsigned stoppedPartStat_m
virtual double getTime() override
virtual unsigned int getNumEntered() override
static const double csCoefSingle_Hminus_Chebyshev[11]
ElementBase * element_ref_m
virtual bool stillActive() override
unsigned rediffusedStat_m
virtual const std::string & getName() const
Get element name.
static const double csCoefDouble_Hplus[3][9]
static const double csCoefDouble_Hminus[3][9]
static const double csCoefDouble_Hplus_Chebyshev[11]
void getSecondaryParticles(PartBunchBase< double, 3 > *bunch, size_t &i, bool pdead_LS)
void transformToSecondary(PartBunchBase< double, 3 > *bunch, size_t &i, ParticleType type)
unsigned bunchToMatStat_m
virtual size_t getParticlesInMat() override
static const double csCoefProtonProduction_H2plus_Tabata[11]
static const double csCoefH3plusProduction_H2plus_Tabata[7]
static const double csCoefHydrogenProduction_H2plus_Chebyshev[11]
bool computeEnergyLoss(PartBunchBase< double, 3 > *, Vector_t &, const double, bool) const override
static const double csCoefSingleCapt_H[3][9]
virtual unsigned getRediffused() override
std::unique_ptr< LossDataSink > lossDs_m
static const double csCoefHminusProduction_H_Tabata[13]
bool evalGasStripping(double &deltas)
static const double csCoefSingle_Hplus_Chebyshev[11]
static const double csCoefSingle_Hplus_Tabata[10]
static const double csCoefDouble_Hminus_Chebyshev[11]
BeamStrippingPhysics(const std::string &name, ElementBase *element)
static const double csCoefSingle_Hplus[3][9]
unsigned totalPartsInMat_m
void setCyclotron(Cyclotron *cycl)
double computeCrossSectionChebyshev(double energy, double energyMin, double energyMax)
static const double csCoefProtonProduction_H2plus_Chebyshev[11]
static const double csCoefSingle_Hminus[3][9]
double computeCrossSectionNakai(double energy, double energyThreshold, int &i)