67 outFile <<
"G4LFission is one of the Low Energy Parameterized\n"
68 <<
"(LEP) models used to implement neutron-induced fission of\n"
69 <<
"nuclei. It is a re-engineered version of the GHEISHA code\n"
70 <<
"of H. Fesefeldt which emits neutrons and gammas but no\n"
71 <<
"nuclear fragments. The model is applicable to all incident\n"
72 <<
"neutron energies.\n";
75void G4LFission::init()
80 spneut[0] = std::exp(-xx/0.965)*(std::exp(xxx) - std::exp(-xxx))/2.;
81 for (i = 2; i <= 10; i++) {
83 xxx = std::sqrt(2.29*xx);
84 spneut[i-1] = spneut[i-2] + std::exp(-xx/0.965)*(std::exp(xxx) - std::exp(-xxx))/2.;
86 for (i = 1; i <= 10; i++) {
87 spneut[i-1] = spneut[i-1]/spneut[9];
89 " spneut=" << spneut[i-1] <<
G4endl;
112 G4cout <<
"G4LFission:ApplyYourself: incident particle:" <<
G4endl;
123 G4cout <<
"G4LFission:ApplyYourself: material:" <<
G4endl;
126 G4cout <<
"atomic mass " <<
131 E0 = std::sqrt(std::abs(E02));
132 if (E02 < 0) E0 = -E0;
145 if (e1 < 1.) e1 = 1.;
148 G4double avern = 2.569 + 0.559*std::log(e1);
151 if (!photofission) avern = 2.569 + 0.900*std::log(e1);
154 G4double averg = 9.500 + 0.600*std::log(e1);
156 G4double ran = G4RandGauss::shoot();
158 G4int nn =
static_cast<G4int>(avern + ran*1.23 + 0.5);
159 ran = G4RandGauss::shoot();
161 G4int ng =
static_cast<G4int>(averg + ran*3. + 0.5);
170 for (i = 1; i <= nn; i++) {
173 for (j = 1; j <= 10; j++) {
174 if (ran < spneut[j-1])
goto label12;
189 for (i = 1; i <= ng; i++) {
191 G4double ekin = -0.87*std::log(ran);
203 for (i = 1; i <= nn + ng; i++) {
207 G4double sint = std::sqrt(std::abs(1. - cost*cost));
213 G4double px = pp*sint*std::sin(phi);
214 G4double py = pp*sint*std::cos(phi);
222 a = (a/(E + E0) - e)/E0;
227 G4double p2 = px*px + py*py + pz*pz;
229 e = std::sqrt(e0*e0 + p2);
252 if (ia < 1)
return 0;
254 if (iz < 0)
return 0;
255 if (iz > ia)
return 0;
258 if (iz == 0)
return rmn;
259 if (iz == 1)
return rmp + rmel;
261 else if (ia == 2 && iz == 1) {
264 else if (ia == 4 && iz == 2) {
268 G4double mass = (A - Z)*rmn + Z*rmp + Z*rmel - 15.67*A
269 + 17.23*std::pow(A, 2./3.)
270 + 93.15*(A/2. - Z)*(A/2. - Z)/A
271 + 0.6984523*Z*Z/std::pow(A, 1./3.);
272 G4int ipp = (ia - iz)%2;
274 if (ipp == izz) mass = mass + (ipp + izz -1)*12.*std::pow(A, -0.5);
282 return std::pair<G4double, G4double>(5*perCent,250*GeV);
G4ThreeVector G4ParticleMomentum
G4DLLIMPORT std::ostream G4cout
static G4Alpha * AlphaDefinition()
static G4Deuteron * DeuteronDefinition()
void SetMomentumDirection(const G4ThreeVector &aDirection)
G4ParticleDefinition * GetDefinition() const
G4double GetTotalEnergy() const
G4double GetTotalMomentum() const
void SetKineticEnergy(G4double aEnergy)
static G4Electron * ElectronDefinition()
static G4Gamma * GammaDefinition()
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP)
G4HadSecondary * GetSecondary(size_t i)
G4double GetTotalMomentum() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4double GetTotalEnergy() const
G4DynamicParticle * GetParticle()
G4HadFinalState theParticleChange
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4LFission(const G4String &name="G4LFission")
virtual const std::pair< G4double, G4double > GetFatalEnergyCheckLevels() const
virtual void ModelDescription(std::ostream &outFile) const
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
static G4double Atomas(const G4double A, const G4double Z)
static G4Neutron * NeutronDefinition()
G4double GetPDGMass() const
G4double GetPDGCharge() const
static G4Proton * ProtonDefinition()