131 using namespace G4InuclParticleNames;
132 using namespace G4InuclSpecialFunctions;
139 nucleusA(0), nucleusZ(0) {;}
148 G4cout <<
" >>> G4ElementaryParticleCollider::collide" <<
G4endl;
151 G4cerr <<
" ElementaryParticleCollider -> can collide only particle with particle "
156 #ifdef G4CASCADE_DEBUG_SAMPLER
157 static G4bool doPrintTables =
true;
160 doPrintTables =
false;
173 if (!particle1 || !particle2) {
174 G4cerr <<
" ElementaryParticleCollider -> can only collide hadrons"
184 G4cerr <<
" ElementaryParticleCollider -> cannot collide "
220 G4cerr <<
" ElementaryParticleCollider -> can only collide pi,mu,gamma with"
221 <<
" dibaryons " <<
G4endl;
234 G4cerr <<
" ElementaryParticleCollider -> failed to collide "
247 ipart->setMomentum(mom);
260 G4int finalBaryonNumber = 0;
261 G4int finalCharge = 0;
262 G4int finalStrangeness = 0;
265 finalBaryonNumber += ipart->baryon();
266 finalCharge += ipart->getCharge();
267 finalStrangeness += ipart->getStrangeness();
270 G4int bnc = finalBaryonNumber - initBaryonNumber;
271 G4int cnc = finalCharge - initCharge;
272 G4int snc = finalStrangeness - initStrangeness;
274 if (bnc != 0 || cnc != 0 || snc != 0) {
275 G4cout <<
" G4ElementaryParticleCollider: quantum number non-conservation " <<
G4endl;
276 G4cout <<
" Baryon number: initial = " << initBaryonNumber <<
", final = "
277 << finalBaryonNumber <<
G4endl;
278 G4cout <<
" Charge: initial = " << initCharge <<
", final = "
280 G4cout <<
" Strangeness: initial = " << initStrangeness <<
", final = "
281 << finalStrangeness <<
G4endl;
285 G4cout <<
" secondaries = " ;
287 G4cout << ipart->getDefinition()->GetParticleName() <<
" " ;
294 G4cout <<
" incoming particles: \n" << *particle1 << G4endl
295 << *particle2 << G4endl
296 <<
" outgoing particles: " <<
G4endl;
298 G4cout << *ipart << G4endl;
300 G4cout <<
" <<< Non-conservation in G4ElementaryParticleCollider"
319 G4cerr <<
" G4ElementaryParticleCollider: Unknown interaction channel "
320 << is <<
" - multiplicity not generated " <<
G4endl;
324 G4cout <<
" G4ElementaryParticleCollider::generateMultiplicity: "
325 <<
" multiplicity = " << mul <<
G4endl;
343 G4cerr <<
" G4ElementaryParticleCollider: Unknown interaction channel "
344 << is <<
" - outgoing kinds not generated " <<
G4endl;
357 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMfinalState"
363 const G4int itry_max = 10;
368 G4int is = type1 * type2;
372 G4int multiplicity = 0;
376 while (generate && itry++ < itry_max) {
386 G4cout <<
" generateOutgoingPartTypes failed mult " << multiplicity
399 if (itry >= itry_max) {
401 G4cout <<
" generateSCMfinalState failed " << itry <<
" attempts"
409 for (
G4int i=0; i<multiplicity; i++) {
415 G4cout <<
" <<< G4ElementaryParticleCollider::generateSCMfinalState"
431 for (
G4int i = 0; i < mult; i++) {
447 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMpionAbsorption"
462 }
else if (typeProduct ==
pim*diproton || typeProduct ==
pip*
dineutron ||
467 }
else if (typeProduct ==
pi0*
dineutron || typeProduct ==
pim*unboundPN ||
473 G4cerr <<
" Illegal absorption: "
485 / (etot_scm*etot_scm) );
504 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMmuonAbsorption"
524 G4cerr <<
" Illegal absorption: "
538 if (theMomenta.empty()) {
539 G4cerr <<
" generateSCMmuonAbsorption: GetThreeBodyMomenta() failed"
540 <<
" for " << particle2->
type() <<
" dibaryon" <<
G4endl;
547 for (
size_t i=0; i<3; i++) {
561 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMpionNAbsorption"
573 if ((type1*type2 !=
pim*
pro && type1*type2 !=
pip*
neu)) {
574 G4cerr <<
" pion-nucleon absorption: "
584 G4int outType = 3 - ntype;
592 G4double mRecoil2 = mRecoil*mRecoil;
607 G4cout <<
" outgoing type " << outType <<
" recoiling on nuclear mass "
608 << mRecoil <<
"\n a " << a <<
" p " << pmod <<
" Ekin "
615 G4cout <<
" in original pi-N frame p(SCM) " << mom1.
rho() <<
" Ekin "
628 G4cout <<
" >>> G4ElementaryParticleCollider::pionNucleonAbsorption ?"