46 numberOfEnergyPoints(nPointsE),numberOfShells(nShells),softCrossSections(0),
47 hardCrossSections(0),shellCrossSections(0),shellNormalizedCrossSections(0)
53 ed <<
"G4PenelopeCrossSection: invalid number of energy points " <<
G4endl;
54 G4Exception(
"G4PenelopeCrossSection::G4PenelopeCrossSection()",
68 for (
size_t i=0;i<3;i++)
79 for (
size_t i=0;i<3;i++)
132 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddCrossSectionPoint" <<
134 G4cout <<
"Trying to fill un-initialized tables" <<
G4endl;
143 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddCrossSectionPoint" <<
145 G4cout <<
"Trying to register more points than originally declared" <<
G4endl;
152 theVector->
PutValue(binNumber,logEne,val);
157 theVector->
PutValue(binNumber,logEne,val);
162 theVector->
PutValue(binNumber,logEne,val);
166 val = std::log(
std::max(XH0,1e-42*cm2));
167 theVector->
PutValue(binNumber,logEne,val);
172 theVector->
PutValue(binNumber,logEne,val);
177 theVector->
PutValue(binNumber,logEne,val);
191 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
193 G4cout <<
"Trying to fill un-initialized table" <<
G4endl;
199 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
201 G4cout <<
"Trying to fill shell #" << shellID <<
" while the maximum is "
211 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
213 G4cout <<
"Trying to register more points than originally declared" <<
G4endl;
218 theVector->
PutValue(binNumber,logEne,val);
231 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
233 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
241 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
243 G4cout <<
"Soft cross section table looks not filled" <<
G4endl;
254 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
256 G4cout <<
"Hard cross section table looks not filled" <<
G4endl;
259 logXS = theVector->
Value(logene);
262 result = hardXS + softXS;
275 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetHardCrossSection" <<
277 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
284 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetHardCrossSection" <<
286 G4cout <<
"Hard cross section table looks not filled" <<
G4endl;
291 result =
G4Exp(logXS);
305 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetSoftStoppingPower" <<
307 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
314 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetSoftStoppingPower" <<
316 G4cout <<
"Soft cross section table looks not filled" <<
G4endl;
321 result =
G4Exp(logXS);
333 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
335 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
340 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
342 G4cout <<
"Trying to retrieve shell #" << shellID <<
" while the maximum is "
351 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
353 G4cout <<
"Shell cross section table looks not filled" <<
G4endl;
358 result =
G4Exp(logXS);
369 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
371 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
377 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
G4endl;
378 G4cout <<
"The table of normalized cross section is not initialized" <<
G4endl;
384 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
386 G4cout <<
"Trying to retrieve shell #" << shellID <<
" while the maximum is "
396 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
398 G4cout <<
"Shell cross section table looks not filled" <<
G4endl;
403 result =
G4Exp(logXS);
416 G4cout <<
"G4PenelopeCrossSection::NormalizeShellCrossSections()" <<
G4endl;
423 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
425 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
441 normFactor +=
G4Exp((*theVec)[i]);
443 G4double logNormFactor = std::log(normFactor);
451 G4double previousValue = (*theFullVec)[i];
454 theVec->
PutValue(i,logEnergy,previousValue-logNormFactor);
size_t numberOfEnergyPoints
G4double GetSoftStoppingPower(G4double energy) const
Returns the total stopping power due to soft collisions.
std::ostringstream G4ExceptionDescription
static constexpr double cm2
~G4PenelopeCrossSection()
void push_back(G4PhysicsVector *)
void PutValue(size_t index, G4double energy, G4double dataValue)
void AddShellCrossSectionPoint(size_t binNumber, size_t shellID, G4double energy, G4double xs)
G4double GetHardCrossSection(G4double energy) const
Returns hard cross section at the given energy.
size_t GetVectorLength() const
G4double GetLowEdgeEnergy(size_t binNumber) const
void AddCrossSectionPoint(size_t binNumber, G4double energy, G4double XH0, G4double XH1, G4double XH2, G4double XS0, G4double XS1, G4double XS2)
Public interface for the master thread.
G4GLOB_DLL std::ostream G4cout
G4double GetTotalCrossSection(G4double energy) const
Returns total cross section at the given energy.
G4PhysicsTable * shellNormalizedCrossSections
static constexpr double eV
G4double Value(G4double theEnergy, size_t &lastidx) const
G4PenelopeCrossSection(size_t nOfEnergyPoints, size_t nOfShells=0)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4PhysicsTable * softCrossSections
G4double energy(const ThreeVector &p, const G4double m)
G4PhysicsTable * hardCrossSections
void NormalizeShellCrossSections()
G4double GetNormalizedShellCrossSection(size_t shellID, G4double energy) const
Returns the hard cross section for the given shell (normalized to 1)
G4PhysicsTable * shellCrossSections
G4double GetShellCrossSection(size_t shellID, G4double energy) const
Returns the hard cross section for the given shell (per molecule)