73 useSCO(false),isInitialised(false),minZ(3),minA(5)
80 fLevelDensity = fLimitEnergy = 0.0;
103 if(isInitialised) {
return; }
104 isInitialised =
true;
140 if(primary != neutron && primary != proton) {
142 ed <<
"G4PreCompoundModel is used for ";
151 if(primary == proton) { Zp = 1; }
176 for(G4ReactionProductVector::iterator i= result->begin();
177 i != result->end(); ++i)
181 (*i)->GetTotalEnergy(),
182 (*i)->GetMomentum());
207 if ((Z < minZ && A < minA) || Eex < fLimitEnergy*A) {
208 PerformEquilibriumEmission(aFragment, Result);
214 static const G4int countmax = 1000;
218 G4int EquilibriumExcitonNumber =
229 G4bool ThereIsTransition =
false;
245 if (test <= EquilibriumExcitonNumber) { go_ahead=
true; }
248 if (useSCO && go_ahead)
256 G4double TotalTransitionProbability =
267 if(!go_ahead || P1 <= P2+P3 ||
272 PerformEquilibriumEmission(aFragment,Result);
282 PerformEquilibriumEmission(aFragment,Result);
294 G4double TotalProbability = TotalEmissionProbability
295 + TotalTransitionProbability;
298 if (TotalProbability*
G4UniformRand() > TotalEmissionProbability)
302 ThereIsTransition =
true;
310 ThereIsTransition =
false;
315 }
while (ThereIsTransition);
318 if(count >= countmax) {
320 ed <<
"G4PreCompoundModel loop over " << countmax <<
" iterations; "
321 <<
"current G4Fragment: \n" << aFragment;
324 PerformEquilibriumEmission(aFragment, Result);
337 PrintWarning(
"UseHETCEmission");
342 PrintWarning(
"UseDefaultEmission");
347 PrintWarning(
"UseGNASHTransition");
352 PrintWarning(
"UseDefaultTransition");
357 PrintWarning(
"UseOPTxs");
362 PrintWarning(
"UseSICB");
367 PrintWarning(
"UseNGB");
372 PrintWarning(
"UseSCO");
377 PrintWarning(
"UseCEMtr");
380 void G4PreCompoundModel::PrintWarning(
const G4String& mname)
383 ed <<
"Obsolete method of the preCompound model is called: "
384 << mname <<
"() \n Instead a corresponding method of "
385 <<
"G4DeexPrecoParameters class should be used";
397 <<
"The GEANT4 precompound model is considered as an extension of the\n"
398 <<
"hadron kinetic model. It gives a possibility to extend the low energy range\n"
399 <<
"of the hadron kinetic model for nucleon-nucleus inelastic collision and it \n"
400 <<
"provides a ”smooth” transition from kinetic stage of reaction described by the\n"
401 <<
"hadron kinetic model to the equilibrium stage of reaction described by the\n"
402 <<
"equilibrium deexcitation models.\n"
403 <<
"The initial information for calculation of pre-compound nuclear stage\n"
404 <<
"consists of the atomic mass number A, charge Z of residual nucleus, its\n"
405 <<
"four momentum P0 , excitation energy U and number of excitons n, which equals\n"
406 <<
"the sum of the number of particles p (from them p_Z are charged) and the number of\n"
408 <<
"At the preequilibrium stage of reaction, we follow the exciton model approach in ref. [1],\n"
409 <<
"taking into account the competition among all possible nuclear transitions\n"
410 <<
"with ∆n = +2, −2, 0 (which are defined by their associated transition probabilities) and\n"
411 <<
"the emission of neutrons, protons, deutrons, thritium and helium nuclei (also defined by\n"
412 <<
"their associated emission probabilities according to exciton model)\n"
414 <<
"[1] K.K. Gudima, S.G. Mashnik, V.D. Toneev, Nucl. Phys. A401 329 (1983)\n"
420 outFile <<
"description of precompound model as used with DeExcite()" <<
"\n";
G4double G4ParticleHPJENDLHEData::G4double result
virtual void PerformTransition(G4Fragment &aFragment)=0
void UseDefaultEmission()
static G4double GetNuclearMass(const G4double A, const G4double Z)
virtual ~G4PreCompoundModel()
static const G4double * P1[nN]
std::ostringstream G4ExceptionDescription
G4bool NeverGoBack() const
G4double GetPrecoLowEnergy() const
static constexpr double pi2
virtual void ModelDescription(std::ostream &outFile) const final
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
virtual void DeExciteModelDescription(std::ostream &outFile) const final
G4double GetTransitionProb2() const
void UseGNASHTransition()
G4double GetLevelDensity() const
const G4String & GetParticleName() const
G4int GetMinAForPreco() const
virtual void BuildPhysicsTable(const G4ParticleDefinition &) final
void SetStatusChange(G4HadFinalStateStatus aS)
void SetExcitationHandler(G4ExcitationHandler *ptr)
std::vector< G4ReactionProduct * > G4ReactionProductVector
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
G4ExcitationHandler * GetExcitationHandler() const
double A(double temperature)
G4bool UseSoftCutoff() const
void UseDefaultTransition()
const G4ParticleDefinition * GetDefinition() const
void UseCEMtr(G4bool use)
G4double GetGlobalTime() const
G4DeexPrecoParameters * GetParameters()
static G4Proton * Proton()
static G4Neutron * Neutron()
G4double GetTransitionProb1() const
G4int GetMinZForPreco() const
const G4LorentzVector & Get4Momentum() const
G4int GetPrecoModelType() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4double CalculateProbability(const G4Fragment &aFragment)=0
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4ReactionProduct * PerformEmission(G4Fragment &aFragment)
void SetCreationTime(G4double time)
G4int GetNumberOfExcitons() const
virtual void InitialiseModel() final
static const G4double * P2[nN]
void AddSecondary(G4DynamicParticle *aP, G4int mod=-1)
G4double GetTransitionProb3() const
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment) final
static G4NuclearLevelData * GetInstance()
G4double GetExcitationEnergy() const
virtual G4HadFinalState * ApplyYourself(const G4HadProjectile &thePrimary, G4Nucleus &theNucleus) final
G4double GetTotalProbability(const G4Fragment &aFragment)
CLHEP::HepLorentzVector G4LorentzVector
G4PreCompoundModel(G4ExcitationHandler *ptr=nullptr)