65 fParticleChange(nullptr)
114 if (
Z < 0.9 || gammaEnergy <= 2.0*
kMC2) {
return xSection; }
139 G4double gammaEnergyOrg = gammaEnergy;
140 if (gammaEnergy < gammaEnergyLimit) { gammaEnergy = gammaEnergyLimit; }
148 const G4double F1 =
a0 + a1*x + a2*x2 + a3*x3 + a4*x4 + a5*x5;
149 const G4double F2 = b0 + b1*x + b2*x2 + b3*x3 + b4*x4 + b5*x5;
150 const G4double F3 = c0 + c1*x + c2*x2 + c3*x3 + c4*x4 + c5*x5;
152 xSection = (
Z + 1.)*(F1*
Z + F2*
Z*
Z + F3);
154 if (gammaEnergyOrg < gammaEnergyLimit) {
185 if (eps0 > 0.5) {
return; }
203 if (gammaEnergy < Egsmall) {
204 eps = eps0 + (0.5-eps0)*rndmEngine->
flat();
227 if (gammaEnergy > midEnergy) {
231 const G4double deltaMin = 4.*deltaFactor;
234 const G4double epsp = 0.5 - 0.5*std::sqrt(1. - deltaMin/deltaMax) ;
236 const G4double epsRange = 0.5 - epsMin;
245 const G4double NormCond = NormF1/(NormF1 + NormF2);
251 if (NormCond > rndmv[0]) {
256 eps = epsMin + epsRange*rndmv[1];
261 }
while (greject < rndmv[2]);
266 if (rndmEngine->
flat() > 0.5) {
267 eTotEnergy = (1.-
eps)*gammaEnergy;
268 pTotEnergy =
eps*gammaEnergy;
270 pTotEnergy = (1.-
eps)*gammaEnergy;
271 eTotEnergy =
eps*gammaEnergy;
281 eKinEnergy, pKinEnergy,
282 eDirection, pDirection);
290 fvect->push_back(aParticle1);
291 fvect->push_back(aParticle2);
306 size_t numElems = (*elemTable).size();
307 for (
size_t ie = 0; ie < numElems; ++ie) {
static const G4double eps
std::vector< G4Element * > G4ElementTable
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
static const G4double kMC2
virtual void flatArray(const int size, double *vect)=0
void InitialiseElementData()
G4ParticleChangeForGamma * fParticleChange
void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
const G4ParticleDefinition * fTheElectron
void ScreenFunction12(const G4double delta, G4double &f1, G4double &f2)
G4double ScreenFunction1(const G4double delta)
static const G4int gMaxZet
static std::vector< ElementData * > gElementData
const G4ParticleDefinition * fTheGamma
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX) override
void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
const G4ParticleDefinition * fThePositron
G4double ScreenFunction2(const G4double delta)
G4BetheHeitlerModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitler")
~G4BetheHeitlerModel() override
void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
G4double GetLogKineticEnergy() const
G4double GetKineticEnergy() const
static G4ElementTable * GetElementTable()
G4double GetfCoulomb() const
G4IonisParamElm * GetIonisation() const
G4double GetlogZ3() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double A13(G4double A) const
virtual void SamplePairDirections(const G4DynamicParticle *dp, G4double elecKinEnergy, G4double posiKinEnergy, G4ThreeVector &dirElectron, G4ThreeVector &dirPositron, G4int Z=0, const G4Material *mat=nullptr)
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
G4VEmAngularDistribution * GetAngularDistribution()
G4ParticleChangeForGamma * GetParticleChangeForGamma()
std::vector< G4EmElementSelector * > * GetElementSelectors()
void SetAngularDistribution(G4VEmAngularDistribution *)
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 ProposeTrackStatus(G4TrackStatus status)
static constexpr double microbarn
static constexpr double electron_mass_c2
static constexpr double MeV
std::map< G4String, G4AttDef > * GetInstance(const G4String &storeKey, G4bool &isNew)
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments