39const G4double G4XNNElasticLowE::_lowLimit = 0.;
40const G4double G4XNNElasticLowE::_highLimit = 3.*GeV;
44const G4double G4XNNElasticLowE::_eMinTable = 1.8964808;
45const G4double G4XNNElasticLowE::_eStepLog = 0.01;
50const G4int G4XNNElasticLowE::tableSize = 101;
52const G4double G4XNNElasticLowE::ppTable[101] =
55 33.48, 26.76, 25.26, 24.55, 23.94, 23.77, 23.72, 23.98,
56 25.48, 27.52, 27.72, 27.21, 25.80, 26.00, 24.32, 23.81,
57 24.37, 24.36, 23.13, 22.43, 21.71, 21.01, 20.83, 20.74,
58 20.25, 20.10, 20.59, 20.04, 20.83, 20.84, 21.07, 20.83,
59 20.79, 21.88, 21.15, 20.92, 19.00, 18.60, 17.30, 17.00,
60 16.70, 16.50, 16.20, 15.80, 15.57, 15.20, 15.00, 14.60,
61 14.20, 14.00, 13.80, 13.60, 13.40, 13.20, 13.00, 12.85,
62 12.70, 12.60, 12.50, 12.40, 12.30, 12.20, 12.10, 12.00,
63 11.90, 11.80, 11.75, 11.70, 11.64, 11.53, 11.41, 11.31,
64 11.22, 11.13, 11.05, 10.97, 10.89, 10.82, 10.75, 10.68,
65 10.61, 10.54, 10.48, 10.41, 10.35, 10.28, 10.22, 10.16,
66 10.13, 10.10, 10.08, 10.05, 10.02, 9.99, 9.96, 9.93,
67 9.90, 9.87, 9.84, 9.80
70const G4double G4XNNElasticLowE::npTable[101] =
73 248.20, 93.38, 55.26, 44.50, 41.33, 38.48, 37.20, 35.98,
74 35.02, 34.47, 32.48, 30.76, 29.46, 28.53, 27.84, 27.20,
75 26.53, 25.95, 25.59, 25.46, 25.00, 24.49, 24.08, 23.86,
76 23.17, 22.70, 21.88, 21.48, 20.22, 19.75, 18.97, 18.39,
77 17.98, 17.63, 17.21, 16.72, 16.68, 16.58, 16.42, 16.22,
78 15.98, 15.71, 15.42, 15.14, 14.87, 14.65, 14.44, 14.26,
79 14.10, 13.95, 13.80, 13.64, 13.47, 13.29, 13.09, 12.89,
80 12.68, 12.47, 12.27, 12.06, 11.84, 11.76, 11.69, 11.60,
81 11.50, 11.41, 11.29, 11.17, 11.06, 10.93, 10.81, 10.68,
82 10.56, 10.44, 10.33, 10.21, 10.12, 10.03, 9.96, 9.89,
83 9.83, 9.80, 9.77, 9.75, 9.74, 9.74, 9.74, 9.76,
84 9.73, 9.70, 9.68, 9.65, 9.63, 9.60, 9.57, 9.55,
85 9.52, 9.49, 9.46, 9.43
93 _eMin = _eMinTable * GeV;
94 _eMax =
G4Exp(
G4Log(_eMinTable) + tableSize * _eStepLog) * GeV;
95 if (_eMin < _lowLimit)
96 throw G4HadronicException(__FILE__, __LINE__,
"G4XNNElasticLowE::G4XNNElasticLowE - Low energy limit not valid");
97 if (_highLimit > _eMax)
98 throw G4HadronicException(__FILE__, __LINE__,
"G4XNNElasticLowE::G4XNNElasticLowE - High energy limit not valid");
101 _eMin =
G4Exp(
G4Log(_eMinTable)-_eStepLog)*GeV;
102 if (_eMin < _lowLimit)
103 throw G4HadronicException(__FILE__, __LINE__,
"G4XNNElasticLowE::G4XNNElasticLowE - Low energy limit not valid");
107 for (i=0; i<tableSize; i++)
109 G4double value = ppTable[i] * millibarn;
110 pp->PutValue(i,value);
111 value = npTable[i] * millibarn;
147 typedef std::map <const G4ParticleDefinition *, G4PhysicsVector*, std::less<const G4ParticleDefinition *> > StringPhysMap;
149 if (xMap.find(key)!= xMap.end())
152 StringPhysMap::const_iterator iter;
153 for (iter = xMap.begin(); iter != xMap.end(); ++iter)
160 if (sqrtS >= _eMin && sqrtS <= _eMax)
162 sigma = physVector->
GetValue(sqrtS,dummy);
163 }
else if ( sqrtS < _eMin )
165 sigma = physVector->
GetValue(_eMin,dummy);
187 typedef std::map <const G4ParticleDefinition *, G4PhysicsVector*, std::less<const G4ParticleDefinition *> > StringPhysMap;
188 StringPhysMap::const_iterator iter;
190 for (iter = xMap.begin(); iter != xMap.end(); ++iter)
201 for (i=0; i<tableSize; i++)
203 G4double e = pp->GetLowEdgeEnergy(i);
204 G4double sigma = pp->GetValue(e,dummy) / millibarn;
205 G4cout << i <<
") e = " << e / GeV <<
" GeV ---- Cross section = " << sigma <<
" mb " <<
G4endl;
215 for (iter = xMap.begin(); iter != xMap.end(); ++iter)
228 for (i=0; i<tableSize; i++)
232 G4cout << i <<
") e = " << e / GeV <<
" GeV ---- Cross section = " << sigma <<
" mb " <<
G4endl;
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
G4PhysicsLogVector G4PhysicsLnVector
G4GLOB_DLL std::ostream G4cout
const G4LorentzVector & Get4Momentum() const
static G4Neutron * NeutronDefinition()
G4double GetLowEdgeEnergy(std::size_t binNumber) const
void PutValue(std::size_t index, G4double theValue)
G4double GetValue(G4double theEnergy, G4bool &isOutRange) const
static G4Proton * ProtonDefinition()
G4bool InLimits(G4double e, G4double eLow, G4double eHigh) const
virtual void Print() const
const G4ParticleDefinition * FindKeyParticle(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
virtual G4double CrossSection(const G4KineticTrack &trk1, const G4KineticTrack &trk2) const
G4bool operator==(const G4XNNElasticLowE &right) const
G4bool operator!=(const G4XNNElasticLowE &right) const
virtual ~G4XNNElasticLowE()
virtual G4String Name() const
virtual void Print() const
virtual G4bool IsValid(G4double e) const