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
GaussHermiteEvaluator.h
Go to the documentation of this file.
1 // -*- LSST-C++ -*-
2 
3 /*
4  * LSST Data Management System
5  * Copyright 2008, 2009, 2010, 2011 LSST Corporation.
6  *
7  * This product includes software developed by the
8  * LSST Project (http://www.lsst.org/).
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the LSST License Statement and
21  * the GNU General Public License along with this program. If not,
22  * see <http://www.lsstcorp.org/LegalNotices/>.
23  */
24 
25 #ifndef LSST_AFW_MATH_SHAPELETS_HERMITEEVALUATOR_H
26 #define LSST_AFW_MATH_SHAPELETS_HERMITEEVALUATOR_H
27 
28 #include "ndarray.h"
29 #include "lsst/geom.h"
31 #include "Eigen/Core"
32 
33 namespace lsst { namespace shapelet {
34 
48 class PackedIndex {
49 public:
50 
51  static int const computeOffset(int order) { return order*(order+1)/2; }
52  static int const computeIndex(int x, int y) { return computeOffset(x+y) + x; }
53 
55  ++_i;
56  if (--_y < 0) {
57  _x = 0;
58  _y = ++_n;
59  } else {
60  ++_x;
61  }
62  return *this;
63  }
64 
65  int const getOrder() const { return _n; }
66  int const getX() const { return _x; }
67  int const getY() const { return _y; }
68 
69  int const getIndex() const { return _i; }
70 
71  PackedIndex() : _n(0), _i(0), _x(0), _y(0) {}
72  PackedIndex(int const x, int const y) : _n(x+y), _i(computeOffset(_n) + x), _x(x), _y(y) {}
73 
74 private:
75  int _n;
76  int _i;
77  int _x;
78  int _y;
79 };
80 
85 public:
86 
95  static Eigen::MatrixXd computeInnerProductMatrix(
96  int rowOrder, int colOrder, double a, double b
97  );
98 
99  int getOrder() const { return _xWorkspace.getSize<0>() - 1; }
100 
106  Array1d const & target, double x, double y,
107  Array1d const & dx = Array1d(),
108  Array1d const & dy = Array1d()
109  ) const;
110 
116  Array1d const & target, geom::Point2D const & point,
117  Array1d const & dx = Array1d(),
118  Array1d const & dy = Array1d()
119  ) const {
120  fillEvaluation(target, point.getX(), point.getY(), dx, dy);
121  }
122 
128  Array1d const & target, geom::Extent2D const & point,
129  Array1d const & dx = Array1d(),
130  Array1d const & dy = Array1d()
131  ) const {
132  fillEvaluation(target, point.getX(), point.getY(), dx, dy);
133  }
134 
139  void fillIntegration(Array1d const & target, int xMoment=0, int yMoment=0) const;
140 
145  ndarray::Array<double const,1> const & coeff, double x, double y,
146  double * dx = 0, double * dy = 0
147  ) const;
148 
153  ndarray::Array<double const,1> const & coeff, geom::Point2D const & point,
154  double * dx = 0, double * dy = 0
155  ) const {
156  return sumEvaluation(coeff, point.getX(), point.getY(), dx, dy);
157  }
158 
163  ndarray::Array<double const,1> const & coeff, geom::Extent2D const & point,
164  double * dx = 0, double * dy = 0
165  ) const {
166  return sumEvaluation(coeff, point.getX(), point.getY(), dx, dy);
167  }
168 
172  double sumIntegration(ndarray::Array<double const,1> const & coeff, int xMoment=0, int yMoment=0) const;
173 
175 
176 private:
177 
178  ndarray::Array<double,1,1> _xWorkspace;
179  ndarray::Array<double,1,1> _yWorkspace;
180  ndarray::Array<double,1,1> _dxWorkspace;
181  ndarray::Array<double,1,1> _dyWorkspace;
182 };
183 
184 }} // namespace lsst::shapelet
185 
186 #endif // !defined(LSST_AFW_MATH_SHAPELETS_HERMITEEVALUATOR_H)
Key< Flag > const & target
double x
int y
Definition: SpanSet.cc:48
table::Key< int > b
table::Key< int > a
A class to evaluate HERMITE shapelet-related quantities.
double sumEvaluation(ndarray::Array< double const, 1 > const &coeff, geom::Extent2D const &point, double *dx=0, double *dy=0) const
Evaluate a simple unscaled shapelet expansion at the given point.
static Eigen::MatrixXd computeInnerProductMatrix(int rowOrder, int colOrder, double a, double b)
Fill a matrix with the function inner products of two HERMITE shapelet basis functions with different...
void fillEvaluation(Array1d const &target, geom::Extent2D const &point, Array1d const &dx=Array1d(), Array1d const &dy=Array1d()) const
Fill a vector whose dot product with a HERMITE coefficient vector evaluates a simple unscaled shapele...
double sumIntegration(ndarray::Array< double const, 1 > const &coeff, int xMoment=0, int yMoment=0) const
Integrate a simple unscaled shapelet expansion.
void fillEvaluation(Array1d const &target, double x, double y, Array1d const &dx=Array1d(), Array1d const &dy=Array1d()) const
Fill a vector whose dot product with a HERMITE coefficient vector evaluates a simple unscaled shapele...
double sumEvaluation(ndarray::Array< double const, 1 > const &coeff, double x, double y, double *dx=0, double *dy=0) const
Evaluate a simple unscaled shapelet expansion at the given point.
void fillEvaluation(Array1d const &target, geom::Point2D const &point, Array1d const &dx=Array1d(), Array1d const &dy=Array1d()) const
Fill a vector whose dot product with a HERMITE coefficient vector evaluates a simple unscaled shapele...
double sumEvaluation(ndarray::Array< double const, 1 > const &coeff, geom::Point2D const &point, double *dx=0, double *dy=0) const
Evaluate a simple unscaled shapelet expansion at the given point.
void fillIntegration(Array1d const &target, int xMoment=0, int yMoment=0) const
Fill a vector whose dot product with a HERMITE coefficient vector integrates a simple unscaled shapel...
An iterator-like object to help in traversing "packed" shapelet or Hermite polynomial matrix or vecto...
static int const computeIndex(int x, int y)
PackedIndex(int const x, int const y)
static int const computeOffset(int order)
ndarray::Array< double, 1 > Array1d
Typedef for a commonly-used array type.
Definition: constants.h:121
A base class for image defects.
Constants, typedefs, and general-purpose functions for shapelets library.
table::Key< table::Array< double > > coeff
Definition: PsfexPsf.cc:362
table::Key< int > order