41 , fbcmax0 ( 1.323142 )
122 for (
G4int i = 0 ; i <
n ; i++ )
132 for (
G4int i = 0 ; i <
n ; i++ )
153 G4bool isThisEnergyOK =
false;
155 for (
G4int ii = 0 ; ii < 4 ; ii++ )
171 for ( G4KineticTrackVector::iterator it
172 = secs->begin() ; it != secs->end() ; it++ )
187 et += (*it)->Get4Momentum().e()/
GeV;
193 et += (*it)->Get4Momentum().e()/
GeV;
217 if ( std::abs ( eini - efin ) <
fepse*10 )
220 isThisEnergyOK =
true;
230 for (
G4int i0i = 0 ; i0i <
id-1 ; i0i++ )
244 if ( isThisEnergyOK ==
true )
250 for (
G4int i0i = 0 ; i0i < i0 ; i0i++ )
273 for (
G4int i0i = 0 ; i0i < i0 ; i0i++ )
284 if ( isThisEnergyOK ==
true )
291 for (
G4int i0i = 0 ; i0i < i0 ; i0i++ )
326 for (
G4int j = 0 ; j < i ; j++ )
370 G4double srt = std::sqrt( (p4i+p4j)*(p4i+p4j) );
377 if ( rmi < 0.94 && rmj < 0.94 )
380 cutoff = rmi + rmj + 0.02;
394 if ( srt < cutoff )
continue;
403 G4double aij = 1.0 - ( rmi*rmj /pij ) * ( rmi*rmj /pij );
404 G4double bij = pidr / rmi - pjdr*rmi/pij;
405 G4double cij = rsq + ( pidr / rmi ) * ( pidr / rmi );
406 G4double brel = std::sqrt ( std::abs ( cij - bij*bij/aij ) );
408 if ( brel > fbcmax )
continue;
411 G4double bji = -pjdr/rmj + pidr * rmj /pij;
413 G4double ti = ( pidr/rmi - bij / aij ) * p4i.e() / rmi;
414 G4double tj = (-pjdr/rmj - bji / aij ) * p4j.e() / rmj;
431 if ( std::abs ( ti + tj ) > deltaT )
continue;
442 if ( prcm <= 0.00001 )
continue;
473 if ( energetically_forbidden ==
true )
496 G4bool absorption =
false;
572 G4double eini = epot + p4i.e() + p4j.e();
583 for (
G4int iitry = 0 ; iitry < 4 ; iitry++ )
604 if ( secs->size() == 2 )
606 for ( G4KineticTrackVector::iterator it
607 = secs->begin() ; it != secs->end() ; it++ )
612 p4ix_new = (*it)->Get4Momentum()/
GeV;
619 p4jx_new = (*it)->Get4Momentum()/
GeV;
627 else if ( secs->size() == 1 )
634 p4ix_new = secs->front()->Get4Momentum()/
GeV;
640 if ( secs->size() > 2 )
643 G4cout <<
"G4QMDCollision secs size > 2; " << secs->size() <<
G4endl;
645 for ( G4KineticTrackVector::iterator it
646 = secs->begin() ; it != secs->end() ; it++ )
648 G4cout <<
"G4QMDSCATTERER AFTER " << (*it)->GetDefinition()->GetParticleName() <<
" " << (*it)->Get4Momentum()/GeV <<
G4endl;
654 for ( G4KineticTrackVector::iterator it
655 = secs->begin() ; it != secs->end() ; it++ )
677 G4double efin = epot + p4ix_new.e() + p4jx_new.e();
688 if ( std::abs ( eini - efin ) <
fepse )
798 elastic = 35.0 / ( 1. + csrt * 100.0 ) + 20.0;
802 elastic = ( - std::atan( ( csrt - 0.4286 ) * 1.5 - 0.8 )
803 * 2. /
pi + 1.0 ) * 9.65 + 7.0;
810 elastic = 28.0 / ( 1. + csrt * 100.0 ) + 27.0;
814 elastic = ( - std::atan( ( csrt - 0.4286 ) * 1.5 - 0.8 )
815 * 2. /
pi + 1.0 ) * 12.34 + 10.0;
837 G4double as = std::pow ( 3.65 * asrt , 6 );
841 G4double t1 = std::log( (1-x) * std::exp(2.*a*ta) + x ) /
a;
844 if( std::abs(c1) > 1.0 ) c1 = 2.0 * x - 1.0;
857 if ( pcm.x() == 0.0 && pcm.y() == 0 )
863 t2 = std::atan2( pcm.y() , pcm.x() );
867 G4double s1 = std::sqrt ( 1.0 - c1*c1 );
868 G4double s2 = std::sqrt ( 1.0 - c2*c2 );
878 pcm.setX( pr * ( ss*ct2 - s1*st1*st2) );
879 pcm.setY( pr * ( ss*st2 + s1*st1*ct2) );
880 pcm.setZ( pr * ( c1*c2 - s1*s2*ct1) );
886 G4double eini = epot + p4i.e() + p4j.e();
896 for (
G4int itry = 0 ; itry < 4 ; itry++ )
899 G4double eicm = std::sqrt ( rmi*rmi + pcm*pcm );
902 G4double trans = gamma * ( gamma * pibeta / ( gamma + 1 ) + eicm );
906 G4double ejcm = std::sqrt ( rmj*rmj + pcm*pcm );
907 trans = gamma * ( gamma * pibeta / ( gamma + 1 ) + ejcm );
930 G4double efin = epot + pi_new_e + pj_new_e ;
940 if ( std::abs ( eini - efin ) <
fepse )
952 if ( std::abs ( eini - efin ) <
fepse )
return result;
954 G4double cona = ( eini - efin + etwo ) / gamma;
955 G4double fac2 = 1.0 / ( 4.0 * cona*cona * pr*pr ) *
956 ( ( cona*cona - ( rmi*rmi + rmj*rmj ) )*( cona*cona - ( rmi*rmi + rmj*rmj ) )
957 - 4.0 * rmi*rmi * rmj*rmj );
G4ThreeVector GetPosition()
static c2_factory< G4double > c2
G4QMDMeanField * theMeanField
void SetParticipant(G4QMDParticipant *particle)
CLHEP::Hep3Vector G4ThreeVector
G4KineticTrackVector * Decay()
void SetPosition(G4ThreeVector r)
G4int GetChargeInUnitOfEplus()
G4ParticleDefinition * GetDefinition()
virtual G4KineticTrackVector * Scatter(const G4KineticTrack &trk1, const G4KineticTrack &trk2)
G4QMDParticipant * EraseParticipant(G4int i)
void Cal2BodyQuantities()
G4bool IsPauliBlocked(G4int)
G4ThreeVector GetMomentum()
G4GLOB_DLL std::ostream G4cout
G4Scatterer * theScatterer
void CalKinematicsOfBinaryCollisions(G4double)
G4int GetTotalNumberOfParticipant()
void SetMomentum(G4ThreeVector p)
G4double GetTotalPotential()
G4QMDParticipant * GetParticipant(G4int i)
G4bool IsShortLived() const
G4bool IsThisProjectile()
G4double GetPDGMass() const
void DeleteParticipant(G4int i)
G4LorentzVector Get4Momentum()
G4double GetRR2(G4int i, G4int j)
G4bool CalFinalStateOfTheBinaryCollisionJQMD(G4double, G4double, G4ThreeVector, G4double, G4double, G4ThreeVector, G4double, G4int, G4int)
G4bool CalFinalStateOfTheBinaryCollision(G4int, G4int)
void SetDefinition(G4ParticleDefinition *pd)
void InsertParticipant(G4QMDParticipant *particle, G4int j)
void IncrementCollisionCounter()
static const double fermi
G4double elastic(Particle const *const p1, Particle const *const p2)
CLHEP::HepLorentzVector G4LorentzVector