140 G4cout <<
" >>> G4ElementaryParticleCollider::collide" <<
G4endl;
143 G4cerr <<
" ElementaryParticleCollider -> can collide only particle with particle "
148 #ifdef G4CASCADE_DEBUG_SAMPLER
149 static G4bool doPrintTables =
true;
152 doPrintTables =
false;
165 if (!particle1 || !particle2) {
166 G4cerr <<
" ElementaryParticleCollider -> can only collide hadrons"
176 G4cerr <<
" ElementaryParticleCollider -> cannot collide "
206 G4cerr <<
" ElementaryParticleCollider -> can only collide pi,mu,gamma with"
207 <<
" dibaryons " <<
G4endl;
222 G4cerr <<
" ElementaryParticleCollider -> failed to collide "
235 ipart->setMomentum(mom);
240 G4cout <<
" incoming particles: \n" << *particle1 << G4endl
241 << *particle2 << G4endl
242 <<
" outgoing particles: " <<
G4endl;
244 G4cout << *ipart << G4endl;
246 G4cout <<
" <<< Non-conservation in G4ElementaryParticleCollider"
265 G4cerr <<
" G4ElementaryParticleCollider: Unknown interaction channel "
266 << is <<
" - multiplicity not generated " <<
G4endl;
270 G4cout <<
" G4ElementaryParticleCollider::generateMultiplicity: "
271 <<
" multiplicity = " << mul <<
G4endl;
289 G4cerr <<
" G4ElementaryParticleCollider: Unknown interaction channel "
290 << is <<
" - outgoing kinds not generated " <<
G4endl;
303 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMfinalState"
309 const G4int itry_max = 10;
314 G4int is = type1 * type2;
318 G4int multiplicity = 0;
322 while (generate && itry++ < itry_max) {
332 G4cout <<
" generateOutgoingPartTypes failed mult " << multiplicity
345 if (itry >= itry_max) {
347 G4cout <<
" generateSCMfinalState failed " << itry <<
" attempts"
355 for (
G4int i=0; i<multiplicity; i++) {
361 G4cout <<
" <<< G4ElementaryParticleCollider::generateSCMfinalState"
377 for (
G4int i = 0; i < mult; i++) {
392 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMpionAbsorption"
405 G4cerr <<
" pion absorption: "
419 / (masses2[0] + masses2[1] + 2.0*a));
422 mom2.setVectM(-mom1.vect(),
masses[1]);
438 G4cout <<
" >>> G4ElementaryParticleCollider::generateSCMmuonAbsorption"
458 G4cerr <<
" mu- absorption: "
473 for (
size_t i=0; i<3; i++) {
484 G4cerr <<
" type " << qdtype <<
" not dibaryon!" <<
G4endl;
void generateSCMpionAbsorption(G4double etot_scm, G4InuclElementaryParticle *particle1, G4InuclElementaryParticle *particle2)
std::vector< G4double > masses2
std::vector< G4ThreeVector > GetThreeBodyMomenta()
static const G4CascadeChannel * GetTable(G4int initialState)
std::vector< G4int > particle_kinds
G4bool Generate(G4double initialMass, const std::vector< G4double > &masses, std::vector< G4LorentzVector > &finalState)
G4CascadeFinalStateGenerator fsGenerator
virtual G4bool useEPCollider(G4InuclParticle *bullet, G4InuclParticle *target) const
virtual void getOutgoingParticleTypes(std::vector< G4int > &kinds, G4int mult, G4double ke) const =0
void collide(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
std::vector< G4double > masses
static G4bool useQuasiDeuteron(G4int ptype, G4int qdtype=0)
static G4double getParticleMass(G4int type)
void setBullet(const G4InuclParticle *bullet)
G4double getTotalSCMEnergy() const
G4LorentzVector backToTheLab(const G4LorentzVector &mom) const
void generateSCMmuonAbsorption(G4double etot_scm, G4InuclElementaryParticle *particle1, G4InuclElementaryParticle *particle2)
const G4String & GetParticleName() const
std::vector< G4LorentzVector > scm_momentums
G4ElementaryParticleCollider()
void generateSCMfinalState(G4double ekin, G4double etot_scm, G4InuclElementaryParticle *particle1, G4InuclElementaryParticle *particle2)
G4GLOB_DLL std::ostream G4cout
void setVerbose(G4int vb=0)
std::vector< G4InuclElementaryParticle > particles
void Configure(G4InuclElementaryParticle *bullet, G4InuclElementaryParticle *target, const std::vector< G4int > &particle_kinds)
void fillOutgoingMasses()
void generateOutgoingPartTypes(G4int is, G4int mult, G4double ekin)
G4LorentzVector generateWithRandomAngles(G4double p, G4double mass=0.)
G4double getKinEnergyInTheTRS() const
G4InteractionCase interCase
G4int generateMultiplicity(G4int is, G4double ekin) const
static void Print(std::ostream &os=G4cout)
void addOutgoingParticles(const std::vector< G4InuclElementaryParticle > &particles)
void set(G4InuclParticle *part1, G4InuclParticle *part2)
void SetVerboseLevel(G4int verbose)
virtual G4bool validateOutput(G4InuclParticle *bullet, G4InuclParticle *target, G4CollisionOutput &output)
std::vector< G4InuclElementaryParticle >::iterator particleIterator
G4bool quasi_deutron() const
G4bool splitQuasiDeuteron(G4int qdtype)
virtual G4int getMultiplicity(G4double ke) const =0
std::vector< G4InuclElementaryParticle >::iterator particleIterator
G4ParticleDefinition * getDefinition() const
G4double getMomModule() const
G4GLOB_DLL std::ostream G4cerr
G4bool isNeutrino() const
void setTarget(const G4InuclParticle *target)
CLHEP::HepLorentzVector G4LorentzVector