Import Geant4 9.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 15:37:50 +02:00
parent a8e9364cea
commit 96c8bcd0af
6923 changed files with 198390 additions and 41849 deletions
@@ -25,7 +25,7 @@
//
//
// $Id: G4LowEIonFragmentation.hh,v 1.3 2006/06/29 20:58:04 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by H.P. Wellisch
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundAlpha.hh,v 1.3 2006/06/29 20:58:06 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundAlpha.hh,v 1.6 2007/10/01 10:41:59 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -78,6 +78,18 @@ public:
}
private:
// added Rj method according to literature and JMQ
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
G4double denominator = NumberParticles*(NumberParticles-1)*(NumberParticles-2)*(NumberParticles-3);
if(denominator !=0) rj = 6.0*static_cast<G4double>(NumberCharged*(NumberCharged-1)*(NumberParticles-NumberCharged)*(NumberParticles-NumberCharged-1))/static_cast<G4double>(denominator); //JMQ 23/8/07
return rj;
}
virtual G4double GetAlpha()
{
G4double C = 0.0;
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundDeuteron.hh,v 1.3 2006/06/29 20:58:08 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundDeuteron.hh,v 1.7 2007/10/01 10:41:59 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -78,6 +78,20 @@ public:
}
private:
// added Rj method according to literature and JMQ - formula from Jose Quesada
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
G4double denominator = NumberParticles*(NumberParticles-1);
if(denominator != 0) rj = 2.0*static_cast<G4double>(NumberCharged*(NumberParticles-NumberCharged))/static_cast<G4double>(denominator); //JMQ re-corrected 23/8/07
// return static_cast<G4double>(NumberCharged*(NumberCharged-1))/static_cast<G4double>(NumberParticles*(NumberParticles-1));
return rj;
}
virtual G4double GetAlpha()
{
G4double C = 0.0;
@@ -24,7 +24,7 @@
// ********************************************************************
//
// $Id: G4PreCompoundEmission.hh,v 1.3 2006/06/29 20:58:10 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundFragmentVector.hh,v 1.3 2006/06/29 20:58:18 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundFragmentVector.icc,v 1.3 2006/06/29 20:58:20 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundHe3.hh,v 1.3 2006/06/29 20:58:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundHe3.hh,v 1.6 2007/10/01 10:42:00 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -78,6 +78,19 @@ public:
}
private:
// added Rj method according to literature and JMQ
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
G4double denominator = NumberParticles*(NumberParticles-1)*(NumberParticles-2);
if(denominator != 0) rj = 3.0*static_cast<G4double>(NumberCharged*(NumberCharged-1)*(NumberParticles-NumberCharged))/static_cast<G4double>(denominator); //JMQ 23/8/07
return rj;
}
virtual G4double GetAlpha()
{
G4double C = 0.0;
@@ -82,6 +82,7 @@ protected:
virtual G4double GetAlpha() = 0;
virtual G4double GetBeta() = 0;
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged) = 0;
virtual G4double FactorialFactor(const G4double N, const G4double P) = 0;
virtual G4double CoalescenceFactor(const G4double A) = 0;
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundModel.hh,v 1.3 2006/06/29 20:58:26 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundNeutron.hh,v 1.4 2006/06/29 20:58:28 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundNeutron.hh,v 1.7 2007/10/01 10:42:00 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -80,6 +80,16 @@ public:
}
private:
// added Rj method according to literature and JMQ - formula from Jose Quesada
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
if(NumberParticles != 0) rj = static_cast<G4double>(NumberParticles - NumberCharged)/static_cast<G4double>(NumberParticles);
return rj;
}
virtual G4double GetAlpha()
{
return 0.76+2.2/std::pow(GetRestA(),1.0/3.0);
@@ -75,6 +75,8 @@ public:
protected:
// added Rj method according to literature and JMQ
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged) = 0;
virtual G4double GetAlpha() = 0;
virtual G4double GetBeta() = 0;
virtual G4bool IsItPossible(const G4Fragment&) = 0;
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundParameters.hh,v 1.3 2006/06/29 20:58:32 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundProton.hh,v 1.3 2006/06/29 20:58:34 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundProton.hh,v 1.7 2007/10/01 10:42:00 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -80,6 +80,16 @@ public:
}
private:
// added Rj method according to literature and JMQ - formula from Jose Quesada
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
if(NumberParticles != 0) rj = static_cast<G4double>(NumberCharged)/static_cast<G4double>(NumberParticles);
return rj;
}
virtual G4double GetAlpha()
{
G4double aZ = static_cast<G4double>(GetRestZ());
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundTransitions.hh,v 1.3 2006/06/29 20:58:36 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundTriton.hh,v 1.3 2006/06/29 20:58:38 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundTriton.hh,v 1.6 2007/10/01 10:42:00 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -78,6 +78,17 @@ public:
}
private:
// added Rj method according to literature and JMQ
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged)
{
G4double rj = 1.0;
G4double denominator = NumberParticles*(NumberParticles-1)*(NumberParticles-2);
if(denominator != 0) rj = 3.0*static_cast<G4double>(NumberCharged*(NumberParticles-NumberCharged)*(NumberParticles-NumberCharged-1))/static_cast<G4double>(denominator); //JMQ 23/8/07
return rj;
}
virtual G4double GetAlpha()
{
G4double C = 0.0;
@@ -25,7 +25,7 @@
//
//
// $Id: G4VPreCompoundFragment.hh,v 1.4 2006/08/20 01:07:28 dennis Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -25,7 +25,7 @@
//
//
// $Id: G4VPreCompoundFragment.icc,v 1.4 2006/08/20 01:07:40 dennis Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundIon.hh,v 1.3 2006/06/29 20:58:46 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4VPreCompoundIon.hh,v 1.5 2007/08/23 16:29:01 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -83,6 +83,7 @@ protected:
virtual G4double GetAlpha() = 0;
virtual G4double GetBeta() = 0;
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged) = 0;
virtual G4double FactorialFactor(const G4double N, const G4double P) = 0;
virtual G4double CoalescenceFactor(const G4double A) = 0;
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundNucleon.hh,v 1.3 2006/06/29 20:58:48 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4VPreCompoundNucleon.hh,v 1.4 2007/07/23 09:56:40 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -75,6 +75,9 @@ public:
protected:
// added Rj method according to literature and JMQ
virtual G4double GetRj(const G4int NumberParticles, const G4int NumberCharged) = 0;
virtual G4double GetAlpha() = 0;
virtual G4double GetBeta() = 0;
virtual G4bool IsItPossible(const G4Fragment&) = 0;
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundFragmentVector.cc,v 1.5 2006/06/29 20:59:21 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -43,15 +43,6 @@ ProbabilityDistributionFunction(const G4double eKin,
G4double H = aFragment.GetNumberOfHoles();
G4double N = P + H;
G4double A0 = (P*P+H*H+P-H)/4.0 - H/2.0;
G4double A1 = std::max(0.0,A0 + GetA()*(GetA()-2.0*P-1.0)/4.0);
G4double Aj = GetA()*(GetA()+1.0)/4.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,GetMaximalKineticEnergy() + GetCoulombBarrier() - eKin - A1);
G4double Ej = std::max(0.0,U + GetBindingEnergy() - Aj);
// g = (6.0/pi2)*a*A
// G4EvaporationLevelDensityParameter theLDP;
G4double g0 = (6.0/pi2)*aFragment.GetA() *
@@ -60,19 +51,31 @@ ProbabilityDistributionFunction(const G4double eKin,
G4double g1 = (6.0/pi2)*GetRestA() *
G4PreCompoundParameters::GetAddress()->GetLevelDensity();
// theLDP.LevelDensityParameter(GetRestA(),GetRestZ(),U);
G4double gj = (6.0/pi2)*GetA() *
G4PreCompoundParameters::GetAddress()->GetLevelDensity();
//no longer used: G4double gj = (6.0/pi2)*GetA() *
// -----"----- G4PreCompoundParameters::GetAddress()->GetLevelDensity();
// theLDP.LevelDensityParameter(GetA(),GetZ(),U);
G4double A0 = ((P*P+H*H+P-H)/4.0 - H/2.0)/g0;
G4double A1 = std::max(0.0,(A0*g0 + GetA()*(GetA()-2.0*P-1.0)/4.0)/g1);
G4double Aj = GetA()*(GetA()+1.0)/4.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
// G4double E1 = std::max(0.0,GetMaximalKineticEnergy() + GetCoulombBarrier() - eKin - A1);
G4double E1 = (std::max(0.0,GetMaximalKineticEnergy() - eKin - A1))/g1; //JMQ fix
// G4double Ej = std::max(0.0,U + GetBindingEnergy() - Aj);
G4double Ej = std::max(0.0,eKin + GetBindingEnergy() - Aj); //JMQ fix
G4double pA = (3.0/4.0) * std::sqrt(std::max(0.0, 2.0/(GetReducedMass()*(eKin+GetBindingEnergy()))))*
GetAlpha()*(eKin+GetBeta())/(r0*std::pow(GetRestA(),1.0/3.0)) *
CoalescenceFactor(aFragment.GetA()) * FactorialFactor(N,P);
G4double pB = std::pow((g1*E1)/(g0*E0),N-GetA()-1.0)*(g1/g0);
G4double pC = std::pow((gj*Ej)/(g0*E0),GetA()-1.0)*(gj/g0)/E0;
// G4double pC = std::pow((gj*Ej)/(g0*E0),GetA()-1.0)*(gj/g0)/E0;
G4double pC = std::pow((g1*Ej)/(g0*E0),GetA()-1.0)*(g1/g0)/E0; //JMQ fix
G4double Probability = pA * pB * pC;
G4double Probability = pA * pB * pC * GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged());
return Probability;
}
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundModel.cc,v 1.8 2006/06/29 20:59:25 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundModel.cc,v 1.11 2007/10/11 14:19:36 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -85,9 +85,16 @@ G4HadFinalState * G4PreCompoundModel::ApplyYourself(const G4HadProjectile & theP
anInitialState.SetNumberOfParticles(1+thePrimary.GetDefinition()->GetBaryonNumber());
// Number of Charged Excited Particles
anInitialState.SetNumberOfCharged(static_cast<G4int>(thePrimary.GetDefinition()->GetPDGCharge()+.01) +
static_cast<G4int>(0.5+G4UniformRand()));
// JMQ/AH modify number of charged particles with probability of the Z/A ratio of the nucleus:
// if(G4UniformRand() <= aZ/anA) BUG! - integer arithmetic
if(G4UniformRand() <= (static_cast<G4double>(aZ))/(static_cast<G4double>(anA)))
anInitialState.SetNumberOfCharged(static_cast<G4int>(thePrimary.GetDefinition()->GetPDGCharge()+.01) + 1);
else
anInitialState.SetNumberOfCharged(static_cast<G4int>(thePrimary.GetDefinition()->GetPDGCharge()+.01));
//AH anInitialState.SetNumberOfCharged(static_cast<G4int>(thePrimary.GetDefinition()->GetPDGCharge()+.01) +
//AH static_cast<G4int>(0.5+G4UniformRand()));
// Number of Holes
anInitialState.SetNumberOfHoles(1);
@@ -42,14 +42,6 @@ ProbabilityDistributionFunction(const G4double eKin,
G4double H = aFragment.GetNumberOfHoles();
G4double N = P + H;
G4double A0 = (P*P+H*H+P-H)/4.0 - H/2.0;
G4double A1 = A0 - P/2.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,U - eKin - GetBindingEnergy() - A1);
if (E1 == 0.0) return 0.0;
// g = (6.0/pi2)*a*A
// G4EvaporationLevelDensityParameter theLDP;
G4double g0 = (6.0/pi2)*aFragment.GetA() *
@@ -59,9 +51,17 @@ ProbabilityDistributionFunction(const G4double eKin,
G4PreCompoundParameters::GetAddress()->GetLevelDensity();
// theLDP.LevelDensityParameter(static_cast<G4int>(GetRestA()),static_cast<G4int>(GetRestZ()),U);
G4double A0 = ((P*P+H*H+P-H)/4.0 - H/2.0)/g0;
G4double A1 = (A0*g0 - P/2.0)/g1;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,U - eKin - GetBindingEnergy() - A1);
if (E1 == 0.0) return 0.0;
G4double Probability = 2.0/(hbarc*hbarc*hbarc) * GetReducedMass() *
r0 * r0 * std::pow(GetRestA(),2.0/3.0) * GetAlpha() * (eKin + GetBeta()) *
GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged()) * r0 * r0 * std::pow(GetRestA(),2.0/3.0) * GetAlpha() * (eKin + GetBeta()) *
P*(N-1.0) * std::pow(g1*E1/(g0*E0),N-2.0)/E0 *
g1/(g0*g0);
@@ -25,7 +25,7 @@
//
//
// $Id: G4PreCompoundParameters.cc,v 1.3 2006/06/29 20:59:29 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4PreCompoundTransitions.cc,v 1.9 2007/05/04 14:50:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4PreCompoundTransitions.cc,v 1.13 2007/07/23 12:48:54 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -133,9 +133,10 @@ CalculateProbability(const G4Fragment & aFragment)
// F(p,h) = 0.25*(p^2 + h^2 + p - h) - 0.5*h
G4double Fph = (P*P+H*H+P-H)/4.0 - H/2.0;
G4double Fph = ((P*P+H*H+P-H)/4.0 - H/2.0);
G4bool NeverGoBack(false);
if (U-Fph < 0.0) NeverGoBack = true;
//AH if (U-Fph < 0.0) NeverGoBack = true;
if (GE-Fph < 0.0) NeverGoBack = true;
// F(p+1,h+1)
G4double Fph1 = Fph + N/2.0;
// (n+1)/n ((g*E - F(p,h))/(g*E - F(p+1,h+1)))^(n+1)
@@ -182,11 +183,20 @@ G4Fragment G4PreCompoundTransitions::PerformTransition(const G4Fragment & aFragm
// Number of excitons is increased on \Delta n = -2
deltaN = -2;
}
// AH/JMQ: Randomly decrease the number of charges if deltaN is -2 and in proportion to the number charges w.r.t. number of particles
if(deltaN < 0 && G4UniformRand() <= static_cast<G4double>(result.GetNumberOfCharged())/static_cast<G4double>(result.GetNumberOfParticles()) && (result.GetNumberOfCharged() >= 1))
result.SetNumberOfCharged(result.GetNumberOfCharged()+deltaN/2); // deltaN is negative!
// result.SetNumberOfParticles was here
// result.SetNumberOfHoles was here
// the following lines have to be before SetNumberOfCharged, otherwise the check on number of charged vs. number of particles fails
result.SetNumberOfParticles(result.GetNumberOfParticles()+deltaN/2);
result.SetNumberOfHoles(result.GetNumberOfHoles()+deltaN/2);
// With weight Z/A, number of charged particles is decreased on +1
if ((deltaN > 0 || result.GetNumberOfCharged() > 0) &&
// if ((deltaN > 0 || result.GetNumberOfCharged() > 0) && // AH/JMQ check is now in initialize within G4VPreCompoundFragment
if ( ( deltaN > 0 ) &&
(G4UniformRand() <= static_cast<G4double>(result.GetZ()-result.GetNumberOfCharged())/
std::max(static_cast<G4double>(result.GetA()-Nexcitons),1.)))
{
@@ -199,6 +209,10 @@ G4Fragment G4PreCompoundTransitions::PerformTransition(const G4Fragment & aFragm
result.SetNumberOfCharged(result.GetNumberOfParticles());
}
// moved from above to make code more readable
// result.SetNumberOfParticles(result.GetNumberOfParticles()+deltaN/2);
// result.SetNumberOfHoles(result.GetNumberOfHoles()+deltaN/2);
return result;
}
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundFragment.cc,v 1.3 2006/06/29 20:59:35 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4VPreCompoundFragment.cc,v 1.4 2007/07/23 09:56:40 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -141,7 +141,8 @@ Initialize(const G4Fragment & aFragment)
if ((theRestNucleusA < theRestNucleusZ) ||
(theRestNucleusA < theA) ||
(theRestNucleusZ < theZ))
(theRestNucleusZ < theZ) ||
(aFragment.GetNumberOfCharged() < theZ)) // AH last argument from JMQ
{
// In order to be sure that emission probability will be 0.
theMaximalKineticEnergy = 0.0;
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundIon.cc,v 1.4 2006/06/29 20:59:37 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4VPreCompoundIon.cc,v 1.5 2007/07/23 09:56:40 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -47,15 +47,6 @@ ProbabilityDistributionFunction(const G4double eKin,
G4double H = aFragment.GetNumberOfHoles();
G4double N = P + H;
G4double A0 = (P*P+H*H+P-H)/4.0 - H/2.0;
G4double A1 = std::max(0.0,A0 + GetA()*(GetA()-2.0*P-1.0)/4.0);
G4double Aj = GetA()*(GetA()+1.0)/4.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,GetMaximalKineticEnergy() + GetCoulombBarrier() - eKin - A1);
G4double Ej = std::max(0.0,U + GetBindingEnergy() - Aj);
// g = (6.0/pi2)*a*A
// G4EvaporationLevelDensityParameter theLDP;
G4double g0 = (6.0/pi2)*aFragment.GetA() *
@@ -68,6 +59,15 @@ ProbabilityDistributionFunction(const G4double eKin,
G4PreCompoundParameters::GetAddress()->GetLevelDensity();
// theLDP.LevelDensityParameter(GetA(),GetZ(),U);
G4double A0 = ((P*P+H*H+P-H)/4.0 - H/2.0)/g0;
G4double A1 = std::max(0.0,(A0*g0 + GetA()*(GetA()-2.0*P-1.0)/4.0)/g1);
G4double Aj = GetA()*(GetA()+1.0)/4.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,GetMaximalKineticEnergy() + GetCoulombBarrier() - eKin - A1);
G4double Ej = std::max(0.0,U + GetBindingEnergy() - Aj);
G4double pA = (3.0/4.0) * std::sqrt(std::max(0.0, 2.0/(GetReducedMass()*(eKin+GetBindingEnergy()))))*
GetAlpha()*(eKin+GetBeta())/(r0*std::pow(GetRestA(),1.0/3.0)) *
CoalescenceFactor(aFragment.GetA()) * FactorialFactor(N,P);
@@ -24,8 +24,8 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundNucleon.cc,v 1.4 2006/06/29 20:59:39 gunter Exp $
// GEANT4 tag $Name: geant4-09-00 $
// $Id: G4VPreCompoundNucleon.cc,v 1.5 2007/07/23 09:56:40 ahoward Exp $
// GEANT4 tag $Name: geant4-09-01 $
//
// by V. Lara
@@ -47,13 +47,6 @@ ProbabilityDistributionFunction(const G4double eKin,
G4double H = aFragment.GetNumberOfHoles();
G4double N = P + H;
G4double A0 = (P*P+H*H+P-H)/4.0 - H/2.0;
G4double A1 = A0 - P/2.0;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,U - eKin - GetBindingEnergy() - A1);
// g = (6.0/pi2)*a*A
// G4EvaporationLevelDensityParameter theLDP;
G4double g0 = (6.0/pi2)*aFragment.GetA() *
@@ -64,8 +57,15 @@ ProbabilityDistributionFunction(const G4double eKin,
// theLDP.LevelDensityParameter(G4int(GetRestA()),G4int(GetRestZ()),U);
G4double A0 = ((P*P+H*H+P-H)/4.0 - H/2.0)/g0;
G4double A1 = (A0*g0 - P/2.0)/g1;
G4double E0 = std::max(0.0,U - A0);
if (E0 == 0.0) return 0.0;
G4double E1 = std::max(0.0,U - eKin - GetBindingEnergy() - A1);
G4double Probability = 2.0/(hbarc*hbarc*hbarc) * GetReducedMass() *
r0 * r0 * std::pow(GetRestA(),2.0/3.0) * GetAlpha() * (eKin + GetBeta()) *
GetRj(aFragment.GetNumberOfParticles(), aFragment.GetNumberOfCharged()) * r0 * r0 * std::pow(GetRestA(),2.0/3.0) * GetAlpha() * (eKin + GetBeta()) *
P*(N-1.0) * std::pow(g1*E1/(g0*E0),N-2.0)/E0 *
g1/(g0*g0);