68 excTolerance(tolerance), inputEkin(0.),
69 recoilA(0), recoilZ(0), excitationEnergy(0.) {
84 G4cout <<
" >>> G4CascadeRecoilMaker::collide" <<
G4endl;
90 balance->
collide(bullet, target, output);
99 const std::vector<G4CascadParticle>& cparticles) {
101 G4cout <<
" >>> G4CascadeRecoilMaker::collide(<EP>,<CP>)" <<
G4endl;
107 balance->
collide(bullet, target, output, cparticles);
116 recoilZ = -(balance->
deltaQ());
117 recoilA = -(balance->
deltaB());
118 recoilMomentum = -(balance->
deltaLV());
124 else excitationEnergy =
deltaM() * GeV;
127 if (std::abs(excitationEnergy) < excTolerance) excitationEnergy = 0.;
130 G4cout <<
" recoil px " << recoilMomentum.
px()
131 <<
" py " << recoilMomentum.
py() <<
" pz " << recoilMomentum.
pz()
132 <<
" E " << recoilMomentum.
e() <<
" baryon " << recoilA
133 <<
" charge " << recoilZ
134 <<
"\n recoil mass " << recoilMomentum.
m()
135 <<
" 'excitation' energy " << excitationEnergy <<
G4endl;
145 G4cout <<
" >>> G4CascadeRecoilMaker::makeRecoilNuclei" <<
G4endl;
154 theRecoilNuclei.
fill(recoilMomentum, recoilA, recoilZ,
155 excitationEnergy, model);
158 return &theRecoilNuclei;
166 G4cout <<
" >>> G4CascadeRecoilMaker::makeRecoilFragment" <<
G4endl;
194 return &theRecoilFragment;
202 return (recoilMomentum.
m() - nucMass);
209 return (recoilA>0 && recoilZ>=0 && recoilA >= recoilZ);
213 return (
goodFragment() && excitationEnergy > -excTolerance);
218 G4cout <<
" >>> G4CascadeRecoilMaker::wholeEvent:"
219 <<
" A " << recoilA <<
" Z " << recoilZ
220 <<
" P " << recoilMomentum.
rho() <<
" E " << recoilMomentum.
e()
221 <<
"\n wholeEvent returns "
222 << (recoilA==0 && recoilZ==0 &&
223 recoilMomentum.
rho() < excTolerance/GeV &&
224 std::abs(recoilMomentum.
e()) < excTolerance/GeV) <<
G4endl;
227 return (recoilA==0 && recoilZ==0 &&
228 recoilMomentum.
rho() < excTolerance/GeV &&
229 std::abs(recoilMomentum.
e()) < excTolerance/GeV);
236 G4cout <<
" >>> G4CascadeRecoilMaker::goodNucleus" <<
G4endl;
239 const G4double minExcitation = 0.1*keV;
240 const G4double reasonableExcitation = 7.0;
241 const G4double fractionalExcitation = 0.2;
246 else if (excitationEnergy < -excTolerance)
247 G4cerr <<
" goodNucleus: negative excitation" <<
G4endl;
252 if (excitationEnergy <= minExcitation)
return true;
256 G4double exc_max0z = fractionalExcitation * inputEkin*GeV;
257 G4double exc_dm = reasonableExcitation * dm;
258 G4double exc_max = (exc_max0z > exc_dm) ? exc_max0z : exc_dm;
261 G4cout <<
" eexs " << excitationEnergy <<
" max " << exc_max
262 <<
" dm " << dm <<
G4endl;
266 G4cerr <<
" goodNucleus: too much excitation" <<
G4endl;
268 return (excitationEnergy < exc_max);
G4GLOB_DLL std::ostream G4cerr
G4GLOB_DLL std::ostream G4cout
void setVectM(const Hep3Vector &spatial, double mass)
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4LorentzVector deltaLV() const
G4bool wholeEvent() const
virtual ~G4CascadeRecoilMaker()
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
G4bool goodNucleus() const
G4InuclNuclei * makeRecoilNuclei(G4InuclParticle::Model model=G4InuclParticle::DefaultModel)
G4Fragment * makeRecoilFragment()
G4bool goodRecoil() const
G4bool goodFragment() const
G4CascadeRecoilMaker(G4double tolerance=0.001 *CLHEP::MeV)
G4int neutronQuasiParticles
G4int protonQuasiParticles
void SetZandA_asInt(G4int Znew, G4int Anew, G4int Lnew=0)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
void SetMomentum(const G4LorentzVector &value)
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
void setExitonConfiguration(const G4ExitonConfiguration &config)
G4double getNucleiMass() const
void fill(G4int a, G4int z, G4double exc=0., Model model=DefaultModel)
G4double getKineticEnergy() const
virtual void setVerboseLevel(G4int verbose=0)
G4double bindingEnergy(G4int A, G4int Z)