80 G4double cmEnergy = std::sqrt( currentMass*currentMass +
81 targetMass*targetMass +
82 2.0*targetMass*etCurrent );
84 if (cmEnergy < 0.01) {
90 G4double pf = targetMass*pCurrent/cmEnergy;
104 pseudoParticle[0].
SetMomentum( 0.0, 0.0, pOriginal*GeV );
107 pseudoParticle[1].
SetMass( mOriginal*GeV );
113 pseudoParticle[0].
SetMomentum( 0.0, 0.0, pCurrent*GeV );
116 pseudoParticle[1].
SetMass( targetMass*GeV );
122 pseudoParticle[2] = pseudoParticle[0] + pseudoParticle[1];
123 pseudoParticle[0].
Lorentz( pseudoParticle[0], pseudoParticle[2] );
124 pseudoParticle[1].Lorentz( pseudoParticle[1], pseudoParticle[2] );
129 targetParticle.
SetTotalEnergy( std::sqrt(pf*pf+targetMass*targetMass)*GeV );
142 G4double btrang = b * 4.0 * pf * pseudoParticle[0].GetMomentum().mag()/
GeV;
143 G4double exindt = std::exp(-btrang) - 1.0;
146 G4double sintheta = std::sqrt((1.0-costheta)*(1.0+costheta));
155 currentParticle.
SetMomentum( -pf*sintheta*std::cos(phi)*GeV,
156 -pf*sintheta*std::sin(phi)*GeV,
160 currentParticle.
SetMomentum( pf*sintheta*std::cos(phi)*GeV,
161 pf*sintheta*std::sin(phi)*GeV,
169 currentParticle.
Lorentz( currentParticle, pseudoParticle[1] );
170 targetParticle.
Lorentz( targetParticle, pseudoParticle[1] );
174 Defs1( modifiedOriginal, currentParticle, targetParticle, vec, vecLen );
179 if( atomicWeight >= 1.5 )
181 const G4double cfa = 0.025*((atomicWeight-1.)/120.)*std::exp(-(atomicWeight-1.)/120.);
186 ekin =
std::max( 0.0001*GeV, ekin );
195 ekin =
std::max( 0.0001*GeV, ekin );
206 std::pair<G4int, G4int> finalStateNucleons =
208 G4int protonsInFinalState = finalStateNucleons.first;
209 G4int neutronsInFinalState = finalStateNucleons.second;
216 if( atomicWeight >= 1.5 )
226 G4int npnb=0, ndta=0;
235 if( epnb >= pnCutOff )
238 if( npnb > atomicWeight )npnb =
G4int(atomicWeight);
239 if( (epnb > pnCutOff) && (npnb <= 0) )npnb = 1;
240 npnb =
std::min( npnb, 127-vecLen );
242 if( edta >= dtaCutOff )
244 ndta =
G4int(2.0 * std::log(atomicWeight));
245 ndta =
std::min( ndta, 127-vecLen );
248 if (npnb == 0 && ndta == 0) npnb = 1;
251 PinNucleus, NinNucleus, targetNucleus,
258 if( (atomicWeight >= 1.5) && (atomicWeight <= 230.0) && (ekOriginal <= 0.2) )
261 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
G4ParticleDefinition * GetDefinition() const
std::pair< G4int, G4int > GetFinalStateNucleons(const G4DynamicParticle *originalTarget, const G4FastVector< G4ReactionProduct, 256 > &vec, const G4int &vecLen)
void SetMass(const G4double mas)
void SetTotalEnergy(const G4double en)
G4double GetKineticEnergy() const
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
G4ThreeVector GetMomentum() const
void AddBlackTrackParticles(const G4double, const G4int, const G4double, const G4int, const G4ReactionProduct &, G4int, G4int, const G4Nucleus &, G4FastVector< G4ReactionProduct, 256 > &, G4int &)
void SetTOF(const G4double t)
G4double GetPNBlackTrackEnergy() const