149 std::vector< G4QMDNucleus* > nucleuses;
164 G4double beta_nncm = ( - boostLABtoCM.beta() + boostLABtoNN.beta() ) / ( 1 - boostLABtoCM.beta() * boostLABtoNN.beta() ) ;
172 boostToReac = boostLABtoNN;
173 boostBackToLAB = -boostLABtoNN;
178 G4int icounter_max = 1024;
182 if ( icounter > icounter_max ) {
183 G4cout <<
"Loop-counter exceeded the threshold value at " << __LINE__ <<
"th line of " << __FILE__ <<
"." <<
G4endl;
236 targ->CalEnergyAndAngularMomentumInCM();
243 for (
G4int i = 0 ; i < targ->GetTotalNumberOfParticipant() ; i++ )
299 G4int i = targ->GetTotalNumberOfParticipant();
336 if ( i / 10 * 10 == i )
361 if ( numberOfSecondary == 2 )
364 G4bool elasticLike_system =
false;
365 if ( nucleuses.size() == 2 )
369 sec_a_A = nucleuses[0]->GetMassNumber();
370 sec_b_Z = nucleuses[1]->GetAtomicNumber();
371 sec_b_A = nucleuses[1]->GetMassNumber();
373 if ( ( sec_a_Z == proj_Z && sec_a_A == proj_A && sec_b_Z == targ_Z && sec_b_A == targ_A )
374 || ( sec_a_Z == targ_Z && sec_a_A == targ_A && sec_b_Z == proj_Z && sec_b_A == proj_A ) )
376 elasticLike_system =
true;
380 else if ( nucleuses.size() == 1 )
383 sec_a_Z = nucleuses[0]->GetAtomicNumber();
384 sec_a_A = nucleuses[0]->GetMassNumber();
387 if ( ( sec_a_Z == proj_Z && sec_a_A == proj_A && sec_b_pd == targ_pd )
388 || ( sec_a_Z == targ_Z && sec_a_A == targ_A && sec_b_pd == proj_pd ) )
390 elasticLike_system =
true;
400 if ( ( sec_a_pd == proj_pd && sec_b_pd == targ_pd )
401 || ( sec_a_pd == targ_pd && sec_b_pd == proj_pd ) )
403 elasticLike_system =
true;
408 if ( elasticLike_system ==
true )
411 G4bool elasticLike_energy =
true;
413 for (
G4int i = 0 ; i < int ( nucleuses.size() ) ; i++ )
421 if ( nucleuses[i]->GetExcitationEnergy()*
GeV > 1.0*
MeV ) elasticLike_energy =
false;
426 G4bool withCollision =
true;
438 if ( elasticLike_energy ==
false ) elastic =
false;
440 if ( elasticLike_energy ==
false && withCollision ==
true ) elastic =
false;
457 if ( elastic ==
true )
460 for ( std::vector< G4QMDNucleus* >::iterator
461 it = nucleuses.begin() ; it != nucleuses.end() ; it++ )
473 for ( std::vector< G4QMDNucleus* >::iterator it
474 = nucleuses.begin() ; it != nucleuses.end() ; it++ )
495 if ( (*it)->GetAtomicNumber() == 0
496 || (*it)->GetAtomicNumber() == (*it)->GetMassNumber() )
499 for (
G4int i = 0 ; i < (*it)->GetTotalNumberOfParticipant() ; i++ )
501 G4QMDParticipant* aP =
new G4QMDParticipant( ( (*it)->GetParticipant( i ) )->GetDefinition() , ( (*it)->GetParticipant( i ) )->GetMomentum() , ( (*it)->GetParticipant( i ) )->GetPosition() );
508 G4LorentzVector nucleus_p4CM ( (*it)->Get4Momentum().vect() , nucleus_e );
512 G4int ia = (*it)->GetMassNumber();
513 G4int iz = (*it)->GetAtomicNumber();
522 for ( G4ReactionProductVector::iterator itt
523 = rv->begin() ; itt != rv->end() ; itt++ )
531 G4LorentzVector p4_CM = CLHEP::boostOf( p4 , -nucleus_p4CM.findBoostToCM() );
546 randomized_direction = randomized_direction.unit();
552 G4LorentzVector p4_a1_CM = CLHEP::boostOf ( p4_a1_Be8 , -nucleus_p4CM.findBoostToCM() );
553 G4LorentzVector p4_a1_LAB = CLHEP::boostOf ( p4_a1_CM , boostBackToLAB );
558 G4LorentzVector p4_a2_CM = CLHEP::boostOf ( p4_a2_Be8 , -nucleus_p4CM.findBoostToCM() );
559 G4LorentzVector p4_a2_LAB = CLHEP::boostOf ( p4_a2_CM , boostBackToLAB );
595 if ( notBreak ==
true )
606 for ( G4ReactionProductVector::iterator itt
607 = rv->begin() ; itt != rv->end() ; itt++ )
639 for ( std::vector< G4QMDNucleus* >::iterator it
640 = nucleuses.begin() ; it != nucleuses.end() ; it++ )
666 G4double stot = std::sqrt ( etot*etot - ptot*ptot );
668 G4double pstt = std::sqrt ( ( stot*stot - ( mass_proj + mass_targ ) * ( mass_proj + mass_targ )
669 ) * ( stot*stot - ( mass_proj - mass_targ ) * ( mass_proj - mass_targ ) ) )
673 G4double eccm = stot - ( mass_proj + mass_targ );
696 G4double rmax = std::sqrt( rmax0*rmax0 + b*b );
699 G4double pcca = 1.0 - double ( zp * zt ) * ccoul / eccm / rmax - ( b / rmax )*( b / rmax );
709 G4double aas = 2.0 * eccm * b / double ( zp * zt ) / ccoul;
710 bbs = 1.0 / std::sqrt ( 1.0 + aas*aas );
711 aas1 = ( 1.0 + aas * b / rmax ) * bbs;
718 if ( 1.0 - aas1*aas1 <= 0 || 1.0 - bbs*bbs <= 0.0 )
725 G4double aat1 = aas1 / std::sqrt ( 1.0 - aas1*aas1 );
726 G4double aat2 = bbs / std::sqrt ( 1.0 - bbs*bbs );
728 thet1 = std::atan ( aat1 );
729 thet2 = std::atan ( aat2 );
733 cost = std::cos( theta );
734 sint = std::sin( theta );
737 G4double rzpr = -rmax * cost * ( mass_targ ) / ( mass_proj + mass_targ );
738 G4double rzta = rmax * cost * ( mass_proj ) / ( mass_proj + mass_targ );
745 G4double pzpc = pzcc * ( cost * pccf + sint * b / rmax );
746 G4double pxpr = pzcc * ( -sint * pccf + cost * b / rmax );
751 G4double epc = std::sqrt ( pzpc*pzpc + pxpr*pxpr + mass_proj*mass_proj );
752 G4double etc = std::sqrt ( pztc*pztc + pxta*pxta + mass_targ*mass_targ );
760 G4double gammacm = boostToCM.gamma();
763 pzpr = pzpc + betacm * gammacm * ( gammacm / ( 1. + gammacm ) * pzpc * betacm + epc );
764 pzta = pztc + betacm * gammacm * ( gammacm / ( 1. + gammacm ) * pztc * betacm + etc );
765 epr = gammacm * ( epc + betacm * pzpc );
766 eta = gammacm * ( etc + betacm * pztc );
771 G4double gammpr = epr / ( mass_proj );
772 G4double gammta = eta / ( mass_targ );
774 pzta = pzta / double ( at );
775 pxta = pxta / double ( at );
777 pzpr = pzpr / double ( ap );
778 pxpr = pxpr / double ( ap );
814 outFile <<
"Lorentz covarianted Quantum Molecular Dynamics model for nucleus (particle) vs nucleus reactions\n";
G4VCrossSectionDataSet * GetCrossSectionDataSet(const G4String &name, G4bool warning=true)
static G4Pow * GetInstance()
G4double coulomb_collision_rx_proj
G4ThreeVector GetPosition()
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
G4double coulomb_collision_px_proj
G4double coulomb_collision_rx_targ
G4double coulomb_collision_pz_targ
G4Evaporation * evaporation
G4double powN(G4double x, G4int n) const
void SetParticipant(G4QMDParticipant *particle)
CLHEP::Hep3Vector G4ThreeVector
G4PiNuclearCrossSection * piNucXS
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
G4ParticleDefinition * GetDefinition() const
const G4ParticleDefinition * GetDefinition()
void SetNucleus(G4QMDNucleus *aSystem)
static const char * Default_Name()
G4ReactionProductVector * BreakItUp(const G4Fragment &theInitialState)
const G4String & GetParticleName() const
G4int GetAtomicNumber() const
void SetStatusChange(G4HadFinalStateStatus aS)
G4ThreeVector GetMomentum()
std::vector< G4ReactionProduct * > G4ReactionProductVector
void SetMeanField(G4QMDMeanField *meanfield)
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition * GetDefinition() const
G4double GetIonMass(G4int Z, G4int A, G4int L=0, G4int lvl=0) const
G4double GetKineticEnergy() const
G4double coulomb_collision_px_targ
static G4CrossSectionDataSetRegistry * Instance()
const G4String & GetParticleType() const
void CalKinematicsOfBinaryCollisions(G4double)
G4int GetTotalNumberOfParticipant()
G4double GetTotalPotential()
const G4LorentzVector & Get4Momentum() const
G4int GetAtomicMass() const
G4LorentzVector Get4Momentum() const
std::vector< G4QMDNucleus * > DoClusterJudgment()
G4QMDParticipant * GetParticipant(G4int i)
static G4IonTable * GetIonTable()
G4QMDMeanField * meanField
G4double coulomb_collision_rz_targ
void calcOffSetOfCollision(G4double, const G4ParticleDefinition *, const G4ParticleDefinition *, G4double, G4double, G4double, G4ThreeVector)
G4IonsShenCrossSection * shenXS
G4double GetPDGMass() const
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
G4double coulomb_collision_gamma_targ
G4LorentzVector Get4Momentum()
void DoPropagation(G4double)
void SetSystem(G4QMDSystem *aSystem)
void SetTotalPotential(G4double x)
G4double coulomb_collision_rz_proj
G4ExcitationHandler * excitationHandler
void SetEvaporation(G4VEvaporation *ptr)
G4HadFinalState theParticleChange
G4QMDCollision * collision
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
G4double coulomb_collision_gamma_proj
void CalEnergyAndAngularMomentumInCM()
static const double eplus
G4double GetPDGCharge() const
static const double fermi
G4ThreeVector GetMomentum() const
G4double coulomb_collision_pz_proj
G4double GetTotalMomentum() const
G4double elastic(Particle const *const p1, Particle const *const p2)
virtual void ModelDescription(std::ostream &outFile) const
CLHEP::HepLorentzVector G4LorentzVector