44 const G4double G4FermiConfigurationList::Kappa = 6.0;
45 const G4double G4FermiConfigurationList::r0 = 1.3*CLHEP::fermi;
51 Coef = 0.6*(CLHEP::elm_coupling/r0)/g4pow->
Z13(1+
G4int(Kappa));
52 ConstCoeff = g4pow->
powN(r0/
hbarc,3)*Kappa*std::sqrt(2.0/
pi)/3.0;
56 NormalizedWeights.resize(nmax,0.0);
63 G4FermiConfigurationList::CoulombBarrier(
64 const std::vector<const G4VFermiFragment*>& conf)
70 size_t nn = conf.size();
71 for (
size_t i=0; i<
nn; ++i) {
78 CoulombEnergy -= SumZ*SumZ/g4pow->
Z13(SumA);
79 return -Coef * CoulombEnergy;
83 G4FermiConfigurationList::DecayProbability(
G4int A,
G4double TotalE,
94 std::set<G4int> combSet;
95 std::multiset<G4int> combmSet;
97 const std::vector<const G4VFermiFragment*> flist =
101 G4int K = flist.size();
103 for (
G4int i=0; i<K; ++i) {
104 G4int a = flist[i]->GetA();
107 G4double mass = flist[i]->GetFragmentMass();
111 S_n *= flist[i]->GetPolarization();
112 KineticEnergy -= mass + flist[i]->GetExcitationEnergy();
116 KineticEnergy -= CoulombBarrier(flist);
117 if (KineticEnergy <= 0.0) {
return 0.0; }
119 G4double MassFactor = ProdMass/SumMass;
120 MassFactor *= std::sqrt(MassFactor);
155 Gamma *= std::sqrt(
pi)/g4pow->
powZ(2,n);
162 for (std::set<G4int>::iterator itr = combSet.begin();
163 itr != combSet.end(); ++itr)
165 for (
G4int ni = combmSet.count(*itr); ni > 1; ni--) { G_n *= ni; }
168 G4double Weight = Coeff * MassFactor * (S_n / G_n) / Gamma;
169 Weight *= std::sqrt(g4pow->
powN(KineticEnergy,3*(K-1)))/KineticEnergy;
179 const std::vector<const G4VFermiFragment*>* conf =
185 size_t nn = conf->size();
187 theResult->push_back(
new G4Fragment(theNucleus));
193 std::vector<G4double> mr;
195 for(
size_t i=0; i<
nn; ++i) {
196 mr.push_back( (*conf)[i]->GetTotalEnergy() );
198 std::vector<G4LorentzVector*>* mom = thePhaseSpace.
Decay(M,mr);
204 size_t nmom = mom->size();
208 for (
size_t j=0; j<nmom; ++j) {
212 FourMomentum->
boost(boostVector);
216 size_t nfrag = fragment->size();
217 for (
size_t k=0; k<nfrag; ++k) { theResult->push_back((*fragment)[k]); }
228 const std::vector<const G4VFermiFragment*>*
231 std::vector<const G4VFermiFragment*>* res =
232 new std::vector<const G4VFermiFragment*>;
233 const std::vector<G4FermiConfiguration*>* conflist =
235 if(!conflist) {
return res; }
236 size_t nn = conflist->size();
242 NormalizedWeights.resize(nmax,0.0);
245 for(
size_t i=0; i<
nn; ++i) {
246 prob += DecayProbability(A, mass, (*conflist)[i]);
247 NormalizedWeights[i] = prob;
250 for(idx=0; idx<
nn; ++idx) {
251 if(NormalizedWeights[idx] >= prob) {
break; }
254 const std::vector<const G4VFermiFragment*> flist =
255 (*conflist)[idx]->GetFragmentList();
256 size_t nf = flist.size();
257 for(
size_t i=0; i<nf; ++i) { res->push_back(flist[i]); }
static G4Pow * GetInstance()
Hep3Vector boostVector() const
G4double powN(G4double x, G4int n) const
G4FermiConfigurationList()
const std::vector< const G4VFermiFragment * > & GetFragmentList()
G4FragmentVector * GetFragments(const G4Fragment &theNucleus)
std::vector< G4LorentzVector * > * Decay(const G4double, const std::vector< G4double > &) const
G4double Z13(G4int Z) const
const G4LorentzVector & GetMomentum() const
HepLorentzVector & boost(double, double, double)
~G4FermiConfigurationList()
std::vector< G4Fragment * > G4FragmentVector
const std::vector< G4FermiConfiguration * > * GetConfigurationList(G4int Z, G4int A, G4double mass)
G4double powZ(G4int Z, G4double y) const
static G4FermiFragmentsPool * Instance()