45 numberOfEnergyPoints(nPointsE),numberOfShells(nShells),softCrossSections(0),
46 hardCrossSections(0),shellCrossSections(0),shellNormalizedCrossSections(0)
52 ed <<
"G4PenelopeCrossSection: invalid number of energy points " <<
G4endl;
53 G4Exception(
"G4PenelopeCrossSection::G4PenelopeCrossSection()",
67 for (
size_t i=0;i<3;i++)
78 for (
size_t i=0;i<3;i++)
131 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddCrossSectionPoint" <<
133 G4cout <<
"Trying to fill un-initialized tables" <<
G4endl;
142 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddCrossSectionPoint" <<
144 G4cout <<
"Trying to register more points than originally declared" <<
G4endl;
151 theVector->
PutValue(binNumber,logEne,val);
156 theVector->
PutValue(binNumber,logEne,val);
161 theVector->
PutValue(binNumber,logEne,val);
165 val = std::log(
std::max(XH0,1e-42*cm2));
166 theVector->
PutValue(binNumber,logEne,val);
171 theVector->
PutValue(binNumber,logEne,val);
176 theVector->
PutValue(binNumber,logEne,val);
190 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
192 G4cout <<
"Trying to fill un-initialized table" <<
G4endl;
198 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
200 G4cout <<
"Trying to fill shell #" << shellID <<
" while the maximum is "
210 G4cout <<
"Something wrong in G4PenelopeCrossSection::AddShellCrossSectionPoint" <<
212 G4cout <<
"Trying to register more points than originally declared" <<
G4endl;
217 theVector->
PutValue(binNumber,logEne,val);
230 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
232 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
240 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
242 G4cout <<
"Soft cross section table looks not filled" <<
G4endl;
253 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetTotalCrossSection" <<
255 G4cout <<
"Hard cross section table looks not filled" <<
G4endl;
258 logXS = theVector->
Value(logene);
261 result = hardXS + softXS;
274 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetHardCrossSection" <<
276 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
283 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetHardCrossSection" <<
285 G4cout <<
"Hard cross section table looks not filled" <<
G4endl;
290 result = std::exp(logXS);
304 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetSoftStoppingPower" <<
306 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
313 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetSoftStoppingPower" <<
315 G4cout <<
"Soft cross section table looks not filled" <<
G4endl;
320 result = std::exp(logXS);
332 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
334 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
339 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
341 G4cout <<
"Trying to retrieve shell #" << shellID <<
" while the maximum is "
350 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
352 G4cout <<
"Shell cross section table looks not filled" <<
G4endl;
357 result = std::exp(logXS);
368 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
370 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
376 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
G4endl;
377 G4cout <<
"The table of normalized cross section is not initialized" <<
G4endl;
383 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
385 G4cout <<
"Trying to retrieve shell #" << shellID <<
" while the maximum is "
395 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
397 G4cout <<
"Shell cross section table looks not filled" <<
G4endl;
402 result = std::exp(logXS);
415 G4cout <<
"G4PenelopeCrossSection::NormalizeShellCrossSections()" <<
G4endl;
422 G4cout <<
"Something wrong in G4PenelopeCrossSection::GetShellCrossSection" <<
424 G4cout <<
"Trying to retrieve from un-initialized tables" <<
G4endl;
440 normFactor += std::exp((*theVec)[i]);
442 G4double logNormFactor = std::log(normFactor);
450 G4double previousValue = (*theFullVec)[i];
453 theVec->
PutValue(i,logEnergy,previousValue-logNormFactor);
size_t numberOfEnergyPoints
void PutValue(size_t binNumber, G4double binValue, G4double dataValue)
G4double GetSoftStoppingPower(G4double energy) const
Returns the total stopping power due to soft collisions.
std::ostringstream G4ExceptionDescription
~G4PenelopeCrossSection()
void push_back(G4PhysicsVector *)
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
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)
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)