LSST Applications 26.0.0,g0265f82a02+6660c170cc,g07994bdeae+30b05a742e,g0a0026dc87+17526d298f,g0a60f58ba1+17526d298f,g0e4bf8285c+96dd2c2ea9,g0ecae5effc+c266a536c8,g1e7d6db67d+6f7cb1f4bb,g26482f50c6+6346c0633c,g2bbee38e9b+6660c170cc,g2cc88a2952+0a4e78cd49,g3273194fdb+f6908454ef,g337abbeb29+6660c170cc,g337c41fc51+9a8f8f0815,g37c6e7c3d5+7bbafe9d37,g44018dc512+6660c170cc,g4a941329ef+4f7594a38e,g4c90b7bd52+5145c320d2,g58be5f913a+bea990ba40,g635b316a6c+8d6b3a3e56,g67924a670a+bfead8c487,g6ae5381d9b+81bc2a20b4,g93c4d6e787+26b17396bd,g98cecbdb62+ed2cb6d659,g98ffbb4407+81bc2a20b4,g9ddcbc5298+7f7571301f,ga1e77700b3+99e9273977,gae46bcf261+6660c170cc,gb2715bf1a1+17526d298f,gc86a011abf+17526d298f,gcf0d15dbbd+96dd2c2ea9,gdaeeff99f8+0d8dbea60f,gdb4ec4c597+6660c170cc,ge23793e450+96dd2c2ea9,gf041782ebf+171108ac67
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,
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
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
Key< int > psf
Definition Exposure.cc:65
table::Key< int > order