Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
@@ -14,6 +14,36 @@ code and to keep track of all tags.
* Please list in reverse chronological order (last date on top)
---------------------------------------------------------------
23-Apr-2016 V.Ivanchenko hadr-pre-V10-02-06
- G4PreCompoundFragment - fixed problem of the previous tag
22-Apr-2016 V.Ivanchenko hadr-pre-V10-02-05
- G4GNASHTransitions - fixed problem in computation of probability
- G4PreCompoundFragment, G4PreCompoundFragmentVector,
G4PreCompoundIon, G4PreCompoundModel, G4PreCompoundNucleon,
G4PreCompoundTransitions, G4VPreCompoundEmissionFactory,
G4VPreCompoundFragment - use nullptr, all internal cost are static
19-Apr-2016 V.Ivanchenko hadr-pre-V10-02-04
19-Apr-2016 V.Ivanchenko hadr-pre-V10-02-02
-------------------------------------------------
- G4GNASHTransitions, G4PreCompoundModel, G4VPreCompoundFragment,
G4HETCFragment, G4PreCompoundIon, G4HETCChargedFragment,
G4PreCompoundEmission, G4PreCompoundTransitions - migration from
G4PreCompoundParameters to G4DeexPrecoParameters
- G4PreCompoundParameters - removed
21-Mar-2016 V.Ivanchenko hadr-pre-V10-02-01
-------------------------------------------------
- Fixed division by zero due to the previous tag
21-Mar-2016 V.Ivanchenko hadr-pre-V10-02-00
-------------------------------------------------
- G4PreCompoundModel, G4PreCompoundParameters - changed non-equilibrium
condition to switch to the de-excitation - instead check (Z<9 || A<17)
check A<=5 || excitation<=A*Elimit (default Elimit = 0.1MeV);
This allows to perform pre-equilibrium emission for light nuclei.
10-Nov-2015 V.Ivanchenko hadr-pre-V10-01-06
-------------------------------------------------
- G4PreCompoundFragment - an attempt to fix icc compillation problem
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GNASHTransitions.hh 68028 2013-03-13 13:48:15Z gcosmo $
// $Id: G4GNASHTransitions.hh 96527 2016-04-20 08:51:00Z gcosmo $
//
#ifndef G4GNASHTransitions_hh
#define G4GNASHTransitions_hh 1
@@ -31,13 +31,13 @@
#include "G4VPreCompoundTransitions.hh"
#include "G4Fragment.hh"
class G4PreCompoundParameters;
class G4DeexPrecoParameters;
class G4GNASHTransitions : public G4VPreCompoundTransitions
{
public:
G4GNASHTransitions();
explicit G4GNASHTransitions();
virtual ~G4GNASHTransitions();
@@ -47,14 +47,12 @@ public:
private:
G4GNASHTransitions(const G4GNASHTransitions &);
const G4GNASHTransitions& operator=(const G4GNASHTransitions &right);
G4GNASHTransitions(const G4GNASHTransitions &) = delete;
const G4GNASHTransitions& operator=(const G4GNASHTransitions &right) = delete;
G4bool operator==(const G4GNASHTransitions &right) const = delete;
G4bool operator!=(const G4GNASHTransitions &right) const = delete;
G4bool operator==(const G4GNASHTransitions &right) const;
G4bool operator!=(const G4GNASHTransitions &right) const;
G4PreCompoundParameters* theParameters;
G4DeexPrecoParameters* theParameters;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundFragment.hh 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4PreCompoundFragment.hh 96603 2016-04-25 13:29:51Z gcosmo $
//
// J. M. Quesada (August 2008).
// Based on previous work by V. Lara
@@ -41,6 +41,8 @@
#include "G4VPreCompoundFragment.hh"
const G4int NPOINTSGL = 10;
class G4PreCompoundFragment : public G4VPreCompoundFragment
{
public:
@@ -80,20 +82,20 @@ private:
G4double GetOpt0(G4double ekin) const;
// default constructor
G4PreCompoundFragment();
// operators
G4PreCompoundFragment(const G4PreCompoundFragment &right);
G4PreCompoundFragment(const G4PreCompoundFragment &right) = delete;
const G4PreCompoundFragment&
operator= (const G4PreCompoundFragment &right);
G4int operator==(const G4PreCompoundFragment &right) const;
G4int operator!=(const G4PreCompoundFragment &right) const;
operator= (const G4PreCompoundFragment &right) = delete;
G4int operator==(const G4PreCompoundFragment &right) const = delete;
G4int operator!=(const G4PreCompoundFragment &right) const = delete;
G4int index;
G4double muu;
G4double probability[12];
G4double probmax;
static const G4double ws[NPOINTSGL];
static const G4double xs[NPOINTSGL];
};
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundModel.hh 80062 2014-03-31 13:41:30Z gcosmo $
// $Id: G4PreCompoundModel.hh 96527 2016-04-20 08:51:00Z gcosmo $
//
// by V. Lara
//
@@ -56,7 +56,6 @@
#include "G4ReactionProduct.hh"
#include "G4ExcitationHandler.hh"
class G4PreCompoundParameters;
class G4PreCompoundEmission;
class G4VPreCompoundTransitions;
class G4ParticleDefinition;
@@ -65,17 +64,23 @@ class G4PreCompoundModel : public G4VPreCompoundModel
{
public:
G4PreCompoundModel(G4ExcitationHandler* ptr = 0);
explicit G4PreCompoundModel(G4ExcitationHandler* ptr = nullptr);
virtual ~G4PreCompoundModel();
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & thePrimary,
G4Nucleus & theNucleus);
G4Nucleus & theNucleus) final;
virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment);
virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment) final;
virtual void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void InitialiseModel() final;
virtual void ModelDescription(std::ostream& outFile) const;
virtual void DeExciteModelDescription(std::ostream& outFile) const;
virtual void ModelDescription(std::ostream& outFile) const final;
virtual void DeExciteModelDescription(std::ostream& outFile) const final;
//====== obsolete Set methods =======
void UseHETCEmission();
void UseDefaultEmission();
void UseGNASHTransition();
@@ -89,6 +94,7 @@ public:
void UseNGB();
void UseSCO();
void UseCEMtr();
//======================================
private:
@@ -96,11 +102,12 @@ private:
void PerformEquilibriumEmission(const G4Fragment & aFragment,
G4ReactionProductVector * theResult) const;
// G4PreCompoundModel();
G4PreCompoundModel(const G4PreCompoundModel &);
const G4PreCompoundModel& operator=(const G4PreCompoundModel &right);
G4bool operator==(const G4PreCompoundModel &right) const;
G4bool operator!=(const G4PreCompoundModel &right) const;
void PrintWarning(const G4String& mname);
G4PreCompoundModel(const G4PreCompoundModel &) = delete;
const G4PreCompoundModel& operator=(const G4PreCompoundModel &right) = delete;
G4bool operator==(const G4PreCompoundModel &right) const = delete;
G4bool operator!=(const G4PreCompoundModel &right) const = delete;
//==============
// Data Members
@@ -113,21 +120,14 @@ private:
const G4ParticleDefinition* neutron;
G4double fLevelDensity;
G4bool useHETCEmission;
G4bool useGNASHTransition;
//for cross section options
G4int OPTxs;
G4double fLimitEnergy;
//for the rest of external choices
G4bool useSICB;
G4bool useNGB;
G4bool useSCO;
G4bool useCEMtr;
G4bool isInitialised;
G4int maxZ;
G4int maxA;
G4int minZ;
G4int minA;
G4HadFinalState theResult;
@@ -1,91 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundParameters.hh 68028 2013-03-13 13:48:15Z gcosmo $
//
// by V. Lara
//
// 01.04.2008 J. M. Quesada Level density set to A/10 at preequilibrium
// 18.08.2010 V.Ivanchenko make this class as a standard singleton
//
#ifndef G4PreCompoundParameters_h
#define G4PreCompoundParameters_h 1
#include "globals.hh"
class G4PreCompoundParameters
{
public:
G4PreCompoundParameters();
~G4PreCompoundParameters();
inline G4double GetLevelDensity();
inline G4double Getr0();
inline G4double GetTransitionsr0();
inline G4double GetFermiEnergy();
private:
// Level density parameter
G4double fLevelDensity;
// Nuclear radius r0
G4double fR0;
// Nuclear radius r0 for transitions
G4double fTransitions_r0;
// Fermi energy level
G4double fFermiEnergy;
};
inline G4double G4PreCompoundParameters::GetLevelDensity()
{
return fLevelDensity;
}
inline G4double G4PreCompoundParameters::Getr0()
{
return fR0;
}
inline G4double G4PreCompoundParameters::GetTransitionsr0()
{
return fTransitions_r0;
}
inline G4double G4PreCompoundParameters::GetFermiEnergy()
{
return fFermiEnergy;
}
#endif
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundFragment.hh 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4VPreCompoundFragment.hh 96527 2016-04-20 08:51:00Z gcosmo $
//
// J. M. Quesada (August 2008).
// Based on previous work by V. Lara
@@ -48,26 +48,18 @@
#include "G4Fragment.hh"
#include "G4VCoulombBarrier.hh"
#include "G4ReactionProduct.hh"
#include "G4PreCompoundParameters.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4Pow.hh"
class G4VPreCompoundFragment
{
public:
// ============================
// Constructors and destructor
// ============================
G4VPreCompoundFragment(const G4ParticleDefinition*,
G4VCoulombBarrier * aCoulombBarrier);
explicit G4VPreCompoundFragment(const G4ParticleDefinition*,
G4VCoulombBarrier * aCoulombBarrier);
virtual ~G4VPreCompoundFragment();
// ==========
// operators
// ==========
friend std::ostream&
operator<<(std::ostream&, const G4VPreCompoundFragment*);
friend std::ostream&
@@ -129,12 +121,11 @@ protected:
private:
G4VPreCompoundFragment();
G4VPreCompoundFragment(const G4VPreCompoundFragment &right);
G4VPreCompoundFragment(const G4VPreCompoundFragment &right) = delete;
const G4VPreCompoundFragment&
operator= (const G4VPreCompoundFragment &right);
G4int operator==(const G4VPreCompoundFragment &right) const;
G4int operator!=(const G4VPreCompoundFragment &right) const;
operator= (const G4VPreCompoundFragment &right) = delete;
G4int operator==(const G4VPreCompoundFragment &right) const = delete;
G4int operator!=(const G4VPreCompoundFragment &right) const = delete;
// =============
// Data members
@@ -147,7 +138,7 @@ private:
protected:
G4PreCompoundParameters* theParameters;
G4DeexPrecoParameters* theParameters;
G4Pow* g4pow;
G4int theA;
@@ -24,7 +24,7 @@
// ********************************************************************
//
//
// $Id: G4VPreCompoundFragment.icc 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4VPreCompoundFragment.icc 96527 2016-04-20 08:51:00Z gcosmo $
//
// by V. Lara
//
@@ -110,13 +110,11 @@ void G4VPreCompoundFragment::SetMomentum(const G4LorentzVector & value)
theMomentum = value;
}
//for inverse cross section choice
inline void G4VPreCompoundFragment::SetOPTxs(G4int opt)
{
OPTxs=opt;
}
//for superimposed Coulomb Barrier for inverse cross sections
inline void G4VPreCompoundFragment::UseSICB(G4bool use)
{
useSICB=use;
@@ -11,7 +11,7 @@
#
# Generated on : 24/9/2010
#
# $Id: sources.cmake 66892 2013-01-17 10:57:59Z gunter $
# $Id: sources.cmake 96527 2016-04-20 08:51:00Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -79,7 +79,6 @@ GEANT4_DEFINE_MODULE(NAME G4had_preequ_exciton
G4PreCompoundModel.hh
G4PreCompoundNeutron.hh
G4PreCompoundNucleon.hh
G4PreCompoundParameters.hh
G4PreCompoundProton.hh
G4PreCompoundTransitions.hh
G4PreCompoundTriton.hh
@@ -110,7 +109,6 @@ GEANT4_DEFINE_MODULE(NAME G4had_preequ_exciton
G4PreCompoundModel.cc
G4PreCompoundNeutron.cc
G4PreCompoundNucleon.cc
G4PreCompoundParameters.cc
G4PreCompoundProton.cc
G4PreCompoundTransitions.cc
G4PreCompoundTriton.cc
@@ -23,31 +23,30 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4GNASHTransitions.cc 92145 2015-08-19 14:26:07Z gcosmo $
// $Id: G4GNASHTransitions.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// 20.08.2010 V.Ivanchenko move constructor and destructor to the source
#include "G4GNASHTransitions.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4PreCompoundParameters.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4HadronicException.hh"
#include "Randomize.hh"
G4GNASHTransitions::G4GNASHTransitions()
{
theParameters = new G4PreCompoundParameters();
theParameters = G4NuclearLevelData::GetInstance()->GetParameters();
}
G4GNASHTransitions::~G4GNASHTransitions()
{
delete theParameters;
}
{}
G4double G4GNASHTransitions::
CalculateProbability(const G4Fragment & aFragment)
{
static const G4double k = 135.0 * MeV*MeV*MeV;
static const G4double k = 135.0 *CLHEP::MeV*CLHEP::MeV*CLHEP::MeV;
G4double E = aFragment.GetExcitationEnergy();
G4double P = aFragment.GetNumberOfParticles();
G4double H = aFragment.GetNumberOfHoles();
@@ -55,20 +54,19 @@ CalculateProbability(const G4Fragment & aFragment)
G4double A = aFragment.GetA_asInt();
G4double theMatrixElement(k*N/(A*A*A*E));
G4double x = E/N;
if ( x < 2.0*MeV ) theMatrixElement *= x/std::sqrt(14.0*MeV*MeV);
else if ( x < 7.0*MeV ) x *= std::sqrt(x/7.0*MeV);
else if ( x < 15.0*MeV ) ;
else x *= std::sqrt(15.0*MeV/x);
G4double x = E/(N*CLHEP::MeV);
static const G4double xf = std::sqrt(2.0/7.0);
if ( x < 2.0) { x *= xf; }
else if ( x < 7.0) { x *= std::sqrt(x/7.0); }
else if ( x > 15.0){ x *= std::sqrt(15.0/x); }
theMatrixElement *= x;
// gg = (6.0/pi2)*a*A
G4double gg = (6.0/pi2)*theParameters->GetLevelDensity()*A;
G4double Epauli = ((P+1.0)*(P+1.0) + (H+1.0)*(H+1.0) + (P+1.0) - 3.0*(H-1.0))/4.0;
G4double Epauli = ((P+1.0)*(P+1.0) + (H+1.0)*(H+1.0) + (P+1.0) - 3.0*(H-1.0))*0.25;
G4double Probability = gg*gg*gg *(E-Epauli)*(E-Epauli);
Probability /= 2.0*(N+1.0)*h_Planck;
Probability *= theMatrixElement;
Probability *= theMatrixElement/(2.0*(N+1.0)*CLHEP::h_Planck);
return Probability;
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCChargedFragment.cc 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4HETCChargedFragment.cc 96527 2016-04-20 08:51:00Z gcosmo $
//
// by V. Lara
//
@@ -35,7 +35,6 @@
#include "G4HETCChargedFragment.hh"
#include "G4PhysicalConstants.hh"
#include "G4VCoulombBarrier.hh"
#include "G4PreCompoundParameters.hh"
G4HETCChargedFragment::G4HETCChargedFragment(
const G4ParticleDefinition* pd, G4VCoulombBarrier * aCoulombBarrier)
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HETCFragment.cc 91837 2015-08-07 07:27:08Z gcosmo $
// $Id: G4HETCFragment.cc 96527 2016-04-20 08:51:00Z gcosmo $
//
// by V. Lara
//
@@ -33,14 +33,13 @@
#include "G4HETCFragment.hh"
#include "G4PhysicalConstants.hh"
#include "G4PreCompoundParameters.hh"
G4HETCFragment::
G4HETCFragment(const G4ParticleDefinition* part,
G4VCoulombBarrier* aCoulombBarrier)
: G4VPreCompoundFragment(part, aCoulombBarrier)
{
G4double r0 = theParameters->Getr0();
G4double r0 = theParameters->GetR0();
r2norm = r0*r0/(CLHEP::pi*CLHEP::hbarc*CLHEP::hbarc*CLHEP::hbarc);
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundEmission.cc 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4PreCompoundEmission.cc 96527 2016-04-20 08:51:00Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -49,10 +49,11 @@
#include "G4Exp.hh"
#include "G4Log.hh"
#include "Randomize.hh"
#include "G4PreCompoundParameters.hh"
#include "G4PreCompoundEmissionFactory.hh"
#include "G4HETCEmissionFactory.hh"
#include "G4HadronicException.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
G4PreCompoundEmission::G4PreCompoundEmission()
{
@@ -60,9 +61,10 @@ G4PreCompoundEmission::G4PreCompoundEmission()
theFragmentsVector =
new G4PreCompoundFragmentVector(theFragmentsFactory->GetFragmentVector());
g4pow = G4Pow::GetInstance();
G4PreCompoundParameters param;
fLevelDensity = param.GetLevelDensity();
fFermiEnergy = param.GetFermiEnergy();
G4DeexPrecoParameters* param =
G4NuclearLevelData::GetInstance()->GetParameters() ;
fLevelDensity = param->GetLevelDensity();
fFermiEnergy = param->GetFermiEnergy();
}
G4PreCompoundEmission::~G4PreCompoundEmission()
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundFragment.cc 94281 2015-11-10 15:00:15Z gcosmo $
// $Id: G4PreCompoundFragment.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// J. M. Quesada (August 2008).
// Based on previous work by V. Lara
@@ -39,9 +39,8 @@
#include "G4ChatterjeeCrossSection.hh"
#include "Randomize.hh"
const G4int NPOINTSGL = 10;
// 10-Points Gauss-Legendre abcisas and weights
const G4double w[NPOINTSGL] = {
const G4double G4PreCompoundFragment::ws[] = {
0.0666713443086881,
0.149451349150581,
0.219086362515982,
@@ -53,7 +52,7 @@ const G4double w[NPOINTSGL] = {
0.149451349150581,
0.0666713443086881
};
const G4double x[NPOINTSGL] = {
const G4double G4PreCompoundFragment::xs[] = {
-0.973906528517172,
-0.865063366688985,
-0.679409568299024,
@@ -66,16 +65,14 @@ const G4double x[NPOINTSGL] = {
0.973906528517172
};
G4PreCompoundFragment::
G4PreCompoundFragment(const G4ParticleDefinition* part,
G4VCoulombBarrier* aCoulombBarrier)
: G4VPreCompoundFragment(part,aCoulombBarrier)
G4PreCompoundFragment::G4PreCompoundFragment(const G4ParticleDefinition* p,
G4VCoulombBarrier* aCoulBarrier)
: G4VPreCompoundFragment(p, aCoulBarrier)
{
muu = probmax = 0.0;
index = 0;
if(1 == theZ) { index = theA; }
else { index = theA + 1; }
for(G4int i=0; i<12; ++i) { probability[i] = 0.0; }
}
G4PreCompoundFragment::~G4PreCompoundFragment()
@@ -88,8 +85,7 @@ CalcEmissionProbability(const G4Fragment & aFragment)
// If theCoulombBarrier effect is included in the emission probabilities
// Coulomb barrier is the lower limit of integration over kinetic energy
G4double LowerLimit = 0.0;
if(OPTxs==0 || useSICB) { LowerLimit = theCoulombBarrier; }
G4double LowerLimit = theCoulombBarrier;
if (theMaxKinEnergy <= LowerLimit)
{
@@ -130,11 +126,10 @@ IntegrateEmissionProbability(G4double low, G4double up,
probmax = 0.0;
for (G4int i=0; i<NPOINTSGL; ++i) {
e = del*x[i] + avr;
e = del*xs[i] + avr;
y = ProbabilityDistributionFunction(e, aFragment);
probability[i] = y;
probmax = std::max(probmax, y);
sum += w[i]*y;
sum += ws[i]*y;
}
return sum*del;
}
@@ -159,7 +154,7 @@ G4double G4PreCompoundFragment::CrossSection(G4double ekin) const
// *********************** OPT=0 : Dostrovski's cross section ***************
G4double G4PreCompoundFragment::GetOpt0(G4double ekin) const
{
G4double r0 = theParameters->Getr0()*theResA13;
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);
@@ -168,8 +163,7 @@ G4double G4PreCompoundFragment::GetOpt0(G4double ekin) const
G4double G4PreCompoundFragment::SampleKineticEnergy(const G4Fragment& fragment)
{
//let's keep this way for consistency with CalcEmissionProbability method
G4double limit = 0.0;
if(useSICB) { limit = theCoulombBarrier; }
G4double limit = theCoulombBarrier;
if(theMaxKinEnergy <= limit) { return 0.0; }
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundFragmentVector.cc 68028 2013-03-13 13:48:15Z gcosmo $
// $Id: G4PreCompoundFragmentVector.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// Hadronic Process: Nuclear Preequilibrium
// by V. Lara
@@ -36,7 +36,7 @@
#include "G4PreCompoundFragmentVector.hh"
G4PreCompoundFragmentVector::G4PreCompoundFragmentVector(pcfvector * avector)
: theChannels(0), nChannels(0)
: theChannels(nullptr), nChannels(0)
{
SetVector(avector);
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundIon.cc 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4PreCompoundIon.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -43,14 +43,12 @@
#include "G4PreCompoundIon.hh"
#include "G4PhysicalConstants.hh"
const G4double sixoverpi2 = 6.0/CLHEP::pi2;
G4PreCompoundIon::
G4PreCompoundIon(const G4ParticleDefinition* part,
G4VCoulombBarrier* aCoulombBarrier)
: G4PreCompoundFragment(part,aCoulombBarrier)
{
G4double r0 = theParameters->Getr0();
G4double r0 = theParameters->GetR0();
fact = 0.75*CLHEP::millibarn/(CLHEP::pi*r0*r0*r0);
}
@@ -70,6 +68,7 @@ ProbabilityDistributionFunction(G4double eKin,
G4int A = GetA();
G4int N = P + H;
static const G4double sixoverpi2 = 6.0/CLHEP::pi2;
G4double g0 = sixoverpi2*theFragA*theParameters->GetLevelDensity();
G4double g1 = sixoverpi2*theResA*theParameters->GetLevelDensity();
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundModel.cc 91837 2015-08-07 07:27:08Z gcosmo $
// $Id: G4PreCompoundModel.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// by V. Lara
//
@@ -57,7 +57,8 @@
#include "G4Neutron.hh"
#include "G4NucleiProperties.hh"
#include "G4PreCompoundParameters.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "Randomize.hh"
#include "G4DynamicParticle.hh"
#include "G4ParticleTypes.hh"
@@ -68,29 +69,15 @@
////////////////////////////////////////////////////////////////////////////////
G4PreCompoundModel::G4PreCompoundModel(G4ExcitationHandler* ptr)
: G4VPreCompoundModel(ptr,"PRECO"), useHETCEmission(false),
useGNASHTransition(false), OPTxs(3), useSICB(false),
useNGB(false), useSCO(false), useCEMtr(true), maxZ(3), maxA(5)
: G4VPreCompoundModel(ptr,"PRECO"),theEmission(nullptr),theTransition(nullptr),
useSCO(false),isInitialised(false),minZ(3),minA(5)
{
//G4cout << "### NEW PrecompoundModel " << this << G4endl;
if(!ptr) { SetExcitationHandler(new G4ExcitationHandler()); }
G4PreCompoundParameters param;
// 12/pi2 factor is used in real computation
fLevelDensity = param.GetLevelDensity()*12.0/CLHEP::pi2;
theEmission = new G4PreCompoundEmission();
if(useHETCEmission) { theEmission->SetHETCModel(); }
else { theEmission->SetDefaultModel(); }
theEmission->SetOPTxs(OPTxs);
theEmission->UseSICB(useSICB);
if(useGNASHTransition) { theTransition = new G4GNASHTransitions; }
else { theTransition = new G4PreCompoundTransitions(); }
theTransition->UseNGB(useNGB);
theTransition->UseCEMtr(useCEMtr);
proton = G4Proton::Proton();
neutron = G4Neutron::Neutron();
fLevelDensity = fLimitEnergy = 0.0;
}
////////////////////////////////////////////////////////////////////////////////
@@ -104,6 +91,47 @@ G4PreCompoundModel::~G4PreCompoundModel()
////////////////////////////////////////////////////////////////////////////////
void G4PreCompoundModel::BuildPhysicsTable(const G4ParticleDefinition&)
{
InitialiseModel();
}
////////////////////////////////////////////////////////////////////////////////
void G4PreCompoundModel::InitialiseModel()
{
if(isInitialised) { return; }
isInitialised = true;
//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;
fLimitEnergy = param->GetPrecoLowEnergy();
useSCO = param->UseSoftCutoff();
minZ = param->GetMinZForPreco();
minA = param->GetMinAForPreco();
theEmission = new G4PreCompoundEmission();
if(param->UseHETC()) { theEmission->SetHETCModel(); }
else { theEmission->SetDefaultModel(); }
theEmission->SetOPTxs(param->GetPrecoModelType());
if(param->UseGNASH()) { theTransition = new G4GNASHTransitions; }
else { theTransition = new G4PreCompoundTransitions(); }
theTransition->UseNGB(param->NeverGoBack());
theTransition->UseCEMtr(param->UseCEM());
GetExcitationHandler()->Initialise();
}
////////////////////////////////////////////////////////////////////////////////
G4HadFinalState*
G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary,
G4Nucleus & theNucleus)
@@ -165,6 +193,8 @@ G4PreCompoundModel::ApplyYourself(const G4HadProjectile & thePrimary,
G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
{
if(!isInitialised) { InitialiseModel(); }
G4ReactionProductVector * Result = new G4ReactionProductVector;
G4double Eex = aFragment.GetExcitationEnergy();
G4int Z = aFragment.GetZ_asInt();
@@ -174,14 +204,14 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
//G4cout << aFragment << G4endl;
// Perform Equilibrium Emission
if ((Z < maxZ && A < maxA) || Eex < MeV /*|| Eex > 3.*MeV*A*/) {
if ((Z < minZ && A < minA) || Eex < fLimitEnergy*A) {
PerformEquilibriumEmission(aFragment, Result);
return Result;
}
// main loop
G4int count = 0;
const G4int countmax = 1000;
static const G4int countmax = 1000;
for (;;) {
//G4cout << "### PreCompound loop over fragment" << G4endl;
//G4cout << aFragment << G4endl;
@@ -235,7 +265,8 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
//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() < maxZ && aFragment.GetA_asInt() < maxA) )
aFragment.GetZ_asInt() < minZ || aFragment.GetA_asInt() < minA ||
(aFragment.GetExcitationEnergy() <= fLimitEnergy*aFragment.GetA_asInt()))
{
//G4cout<<"#4 EquilibriumEmission"<<G4endl;
PerformEquilibriumEmission(aFragment,Result);
@@ -302,58 +333,58 @@ G4ReactionProductVector* G4PreCompoundModel::DeExcite(G4Fragment& aFragment)
////////////////////////////////////////////////////////////////////////////////
void G4PreCompoundModel::UseHETCEmission()
{
useHETCEmission = true;
theEmission->SetHETCModel();
{
PrintWarning("UseHETCEmission");
}
void G4PreCompoundModel::UseDefaultEmission()
{
useHETCEmission = false;
theEmission->SetDefaultModel();
PrintWarning("UseDefaultEmission");
}
void G4PreCompoundModel::UseGNASHTransition() {
useGNASHTransition = true;
delete theTransition;
theTransition = new G4GNASHTransitions;
theTransition->UseNGB(useNGB);
theTransition->UseCEMtr(useCEMtr);
}
void G4PreCompoundModel::UseDefaultTransition() {
useGNASHTransition = false;
delete theTransition;
theTransition = new G4PreCompoundTransitions();
theTransition->UseNGB(useNGB);
theTransition->UseCEMtr(useCEMtr);
}
void G4PreCompoundModel::SetOPTxs(G4int opt)
void G4PreCompoundModel::UseGNASHTransition()
{
OPTxs = opt;
theEmission->SetOPTxs(OPTxs);
PrintWarning("UseGNASHTransition");
}
void G4PreCompoundModel::UseDefaultTransition()
{
PrintWarning("UseDefaultTransition");
}
void G4PreCompoundModel::SetOPTxs(G4int)
{
PrintWarning("UseOPTxs");
}
void G4PreCompoundModel::UseSICB()
{
useSICB = true;
theEmission->UseSICB(useSICB);
PrintWarning("UseSICB");
}
void G4PreCompoundModel::UseNGB()
{
useNGB = true;
PrintWarning("UseNGB");
}
void G4PreCompoundModel::UseSCO()
{
useSCO = true;
PrintWarning("UseSCO");
}
void G4PreCompoundModel::UseCEMtr()
{
useCEMtr = true;
PrintWarning("UseCEMtr");
}
void G4PreCompoundModel::PrintWarning(const G4String& mname)
{
G4ExceptionDescription ed;
ed << "Obsolete method of the preCompound model is called: "
<< mname << "() \n Instead a corresponding method of "
<< "G4DeexPrecoParameters class should be used";
G4Exception("G4PreCompoundModel::ReadData()","had0803",JustWarning,ed);
}
////////////////////////////////////////////////////////////////////////////////
@@ -362,31 +393,31 @@ void G4PreCompoundModel::UseCEMtr()
void G4PreCompoundModel::ModelDescription(std::ostream& outFile) const
{
outFile << "The GEANT4 precompound model is considered as an extension of the\n"
<< "hadron kinetic model. It gives a possibility to extend the low energy range\n"
<< "of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n"
<< "provides a ”smooth” transition from kinetic stage of reaction described by the\n"
<< "hadron kinetic model to the equilibrium stage of reaction described by the\n"
<< "equilibrium deexcitation models.\n"
<< "The initial information for calculation of pre-compound nuclear stage\n"
<< "consists of the atomic mass number A, charge Z of residual nucleus, its\n"
<< "four momentum P0 , excitation energy U and number of excitons n, which equals\n"
<< "the sum of the number of particles p (from them p_Z are charged) and the number of\n"
<< "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 defined by their associated transition probabilities) and\n"
<< "the emission of neutrons, protons, deutrons, 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"
<< "\n";
outFile
<< "The GEANT4 precompound model is considered as an extension of the\n"
<< "hadron kinetic model. It gives a possibility to extend the low energy range\n"
<< "of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n"
<< "provides a ”smooth” transition from kinetic stage of reaction described by the\n"
<< "hadron kinetic model to the equilibrium stage of reaction described by the\n"
<< "equilibrium deexcitation models.\n"
<< "The initial information for calculation of pre-compound nuclear stage\n"
<< "consists of the atomic mass number A, charge Z of residual nucleus, its\n"
<< "four momentum P0 , excitation energy U and number of excitons n, which equals\n"
<< "the sum of the number of particles p (from them p_Z are charged) and the number of\n"
<< "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 defined by their associated transition probabilities) and\n"
<< "the emission of neutrons, protons, deutrons, 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"
<< "\n";
}
void G4PreCompoundModel::DeExciteModelDescription(std::ostream& outFile) const
{
outFile << "description of precompound model as used with DeExcite()"
<< "\n";
outFile << "description of precompound model as used with DeExcite()" << "\n";
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundNucleon.cc 91837 2015-08-07 07:27:08Z gcosmo $
// $Id: G4PreCompoundNucleon.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -44,12 +44,8 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
const G4double sixoverpi2 = 6.0/CLHEP::pi2;
const G4double fact = 2*CLHEP::millibarn/(CLHEP::pi2*CLHEP::hbarc*CLHEP::hbarc*CLHEP::hbarc);
G4PreCompoundNucleon::
G4PreCompoundNucleon(const G4ParticleDefinition* part,
G4VCoulombBarrier* aCoulombBarrier)
G4PreCompoundNucleon::G4PreCompoundNucleon(
const G4ParticleDefinition* part, G4VCoulombBarrier* aCoulombBarrier)
: G4PreCompoundFragment(part,aCoulombBarrier)
{}
@@ -65,6 +61,7 @@ ProbabilityDistributionFunction(G4double eKin,
G4int H = aFragment.GetNumberOfHoles();
G4int N = P + H;
static const G4double sixoverpi2 = 6.0/CLHEP::pi2;
G4double g0 = sixoverpi2*theFragA*theParameters->GetLevelDensity();
G4double g1 = sixoverpi2*theResA*theParameters->GetLevelDensity();
@@ -88,6 +85,8 @@ ProbabilityDistributionFunction(G4double eKin,
throw G4HadronicException(__FILE__, __LINE__, errOs.str());
}
static const G4double fact = 2*CLHEP::millibarn
/(CLHEP::pi2*CLHEP::hbarc*CLHEP::hbarc*CLHEP::hbarc);
G4double Probability = fact * theReducedMass * rj * xs * eKin * P * (N-1)
* g4pow->powN(g1*E1/(g0*E0),N-2) * g1 / (E0*g0*g0);
@@ -1,47 +0,0 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundParameters.cc 68028 2013-03-13 13:48:15Z gcosmo $
//
// by V. Lara
//
// 18.08.2010 V.Ivanchenko make this class as a standard singleton
//
#include "G4PreCompoundParameters.hh"
#include "G4SystemOfUnits.hh"
G4PreCompoundParameters::G4PreCompoundParameters()
{
fLevelDensity = 0.10/MeV;
fR0 = 1.5*fermi;
fTransitions_r0 = 0.6*fermi;
fFermiEnergy = 35.0*MeV;
}
G4PreCompoundParameters::~G4PreCompoundParameters()
{}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PreCompoundTransitions.cc 89523 2015-04-16 09:56:35Z gcosmo $
// $Id: G4PreCompoundTransitions.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// -------------------------------------------------------------------
//
@@ -49,21 +49,21 @@
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "Randomize.hh"
#include "G4PreCompoundParameters.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4Fragment.hh"
#include "G4Proton.hh"
#include "G4Exp.hh"
#include "G4Log.hh"
static const G4double sixdpi2 = 6.0/CLHEP::pi2;
G4PreCompoundTransitions::G4PreCompoundTransitions()
{
proton = G4Proton::Proton();
G4PreCompoundParameters param;
FermiEnergy = param.GetFermiEnergy();
r0 = param.GetTransitionsr0();
aLDP = param.GetLevelDensity();
G4DeexPrecoParameters* param =
G4NuclearLevelData::GetInstance()->GetParameters() ;
FermiEnergy = param->GetFermiEnergy();
r0 = param->GetTransitionsR0();
aLDP = param->GetLevelDensity();
}
G4PreCompoundTransitions::~G4PreCompoundTransitions()
@@ -86,9 +86,11 @@ CalculateProbability(const G4Fragment & aFragment)
G4double U = aFragment.GetExcitationEnergy();
TransitionProb2 = 0.0;
TransitionProb3 = 0.0;
//G4cout << aFragment << G4endl;
/*
G4cout << "G4PreCompoundTransitions::CalculateProbability H/P/N/Z/A= "
<< H << " " << P << " " << N << " " << Z << " " << A <<G4endl;
G4cout << aFragment << G4endl;
*/
if(U < 10*eV || 0==N) { return 0.0; }
//J. M. Quesada (Feb. 08) new physics
@@ -96,6 +98,7 @@ CalculateProbability(const G4Fragment & aFragment)
// (original in G4PreCompound from VL)
// OPT=2 Transitions are calculated according to Gupta's formulae
//
static const G4double sixdpi2 = 6.0/CLHEP::pi2;
if (useCEMtr) {
// Relative Energy (T_{rel})
G4double RelativeEnergy = 1.6*FermiEnergy + U/G4double(N);
@@ -23,19 +23,19 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundEmissionFactory.cc 68028 2013-03-13 13:48:15Z gcosmo $
// $Id: G4VPreCompoundEmissionFactory.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// by V. Lara
#include "G4VPreCompoundEmissionFactory.hh"
G4VPreCompoundEmissionFactory::G4VPreCompoundEmissionFactory()
: fragvector(0)
: fragvector(nullptr)
{}
G4VPreCompoundEmissionFactory::~G4VPreCompoundEmissionFactory()
{
if (fragvector != 0)
if (fragvector != nullptr)
std::for_each(fragvector->begin(), fragvector->end(),
DeleteFragment());
delete fragvector;
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPreCompoundFragment.cc 90337 2015-05-26 08:34:27Z gcosmo $
// $Id: G4VPreCompoundFragment.cc 96603 2016-04-25 13:29:51Z gcosmo $
//
// J. M. Quesada (August 2008). Based on previous work by V. Lara
//
@@ -33,7 +33,8 @@
#include "G4VPreCompoundFragment.hh"
#include "G4SystemOfUnits.hh"
#include "G4PreCompoundParameters.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4NucleiProperties.hh"
G4VPreCompoundFragment::G4VPreCompoundFragment(
@@ -46,18 +47,16 @@ G4VPreCompoundFragment::G4VPreCompoundFragment(
theMaxKinEnergy(0.0),theResMass(0.0),
theReducedMass(0.0),
theEmissionProbability(0.0),theCoulombBarrier(0.0),
OPTxs(3),useSICB(false)
OPTxs(3),useSICB(true)
{
theMass = particle->GetPDGMass();
theParameters = new G4PreCompoundParameters();
theParameters = G4NuclearLevelData::GetInstance()->GetParameters();
g4pow = G4Pow::GetInstance();
theResA13 = 0;
theResA13 = 0.0;
}
G4VPreCompoundFragment::~G4VPreCompoundFragment()
{
delete theParameters;
}
{}
std::ostream&
operator << (std::ostream &out, const G4VPreCompoundFragment &theFragment)