LSST Applications g0f08755f38+9c285cab97,g1635faa6d4+13f3999e92,g1653933729+a8ce1bb630,g1a0ca8cf93+bf6eb00ceb,g28da252d5a+0829b12dee,g29321ee8c0+5700dc9eac,g2bbee38e9b+9634bc57db,g2bc492864f+9634bc57db,g2cdde0e794+c2c89b37c4,g3156d2b45e+41e33cbcdc,g347aa1857d+9634bc57db,g35bb328faa+a8ce1bb630,g3a166c0a6a+9634bc57db,g3e281a1b8c+9f2c4e2fc3,g414038480c+077ccc18e7,g41af890bb2+fde0dd39b6,g5fbc88fb19+17cd334064,g781aacb6e4+a8ce1bb630,g80478fca09+55a9465950,g82479be7b0+d730eedb7d,g858d7b2824+9c285cab97,g9125e01d80+a8ce1bb630,g9726552aa6+10f999ec6a,ga5288a1d22+2a84bb7594,gacf8899fa4+c69c5206e8,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+9634bc57db,gcf0d15dbbd+4b7d09cae4,gda3e153d99+9c285cab97,gda6a2b7d83+4b7d09cae4,gdaeeff99f8+1711a396fd,ge2409df99d+5e831397f4,ge79ae78c31+9634bc57db,gf0baf85859+147a0692ba,gf3967379c6+41c94011de,gf3fb38a9a8+8f07a9901b,gfb92a5be7c+9c285cab97,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Types | Static Public Member Functions | List of all members
lsst::meas::base::SincCoeffs< PixelT > Class Template Reference

A singleton to calculate and cache the coefficients for sinc photometry. More...

#include <SincCoeffs.h>

Public Types

typedef afw::image::Image< PixelT > CoeffT
 

Static Public Member Functions

static void cache (float rInner, float rOuter)
 Cache the coefficients for a particular aperture.
 
static std::shared_ptr< CoeffT const > get (afw::geom::ellipses::Axes const &outerEllipse, float const innerRadiusFactor=0.0)
 Get the coefficients for an aperture.
 
static std::shared_ptr< CoeffTcalculate (afw::geom::ellipses::Axes const &outerEllipse, double const innerFactor=0.0)
 Calculate the coefficients for an aperture.
 

Detailed Description

template<typename PixelT>
class lsst::meas::base::SincCoeffs< PixelT >

A singleton to calculate and cache the coefficients for sinc photometry.

Caching is only performed for circular apertures (because elliptical apertures are assumed to be generated dynamically, and hence not expected to recur). Caching must be explicitly requested for a particular circular aperture (using the 'cache' method).

Definition at line 45 of file SincCoeffs.h.

Member Typedef Documentation

◆ CoeffT

template<typename PixelT >
typedef afw::image::Image<PixelT> lsst::meas::base::SincCoeffs< PixelT >::CoeffT

Definition at line 47 of file SincCoeffs.h.

Member Function Documentation

◆ cache()

template<typename PixelT >
void lsst::meas::base::SincCoeffs< PixelT >::cache ( float rInner,
float rOuter )
static

Cache the coefficients for a particular aperture.

The aperture is a circular annulus.

Definition at line 491 of file SincCoeffs.cc.

491 {
492 if (r1 < 0.0 || r2 < r1) {
493 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError,
494 (boost::format("Invalid r1,r2 = %f,%f") % r1 % r2).str());
495 }
496 double const innerFactor = r1 / r2;
497 afw::geom::ellipses::Axes axes(r2, r2, 0.0);
498 if (!getInstance()._lookup(axes, innerFactor)) {
500 getInstance()._cache[r2][innerFactor] = coeff;
501 }
502}
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition Exception.h:48
static std::shared_ptr< CoeffT > calculate(afw::geom::ellipses::Axes const &outerEllipse, double const innerFactor=0.0)
Calculate the coefficients for an aperture.
table::Key< table::Array< double > > coeff
Definition PsfexPsf.cc:366

◆ calculate()

template<typename PixelT >
std::shared_ptr< typename SincCoeffs< PixelT >::CoeffT > lsst::meas::base::SincCoeffs< PixelT >::calculate ( afw::geom::ellipses::Axes const & outerEllipse,
double const innerFactor = 0.0 )
static

Calculate the coefficients for an aperture.

Definition at line 535 of file SincCoeffs.cc.

535 {
536 if (innerFactor < 0.0 || innerFactor > 1.0) {
537 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError,
538 (boost::format("innerFactor = %f is not between 0 and 1") % innerFactor).str());
539 }
540
541 // Kspace-real is fastest, but only slightly faster than kspace cplx
542 // but real won't work for elliptical apertures due to symmetries assumed for real transform
543
544 double const rad1 = axes.getA() * innerFactor;
545 double const rad2 = axes.getA();
546 // if there's no angle and no ellipticity
547 if (FuzzyCompare<float>().isEqual(axes.getA(), axes.getB())) {
548 // here we call the real transform
549 return calcImageKSpaceReal<PixelT>(rad1, rad2);
550 } else {
551 // here we call the complex transform
552 double const ellipticity = 1.0 - axes.getB() / axes.getA();
553 return calcImageKSpaceCplx<PixelT>(rad1, rad2, axes.getTheta(), ellipticity);
554 }
555}

◆ get()

template<typename PixelT >
std::shared_ptr< typename SincCoeffs< PixelT >::CoeffT const > lsst::meas::base::SincCoeffs< PixelT >::get ( afw::geom::ellipses::Axes const & outerEllipse,
float const innerRadiusFactor = 0.0 )
static

Get the coefficients for an aperture.

Coefficients are retrieved from the cache, if available; otherwise they will be generated.

Definition at line 506 of file SincCoeffs.cc.

506 {
507 std::shared_ptr<CoeffT const> coeff = getInstance()._lookup(axes, innerFactor);
508 return coeff ? coeff : calculate(axes, innerFactor);
509}

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