81 G4double cmEnergy = std::sqrt( currentMass*currentMass +
82 targetMass*targetMass +
83 2.0*targetMass*etCurrent );
85 if (cmEnergy < 0.01) {
91 G4double pf = targetMass*pCurrent/cmEnergy;
105 pseudoParticle[0].
SetMomentum( 0.0, 0.0, pOriginal*GeV );
108 pseudoParticle[1].
SetMass( mOriginal*GeV );
114 pseudoParticle[0].
SetMomentum( 0.0, 0.0, pCurrent*GeV );
117 pseudoParticle[1].
SetMass( targetMass*GeV );
123 pseudoParticle[2] = pseudoParticle[0] + pseudoParticle[1];
124 pseudoParticle[0].
Lorentz( pseudoParticle[0], pseudoParticle[2] );
125 pseudoParticle[1].Lorentz( pseudoParticle[1], pseudoParticle[2] );
130 targetParticle.
SetTotalEnergy( std::sqrt(pf*pf+targetMass*targetMass)*GeV );
143 G4double btrang = b * 4.0 * pf * pseudoParticle[0].GetMomentum().mag()/
GeV;
147 G4double sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
156 currentParticle.
SetMomentum( -pf*sintheta*std::cos(phi)*GeV,
157 -pf*sintheta*std::sin(phi)*GeV,
161 currentParticle.
SetMomentum( pf*sintheta*std::cos(phi)*GeV,
162 pf*sintheta*std::sin(phi)*GeV,
170 currentParticle.
Lorentz( currentParticle, pseudoParticle[1] );
171 targetParticle.
Lorentz( targetParticle, pseudoParticle[1] );
175 Defs1( modifiedOriginal, currentParticle, targetParticle, vec, vecLen );
180 if( atomicWeight >= 1.5 )
182 const G4double cfa = 0.025*((atomicWeight-1.)/120.)*
G4Exp(-(atomicWeight-1.)/120.);
187 ekin =
std::max( 0.0001*GeV, ekin );
196 ekin =
std::max( 0.0001*GeV, ekin );
207 std::pair<G4int, G4int> finalStateNucleons =
209 G4int protonsInFinalState = finalStateNucleons.first;
210 G4int neutronsInFinalState = finalStateNucleons.second;
217 if( atomicWeight >= 1.5 )
227 G4int npnb=0, ndta=0;
236 if( epnb >= pnCutOff )
239 if( npnb > atomicWeight )npnb =
G4int(atomicWeight);
240 if( (epnb > pnCutOff) && (npnb <= 0) )npnb = 1;
241 npnb =
std::min( npnb, 127-vecLen );
243 if( edta >= dtaCutOff )
246 ndta =
std::min( ndta, 127-vecLen );
249 if (npnb == 0 && ndta == 0) npnb = 1;
252 PinNucleus, NinNucleus, targetNucleus,
259 if( (atomicWeight >= 1.5) && (atomicWeight <= 230.0) && (ekOriginal <= 0.2) )
262 currentParticle.
SetTOF( 1.0 );
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4bool ReactionStage(const G4HadProjectile *, G4ReactionProduct &, G4bool &, const G4DynamicParticle *, G4ReactionProduct &, G4bool &, const G4Nucleus &, G4ReactionProduct &, G4FastVector< G4ReactionProduct, 256 > &, G4int &, G4bool, G4ReactionProduct &)
void AddBlackTrackParticles(const G4double, const G4int, const G4double, const G4int, const G4ReactionProduct &, G4int, G4int, const G4Nucleus &, G4FastVector< G4ReactionProduct, 256 > &, G4int &)
static constexpr double MeV
G4double GetDTABlackTrackEnergy() const
void SetMomentum(const G4double x, const G4double y, const G4double z)
const G4String & GetParticleSubType() const
const G4ParticleDefinition * GetDefinition() const
G4double GetPDGMass() const
G4double G4Log(G4double x)
void SetTotalEnergy(const G4double en)
void SetMass(const G4double mas)
void SetTOF(const G4double t)
G4double GetTotalEnergy() const
void SetKineticEnergy(const G4double en)
G4double GetKineticEnergy() const
static constexpr double twopi
G4double GetTotalMomentum() const
G4ThreeVector GetMomentum() const
void Defs1(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct ¤tParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, 256 > &vec, G4int &vecLen)
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, 256 > &vec, const G4int &vecLen)
G4long G4Poisson(G4double mean)
G4double GetPNBlackTrackEnergy() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
static constexpr double GeV
T min(const T t1, const T t2)
brief Return the smallest of the two arguments