Import Geant4 11.2.2 source tree

This commit is contained in:
Gabriele Cosmo
2024-06-21 15:46:33 +02:00
parent dda54bbdcf
commit f7b23877ed
411 changed files with 22817 additions and 21317 deletions
@@ -6,6 +6,18 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2024-04-08 Vladimir Ivanchenko, Alvaro Tolosa Delgado (radioactive_decay-V11-01-11)
- G4BetaPlusDecay, G4BetaMinusDecay - minor fix of radioactive_decay-V11-02-02
In case Q-value is bigger than mass diference, betas in the tail of the spectrum
may have more energy than residual free energy. To minimize the non-conservation
of 4-momentum, in such cases neutrino and daughter nucleus are given 1 eV, leading
to non conservation of linear momentum because momentum of beta is not counterbalanced.
## 2024-02-20 Vladimir Ivanchenko
- G4BetaPlusDecay, G4BetaMinusDecay - added extra numerical protection on
level of 1 eV to avoid precision lost and production of neutrino with
negative kinetic energy
## 2024-02-13 Vladimir Ivanchenko (radioactive_decay-V11-01-10)
- G4BetaPlusDecay, G4BetaMinusDecay - fixed sampling algorithm (problem #2588)
@@ -65,6 +65,7 @@ G4double G4BetaDecayCorrections::FermiFunction(const G4double& W)
{
// Calculate the relativistic Fermi function. Argument W is the
// total electron energy in units of electron mass.
// Ref: E. Feenberg, G. Trigg, Reviews of Modern Physics, 22(1950)
G4double Wprime;
if (Z < 0) {
@@ -116,13 +116,12 @@ G4DecayProducts* G4BetaMinusDecay::DecayIt(G4double)
G4LorentzVector lv(-eMomentum*dir.x(), -eMomentum*dir.y(), -eMomentum*dir.z(),
parentMass - eKE - eMass);
G4double edel = std::max(lv.e() - resMass, 0.0);
// Free energy should be above zero
if (edel > 0.0) {
// centrum of mass system
G4double M = lv.mag();
// centrum of mass system
G4double M = lv.mag();
const G4double elim = CLHEP::eV;
G4double edel = M - resMass;
// Free energy should be above limit
if (edel >= elim) {
// neutrino
G4double eNu = 0.5*(M - resMass*resMass/M);
G4LorentzVector lvnu(eNu*G4RandomDirection(), eNu);
@@ -139,8 +138,8 @@ G4DecayProducts* G4BetaMinusDecay::DecayIt(G4double)
products->PushProducts(dp);
} else {
// neglecting relativistic kinematic and giving all energy to neutrino
dp = new G4DynamicParticle(fNeutrino, G4RandomDirection(), edel);
// neglecting relativistic kinematic and giving some energy to neutrino
dp = new G4DynamicParticle(fNeutrino, G4RandomDirection(), elim);
products->PushProducts(dp);
dp = new G4DynamicParticle(fResIon, G4ThreeVector(0.0,0.0,1.0), 0.0);
products->PushProducts(dp);
@@ -117,13 +117,12 @@ G4DecayProducts* G4BetaPlusDecay::DecayIt(G4double)
G4LorentzVector lv(-eMomentum*dir.x(), -eMomentum*dir.y(), -eMomentum*dir.z(),
parentMass - eKE - eMass);
G4double edel = std::max(lv.e() - resMass, 0.0);
// Free energy should be above zero
if (edel > 0.0) {
// centrum of mass system
G4double M = lv.mag();
const G4double elim = CLHEP::eV;
// centrum of mass system
G4double M = lv.mag();
G4double edel = M - resMass;
// Free energy should be above limit
if (edel >= elim) {
// neutrino
G4double eNu = 0.5*(M - resMass*resMass/M);
G4LorentzVector lvnu(eNu*G4RandomDirection(), eNu);
@@ -141,7 +140,7 @@ G4DecayProducts* G4BetaPlusDecay::DecayIt(G4double)
} else {
// neglecting relativistic kinematic and giving all energy to neutrino
dp = new G4DynamicParticle(fNeutrino, G4RandomDirection(), edel);
dp = new G4DynamicParticle(fNeutrino, G4RandomDirection(), elim);
products->PushProducts(dp);
dp = new G4DynamicParticle(fResIon, G4ThreeVector(0.0,0.0,1.0), 0.0);
products->PushProducts(dp);