23#ifndef BEAMSTRIPPINGPHYSICS_H
24#define BEAMSTRIPPINGPHYSICS_H
31#include <gsl/gsl_math.h>
32#include <gsl/gsl_rng.h>
38template <
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";
boost::function< boost::tuple< double, bool >(arguments_t)> type
virtual const std::string & getName() const
Get element name.
static const double csCoefProtonProduction_H_Tabata[9]
double computeCrossSectionNakai(double energy, double energyThreshold, int &i)
static const double csCoefProtonProduction_H2plus_Tabata[11]
unsigned totalPartsInMat_m
static const double csCoefProtonProduction_H2plus_Chebyshev[11]
static const double csCoefDouble_Hminus[3][9]
static const double csCoefSingle_Hminus[3][9]
virtual void apply(PartBunchBase< double, 3 > *bunch, const std::pair< Vector_t, double > &boundingSphere) override
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 doPhysics(PartBunchBase< double, 3 > *bunch)
bool computeEnergyLoss(PartBunchBase< double, 3 > *, Vector_t &, const double, bool) const override
static const double csCoefHminusProduction_H_Tabata[13]
virtual size_t getParticlesInMat() override
double computeCrossSectionBohr(double energy, int zTarget, double massInAmu)
virtual void print(Inform &msg) override
static const double csCoefSingleCapt_H[3][9]
virtual unsigned int getNumEntered() override
double nCSA_m
macroscopic cross sections
static const double csCoefDouble_Hplus_Chebyshev[11]
void computeCrossSection(double energy)
virtual double getTime() override
virtual std::string getName() override
static const double csCoefSingle_Hplus[3][9]
void transformToSecondary(PartBunchBase< double, 3 > *bunch, size_t &i, ParticleType type)
static const double csCoefSingleLoss_H[3][9]
static const double csCoefSingle_Hplus_Chebyshev[11]
unsigned bunchToMatStat_m
virtual bool stillActive() override
unsigned rediffusedStat_m
virtual const std::string getType() const override
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)
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]
virtual unsigned getRediffused() override
ElementBase * element_ref_m