Import Geant4 8.3.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 15:07:44 +02:00
parent fe73f43734
commit 75c7fd177d
764 changed files with 45230 additions and 95238 deletions
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElastic.cc,v 1.39 2006/11/23 14:51:30 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-02 $
// $Id: G4HadronElastic.cc,v 1.48 2007/05/05 18:45:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-08-03 $
//
//
// Physics model class G4HadronElastic (derived from G4LElastic)
@@ -55,6 +55,11 @@
// 31-Aug-06 V.Ivanchenko do not sample sacttering for particles with kinetic
// energy below 10 keV
// 16-Nov-06 V.Ivanchenko Simplify logic of choosing of the model for sampling
// 30-Mar-07 V.Ivanchenko lowEnergyLimitQ=0, lowEnergyLimitHE = 1.0*GeV,
// lowestEnergyLimit= 0
// 04-May-07 V.Ivanchenko do not use HE model for hydrogen target to avoid NaN;
// use QElastic for p, n incident for any energy for
// p and He targets only
//
#include "G4HadronElastic.hh"
@@ -71,21 +76,22 @@
#include "G4Alpha.hh"
#include "G4PionPlus.hh"
#include "G4PionMinus.hh"
#include "G4NistManager.hh"
G4HadronElastic::G4HadronElastic(G4double, G4double, G4double)
G4HadronElastic::G4HadronElastic()
: G4HadronicInteraction()
{
SetMinEnergy( 0.0*GeV );
SetMaxEnergy( 100.*TeV );
verboseLevel= 0;
lowEnergyRecoilLimit = 100.*keV;
lowEnergyLimitQ = 19.0*MeV;
lowEnergyLimitHE = 0.4*GeV;
lowEnergyLimitHE = DBL_MAX;
lowestEnergyLimit= 10.0*keV;
lowEnergyLimitQ = 0.0*GeV;
lowEnergyLimitHE = 1.0*GeV;
lowestEnergyLimit= 0.0*keV;
plabLowLimit = 20.0*MeV;
qCManager = G4QElasticCrossSection::GetPointer();
nistManager = G4NistManager::Instance();
hElastic = new G4ElasticHadrNucleusHE();
theProton = G4Proton::Proton();
@@ -138,8 +144,8 @@ G4HadFinalState* G4HadronElastic::ApplyYourself(
const G4ParticleDefinition* theParticle = aParticle->GetDefinition();
G4double m1 = theParticle->GetPDGMass();
G4int Z = static_cast<G4int>(zTarget);
G4int A = static_cast<G4int>(aTarget);
G4int Z = static_cast<G4int>(zTarget+0.5);
G4int A = static_cast<G4int>(aTarget+0.5);
G4int N = A - Z;
G4int projPDG = theParticle->GetPDGEncoding();
if (verboseLevel>1)
@@ -174,15 +180,16 @@ G4HadFinalState* G4HadronElastic::ApplyYourself(
G4ElasticGenerator gtype = fLElastic;
// Q-elastic for p,n scattering on H and He
if ((theParticle == theProton || theParticle == theNeutron)
&& Z <= 2 && ekin >= lowEnergyLimitQ)
if ((theParticle == theProton || theParticle == theNeutron)
&& Z <= 2 && ekin >= lowEnergyLimitQ)
gtype = fQElastic;
// HE-elastic for energetic projectiles
else if(ekin >= lowEnergyLimitHE && A < 238)
gtype = fHElastic;
// S-wave for very low energy
else if(plab < plabLowLimit) gtype = fSWave;
else {
// S-wave for very low energy
if(plab < plabLowLimit) gtype = fSWave;
// HE-elastic for energetic projectiles
else if(ekin >= lowEnergyLimitHE && A < 238 && Z>= 2) gtype = fHElastic;
}
//
// Sample t
@@ -195,8 +202,11 @@ G4HadFinalState* G4HadronElastic::ApplyYourself(
if(Z == 1 && N == 2) N = 1;
else if(Z == 2 && N == 1) N = 2;
G4double cs = qCManager->GetCrossSection(false,plab,Z,N,projPDG);
// check if cross section is reasonable
if(cs > 0.0) t = qCManager->GetExchangeT(Z,N,projPDG);
else gtype = fLElastic;
else if(plab > plabLowLimit) gtype = fLElastic;
else gtype = fSWave;
}
if(gtype == fLElastic) {
@@ -204,8 +214,10 @@ G4HadFinalState* G4HadronElastic::ApplyYourself(
if(t > tmax) gtype = fSWave;
}
// use mean atomic number
if(gtype == fHElastic) {
t = hElastic->SampleT(theParticle,plab,Z,A);
G4int A0 = static_cast<G4int>(nistManager->GetAtomicMassAmu(Z)+0.5);
t = hElastic->SampleT(theParticle,plab,Z,A0);
if(t > tmax) gtype = fSWave;
}