LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
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,
118 MultiShapeletFunction const & psf
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,
328 MultiShapeletFunction const & psf
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.
Constants, typedefs, and general-purpose functions for shapelets library.
table::Key< table::Array< double > > basis
Definition: PsfexPsf.cc:361
table::Key< int > order