45 namespace algorithms {
55 bool ptrEquals(T
a, T
b) {
75 :
afw::math::BoundedField(
bbox),
76 _throwOnMissing(true),
79 _elements(elements) {}
83 :
afw::math::BoundedField(
bbox),
84 _throwOnMissing(false),
87 _elements(elements) {}
90 auto coord = _coaddWcs->pixelToSky(position);
93 for (ElementVector::const_iterator i = _elements.
begin(); i != _elements.
end(); ++i) {
94 geom::Point2D transformedPosition = i->wcs->skyToPixel(coord);
95 bool inValidArea = i->validPolygon ? i->validPolygon->contains(transformedPosition) :
true;
97 sum += i->weight * i->field->evaluate(transformedPosition);
102 if (_throwOnMissing) {
104 (
boost::format(
"No constituent fields to evaluate at point %f, %f") %
105 position.getX() % position.getY())
123 class CoaddBoundedFieldPersistenceKeys1 {
132 static CoaddBoundedFieldPersistenceKeys1
const& get() {
133 static CoaddBoundedFieldPersistenceKeys1
const instance;
138 CoaddBoundedFieldPersistenceKeys1(
const CoaddBoundedFieldPersistenceKeys1&) =
delete;
139 CoaddBoundedFieldPersistenceKeys1&
operator=(
const CoaddBoundedFieldPersistenceKeys1&) =
delete;
142 CoaddBoundedFieldPersistenceKeys1(CoaddBoundedFieldPersistenceKeys1&&) =
delete;
143 CoaddBoundedFieldPersistenceKeys1&
operator=(CoaddBoundedFieldPersistenceKeys1&&) =
delete;
146 CoaddBoundedFieldPersistenceKeys1()
149 "lower-left corner of bounding box",
"pixel")),
151 "upper-right corner of bounding box",
"pixel")),
152 coaddWcs(
schema.addField<int>(
"coaddWcs",
"archive ID of the coadd's WCS")),
154 "throwOnMissing",
"whether to throw an exception on missing data")),
156 "default value to use when throwOnMissing is False")) {}
160 class CoaddBoundedFieldPersistenceKeys2 {
162 afw::table::Schema
schema;
168 static CoaddBoundedFieldPersistenceKeys2
const& get() {
169 static CoaddBoundedFieldPersistenceKeys2
const instance;
174 CoaddBoundedFieldPersistenceKeys2(
const CoaddBoundedFieldPersistenceKeys2&) =
delete;
175 CoaddBoundedFieldPersistenceKeys2&
operator=(
const CoaddBoundedFieldPersistenceKeys2&) =
delete;
178 CoaddBoundedFieldPersistenceKeys2(CoaddBoundedFieldPersistenceKeys2&&) =
delete;
179 CoaddBoundedFieldPersistenceKeys2&
operator=(CoaddBoundedFieldPersistenceKeys2&&) =
delete;
182 CoaddBoundedFieldPersistenceKeys2()
184 field(
schema.addField<int>(
"field",
"archive ID of the BoundedField to be coadded")),
185 wcs(
schema.addField<int>(
"wcs",
"archive ID of the Wcs associated with this element")),
187 "archive ID of the Polygon associated with this element")),
188 weight(
schema.addField<double>(
"weight",
"weight value for this element")) {}
197 CoaddBoundedFieldPersistenceKeys1
const& keys1 = CoaddBoundedFieldPersistenceKeys1::get();
198 CoaddBoundedFieldPersistenceKeys2
const& keys2 = CoaddBoundedFieldPersistenceKeys2::get();
204 elements.
reserve(catalogs.back().size());
210 i->get(keys2.weight)));
212 return std::make_shared<CoaddBoundedField>(
215 record1.
get(keys1.default_));
223 std::string getCoaddBoundedFieldPersistenceName() {
return "CoaddBoundedField"; }
234 CoaddBoundedFieldPersistenceKeys1
const& keys1 = CoaddBoundedFieldPersistenceKeys1::get();
235 CoaddBoundedFieldPersistenceKeys2
const& keys2 = CoaddBoundedFieldPersistenceKeys2::get();
238 record1->set(keys1.bboxMin,
getBBox().getMin());
239 record1->set(keys1.bboxMax,
getBBox().getMax());
240 record1->set(keys1.coaddWcs, handle.
put(_coaddWcs));
241 record1->set(keys1.default_, _default);
244 for (ElementVector::const_iterator i = _elements.
begin(); i != _elements.
end(); ++i) {
246 record2->set(keys2.field, handle.
put(i->field));
247 record2->set(keys2.wcs, handle.
put(i->wcs));
248 record2->set(keys2.validPolygon, handle.
put(i->validPolygon));
249 record2->set(keys2.weight, i->weight);
260 if (!rhsCasted)
return false;
262 return (
getBBox() == rhsCasted->getBBox()) && (_default == rhsCasted->_default) &&
263 ptrEquals(_coaddWcs, rhsCasted->_coaddWcs) && (_elements == rhsCasted->_elements);
table::Key< std::string > name
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
#define LSST_ARCHIVE_ASSERT(EXPR)
An assertion macro used to validate the structure of an InputArchive.
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
An abstract base class for 2-d functions defined on an integer bounding boxes.
lsst::geom::Box2I getBBox() const
Return the bounding box that defines the region where the field is valid.
Base class for all records.
Field< T >::Value get(Key< T > const &key) const
Return the value of a field for the given key.
Iterator class for CatalogT.
std::shared_ptr< RecordT > addNew()
Create a new record, add it to the end of the catalog, and return a pointer to it.
A vector of catalogs used by Persistable.
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.
int put(Persistable const *obj, bool permissive=false)
Save an object to the archive and return a unique ID that can be used to retrieve it from an InputArc...
static std::shared_ptr< T > dynamicCast(std::shared_ptr< Persistable > const &ptr)
Dynamically cast a shared_ptr.
A base class for factory classes used to reconstruct objects from records.
A base class for objects that can be persisted via afw::table::io Archive classes.
A floating-point coordinate rectangle geometry.
bool contains(Point2D const &point) const noexcept
Return true if the box contains the point.
An integer coordinate rectangle.
Factory(std::string const &name)
void write(OutputArchiveHandle &handle) const override
Write the object to one or more catalogs.
CoaddBoundedField(geom::Box2I const &bbox, boost::shared_ptr< afw::geom::SkyWcs const > coaddWcs, ElementVector const &elements)
std::string getPythonModule() const override
Return the fully-qualified Python module that should be imported to guarantee that its factory is reg...
double evaluate(geom::Point2D const &position) const override
Evaluate the field at the given point.
boost::shared_ptr< afw::math::BoundedField > operator*(double const scale) const override
Return a scaled BoundedField.
bool operator==(BoundedField const &rhs) const override
BoundedFields (of the same sublcass) are equal if their bounding boxes and parameters are equal.
std::string getPersistenceName() const override
Return the unique name used to persist this object and look up its factory.
Reports arguments outside the domain of an operation.
Reports attempts to access elements using an invalid key.
def scale(algorithm, min, max=None, frame=None)
bool operator==(FilterProperty const &rhs) const noexcept
Return true iff two FilterProperties are identical.
FilterProperty & operator=(FilterProperty const &)=default
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
A base class for image defects.
afw::table::Key< double > weight
afw::table::PointKey< int > bboxMax
afw::table::Key< afw::table::Flag > throwOnMissing
afw::table::Key< int > coaddWcs
afw::table::Key< int > field
afw::table::Key< double > default_
afw::table::Key< int > validPolygon
afw::table::Schema schema
afw::table::PointKey< int > bboxMin
afw::table::Key< int > wcs
Struct used to hold one Exposure's data in a CoaddBoundedField.
boost::shared_ptr< afw::geom::SkyWcs const > wcs
boost::shared_ptr< afw::geom::polygon::Polygon const > validPolygon
boost::shared_ptr< afw::math::BoundedField > field