64 fIsMixedModel(ismixed),
65 fIsScpCorrection(isscpcor),
68 fParticleChange(nullptr)
86 if(!fParticleChange) {
90 fIsMixedModel = (fMuMin > 0.0);
98 for(
G4int j=0; j<numOfCouples; ++j) {
102 for (std::size_t ie = 0; ie < numOfElem; ++ie) {
107 if (fIsScpCorrection) {
148 elCS *= (theScpCor*(1.0+1.0/
Z));
150 return std::max(0.0, elCS);
167 if (!fIsMixedModel) {
173 const G4double costMax = 1.0-2.0*fMuMin;
180 const G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
182 G4ThreeVector theNewDirection(sint*std::cos(phi), sint*std::sin(phi), cost);
185 theNewDirection.
rotateUz(theOrgDirectionLab);
std::vector< const G4Element * > G4ElementVector
Hep3Vector & rotateUz(const Hep3Vector &)
virtual void flatArray(const int size, double *vect)=0
const G4ThreeVector & GetMomentumDirection() const
G4double GetLogKineticEnergy() const
const G4ParticleDefinition * GetParticleDefinition() const
G4double GetKineticEnergy() const
static G4Electron * Electron()
const G4Material * GetMaterial() const
const G4ElementVector * GetElementVector() const
size_t GetNumberOfElements() const
void ProposeMomentumDirection(const G4ThreeVector &Pfinal)
const G4MaterialCutsCouple * GetMaterialCutsCouple(G4int i) const
std::size_t GetTableSize() const
static G4ProductionCutsTable * GetProductionCutsTable()
void SetHighEnergyLimit(G4double)
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4double PolarAngleLimit() const
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4double LowEnergyLimit() const
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4double HighEnergyLimit() const
void SetLowEnergyLimit(G4double)
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 &)
~G4eDPWACoulombScatteringModel() override
G4eDPWACoulombScatteringModel(G4bool ismixed=false, G4bool isscpcor=true, G4double mumin=0.0)
G4eDPWAElasticDCS * GetTheDCS()
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *) override
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double ekin, G4double Z, G4double A, G4double prodcut, G4double emax) override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
void SetTheDCS(G4eDPWAElasticDCS *theDCS)
void ComputeCSPerAtom(G4int iz, G4double ekin, G4double &elcs, G4double &tr1cs, G4double &tr2cs, G4double mumin=0.0, G4double mumax=1.0)
void InitialiseForZ(std::size_t iz)
void InitSCPCorrection(G4double lowEnergyLimit, G4double highEnergyLimit)
G4double ComputeScatteringPowerCorrection(const G4MaterialCutsCouple *matcut, G4double ekin)
G4double SampleCosineTheta(std::size_t iz, G4double lekin, G4double r1, G4double r2, G4double r3)
G4double SampleCosineThetaRestricted(std::size_t iz, G4double lekin, G4double r1, G4double r2, G4double costMax, G4double costMin)