104 if (thePreFragment == 0)
106 G4cout <<
"G4PreCompoundEmission::PerformEmission : "
107 <<
"I couldn't choose a fragment\n"
108 <<
"while trying to de-excite\n"
117 G4double kinEnergyOfEmittedFragment =
124 if(kinEnergyOfEmittedFragment < 0.0) { kinEnergyOfEmittedFragment = 0.0; }
134 EmittedMass + kinEnergyOfEmittedFragment);
138 Emitted4Momentum.boost(Rest4Momentum.boostVector());
146 Rest4Momentum -= Emitted4Momentum;
157 thePreFragment->
GetA());
160 thePreFragment->
GetZ());
195 G4double Eav = 2*p*(p+1)/((p+h)*gg);
201 G4double w_num =
rho(p+1, h, gg, Uf, fFermiEnergy);
203 if (w_num > 0.0 && w_den > 0.0)
205 Eav *= (w_num/w_den);
206 Eav += - Uf/(p+h) + fFermiEnergy;
227 an = 3*std::sqrt((ProjEnergy+fFermiEnergy)*Eeff)/(zeta*Eav);
230 if ( ne > 1 ) { an /= (
G4double)ne; }
233 if ( an > 10. ) { an = 10.; }
240 if(an < 0.1) { cost = 1. - 2*random; }
243 cost = 1. +
G4Log(1-random*(1-exp2an))/
an;
244 if(cost > 1.) { cost = 1.; }
245 else if(cost < -1.) {cost = -1.; }
254 G4double sint = std::sqrt((1.0-cost)*(1.0+cost));
268 G4double Aph = (p*p + h*h + p - 3.0*h)/(4.0*gg);
271 if ( E - Aph < 0.0) {
return 0.0; }
283 if(logt3 > logmax) { logt3 = logmax; }
289 for(
G4int j=1; j<=h; ++j)
292 if(Eeff < 0.0) {
break; }
295 logt3 = (p+h-1) *
G4Log( Eeff) + logConst;
296 if(logt3 > logmax) { logt3 = logmax; }
297 tot += t1*t2*
G4Exp(logt3);
static G4Pow * GetInstance()
G4ReactionProduct * GetReactionProduct() const
CLHEP::Hep3Vector G4ThreeVector
std::vector< G4VPreCompoundFragment * > * GetFragmentVector()
void AngularDistribution(G4VPreCompoundFragment *theFragment, const G4Fragment &aFragment, G4double KineticEnergy)
G4int GetNumberOfParticles() const
void SetVector(pcfvector *avector)
G4double rho(G4int p, G4int h, G4double gg, G4double E, G4double Ef) const
G4double GetBindingEnergy() const
G4int GetNumberOfHoles() const
void SetMomentum(const G4LorentzVector &value)
G4GLOB_DLL std::ostream G4cout
const G4LorentzVector & GetMomentum() const
void SetMomentum(const G4LorentzVector &value)
G4ThreeVector theFinalMomentum
G4double GetFermiEnergy()
G4PreCompoundFragmentVector * theFragmentsVector
void SetNumberOfParticles(G4int value)
G4VPreCompoundEmissionFactory * theFragmentsFactory
G4double G4Log(G4double x)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4VPreCompoundFragment * ChooseFragment()
G4double GetNuclearMass() const
G4ReactionProduct * PerformEmission(G4Fragment &aFragment)
G4int GetNumberOfExcitons() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4double logfactorial(G4int Z) const
void SetZandA_asInt(G4int Znew, G4int Anew)
void SetNumberOfCharged(G4int value)
virtual G4double GetKineticEnergy(const G4Fragment &aFragment)=0
G4int GetNumberOfCharged() const
G4double GetLevelDensity()
G4double GetExcitationEnergy() const
CLHEP::HepLorentzVector G4LorentzVector