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)