53 lowestEnergyLimit= 1.e-6*eV;
69 outFile <<
"G4HadronElastic is the base class for all hadron-nucleus\n"
70 <<
"elastic scattering models except HP.\n"
71 <<
"By default it uses the Gheisha two-exponential momentum\n"
72 <<
"transfer parameterization. The model is fully relativistic\n"
73 <<
"as opposed to the original Gheisha model which was not.\n"
74 <<
"This model may be used for all long-lived hadrons at all\n"
75 <<
"incident energies but fit the data only for relativistic scattering.\n";
87 if(ekin <= lowestEnergyLimit) {
99 G4double plab = std::sqrt(ekin*(ekin + 2.0*m1));
102 G4cout <<
"G4HadronElastic: "
104 <<
" Plab(GeV/c)= " << plab/GeV
105 <<
" Ekin(MeV) = " << ekin/MeV
106 <<
" scattered off Z= " << Z
115 G4double momentumCMS = plab*mass2/std::sqrt(m1*m1 + mass2*mass2 + 2.*mass2*e1);
131 <<
" ekin=" << ekin <<
" MeV"
132 <<
" off (Z,A)=(" << Z <<
"," <<
A <<
") - will be resampled" <<
G4endl;
143 if (cost > 1.0) { cost = 1.0; }
144 else if(cost < -1.0) { cost = -1.0; }
146 G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
150 <<
" Pcms(GeV)= " << momentumCMS/GeV <<
" cos(t)=" << cost
151 <<
" sin(t)=" << sint <<
G4endl;
154 momentumCMS*sint*std::sin(phi),
156 std::sqrt(momentumCMS*momentumCMS + m1*m1));
162 G4cout <<
"G4HadronElastic: m= " << m1 <<
" Efin(MeV)= " << eFinal
163 <<
" 4-M Final: " << nlv1
175 G4double erec = std::max(lv.
e() - mass2, 0.0);
177 G4cout <<
"Recoil: " <<
" m= " << mass2 <<
" Erec(MeV)= " << erec
185 if(Z == 1 &&
A == 1) { theDef = theProton; }
186 else if (Z == 1 &&
A == 2) { theDef = theDeuteron; }
188 else if (Z == 2 &&
A == 3) { theDef =
G4He3::He3(); }
189 else if (Z == 2 &&
A == 4) { theDef = theAlpha; }
208 const G4double plabLowLimit = 400.0*CLHEP::MeV;
210 const G4double z07in13 = std::pow(0.7, 0.3333333333);
220 if(mom >= plabLowLimit){
221 bb = 14.5*g4pow->
Z23(
A);
223 cc = 0.075*g4pow->
Z13(
A)/dd;
227 bb = 29.*z07in13*z07in13*g4pow->
Z23(
A);
229 cc = 0.04*g4pow->
Z13(
A)/dd;
230 aa = g4pow->
powZ(
A, 1.63)/bb;
233 bb = 14.5*g4pow->
Z23(
A);
236 cc = 1.4*g4pow->
Z13(
A)/dd;
241 if(mom >= plabLowLimit){
242 bb = 60.*z07in13*g4pow->
Z13(
A);
245 cc = 4.*g4pow->
powZ(
A,0.4)/dd;
247 bb = 120.*z07in13*g4pow->
Z13(
A);
249 aa = 2.*g4pow->
powZ(
A,1.33)/bb;
250 cc = 4.*g4pow->
powZ(
A,0.4)/dd;
253 bb = 60.*g4pow->
Z13(
A);
255 aa = g4pow->
powZ(
A,1.33)/bb;
256 cc = 0.2*g4pow->
powZ(
A,0.4)/dd;
283 static const G4double lBarCof1S = 0.88;
284 static const G4double lBarCof2S = 0.76;
285 static const G4double lBarCof3S = 0.64;
286 static const G4double lBarCof1C = 0.784378;
287 static const G4double lBarCofSC = 0.664378;
288 static const G4double lBarCof2SC = 0.544378;
289 static const G4double lBarCof1B = 0.740659;
290 static const G4double lBarCofSB = 0.620659;
291 static const G4double lBarCof2SB = 0.500659;
293 if( pdg == 3122 || pdg == 3222 || pdg == 3112 || pdg == 3212 )
297 }
else if( pdg == 3322 || pdg == 3312 )
301 else if( pdg == 3324)
305 else if( pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 4112 )
309 else if( pdg == 4332 )
313 else if( pdg == 4232 || pdg == 4132 )
317 else if( pdg == 5122 || pdg == 5222 || pdg == 5112 || pdg == 5212 )
321 else if( pdg == 5332 )
325 else if( pdg == 5132 || pdg == 5232 )
330 static const G4double lMesCof1S = 0.82;
331 static const G4double llMesCof1C = 0.676568;
332 static const G4double llMesCof1B = 0.610989;
333 static const G4double llMesCof2C = 0.353135;
334 static const G4double llMesCof2B = 0.221978;
335 static const G4double llMesCofSC = 0.496568;
336 static const G4double llMesCofSB = 0.430989;
337 static const G4double llMesCofCB = 0.287557;
338 static const G4double llMesCofEtaP = 0.88;
339 static const G4double llMesCofEta = 0.76;
341 if( pdg == 321 || pdg == 311 || pdg == 310 )
345 else if( pdg == 511 || pdg == 521 )
349 else if(pdg == 421 || pdg == 411 )
353 else if( pdg == 531 )
357 else if( pdg == 541 )
365 else if(pdg == 441 || pdg == 443 )
379 coeff = llMesCofEtaP;
double A(double temperature)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double G4Log(G4double x)
G4GLOB_DLL std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
static G4Deuteron * Deuteron()
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
void SetLocalEnergyDeposit(G4double aE)
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
~G4HadronElastic() override
void ModelDescription(std::ostream &) const override
G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int Z, G4int A) override
G4double GetSlopeCof(const G4int pdg)
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus) override
G4HadronElastic(const G4String &name="hElasticLHEP")
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
G4double GetRecoilEnergyThreshold() const
const G4String & GetModelName() const
void SetMaxEnergy(const G4double anEnergy)
G4double GetMaxEnergy() const
static G4HadronicParameters * Instance()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4Neutron * Neutron()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetPDGMass() const
G4int GetPDGEncoding() const
const G4String & GetParticleName() const
G4IonTable * GetIonTable() const
static G4ParticleTable * GetParticleTable()
static G4Pow * GetInstance()
G4double powZ(G4int Z, G4double y) const
G4double Z13(G4int Z) const
G4double Z23(G4int Z) const
static G4Proton * Proton()
static G4Triton * Triton()