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::InterpolateGsl Class Reference
Inheritance diagram for lsst::afw::math::InterpolateGsl:
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

 ~InterpolateGsl () override
 
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 169 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

◆ ~InterpolateGsl()

lsst::afw::math::InterpolateGsl::~InterpolateGsl ( )
override

Definition at line 218 of file Interpolate.cc.

218  {
219  ::gsl_interp_free(_interp);
220  ::gsl_interp_accel_free(_acc);
221 }

Member Function Documentation

◆ interpolate() [1/3]

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

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

Definition at line 223 of file Interpolate.cc.

223  {
224  // New GSL versions refuse to extrapolate.
225  // gsl_interp_init() requires x to be ordered, so can just check
226  // the array endpoints for out-of-bounds.
227  if ((xInterp < _x.front() || (xInterp > _x.back()))) {
228  // do our own quadratic extrapolation.
229  // (GSL only provides first and second derivative functions)
230  /* could also just fail via:
231  throw LSST_EXCEPT(
232  pex::exceptions::InvalidParameterError,
233  (boost::format("Interpolation point %f outside range [%f, %f]")
234  % x % _x.front() % _x.back()).str()
235  );
236  */
237  double x0, y0;
238  if (xInterp < _x.front()) {
239  x0 = _x.front();
240  y0 = _y.front();
241  } else {
242  x0 = _x.back();
243  y0 = _y.back();
244  }
245  // first derivative at endpoint
246  double d = ::gsl_interp_eval_deriv(_interp, &_x[0], &_y[0], x0, _acc);
247  // second derivative at endpoint
248  double d2 = ::gsl_interp_eval_deriv2(_interp, &_x[0], &_y[0], x0, _acc);
249  return y0 + (xInterp - x0) * d + 0.5 * (xInterp - x0) * (xInterp - x0) * d2;
250  }
251  assert(xInterp >= _x.front());
252  assert(xInterp <= _x.back());
253  return ::gsl_interp_eval(_interp, &_x[0], &_y[0], xInterp, _acc);
254 }
T back(T... args)
std::vector< double > const _x
Definition: Interpolate.h:83
std::vector< double > const _y
Definition: Interpolate.h:84
T front(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: