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 );
G4long G4Poisson(G4double mean)
G4double GetTotalMomentum() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
void Defs1(const G4ReactionProduct &modifiedOriginal, G4ReactionProduct ¤tParticle, G4ReactionProduct &targetParticle, G4FastVector< G4ReactionProduct, 256 > &vec, G4int &vecLen)
void SetKineticEnergy(const G4double en)
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4double GetDTABlackTrackEnergy() const
const G4String & GetParticleSubType() const
static constexpr double twopi
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, 256 > &vec, const G4int &vecLen)
const G4ParticleDefinition * GetDefinition() const
void SetMass(const G4double mas)
void SetTotalEnergy(const G4double en)
G4double GetKineticEnergy() const
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4double GetTotalEnergy() const
G4double GetPDGMass() const
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 &)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
static constexpr double GeV
G4ThreeVector GetMomentum() const
void AddBlackTrackParticles(const G4double, const G4int, const G4double, const G4int, const G4ReactionProduct &, G4int, G4int, const G4Nucleus &, G4FastVector< G4ReactionProduct, 256 > &, G4int &)
static constexpr double MeV
void SetTOF(const G4double t)
G4double GetPNBlackTrackEnergy() const