LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | Protected Attributes | Friends | List of all members
lsst::afw::math::InterpolateConstant Class Reference
Inheritance diagram for lsst::afw::math::InterpolateConstant:
lsst::afw::math::Interpolate

Public Types

enum  Style {
  UNKNOWN = -1 , CONSTANT = 0 , LINEAR = 1 , NATURAL_SPLINE = 2 ,
  CUBIC_SPLINE = 3 , CUBIC_SPLINE_PERIODIC = 4 , AKIMA_SPLINE = 5 , AKIMA_SPLINE_PERIODIC = 6 ,
  NUM_STYLES
}
 

Public Member Functions

 ~InterpolateConstant () override=default
 
double interpolate (double const x) const override
 
std::vector< double > interpolate (std::vector< double > const &x) const
 
ndarray::Array< double, 1 > interpolate (ndarray::Array< double const, 1 > const &x) const
 

Protected Attributes

std::vector< double > const _x
 
std::vector< double > const _y
 
Interpolate::Style const _style
 

Friends

std::shared_ptr< InterpolatemakeInterpolate (std::vector< double > const &x, std::vector< double > const &y, Interpolate::Style const style)
 A factory function to make Interpolate objects. More...
 

Detailed Description

Definition at line 75 of file Interpolate.cc.

Member Enumeration Documentation

◆ Style

Enumerator
UNKNOWN 
CONSTANT 
LINEAR 
NATURAL_SPLINE 
CUBIC_SPLINE 
CUBIC_SPLINE_PERIODIC 
AKIMA_SPLINE 
AKIMA_SPLINE_PERIODIC 
NUM_STYLES 

Definition at line 38 of file Interpolate.h.

Constructor & Destructor Documentation

◆ ~InterpolateConstant()

lsst::afw::math::InterpolateConstant::~InterpolateConstant ( )
overridedefault

Member Function Documentation

◆ interpolate() [1/3]

double lsst::afw::math::InterpolateConstant::interpolate ( double const  x) const
overridevirtual

Implements lsst::afw::math::Interpolate.

Definition at line 94 of file Interpolate.cc.

95  {
96  //
97  // Look for the interval wherein lies xInterp. We could naively use std::upper_bound, but that requires a
98  // logarithmic time lookup so we'll cache the previous answer in _old -- this is a good idea if people
99  // usually call this routine repeatedly for a range of x
100  //
101  // We start by searching up from _old
102  //
103  if (xInterp < *_old) { // We're to the left of the cache
104  if (_old == _x.begin()) { // ... actually off the array
105  return _y[0];
106  }
107  _old = _x.begin(); // reset the cached point to the start of the array
108  } else { // see if we're still in the same interval
109  if (_old < _x.end() - 1 and xInterp < *(_old + 1)) { // we are, so we're done
110  return _y[_old - _x.begin()];
111  }
112  }
113  // We're to the right of the cached point and not in the same inverval, so search up from _old
115  //
116  // Did that work?
117  if (low == _old && _old != _x.begin()) {
118  // No. Sigh. Search the entire range.
119  low = std::upper_bound(_x.begin(), low + 1, xInterp);
120  }
121  //
122  // OK, we've found the right interval. Return the desired value, being careful at the ends
123  //
124  if (low == _x.end()) {
125  return _y[_y.size() - 1];
126  } else if (low == _x.begin()) {
127  return _y[0];
128  } else {
129  --low;
130  _old = low;
131  return _y[low - _x.begin()];
132  }
133 }
T begin(T... args)
std::vector< double > const _x
Definition: Interpolate.h:83
std::vector< double > const _y
Definition: Interpolate.h:84
T end(T... args)
T size(T... args)
T upper_bound(T... args)

◆ interpolate() [2/3]

ndarray::Array< double, 1 > lsst::afw::math::Interpolate::interpolate ( ndarray::Array< double const, 1 > const &  x) const
inherited

Definition at line 303 of file Interpolate.cc.

303  {
304  int const num = x.getShape()[0];
305  ndarray::Array<double, 1> out = ndarray::allocate(ndarray::makeVector(num));
306  for (int i = 0; i < num; ++i) {
307  std::cout << "Interpolating " << x[i] << std::endl;
308  out[i] = interpolate(x[i]);
309  }
310  return out;
311 }
double x
virtual double interpolate(double const x) const =0
T endl(T... args)

◆ interpolate() [3/3]

std::vector< double > lsst::afw::math::Interpolate::interpolate ( std::vector< double > const &  x) const
inherited

Definition at line 294 of file Interpolate.cc.

294  {
295  size_t const num = x.size();
296  std::vector<double> out(num);
297  for (size_t i = 0; i < num; ++i) {
298  out[i] = interpolate(x[i]);
299  }
300  return out;
301 }

Friends And Related Function Documentation

◆ makeInterpolate

std::shared_ptr<Interpolate> makeInterpolate ( std::vector< double > const &  x,
std::vector< double > const &  y,
Interpolate::Style const  style = Interpolate::AKIMA_SPLINE 
)
friend

A factory function to make Interpolate objects.

Parameters
xthe x-values of points
ythe values at x[]
styledesired interpolator

Definition at line 342 of file Interpolate.cc.

343  {
344  switch (style) {
346  return std::shared_ptr<Interpolate>(new InterpolateConstant(x, y, style));
347  default: // use GSL
348  return std::shared_ptr<Interpolate>(new InterpolateGsl(x, y, style));
349  }
350 }
int y
Definition: SpanSet.cc:48

Member Data Documentation

◆ _style

Interpolate::Style const lsst::afw::math::Interpolate::_style
protectedinherited

Definition at line 85 of file Interpolate.h.

◆ _x

std::vector<double> const lsst::afw::math::Interpolate::_x
protectedinherited

Definition at line 83 of file Interpolate.h.

◆ _y

std::vector<double> const lsst::afw::math::Interpolate::_y
protectedinherited

Definition at line 84 of file Interpolate.h.


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