72 fParticleChange =
nullptr;
76 currentMaterial =
nullptr;
81 recoilThreshold = 0.0;
84 currentCouple =
nullptr;
87 currentMaterialIndex = 0;
88 mass = CLHEP::proton_mass_c2;
105 currentCouple =
nullptr;
114 }
else if(tet >= CLHEP::pi) {
117 cosThetaMin = cos(tet);
135 if(!fParticleChange) {
138 if(
IsMaster() && mass < GeV && part->GetParticleName() !=
"GenericIon") {
162 std::max(recoilThreshold, (*pCuts)[
CurrentCouple()->GetIndex()]);
170 for (
G4int j=0; j<nelm; ++j) {
171 Z = std::min(Z,(*theElementVector)[j]->GetZasInt());
175 G4double t = std::max(cut, 0.5*(cut + sqrt(2*cut*targetMass)));
195 if(kinEnergy <= 0.0) {
return cross; }
199 G4double tmass = (1 == iz) ? proton_mass_c2 :
206 if(cosThetaMax < costmin) {
207 G4double cut = (0.0 < fixedCut) ? fixedCut : cutEnergy;
210 (1 == iz && particle == theProton && cosThetaMax < 0.0)
212 if(costmin > costmax) {
231 std::vector<G4DynamicParticle*>* fvect,
242 G4double cut = (0.0 < fixedCut) ? fixedCut : cutEnergy;
245 kinEnergy,cut,kinEnergy);
254 G4double costmax = (1 == iz && particle == theProton && cosThetaMax < 0.0)
256 if(costmin <= costmax) {
return; }
260 G4double ratio = ecross/(cross + ecross);
266 G4double ptot = sqrt(kinEnergy*(kinEnergy + 2.0*mass));
278 v1.
setX(momCM*newDirection.
x());
279 v1.
setY(momCM*newDirection.
y());
280 v1.
setZ(momCM*newDirection.
z());
293 G4double trec = std::max(v0.
e() - mass2, 0.0);
297 if(pCuts) { tcut= std::max(tcut,(*pCuts)[currentMaterialIndex]); }
304 fvect->push_back(newdp);
305 }
else if(trec > 0.0) {
316 edep = std::max(edep, 0.0);
double A(double temperature)
std::vector< G4Element * > G4ElementVector
CLHEP::HepLorentzVector G4LorentzVector
Hep3Vector & rotateUz(const Hep3Vector &)
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
const G4ThreeVector & GetMomentumDirection() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
static G4NistManager * Instance()
G4double GetAtomicMassAmu(const G4String &symb) const
static G4double GetNuclearMass(const G4double A, const G4double Z)
void SetProposedKineticEnergy(G4double proposedKinEnergy)
void ProposeMomentumDirection(G4double Px, G4double Py, G4double Pz)
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4Proton * Proton()
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4double PolarAngleLimit() const
G4ParticleChangeForGamma * GetParticleChangeForGamma()
std::vector< G4EmElementSelector * > * GetElementSelectors()
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
G4int SelectIsotopeNumber(const G4Element *)
const G4MaterialCutsCouple * CurrentCouple() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
G4double SetupTarget(G4int Z, G4double cut)
void SetTargetMass(G4double value)
G4double ComputeElectronCrossSection(G4double CosThetaMin, G4double CosThetaMax)
void Initialise(const G4ParticleDefinition *, G4double CosThetaLim)
G4double ComputeNuclearCrossSection(G4double CosThetaMin, G4double CosThetaMax)
G4ThreeVector & SampleSingleScattering(G4double CosThetaMin, G4double CosThetaMax, G4double elecRatio)
virtual G4double SetupKinematic(G4double kinEnergy, const G4Material *mat)
void SetupParticle(const G4ParticleDefinition *)
G4hCoulombScatteringModel(G4bool combined=true)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) override
void DefineMaterial(const G4MaterialCutsCouple *)
virtual ~G4hCoulombScatteringModel()
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
virtual G4double MinPrimaryEnergy(const G4Material *, const G4ParticleDefinition *, G4double) final
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override