LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
33namespace lsst { namespace shapelet {
34
49public:
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
74private:
75 int _n;
76 int _i;
77 int _x;
78 int _y;
79};
80
85public:
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
176private:
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
int y
Definition SpanSet.cc:48
table::Key< int > b
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
Constants, typedefs, and general-purpose functions for shapelets library.
table::Key< table::Array< double > > coeff
Definition PsfexPsf.cc:362
table::Key< int > order