52 myOwnFissionBarrier =
true;
55 myOwnFissionProbability =
true;
58 myOwnLevelDensity =
true;
60 maxKineticEnergy = fissionBarrier = fissionProbability = 0.0;
66 if (myOwnFissionBarrier)
delete theFissionBarrierPtr;
67 if (myOwnFissionProbability)
delete theFissionProbabilityPtr;
68 if (myOwnLevelDensity)
delete theLevelDensityPtr;
75 fissionProbability = 0.0;
77 if (
A >= 65 && Z > 16) {
83 maxKineticEnergy = exEnergy - fissionBarrier;
89 return fissionProbability;
103 if (U <= pcorr) {
return Fragment1; }
124 G4double FragmentsExcitationEnergy = 0.0;
125 G4double FragmentsKineticEnergy = 0.0;
131 A1 = FissionAtomicNumber(
A);
132 Z1 = FissionCharge(
A, Z, A1);
138 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
139 FragmentsExcitationEnergy = -1.0;
144 G4double Tmax = M + U - M1 - M2 - pcorr;
148 FragmentsExcitationEnergy = -1.0;
152 FragmentsKineticEnergy = FissionKineticEnergy(
A , Z,
163 FragmentsExcitationEnergy =
164 Tmax - FragmentsKineticEnergy + pcorr;
167 }
while (FragmentsExcitationEnergy < 0.0 && ++Trials < 100);
169 if (FragmentsExcitationEnergy <= 0.0) {
171 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
175 M1 += FragmentsExcitationEnergy * A1/
static_cast<G4double>(
A);
177 M2 += FragmentsExcitationEnergy * A2/
static_cast<G4double>(
A);
181 G4double etot1 = ((M - M2)*(M + M2) + M1*M1)/(2*M);
188 Fragment1 =
new G4Fragment( A1, Z1, FourMomentum1);
189 theNucleusMomentum -= FourMomentum1;
196G4CompetitiveFission::FissionAtomicNumber(
G4int A)
212 if (w > 1000.0 ) {
C2 = C2S; }
213 else if (w < 0.001) {
C2 = C2A; }
214 else {
C2 = std::max(C2A,C2S); }
226 G4double Mass1 = MassDistribution(As,A);
227 G4double Mass2 = MassDistribution(Am1,A);
229 G4double Mass4 = MassDistribution(Am2,A);
233 if (Mass2 > MassMax) { MassMax = Mass2; }
234 if (Mass3 > MassMax) { MassMax = Mass3; }
235 if (Mass4 > MassMax) { MassMax = Mass4; }
236 if (Mass5 > MassMax) { MassMax = Mass5; }
243 Pm = MassDistribution(xm,A);
263 G4double Xasym = LocalExp(y1) + LocalExp(y2)
264 + 0.5*(LocalExp(z1) + LocalExp(z2));
268 if (w > 1000) { res = Xsym; }
269 else if (w < 0.001) { res = Xasym; }
270 else { res = w*Xsym+Xasym; }
279 if (Af >= 134.0) { DeltaZ = -0.45; }
280 else if (Af <= (A-134.0)) { DeltaZ = 0.45; }
281 else { DeltaZ = -0.45*(Af-
A*0.5)/(134.0-A*0.5); }
287 theZ = G4RandGauss::shoot(Zmean,sigma);
289 }
while (theZ < 1.0 || theZ > (Z-1.0) || theZ > Af);
295G4CompetitiveFission::FissionKineticEnergy(
G4int A,
G4int Z,
302 G4int AfMax = std::max(Af1,Af2);
306 if (theParam.
GetW() <= 1000) {
309 Pas = 0.5*LocalExp(x1) + LocalExp(x2);
313 if (theParam.
GetW() >= 0.001) {
315 Ps = theParam.
GetW()*LocalExp(xs);
317 G4double Psy = (Pas + Ps > 0.0) ? Ps/(Pas+Ps) : 0.5;
322 G4double Xas = (PPas + PPsy > 0.0) ? PPas/(PPas+PPsy) : 0.5;
339 (AsymmetricRatio(A,
A11)+AsymmetricRatio(A,
A12))+
342 TaverageAfMax = (Eaverage + 12.5 * Xsy) * (PPas/ScaleFactor) *
348 TaverageAfMax = (Eaverage - 12.5*CLHEP::MeV*Xas)
349 *SymmetricRatio(A,
G4double(AfMax))/SymmetricRatio(A, As0);
350 ESigma = 8.0*CLHEP::MeV;
359 if (++i > 100)
return Eaverage;
361 }
while (KineticEnergy < Eaverage-3.72*ESigma ||
362 KineticEnergy > Eaverage+3.72*ESigma ||
363 KineticEnergy > Tmax);
370 if (myOwnFissionBarrier)
delete theFissionBarrierPtr;
371 theFissionBarrierPtr = aBarrier;
372 myOwnFissionBarrier =
false;
378 if (myOwnFissionProbability)
delete theFissionProbabilityPtr;
379 theFissionProbabilityPtr = aFissionProb;
380 myOwnFissionProbability =
false;
386 if (myOwnLevelDensity)
delete theLevelDensityPtr;
387 theLevelDensityPtr = aLevelDensity;
388 myOwnLevelDensity =
false;
double A(double temperature)
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
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetMomentum(const G4LorentzVector &value)
void SetZandA_asInt(G4int Znew, G4int Anew)
G4PairingCorrection * GetPairingCorrection()
static G4NuclearLevelData * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
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