LSST Applications g013ef56533+7c9321ec0f,g042eb84c57+c6cfa41bc3,g199a45376c+0ba108daf9,g1fd858c14a+fcad0d0313,g210f2d0738+c0f94c6586,g262e1987ae+a7e710680e,g29ae962dfc+fb55f2edb0,g2ac17093b6+61d6563b1e,g2b1d02342f+df6f932764,g2cef7863aa+aef1011c0b,g2f7ad74990+c0f94c6586,g35bb328faa+8c5ae1fdc5,g3fd5ace14f+53cf87ae69,g47891489e3+4316d04fff,g511e8cfd20+baa56acf6c,g53246c7159+8c5ae1fdc5,g54cd7ddccb+fd7ad03fde,g64539dfbff+c0f94c6586,g67b6fd64d1+4316d04fff,g67fd3c3899+c0f94c6586,g6985122a63+4316d04fff,g74acd417e5+ca833bee28,g786e29fd12+668abc6043,g81db2e9a8d+b2ec8e584f,g87389fa792+8856018cbb,g89139ef638+4316d04fff,g8d7436a09f+0a24083b20,g8ea07a8fe4+760ca7c3fc,g90f42f885a+033b1d468d,g97be763408+11eb8fd5b8,gbf99507273+8c5ae1fdc5,gcdda8b9158+e4c84c9d5c,gce8aa8abaa+8c5ae1fdc5,gd7ef33dd92+4316d04fff,gdab6d2f7ff+ca833bee28,ge410e46f29+4316d04fff,geaed405ab2+c4bbc419c6,gf9a733ac38+8c5ae1fdc5,w.2025.40
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
35
36template <typename T>
38
39template <typename T>
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,
102 MultiShapeletBasis const & basis
103 );
104
115 ndarray::Array<T const,1,1> const & x,
116 ndarray::Array<T const,1,1> const & y,
117 MultiShapeletBasis const & basis,
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,
312 MultiShapeletBasis const & basis
313 );
314
325 ndarray::Array<T const,1,1> const & x,
326 ndarray::Array<T const,1,1> const & y,
327 MultiShapeletBasis const & basis,
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
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.