84 currentMaterial =
nullptr;
85 currentElement =
nullptr;
86 currentCouple =
nullptr;
87 fParticleChange =
nullptr;
89 recoilThreshold = 0.*
eV;
93 currentMaterialIndex = -1;
113 currentMaterialIndex = -1;
118 if(!fParticleChange) {
155 std::vector<G4DynamicParticle*>* fvect,
162 DefineMaterial(couple);
169 G4int iz = currentElement->GetZasInt();
175 ioncross->
SetupTarget(currentElement->GetZ(), kinEnergy, heavycorr);
179 if(z1 > 2.0) { z1 = 2.0; }
180 else if(z1 < 0.0) { z1 = 0.0; }
183 G4double sint = sqrt(z1*(1.0 + cost));
196 G4double momCM = gam*(ptot - bet*e1);
200 G4double pxCM = momCM*sint*cos(phi);
201 G4double pyCM = momCM*sint*sin(phi);
205 G4LorentzVector v1(pxCM , pyCM, gam*(pzCM + bet*eCM), gam*(eCM + bet*pzCM));
221 tcut=
std::max(tcut,(*pCuts)[currentMaterialIndex]);
231 fvect->push_back(newdp);
232 }
else if(trec > 0.0) {
void SetupTarget(G4double Z, G4double kinEnergy, G4int heavycorr)
static G4double GetNuclearMass(const G4double A, const G4double Z)
void SetupKinematic(G4double kinEnergy, G4double tmass)
G4double GetKineticEnergy() const
G4double GetTotalEnergy() const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4ParticleDefinition * GetDefinition() const
G4double SampleCosineTheta()
static G4NistManager * Instance()
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
static constexpr double twopi
G4IonCoulombScatteringModel(const G4String &nam="IonCoulombScattering")
G4double GetTotalMomentum() const
G4IonTable * GetIonTable() const
const G4MaterialCutsCouple * CurrentCouple() const
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
const G4ThreeVector & GetMomentumDirection() const
Hep3Vector & rotateUz(const Hep3Vector &)
static G4Proton * Proton()
static constexpr double eV
G4int SelectIsotopeNumber(const G4Element *)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) final
G4double NuclearCrossSection()
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) final
static G4ParticleTable * GetParticleTable()
virtual ~G4IonCoulombScatteringModel()
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double GetAtomicMassAmu(const G4String &symb) const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) final
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
CLHEP::HepLorentzVector G4LorentzVector
void Initialise(const G4ParticleDefinition *, G4double cosThetaLim)