81 fParticleChange =
nullptr;
84 currentMaterial =
nullptr;
85 currentElement =
nullptr;
86 currentCouple =
nullptr;
88 lowEnergyLimit = 0*keV;
89 recoilThreshold = 0.*eV;
94 currentMaterialIndex = -1;
116 currentCouple =
nullptr;
117 currentMaterialIndex = -1;
131 if(!fParticleChange) {
157 if(model ==
"Fast" || model ==
"fast") { XSectionModel=1; }
158 else if(model ==
"Precise" || model ==
"precise") { XSectionModel=0; }
160 G4cout<<
"G4eSingleCoulombScatteringModel WARNING: "<<model
161 <<
" is not a valid model name"<<
G4endl;
178 if(kinEnergy < lowEnergyLimit)
return cross;
195 std::vector<G4DynamicParticle*>* fvect,
204 if(kinEnergy < lowEnergyLimit)
return;
206 DefineMaterial(couple);
221 if(cross == 0.0) {
return; }
230 G4double ptot = sqrt(kinEnergy*(kinEnergy + 2.0*mass));
242 v1.
setX(momCM*sint*cos(phi));
243 v1.
setY(momCM*sint*sin(phi));
258 G4double trec = std::max(v0.
e() - mass2, 0.0);
266 tcut= std::max(tcut,(*pCuts)[currentMaterialIndex]);
276 fvect->push_back(newdp);
277 }
else if(trec > 0.0) {
285 if(finalT <= lowEnergyLimit) {
289 edep = std::max(edep, 0.0);
CLHEP::HepLorentzVector G4LorentzVector
G4GLOB_DLL std::ostream G4cout
Hep3Vector & rotateUz(const Hep3Vector &)
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
const G4ThreeVector & GetMomentumDirection() const
G4double GetLogKineticEnergy() const
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4EmParameters * Instance()
G4NuclearFormfactorType NuclearFormfactorType() const
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4NistManager * Instance()
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()
G4double NuclearCrossSection(G4int form, G4int fast)
void SetupKinematic(G4double kinEnergy, G4int Z)
void Initialise(const G4ParticleDefinition *, G4double cosThetaLim)
G4double GetScatteringAngle(G4int form, G4int fast)
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4ParticleChangeForGamma * GetParticleChangeForGamma()
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4int SelectIsotopeNumber(const G4Element *)
const G4MaterialCutsCouple * CurrentCouple() const
const G4Element * SelectTargetAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
void ProposeNonIonizingEnergyDeposit(G4double anEnergyPart)
void ProposeLocalEnergyDeposit(G4double anEnergyPart)
void SetXSectionModel(const G4String &model)
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) final
G4eSingleCoulombScatteringModel(const G4String &nam="eSingleCoulombScat")
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) final
virtual ~G4eSingleCoulombScatteringModel()
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) final
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A, G4double cut, G4double emax) final