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
std::vector< ExP01TrackerHit * > a
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