73    coulomb_collision_gamma_proj = 0.0;
 
   74    coulomb_collision_rx_proj = 0.0;
 
   75    coulomb_collision_rz_proj = 0.0;
 
   76    coulomb_collision_px_proj = 0.0;
 
   77    coulomb_collision_pz_proj = 0.0;
 
   79    coulomb_collision_gamma_targ = 0.0;
 
   80    coulomb_collision_rx_targ = 0.0;
 
   81    coulomb_collision_rz_targ = 0.0;
 
   82    coulomb_collision_px_targ = 0.0;
 
   83    coulomb_collision_pz_targ = 0.0;
 
   92    delete excitationHandler;
 
  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 );
 
  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 ); 
 
  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++ )
 
  661 void G4QMDReaction::calcOffSetOfCollision( 
G4double b , 
 
  670    G4double stot = std::sqrt ( etot*etot - ptot*ptot );
 
  672    G4double pstt = std::sqrt ( ( stot*stot - ( mass_proj + mass_targ ) * ( mass_proj + mass_targ ) 
 
  673                   ) * ( stot*stot - ( mass_proj - mass_targ ) * ( mass_proj - mass_targ ) ) ) 
 
  677    G4double eccm = stot - ( mass_proj + mass_targ );
 
  700    G4double rmax = std::sqrt( rmax0*rmax0 + b*b );
 
  703    G4double pcca = 1.0 - double ( zp * zt ) * ccoul / eccm / rmax - ( b / rmax )*( b / rmax );
 
  713       G4double aas = 2.0 * eccm * b / double ( zp * zt ) / ccoul;
 
  714       bbs = 1.0 / std::sqrt ( 1.0 + aas*aas );
 
  715       aas1 = ( 1.0 + aas * b / rmax ) * bbs;
 
  722    if ( 1.0 - aas1*aas1 <= 0 || 1.0 - bbs*bbs <= 0.0 )   
 
  729       G4double aat1 = aas1 / std::sqrt ( 1.0 - aas1*aas1 );
 
  730       G4double aat2 = bbs / std::sqrt ( 1.0 - bbs*bbs );
 
  732       thet1 = std::atan ( aat1 );
 
  733       thet2 = std::atan ( aat2 );
 
  737       cost = std::cos( theta );
 
  738       sint = std::sin( theta );
 
  741    G4double rzpr = -rmax * cost * ( mass_targ ) / ( mass_proj + mass_targ );
 
  742    G4double rzta =  rmax * cost * ( mass_proj ) / ( mass_proj + mass_targ );
 
  749    G4double pzpc = pzcc * (  cost * pccf + sint * b / rmax ); 
 
  750    G4double pxpr = pzcc * ( -sint * pccf + cost * b / rmax ); 
 
  755    G4double epc = std::sqrt ( pzpc*pzpc + pxpr*pxpr + mass_proj*mass_proj );
 
  756    G4double etc = std::sqrt ( pztc*pztc + pxta*pxta + mass_targ*mass_targ );
 
  767    pzpr = pzpc + betacm * gammacm * ( gammacm / ( 1. + gammacm ) * pzpc * betacm + epc );
 
  768    pzta = pztc + betacm * gammacm * ( gammacm / ( 1. + gammacm ) * pztc * betacm + etc );
 
  769    epr = gammacm * ( epc + betacm * pzpc );
 
  770    eta = gammacm * ( etc + betacm * pztc );
 
  775    G4double gammpr = epr / ( mass_proj );
 
  776    G4double gammta = eta / ( mass_targ );
 
  778    pzta = pzta / double ( at );
 
  779    pxta = pxta / double ( at );
 
  781    pzpr = pzpr / double ( ap );
 
  782    pxpr = pxpr / double ( ap );
 
  790    coulomb_collision_gamma_proj = gammpr;
 
  791    coulomb_collision_rx_proj = rxpr;
 
  792    coulomb_collision_rz_proj = rzpr;
 
  793    coulomb_collision_px_proj = pxpr;
 
  794    coulomb_collision_pz_proj = pzpr;
 
  796    coulomb_collision_gamma_targ = gammta;
 
  797    coulomb_collision_rx_targ = rxta;
 
  798    coulomb_collision_rz_targ = rzta;
 
  799    coulomb_collision_px_targ = pxta;
 
  800    coulomb_collision_pz_targ = pzta;
 
  806 void G4QMDReaction::setEvaporationCh()
 
  818    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()
 
G4ThreeVector GetPosition()
 
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
 
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)
 
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 
 
HepLorentzVector boostOf(const HepLorentzVector &vec, const Hep3Vector &betaVector)
 
G4double GetKineticEnergy() const 
 
static constexpr double eplus
 
static G4CrossSectionDataSetRegistry * Instance()
 
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
 
const G4String & GetParticleType() const 
 
void CalKinematicsOfBinaryCollisions(G4double)
 
G4int GetTotalNumberOfParticipant()
 
G4double GetTotalPotential()
 
const G4LorentzVector & Get4Momentum() const 
 
G4int GetAtomicMass() const 
 
void SetEvaporation(G4VEvaporation *ptr, G4bool isLocal=false)
 
G4LorentzVector Get4Momentum() const 
 
std::vector< G4QMDNucleus * > DoClusterJudgment()
 
G4QMDParticipant * GetParticipant(G4int i)
 
static G4IonTable * GetIonTable()
 
Hep3Vector findBoostToCM() const 
 
void SetDeexChannelsType(G4DeexChannelType val)
 
G4double GetPDGMass() const 
 
virtual G4double GetIsoCrossSection(const G4DynamicParticle *, G4int Z, G4int A, const G4Isotope *iso=0, const G4Element *elm=0, const G4Material *mat=0)
 
G4LorentzVector Get4Momentum()
 
void DoPropagation(G4double)
 
void SetSystem(G4QMDSystem *aSystem)
 
void SetTotalPotential(G4double x)
 
static constexpr double GeV
 
G4HadFinalState theParticleChange
 
static constexpr double MeV
 
static constexpr double pi
 
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
 
void CalEnergyAndAngularMomentumInCM()
 
static constexpr double fermi
 
G4double GetPDGCharge() const 
 
G4ThreeVector GetMomentum() const 
 
G4double GetTotalMomentum() const 
 
G4double elastic(Particle const *const p1, Particle const *const p2)
 
virtual void ModelDescription(std::ostream &outFile) const