#include <G4CascadeInterpolator.hh>
Public Types | |
nBins = NBINS | |
last = NBINS-1 | |
enum | { nBins = NBINS, last = NBINS-1 } |
Public Member Functions | |
G4CascadeInterpolator (const G4double(&xb)[nBins], G4bool extrapolate=true) | |
virtual | ~G4CascadeInterpolator () |
G4double | getBin (const G4double x) const |
G4double | interpolate (const G4double x, const G4double(&yb)[nBins]) const |
G4double | interpolate (const G4double(&yb)[nBins]) const |
void | printBins (std::ostream &os) const |
Definition at line 52 of file G4CascadeInterpolator.hh.
anonymous enum |
G4CascadeInterpolator< NBINS >::G4CascadeInterpolator | ( | const G4double & | xb[nBins], | |
G4bool | extrapolate = true | |||
) | [inline] |
virtual G4CascadeInterpolator< NBINS >::~G4CascadeInterpolator | ( | ) | [inline, virtual] |
G4double G4CascadeInterpolator< NBINS >::getBin | ( | const G4double | x | ) | const |
Definition at line 57 of file G4CascadeInterpolator.icc.
References G4cout, G4endl, and G4CascadeInterpolator< NBINS >::last.
Referenced by G4CascadeInterpolator< NBINS >::interpolate().
00057 { 00058 if (x == lastX) return lastVal; // Avoid unnecessary work 00059 00060 G4double xindex, xdiff, xbin; 00061 00062 lastX = x; 00063 if (x < xBins[0]) { // Handle boundaries first 00064 xindex = 0.; 00065 xbin = xBins[1]-xBins[0]; 00066 xdiff = doExtrapolation ? x-xBins[0] : 0.; // Less than zero 00067 } else if (x >= xBins[last]) { 00068 xindex = last; 00069 xbin = xBins[last]-xBins[last-1]; 00070 xdiff = doExtrapolation ? x-xBins[last] : 0.; 00071 } else { // Assume nBins small; linear search 00072 int i; 00073 for (i=1; i<last && x>xBins[i]; i++) {;} // Stops when x within bin i-1 00074 xindex = i-1; 00075 xbin = xBins[i] - xBins[i-1]; 00076 xdiff = x - xBins[i-1]; 00077 } 00078 00079 #ifdef G4CASCADE_DEBUG_SAMPLER 00080 G4cout << " G4CascadeInterpolator<" << NBINS << ">: x=" << x 00081 << " index=" << xindex << " fraction=" << xdiff/xbin << G4endl; 00082 #endif 00083 00084 return (lastVal = xindex + xdiff/xbin); // Save return value for later 00085 }
G4double G4CascadeInterpolator< NBINS >::interpolate | ( | const G4double & | yb[nBins] | ) | const |
Definition at line 101 of file G4CascadeInterpolator.icc.
References G4CascadeInterpolator< NBINS >::last.
00101 { 00102 // Treat boundary extrapolations specially, otherwise just truncate 00103 G4int i = (lastVal<0) ? 0 : (lastVal>last) ? last-1 : G4int(lastVal); 00104 G4double frac = lastVal - G4double(i); // May be <0 or >1 if extrapolating 00105 00106 // Special case: if exactly on upper bin edge, just return value 00107 return (i==last) ? yb[last] : (yb[i] + frac*(yb[i+1]-yb[i])); 00108 }
G4double G4CascadeInterpolator< NBINS >::interpolate | ( | const G4double | x, | |
const G4double & | yb[nBins] | |||
) | const |
Definition at line 92 of file G4CascadeInterpolator.icc.
References G4CascadeInterpolator< NBINS >::getBin().
Referenced by G4NucleiModel::absorptionCrossSection(), G4InuclSpecialFunctions::paraMaker(), and G4InuclSpecialFunctions::paraMakerTruncated().
00092 { 00093 getBin(x); 00094 return interpolate(yb); 00095 }
void G4CascadeInterpolator< NBINS >::printBins | ( | std::ostream & | os | ) | const |
Definition at line 114 of file G4CascadeInterpolator.icc.
References G4endl.
00114 { 00115 os << " G4CascadeInterpolator<" << NBINS << "> : " << G4endl; 00116 for (G4int k=0; k<NBINS; k++) { 00117 os << " " << std::setw(5) << xBins[k]; 00118 if ((k+1)%12 == 0) os << G4endl; 00119 } 00120 os << G4endl; 00121 }