Import Geant4 8.3.0 source tree
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user