54 lowestEnergyLimit= 1.e-6*eV;
72 outFile <<
"G4HadronElastic is the base class for all hadron-nucleus\n"
73 <<
"elastic scattering models except HP.\n"
74 <<
"By default it uses the Gheisha two-exponential momentum\n"
75 <<
"transfer parameterization. The model is fully relativistic\n"
76 <<
"as opposed to the original Gheisha model which was not.\n"
77 <<
"This model may be used for all long-lived hadrons at all\n"
78 <<
"incident energies but fit the data only for relativistic scattering.\n";
90 if(ekin <= lowestEnergyLimit) {
102 G4double plab = std::sqrt(ekin*(ekin + 2.0*m1));
105 G4cout <<
"G4HadronElastic: "
107 <<
" Plab(GeV/c)= " << plab/GeV
108 <<
" Ekin(MeV) = " << ekin/MeV
109 <<
" scattered off Z= " << Z
118 G4double momentumCMS = plab*mass2/std::sqrt(m1*m1 + mass2*mass2 + 2.*mass2*e1);
134 <<
" ekin=" << ekin <<
" MeV"
135 <<
" off (Z,A)=(" << Z <<
"," <<
A <<
") - will be resampled" <<
G4endl;
146 if (cost > 1.0) { cost = 1.0; }
147 else if(cost < -1.0) { cost = -1.0; }
149 G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
153 <<
" Pcms(GeV)= " << momentumCMS/GeV <<
" cos(t)=" << cost
154 <<
" sin(t)=" << sint <<
G4endl;
157 momentumCMS*sint*std::sin(phi),
159 std::sqrt(momentumCMS*momentumCMS + m1*m1));
165 G4cout <<
"G4HadronElastic: m= " << m1 <<
" Efin(MeV)= " << eFinal
166 <<
" 4-M Final: " << nlv1
178 G4double erec = std::max(lv.
e() - mass2, 0.0);
180 G4cout <<
"Recoil: " <<
" m= " << mass2 <<
" Erec(MeV)= " << erec
188 if(Z == 1 &&
A == 1) { theDef = theProton; }
189 else if (Z == 1 &&
A == 2) { theDef = theDeuteron; }
191 else if (Z == 2 &&
A == 3) { theDef =
G4He3::He3(); }
192 else if (Z == 2 &&
A == 4) { theDef = theAlpha; }
211 const G4double plabLowLimit = 400.0*CLHEP::MeV;
213 const G4double z07in13 = std::pow(0.7, 0.3333333333);
223 if(mom >= plabLowLimit){
224 bb = 14.5*g4pow->
Z23(
A);
226 cc = 0.075*g4pow->
Z13(
A)/dd;
230 bb = 29.*z07in13*z07in13*g4pow->
Z23(
A);
232 cc = 0.04*g4pow->
Z13(
A)/dd;
233 aa = g4pow->
powZ(
A, 1.63)/bb;
236 bb = 14.5*g4pow->
Z23(
A);
239 cc = 1.4*g4pow->
Z13(
A)/dd;
244 if(mom >= plabLowLimit){
245 bb = 60.*z07in13*g4pow->
Z13(
A);
248 cc = 4.*g4pow->
powZ(
A,0.4)/dd;
250 bb = 120.*z07in13*g4pow->
Z13(
A);
252 aa = 2.*g4pow->
powZ(
A,1.33)/bb;
253 cc = 4.*g4pow->
powZ(
A,0.4)/dd;
256 bb = 60.*g4pow->
Z13(
A);
258 aa = g4pow->
powZ(
A,1.33)/bb;
259 cc = 0.2*g4pow->
powZ(
A,0.4)/dd;
286 static const G4double lBarCof1S = 0.88;
287 static const G4double lBarCof2S = 0.76;
288 static const G4double lBarCof3S = 0.64;
289 static const G4double lBarCof1C = 0.784378;
290 static const G4double lBarCofSC = 0.664378;
291 static const G4double lBarCof2SC = 0.544378;
292 static const G4double lBarCof1B = 0.740659;
293 static const G4double lBarCofSB = 0.620659;
294 static const G4double lBarCof2SB = 0.500659;
296 if( pdg == 3122 || pdg == 3222 || pdg == 3112 || pdg == 3212 )
300 }
else if( pdg == 3322 || pdg == 3312 )
304 else if( pdg == 3324)
308 else if( pdg == 4122 || pdg == 4212 || pdg == 4222 || pdg == 4112 )
312 else if( pdg == 4332 )
316 else if( pdg == 4232 || pdg == 4132 )
320 else if( pdg == 5122 || pdg == 5222 || pdg == 5112 || pdg == 5212 )
324 else if( pdg == 5332 )
328 else if( pdg == 5132 || pdg == 5232 )
333 static const G4double lMesCof1S = 0.82;
334 static const G4double llMesCof1C = 0.676568;
335 static const G4double llMesCof1B = 0.610989;
336 static const G4double llMesCof2C = 0.353135;
337 static const G4double llMesCof2B = 0.221978;
338 static const G4double llMesCofSC = 0.496568;
339 static const G4double llMesCofSB = 0.430989;
340 static const G4double llMesCofCB = 0.287557;
341 static const G4double llMesCofEtaP = 0.88;
342 static const G4double llMesCofEta = 0.76;
344 if( pdg == 321 || pdg == 311 || pdg == 310 )
348 else if( pdg == 511 || pdg == 521 )
352 else if(pdg == 421 || pdg == 411 )
356 else if( pdg == 531 )
360 else if( pdg == 541 )
368 else if(pdg == 441 || pdg == 443 )
382 coeff = llMesCofEtaP;
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 G4int GetModelID(const G4int modelIndex)
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()