LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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: