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
MultiShapeletBasis.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 /*
3  * LSST Data Management System
4  * Copyright 2008-2013 LSST Corporation.
5  *
6  * This product includes software developed by the
7  * LSST Project (http://www.lsst.org/).
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the LSST License Statement and
20  * the GNU General Public License along with this program. If not,
21  * see <http://www.lsstcorp.org/LegalNotices/>.
22  */
23 #ifndef LSST_SHAPELET_MultiShapeletBasis_h_INCLUDED
24 #define LSST_SHAPELET_MultiShapeletBasis_h_INCLUDED
25 
27 
28 namespace lsst { namespace shapelet {
29 
41 public:
42 
58  MultiShapeletBasisComponent(double radius, int order, ndarray::Array<double const,2,2> const & matrix);
59 
61  double getRadius() const { return _radius; }
62 
64  int getOrder() const { return _order; }
65 
67  ndarray::Array<double const,2,2> getMatrix() const { return _matrix; }
68 
69 private:
70  friend class MultiShapeletBasis;
71 
72  double _radius;
73  int _order;
74  ndarray::Array<double const,2,2> _matrix;
75 };
76 
94 public:
97  typedef ComponentVector::const_iterator Iterator;
98 
100  explicit MultiShapeletBasis(int size);
101 
103  int getSize() const { return _size; }
104 
106  int getComponentCount() const { return _components.size(); }
107 
109  Iterator begin() const { return _components.begin(); }
111  Iterator end() const { return _components.end(); }
113 
119  void addComponent(double radius, int order, ndarray::Array<double const,2,2> const & matrix);
120 
122  void scale(double factor);
123 
125  void normalize();
126 
128  void merge(MultiShapeletBasis const & other);
129 
138  afw::geom::ellipses::Ellipse const & ellipse,
139  ndarray::Array<double const,1,1> const & coefficients
140  ) const;
141 
142 private:
143  int _size;
144  ComponentVector _components;
145 };
146 
147 }} // namespace lsst::shapelet
148 
149 #endif // !LSST_SHAPELET_MultiShapeletBasis_h_INCLUDED
ndarray::Array< double const, 2, 2 > coefficients
T begin(T... args)
An ellipse defined by an arbitrary BaseCore and a center point.
Definition: Ellipse.h:51
Simple struct that represents one shapelet expansion in a MultiShapeletBasis.
MultiShapeletBasisComponent(double radius, int order, ndarray::Array< double const, 2, 2 > const &matrix)
Main constructor for MultiShapeletBasisComponent.
int getOrder() const
Order of this shapelet expansion.
ndarray::Array< double const, 2, 2 > getMatrix() const
Matrix whose elements [i,j] map MultiShapeletBasis elements j to shapelet terms i.
double getRadius() const
Return the radius of this shapelet expansion.
A basis formed from a linear combination of shapelet bases that differ only in radius.
void merge(MultiShapeletBasis const &other)
Combine the given basis with this (in place), by appending its elements.
MultiShapeletBasis(int size)
Construct a MultiShapeletBasis with the given number of elements (i.e. free amplitudes).
void normalize()
Rescale all matrices so each element has unit flux.
Iterator begin() const
Iterator over the components (distinct shapelet bases) of the MultiShapeletBasis.
ComponentVector::const_iterator Iterator
int getComponentCount() const
Return the number of components (distinct shapelet bases) in the MultiShapeletBasis.
int getSize() const
Return the number of elements (i.e. free amplitudes) in the MultiShapeletBasis.
MultiShapeletBasisComponent Component
void scale(double factor)
Multiply the radius of all basis elements by the given factor.
std::vector< Component > ComponentVector
MultiShapeletFunction makeFunction(afw::geom::ellipses::Ellipse const &ellipse, ndarray::Array< double const, 1, 1 > const &coefficients) const
Create a MultiShapeletFunction from the basis.
void addComponent(double radius, int order, ndarray::Array< double const, 2, 2 > const &matrix)
Add a new component (shapelet basis) to the MultiShapeletBasis.
A multi-scale shapelet function.
T end(T... args)
A base class for image defects.
T size(T... args)
table::Key< int > order