82 if (isInitialised) {
return; }
114 G4cout <<
"### G4PreCompoundInterface::DeExcite Z=" << Z <<
" A=" <<
A
115 <<
" U(MeV)=" << U <<
G4endl;
117 if (!isActive || Z < minZ ||
A < minA ||
118 U < fLowLimitExc*A || U >
A*fHighLimitExc ||
120 PerformEquilibriumEmission(frag, res);
124 BreakUpFragment(frag, res);
128void G4PreCompoundInterface::BreakUpFragment(
G4Fragment& frag,
135 if (Z < minZ ||
A < minA || U < fLowLimitExc*
A) {
136 PerformEquilibriumEmission(frag, res);
140 const G4double ldfact = 3.0/CLHEP::pi2;
141 const G4double eperex = 20.0*CLHEP::MeV;
148 np = std::min(np,
A);
151 nz = std::min(std::min(nz, np), Z);
156 for (
G4int i=0; i<50; ++i) {
157 if (Z < minZ ||
A < minA || U < fLowLimitExc*
A) {
163 G4lrint(std::sqrt(ldfact*U*fNuclData->GetLevelDensity(Z,
A, U)));
165 G4cout <<
" 1st loop " << i <<
". Z=" << Z <<
" A=" <<
A
166 <<
" U(MeV)=" << U <<
" Npart=" << np <<
" Nch=" << nz
167 <<
" eqExcitationNumber=" << eqNum <<
G4endl;
169 if (np <= eqNum) {
break; }
173 G4bool isTransition =
false;
174 G4bool isEquilibrium =
false;
176 for (
G4int j=0; j<20; ++j) {
178 theTransition->CalculateProbability(frag);
179 G4double P1 = theTransition->GetTransitionProb1();
180 G4double P2 = theTransition->GetTransitionProb2();
181 G4double P3 = theTransition->GetTransitionProb3();
183 G4cout <<
" 2nd loop " << j <<
". Npart=" << np <<
" P1=" << P1
184 <<
" P2=" << P2 <<
" P3=" << P3 <<
G4endl;
186 if (np <= eqNum || P1 <= P2+P3) {
187 isEquilibrium =
true;
192 theEmission->GetTotalProbability(frag);
195 G4double totalProb = emissionProbability + transProbability;
200 theTransition->PerformTransition(frag);
201 isEquilibrium = (np <= eqNum);
203 isTransition =
false;
204 auto product = theEmission->PerformEmission(frag);
205 res->push_back(product);
214 if (!isTransition || isEquilibrium) {
break; }
216 if (isEquilibrium) {
break; }
218 PerformEquilibriumEmission(frag, res);
228 <<
"The GEANT4 precompound model is considered as an extension of the\n"
229 <<
"hadron kinetic model. It gives a possibility to extend the low energy range\n"
230 <<
"of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n"
231 <<
"provides a ”smooth” transition from kinetic stage of reaction described by the\n"
232 <<
"hadron kinetic model to the equilibrium stage of reaction described by the\n"
233 <<
"equilibrium deexcitation models.\n"
234 <<
"The initial information for calculation of pre-compound nuclear stage\n"
235 <<
"consists of the atomic mass number A, charge Z of residual nucleus, its\n"
236 <<
"four momentum P0 , excitation energy U and number of excitons n, which equals\n"
237 <<
"the sum of the number of particles p (from them p_Z are charged) and the number of\n"
239 <<
"At the preequilibrium stage of reaction, we follow the exciton model approach in ref. [1],\n"
240 <<
"taking into account the competition among all possible nuclear transitions\n"
241 <<
"with ∆n = +2, −2, 0 (which are defined by their associated transition probabilities) and\n"
242 <<
"the emission of neutrons, protons, deuterons, thritium and helium nuclei (also defined by\n"
243 <<
"their associated emission probabilities according to exciton model)\n"
245 <<
"[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n"
251 outFile <<
"description of precompound model as used with DeExcite()" <<
"\n";
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4GLOB_DLL std::ostream G4cout
G4double GetPrecoLowEnergy() const
G4double GetPrecoHighEnergy() const
G4bool PrecoDummy() const
G4int GetPrecoModelType() const
G4int GetNumberOfParticles() const
G4double GetExcitationEnergy() const
G4int GetNumberOfLambdas() const
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
void SetNumberOfParticles(G4int value)
G4int GetNumberOfCharged() const
static G4NuclearLevelData * GetInstance()
void ModelDescription(std::ostream &outFile) const override
void InitialiseModel() override
~G4PreCompoundInterface() override
G4ReactionProductVector * DeExcite(G4Fragment &aFragment) override
void DeExciteModelDescription(std::ostream &) const override
void BuildPhysicsTable(const G4ParticleDefinition &) override
G4ExcitationHandler * GetExcitationHandler() const
G4VPreCompoundModel(G4ExcitationHandler *ptr=nullptr, const G4String &modelName="PrecompoundModel")