Geant4  10.03.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4PhotonEvaporation Class Reference

#include <G4PhotonEvaporation.hh>

Inheritance diagram for G4PhotonEvaporation:
Collaboration diagram for G4PhotonEvaporation:

Public Member Functions

 G4PhotonEvaporation (G4GammaTransition *ptr=nullptr)
 
virtual ~G4PhotonEvaporation ()
 
virtual void Initialise () final
 
virtual G4FragmentEmittedFragment (G4Fragment *theNucleus) final
 
virtual G4bool BreakUpChain (G4FragmentVector *theResult, G4Fragment *theNucleus) final
 
G4FragmentVectorBreakItUp (const G4Fragment &theNucleus)
 
virtual G4double GetEmissionProbability (G4Fragment *theNucleus) final
 
virtual G4double GetFinalLevelEnergy (G4int Z, G4int A, G4double energy) final
 
virtual G4double GetUpperLevelEnergy (G4int Z, G4int A) final
 
void SetGammaTransition (G4GammaTransition *)
 
void SetMaxHalfLife (G4double)
 
virtual void SetICM (G4bool)
 
virtual void RDMForced (G4bool)
 
void SetVerboseLevel (G4int verbose)
 
G4int GetVacantShellNumber () const
 
- Public Member Functions inherited from G4VEvaporationChannel
 G4VEvaporationChannel (const G4String &aName="")
 
virtual ~G4VEvaporationChannel ()
 
virtual G4double GetLifeTime (G4Fragment *theNucleus)
 
G4FragmentVectorBreakUpFragment (G4Fragment *theNucleus)
 
virtual void Dump () const
 
G4double GetMaxLevelEnergy (G4int Z, G4int A)
 
G4double GetNearestLevelEnergy (G4int Z, G4int A, G4double energy)
 
void SetPhotonEvaporation (G4VEvaporationChannel *p)
 
void SetOPTxs (G4int opt)
 
void UseSICB (G4bool use)
 

Additional Inherited Members

- Protected Attributes inherited from G4VEvaporationChannel
G4int OPTxs
 
G4bool useSICB
 

Detailed Description

Definition at line 63 of file G4PhotonEvaporation.hh.

Constructor & Destructor Documentation

G4PhotonEvaporation::G4PhotonEvaporation ( G4GammaTransition ptr = nullptr)
explicit

Definition at line 60 of file G4PhotonEvaporation.cc.

61  : fLevelManager(nullptr), fTransition(p), fVerbose(0), fPoints(0),
62  vShellNumber(-1), fIndex(0), fMaxLifeTime(DBL_MAX),
63  fICM(false), fRDM(false), fSampleTime(true), isInitialised(false)
64 {
65  //G4cout << "### New G4PhotonEvaporation() " << this << G4endl;
66  fNuclearLevelData = G4NuclearLevelData::GetInstance();
67  LevelDensity = 0.125/CLHEP::MeV;
68  Tolerance = 20*CLHEP::eV;
69 
70  if(!fTransition) { fTransition = new G4GammaTransition(); }
71 
72  theA = theZ = fCode = 0;
73  fLevelEnergyMax = fStep = fExcEnergy = fProbability = 0.0;
74 
75  for(G4int i=0; i<MAXDEPOINT; ++i) { fCummProbability[i] = 0.0; }
76  if(0.0f == GREnergy[1]) {
77  G4Pow* g4calc = G4Pow::GetInstance();
78  static const G4float GRWfactor = 0.3f;
79  for (G4int A=1; A<MAXGRDATA; ++A) {
80  GREnergy[A] = (G4float)(40.3*CLHEP::MeV/g4calc->powZ(A,0.2));
81  GRWidth[A] = GRWfactor*GREnergy[A];
82  }
83  }
84 }
static G4Pow * GetInstance()
Definition: G4Pow.cc:55
const G4int MAXGRDATA
const G4int MAXDEPOINT
Definition: G4Pow.hh:56
const char * p
Definition: xmltok.h:285
float G4float
Definition: G4Types.hh:77
int G4int
Definition: G4Types.hh:78
double A(double temperature)
static constexpr double MeV
static constexpr double eV
G4double powZ(G4int Z, G4double y) const
Definition: G4Pow.hh:254
#define DBL_MAX
Definition: templates.hh:83
static G4NuclearLevelData * GetInstance()

Here is the call graph for this function:

G4PhotonEvaporation::~G4PhotonEvaporation ( )
virtual

Definition at line 86 of file G4PhotonEvaporation.cc.

87 {
88  delete fTransition;
89 }

Member Function Documentation

G4FragmentVector * G4PhotonEvaporation::BreakItUp ( const G4Fragment theNucleus)

Definition at line 124 of file G4PhotonEvaporation.cc.

125 {
126  if(fVerbose > 0) {
127  G4cout << "G4PhotonEvaporation::BreakItUp" << G4endl;
128  }
129  G4Fragment* aNucleus = new G4Fragment(nucleus);
130  G4FragmentVector* products = new G4FragmentVector();
131  BreakUpChain(products, aNucleus);
132  products->push_back(aNucleus);
133  return products;
134 }
virtual G4bool BreakUpChain(G4FragmentVector *theResult, G4Fragment *theNucleus) final
G4GLOB_DLL std::ostream G4cout
std::vector< G4Fragment * > G4FragmentVector
Definition: G4Fragment.hh:63
#define G4endl
Definition: G4ios.hh:61

Here is the call graph for this function:

Here is the caller graph for this function:

G4bool G4PhotonEvaporation::BreakUpChain ( G4FragmentVector theResult,
G4Fragment theNucleus 
)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 136 of file G4PhotonEvaporation.cc.

138 {
139  if(!isInitialised) { Initialise(); }
140  if(fVerbose > 0) {
141  G4cout << "G4PhotonEvaporation::BreakUpChain RDM= " << fRDM << " "
142  << *nucleus << G4endl;
143  }
144  G4Fragment* gamma = nullptr;
145  if(fRDM) { fSampleTime = false; }
146  else { fSampleTime = true; }
147 
148  do {
149  gamma = GenerateGamma(nucleus);
150  if(gamma) {
151  products->push_back(gamma);
152  if(fVerbose > 0) {
153  G4cout << "G4PhotonEvaporation::BreakUpChain: "
154  << *gamma << G4endl;
155  G4cout << " Residual: " << *nucleus << G4endl;
156  }
157  // for next decays in the chain always sample time
158  fSampleTime = true;
159  }
160  // Loop checking, 05-Aug-2015, Vladimir Ivanchenko
161  } while(gamma);
162  return false;
163 }
virtual void Initialise() final
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61

Here is the call graph for this function:

Here is the caller graph for this function:

G4Fragment * G4PhotonEvaporation::EmittedFragment ( G4Fragment theNucleus)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 109 of file G4PhotonEvaporation.cc.

110 {
111  if(fRDM) { fSampleTime = false; }
112  else { fSampleTime = true; }
113 
114  G4Fragment* gamma = GenerateGamma(nucleus);
115  if(fVerbose > 0) {
116  G4cout << "G4PhotonEvaporation::EmittedFragment: RDM= " << fRDM << G4endl;
117  if(gamma) { G4cout << *gamma << G4endl; }
118  G4cout << " Residual: " << *nucleus << G4endl;
119  }
120  return gamma;
121 }
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61

Here is the caller graph for this function:

G4double G4PhotonEvaporation::GetEmissionProbability ( G4Fragment theNucleus)
finalvirtual

Implements G4VEvaporationChannel.

Definition at line 166 of file G4PhotonEvaporation.cc.

167 {
168  if(!isInitialised) { Initialise(); }
169  fProbability = 0.0;
170  fExcEnergy = nucleus->GetExcitationEnergy();
171  G4int Z = nucleus->GetZ_asInt();
172  G4int A = nucleus->GetA_asInt();
173  fCode = 1000*Z + A;
174  if(fVerbose > 1) {
175  G4cout << "G4PhotonEvaporation::GetEmissionProbability: Z="
176  << Z << " A=" << A << " Eexc(MeV)= " << fExcEnergy << G4endl;
177  }
178  // ignore gamma de-excitation for exotic fragments
179  // and for very low excitations
180  if(0 >= Z || 1 >= A || Z == A || Tolerance >= fExcEnergy)
181  { return fProbability; }
182 
183  // ignore gamma de-excitation for highly excited levels
184  if(A >= MAXGRDATA) { A = MAXGRDATA-1; }
185  //G4cout<<" GREnergy= "<< GREnergy[A]<<" GRWidth= "<<GRWidth[A]<<G4endl;
186 
187  static const G4float GREfactor = 5.0f;
188  if(fExcEnergy >= (G4double)(GREfactor*GRWidth[A] + GREnergy[A])) {
189  return fProbability;
190  }
191  // probability computed assuming continium transitions
192  // VI: continium transition are limited only to final states
193  // below Fermi energy (this approach needs further evaluation)
194  G4double emax = std::max(0.0, nucleus->ComputeGroundStateMass(Z, A-1)
195  + CLHEP::neutron_mass_c2 - nucleus->GetGroundStateMass());
196 
197  // max energy level for continues transition
198  emax = std::min(emax, fExcEnergy);
199  const G4double eexcfac = 0.99;
200  if(0.0 == emax || fExcEnergy*eexcfac <= emax) { emax = fExcEnergy*eexcfac; }
201 
202  fStep = emax;
203  static const G4double MaxDeltaEnergy = CLHEP::MeV;
204  fPoints = std::min((G4int)(fStep/MaxDeltaEnergy) + 2, MAXDEPOINT);
205  fStep /= ((G4double)(fPoints - 1));
206  if(fVerbose > 1) {
207  G4cout << "Emax= " << emax << " Npoints= " << fPoints
208  << " Eex= " << fExcEnergy << G4endl;
209  }
210  // integrate probabilities
211  G4double eres = (G4double)GREnergy[A];
212  G4double wres = (G4double)GRWidth[A];
213  G4double eres2= eres*eres;
214  G4double wres2= wres*wres;
215  G4double xsqr = std::sqrt(A*LevelDensity*fExcEnergy);
216 
217  G4double egam = fExcEnergy;
218  G4double gammaE2 = egam*egam;
219  G4double gammaR2 = gammaE2*wres2;
220  G4double egdp2 = gammaE2 - eres2;
221 
222  G4double p0 = G4Exp(-2.0*xsqr)*gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
223  G4double p1(0.0);
224 
225  for(G4int i=1; i<fPoints; ++i) {
226  egam -= fStep;
227  gammaE2 = egam*egam;
228  gammaR2 = gammaE2*wres2;
229  egdp2 = gammaE2 - eres2;
230  p1 = G4Exp(2.0*(std::sqrt(A*LevelDensity*std::abs(fExcEnergy - egam)) - xsqr))
231  *gammaR2*gammaE2/(egdp2*egdp2 + gammaR2);
232  fProbability += (p1 + p0);
233  fCummProbability[i] = fProbability;
234  //G4cout << "Egamma= " << egam << " Eex= " << fExcEnergy
235  //<< " p0= " << p0 << " p1= " << p1 << " sum= " << fCummProbability[i] <<G4endl;
236  p0 = p1;
237  }
238 
239  static const G4double NormC = 1.25*CLHEP::millibarn
241  fProbability *= fStep*NormC*A;
242  if(fVerbose > 1) { G4cout << "prob= " << fProbability << G4endl; }
243  return fProbability;
244 }
const G4int MAXGRDATA
const G4int MAXDEPOINT
static constexpr double pi2
Definition: SystemOfUnits.h:57
static constexpr double millibarn
Definition: SystemOfUnits.h:86
static constexpr double hbarc
float G4float
Definition: G4Types.hh:77
virtual void Initialise() final
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
double A(double temperature)
static constexpr double neutron_mass_c2
static constexpr double MeV
static const G4double emax
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
Definition: G4Exp.hh:183
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

G4double G4PhotonEvaporation::GetFinalLevelEnergy ( G4int  Z,
G4int  A,
G4double  energy 
)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 247 of file G4PhotonEvaporation.cc.

248 {
249  G4double E = energy;
250  InitialiseLevelManager(Z, A);
251  if(fLevelManager) {
252  E = (G4double)fLevelManager->NearestLevelEnergy(energy, fIndex);
253  if(E > fLevelEnergyMax + Tolerance) { E = energy; }
254  }
255  return E;
256 }
double A(double temperature)
G4float NearestLevelEnergy(G4double energy, size_t index=0) const
G4double energy(const ThreeVector &p, const G4double m)
double G4double
Definition: G4Types.hh:76

Here is the call graph for this function:

G4double G4PhotonEvaporation::GetUpperLevelEnergy ( G4int  Z,
G4int  A 
)
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 258 of file G4PhotonEvaporation.cc.

259 {
260  InitialiseLevelManager(Z, A);
261  return fLevelEnergyMax;
262 }
double A(double temperature)
G4int G4PhotonEvaporation::GetVacantShellNumber ( ) const
inline

Definition at line 161 of file G4PhotonEvaporation.hh.

162 {
163  return vShellNumber;
164 }

Here is the caller graph for this function:

void G4PhotonEvaporation::Initialise ( )
finalvirtual

Reimplemented from G4VEvaporationChannel.

Definition at line 91 of file G4PhotonEvaporation.cc.

92 {
93  if(isInitialised) { return; }
94  isInitialised = true;
95 
96  if(fVerbose > 0) {
97  G4cout << "### G4PhotonEvaporation is initialized " << this << G4endl;
98  }
99  G4DeexPrecoParameters* param = fNuclearLevelData->GetParameters();
100  LevelDensity = param->GetLevelDensity();
101  Tolerance = param->GetMinExcitation();
102  fMaxLifeTime = param->GetMaxLifeTime();
103 
104  fTransition->SetPolarizationFlag(param->CorrelatedGamma());
105  fTransition->SetVerbose(fVerbose);
106 }
G4double GetLevelDensity() const
G4double GetMaxLifeTime() const
void SetPolarizationFlag(G4bool val)
G4GLOB_DLL std::ostream G4cout
G4DeexPrecoParameters * GetParameters()
#define G4endl
Definition: G4ios.hh:61
G4double GetMinExcitation() const
void SetVerbose(G4int val)

Here is the call graph for this function:

Here is the caller graph for this function:

void G4PhotonEvaporation::RDMForced ( G4bool  val)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 448 of file G4PhotonEvaporation.cc.

449 {
450  fRDM = val;
451 }

Here is the caller graph for this function:

void G4PhotonEvaporation::SetGammaTransition ( G4GammaTransition p)

Definition at line 435 of file G4PhotonEvaporation.cc.

436 {
437  if(p != fTransition) {
438  delete fTransition;
439  fTransition = p;
440  }
441 }
const char * p
Definition: xmltok.h:285
void G4PhotonEvaporation::SetICM ( G4bool  val)
virtual

Reimplemented from G4VEvaporationChannel.

Definition at line 443 of file G4PhotonEvaporation.cc.

444 {
445  fICM = val;
446 }

Here is the caller graph for this function:

void G4PhotonEvaporation::SetMaxHalfLife ( G4double  )

Definition at line 432 of file G4PhotonEvaporation.cc.

433 {}
void G4PhotonEvaporation::SetVerboseLevel ( G4int  verbose)
inline

Definition at line 144 of file G4PhotonEvaporation.hh.

145 {
146  fVerbose = verbose;
147 }

The documentation for this class was generated from the following files: