79 fParticleChange(nullptr)
136 if (Z < 0.9 || gammaEnergy <= 2.0*kMC2) {
return xSection; }
161 G4double gammaEnergyOrg = gammaEnergy;
162 if (gammaEnergy < gammaEnergyLimit) { gammaEnergy = gammaEnergyLimit; }
170 const G4double F1 = a0 + a1*x + a2*x2 + a3*x3 + a4*x4 + a5*x5;
171 const G4double F2 = b0 + b1*x + b2*x2 + b3*x3 + b4*x4 + b5*x5;
172 const G4double F3 = c0 + c1*x + c2*x2 + c3*x3 + c4*x4 + c5*x5;
174 xSection = (Z + 1.)*(F1*Z + F2*Z*Z + F3);
176 if (gammaEnergyOrg < gammaEnergyLimit) {
177 const G4double dum = (gammaEnergyOrg-2.*kMC2)/(gammaEnergyLimit-2.*kMC2);
209 if (eps0 > 0.5) {
return; }
225 if (gammaEnergy < Egsmall) {
226 eps = eps0 + (0.5-eps0)*rndmEngine->
flat();
249 if (gammaEnergy > midEnergy) {
253 const G4double deltaMin = 4.*deltaFactor;
256 const G4double epsp = 0.5 - 0.5*std::sqrt(1. - deltaMin/deltaMax) ;
258 const G4double epsRange = 0.5 - epsMin;
267 const G4double NormCond = NormF1/(NormF1 + NormF2);
273 if (NormCond > rndmv[0]) {
274 eps = 0.5 - epsRange *
fG4Calc->
A13(rndmv[1]);
278 eps = epsMin + epsRange*rndmv[1];
283 }
while (greject < rndmv[2]);
288 if (rndmEngine->
flat() > 0.5) {
289 eTotEnergy = (1.-
eps)*gammaEnergy;
290 pTotEnergy = eps*gammaEnergy;
292 pTotEnergy = (1.-
eps)*gammaEnergy;
293 eTotEnergy = eps*gammaEnergy;
303 eKinEnergy, pKinEnergy,
304 eDirection, pDirection);
312 fvect->push_back(aParticle1);
313 fvect->push_back(aParticle2);
330 size_t numElems = (*elemTable).size();
331 for (
size_t ie = 0; ie < numElems; ++ie) {
332 const G4Element* elem = (*elemTable)[ie];
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
virtual void SamplePairDirections(const G4DynamicParticle *dp, G4double elecKinEnergy, G4double posiKinEnergy, G4ThreeVector &dirElectron, G4ThreeVector &dirPositron, G4int Z=0, const G4Material *mat=nullptr)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
static constexpr double microbarn
void InitialiseElementData()
G4double ScreenFunction2(const G4double delta)
G4double A13(G4double A) const
G4double ScreenFunction1(const G4double delta)
void ScreenFunction12(const G4double delta, G4double &f1, G4double &f2)
G4ParticleDefinition * fTheGamma
static std::vector< ElementData * > gElementData
void SetProposedKineticEnergy(G4double proposedKinEnergy)
virtual void flatArray(const int size, double *vect)=0
G4BetheHeitlerModel(const G4ParticleDefinition *p=0, const G4String &nam="BetheHeitler")
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
static const G4int gMaxZet
std::vector< G4EmElementSelector * > * GetElementSelectors()
G4double G4Log(G4double x)
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX) override
static constexpr double electron_mass_c2
std::vector< G4Element * > G4ElementTable
static constexpr double MeV
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
void SetAngularDistribution(G4VEmAngularDistribution *)
std::map< G4String, G4AttDef > * GetInstance(const G4String &storeKey, G4bool &isNew)
G4ParticleChangeForGamma * fParticleChange
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
G4IonisParamElm * GetIonisation() const
G4double GetKineticEnergy() const
G4ParticleDefinition * fThePositron
G4ParticleDefinition * fTheElectron
G4VEmAngularDistribution * GetAngularDistribution()
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
G4ParticleChangeForGamma * GetParticleChangeForGamma()
static const G4double eps
G4double GetfCoulomb() const
G4double GetlogZ3() const
Float_t x2[n_points_geant4]
void ProposeTrackStatus(G4TrackStatus status)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static G4ElementTable * GetElementTable()
virtual ~G4BetheHeitlerModel()