35#define INCLXX_IN_GEANT4_MODE 1
57 :
IAvatar(time), theParticle(aParticle), theNucleus(n)
69 DEBUG(
"Particle " << theParticle->
getID() <<
" is a spectator, reflection" << std::endl);
79 DEBUG(
"Particle " << theParticle->
getID() <<
" is a resonance below Tf, reflection" << std::endl
80 <<
" Tf=" << theFermiEnergy <<
", EKin=" << theParticle->
getKineticEnergy() << std::endl);
88 DEBUG(
"Transmission probability for particle " << theParticle->
getID() <<
" = " << transmissionProbability << std::endl);
99 && transmissionProbability>1.E-4) {
103 if(candidateCluster != 0 &&
106 DEBUG(
"Cluster algorithm succeded. Candidate cluster:" << std::endl << candidateCluster->
print() << std::endl);
112 DEBUG(
"Transmission probability for cluster " << candidateCluster->
getID() <<
" = " << clusterTransmissionProbability << std::endl);
114 if (x <= clusterTransmissionProbability) {
115 DEBUG(
"Cluster " << candidateCluster->
getID() <<
" passes the Coulomb barrier, transmitting." << std::endl);
118 DEBUG(
"Cluster " << candidateCluster->
getID() <<
" does not pass the Coulomb barrier. Falling back to transmission of the leading particle." << std::endl);
119 delete candidateCluster;
122 delete candidateCluster;
132 DEBUG(
"Particle " << theParticle->
getID() <<
" is a projectile spectator, transmission" << std::endl);
139 if(x <= transmissionProbability) {
140 DEBUG(
"Particle " << theParticle->
getID() <<
" passes the Coulomb barrier, transmitting." << std::endl);
143 DEBUG(
"Particle " << theParticle->
getID() <<
" does not pass the Coulomb barrier, reflection." << std::endl);
157 if(!outgoing.empty()) {
163 for(
ParticleIter i=components.begin(); i!=components.end(); ++i) {
164 if(!(*i)->isTargetSpectator())
176 std::stringstream ss;
177 ss <<
"(avatar " <<
theTime <<
" 'reflection" << std::endl
178 <<
"(list " << std::endl
179 << theParticle->
dump()
180 <<
"))" << std::endl;
199 const G4double EMinusV2 = EMinusV*EMinusV;
202 const G4double x=std::sqrt((2.*m*E+E*E)*(2.*m*EMinusV+EMinusV2));
205 G4double theTransmissionProbability =
206 4.*x/(2.*m*(E+EMinusV)+E*E+(EMinusV2)+2.*x);
210 const G4int theParticleZ = particle->
getZ();
211 if (theParticleZ <= 0 || theParticleZ >= theZ)
212 return theTransmissionProbability;
216 if (EMinusV >= theTransmissionBarrier)
217 return theTransmissionProbability;
220 const G4double px = std::sqrt(EMinusV/theTransmissionBarrier);
221 const G4double logCoulombTransmission =
222 theParticleZ*(theZ-theParticleZ)/137.03*std::sqrt(2.*m/EMinusV/(1.+EMinusV/2./m))
223 *(std::acos(px)-px*std::sqrt(1.-px*px));
224 if (logCoulombTransmission > 35.)
226 theTransmissionProbability *= std::exp(-2.*logCoulombTransmission);
228 return theTransmissionProbability;
Static class for cluster formation.
void decrementCascading()
ParticleList const & getParticles() const
std::string print() const
static G4bool clusterCanEscape(Nucleus const *const n, Cluster const *const c)
static Cluster * getCluster(Nucleus *n, Particle *p)
ParticleList const & getOutgoingParticles() const
void setType(AvatarType t)
virtual G4INCL::FinalState * getFinalState()=0
G4double getFermiEnergy(const Particle *const p) const
Return the Fermi energy for a particle.
NuclearPotential::INuclearPotential * getPotential() const
Getter for thePotential.
G4bool isNucleusNucleusCollision() const
Is it a nucleus-nucleus collision?
G4double getTransmissionBarrier(Particle const *const p)
Get the transmission barrier.
G4double getEmissionQValueCorrection(const G4int AParent, const G4int ZParent) const
Computes correction on the emission Q-value.
G4double getPotentialEnergy() const
Get the particle potential energy.
G4int getZ() const
Returns the charge number.
G4double getKineticEnergy() const
Get the particle kinetic energy.
G4bool isTargetSpectator() const
G4bool isProjectileSpectator() const
G4bool isResonance() const
Is it a resonance?
G4double getMass() const
Get the cached particle mass.
G4int getA() const
Returns the baryon number.
G4double getTransmissionProbability(Particle const *const particle) const
Calculate the transmission probability for the particle.
SurfaceAvatar(G4INCL::Particle *aParticle, G4double time, G4INCL::Nucleus *aNucleus)
virtual FinalState * postInteraction(FinalState *)
G4INCL::IChannel * getChannel() const
G4INCL::FinalState * getFinalState() const
virtual void preInteraction()
std::list< G4INCL::Particle * > ParticleList
std::list< G4INCL::Particle * >::const_iterator ParticleIter