source: trunk/src/Interpolator1D.cpp @ 2727

Last change on this file since 2727 was 2727, checked in by Takeshi Nakazato, 11 years ago

New Development: No

JIRA Issue: Yes CAS-4770, CAS-4774

Ready for Test: Yes

Interface Changes: No

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No?

Module(s): Module Names change impacts.

Description: Describe your changes here...

Updated STApplyCal to be able to specify interpolation method.
The method can be specified in time and frequency axes independently.
Possible options are nearest, linear (default), (natural) cubic spline,
and polynomial with arbitrary order.

File size: 1.4 KB
Line 
1//
2// C++ Implementation: Interpolator1D
3//
4// Description:
5//
6//
7// Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp>, (C) 2012
8//
9// Copyright: See COPYING file that comes with this distribution
10//
11//
12#include <assert.h>
13
14#include <casa/Arrays/Vector.h>
15#include <casa/Exceptions/Error.h>
16
17#include "Interpolator1D.h"
18#include "BisectionLocator.h"
19#include "HuntLocator.h"
20
21using namespace casa;
22
23namespace asap {
24
25Interpolator1D::Interpolator1D()
26  : order_(1),
27    n_(0),
28    x_(0),
29    y_(0),
30    locator_(0)
31{
32}
33
34Interpolator1D::~Interpolator1D()
35{
36  if (locator_)
37    delete locator_;
38}
39
40void Interpolator1D::setData(double *x, float *y, unsigned int n)
41{
42  x_ = x;
43  y_ = y;
44  n_ = n;
45  createLocator();
46  locator_->set(x, n);
47}
48
49void Interpolator1D::setX(double *x, unsigned int n)
50{
51  assert(n_ == 0 || n_ == n);
52  x_ = x;
53  n_ = n;
54  createLocator();
55  locator_->set(x, n);
56}
57
58void Interpolator1D::setY(float *y, unsigned int n)
59{
60  assert(n_ == 0 || n_ == n);
61  y_ = y;
62  n_ = n;
63}
64
65void Interpolator1D::reset()
66{
67  n_ = 0;
68  x_ = 0;
69  y_ = 0;
70  if (locator_) {
71    delete locator_;
72    locator_ = 0;
73  }
74}
75
76bool Interpolator1D::isready()
77{
78  return (n_ > 0 && x_ != 0 && y_ != 0);
79}
80
81int Interpolator1D::locate(double x)
82{
83  return locator_->locate(x);
84}
85
86void Interpolator1D::createLocator()
87{
88  if (!locator_) {
89    if (n_ > 1000)
90      locator_ = new HuntLocator();
91    else
92      locator_ = new BisectionLocator();
93  }
94}
95
96}
Note: See TracBrowser for help on using the repository browser.