LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
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
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.
int getBasisSize() const
Return the number of basis elements.
MatrixBuilderFactory< T > Factory
Factory type associated with this builder.
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.
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