LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
Footprint.h
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 * Copyright 2008-2016 AURA/LSST.
4 *
5 * This product includes software developed by the
6 * LSST Project (http://www.lsst.org/).
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the LSST License Statement and
19 * the GNU General Public License along with this program. If not,
20 * see <https://www.lsstcorp.org/LegalNotices/>.
21 */
22#if !defined(LSST_DETECTION_FOOTPRINT_H)
23#define LSST_DETECTION_FOOTPRINT_H
24
25#include <algorithm>
26#include <list>
27#include <set>
28#include <cmath>
29#include <cstdint>
30#include <memory>
31#include "ndarray.h"
32#include "lsst/base.h"
35#include "lsst/afw/geom/Span.h"
37#include "lsst/geom/Box.h"
42#include "lsst/afw/table/fwd.h"
44#include "lsst/afw/table/Key.h"
47
48namespace lsst {
49namespace afw {
50namespace detection {
51
62class Footprint : public afw::table::io::PersistableFacade<lsst::afw::detection::Footprint>,
64public:
65 /*
66 * As a note there is no constructor which accepts a unique_ptr to a SpanSet.
67 * If someone did have a unique_ptr to a SpanSet it is possible to wrap the
68 * unique_ptr in a std::move when calling the constructor of a Footprint and
69 * the compiler will implicitly turn the unique_ptr into a shared_ptr and use
70 * that to construct the Footprint.
71 */
72
80 explicit Footprint(std::shared_ptr<geom::SpanSet> inputSpans,
81 lsst::geom::Box2I const &region = lsst::geom::Box2I());
82
91 explicit Footprint(std::shared_ptr<geom::SpanSet> inputSpans, afw::table::Schema const &peakSchema,
92 lsst::geom::Box2I const &region = lsst::geom::Box2I());
93
96 explicit Footprint()
97 : _spans(std::make_shared<geom::SpanSet>()),
98 _peaks(PeakTable::makeMinimalSchema()),
99 _region(lsst::geom::Box2I()) {}
100
101 Footprint(Footprint const &other) = default;
102 Footprint(Footprint &&) = default;
103
104 Footprint &operator=(Footprint const &other) = default;
106
107 ~Footprint() override = default;
108
111 virtual bool isHeavy() const { return false; }
112
115 std::shared_ptr<geom::SpanSet> getSpans() const { return _spans; }
116
121 void setSpans(std::shared_ptr<geom::SpanSet> otherSpanSet);
122
129 PeakCatalog &getPeaks() { return _peaks; }
130 const PeakCatalog &getPeaks() const { return _peaks; }
131
138 std::shared_ptr<PeakRecord> addPeak(float fx, float fy, float value);
139
149
156 void setPeakSchema(afw::table::Schema const &peakSchema);
157
166 void setPeakCatalog(PeakCatalog const &otherPeaks);
167
173 std::size_t getArea() const { return _spans->getArea(); }
174
180 lsst::geom::Point2D getCentroid() const { return _spans->computeCentroid(); }
181
188 geom::ellipses::Quadrupole getShape() const { return _spans->computeShape(); }
189
196 void shift(int dx, int dy);
197
203 void shift(lsst::geom::ExtentI const &d) { shift(d.getX(), d.getY()); }
204
208 lsst::geom::Box2I getBBox() const { return _spans->getBBox(); }
209
213 lsst::geom::Box2I getRegion() const { return _region; }
214
220 void setRegion(lsst::geom::Box2I const &region) { _region = region; }
221
228 void clipTo(lsst::geom::Box2I const &bbox);
229
235 bool contains(lsst::geom::Point2I const &pix) const;
236
248 lsst::geom::Box2I const &region, bool doClip = true) const;
249
258 lsst::geom::Box2I const &region, bool doClip = true) const;
259
268 lsst::geom::Box2I const &region, bool doClip = true) const;
269
278 lsst::geom::Box2I const &region, bool doClip = true) const;
279
283 bool isPersistable() const noexcept override { return true; }
284
295
304 void dilate(geom::SpanSet const &other);
305
316
325 void erode(geom::SpanSet const &other);
326
330 void removeOrphanPeaks();
331
341 void updatePeakSignificance(double sigma);
342
353 void updatePeakSignificance(image::Image<float> const &variance, int polarity);
354
358 bool isContiguous() const { return getSpans()->isContiguous(); };
359
368
374 bool operator==(Footprint const &other) const;
375
376protected:
380 std::string getPersistenceName() const override;
381
385 inline std::string getPythonModule() const override { return "lsst.afw.detection"; }
386
390 void write(OutputArchiveHandle &handle) const override;
391
392 friend class FootprintFactory;
393
402 static void readPeaks(afw::table::BaseCatalog const &, Footprint &);
403
404private:
405 friend class FootprintMerge;
406
408 PeakCatalog _peaks;
409 lsst::geom::Box2I _region;
410};
411
419
425std::shared_ptr<Footprint> mergeFootprints(Footprint const &footprint1, Footprint const &footprint2);
426
436} // namespace detection
437} // namespace afw
438} // namespace lsst
439
440#endif // LSST_DETECTION_FOOTPRINT_H
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
Key< Flag > const & target
afw::table::Key< double > sigma
Definition: GaussianPsf.cc:49
afw::table::Key< afw::table::Array< VariancePixelT > > variance
std::ostream * os
Definition: Schema.cc:557
Basic LSST definitions.
Class to describe the properties of a detected object from an image.
Definition: Footprint.h:63
Footprint()
Constructor of a empty Footprint object.
Definition: Footprint.h:96
lsst::geom::Box2I getRegion() const
Return the corners of the MaskedImage the footprints live in.
Definition: Footprint.h:213
bool isPersistable() const noexcept override
Report if this object is persistable.
Definition: Footprint.h:283
virtual bool isHeavy() const
Indicates if this object is a HeavyFootprint.
Definition: Footprint.h:111
bool isContiguous() const
Reports if the Footprint is simply connected or has multiple components.
Definition: Footprint.h:358
std::shared_ptr< PeakRecord > addPeak(float fx, float fy, float value)
Convenience function to add a peak.
Definition: Footprint.cc:47
static std::unique_ptr< Footprint > readSpanSet(afw::table::BaseCatalog const &, afw::table::io::InputArchive const &)
Static method used to unpersist the SpanSet member of the Footprint class.
Definition: Footprint.cc:286
void shift(lsst::geom::ExtentI const &d)
Shift a Footprint by a given extent.
Definition: Footprint.h:203
void write(OutputArchiveHandle &handle) const override
Write an instance of a Footprint to an output Archive.
Definition: Footprint.cc:271
Footprint(Footprint const &other)=default
Footprint & operator=(Footprint const &other)=default
std::shared_ptr< Footprint > transform(std::shared_ptr< geom::SkyWcs > source, std::shared_ptr< geom::SkyWcs > target, lsst::geom::Box2I const &region, bool doClip=true) const
Transform the footprint from one WCS to another.
Definition: Footprint.cc:81
bool contains(lsst::geom::Point2I const &pix) const
Tests if a pixel postion falls inside the Footprint.
Definition: Footprint.cc:79
void setRegion(lsst::geom::Box2I const &region)
Set the corners of the MaskedImage wherein the footprints dwell.
Definition: Footprint.h:220
std::vector< std::shared_ptr< Footprint > > split() const
Split a multi-component Footprint into a vector of contiguous Footprints.
Definition: Footprint.cc:159
void dilate(int r, geom::Stencil s=geom::Stencil::CIRCLE)
Dilate the Footprint with a defined kernel.
Definition: Footprint.cc:122
lsst::geom::Box2I getBBox() const
Return the Footprint's bounding box.
Definition: Footprint.h:208
void sortPeaks(afw::table::Key< float > const &key=afw::table::Key< float >())
Sort Peaks from most positive value to most negative.
Definition: Footprint.cc:57
std::shared_ptr< geom::SpanSet > getSpans() const
Return a shared pointer to the SpanSet.
Definition: Footprint.h:115
void removeOrphanPeaks()
Remove peaks from the PeakCatalog that fall outside the area of the Footprint.
Definition: Footprint.cc:136
void setPeakSchema(afw::table::Schema const &peakSchema)
Set the Schema used by the PeakCatalog (will throw if PeakCatalog is not empty).
Definition: Footprint.cc:431
PeakCatalog & getPeaks()
Return the Peaks contained in this Footprint.
Definition: Footprint.h:129
~Footprint() override=default
std::size_t getArea() const
Return the number of pixels in this Footprint.
Definition: Footprint.h:173
Footprint & operator=(Footprint &&)=default
void setSpans(std::shared_ptr< geom::SpanSet > otherSpanSet)
Sets the shared pointer to the SpanSet in the Footprint.
Definition: Footprint.cc:45
std::string getPersistenceName() const override
Return the name correspoinging ot the persistence type.
Definition: Footprint.cc:269
void clipTo(lsst::geom::Box2I const &bbox)
Clip the Footprint such that all values lie inside the supplied Bounding Box.
Definition: Footprint.cc:74
void erode(int r, geom::Stencil s=geom::Stencil::CIRCLE)
Erode the Footprint with a defined kernel.
Definition: Footprint.cc:126
std::string getPythonModule() const override
Return the python module the object will live in.
Definition: Footprint.h:385
void updatePeakSignificance(double sigma)
Compute and update the significance of each peak, given a single value for sigma.
Definition: Footprint.cc:145
lsst::geom::Point2D getCentroid() const
Return the Footprint's centroid.
Definition: Footprint.h:180
void shift(int dx, int dy)
Shift a Footprint by (dx, dy)
Definition: Footprint.cc:64
bool operator==(Footprint const &other) const
equality operator
Definition: Footprint.cc:176
static void readPeaks(afw::table::BaseCatalog const &, Footprint &)
Static method used to unpersist the PeakCatalog member of the Footprint class.
Definition: Footprint.cc:310
Footprint(Footprint &&)=default
geom::ellipses::Quadrupole getShape() const
Return the Footprint's shape (interpreted as an ellipse)
Definition: Footprint.h:188
void setPeakCatalog(PeakCatalog const &otherPeaks)
Set the peakCatalog to a copy of the supplied catalog.
Definition: Footprint.cc:435
const PeakCatalog & getPeaks() const
Definition: Footprint.h:130
Table class for Peaks in Footprints.
Definition: Peak.h:102
A compact representation of a collection of pixels.
Definition: SpanSet.h:78
An ellipse core with quadrupole moments as parameters.
Definition: Quadrupole.h:47
A class to represent a 2-dimensional array of pixels.
Definition: Image.h:51
A class used as a handle to a particular field in a table.
Definition: Key.h:53
Defines the fields and offsets for a table.
Definition: Schema.h:51
A multi-catalog archive object used to load table::io::Persistable objects.
Definition: InputArchive.h:31
A CRTP facade class for subclasses of Persistable.
Definition: Persistable.h:176
A base class for objects that can be persisted via afw::table::io Archive classes.
Definition: Persistable.h:74
io::OutputArchiveHandle OutputArchiveHandle
Definition: Persistable.h:108
An affine coordinate transformation consisting of a linear transformation and an offset.
An integer coordinate rectangle.
Definition: Box.h:55
A 2D linear coordinate transformation.
const char * source()
Source function that allows astChannel to source from a Stream.
Definition: Stream.h:224
std::ostream & operator<<(std::ostream &os, Footprint const &rhs)
Print a Footprint to the stream.
Definition: Footprint.cc:443
std::vector< lsst::geom::Box2I > footprintToBBoxList(Footprint const &footprint)
Return a list of BBoxs, whose union contains exactly the pixels in the footprint, neither more nor le...
Definition: Footprint.cc:366
std::shared_ptr< Footprint > mergeFootprints(Footprint const &footprint1, Footprint const &footprint2)
Merges two Footprints – appends their peaks, and unions their spans, returning a new Footprint.
Definition: Footprint.cc:341
Stencil
An enumeration class which describes the shapes.
Definition: SpanSet.h:66
Transform< Point2Endpoint, Point2Endpoint > TransformPoint2ToPoint2
Definition: Transform.h:300
A base class for image defects.
STL namespace.