153 std::vector< G4QMDNucleus* > nucleuses;
162 G4double e1 = std::sqrt( p1*p1 + m1*m1 );
168 G4double beta_nncm = ( - boostLABtoCM.beta() + boostLABtoNN.beta() ) / ( 1 - boostLABtoCM.beta() * boostLABtoNN.beta() ) ;
176 boostToReac = boostLABtoNN;
177 boostBackToLAB = -boostLABtoNN;
182 G4int icounter_max = 1024;
186 if ( icounter > icounter_max ) {
187 G4cout <<
"Loop-counter exceeded the threshold value at " << __LINE__ <<
"th line of " << __FILE__ <<
"." <<
G4endl;
205 calcOffSetOfCollision( b , proj_pd , targ_pd , plab , elab , bmax , boostCMtoNN );
211 if ( projectile.GetDefinition()->GetParticleType() ==
"nucleus"
212 || projectile.GetDefinition()->GetParticleName() ==
"proton"
213 || projectile.GetDefinition()->GetParticleName() ==
"neutron" )
225 proj->CalEnergyAndAngularMomentumInCM();
240 targ->CalEnergyAndAngularMomentumInCM();
247 for (
G4int i = 0 ; i < targ->GetTotalNumberOfParticipant() ; i++ )
255 , p0.
z() * coulomb_collision_gamma_targ + coulomb_collision_pz_targ );
259 , r0.
z() / coulomb_collision_gamma_targ + coulomb_collision_rz_targ );
275 for (
G4int i = 0 ; i < proj->GetTotalNumberOfParticipant() ; i++ )
283 , p0.
z() * coulomb_collision_gamma_proj + coulomb_collision_pz_proj );
287 , r0.
z() / coulomb_collision_gamma_proj + coulomb_collision_rz_proj );
290 system->
GetParticipant ( i + targ->GetTotalNumberOfParticipant() )->SetProjectile();
303 G4int i = targ->GetTotalNumberOfParticipant();
310 , p0.
z() * coulomb_collision_gamma_proj + coulomb_collision_pz_proj );
314 , r0.
z() / coulomb_collision_gamma_proj + coulomb_collision_rz_proj );
333 for (
G4int i = 0 ; i < maxTime ; i++ )
340 if ( i / 10 * 10 == i )
365 if ( numberOfSecondary == 2 )
368 G4bool elasticLike_system =
false;
369 if ( nucleuses.size() == 2 )
373 sec_a_A = nucleuses[0]->GetMassNumber();
374 sec_b_Z = nucleuses[1]->GetAtomicNumber();
375 sec_b_A = nucleuses[1]->GetMassNumber();
377 if ( ( sec_a_Z == proj_Z && sec_a_A == proj_A && sec_b_Z == targ_Z && sec_b_A == targ_A )
378 || ( sec_a_Z == targ_Z && sec_a_A == targ_A && sec_b_Z == proj_Z && sec_b_A == proj_A ) )
380 elasticLike_system =
true;
384 else if ( nucleuses.size() == 1 )
387 sec_a_Z = nucleuses[0]->GetAtomicNumber();
388 sec_a_A = nucleuses[0]->GetMassNumber();
391 if ( ( sec_a_Z == proj_Z && sec_a_A == proj_A && sec_b_pd == targ_pd )
392 || ( sec_a_Z == targ_Z && sec_a_A == targ_A && sec_b_pd == proj_pd ) )
394 elasticLike_system =
true;
404 if ( ( sec_a_pd == proj_pd && sec_b_pd == targ_pd )
405 || ( sec_a_pd == targ_pd && sec_b_pd == proj_pd ) )
407 elasticLike_system =
true;
412 if ( elasticLike_system ==
true )
415 G4bool elasticLike_energy =
true;
417 for (
G4int i = 0 ; i <
int ( nucleuses.size() ) ; i++ )
425 if ( nucleuses[i]->GetExcitationEnergy()*
GeV > 1.0*
MeV ) elasticLike_energy =
false;
430 G4bool withCollision =
true;
442 if ( elasticLike_energy ==
false ) elastic =
false;
444 if ( elasticLike_energy ==
false && withCollision ==
true ) elastic =
false;
461 if ( elastic ==
true )
464 for ( std::vector< G4QMDNucleus* >::iterator
465 it = nucleuses.begin() ; it != nucleuses.end() ; it++ )
477 for ( std::vector< G4QMDNucleus* >::iterator it
478 = nucleuses.begin() ; it != nucleuses.end() ; it++ )
499 if ( (*it)->GetAtomicNumber() == 0
500 || (*it)->GetAtomicNumber() == (*it)->GetMassNumber() )
503 for (
G4int i = 0 ; i < (*it)->GetTotalNumberOfParticipant() ; i++ )
505 G4QMDParticipant* aP =
new G4QMDParticipant( ( (*it)->GetParticipant( i ) )->GetDefinition() , ( (*it)->GetParticipant( i ) )->GetMomentum() , ( (*it)->GetParticipant( i ) )->GetPosition() );
512 G4LorentzVector nucleus_p4CM ( (*it)->Get4Momentum().vect() , nucleus_e );
516 G4int ia = (*it)->GetMassNumber();
517 G4int iz = (*it)->GetAtomicNumber();
524 rv = excitationHandler->
BreakItUp( *aFragment );
526 for ( G4ReactionProductVector::iterator itt
527 = rv->begin() ; itt != rv->end() ; itt++ )
550 randomized_direction = randomized_direction.unit();
599 if ( notBreak ==
true )
610 for ( G4ReactionProductVector::iterator itt
611 = rv->begin() ; itt != rv->end() ; itt++ )
643 for ( std::vector< G4QMDNucleus* >::iterator it
644 = nucleuses.begin() ; it != nucleuses.end() ; it++ )
static G4Pow * GetInstance()
G4double powN(G4double x, G4int n) const
void SetParticipant(G4QMDParticipant *particle)
CLHEP::Hep3Vector G4ThreeVector
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4ParticleDefinition * GetDefinition() const
const G4ParticleDefinition * GetDefinition()
void SetNucleus(G4QMDNucleus *aSystem)
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
G4int GetAtomicNumber() const
void SetStatusChange(G4HadFinalStateStatus aS)
std::vector< G4ReactionProduct * > G4ReactionProductVector
void SetMeanField(G4QMDMeanField *meanfield)
G4GLOB_DLL std::ostream G4cout
G4double GetIonMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
HepLorentzVector boostOf(const HepLorentzVector &vec, const Hep3Vector &betaVector)
static constexpr double eplus
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
const G4String & GetParticleType() const
void CalKinematicsOfBinaryCollisions(G4double)
G4int GetTotalNumberOfParticipant()
G4double GetTotalPotential()
G4int GetAtomicMass() const
G4LorentzVector Get4Momentum() const
std::vector< G4QMDNucleus * > DoClusterJudgment()
G4QMDParticipant * GetParticipant(G4int i)
static G4IonTable * GetIonTable()
Hep3Vector findBoostToCM() const
G4double GetPDGMass() const
G4LorentzVector Get4Momentum()
void DoPropagation(G4double)
void SetSystem(G4QMDSystem *aSystem)
static constexpr double GeV
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
G4HadFinalState theParticleChange
static constexpr double MeV
static constexpr double pi
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
static constexpr double fermi
G4double GetPDGCharge() const
G4ThreeVector GetMomentum() const
G4double elastic(Particle const *const p1, Particle const *const p2)