LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
MatrixBuilder.h
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2/*
3 * LSST Data Management System
4 * Copyright 2008-2014 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_MatrixBuilder_h_INCLUDED
24#define LSST_SHAPELET_MatrixBuilder_h_INCLUDED
25
26#include "ndarray.h"
27
31
32namespace lsst { namespace shapelet {
33
34class MultiShapeletBasis;
35
36template <typename T>
37class MatrixBuilderFactory;
38
39template <typename T>
40class MatrixBuilderWorkspace;
41
54template <typename T>
56public:
57
60
61 class Impl; // Private implementation, defined in .cc; public to allow us to subclass it there
62
71 ndarray::Array<T const,1,1> const & x,
72 ndarray::Array<T const,1,1> const & y,
73 int order
74 );
75
86 ndarray::Array<T const,1,1> const & x,
87 ndarray::Array<T const,1,1> const & y,
88 int order,
89 ShapeletFunction const & psf
90 );
91
100 ndarray::Array<T const,1,1> const & x,
101 ndarray::Array<T const,1,1> const & y,
103 );
104
115 ndarray::Array<T const,1,1> const & x,
116 ndarray::Array<T const,1,1> const & y,
119 );
120
122 int getDataSize() const;
123
125 int getBasisSize() const;
126
128 ndarray::Array<T,2,-2> allocateOutput() const;
129
139 ndarray::Array<T,2,-1> const & output,
140 afw::geom::ellipses::Ellipse const & ellipse
141 ) const;
142
149 ndarray::Array<T,2,-2> operator()(afw::geom::ellipses::Ellipse const & ellipse) const {
150 ndarray::Array<T,2,-2> output = allocateOutput();
151 (*this)(output, ellipse);
152 return output;
153 }
154
155private:
156
157 template <typename U> friend class MatrixBuilderFactory;
158
160
162};
163
187template <typename T>
189public:
190
191 typedef Eigen::Map< Eigen::Array<T,Eigen::Dynamic,Eigen::Dynamic> > Matrix;
192 typedef Eigen::Map< Eigen::Array<T,Eigen::Dynamic,1> > Vector;
193
195 explicit MatrixBuilderWorkspace(int size);
196
204 _current(other._current),
205 _end(other._end),
206 _manager(other._manager)
207 {}
208
210 int getRemaining() const { return _end - _current; }
211
212#ifndef SWIG
213
215 Matrix makeMatrix(int rows, int cols);
216
219
221 void increment(int size);
222
224 ndarray::Manager::Ptr getManager() const { return _manager; }
225
226#endif
227
228private:
229
230 void operator=(MatrixBuilderWorkspace & other); // disabled
231
232 T * _current;
233 T * _end;
234 ndarray::Manager::Ptr _manager;
235};
236
264template <typename T>
266public:
267
270
271 class Impl; // Private implementation, defined in .cc; public to allow us to subclass it there
272
281 ndarray::Array<T const,1,1> const & x,
282 ndarray::Array<T const,1,1> const & y,
283 int order
284 );
285
296 ndarray::Array<T const,1,1> const & x,
297 ndarray::Array<T const,1,1> const & y,
298 int order,
299 ShapeletFunction const & psf
300 );
301
310 ndarray::Array<T const,1,1> const & x,
311 ndarray::Array<T const,1,1> const & y,
313 );
314
325 ndarray::Array<T const,1,1> const & x,
326 ndarray::Array<T const,1,1> const & y,
329 );
330
332 int getDataSize() const;
333
335 int getBasisSize() const;
336
338 int computeWorkspace() const;
339
342
345
346private:
348};
349
350}} // namespace lsst::shapelet
351
352#endif // !LSST_SHAPELET_MatrixBuilder_h_INCLUDED
double x
int y
Definition: SpanSet.cc:48
An ellipse defined by an arbitrary BaseCore and a center point.
Definition: Ellipse.h:51
A factory class for MatrixBuilder, providing more control over workspace memory.
MatrixBuilderWorkspace< T > Workspace
Associated workspace class.
MatrixBuilder< T > operator()() const
Return a new MatrixBuilder with internal, unshared workspace.
MatrixBuilder< T > Builder
Associated builder class.
int getDataSize() const
Return the number of data points.
MatrixBuilder< T > operator()(Workspace &workspace) const
Return a new MatrixBuilder using the given workspace.
int getBasisSize() const
Return the number of basis elements.
MatrixBuilderFactory(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, int order)
Create a MatrixBuilder that evaluates a simple non-compound shapelet basis.
MatrixBuilderFactory(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, int order, ShapeletFunction const &psf)
Create a MatrixBuilder that evaluates a simple non-compound shapelet basis after convolving it with a...
MatrixBuilderFactory(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, MultiShapeletBasis const &basis, MultiShapeletFunction const &psf)
Create a MatrixBuilder that evaluates a MultiShapeletBasis object after convolving it with a MultiSha...
MatrixBuilderFactory(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, MultiShapeletBasis const &basis)
Create a MatrixBuilder that evaluates a MultiShapeletBasis object.
int computeWorkspace() const
Return the size of the workspace needed for this MatrixBuilder, in elements of T.
Class that evaluates a (multi-)shapelet basis at predefined points.
Definition: MatrixBuilder.h:55
int getBasisSize() const
Return the number of basis elements.
MatrixBuilderFactory< T > Factory
Factory type associated with this builder.
Definition: MatrixBuilder.h:58
MatrixBuilder(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, int order)
Create a MatrixBuilder that evaluates a simple non-compound shapelet basis.
ndarray::Array< T, 2,-2 > allocateOutput() const
Return a matrix appropriate for use as an output for operator().
MatrixBuilder(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, int order, ShapeletFunction const &psf)
Create a MatrixBuilder that evaluates a simple non-compound shapelet basis after convolving it with a...
int getDataSize() const
Return the number of data points.
MatrixBuilderWorkspace< T > Workspace
Workspace type associated with this builder.
Definition: MatrixBuilder.h:59
MatrixBuilder(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, MultiShapeletBasis const &basis, MultiShapeletFunction const &psf)
Create a MatrixBuilder that evaluates a MultiShapeletBasis object after convolving it with a MultiSha...
void operator()(ndarray::Array< T, 2,-1 > const &output, afw::geom::ellipses::Ellipse const &ellipse) const
Fill an array with the model matrix.
MatrixBuilder(ndarray::Array< T const, 1, 1 > const &x, ndarray::Array< T const, 1, 1 > const &y, MultiShapeletBasis const &basis)
Create a MatrixBuilder that evaluates a MultiShapeletBasis object.
ndarray::Array< T, 2,-2 > operator()(afw::geom::ellipses::Ellipse const &ellipse) const
Return a newly-allocated model matrix.
Reusable, shareable workspace for MatrixBuilder.
int getRemaining() const
Return the size (in units of sizeof(T)) of the unused memory in the workspace.
MatrixBuilderWorkspace(int size)
Allocate a block of memory with the given number of elements (of type T).
Eigen::Map< Eigen::Array< T, Eigen::Dynamic, Eigen::Dynamic > > Matrix
Workspace matrix type.
MatrixBuilderWorkspace(MatrixBuilderWorkspace const &other)
Copy the current state of the workspace, allowing multiple MatrixBuilders to start their workspace ar...
Vector makeVector(int size)
Create a vector from the workspace memory, and increment the current location accordingly.
void increment(int size)
Manually increment the current location.
Eigen::Map< Eigen::Array< T, Eigen::Dynamic, 1 > > Vector
Workspace vector type.
Matrix makeMatrix(int rows, int cols)
Create a matrix from the workspace memory, and increment the current location accordingly.
ndarray::Manager::Ptr getManager() const
Return the manager object that owns the block of memory.
A basis formed from a linear combination of shapelet bases that differ only in radius.
A multi-scale shapelet function.
A 2-d function defined by an expansion onto a Gauss-Laguerre or Gauss-Hermite basis.
A base class for image defects.
Constants, typedefs, and general-purpose functions for shapelets library.
table::Key< table::Array< double > > basis
Definition: PsfexPsf.cc:361
Key< int > psf
Definition: Exposure.cc:65
table::Key< int > order