Check again the distance of approach. In order for the avatar to be realised, we have to perform a check in the CM system. We define a distance four-vector as
with a non-zero time component (the collision happens simultaneously for the two particles in the lab system, but not in the CM system). In order for the avatar to be realised, we require that
108 if(energyCM2 < cutNNSquared) {
109 INCL_DEBUG(
"CM energy = sqrt(" << energyCM2 <<
") MeV < std::sqrt(" << cutNNSquared
110 <<
") MeV = cutNN" <<
"; returning a NULL channel" <<
'\n');
139 if(minDist > theCrossSection) {
140 INCL_DEBUG(
"CM distance of approach is too small: " << minDist <<
">" <<
141 theCrossSection <<
"; returning a NULL channel" <<
'\n');
170 if(elasticCX > rChannel) {
173 INCL_DEBUG(
"NN interaction: elastic channel chosen" <<
'\n');
175 }
else if((elasticCX + deltaProductionCX) > rChannel) {
178 INCL_DEBUG(
"NN interaction: Delta channel chosen" <<
'\n');
180 }
else if(elasticCX + deltaProductionCX + onePiProductionCX > rChannel) {
183 INCL_DEBUG(
"NN interaction: one Pion channel chosen" <<
'\n');
185 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX > rChannel) {
188 INCL_DEBUG(
"NN interaction: two Pions channel chosen" <<
'\n');
190 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX > rChannel) {
193 INCL_DEBUG(
"NN interaction: three Pions channel chosen" <<
'\n');
195 }
else if (elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX > rChannel) {
198 INCL_DEBUG(
"NN interaction: four Pions channel chosen" <<
'\n');
200 }
else if (elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX > rChannel) {
203 INCL_DEBUG(
"NN interaction: Eta channel chosen" <<
'\n');
205 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX > rChannel) {
208 INCL_DEBUG(
"NN interaction: Delta Eta channel chosen" <<
'\n');
210 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX > rChannel) {
213 INCL_DEBUG(
"NN interaction: Eta + one Pion channel chosen" <<
'\n');
215 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX > rChannel) {
218 INCL_DEBUG(
"NN interaction: Eta + two Pions channel chosen" <<
'\n');
220 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX > rChannel) {
223 INCL_DEBUG(
"NN interaction: Eta + three Pions channel chosen" <<
'\n');
225 }
else if (elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX > rChannel) {
228 INCL_DEBUG(
"NN interaction: Eta + four Pions channel chosen" <<
'\n');
230 }
else if (elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX > rChannel) {
233 INCL_DEBUG(
"NN interaction: Omega channel chosen" <<
'\n');
235 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX + omegadeltaProductionCX > rChannel) {
238 INCL_DEBUG(
"NN interaction: Delta Omega channel chosen" <<
'\n');
240 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX + omegadeltaProductionCX + omegaonePiProductionCX > rChannel) {
243 INCL_DEBUG(
"NN interaction: Omega + one Pion channel chosen" <<
'\n');
245 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX + omegadeltaProductionCX + omegaonePiProductionCX + omegatwoPiProductionCX > rChannel) {
248 INCL_DEBUG(
"NN interaction: Omega + two Pions channel chosen" <<
'\n');
250 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX + omegadeltaProductionCX + omegaonePiProductionCX + omegatwoPiProductionCX + omegathreePiProductionCX > rChannel) {
253 INCL_DEBUG(
"NN interaction: Omega + three Pions channel chosen" <<
'\n');
255 }
else if (elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + fourPiProductionCX + etaProductionCX + etadeltaProductionCX + etaonePiProductionCX + etatwoPiProductionCX + etathreePiProductionCX + etafourPiProductionCX + omegaProductionCX + omegadeltaProductionCX + omegaonePiProductionCX + omegatwoPiProductionCX + omegathreePiProductionCX + omegafourPiProductionCX > rChannel) {
258 INCL_DEBUG(
"NN interaction: Omega + four Pions channel chosen" <<
'\n');
261 INCL_WARN(
"inconsistency within the NN Cross Sections (sum!=inelastic)" <<
'\n');
262 if(omegafourPiProductionCX>0.) {
263 INCL_WARN(
"Returning an Omega + four Pions channel" <<
'\n');
266 }
else if(omegathreePiProductionCX>0.) {
267 INCL_WARN(
"Returning an Omega + three Pions channel" <<
'\n');
270 }
else if(omegatwoPiProductionCX>0.) {
271 INCL_WARN(
"Returning an Omega + two Pions channel" <<
'\n');
274 }
else if(omegaonePiProductionCX>0.) {
275 INCL_WARN(
"Returning an Omega + one Pion channel" <<
'\n');
278 }
else if(omegadeltaProductionCX>0.) {
279 INCL_WARN(
"Returning an Omega + Delta channel" <<
'\n');
282 }
else if(omegaProductionCX>0.) {
283 INCL_WARN(
"Returning an Omega channel" <<
'\n');
286 }
else if(etafourPiProductionCX>0.) {
287 INCL_WARN(
"Returning an Eta + four Pions channel" <<
'\n');
290 }
else if(etathreePiProductionCX>0.) {
291 INCL_WARN(
"Returning an Eta + threev channel" <<
'\n');
294 }
else if(etatwoPiProductionCX>0.) {
295 INCL_WARN(
"Returning an Eta + two Pions channel" <<
'\n');
298 }
else if(etaonePiProductionCX>0.) {
299 INCL_WARN(
"Returning an Eta + one Pion channel" <<
'\n');
302 }
else if(etadeltaProductionCX>0.) {
303 INCL_WARN(
"Returning an Eta + Delta channel" <<
'\n');
306 }
else if(etaProductionCX>0.) {
307 INCL_WARN(
"Returning an Eta channel" <<
'\n');
310 }
else if(fourPiProductionCX>0.) {
311 INCL_WARN(
"Returning a 4pi channel" <<
'\n');
314 }
else if(threePiProductionCX>0.) {
315 INCL_WARN(
"Returning a 3pi channel" <<
'\n');
318 }
else if(twoPiProductionCX>0.) {
319 INCL_WARN(
"Returning a 2pi channel" <<
'\n');
322 }
else if(onePiProductionCX>0.) {
323 INCL_WARN(
"Returning a 1pi channel" <<
'\n');
326 }
else if(deltaProductionCX>0.) {
327 INCL_WARN(
"Returning a delta-production channel" <<
'\n');
331 INCL_WARN(
"Returning an elastic channel" <<
'\n');
343 if(elasticCX/(elasticCX + recombinationCX) <
Random::shoot()) {
350 INCL_DEBUG(
"NDelta interaction: elastic channel chosen" <<
'\n');
354 INCL_DEBUG(
"NDelta interaction: recombination channel chosen" <<
'\n');
361 INCL_DEBUG(
"DeltaDelta interaction: elastic channel chosen" <<
'\n');
378 if(elasticCX > rChannel) {
381 INCL_DEBUG(
"PiN interaction: elastic channel chosen" <<
'\n');
383 }
else if(elasticCX + deltaProductionCX > rChannel) {
386 INCL_DEBUG(
"PiN interaction: Delta channel chosen" <<
'\n');
388 }
else if(elasticCX + deltaProductionCX + onePiProductionCX > rChannel) {
391 INCL_DEBUG(
"PiN interaction: one Pion channel chosen" <<
'\n');
393 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX > rChannel) {
396 INCL_DEBUG(
"PiN interaction: two Pions channel chosen" <<
'\n');
398 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX > rChannel) {
401 INCL_DEBUG(
"PiN interaction: three Pions channel chosen" <<
'\n');
403 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + etaProductionCX > rChannel) {
406 INCL_DEBUG(
"PiN interaction: Eta channel chosen" <<
'\n');
408 }
else if(elasticCX + deltaProductionCX + onePiProductionCX + twoPiProductionCX + threePiProductionCX + etaProductionCX+ omegaProductionCX > rChannel) {
411 INCL_DEBUG(
"PiN interaction: Omega channel chosen" <<
'\n');
416 INCL_WARN(
"inconsistency within the PiN Cross Sections (sum!=inelastic)" <<
'\n');
417 if(omegaProductionCX>0.) {
418 INCL_WARN(
"Returning a Omega channel" <<
'\n');
421 }
else if(etaProductionCX>0.) {
422 INCL_WARN(
"Returning a Eta channel" <<
'\n');
425 }
else if(threePiProductionCX>0.) {
426 INCL_WARN(
"Returning a 3pi channel" <<
'\n');
429 }
else if(twoPiProductionCX>0.) {
430 INCL_WARN(
"Returning a 2pi channel" <<
'\n');
433 }
else if(onePiProductionCX>0.) {
434 INCL_WARN(
"Returning a 1pi channel" <<
'\n');
437 }
else if(deltaProductionCX>0.) {
438 INCL_WARN(
"Returning a delta-production channel" <<
'\n');
442 INCL_WARN(
"Returning an elastic channel" <<
'\n');
458 if(elasticCX > rChannel) {
461 INCL_DEBUG(
"EtaN interaction: elastic channel chosen" <<
'\n');
463 }
else if(elasticCX + onePiProductionCX > rChannel) {
466 INCL_DEBUG(
"EtaN interaction: PiN channel chosen" <<
'\n');
468 }
else if(elasticCX + onePiProductionCX + twoPiProductionCX > rChannel) {
471 INCL_DEBUG(
"EtaN interaction: PiPiN channel chosen" <<
'\n');
476 INCL_WARN(
"inconsistency within the EtaN Cross Sections (sum!=inelastic)" <<
'\n');
477 if(twoPiProductionCX>0.) {
478 INCL_WARN(
"Returning a PiPiN channel" <<
'\n');
481 }
else if(onePiProductionCX>0.) {
482 INCL_WARN(
"Returning a PiN channel" <<
'\n');
486 INCL_WARN(
"Returning an elastic channel" <<
'\n');
503 if(elasticCX > rChannel) {
506 INCL_DEBUG(
"OmegaN interaction: elastic channel chosen" <<
'\n');
508 }
else if(elasticCX + onePiProductionCX > rChannel) {
511 INCL_DEBUG(
"OmegaN interaction: PiN channel chosen" <<
'\n');
513 }
else if(elasticCX + onePiProductionCX + twoPiProductionCX > rChannel) {
516 INCL_DEBUG(
"OmegaN interaction: PiPiN channel chosen" <<
'\n');
521 INCL_WARN(
"inconsistency within the OmegaN Cross Sections (sum!=inelastic)" <<
'\n');
522 if(twoPiProductionCX>0.) {
523 INCL_WARN(
"Returning a PiPiN channel" <<
'\n');
526 }
else if(onePiProductionCX>0.) {
527 INCL_WARN(
"Returning a PiN channel" <<
'\n');
531 INCL_WARN(
"Returning an elastic channel" <<
'\n');
538 INCL_DEBUG(
"BinaryCollisionAvatar can only handle nucleons (for the moment)."
G4bool isEta() const
Is this a eta?
G4double NNToNNEtaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double dot(const ThreeVector &v) const
G4double etaNToPiN(Particle const *const p1, Particle const *const p2)
G4int getAcceptedCollisions() const
G4double squareTotalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double omegaNToPiN(Particle const *const p1, Particle const *const p2)
G4double NNToNNOmegaxPi(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double etaNToPiPiN(Particle const *const p1, Particle const *const p2)
G4bool isDelta() const
Is it a Delta?
std::string print() const
G4double NDeltaToNN(Particle const *const p1, Particle const *const p2)
G4bool isOmega() const
Is this a omega?
G4double piNToEtaN(Particle const *const p1, Particle const *const p2)
G4double NNToNDeltaOmega(Particle const *const p1, Particle const *const p2)
G4double NNToNDelta(Particle const *const p1, Particle const *const p2)
G4double NNToNNEtaExclu(Particle const *const p1, Particle const *const p2)
G4double omegaNToPiPiN(Particle const *const p1, Particle const *const p2)
G4double NNToNDeltaEta(Particle const *const p1, Particle const *const p2)
G4double total(Particle const *const p1, Particle const *const p2)
const G4INCL::ThreeVector & getPosition() const
G4double piNToDelta(Particle const *const p1, Particle const *const p2)
G4double NNToNNOmegaExclu(Particle const *const p1, Particle const *const p2)
G4double piNToxPiN(const G4int xpi, Particle const *const p1, Particle const *const p2)
void restoreParticles() const
Restore the state of both particles.
G4double piNToOmegaN(Particle const *const p1, Particle const *const p2)
G4double NNToxPiNN(const G4int xpi, Particle const *const p1, Particle const *const p2)
G4double elastic(Particle const *const p1, Particle const *const p2)