Import Geant4 10.5.0 source tree

This commit is contained in:
Gabriele Cosmo
2018-12-07 15:15:39 +01:00
parent 6aa23be517
commit db49709b53
11370 changed files with 187480 additions and 160142 deletions
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GNASHTransitions.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// 20.08.2010 V.Ivanchenko move constructor and destructor to the source
@@ -51,9 +50,10 @@ CalculateProbability(const G4Fragment & aFragment)
G4double P = aFragment.GetNumberOfParticles();
G4double H = aFragment.GetNumberOfHoles();
G4double N = P + H;
G4double A = aFragment.GetA_asInt();
G4int Z = aFragment.GetZ_asInt();
G4int A = aFragment.GetA_asInt();
G4double theMatrixElement(k*N/(A*A*A*E));
G4double theMatrixElement(k*N/((A*A*A)*E));
G4double x = E/(N*CLHEP::MeV);
static const G4double xf = std::sqrt(2.0/7.0);
if ( x < 2.0) { x *= xf; }
@@ -61,7 +61,7 @@ CalculateProbability(const G4Fragment & aFragment)
else if ( x > 15.0){ x *= std::sqrt(15.0/x); }
theMatrixElement *= x;
G4double gg = (6.0/pi2)*theParameters->GetLevelDensity()*A;
G4double gg = (6.0/pi2)*G4NuclearLevelData::GetInstance()->GetLevelDensity(Z,A,E);
G4double Epauli = ((P+1.0)*(P+1.0) + (H+1.0)*(H+1.0) + (P+1.0) - 3.0*(H-1.0))*0.25;
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCAlpha.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCChargedFragment.cc 96527 2016-04-20 08:51:00Z gcosmo $
//
// by V. Lara
//
@@ -35,6 +34,7 @@
#include "G4HETCChargedFragment.hh"
#include "G4PhysicalConstants.hh"
#include "G4VCoulombBarrier.hh"
#include "G4NuclearLevelData.hh"
G4HETCChargedFragment::G4HETCChargedFragment(
const G4ParticleDefinition* pd, G4VCoulombBarrier * aCoulombBarrier)
@@ -50,7 +50,8 @@ SampleKineticEnergy(const G4Fragment & aFragment)
G4int Pb = aFragment.GetNumberOfParticles();
G4int H = aFragment.GetNumberOfHoles();
G4double g0 = (6.0/pi2)*theFragA*theParameters->GetLevelDensity();
G4double g0 = (6.0/pi2)*fNucData->GetLevelDensity(theFragZ,theFragA,
aFragment.GetExcitationEnergy());
G4double Ab = std::max(0.0,G4double(Pb*Pb+H*H+Pb-3*H)/(4.0*g0));
G4double Emax = theMaxKinEnergy - Ab;
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCDeuteron.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCEmissionFactory.cc 68028 2013-03-13 13:48:15Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCFragment.cc 100378 2016-10-19 15:03:27Z gcosmo $
//
// by V. Lara
//
@@ -32,6 +31,8 @@
// the source, use G4Pow
#include "G4HETCFragment.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4NuclearLevelData.hh"
#include "G4PhysicalConstants.hh"
G4HETCFragment::
@@ -74,8 +75,9 @@ IntegrateEmissionProbability(G4double & Low, G4double & Up,
G4int Pb = P - theA;
G4int Nb = Pb + H;
if (Nb <= 0.0) { return 0.0; }
G4double ga = (6.0/pi2)*theFragA*theParameters->GetLevelDensity();
G4double gb = (6.0/pi2)*theResA*theParameters->GetLevelDensity();
G4double ga = (6.0/pi2)*fNucData->GetLevelDensity(theFragZ,theFragA,U);
G4double gb = (6.0/pi2)*fNucData->GetLevelDensity(theResZ,theResA,U);
G4double A = G4double(P*P+H*H+P-3*H)/(4.0*ga);
G4double Ab = G4double(Pb*Pb+H*H+Pb-3*H)/(4.0*gb);
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCHe3.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCNeutron.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -35,6 +34,7 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Neutron.hh"
#include "G4NuclearLevelData.hh"
G4HETCNeutron::G4HETCNeutron()
: G4HETCFragment(G4Neutron::Neutron(), &theNeutronCoulombBarrier)
@@ -85,7 +85,8 @@ G4double G4HETCNeutron::SampleKineticEnergy(const G4Fragment & aFragment)
G4int H = aFragment.GetNumberOfHoles();
G4int Pb = aFragment.GetNumberOfParticles();
G4int Nb = Pb + H;
G4double g0 = (6.0/pi2)*theFragA*theParameters->GetLevelDensity();
G4double U = aFragment.GetExcitationEnergy();
G4double g0 = (6.0/pi2)*fNucData->GetLevelDensity(theFragZ,theFragA,U);
G4double Ab = std::max(0.0,G4double(Pb*Pb+H*H+Pb-3*H)/(4.0*g0));
G4double Emax = theMaxKinEnergy - Ab;
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCProton.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCTriton.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// by V. Lara
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4LowEIonFragmentation.cc 91837 2015-08-07 07:27:08Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundAlpha.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundDeuteron.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundEmission.cc 108685 2018-02-27 07:58:38Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -62,9 +61,8 @@ G4PreCompoundEmission::G4PreCompoundEmission()
theFragmentsVector =
new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector());
g4calc = G4Pow::GetInstance();
G4DeexPrecoParameters* param =
G4NuclearLevelData::GetInstance()->GetParameters() ;
fLevelDensity = param->GetLevelDensity();
fNuclData = G4NuclearLevelData::GetInstance();
G4DeexPrecoParameters* param = fNuclData->GetParameters();
fFermiEnergy = param->GetFermiEnergy();
fUseAngularGenerator = param->UseAngularGen();
}
@@ -188,7 +186,8 @@ void G4PreCompoundEmission::AngularDistribution(
// Emission particle separation energy
G4double Bemission = thePreFragment->GetBindingEnergy();
G4double gg = (6.0/pi2)*aFragment.GetA_asInt()*fLevelDensity;
G4double gg = (6.0/pi2)*fNuclData->GetLevelDensity(aFragment.GetZ_asInt(),
aFragment.GetA_asInt(),U);
// Average exciton energy relative to bottom of nuclear well
G4double Eav = 2*p*(p+1)/((p+h)*gg);
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundEmissionFactory.cc 68028 2013-03-13 13:48:15Z gcosmo $
//
#include "G4PreCompoundEmissionFactory.hh"
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundFragment.cc 108685 2018-02-27 07:58:38Z gcosmo $
//
// J. M. Quesada (August 2008).
// Based on previous work by V. Lara
@@ -37,6 +36,7 @@
#include "G4PreCompoundFragment.hh"
#include "G4KalbachCrossSection.hh"
#include "G4ChatterjeeCrossSection.hh"
#include "G4DeexPrecoParameters.hh"
#include "Randomize.hh"
G4PreCompoundFragment::G4PreCompoundFragment(const G4ParticleDefinition* p,
@@ -97,6 +97,7 @@ IntegrateEmissionProbability(G4double low, G4double up,
G4double sum = probmax;
for (G4int i=1; i<nbins; ++i) {
e += del;
G4double y = ProbabilityDistributionFunction(e, aFragment);
probmax = std::max(probmax, y);
sum += y;
@@ -111,7 +112,7 @@ IntegrateEmissionProbability(G4double low, G4double up,
G4double G4PreCompoundFragment::CrossSection(G4double ekin) const
{
G4double res;
if(OPTxs == 0) {
if(OPTxs == 0 || (OPTxs == 4 && theMaxKinEnergy < 10.)) {
res = GetOpt0(ekin);
} else if(OPTxs <= 2) {
@@ -133,7 +134,7 @@ G4double G4PreCompoundFragment::GetOpt0(G4double ekin) const
G4double r0 = theParameters->GetR0()*theResA13;
// cross section is now given in mb (r0 is in mm) for the sake of consistency
//with the rest of the options
return 1.e+25*CLHEP::pi*r0*r0*theResA13*GetAlpha()*(1.+GetBeta()/ekin);
return 1.e+25*CLHEP::pi*r0*r0*theResA13*GetAlpha()*(1.0 + GetBeta()/ekin);
}
G4double G4PreCompoundFragment::SampleKineticEnergy(const G4Fragment& fragment)
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundFragmentVector.cc 108685 2018-02-27 07:58:38Z gcosmo $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundHe3.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundIon.cc 100378 2016-10-19 15:03:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -42,6 +41,8 @@
#include "G4PreCompoundIon.hh"
#include "G4PhysicalConstants.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
G4PreCompoundIon::
G4PreCompoundIon(const G4ParticleDefinition* part,
@@ -69,8 +70,8 @@ ProbabilityDistributionFunction(G4double eKin,
G4int N = P + H;
static const G4double sixoverpi2 = 6.0/CLHEP::pi2;
G4double g0 = sixoverpi2*theFragA*theParameters->GetLevelDensity();
G4double g1 = sixoverpi2*theResA*theParameters->GetLevelDensity();
G4double g0 = sixoverpi2*fNucData->GetLevelDensity(theFragZ, theFragA, U);
G4double g1 = sixoverpi2*fNucData->GetLevelDensity(theResZ, theResA, 0.0);
G4double gj = g1;
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundModel.cc 108685 2018-02-27 07:58:38Z gcosmo $
//
// by V. Lara
//
@@ -75,9 +74,10 @@ G4PreCompoundModel::G4PreCompoundModel(G4ExcitationHandler* ptr)
//G4cout << "### NEW PrecompoundModel " << this << G4endl;
if(!ptr) { SetExcitationHandler(new G4ExcitationHandler()); }
fNuclData = G4NuclearLevelData::GetInstance();
proton = G4Proton::Proton();
neutron = G4Neutron::Neutron();
fLevelDensity = fLimitEnergy = 0.0;
fLimitEnergy = 0.0;
}
////////////////////////////////////////////////////////////////////////////////
@@ -105,11 +105,8 @@ void G4PreCompoundModel::InitialiseModel()
//G4cout << "G4PreCompoundModel::InitialiseModel() started" << G4endl;
G4DeexPrecoParameters* param =
G4NuclearLevelData::GetInstance()->GetParameters();
// 12/pi2 factor is used in real computation
fLevelDensity = param->GetLevelDensity()*12.0/CLHEP::pi2;
G4DeexPrecoParameters* param = fNuclData->GetParameters();
fLimitEnergy = param->GetPrecoLowEnergy();
useSCO = param->UseSoftCutoff();
@@ -220,13 +217,16 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
// main loop
G4int count = 0;
static const G4double ldfact = 12.0/CLHEP::pi2;
static const G4int countmax = 1000;
for (;;) {
//G4cout << "### PreCompound loop over fragment" << G4endl;
//G4cout << aFragment << G4endl;
G4double U = aFragment.GetExcitationEnergy();
Z = aFragment.GetZ_asInt();
A = aFragment.GetA_asInt();
G4int EquilibriumExcitonNumber =
G4lrint(std::sqrt(aFragment.GetExcitationEnergy()
*aFragment.GetA_asInt()*fLevelDensity));
G4lrint(std::sqrt(ldfact*U*fNuclData->GetLevelDensity(Z, A, U)));
//
// G4cout<<"Neq="<<EquilibriumExcitonNumber<<G4endl;
//
@@ -273,9 +273,7 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
// approximation (critical exciton number)
//V.Ivanchenko (May 2011) added check on number of nucleons
// to send a fragment to FermiBreakUp
if(!go_ahead || P1 <= P2+P3 ||
aFragment.GetZ_asInt() < minZ || aFragment.GetA_asInt() < minA ||
(aFragment.GetExcitationEnergy() <= fLimitEnergy*aFragment.GetA_asInt()))
if(!go_ahead || P1 <= P2+P3 || Z < minZ || A < minA || U <= fLimitEnergy*A)
{
//G4cout<<"#4 EquilibriumEmission"<<G4endl;
PerformEquilibriumEmission(aFragment,Result);
@@ -416,8 +414,8 @@ void G4PreCompoundModel::ModelDescription(std::ostream& outFile) const
<< "holes h.\n"
<< "At the preequilibrium stage of reaction, we follow the exciton model approach in ref. [1],\n"
<< "taking into account the competition among all possible nuclear transitions\n"
<< "with ∆n = +2, 2, 0 (which are dened by their associated transition probabilities) and\n"
<< "the emission of neutrons, protons, deutrons, thritium and helium nuclei (also defined by\n"
<< "with ∆n = +2, 2, 0 (which are defined by their associated transition probabilities) and\n"
<< "the emission of neutrons, protons, deuterons, thritium and helium nuclei (also defined by\n"
<< "their associated emission probabilities according to exciton model)\n"
<< "\n"
<< "[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n"
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundNeutron.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundNucleon.cc 108685 2018-02-27 07:58:38Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -42,6 +41,7 @@
#include "G4PreCompoundNucleon.hh"
#include "G4PhysicalConstants.hh"
#include "G4NuclearLevelData.hh"
#include "G4SystemOfUnits.hh"
G4PreCompoundNucleon::G4PreCompoundNucleon(
@@ -62,8 +62,8 @@ ProbabilityDistributionFunction(G4double eKin,
G4int N = P + H;
static const G4double sixoverpi2 = 6.0/CLHEP::pi2;
G4double g0 = sixoverpi2*theFragA*theParameters->GetLevelDensity();
G4double g1 = sixoverpi2*theResA*theParameters->GetLevelDensity();
G4double g0 = sixoverpi2*fNucData->GetLevelDensity(theFragZ, theFragA, U);
G4double g1 = sixoverpi2*fNucData->GetLevelDensity(theResZ, theResA, 0.0);
G4double A0 = G4double(P*P+H*H+P-3*H)/(4.0*g0);
G4double A1 = (A0 - 0.5*P)/g1;
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundProton.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundTransitions.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -59,11 +58,10 @@
G4PreCompoundTransitions::G4PreCompoundTransitions()
{
proton = G4Proton::Proton();
G4DeexPrecoParameters* param =
G4NuclearLevelData::GetInstance()->GetParameters() ;
fNuclData = G4NuclearLevelData::GetInstance();
G4DeexPrecoParameters* param = fNuclData->GetParameters();
FermiEnergy = param->GetFermiEnergy();
r0 = param->GetTransitionsR0();
aLDP = param->GetLevelDensity();
}
G4PreCompoundTransitions::~G4PreCompoundTransitions()
@@ -99,6 +97,7 @@ CalculateProbability(const G4Fragment & aFragment)
// OPT=2 Transitions are calculated according to Gupta's formulae
//
static const G4double sixdpi2 = 6.0/CLHEP::pi2;
G4double GE = sixdpi2*U*fNuclData->GetLevelDensity(Z,A,U);
if (useCEMtr) {
// Relative Energy (T_{rel})
G4double RelativeEnergy = 1.6*FermiEnergy + U/G4double(N);
@@ -165,7 +164,6 @@ CalculateProbability(const G4Fragment & aFragment)
// TransitionProb1 *= factor;
// GE = g*E where E is Excitation Energy
G4double GE = sixdpi2*aLDP*A*U;
G4double Fph = G4double(P*P+H*H+P-3*H)*0.25;
if(!useNGB) {
@@ -176,7 +174,7 @@ CalculateProbability(const G4Fragment & aFragment)
static const G4double plimit = 100;
//JMQ/AH bug fixed: if (U-Fph < 0.0)
if (GE-Fph1 > 0.0) {
if (GE > Fph1) {
G4double x0 = GE-Fph;
G4double x1 = (N+1)*G4Log(x0/(GE-Fph1));
if(x1 < plimit) {
@@ -198,8 +196,7 @@ CalculateProbability(const G4Fragment & aFragment)
TransitionProb1 = std::max(0.0, U*(4.2e+12 - 3.6e+10*U/G4double(N+1)))
/(16*CLHEP::c_light);
if (!useNGB && N > 1) {
G4double GE = sixdpi2*aLDP*A*U;
if (!useNGB && N > 1) {
TransitionProb2 = ((N-1)*(N-2)*P*H)*TransitionProb1/(GE*GE);
}
}
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundTriton.cc 90337 2015-05-26 08:34:27Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundEmissionFactory.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// by V. Lara
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundFragment.cc 100691 2016-10-31 11:26:25Z gcosmo $
//
// J. M. Quesada (August 2008). Based on previous work by V. Lara
//
@@ -33,9 +32,9 @@
#include "G4VPreCompoundFragment.hh"
#include "G4SystemOfUnits.hh"
#include "G4NucleiProperties.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4NucleiProperties.hh"
G4VPreCompoundFragment::G4VPreCompoundFragment(
const G4ParticleDefinition* part, G4VCoulombBarrier* aCoulombBarrier)
@@ -50,7 +49,8 @@ G4VPreCompoundFragment::G4VPreCompoundFragment(
OPTxs(3),useSICB(true)
{
theMass = particle->GetPDGMass();
theParameters = G4NuclearLevelData::GetInstance()->GetParameters();
fNucData = G4NuclearLevelData::GetInstance();
theParameters = fNucData->GetParameters();
g4calc = G4Pow::GetInstance();
theResA13 = 0.0;
}
@@ -23,7 +23,6 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundTransitions.cc 68028 2013-03-13 13:48:15Z gcosmo $
//
// V.Ivanchenko 20.08.2010
//