lsst.geom  20.0.0-3-gbd60e8c+db38f54cd1
Public Types | Public Member Functions | Static Public Member Functions | List of all members
lsst::geom::polynomials::PackedBasis2d< Basis1d, packing > Class Template Reference

A Basis2d formed from the product of a Basis1d for each of x and y, truncated at the sum of their orders. More...

#include <PackedBasis2d.h>

Public Types

using Function = Function2d< PackedBasis2d >
 A Function2d object that uses this basis. More...
 
using Scaled = ScaledBasis2d< PackedBasis2d >
 The type returned by scale(). More...
 
using Workspace = PackedBasisWorkspace2d
 The type returned by makeWorkspace(). More...
 
using IndexRange = PackedIndexRange< packing >
 The type returned by getIndices(). More...
 

Public Member Functions

 PackedBasis2d (Basis1d const &basis1d)
 Construct from a 1-d basis that will be used for both x and y. More...
 
template<typename ... Args>
 PackedBasis2d (Args &&...args)
 Construct by forwarding all arguments to the 1-d basis constructor. More...
 
 PackedBasis2d (PackedBasis2d const &)=default
 Default copy constructor. More...
 
 PackedBasis2d (PackedBasis2d &&)=default
 Default move constructor. More...
 
PackedBasis2doperator= (PackedBasis2d const &)=default
 Default copy assignment. More...
 
PackedBasis2doperator= (PackedBasis2d &&)=default
 Default move assignment. More...
 
std::size_t getOrder () const noexcept
 Return the maximum order of the basis. More...
 
std::size_t size () const noexcept
 Return the number of basis functions. More...
 
Scaled scaled (Scaling2d const &first) const
 Return a scaled basis that delegates to a copy of this. More...
 
std::size_t index (std::size_t x, std::size_t y) const
 Return the flattened index of the basis function with the given x and y orders. More...
 
IndexRange getIndices () const noexcept
 Return a range of iterators that dereference to Index2d. More...
 
Workspace makeWorkspace () const
 Allocate a workspace that can be passed to sumWith() and fill() to avoid repeated memory allocations. More...
 
template<typename Vector >
double sumWith (geom::Point2D const &point, Vector const &coefficients, Workspace &workspace, SumMode mode=SumMode::FAST) const
 Evaluate a basis expansion with the given coefficients. More...
 
template<typename Vector >
double sumWith (geom::Point2D const &point, Vector const &coefficients, SumMode mode=SumMode::FAST) const
 Evaluate a basis expansion with the given coefficients (internal workspace version). More...
 
template<typename Vector >
void fill (geom::Point2D const &point, Vector &&basis, Workspace &workspace) const
 Evaluate the basis at a given point. More...
 
template<typename Vector >
void fill (geom::Point2D const &point, Vector &&basis) const
 Evaluate the basis at a given point (internal workspace version). More...
 

Static Public Member Functions

static constexpr std::size_t computeSize (std::size_t order)
 Return the size of a PackedBasis with the given order. More...
 

Detailed Description

template<typename Basis1d, PackingOrder packing>
class lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >

A Basis2d formed from the product of a Basis1d for each of x and y, truncated at the sum of their orders.

If \(B_n(x)\) are the basis functions for the nested Basis1d, the basis functions of a PackedBasis2d with order \(N\) are \(B_m(x)B_n(y)\) for all combinations with \(m + n \le N\).

The ordering of the products of 1-d basis functions in this 2-d basis is defined by the PackedIndexRange class, which is accessible as the PackedBasis2d::IndexRange. Note that while PackedBasis2d uses this ordering, Basis2d objects in general are not required to.

Definition at line 33 of file PackedBasis2d.h.

Member Typedef Documentation

◆ Function

template<typename Basis1d , PackingOrder packing>
using lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::Function = Function2d<PackedBasis2d>

A Function2d object that uses this basis.

Definition at line 79 of file PackedBasis2d.h.

◆ IndexRange

template<typename Basis1d , PackingOrder packing>
using lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::IndexRange = PackedIndexRange<packing>

The type returned by getIndices().

Definition at line 88 of file PackedBasis2d.h.

◆ Scaled

template<typename Basis1d , PackingOrder packing>
using lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::Scaled = ScaledBasis2d<PackedBasis2d>

The type returned by scale().

Definition at line 82 of file PackedBasis2d.h.

◆ Workspace

template<typename Basis1d , PackingOrder packing>
using lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::Workspace = PackedBasisWorkspace2d

The type returned by makeWorkspace().

Definition at line 85 of file PackedBasis2d.h.

Constructor & Destructor Documentation

◆ PackedBasis2d() [1/4]

template<typename Basis1d , PackingOrder packing>
lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::PackedBasis2d ( Basis1d const &  basis1d)
inlineexplicit

Construct from a 1-d basis that will be used for both x and y.

Definition at line 94 of file PackedBasis2d.h.

◆ PackedBasis2d() [2/4]

template<typename Basis1d , PackingOrder packing>
template<typename ... Args>
lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::PackedBasis2d ( Args &&...  args)
inlineexplicit

Construct by forwarding all arguments to the 1-d basis constructor.

Definition at line 98 of file PackedBasis2d.h.

◆ PackedBasis2d() [3/4]

template<typename Basis1d , PackingOrder packing>
lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::PackedBasis2d ( PackedBasis2d< Basis1d, packing > const &  )
default

Default copy constructor.

◆ PackedBasis2d() [4/4]

template<typename Basis1d , PackingOrder packing>
lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::PackedBasis2d ( PackedBasis2d< Basis1d, packing > &&  )
default

Default move constructor.

Member Function Documentation

◆ computeSize()

template<typename Basis1d , PackingOrder packing>
static constexpr std::size_t lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::computeSize ( std::size_t  order)
inlinestaticconstexpr

Return the size of a PackedBasis with the given order.

Definition at line 91 of file PackedBasis2d.h.

◆ fill() [1/2]

template<typename Basis1d , PackingOrder packing>
template<typename Vector >
void lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::fill ( geom::Point2D const &  point,
Vector &&  basis 
) const
inline

Evaluate the basis at a given point (internal workspace version).

Definition at line 239 of file PackedBasis2d.h.

◆ fill() [2/2]

template<typename Basis1d , PackingOrder packing>
template<typename Vector >
void lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::fill ( geom::Point2D const &  point,
Vector &&  basis,
Workspace workspace 
) const
inline

Evaluate the basis at a given point.

Parameters
[in]pointPoint at which to evaluate the basis functions.
[out]basisFlattened output vector. See Basis1d::fill more information.
[in]workspaceWorkspace object returned by makeWorkspace().
Exception Safety
Does not throw unless coefficients[n] does, and provides basic exception safety if it does.

Definition at line 228 of file PackedBasis2d.h.

◆ getIndices()

template<typename Basis1d , PackingOrder packing>
IndexRange lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::getIndices ( ) const
inlinenoexcept

Return a range of iterators that dereference to Index2d.

This is the recommended way to interpret the packed coefficients and basis functions utilized by PackedBasis2d; for example,

// Evaluate basis functions at a point.
geom::Point2D point(x, y);
PolynomialBasis2d basis(order);
std::vector<double> values(basis.size());
basis.fill(point, values);
// Iterate over tuples of flattened indices and x and y orders.
for (auto const & index : basis.getIndices()) {
double a = values[index.flat];
// standard polynomial basis functions are just powers
double b = std::pow(point.getX(), index.nx)*std::pow(point.getY(), index.ny)];
assert(std::abs(a - b) < std::numeric_limits<double>::epsilon());
}

See PackedIndexIterator for documentation of the actual order.

Definition at line 155 of file PackedBasis2d.h.

◆ getOrder()

template<typename Basis1d , PackingOrder packing>
std::size_t lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::getOrder ( ) const
inlinenoexcept

Return the maximum order of the basis.

Definition at line 113 of file PackedBasis2d.h.

◆ index()

template<typename Basis1d , PackingOrder packing>
std::size_t lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::index ( std::size_t  x,
std::size_t  y 
) const
inline

Return the flattened index of the basis function with the given x and y orders.

Definition at line 129 of file PackedBasis2d.h.

◆ makeWorkspace()

template<typename Basis1d , PackingOrder packing>
Workspace lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::makeWorkspace ( ) const
inline

Allocate a workspace that can be passed to sumWith() and fill() to avoid repeated memory allocations.

Definition at line 160 of file PackedBasis2d.h.

◆ operator=() [1/2]

template<typename Basis1d , PackingOrder packing>
PackedBasis2d& lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::operator= ( PackedBasis2d< Basis1d, packing > &&  )
default

Default move assignment.

◆ operator=() [2/2]

template<typename Basis1d , PackingOrder packing>
PackedBasis2d& lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::operator= ( PackedBasis2d< Basis1d, packing > const &  )
default

Default copy assignment.

◆ scaled()

template<typename Basis1d , PackingOrder packing>
Scaled lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::scaled ( Scaling2d const &  first) const
inline

Return a scaled basis that delegates to a copy of this.

The scaled basis will transform all points by the given scaling before evaluating the basis functions in the same way as this.

Definition at line 124 of file PackedBasis2d.h.

◆ size()

template<typename Basis1d , PackingOrder packing>
std::size_t lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::size ( ) const
inlinenoexcept

Return the number of basis functions.

Definition at line 116 of file PackedBasis2d.h.

◆ sumWith() [1/2]

template<typename Basis1d , PackingOrder packing>
template<typename Vector >
double lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::sumWith ( geom::Point2D const &  point,
Vector const &  coefficients,
SumMode  mode = SumMode::FAST 
) const
inline

Evaluate a basis expansion with the given coefficients (internal workspace version).

Definition at line 210 of file PackedBasis2d.h.

◆ sumWith() [2/2]

template<typename Basis1d , PackingOrder packing>
template<typename Vector >
double lsst::geom::polynomials::PackedBasis2d< Basis1d, packing >::sumWith ( geom::Point2D const &  point,
Vector const &  coefficients,
Workspace workspace,
SumMode  mode = SumMode::FAST 
) const
inline

Evaluate a basis expansion with the given coefficients.

If the 1-d basis elements are \(B_n(x)\) and the given coefficients are a vector \(a_{p, q}\), this computes

\[ \sum_{p = 0, q = 0}^{p + q \le N} a_{p,q} B_{p}(x) B_{q}(y) \]

Parameters
[in]pointPoint at which to evaluate the expansion.
[in]coefficientsFlattened coefficients vector. See Basis1d::sumWith for more information.
[in]workspaceWorkspace object returned by makeWorkspace().
[in]modeEnum indicating the tradeoff to make between speed and numerical precision.
Exception Safety
Does not throw unless coefficients[n] does, and provides the same exception safety as it if it does.

Definition at line 182 of file PackedBasis2d.h.


The documentation for this class was generated from the following file:
std::vector
STL class.
lsst::geom::Point2D
Point< double, 2 > Point2D
Definition: Point.h:324
lsst::geom::polynomials::PackedBasis2d::index
std::size_t index(std::size_t x, std::size_t y) const
Return the flattened index of the basis function with the given x and y orders.
Definition: PackedBasis2d.h:129
lsst::geom::polynomials::PolynomialBasis2d
PackedBasis2d< PolynomialBasis1d, packing > PolynomialBasis2d
A Basis2d for standard polynomials, templated on packing order.
Definition: PolynomialBasis2d.h:34
std::numeric_limits
std::pow
T pow(T... args)