69 0.5917, 0.7628, 0.8983, 0.9801 };
71 0.1813, 0.1569, 0.1112, 0.0506 };
112 lowKinEnergy = 10.*
MeV;
122 InitialiseConstants();
123 if(p) { SetParticle(p); }
128 void G4eBremParametrizedModel::InitialiseConstants()
178 if(p) { SetParticle(p); }
186 if(isInitialised) {
return; }
188 isInitialised =
true;
208 if(kineticEnergy < lowKinEnergy) {
return 0.0; }
210 if(cut == 0.0) {
return 0.0; }
223 SetCurrentElement((*theElementVector)[i]->GetZ());
225 dedx += theAtomicNumDensityVector[i]*
currentZ*
currentZ*ComputeBremLoss(cut);
247 for(
G4int l=0; l<
n; l++) {
249 for(
G4int i=0; i<8; i++) {
253 xs = ComputeDXSectionPerAtom(eg);
275 if(kineticEnergy < lowKinEnergy) {
return 0.0; }
279 if(cut >= tmax) {
return 0.0; }
281 SetCurrentElement(Z);
283 G4double cross = ComputeXSectionPerAtom(cut);
286 if(tmax <
kinEnergy) { cross -= ComputeXSectionPerAtom(tmax); }
288 cross *= Z*Z*bremFactor;
310 for(
G4int l=0; l<
n; l++) {
312 for(
G4int i=0; i<8; i++) {
316 xs = ComputeDXSectionPerAtom(eg);
336 if (ScreenVariable > 1.)
337 screenVal = 42.24 - 8.368*
G4Log(ScreenVariable+0.952);
339 screenVal = 42.392 - ScreenVariable* (7.796 - 1.961*ScreenVariable);
352 if (ScreenVariable > 1.)
353 screenVal = 42.24 - 8.368*
G4Log(ScreenVariable+0.952);
355 screenVal = 41.734 - ScreenVariable* (6.484 - 1.250*ScreenVariable);
363 G4double G4eBremParametrizedModel::ComputeParametrizedDXSectionPerAtom(
367 SetCurrentElement(Z);
382 if (kineticEnergy >
tlow) {
392 ah = 1. + (ah1*U2 + ah2*U + ah3) / (U2*U);
393 bh = 0.75 + (bh1*U2 + bh2*U + bh3) / (U2*U);
400 G4double screenvar = screenfac*epsil/(1.0-epsil);
401 G4double F1 =
max(ScreenFunction1(screenvar) - FZ ,0.);
402 G4double F2 =
max(ScreenFunction2(screenvar) - FZ ,0.);
405 greject = (F1 - epsil* (ah*F1 - bh*epsil*F2))/8.;
407 std::cout <<
" yy = "<<epsil<<std::endl;
408 std::cout <<
" F1/(...) "<<F1/(42.392 - FZ)<<std::endl;
409 std::cout <<
" F2/(...) "<<F2/(42.392 - FZ)<<std::endl;
410 std::cout <<
" (42.392 - FZ) " << (42.392 - FZ) <<std::endl;
422 ah = al0 + al1*U + al2*U2;
423 bh = bl0 + bl1*U + bl2*U2;
426 greject=(1. + x* (ah + bh*
x));
441 G4double G4eBremParametrizedModel::ComputeDXSectionPerAtom(
G4double gammaEnergy)
444 if(gammaEnergy < 0.0) {
return 0.0; }
456 std::cout<<
" F1(0) "<<ScreenFunction1(0.) <<std::endl;
457 std::cout<<
" F1(0) "<<ScreenFunction2(0.) <<std::endl;
458 std::cout<<
"Ekin = "<<
kinEnergy<<std::endl;
459 std::cout<<
"Z = "<<
currentZ<<std::endl;
460 std::cout<<
"main = "<<main<<std::endl;
461 std::cout<<
" y = "<<y<<std::endl;
462 std::cout<<
" Fel-fCoulomb "<< (
Fel-
fCoulomb) <<std::endl;
465 std::cout<<
"main2 = "<<main2<<std::endl;
475 std::vector<G4DynamicParticle*>* vdp,
482 if(kineticEnergy < lowKinEnergy) {
return; }
485 if(cut >= emax) {
return; }
491 SetCurrentElement(elm->GetZ());
506 gammaEnergy = sqrt(x);
507 f = ComputeDXSectionPerAtom(gammaEnergy);
510 G4cout <<
"### G4eBremParametrizedModel Warning: Majoranta exceeded! "
511 << f <<
" > " <<
fMax
512 <<
" Egamma(MeV)= " << gammaEnergy
513 <<
" E(mEV)= " << kineticEnergy
518 }
while (f < fMax*rndmEngine->
flat());
532 vdp->push_back(gamma);
534 G4double totMomentum = sqrt(kineticEnergy*(totalEnergy + electron_mass_c2));
536 - gammaEnergy*gammaDirection).unit();
539 G4double finalE = kineticEnergy - gammaEnergy;
static const G4double bh12
static const G4double al00
G4double LowEnergyLimit() const
static const G4double bh10
G4ParticleChangeForLoss * GetParticleChangeForLoss()
G4double SecondaryThreshold() const
static const G4double bh32
G4bool isElectron(G4int ityp)
static const G4double al12
std::vector< G4Element * > G4ElementVector
static const G4double bl02
G4double GetKineticEnergy() const
void InitialiseElementSelectors(const G4ParticleDefinition *, const G4DataVector &)
static const G4double ah11
virtual G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition *, G4double tkin, G4double Z, G4double, G4double cutEnergy, G4double maxEnergy=DBL_MAX) override
G4ParticleChangeForLoss * fParticleChange
static const G4double bl11
G4VEmAngularDistribution * GetAngularDistribution()
static const G4double bh22
int main(int argc, char **argv)
static const G4double ah31
static const G4double xgi[8]
static const G4double al01
virtual void Initialise(const G4ParticleDefinition *, const G4DataVector &) override
virtual void InitialiseLocal(const G4ParticleDefinition *, G4VEmModel *masterModel) override
static const G4double bl21
const G4ElementVector * GetElementVector() const
static G4NistManager * Instance()
static const G4double ah22
static const G4double al11
static const G4double bh20
static const G4double bl00
static const G4double al22
G4double GetZ13(G4double Z) const
static const G4double bl01
static const G4double al20
static const G4double al02
G4GLOB_DLL std::ostream G4cout
G4ParticleDefinition * theGamma
virtual G4ThreeVector & SampleDirection(const G4DynamicParticle *dp, G4double finalTotalEnergy, G4int Z, const G4Material *)=0
static const G4double bh11
G4double GetElectronDensity() const
const G4ThreeVector & GetMomentumDirection() const
static constexpr double MeV
void SetProposedKineticEnergy(G4double proposedKinEnergy)
G4eBremParametrizedModel(const G4ParticleDefinition *p=nullptr, const G4String &nam="eBremParam")
static const G4double tlow
virtual G4double ComputeDEDXPerVolume(const G4Material *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy) override
virtual G4double MinEnergyCut(const G4ParticleDefinition *, const G4MaterialCutsCouple *) override
std::vector< G4EmElementSelector * > * GetElementSelectors()
void SetProposedMomentumDirection(const G4ThreeVector &dir)
const G4double * GetAtomicNumDensityVector() const
static const G4double bh30
virtual ~G4eBremParametrizedModel()
static const G4double emax
virtual void SetupForMaterial(const G4ParticleDefinition *, const G4Material *, G4double) override
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
static const G4double ah12
void SetElementSelectors(std::vector< G4EmElementSelector * > *)
static const G4double ah32
static const G4double al10
G4double GetPDGMass() const
static const G4double ah20
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetAngularDistribution(G4VEmAngularDistribution *)
static const G4double bh21
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
const G4ParticleDefinition * particle
static const G4double bl22
static const G4double bh31
static G4Electron * Electron()
static constexpr double MeV
static constexpr double pi
static const G4double bl10
size_t GetNumberOfElements() const
static const G4double bl12
void ProposeTrackStatus(G4TrackStatus status)
void SetLowEnergyLimit(G4double)
static const G4double al21
static const G4double wgi[8]
void SetCurrentElement(const G4Element *)
static const G4double ah21
static const G4double ah30
static constexpr double keV
static const G4double bl20
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, const G4MaterialCutsCouple *, const G4DynamicParticle *, G4double cutEnergy, G4double maxEnergy) override
const G4Element * SelectRandomAtom(const G4MaterialCutsCouple *, const G4ParticleDefinition *, G4double kineticEnergy, G4double cutEnergy=0.0, G4double maxEnergy=DBL_MAX)
static const G4double ah10
const G4Material * GetMaterial() const