G4CascadeInterpolator< NBINS > Class Template Reference

#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


Detailed Description

template<int NBINS>
class G4CascadeInterpolator< NBINS >

Definition at line 52 of file G4CascadeInterpolator.hh.


Member Enumeration Documentation

template<int NBINS>
anonymous enum

Enumerator:
nBins 
last 

Definition at line 54 of file G4CascadeInterpolator.hh.

00054 { nBins=NBINS, last=NBINS-1 };


Constructor & Destructor Documentation

template<int NBINS>
G4CascadeInterpolator< NBINS >::G4CascadeInterpolator ( const G4double &  xb[nBins],
G4bool  extrapolate = true 
) [inline]

Definition at line 56 of file G4CascadeInterpolator.hh.

00057     : xBins(xb), doExtrapolation(extrapolate),
00058       lastX(-DBL_MAX), lastVal(-DBL_MAX) {}

template<int NBINS>
virtual G4CascadeInterpolator< NBINS >::~G4CascadeInterpolator (  )  [inline, virtual]

Definition at line 60 of file G4CascadeInterpolator.hh.

00060 {}


Member Function Documentation

template<int NBINS>
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 }

template<int NBINS>
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 }

template<int NBINS>
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 }

template<int NBINS>
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 }


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:51:36 2013 for Geant4 by  doxygen 1.4.7