58 theEvaporationProbabilityPtr(aEmissionStrategy),
59 theCoulombBarrierPtr(aCoulombBarrier),
60 EmissionProbability(0.0),
61 MaximalKineticEnergy(-1000.0)
65 ResidualMass = CoulombBarrier=0.0;
74 theEvaporationProbabilityPtr(0),
75 theCoulombBarrierPtr(0),
76 EmissionProbability(0.0),
77 MaximalKineticEnergy(-1000.0)
81 EvaporatedMass = ResidualMass = CoulombBarrier = 0.0;
87 delete theLevelDensityPtr;
102 ResidualA = FragmentA - theA;
103 ResidualZ = FragmentZ - theZ;
112 if (ResidualA <= 0 || ResidualZ <= 0 || ResidualA < ResidualZ ||
113 (ResidualA == ResidualZ && ResidualA > 1) || ExEnergy <= 0.0) {
114 CoulombBarrier = ResidualMass = 0.0;
115 MaximalKineticEnergy = -1000.0*MeV;
116 EmissionProbability = 0.0;
120 CoulombBarrier = theCoulombBarrierPtr->
GetCoulombBarrier(ResidualA,ResidualZ,ExEnergy);
122 MaximalKineticEnergy = CalcMaximalKineticEnergy(FragmentMass + ExEnergy);
133 limit= CoulombBarrier;
135 limit = std::max(limit, FragmentMass - ResidualMass - EvaporatedMass);
139 if (MaximalKineticEnergy <= limit) EmissionProbability = 0.0;
142 EmissionProbability = theEvaporationProbabilityPtr->
143 EmissionProbability(*fragment, MaximalKineticEnergy);
148 return EmissionProbability;
159 G4double EvaporatedEnergy = GetKineticEnergy(theNucleus) + EvaporatedMass;
162 (std::sqrt((EvaporatedEnergy - EvaporatedMass)*
163 (EvaporatedEnergy + EvaporatedMass))));
170 ResidualMomentum -= EvaporatedMomentum;
177 G4double Efinal = ResidualMomentum.
e() + EvaporatedMomentum.
e();
179 if (std::abs(Efinal-theNucleus.
GetMomentum().
e()) > 1.0*keV) {
180 G4cout <<
"@@@@@@@@@@@@@@@@@@@@@ G4Evaporation Chanel: ENERGY @@@@@@@@@@@@@@@@" <<
G4endl;
182 <<Efinal/MeV <<
" MeV Delta: " << (Efinal-theNucleus.
GetMomentum().
e())/MeV
185 if (std::abs(Pfinal.
x()-theNucleus.
GetMomentum().
x()) > 1.0*keV ||
186 std::abs(Pfinal.
y()-theNucleus.
GetMomentum().
y()) > 1.0*keV ||
187 std::abs(Pfinal.
z()-theNucleus.
GetMomentum().
z()) > 1.0*keV ) {
188 G4cout <<
"@@@@@@@@@@@@@@@@@@@@@ G4Evaporation Chanel: MOMENTUM @@@@@@@@@@@@@@@@" <<
G4endl;
190 <<Pfinal/MeV <<
" MeV Delta: " << Pfinal-theNucleus.
GetMomentum().
vect()
195 theResult->push_back(EvaporatedFragment);
196 theResult->push_back(ResidualFragment);
202G4double G4EvaporationChannel::CalcMaximalKineticEnergy(
G4double NucleusTotalE)
206 ((NucleusTotalE-ResidualMass)*(NucleusTotalE+ResidualMass) + EvaporatedMass*EvaporatedMass)
207 /(2.0*NucleusTotalE) - EvaporatedMass;
215 Tmax=Tmax- CoulombBarrier;
232 if (MaximalKineticEnergy < 0.0) {
234 "G4EvaporationChannel::CalcKineticEnergy: maximal kinetic at the Coulomb barrier is less than 0");
236 G4double Rb = 4.0*theLevelDensityPtr->
237 LevelDensityParameter(ResidualA+theA,ResidualZ+theZ,MaximalKineticEnergy)*
238 MaximalKineticEnergy;
241 if (RbSqrt < 160.0) PEX1 = std::exp(-RbSqrt);
246 Rk = 1.0 + (1./RbSqrt)*std::log(RandNumber + (1.0-RandNumber)*PEX1);
252 Q1 = 1.0 + Beta/(MaximalKineticEnergy);
253 Q2 = Q1*std::sqrt(Q1);
256 FRk = (3.0*std::sqrt(3.0)/2.0)/Q2 * Rk * (Q1 - Rk*Rk);
260 G4double result = MaximalKineticEnergy * (1.0-Rk*Rk) + CoulombBarrier;
266 if(
useSICB) { V= CoulombBarrier; }
272 G4double NormalizedProbability(1.0);
300 NormalizedProbability =
309 std::ostringstream errOs;
310 errOs <<
"Bad option for energy sampling in evaporation" <<
G4endl;
320 G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta);
323 Magnitude*std::sin(Phi)*SinTheta,
std::vector< G4Fragment * > G4FragmentVector
G4DLLIMPORT std::ostream G4cout
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
G4FragmentVector * BreakUp(const G4Fragment &theNucleus)
virtual ~G4EvaporationChannel()
virtual G4double GetEmissionProbability(G4Fragment *fragment)
G4double ProbabilityDistributionFunction(const G4Fragment &aFragment, G4double K)
G4double GetGroundStateMass() const
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
static G4double GetNuclearMass(const G4double A, const G4double Z)
static G4PairingCorrection * GetInstance()
G4double GetPairingCorrection(G4int A, G4int Z) const
static G4Pow * GetInstance()
virtual G4double GetCoulombBarrier(G4int ARes, G4int ZRes, G4double U) const =0