79 if (anA >= 65 && ExEnergy > 0.0) {
100 if(frag1) { theResult->push_back(frag1); }
101 theResult->push_back(frag0);
116 if (U <= pcorr) {
return Fragment1; }
137 G4double FragmentsExcitationEnergy = 0.0;
138 G4double FragmentsKineticEnergy = 0.0;
155 if (A2 < 1 || Z2 < 0 || Z2 > A2) {
156 FragmentsExcitationEnergy = -1.0;
165 FragmentsExcitationEnergy = -1.0;
181 FragmentsExcitationEnergy =
182 Tmax - FragmentsKineticEnergy+FissionPairingEnergy;
184 }
while (FragmentsExcitationEnergy < 0.0 && Trials++ < 100);
186 if (FragmentsExcitationEnergy <= 0.0) {
188 "G4CompetitiveFission::BreakItUp: Excitation energy for fragments < 0.0!");
192 M1 += FragmentsExcitationEnergy * A1/
static_cast<G4double>(
A);
194 M2 += FragmentsExcitationEnergy * A2/
static_cast<G4double>(
A);
198 G4double etot1 = (M*M - M2*M2 + M1*M1)/(2*M);
201 FourMomentum1.boost(theNucleusMomentum.boostVector());
204 Fragment1 =
new G4Fragment( A1, Z1, FourMomentum1);
205 theNucleusMomentum -= FourMomentum1;
234 if (w > 1000.0 ) C2 = C2S;
235 else if (w < 0.001) C2 = C2A;
255 if (Mass2 > MassMax) MassMax = Mass2;
256 if (Mass3 > MassMax) MassMax = Mass3;
257 if (Mass4 > MassMax) MassMax = Mass4;
258 if (Mass5 > MassMax) MassMax = Mass5;
283 std::exp(-0.5*(x-(A-theParam.
GetA2()))*(x-(A-theParam.
GetA2()))/
285 0.5*std::exp(-0.5*(x-theParam.
GetA1())*(x-theParam.
GetA1())/
287 0.5*std::exp(-0.5*(x-(A-theParam.
GetA1()))*(x-(A-theParam.
GetA1()))/
290 if (theParam.
GetW() > 1000)
return Xsym;
291 else if (theParam.
GetW() < 0.001)
return Xasym;
292 else return theParam.
GetW()*Xsym+Xasym;
301 if (Af >= 134.0) DeltaZ = -0.45;
302 else if (Af <= (A-134.0)) DeltaZ = 0.45;
303 else DeltaZ = -0.45*(Af-(A/2.0))/(134.0-(A/2.0));
310 }
while (theZ < 1.0 || theZ > (Z-1.0) || theZ > Af);
312 return static_cast<G4int>(theZ+0.5);
325 if (AfMax < (A/2.0)) AfMax = A - AfMax;
329 if (theParam.
GetW() > 1000) Pas = 0.0;
341 if (theParam.
GetW() < 0.001) Ps = 0.0;
343 Ps = theParam.
GetW()*std::exp(-0.5*(AfMax-theParam.
GetAs())*(AfMax-theParam.
GetAs())/
371 TaverageAfMax = (Eaverage + 12.5 * Xsy) * (PPas/ScaleFactor) *
379 TaverageAfMax = (Eaverage - 12.5*
MeV*Xas) * (PPsy/ScaleFactor) *
390 if (i++ > 100)
return Eaverage;
391 }
while (KineticEnergy < Eaverage-3.72*ESigma ||
392 KineticEnergy > Eaverage+3.72*ESigma ||
393 KineticEnergy > Tmax);
395 return KineticEnergy;
417 "G4CompetitiveFission::Ratio: A == 0!");
419 if (A11 >= A/2.0 && A11 <= (A00+10.0)) {
420 return 1.0-B1*((A11-
A00)/A)*((A11-
A00)/A);
422 return 1.0-B1*(10.0/
A)*(10.0/A)-2.0*(10.0/
A)*B1*((A11-A00-10.0)/
A);
431 G4double SinTheta = std::sqrt(1.0 - CosTheta*CosTheta);
434 Magnitude*std::sin(Phi)*SinTheta,
440 void G4CompetitiveFission::CheckConservation(
const G4Fragment & theInitialState,
447 G4FragmentVector::iterator h;
448 for (h = Result->begin(); h != Result->end(); h++) {
450 ProductsEnergy += tmp.e();
451 ProductsMomentum += tmp.vect();
452 ProductsA += (*h)->GetA_asInt();
453 ProductsZ += (*h)->GetZ_asInt();
456 if (ProductsA != theInitialState.
GetA_asInt()) {
457 G4cout <<
"!!!!!!!!!! Baryonic Number Conservation Violation !!!!!!!!!!"
459 G4cout <<
"G4CompetitiveFission: Baryon Number Conservation test for fission fragments"
462 <<
" Fragments A = " << ProductsA <<
" Diference --> "
465 if (ProductsZ != theInitialState.
GetZ_asInt()) {
466 G4cout <<
"!!!!!!!!!! Charge Conservation Violation !!!!!!!!!!" <<
G4endl;
467 G4cout <<
"G4CompetitiveFission.cc: Charge Conservation test for fission fragments"
470 <<
" Fragments Z = " << ProductsZ <<
" Diference --> "
471 << theInitialState.
GetZ() - ProductsZ <<
G4endl;
473 if (std::fabs(ProductsEnergy-theInitialState.
GetMomentum().e()) > 1.0*
keV) {
474 G4cout <<
"!!!!!!!!!! Energy Conservation Violation !!!!!!!!!!" <<
G4endl;
475 G4cout <<
"G4CompetitiveFission.cc: Energy Conservation test for fission fragments"
478 <<
" Fragments E = " << ProductsEnergy/
MeV <<
" MeV Diference --> "
479 << (theInitialState.
GetMomentum().e() - ProductsEnergy)/
MeV <<
" MeV" << G4endl;
481 if (std::fabs(ProductsMomentum.x()-theInitialState.
GetMomentum().x()) > 1.0*
keV ||
482 std::fabs(ProductsMomentum.y()-theInitialState.
GetMomentum().y()) > 1.0*
keV ||
483 std::fabs(ProductsMomentum.z()-theInitialState.
GetMomentum().z()) > 1.0*
keV) {
484 G4cout <<
"!!!!!!!!!! Momentum Conservation Violation !!!!!!!!!!" <<
G4endl;
485 G4cout <<
"G4CompetitiveFission.cc: Momentum Conservation test for fission fragments"
488 <<
" Fragments P = " << ProductsMomentum <<
" MeV Diference --> "
static G4Pow * GetInstance()
ThreeVector shoot(const G4int Ap, const G4int Af)
G4double GetSigma2(void) const
G4double AsymmetricRatio(G4int A, G4double A11)
static G4double GetNuclearMass(const G4double A, const G4double Z)
G4double MaximalKineticEnergy
static const G4double * P1[nN]
G4double GetSigma1(void) const
CLHEP::Hep3Vector G4ThreeVector
G4double MassDistribution(G4double x, G4double A, const G4FissionParameters &theParam)
virtual G4double GetEmissionProbability(G4Fragment *theNucleus)
G4int FissionCharge(G4double A, G4double Z, G4double Af)
G4VEmissionProbability * theFissionProbabilityPtr
virtual G4double FissionBarrier(G4int A, G4int Z, const G4double U)=0
G4int FissionAtomicNumber(G4int A, const G4FissionParameters &theParam)
G4bool MyOwnFissionProbability
virtual G4FragmentVector * BreakUp(const G4Fragment &theNucleus)
virtual ~G4CompetitiveFission()
G4PairingCorrection * pairingCorrection
G4GLOB_DLL std::ostream G4cout
G4double Z13(G4int Z) const
G4double GetSigmaS(void) const
const G4LorentzVector & GetMomentum() const
void SetMomentum(const G4LorentzVector &value)
virtual G4Fragment * EmittedFragment(G4Fragment *theNucleus)
std::vector< G4Fragment * > G4FragmentVector
G4bool MyOwnFissionBarrier
G4double Ratio(G4double A, G4double A11, G4double B1, G4double A00)
G4double SymmetricRatio(G4int A, G4double A11)
G4double GetGroundStateMass() const
G4double LevelDensityParameter
G4VLevelDensityParameter * theLevelDensityPtr
static const G4double A[nN]
G4double GetA1(void) const
G4VFissionBarrier * theFissionBarrierPtr
G4ThreeVector IsotropicVector(G4double Magnitude=1.0)
static G4PairingCorrection * GetInstance()
G4double GetFissionPairingCorrection(G4int A, G4int Z) const
G4double GetAs(void) const
G4double FissionProbability
T max(const T t1, const T t2)
brief Return the largest of the two arguments
void SetZandA_asInt(G4int Znew, G4int Anew)
G4double FissionKineticEnergy(G4int A, G4int Z, G4double Af1, G4double Zf1, G4double Af2, G4double Zf2, G4double U, G4double Tmax, const G4FissionParameters &theParam)
virtual G4double LevelDensityParameter(G4int A, G4int Z, G4double U) const =0
static const G4double * P2[nN]
G4double GetW(void) const
virtual G4double EmissionProbability(const G4Fragment &fragment, const G4double anEnergy)=0
G4ThreeVector G4ParticleMomentum
G4double GetExcitationEnergy() const
CLHEP::HepLorentzVector G4LorentzVector
G4double GetA2(void) const