30 #include "lsst/afw/table/io/Persistable.cc" 42 FixedKernel::FixedKernel() :
Kernel(), _image(), _sum(0) {}
49 for (XIter imPtr = image.
row_begin(
y), imEnd = image.
row_end(
y); imPtr != imEnd; ++imPtr) {
58 _sum = kernel.
computeImage(_image,
false, pos[0], pos[1]);
63 retPtr->setCtr(this->
getCtr());
68 if ((width <= 0) || (height <= 0)) {
70 os <<
"Cannot create FixedKernel with dimensions (" << width <<
", " << height <<
"). ";
75 os <<
"Cannot resize FixedKernel from (" <<
getWidth() <<
", " <<
getHeight() <<
") to (" << width
76 <<
", " << height <<
"), because at least one dimension would change by an odd value.";
87 bboxIntersect.clip(bboxNew);
96 bboxIntersect.getDimensions());
99 imNew->assign(imIntersect, bboxIntersect);
105 double multFactor = 1.0;
106 double imSum = this->_sum;
111 multFactor = 1.0 /
static_cast<double>(this->_sum);
119 imPtr != imEnd; ++imPtr, ++kPtr) {
120 imPtr[0] = multFactor * kPtr[0];
129 os << prefix <<
"FixedKernel:" <<
std::endl;
130 os << prefix <<
"..sum: " << _sum <<
std::endl;
140 table::Key<table::Array<Kernel::Pixel>>
image;
143 :
Kernel::PersistenceHelper(0),
144 image(
schema.addField<table::Array<
Kernel::
Pixel>>(
"image",
"pixel values (row-major)",
145 dimensions.getX() * dimensions.getY())) {}
147 explicit FixedKernelPersistenceHelper(table::Schema
const& schema_)
148 : Kernel::PersistenceHelper(schema_),
image(
schema[
"image"]) {}
159 FixedKernelPersistenceHelper
const keys(catalogs.
front().getSchema());
162 ndarray::flatten<1>(ndarray::static_dimension_cast<2>(image.
getArray())) = record[
keys.image];
164 result->setCtr(record.get(
keys.center));
173 std::string getFixedKernelPersistenceName() {
return "FixedKernel"; }
184 (*record)[keys.image] = ndarray::flatten<1>(ndarray::copy(_image.
getArray()));
int getHeight() const
Return the Kernel's height.
afw::table::PointKey< int > dimensions
static std::shared_ptr< T > dynamicCast(std::shared_ptr< Persistable > const &ptr)
Dynamically cast a shared_ptr.
std::shared_ptr< Kernel > resized(int width, int height) const override
Return a pointer to a clone with specified kernel dimensions.
An object passed to Persistable::write to allow it to persist itself.
int getHeight() const
Return the number of rows in the image.
A base class for factory classes used to reconstruct objects from records.
std::shared_ptr< Kernel > clone() const override
Return a pointer to a deep copy of this kernel.
_view_t::x_iterator x_iterator
An iterator for traversing the pixels in a row.
int getX0() const
Return the image's column-origin.
x_iterator row_begin(int y) const
Return an x_iterator to the start of the y'th row.
std::string toString(std::string const &prefix="") const override
Return a string representation of the kernel.
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
A base class for image defects.
Reports when the result of an arithmetic operation is too large for the destination type...
lsst::geom::Box2I getBBox() const
return parent bounding box, with XY0 = -center
FixedKernel()
Construct an empty FixedKernel of size 0x0.
lsst::geom::Point2I getCtr() const
Return index of kernel's center.
double computeImage(lsst::afw::image::Image< Pixel > &image, bool doNormalize, double x=0.0, double y=0.0) const
Compute an image (pixellized representation of the kernel) in place.
std::shared_ptr< afw::table::io::Persistable > read(InputArchive const &archive, CatalogVector const &catalogs) const override
Construct a new object from the given InputArchive and vector of catalogs.
int getWidth() const
Return the Kernel's width.
lsst::geom::Extent2I const getDimensions() const
Return the Kernel's dimensions (width, height)
int getMinX() const noexcept
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
A vector of catalogs used by Persistable.
Base class for all records.
int getY0() const
Return the image's row-origin.
#define LSST_ARCHIVE_ASSERT(EXPR)
An assertion macro used to validate the structure of an InputArchive.
Kernel()
Construct a null Kernel of size 0,0.
table::Key< table::Array< Kernel::Pixel > > image
Reports invalid arguments.
x_iterator row_end(int y) const
Return an x_iterator to the end of the y'th row.
Kernels are used for convolution with MaskedImages and (eventually) Images.
An integer coordinate rectangle.
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
double doComputeImage(lsst::afw::image::Image< Pixel > &image, bool doNormalize) const override
Low-level version of computeImage.
int getMinY() const noexcept
virtual std::string toString(std::string const &prefix="") const
Return a string representation of the kernel.
Factory(std::string const &name)