LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Types | Public Member Functions | Protected Member Functions | List of all members
lsst::afw::geom::BaseEndpoint< PointT, ArrayT > Class Template Referenceabstract

Virtual base class for endpoints, which are helper classes for Transform. More...

#include <Endpoint.h>

Inheritance diagram for lsst::afw::geom::BaseEndpoint< PointT, ArrayT >:
lsst::afw::geom::BaseVectorEndpoint< lsst::geom::Point2D > lsst::afw::geom::BaseVectorEndpoint< lsst::geom::SpherePoint > lsst::afw::geom::Point2Endpoint lsst::afw::geom::SpherePointEndpoint

Public Types

using Point = PointT
 
using Array = ArrayT
 

Public Member Functions

 BaseEndpoint (BaseEndpoint const &)=default
 
 BaseEndpoint (BaseEndpoint &&)=default
 
BaseEndpointoperator= (BaseEndpoint const &)=delete
 
BaseEndpointoperator= (BaseEndpoint &&)=delete
 
virtual ~BaseEndpoint ()=default
 
int getNAxes () const
 
virtual int getNPoints (Array const &arr) const =0
 Return the number of points in an array. More...
 
virtual bool operator== (BaseEndpoint const &other) const noexcept
 Determine whether two endpoints represent the same conversion. More...
 
bool operator!= (BaseEndpoint const &other) const noexcept
 Determine whether two endpoints do not represent the same conversion. More...
 
virtual std::vector< double > dataFromPoint (Point const &point) const =0
 Get raw data from a single point. More...
 
virtual ndarray::Array< double, 2, 2 > dataFromArray (Array const &arr) const =0
 Get raw data from an array of points. More...
 
virtual Point pointFromData (std::vector< double > const &data) const =0
 Get a single point from raw data. More...
 
virtual Array arrayFromData (ndarray::Array< double, 2, 2 > const &data) const =0
 Get an array of points from raw data. More...
 
virtual std::shared_ptr< ast::FramemakeFrame () const
 Create a Frame that can be used with this end point in a Transform. More...
 
virtual void normalizeFrame (std::shared_ptr< ast::Frame > framePtr) const
 Adjust and check the frame as needed. More...
 

Protected Member Functions

 BaseEndpoint (int nAxes)
 Construct a BaseEndpoint. More...
 
void _assertNAxes (int nAxes) const
 
int _getNAxes (ndarray::Array< double, 2, 2 > const &data) const
 
int _getNAxes (ndarray::Array< double, 1, 1 > const &data) const
 
int _getNAxes (std::vector< double > const &data) const
 
int _getNPoints (ndarray::Array< double, 2, 2 > const &data) const
 

Detailed Description

template<typename PointT, typename ArrayT>
class lsst::afw::geom::BaseEndpoint< PointT, ArrayT >

Virtual base class for endpoints, which are helper classes for Transform.

Endpoints transform points and lists of points from LSST-specific data types, such as lsst::geom::Point2D and lsst::geom::SpherePoint, to a form accepted by ast::Mapping.tran. Each type of endpoint is used for a particular LSST data type, for example:

Endpoints use the following forms of data for raw data:

Endpoints are designed as helper classes for Transform. Each transform has a two endpoints: one for input data and one for output data.

Endpoint also provides two methods to work with ast::Frames:

Template Parameters
PointTLSST data type for one point
ArrayTLSST data type for an array of points

Definition at line 67 of file Endpoint.h.

Member Typedef Documentation

◆ Array

template<typename PointT , typename ArrayT >
using lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::Array = ArrayT

Definition at line 70 of file Endpoint.h.

◆ Point

template<typename PointT , typename ArrayT >
using lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::Point = PointT

Definition at line 69 of file Endpoint.h.

Constructor & Destructor Documentation

◆ BaseEndpoint() [1/3]

template<typename PointT , typename ArrayT >
lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::BaseEndpoint ( BaseEndpoint< PointT, ArrayT > const &  )
default

◆ BaseEndpoint() [2/3]

template<typename PointT , typename ArrayT >
lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::BaseEndpoint ( BaseEndpoint< PointT, ArrayT > &&  )
default

◆ ~BaseEndpoint()

template<typename PointT , typename ArrayT >
virtual lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::~BaseEndpoint ( )
virtualdefault

◆ BaseEndpoint() [3/3]

template<typename Point , typename Array >
lsst::afw::geom::BaseEndpoint< Point, Array >::BaseEndpoint ( int  nAxes)
explicitprotected

Construct a BaseEndpoint.

Parameters
[in]nAxesThe number of axes in a point; must be > 0
Exceptions
lsst.pex.exceptions.InvalidParameterErrorif nAxes <= 0

Definition at line 55 of file Endpoint.cc.

55  : _nAxes(nAxes) {
56  if (nAxes <= 0) {
58  "nAxes = " + std::to_string(nAxes) + "; must be > 0");
59  }
60 }
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition: Exception.h:48
Reports invalid arguments.
Definition: Runtime.h:66
T to_string(T... args)

Member Function Documentation

◆ _assertNAxes()

template<typename Point , typename Array >
void lsst::afw::geom::BaseEndpoint< Point, Array >::_assertNAxes ( int  nAxes) const
protected

Definition at line 73 of file Endpoint.cc.

73  {
74  if (nAxes != this->getNAxes()) {
76  os << "number of axes provided " << nAxes << " != " << this->getNAxes() << " required";
77  throw std::invalid_argument(os.str());
78  }
79 }
std::ostream * os
Definition: Schema.cc:557

◆ _getNAxes() [1/3]

template<typename PointT , typename ArrayT >
int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::_getNAxes ( ndarray::Array< double, 1, 1 > const &  data) const
inlineprotected

Definition at line 179 of file Endpoint.h.

179 { return data.getSize<0>(); }
char * data
Definition: BaseRecord.cc:61

◆ _getNAxes() [2/3]

template<typename PointT , typename ArrayT >
int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::_getNAxes ( ndarray::Array< double, 2, 2 > const &  data) const
inlineprotected

Definition at line 177 of file Endpoint.h.

177 { return data.getSize<0>(); }

◆ _getNAxes() [3/3]

template<typename PointT , typename ArrayT >
int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::_getNAxes ( std::vector< double > const &  data) const
inlineprotected

Definition at line 181 of file Endpoint.h.

181 { return data.size(); }

◆ _getNPoints()

template<typename PointT , typename ArrayT >
int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::_getNPoints ( ndarray::Array< double, 2, 2 > const &  data) const
inlineprotected

Definition at line 183 of file Endpoint.h.

183 { return data.getSize<1>(); }

◆ arrayFromData()

template<typename PointT , typename ArrayT >
virtual Array lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::arrayFromData ( ndarray::Array< double, 2, 2 > const &  data) const
pure virtual

Get an array of points from raw data.

Parameters
[in]dataRaw data for an array of points, as a 2-D ndarray array [nPoints, nAxes] in C order, so the in-memory view is, for example, x0, y0, x1, y1, x2, y2, ...
Returns
an array of points
Exceptions
lsst::pex::exceptions::InvalidParameterErrorif the array has the wrong nAxes dimension

Implemented in lsst::afw::geom::SpherePointEndpoint, lsst::afw::geom::Point2Endpoint, and lsst::afw::geom::GenericEndpoint.

◆ dataFromArray()

template<typename PointT , typename ArrayT >
virtual ndarray::Array<double, 2, 2> lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::dataFromArray ( Array const &  arr) const
pure virtual

Get raw data from an array of points.

Parameters
[in]arrArray of points
Returns
the data as a 2-D ndarray array [nAxes, nPoints] in C order, so the in-memory view is, for example, x0, x1, x2, ..., y0, y1, y2, ...
Exceptions
lsst::pex::exceptions::InvalidParameterErrorif the array has the wrong nAxes dimension

Implemented in lsst::afw::geom::SpherePointEndpoint, and lsst::afw::geom::Point2Endpoint.

◆ dataFromPoint()

template<typename PointT , typename ArrayT >
virtual std::vector<double> lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::dataFromPoint ( Point const &  point) const
pure virtual

Get raw data from a single point.

Parameters
[in]pointdata for a single point
Returns
the values in the point as a vector of size NAxess
Exceptions
lsst::pex::exceptions::InvalidParameterErrorif the point has the wrong number of axes

Implemented in lsst::afw::geom::SpherePointEndpoint, and lsst::afw::geom::Point2Endpoint.

◆ getNAxes()

template<typename PointT , typename ArrayT >
int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::getNAxes ( ) const
inline

Definition at line 79 of file Endpoint.h.

79 { return _nAxes; }

◆ getNPoints()

template<typename PointT , typename ArrayT >
virtual int lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::getNPoints ( Array const &  arr) const
pure virtual

Return the number of points in an array.

Implemented in lsst::afw::geom::GenericEndpoint, and lsst::afw::geom::BaseVectorEndpoint< PointT >.

◆ makeFrame()

template<typename Point , typename Array >
std::shared_ptr< ast::Frame > lsst::afw::geom::BaseEndpoint< Point, Array >::makeFrame
virtual

Create a Frame that can be used with this end point in a Transform.

Reimplemented in lsst::afw::geom::SpherePointEndpoint.

Definition at line 68 of file Endpoint.cc.

68  {
69  return std::make_shared<ast::Frame>(getNAxes());
70 }

◆ normalizeFrame()

template<typename PointT , typename ArrayT >
virtual void lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::normalizeFrame ( std::shared_ptr< ast::Frame framePtr) const
inlinevirtual

Adjust and check the frame as needed.

Do not bother to check the number of axes because that is done elsewhere.

The base implementation does nothing.

Reimplemented in lsst::afw::geom::SpherePointEndpoint, and lsst::afw::geom::Point2Endpoint.

Definition at line 163 of file Endpoint.h.

163 {};

◆ operator!=()

template<typename PointT , typename ArrayT >
bool lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::operator!= ( BaseEndpoint< PointT, ArrayT > const &  other) const
inlinenoexcept

Determine whether two endpoints do not represent the same conversion.

Returns
the inverse of operator==. See that operator's documentation for important caveats.

Definition at line 109 of file Endpoint.h.

109 { return !(*this == other); }

◆ operator=() [1/2]

template<typename PointT , typename ArrayT >
BaseEndpoint& lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::operator= ( BaseEndpoint< PointT, ArrayT > &&  )
delete

◆ operator=() [2/2]

template<typename PointT , typename ArrayT >
BaseEndpoint& lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::operator= ( BaseEndpoint< PointT, ArrayT > const &  )
delete

◆ operator==()

template<typename Point , typename Array >
bool lsst::afw::geom::BaseEndpoint< Point, Array >::operator== ( BaseEndpoint< PointT, ArrayT > const &  other) const
virtualnoexcept

Determine whether two endpoints represent the same conversion.

Parameters
otherthe endpoint to compare
Returns
true iff this object and other are of exactly the same class and all visible properties are identical. This implementation requires that the objects have the same number of axes.
Warning
Two endpoints with different implementation classes will never compare equal, even if one class is conceptually equivalent to the other (e.g., a decorator). This may cause unexpected behavior when mixing related concrete endpoint classes.

Definition at line 63 of file Endpoint.cc.

63  {
64  return this->getNAxes() == other.getNAxes() && typeid(*this) == typeid(other);
65 }

◆ pointFromData()

template<typename PointT , typename ArrayT >
virtual Point lsst::afw::geom::BaseEndpoint< PointT, ArrayT >::pointFromData ( std::vector< double > const &  data) const
pure virtual

Get a single point from raw data.

Parameters
[in]dataData as a vector of length NAxes
Returns
the corresponding point

Implemented in lsst::afw::geom::SpherePointEndpoint, lsst::afw::geom::Point2Endpoint, and lsst::afw::geom::GenericEndpoint.


The documentation for this class was generated from the following files: