53 myOwnFissionBarrier =
true;
56 myOwnFissionProbability =
true;
59 myOwnLevelDensity =
true;
61 maxKineticEnergy = fissionBarrier = fissionProbability = 0.0;
69 if (myOwnFissionBarrier)
delete theFissionBarrierPtr;
70 if (myOwnFissionProbability)
delete theFissionProbabilityPtr;
71 if (myOwnLevelDensity)
delete theLevelDensityPtr;
78 fissionProbability = 0.0;
80 if (
A >= 65 &&
Z > 16) {
86 maxKineticEnergy = exEnergy - fissionBarrier;
92 return fissionProbability;
106 if (U <= pcorr) {
return Fragment1; }
127 G4double FragmentsExcitationEnergy = 0.0;
128 G4double FragmentsKineticEnergy = 0.0;
134 A1 = FissionAtomicNumber(
A);
135 Z1 = FissionCharge(
A,
Z, A1);
141 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
142 FragmentsExcitationEnergy = -1.0;
151 FragmentsExcitationEnergy = -1.0;
155 FragmentsKineticEnergy = FissionKineticEnergy(
A ,
Z,
166 FragmentsExcitationEnergy =
167 Tmax - FragmentsKineticEnergy + pcorr;
170 }
while (FragmentsExcitationEnergy < 0.0 && ++Trials < 100);
172 if (FragmentsExcitationEnergy <= 0.0) {
174 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
178 M1 += FragmentsExcitationEnergy * A1/
static_cast<G4double>(
A);
180 M2 += FragmentsExcitationEnergy * A2/
static_cast<G4double>(
A);
184 G4double etot1 = ((
M - M2)*(
M + M2) + M1*M1)/(2*
M);
191 Fragment1 =
new G4Fragment( A1, Z1, FourMomentum1);
193 theNucleusMomentum -= FourMomentum1;
201G4CompetitiveFission::FissionAtomicNumber(
G4int A)
217 if (w > 1000.0 ) {
C2 = C2S; }
218 else if (w < 0.001) {
C2 = C2A; }
219 else {
C2 = std::max(C2A,C2S); }
232 G4double Mass2 = MassDistribution(Am1,
A);
234 G4double Mass4 = MassDistribution(Am2,
A);
238 if (Mass2 > MassMax) { MassMax = Mass2; }
239 if (Mass3 > MassMax) { MassMax = Mass3; }
240 if (Mass4 > MassMax) { MassMax = Mass4; }
241 if (Mass5 > MassMax) { MassMax = Mass5; }
248 Pm = MassDistribution(xm,
A);
268 G4double Xasym = LocalExp(y1) + LocalExp(y2)
269 + 0.5*(LocalExp(z1) + LocalExp(z2));
273 if (w > 1000) { res = Xsym; }
274 else if (w < 0.001) { res = Xasym; }
275 else { res = w*Xsym+Xasym; }
284 if (Af >= 134.0) { DeltaZ = -0.45; }
285 else if (Af <= (
A-134.0)) { DeltaZ = 0.45; }
286 else { DeltaZ = -0.45*(Af-
A*0.5)/(134.0-
A*0.5); }
292 theZ = G4RandGauss::shoot(Zmean,sigma);
294 }
while (theZ < 1.0 || theZ > (
Z-1.0) || theZ > Af);
300G4CompetitiveFission::FissionKineticEnergy(
G4int A,
G4int Z,
307 G4int AfMax = std::max(Af1,Af2);
311 if (theParam.
GetW() <= 1000) {
314 Pas = 0.5*LocalExp(x1) + LocalExp(x2);
318 if (theParam.
GetW() >= 0.001) {
320 Ps = theParam.
GetW()*LocalExp(xs);
322 G4double Psy = (Pas + Ps > 0.0) ? Ps/(Pas+Ps) : 0.5;
327 G4double Xas = (PPas + PPsy > 0.0) ? PPas/(PPas+PPsy) : 0.5;
344 (AsymmetricRatio(
A,
A11)+AsymmetricRatio(
A,
A12))+
347 TaverageAfMax = (Eaverage + 12.5 * Xsy) * (PPas/ScaleFactor) *
353 TaverageAfMax = (Eaverage - 12.5*CLHEP::MeV*Xas)
354 *SymmetricRatio(
A,
G4double(AfMax))/SymmetricRatio(
A, As0);
355 ESigma = 8.0*CLHEP::MeV;
364 if (++i > 100)
return Eaverage;
366 }
while (KineticEnergy < Eaverage-3.72*ESigma ||
367 KineticEnergy > Eaverage+3.72*ESigma ||
368 KineticEnergy > Tmax);
375 if (myOwnFissionBarrier)
delete theFissionBarrierPtr;
376 theFissionBarrierPtr = aBarrier;
377 myOwnFissionBarrier =
false;
383 if (myOwnFissionProbability)
delete theFissionProbabilityPtr;
384 theFissionProbabilityPtr = aFissionProb;
385 myOwnFissionProbability =
false;
391 if (myOwnLevelDensity)
delete theLevelDensityPtr;
392 theLevelDensityPtr = aLevelDensity;
393 myOwnLevelDensity =
false;
G4ThreeVector G4RandomDirection()
Hep3Vector boostVector() const
HepLorentzVector & boost(double, double, double)
void SetEmissionStrategy(G4VEmissionProbability *aFissionProb)
void SetLevelDensityParameter(G4VLevelDensityParameter *aLevelDensity)
G4double GetEmissionProbability(G4Fragment *theNucleus) override
void SetFissionBarrier(G4VFissionBarrier *aBarrier)
G4Fragment * EmittedFragment(G4Fragment *theNucleus) override
~G4CompetitiveFission() override
G4double GetAs(void) const
G4double GetSigma1(void) const
G4double GetW(void) const
G4double GetSigmaS(void) const
void DefineParameters(G4int A, G4int Z, G4double ExEnergy, G4double FissionBarrier)
G4double GetSigma2(void) const
G4double GetGroundStateMass() const
void SetZandA_asInt(G4int Znew, G4int Anew, G4int Lnew=0)
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
void SetMomentum(const G4LorentzVector &value)
G4PairingCorrection * GetPairingCorrection()
static G4NuclearLevelData * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
static G4int GetModelID(const G4int modelIndex)
static G4Pow * GetInstance()
G4double Z13(G4int Z) const
virtual G4double EmissionProbability(const G4Fragment &fragment, G4double anEnergy)
virtual G4double FissionBarrier(G4int A, G4int Z, G4double U) const =0