103 if(isInitialised) {
return; }
104 isInitialised =
true;
139 if(primary != neutron && primary != proton) {
141 ed <<
"G4PreCompoundModel is used for ";
150 if(primary == proton) { Zp = 1; }
178 for(
auto const & prod : *result) {
180 prod->GetTotalEnergy(),
181 prod->GetMomentum());
183 G4double time = std::max(prod->GetFormationTime(), 0.0);
184 aNew.
SetTime(timePrimary + time);
210 if (!isActive || (Z < minZ &&
A < minA) ||
211 U < fLowLimitExc*A || U >
A*fHighLimitExc ||
213 PerformEquilibriumEmission(aFragment, Result);
219 const G4double ldfact = 12.0/CLHEP::pi2;
220 const G4int countmax = 1000;
227 G4int eqExcitonNumber =
237 G4bool isTransition =
false;
252 G4bool go_ahead = (ne <= eqExcitonNumber);
255 if (useSCO && go_ahead) {
274 if(!go_ahead || P1 <= P2+P3 || Z < minZ ||
A < minA ||
275 U <= fLowLimitExc*A || U >
A*fHighLimitExc ||
278 PerformEquilibriumEmission(aFragment,Result);
288 G4double TotalProbability = emissionProbability + transProbability;
291 if (TotalProbability*
G4UniformRand() > emissionProbability) {
300 isTransition =
false;
304 }
while (isTransition);
307 if(count >= countmax) {
309 ed <<
"G4PreCompoundModel loop over " << countmax <<
" iterations; "
310 <<
"current G4Fragment: \n" << aFragment;
313 PerformEquilibriumEmission(aFragment, Result);
327 <<
"The GEANT4 precompound model is considered as an extension of the\n"
328 <<
"hadron kinetic model. It gives a possibility to extend the low energy range\n"
329 <<
"of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n"
330 <<
"provides a ”smooth” transition from kinetic stage of reaction described by the\n"
331 <<
"hadron kinetic model to the equilibrium stage of reaction described by the\n"
332 <<
"equilibrium deexcitation models.\n"
333 <<
"The initial information for calculation of pre-compound nuclear stage\n"
334 <<
"consists of the atomic mass number A, charge Z of residual nucleus, its\n"
335 <<
"four momentum P0 , excitation energy U and number of excitons n, which equals\n"
336 <<
"the sum of the number of particles p (from them p_Z are charged) and the number of\n"
338 <<
"At the preequilibrium stage of reaction, we follow the exciton model approach in ref. [1],\n"
339 <<
"taking into account the competition among all possible nuclear transitions\n"
340 <<
"with ∆n = +2, −2, 0 (which are defined by their associated transition probabilities) and\n"
341 <<
"the emission of neutrons, protons, deuterons, thritium and helium nuclei (also defined by\n"
342 <<
"their associated emission probabilities according to exciton model)\n"
344 <<
"[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n"
352 outFile <<
"description of precompound model as used with DeExcite()" <<
"\n";
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
G4double GetPrecoLowEnergy() const
G4bool UseSoftCutoff() const
G4double GetPrecoHighEnergy() const
G4bool PrecoDummy() const
G4int GetMinAForPreco() const
G4bool NeverGoBack() const
G4int GetMinZForPreco() const
G4int GetPrecoModelType() const
G4double GetExcitationEnergy() const
void SetCreatorModelID(G4int value)
void SetCreationTime(G4double time)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
G4int GetNumberOfExcitons() const
G4int GetNumberOfLambdas() const
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
void SetStatusChange(G4HadFinalStateStatus aS)
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double GetGlobalTime() const
void SetTime(G4double aT)
void SetCreatorModelID(G4int id)
static G4Neutron * Neutron()
G4double GetLevelDensity(G4int Z, G4int A, G4double U)
G4DeexPrecoParameters * GetParameters()
static G4NuclearLevelData * GetInstance()
static G4double GetNuclearMass(const G4double A, const G4double Z)
const G4String & GetParticleName() const
static G4int GetModelID(const G4int modelIndex)
G4ReactionProduct * PerformEmission(G4Fragment &aFragment)
G4double GetTotalProbability(const G4Fragment &aFragment)
virtual ~G4PreCompoundModel()
virtual void ModelDescription(std::ostream &outFile) const final
virtual void InitialiseModel() final
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus) final
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment) final
virtual void DeExciteModelDescription(std::ostream &outFile) const final
virtual void BuildPhysicsTable(const G4ParticleDefinition &) final
G4PreCompoundModel(G4ExcitationHandler *ptr=nullptr)
static G4Proton * Proton()
G4ExcitationHandler * GetExcitationHandler() const
void SetExcitationHandler(G4ExcitationHandler *ptr)
G4double GetTransitionProb3() const
virtual G4double CalculateProbability(const G4Fragment &aFragment)=0
virtual void PerformTransition(G4Fragment &aFragment)=0
G4double GetTransitionProb2() const
void UseCEMtr(G4bool use)
G4double GetTransitionProb1() const