23 #ifndef BEAMSTRIPPINGPHYSICS_HH
24 #define BEAMSTRIPPINGPHYSICS_HH
31 #include <gsl/gsl_math.h>
32 #include <gsl/gsl_rng.h>
34 template <
class T,
unsigned Dim>
52 const std::pair<Vector_t, double>& boundingSphere);
54 virtual const std::string
getType()
const;
73 double a1,
double a2,
double a3,
74 double a4,
double a5,
double a6);
171 return "BeamStrippingPhysics";
virtual const std::string & getName() const
Get element name.
static const double csCoefProtonProduction_H_Tabata[9]
double computeCrossSectionNakai(double energy, double energyThreshold, int &i)
virtual size_t getParticlesInMat()
static const double csCoefProtonProduction_H2plus_Tabata[11]
double nCSA
macroscopic cross sections
static const double csCoefProtonProduction_H2plus_Chebyshev[11]
static const double csCoefDouble_Hminus[3][9]
virtual std::string getName()
static const double csCoefSingle_Hminus[3][9]
bool computeEnergyLoss(PartBunchBase< double, 3 > *, Vector_t &, const double, bool) const
void getSecondaryParticles(PartBunchBase< double, 3 > *bunch, size_t &i, bool pdead_LS)
double computeCrossSectionChebyshev(double energy, double energyMin, double energyMax)
static const double csCoefSingle_Hminus_Chebyshev[11]
static const double energyRangeH2plusinH2[2]
static const double csCoefSingle_Hplus_Tabata[10]
void transformToHydrogen(PartBunchBase< double, 3 > *bunch, size_t &i)
virtual unsigned getRediffused()
void doPhysics(PartBunchBase< double, 3 > *bunch)
static const double csCoefHminusProduction_H_Tabata[13]
double computeCrossSectionBohr(double energy, int zTarget, double massInAmu)
static const double csCoefSingleCapt_H[3][9]
static const double csCoefDouble_Hplus_Chebyshev[11]
virtual void apply(PartBunchBase< double, 3 > *bunch, const std::pair< Vector_t, double > &boundingSphere)
static const double csCoefSingle_Hplus[3][9]
void transformToH3plus(PartBunchBase< double, 3 > *bunch, size_t &i)
void transformToHminus(PartBunchBase< double, 3 > *bunch, size_t &i)
virtual unsigned int getNumEntered()
static const double csCoefSingleLoss_H[3][9]
static const double csCoefSingle_Hplus_Chebyshev[11]
virtual bool stillActive()
virtual void print(Inform &msg)
unsigned bunchToMatStat_m
unsigned rediffusedStat_m
void computeCrossSection(PartBunchBase< double, 3 > *bunch, size_t &i, double energy)
virtual const std::string getType() const
void setCyclotron(Cyclotron *cycl)
BeamStrippingPhysics(const std::string &name, ElementBase *element)
double computeCrossSectionTabata(double energy, double energyThreshold, double a1, double a2, double a3, double a4, double a5, double a6)
void transformToProton(PartBunchBase< double, 3 > *bunch, size_t &i)
bool evalLorentzStripping(double &gamma, double &eField)
std::unique_ptr< LossDataSink > lossDs_m
bool evalGasStripping(double &deltas)
static const double csCoefHydrogenProduction_H2plus_Chebyshev[11]
static const double csCoefH3plusProduction_H2plus_Tabata[7]
static const double csCoefDouble_Hminus_Chebyshev[11]
unsigned stoppedPartStat_m
static const double csCoefDouble_Hplus[3][9]
ElementBase * element_ref_m