Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4BetheHeitlerModel Class Reference

#include <G4BetheHeitlerModel.hh>

+ Inheritance diagram for G4BetheHeitlerModel:

Classes

struct  ElementData
 

Public Member Functions

 G4BetheHeitlerModel (const G4ParticleDefinition *p=nullptr, const G4String &nam="BetheHeitler")
 
 ~G4BetheHeitlerModel () override
 
void Initialise (const G4ParticleDefinition *, const G4DataVector &) override
 
void InitialiseLocal (const G4ParticleDefinition *, G4VEmModel *masterModel) override
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, G4double kinEnergy, G4double Z, G4double A=0., G4double cut=0., G4double emax=DBL_MAX) override
 
void SampleSecondaries (std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double tmin, G4double maxEnergy) override
 
G4BetheHeitlerModeloperator= (const G4BetheHeitlerModel &right)=delete
 
 G4BetheHeitlerModel (const G4BetheHeitlerModel &)=delete
 
- Public Member Functions inherited from G4VEmModel
 G4VEmModel (const G4String &nam)
 
virtual ~G4VEmModel ()
 
virtual void InitialiseForMaterial (const G4ParticleDefinition *, const G4Material *)
 
virtual void InitialiseForElement (const G4ParticleDefinition *, G4int Z)
 
virtual G4double ComputeDEDXPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
virtual G4double CrossSectionPerVolume (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double GetPartialCrossSection (const G4Material *, G4int level, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double ComputeCrossSectionPerShell (const G4ParticleDefinition *, G4int Z, G4int shellIdx, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
virtual G4double ChargeSquareRatio (const G4Track &)
 
virtual G4double GetChargeSquareRatio (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual G4double GetParticleCharge (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void StartTracking (G4Track *)
 
virtual void CorrectionsAlongStep (const G4MaterialCutsCouple *, const G4DynamicParticle *, const G4double &length, G4double &eloss)
 
virtual G4double Value (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy)
 
virtual G4double MinPrimaryEnergy (const G4Material *, const G4ParticleDefinition *, G4double cut=0.0)
 
virtual G4double MinEnergyCut (const G4ParticleDefinition *, const G4MaterialCutsCouple *)
 
virtual void SetupForMaterial (const G4ParticleDefinition *, const G4Material *, G4double kineticEnergy)
 
virtual void DefineForRegion (const G4Region *)
 
virtual void FillNumberOfSecondaries (G4int &numberOfTriplets, G4int &numberOfRecoil)
 
virtual void ModelDescription (std::ostream &outFile) const
 
void InitialiseElementSelectors (const G4ParticleDefinition *, const G4DataVector &)
 
std::vector< G4EmElementSelector * > * GetElementSelectors ()
 
void SetElementSelectors (std::vector< G4EmElementSelector * > *)
 
G4double ComputeDEDX (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=DBL_MAX)
 
G4double CrossSection (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeMeanFreePath (const G4ParticleDefinition *, G4double kineticEnergy, const G4Material *, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
G4double ComputeCrossSectionPerAtom (const G4ParticleDefinition *, const G4Element *, G4double kinEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectTargetAtom (const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementSelectRandomAtom (const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
 
const G4ElementGetCurrentElement (const G4Material *mat=nullptr) const
 
G4int SelectRandomAtomNumber (const G4Material *) const
 
const G4IsotopeGetCurrentIsotope (const G4Element *elm=nullptr) const
 
G4int SelectIsotopeNumber (const G4Element *) const
 
void SetParticleChange (G4VParticleChange *, G4VEmFluctuationModel *f=nullptr)
 
void SetCrossSectionTable (G4PhysicsTable *, G4bool isLocal)
 
G4ElementDataGetElementData ()
 
G4PhysicsTableGetCrossSectionTable ()
 
G4VEmFluctuationModelGetModelOfFluctuations ()
 
G4VEmAngularDistributionGetAngularDistribution ()
 
G4VEmModelGetTripletModel ()
 
void SetTripletModel (G4VEmModel *)
 
void SetAngularDistribution (G4VEmAngularDistribution *)
 
G4double HighEnergyLimit () const
 
G4double LowEnergyLimit () const
 
G4double HighEnergyActivationLimit () const
 
G4double LowEnergyActivationLimit () const
 
G4double PolarAngleLimit () const
 
G4double SecondaryThreshold () const
 
G4bool DeexcitationFlag () const
 
G4bool ForceBuildTableFlag () const
 
G4bool UseAngularGeneratorFlag () const
 
void SetAngularGeneratorFlag (G4bool)
 
void SetHighEnergyLimit (G4double)
 
void SetLowEnergyLimit (G4double)
 
void SetActivationHighEnergyLimit (G4double)
 
void SetActivationLowEnergyLimit (G4double)
 
G4bool IsActive (G4double kinEnergy) const
 
void SetPolarAngleLimit (G4double)
 
void SetSecondaryThreshold (G4double)
 
void SetDeexcitationFlag (G4bool val)
 
void SetForceBuildTable (G4bool val)
 
void SetFluctuationFlag (G4bool val)
 
void SetMasterThread (G4bool val)
 
G4bool IsMaster () const
 
void SetUseBaseMaterials (G4bool val)
 
G4bool UseBaseMaterials () const
 
G4double MaxSecondaryKinEnergy (const G4DynamicParticle *dynParticle)
 
const G4StringGetName () const
 
void SetCurrentCouple (const G4MaterialCutsCouple *)
 
G4bool IsLocked () const
 
void SetLocked (G4bool)
 
void SetLPMFlag (G4bool)
 
G4VEmModeloperator= (const G4VEmModel &right)=delete
 
 G4VEmModel (const G4VEmModel &)=delete
 

Protected Member Functions

G4double ScreenFunction1 (const G4double delta)
 
G4double ScreenFunction2 (const G4double delta)
 
void ScreenFunction12 (const G4double delta, G4double &f1, G4double &f2)
 
void InitialiseElementData ()
 
- Protected Member Functions inherited from G4VEmModel
G4ParticleChangeForLossGetParticleChangeForLoss ()
 
G4ParticleChangeForGammaGetParticleChangeForGamma ()
 
virtual G4double MaxSecondaryEnergy (const G4ParticleDefinition *, G4double kineticEnergy)
 
const G4MaterialCutsCoupleCurrentCouple () const
 
void SetCurrentElement (const G4Element *)
 

Protected Attributes

G4PowfG4Calc
 
const G4ParticleDefinitionfTheGamma
 
const G4ParticleDefinitionfTheElectron
 
const G4ParticleDefinitionfThePositron
 
G4ParticleChangeForGammafParticleChange
 
G4bool isFirstInstance {false}
 
- Protected Attributes inherited from G4VEmModel
G4ElementDatafElementData = nullptr
 
G4VParticleChangepParticleChange = nullptr
 
G4PhysicsTablexSectionTable = nullptr
 
const G4MaterialpBaseMaterial = nullptr
 
const std::vector< G4double > * theDensityFactor = nullptr
 
const std::vector< G4int > * theDensityIdx = nullptr
 
G4double inveplus
 
G4double pFactor = 1.0
 
std::size_t currentCoupleIndex = 0
 
std::size_t basedCoupleIndex = 0
 
G4bool lossFlucFlag = true
 

Static Protected Attributes

static const G4int gMaxZet = 120
 
static std::vector< ElementData * > gElementData
 

Detailed Description

Definition at line 60 of file G4BetheHeitlerModel.hh.

Constructor & Destructor Documentation

◆ G4BetheHeitlerModel() [1/2]

G4BetheHeitlerModel::G4BetheHeitlerModel ( const G4ParticleDefinition * p = nullptr,
const G4String & nam = "BetheHeitler" )
explicit

Definition at line 66 of file G4BetheHeitlerModel.cc.

68: G4VEmModel(nam),
71 fParticleChange(nullptr)
72{
74}
G4ParticleChangeForGamma * fParticleChange
const G4ParticleDefinition * fTheElectron
const G4ParticleDefinition * fTheGamma
const G4ParticleDefinition * fThePositron
static G4Electron * Electron()
Definition G4Electron.cc:91
static G4Gamma * Gamma()
Definition G4Gamma.cc:81
static G4Positron * Positron()
Definition G4Positron.cc:90
static G4Pow * GetInstance()
Definition G4Pow.cc:41
G4VEmModel(const G4String &nam)
Definition G4VEmModel.cc:67
void SetAngularDistribution(G4VEmAngularDistribution *)

◆ ~G4BetheHeitlerModel()

G4BetheHeitlerModel::~G4BetheHeitlerModel ( )
override

Definition at line 76 of file G4BetheHeitlerModel.cc.

77{
78 if (isFirstInstance) {
79 for (auto const & ptr : gElementData) { delete ptr; }
80 gElementData.clear();
81 }
82}
static std::vector< ElementData * > gElementData

◆ G4BetheHeitlerModel() [2/2]

G4BetheHeitlerModel::G4BetheHeitlerModel ( const G4BetheHeitlerModel & )
delete

Member Function Documentation

◆ ComputeCrossSectionPerAtom()

G4double G4BetheHeitlerModel::ComputeCrossSectionPerAtom ( const G4ParticleDefinition * ,
G4double kinEnergy,
G4double Z,
G4double A = 0.,
G4double cut = 0.,
G4double emax = DBL_MAX )
overridevirtual

Reimplemented from G4VEmModel.

Definition at line 118 of file G4BetheHeitlerModel.cc.

121{
122 G4double xSection = 0.0 ;
123 // short versions
124 static const G4double kMC2 = CLHEP::electron_mass_c2;
125 // zero cross section below the kinematical limit: Eg<2mc^2
126 if (Z < 0.9 || gammaEnergy <= 2.0*kMC2) { return xSection; }
127 //
128 static const G4double gammaEnergyLimit = 1.5*CLHEP::MeV;
129 // set coefficients a, b c
130 static const G4double a0 = 8.7842e+2*CLHEP::microbarn;
131 static const G4double a1 = -1.9625e+3*CLHEP::microbarn;
132 static const G4double a2 = 1.2949e+3*CLHEP::microbarn;
133 static const G4double a3 = -2.0028e+2*CLHEP::microbarn;
134 static const G4double a4 = 1.2575e+1*CLHEP::microbarn;
135 static const G4double a5 = -2.8333e-1*CLHEP::microbarn;
136
137 static const G4double b0 = -1.0342e+1*CLHEP::microbarn;
138 static const G4double b1 = 1.7692e+1*CLHEP::microbarn;
139 static const G4double b2 = -8.2381 *CLHEP::microbarn;
140 static const G4double b3 = 1.3063 *CLHEP::microbarn;
141 static const G4double b4 = -9.0815e-2*CLHEP::microbarn;
142 static const G4double b5 = 2.3586e-3*CLHEP::microbarn;
143
144 static const G4double c0 = -4.5263e+2*CLHEP::microbarn;
145 static const G4double c1 = 1.1161e+3*CLHEP::microbarn;
146 static const G4double c2 = -8.6749e+2*CLHEP::microbarn;
147 static const G4double c3 = 2.1773e+2*CLHEP::microbarn;
148 static const G4double c4 = -2.0467e+1*CLHEP::microbarn;
149 static const G4double c5 = 6.5372e-1*CLHEP::microbarn;
150 // check low energy limit of the approximation (1.5 MeV)
151 G4double gammaEnergyOrg = gammaEnergy;
152 if (gammaEnergy < gammaEnergyLimit) { gammaEnergy = gammaEnergyLimit; }
153 // compute gamma energy variables
154 const G4double x = G4Log(gammaEnergy/kMC2);
155 const G4double x2 = x *x;
156 const G4double x3 = x2*x;
157 const G4double x4 = x3*x;
158 const G4double x5 = x4*x;
159 //
160 const G4double F1 = a0 + a1*x + a2*x2 + a3*x3 + a4*x4 + a5*x5;
161 const G4double F2 = b0 + b1*x + b2*x2 + b3*x3 + b4*x4 + b5*x5;
162 const G4double F3 = c0 + c1*x + c2*x2 + c3*x3 + c4*x4 + c5*x5;
163 // compute the approximated cross section
164 xSection = (Z + 1.)*(F1*Z + F2*Z*Z + F3);
165 // check if we are below the limit of the approximation and apply correction
166 if (gammaEnergyOrg < gammaEnergyLimit) {
167 const G4double dum = (gammaEnergyOrg-2.*kMC2)/(gammaEnergyLimit-2.*kMC2);
168 xSection *= dum*dum;
169 }
170 // make sure that the cross section is never negative
171 xSection = std::max(xSection, 0.);
172 return xSection;
173}
const G4double a0
G4double G4Log(G4double x)
Definition G4Log.hh:227
double G4double
Definition G4Types.hh:83

◆ Initialise()

void G4BetheHeitlerModel::Initialise ( const G4ParticleDefinition * p,
const G4DataVector & cuts )
overridevirtual

Implements G4VEmModel.

Reimplemented in G4PolarizedGammaConversionModel.

Definition at line 84 of file G4BetheHeitlerModel.cc.

86{
88
89 if (isFirstInstance || gElementData.empty()) {
90 G4AutoLock l(&theBetheHMutex);
91 if (gElementData.empty()) {
92 isFirstInstance = true;
93 gElementData.resize(gMaxZet+1, nullptr);
94 }
95 // static data should be initialised only in the one instance
97 l.unlock();
98 }
99 // element selectors should be initialised in the master thread
100 if(IsMaster()) {
102 }
103}
static const G4int gMaxZet
G4ParticleChangeForGamma * GetParticleChangeForGamma()
G4bool IsMaster() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)

Referenced by G4PolarizedGammaConversionModel::Initialise().

◆ InitialiseElementData()

void G4BetheHeitlerModel::InitialiseElementData ( )
protected

Definition at line 308 of file G4BetheHeitlerModel.cc.

309{
310 // create for all elements that are in the detector
311 auto elemTable = G4Element::GetElementTable();
312 for (auto const & elem : *elemTable) {
313 const G4int iz = std::min(gMaxZet, elem->GetZasInt());
314 if (nullptr == gElementData[iz]) { // create it if doesn't exist yet
315 G4double FZLow = 8.*elem->GetIonisation()->GetlogZ3();
316 G4double FZHigh = FZLow + 8.*elem->GetfCoulomb();
317 auto elD = new ElementData();
318 elD->fDeltaMaxLow = G4Exp((42.038 - FZLow )/8.29) - 0.958;
319 elD->fDeltaMaxHigh = G4Exp((42.038 - FZHigh)/8.29) - 0.958;
320 gElementData[iz] = elD;
321 }
322 }
323}
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition G4Exp.hh:180
#define elem(i, j)
int G4int
Definition G4Types.hh:85
static G4ElementTable * GetElementTable()
Definition G4Element.cc:389

Referenced by Initialise().

◆ InitialiseLocal()

void G4BetheHeitlerModel::InitialiseLocal ( const G4ParticleDefinition * ,
G4VEmModel * masterModel )
overridevirtual

Reimplemented from G4VEmModel.

Definition at line 105 of file G4BetheHeitlerModel.cc.

107{
109}
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
std::vector< G4EmElementSelector * > * GetElementSelectors()

◆ operator=()

G4BetheHeitlerModel & G4BetheHeitlerModel::operator= ( const G4BetheHeitlerModel & right)
delete

◆ SampleSecondaries()

void G4BetheHeitlerModel::SampleSecondaries ( std::vector< G4DynamicParticle * > * fvect,
const G4MaterialCutsCouple * couple,
const G4DynamicParticle * aDynamicGamma,
G4double tmin,
G4double maxEnergy )
overridevirtual

Implements G4VEmModel.

Reimplemented in G4PolarizedGammaConversionModel.

Definition at line 187 of file G4BetheHeitlerModel.cc.

191{
192 // set some constant values
193 const G4double gammaEnergy = aDynamicGamma->GetKineticEnergy();
194 const G4double eps0 = CLHEP::electron_mass_c2/gammaEnergy;
195 //
196 // check kinematical limit: gamma energy(Eg) must be at least 2 e- rest mass
197 if (eps0 > 0.5) { return; }
198 //
199 // select target element of the material (probs. are based on partial x-secs)
200 const G4Element* anElement = SelectTargetAtom(couple, fTheGamma, gammaEnergy,
201 aDynamicGamma->GetLogKineticEnergy());
202
203 //
204 // get the random engine
205 CLHEP::HepRandomEngine* rndmEngine = G4Random::getTheEngine();
206 //
207 // 'eps' is the total energy transferred to one of the e-/e+ pair in initial
208 // gamma energy units Eg. Since the corresponding DCS is symmetric on eps=0.5,
209 // the kinematical limits for eps0=mc^2/Eg <= eps <= 0.5
210 // 1. 'eps' is sampled uniformly on the [eps0, 0.5] inteval if Eg<Egsmall
211 // 2. otherwise, on the [eps_min, 0.5] interval according to the DCS (case 2.)
212 G4double eps;
213 // case 1.
214 static const G4double Egsmall = 2.*CLHEP::MeV;
215 if (gammaEnergy < Egsmall) {
216 eps = eps0 + (0.5-eps0)*rndmEngine->flat();
217 } else {
218 // case 2.
219 // get the Coulomb factor for the target element (Z) and gamma energy (Eg)
220 // F(Z) = 8*ln(Z)/3 if Eg <= 50 [MeV] => no Coulomb correction
221 // F(Z) = 8*ln(Z)/3 + 8*fc(Z) if Eg > 50 [MeV] => fc(Z) is the Coulomb cor.
222 //
223 // The screening variable 'delta(eps)' = 136*Z^{-1/3}*eps0/[eps(1-eps)]
224 // Due to the Coulomb correction, the DCS can go below zero even at
225 // kinematicaly allowed eps > eps0 values. In order to exclude this eps
226 // range with negative DCS, the minimum eps value will be set to eps_min =
227 // max[eps0, epsp] with epsp is the solution of SF(delta(epsp)) - F(Z)/2 = 0
228 // with SF being the screening function (SF1=SF2 at high value of delta).
229 // The solution is epsp = 0.5 - 0.5*sqrt[ 1 - 4*136*Z^{-1/3}eps0/deltap]
230 // with deltap = Exp[(42.038-F(Z))/8.29]-0.958. So the limits are:
231 // - when eps=eps_max = 0.5 => delta_min = 136*Z^{-1/3}*eps0/4
232 // - epsp = 0.5 - 0.5*sqrt[ 1 - delta_min/deltap]
233 // - and eps_min = max[eps0, epsp]
234 static const G4double midEnergy = 50.*CLHEP::MeV;
235 const G4int iZet = std::min(gMaxZet, anElement->GetZasInt());
236 const G4double deltaFactor = 136.*eps0/anElement->GetIonisation()->GetZ3();
237 G4double deltaMax = gElementData[iZet]->fDeltaMaxLow;
238 G4double FZ = 8.*anElement->GetIonisation()->GetlogZ3();
239 if (gammaEnergy > midEnergy) {
240 FZ += 8.*(anElement->GetfCoulomb());
241 deltaMax = gElementData[iZet]->fDeltaMaxHigh;
242 }
243 const G4double deltaMin = 4.*deltaFactor;
244 //
245 // compute the limits of eps
246 const G4double epsp = 0.5 - 0.5*std::sqrt(1. - deltaMin/deltaMax) ;
247 const G4double epsMin = std::max(eps0,epsp);
248 const G4double epsRange = 0.5 - epsMin;
249 //
250 // sample the energy rate (eps) of the created electron (or positron)
252 ScreenFunction12(deltaMin, F10, F20);
253 F10 -= FZ;
254 F20 -= FZ;
255 const G4double NormF1 = std::max(F10 * epsRange * epsRange, 0.);
256 const G4double NormF2 = std::max(1.5 * F20 , 0.);
257 const G4double NormCond = NormF1/(NormF1 + NormF2);
258 // we will need 3 uniform random number for each trial of sampling
259 G4double rndmv[3];
260 G4double greject = 0.;
261 do {
262 rndmEngine->flatArray(3, rndmv);
263 if (NormCond > rndmv[0]) {
264 eps = 0.5 - epsRange * fG4Calc->A13(rndmv[1]);
265 const G4double delta = deltaFactor/(eps*(1.-eps));
266 greject = (ScreenFunction1(delta)-FZ)/F10;
267 } else {
268 eps = epsMin + epsRange*rndmv[1];
269 const G4double delta = deltaFactor/(eps*(1.-eps));
270 greject = (ScreenFunction2(delta)-FZ)/F20;
271 }
272 // Loop checking, 03-Aug-2015, Vladimir Ivanchenko
273 } while (greject < rndmv[2]);
274 } // end of eps sampling
275 //
276 // select charges randomly
277 G4double eTotEnergy, pTotEnergy;
278 if (rndmEngine->flat() > 0.5) {
279 eTotEnergy = (1.-eps)*gammaEnergy;
280 pTotEnergy = eps*gammaEnergy;
281 } else {
282 pTotEnergy = (1.-eps)*gammaEnergy;
283 eTotEnergy = eps*gammaEnergy;
284 }
285 //
286 // sample pair kinematics
287 const G4double eKinEnergy = std::max(0.,eTotEnergy - CLHEP::electron_mass_c2);
288 const G4double pKinEnergy = std::max(0.,pTotEnergy - CLHEP::electron_mass_c2);
289 //
290 G4ThreeVector eDirection, pDirection;
291 //
293 eKinEnergy, pKinEnergy,
294 eDirection, pDirection);
295 // create G4DynamicParticle object for the particle1
296 auto aParticle1= new G4DynamicParticle(fTheElectron,eDirection,eKinEnergy);
297 // create G4DynamicParticle object for the particle2
298 auto aParticle2= new G4DynamicParticle(fThePositron,pDirection,pKinEnergy);
299 // Fill output vector
300 fvect->push_back(aParticle1);
301 fvect->push_back(aParticle2);
302 // kill incident photon
305}
#define F10
#define F20
@ fStopAndKill
virtual double flat()=0
virtual void flatArray(const int size, double *vect)=0
void ScreenFunction12(const G4double delta, G4double &f1, G4double &f2)
G4double ScreenFunction1(const G4double delta)
G4double ScreenFunction2(const G4double delta)
G4double GetLogKineticEnergy() const
G4double GetKineticEnergy() const
G4double GetfCoulomb() const
Definition G4Element.hh:165
G4IonisParamElm * GetIonisation() const
Definition G4Element.hh:171
G4int GetZasInt() const
Definition G4Element.hh:120
G4double GetlogZ3() const
G4double GetZ3() const
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4double A13(G4double A) const
Definition G4Pow.cc:116
virtual void SamplePairDirections(const G4DynamicParticle *dp, G4double elecKinEnergy, G4double posiKinEnergy, G4ThreeVector &dirElectron, G4ThreeVector &dirPositron, G4int Z=0, const G4Material *mat=nullptr)
G4VEmAngularDistribution * GetAngularDistribution()
const G4Element * SelectTargetAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double logKineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
void ProposeTrackStatus(G4TrackStatus status)

Referenced by G4PolarizedGammaConversionModel::SampleSecondaries().

◆ ScreenFunction1()

G4double G4BetheHeitlerModel::ScreenFunction1 ( const G4double delta)
inlineprotected

Definition at line 138 of file G4BetheHeitlerModel.hh.

139{
140 return (delta > 1.4) ? 42.038 - 8.29*G4Log(delta + 0.958)
141 : 42.184 - delta*(7.444 - 1.623*delta);
142}

Referenced by SampleSecondaries().

◆ ScreenFunction12()

void G4BetheHeitlerModel::ScreenFunction12 ( const G4double delta,
G4double & f1,
G4double & f2 )
inlineprotected

Definition at line 152 of file G4BetheHeitlerModel.hh.

154{
155 if (delta > 1.4) {
156 f1 = 42.038 - 8.29*G4Log(delta + 0.958);
157 f2 = f1;
158 } else {
159 f1 = 42.184 - delta*(7.444 - 1.623*delta);
160 f2 = 41.326 - delta*(5.848 - 0.902*delta);
161 }
162}

Referenced by SampleSecondaries().

◆ ScreenFunction2()

G4double G4BetheHeitlerModel::ScreenFunction2 ( const G4double delta)
inlineprotected

Definition at line 145 of file G4BetheHeitlerModel.hh.

146{
147 return (delta > 1.4) ? 42.038 - 8.29*G4Log(delta + 0.958)
148 : 41.326 - delta*(5.848 - 0.902*delta);
149}

Referenced by SampleSecondaries().

Member Data Documentation

◆ fG4Calc

G4Pow* G4BetheHeitlerModel::fG4Calc
protected

Definition at line 109 of file G4BetheHeitlerModel.hh.

Referenced by SampleSecondaries().

◆ fParticleChange

G4ParticleChangeForGamma* G4BetheHeitlerModel::fParticleChange
protected

Definition at line 113 of file G4BetheHeitlerModel.hh.

Referenced by Initialise(), and SampleSecondaries().

◆ fTheElectron

const G4ParticleDefinition* G4BetheHeitlerModel::fTheElectron
protected

Definition at line 111 of file G4BetheHeitlerModel.hh.

Referenced by SampleSecondaries().

◆ fTheGamma

const G4ParticleDefinition* G4BetheHeitlerModel::fTheGamma
protected

Definition at line 110 of file G4BetheHeitlerModel.hh.

Referenced by SampleSecondaries().

◆ fThePositron

const G4ParticleDefinition* G4BetheHeitlerModel::fThePositron
protected

Definition at line 112 of file G4BetheHeitlerModel.hh.

Referenced by SampleSecondaries().

◆ gElementData

std::vector< G4BetheHeitlerModel::ElementData * > G4BetheHeitlerModel::gElementData
staticprotected

◆ gMaxZet

const G4int G4BetheHeitlerModel::gMaxZet = 120
staticprotected

Definition at line 107 of file G4BetheHeitlerModel.hh.

Referenced by Initialise(), InitialiseElementData(), and SampleSecondaries().

◆ isFirstInstance

G4bool G4BetheHeitlerModel::isFirstInstance {false}
protected

Definition at line 115 of file G4BetheHeitlerModel.hh.

115{false};

Referenced by Initialise(), and ~G4BetheHeitlerModel().


The documentation for this class was generated from the following files: