86 fParticleChange =
nullptr;
95 recoilThreshold = 0.*
keV;
98 currentCouple =
nullptr;
101 currentMaterialIndex = 0;
124 if(tet >=
pi) { cosThetaMin = -1.0; }
125 else if(tet > 0.0) { cosThetaMin = cos(tet); }
143 if(!fParticleChange) {
146 if(
IsMaster() && mass < GeV && part->GetParticleName() !=
"GenericIon") {
178 for (
G4int j=0; j<nelm; ++j) {
179 Z =
std::min(Z,(*theElementVector)[j]->GetZasInt());
203 if(kinEnergy <= 0.0) {
return cross; }
206 if(cosThetaMax < costmin) {
209 if(fixedCut > 0.0) { cut = fixedCut; }
212 if(iz == 1 && costmax < 0.0 && particle == theProton) {
215 if(costmin > costmax) {
234 std::vector<G4DynamicParticle*>* fvect,
250 if(fixedCut > 0.0) { cut = fixedCut; }
261 if(iz == 1 && costmax < 0.0 && particle == theProton) {
265 if(costmin > costmax) {
268 G4double ratio = ecross/(cross + ecross);
294 /(targetMass + (mass + kinEnergy)*(1.0 - cost));
297 if(trec > kinEnergy) { trec = kinEnergy; }
306 if(pCuts) { tcut=
std::max(tcut,(*pCuts)[currentMaterialIndex]); }
311 newDirection*sqrt(finalT*(2*mass + finalT))).unit();
313 fvect->push_back(newdp);
325 if(edep < 0.0) { edep = 0.0; }
static G4double GetNuclearMass(const G4double A, const G4double Z)
void SetTargetMass(G4double value)
std::vector< G4Element * > G4ElementVector
static constexpr double proton_mass_c2
G4double GetKineticEnergy() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4ParticleDefinition * GetDefinition() const
G4double GetMomentumSquare() const
const G4ElementVector * GetElementVector() const
static G4NistManager * Instance()
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4double SetupTarget(G4int Z, G4double cut=DBL_MAX)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
G4IonTable * GetIonTable() const
const G4MaterialCutsCouple * CurrentCouple() const
double A(double temperature)
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
const G4ThreeVector & GetMomentumDirection() const
G4double SetupKinematic(G4double kinEnergy, const G4Material *mat)
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double) final
Hep3Vector & rotateUz(const Hep3Vector &)
static G4Proton * Proton()
void DefineMaterial(const G4MaterialCutsCouple *)
G4int SelectIsotopeNumber(const G4Element *)
G4eCoulombScatteringModel(G4bool combined=true)
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4double ComputeElectronCrossSection(G4double CosThetaMin, G4double CosThetaMax)
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
static G4ParticleTable * GetParticleTable()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double ComputeNuclearCrossSection(G4double CosThetaMin, G4double CosThetaMax)
G4double PolarAngleLimit() const
G4double GetAtomicMassAmu(const G4String &symb) const
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void SetProposedKineticEnergy(G4double proposedKinEnergy)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) override
static constexpr double pi
size_t GetNumberOfElements() const
void SetupParticle(const G4ParticleDefinition *)
static constexpr double keV
virtual ~G4eCoulombScatteringModel()
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
void Initialise(const G4ParticleDefinition *, G4double CosThetaLim)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4ThreeVector & SampleSingleScattering(G4double CosThetaMin, G4double CosThetaMax, G4double elecRatio=0.0)