33 #define INCLXX_IN_GEANT4_MODE 1
55 :
IAvatar(time), theParticle(aParticle), theNucleus(n)
67 DEBUG(
"Particle " << theParticle->
getID() <<
" is a spectator, reflection" << std::endl);
77 DEBUG(
"Particle " << theParticle->
getID() <<
" is a resonance below Tf, reflection" << std::endl
78 <<
" Tf=" << theFermiEnergy <<
", EKin=" << theParticle->
getKineticEnergy() << std::endl);
86 DEBUG(
"Transmission probability for particle " << theParticle->
getID() <<
" = " << transmissionProbability << std::endl);
97 && transmissionProbability>1.E-4) {
101 if(candidateCluster != 0 &&
104 DEBUG(
"Cluster algorithm succeded. Candidate cluster:" << std::endl << candidateCluster->
print() << std::endl);
110 DEBUG(
"Transmission probability for cluster " << candidateCluster->
getID() <<
" = " << clusterTransmissionProbability << std::endl);
112 if (x <= clusterTransmissionProbability) {
113 DEBUG(
"Cluster " << candidateCluster->
getID() <<
" passes the Coulomb barrier, transmitting." << std::endl);
116 DEBUG(
"Cluster " << candidateCluster->
getID() <<
" does not pass the Coulomb barrier. Falling back to transmission of the leading particle." << std::endl);
117 delete candidateCluster;
120 delete candidateCluster;
130 DEBUG(
"Particle " << theParticle->
getID() <<
" is a projectile spectator, transmission" << std::endl);
137 if(x <= transmissionProbability) {
138 DEBUG(
"Particle " << theParticle->
getID() <<
" passes the Coulomb barrier, transmitting." << std::endl);
141 DEBUG(
"Particle " << theParticle->
getID() <<
" does not pass the Coulomb barrier, reflection." << std::endl);
155 if(!outgoing.empty()) {
161 for(
ParticleIter i=components.begin(); i!=components.end(); ++i) {
162 if(!(*i)->isTargetSpectator())
174 std::stringstream ss;
175 ss <<
"(avatar " <<
theTime <<
" 'reflection" << std::endl
176 <<
"(list " << std::endl
177 << theParticle->
dump()
178 <<
"))" << std::endl;
197 const G4double EMinusV2 = EMinusV*EMinusV;
200 const G4double x=std::sqrt((2.*m*E+E*E)*(2.*m*EMinusV+EMinusV2));
203 G4double theTransmissionProbability =
204 4.*x/(2.*m*(E+EMinusV)+E*E+(EMinusV2)+2.*
x);
208 const G4int theParticleZ = particle->
getZ();
209 if (theParticleZ <= 0 || theParticleZ >= theZ)
210 return theTransmissionProbability;
214 if (EMinusV >= theTransmissionBarrier)
215 return theTransmissionProbability;
218 const G4double px = std::sqrt(EMinusV/theTransmissionBarrier);
219 const G4double logCoulombTransmission =
220 theParticleZ*(theZ-theParticleZ)/137.03*std::sqrt(2.*m/EMinusV/(1.+EMinusV/2./m))
221 *(std::acos(px)-px*std::sqrt(1.-px*px));
222 if (logCoulombTransmission > 35.)
224 theTransmissionProbability *= std::exp(-2.*logCoulombTransmission);
226 return theTransmissionProbability;