44 Coef = ConstCoeff = 0.0;
47 NormalizedWeights.resize(nmax,0.0);
59 if(thePhaseSpace !=
nullptr) {
return; }
76 G4double G4FermiBreakUp::CoulombBarrier(
77 const std::vector<const G4VFermiFragment*>* conf)
83 size_t nn = conf->size();
84 for (
size_t i=0; i<
nn; ++i) {
85 G4int z = (*conf)[i]->GetZ();
86 G4int a = (*conf)[i]->GetA();
91 CoulombEnergy -= SumZ*SumZ/g4calc->
Z13(SumA);
92 return -Coef * CoulombEnergy;
101 const std::vector<const G4VFermiFragment*>* conf =
107 theResult->push_back(theNucleus);
111 size_t nn = conf->size();
115 theResult->push_back(theNucleus);
123 (*conf)[0]->FillFragment(theResult, fourMomentum);
129 for(
size_t i=0; i<
nn; ++i) {
130 massRes.push_back( (*conf)[i]->GetTotalEnergy() );
132 std::vector<G4LorentzVector*>* mom = thePhaseSpace->
Decay(M, massRes);
138 for (
size_t j=0; j<
nn; ++j) {
139 (*mom)[j]->boost(boostVector);
140 (*conf)[j]->FillFragment(theResult, *((*mom)[j]));
148 const std::vector<const G4VFermiFragment*>*
151 const std::vector<const G4VFermiFragment*>* res = 0;
153 const std::vector<const G4FermiConfiguration*>* conflist =
155 if(!conflist) {
return res; }
156 size_t nn = conflist->size();
162 NormalizedWeights.resize(nmax,0.0);
165 for(
size_t i=0; i<
nn; ++i) {
166 prob += DecayProbability(A, mass, (*conflist)[i]);
167 NormalizedWeights[i] = prob;
170 for(idx=0; idx<
nn; ++idx) {
171 if(NormalizedWeights[idx] >= prob) {
break; }
175 res = (*conflist)[idx]->GetFragmentList();
193 const std::vector<const G4VFermiFragment*>* flist =
197 size_t K = flist->size();
198 if(K > frag.size()) { frag.resize(K, 0); }
200 for (
size_t i=0; i<K; ++i) {
201 frag[i] = (*flist)[i];
203 ((*flist)[i]->GetFragmentMass() + (*flist)[i]->GetExcitationEnergy());
207 KineticEnergy -= CoulombBarrier(flist);
208 if (KineticEnergy <= 0.0) {
return 0.0; }
217 for (
size_t i=0; i<K; ++i) {
218 G4double mass = (*flist)[i]->GetFragmentMass();
221 S_n *= (*flist)[i]->GetPolarization();
224 G4double MassFactor = ProdMass/SumMass;
225 MassFactor *= std::sqrt(MassFactor);
238 Energ = g4calc->
powN(Energ, N);
249 Energ = g4calc->
powN(Energ, n1)*std::sqrt(Energ);
255 for(
size_t i=0; i<K-1; ++i) {
258 for(
size_t j=i+1; j<K; ++j) {
259 if(frag[i] == frag[j]) {
264 if(1 < nf) { G_n *= g4calc->
factorial(nf); }
268 G4double Weight = Coeff*MassFactor*S_n*Energ/(G_n*Gamma*KineticEnergy);
static G4Pow * GetInstance()
Hep3Vector boostVector() const
G4double powN(G4double x, G4int n) const
static constexpr double hbarc
static constexpr double twopi
G4bool IsApplicable(G4int Z, G4int A, G4double mass) const
G4double Z13(G4int Z) const
double A(double temperature)
const G4LorentzVector & GetMomentum() const
std::vector< G4Fragment * > G4FragmentVector
G4double factorial(G4int Z) const
virtual ~G4FermiBreakUp()
virtual G4bool IsApplicable(G4int Z, G4int A, G4double mass) const final
std::vector< G4LorentzVector * > * Decay(G4double parent_mass, const std::vector< G4double > &fragment_masses) const
virtual void BreakFragment(G4FragmentVector *, G4Fragment *theNucleus) final
virtual void Initialise() final
static constexpr double fermi
static constexpr double elm_coupling
static constexpr double pi
static G4FermiFragmentsPool * Instance()
const std::vector< const G4VFermiFragment * > * GetFragmentList() const
const std::vector< const G4FermiConfiguration * > * GetConfigurationList(G4int Z, G4int A, G4double mass) const
static constexpr double pi
const G4FermiPhaseSpaceDecay * GetFermiPhaseSpaceDecay() const