26 #include "ndarray/eigen.h"
47 struct GaussianPsfPersistenceHelper {
52 static GaussianPsfPersistenceHelper
const& get() {
53 static GaussianPsfPersistenceHelper instance;
58 GaussianPsfPersistenceHelper(
const GaussianPsfPersistenceHelper&) =
delete;
59 GaussianPsfPersistenceHelper&
operator=(
const GaussianPsfPersistenceHelper&) =
delete;
62 GaussianPsfPersistenceHelper(GaussianPsfPersistenceHelper&&) =
delete;
63 GaussianPsfPersistenceHelper&
operator=(GaussianPsfPersistenceHelper&&) =
delete;
66 GaussianPsfPersistenceHelper()
69 "width/height of realization of Psf",
"pixel")),
70 sigma(
schema.addField<double>(
"sigma",
"radius of Gaussian",
"pixel")) {}
73 class GaussianPsfFactory :
public afw::table::io::PersistableFactory {
76 CatalogVector
const& catalogs)
const override {
77 static GaussianPsfPersistenceHelper
const&
keys = GaussianPsfPersistenceHelper::get();
80 afw::table::BaseRecord
const& record = catalogs.front().front();
82 return std::make_shared<GaussianPsf>(record.get(
keys.dimensions.getX()),
83 record.get(
keys.dimensions.getY()), record.get(
keys.sigma));
89 GaussianPsfFactory registration(
"GaussianPsf");
93 throw LSST_EXCEPT(pex::exceptions::InvalidParameterError,
"GaussianPsf dimensions must be odd");
100 :
Psf(true), _dimensions(width, height), _sigma(
sigma) {
101 checkDimensions(_dimensions);
106 checkDimensions(_dimensions);
114 return std::make_shared<GaussianPsf>(_dimensions, _sigma);
126 static GaussianPsfPersistenceHelper
const&
keys = GaussianPsfPersistenceHelper::get();
129 (*record)[
keys.dimensions.getX()] = _dimensions.getX();
130 (*record)[
keys.dimensions.getY()] = _dimensions.getY();
140 for (
int yIndex = 0,
y = r->getY0(); yIndex < _dimensions.getY(); ++yIndex, ++
y) {
141 Image::Array::Reference
row = array[yIndex];
142 for (
int xIndex = 0,
x = r->getX0(); xIndex < _dimensions.getX(); ++xIndex, ++
x) {
143 sum +=
row[xIndex] =
std::exp(-0.5 * (
x *
x +
y *
y) / (_sigma * _sigma));
146 ndarray::asEigenMatrix(array) /= sum;
155 geom::ellipses::Quadrupole GaussianPsf::doComputeShape(
lsst::geom::Point2D const& position,
157 return geom::ellipses::Quadrupole(_sigma * _sigma, _sigma * _sigma, 0.0);
table::Key< std::string > name
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
afw::table::Key< double > sigma
afw::table::PointKey< int > dimensions
afw::table::Schema schema
#define LSST_ARCHIVE_ASSERT(EXPR)
An assertion macro used to validate the structure of an InputArchive.
A circularly symmetric Gaussian Psf class with no spatial variation, intended mostly for testing purp...
std::shared_ptr< afw::detection::Psf > resized(int width, int height) const override
Return a clone with specified kernel dimensions.
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
double getSigma() const
Return the radius of the Gaussian.
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
std::shared_ptr< afw::detection::Psf > clone() const override
Polymorphic deep copy; should usually be unnecessary because Psfs are immutable.
GaussianPsf(int width, int height, double sigma)
Constructor for a GaussianPsf.
A polymorphic base class for representing an image's Point Spread Function.
image::Image< Pixel > Image
Image type returned by computeImage.
lsst::geom::Box2I computeBBox(lsst::geom::Point2D position=makeNullPoint(), image::Color color=image::Color()) const
Return the bounding box of the image returned by computeKernelImage()
Describe the colour of a source.
ndarray::Array< Pixel, 2, 1 > Array
A mutable ndarray representation of the image.
std::shared_ptr< RecordT > addNew()
Create a new record, add it to the end of the catalog, and return a pointer to it.
An object passed to Persistable::write to allow it to persist itself.
void saveCatalog(BaseCatalog const &catalog)
Save a catalog in the archive.
BaseCatalog makeCatalog(Schema const &schema)
Return a new, empty catalog with the given schema.
An integer coordinate rectangle.
FilterProperty & operator=(FilterProperty const &)=default
A base class for image defects.