LSST Applications 26.0.0,g0265f82a02+6660c170cc,g07994bdeae+30b05a742e,g0a0026dc87+17526d298f,g0a60f58ba1+17526d298f,g0e4bf8285c+96dd2c2ea9,g0ecae5effc+c266a536c8,g1e7d6db67d+6f7cb1f4bb,g26482f50c6+6346c0633c,g2bbee38e9b+6660c170cc,g2cc88a2952+0a4e78cd49,g3273194fdb+f6908454ef,g337abbeb29+6660c170cc,g337c41fc51+9a8f8f0815,g37c6e7c3d5+7bbafe9d37,g44018dc512+6660c170cc,g4a941329ef+4f7594a38e,g4c90b7bd52+5145c320d2,g58be5f913a+bea990ba40,g635b316a6c+8d6b3a3e56,g67924a670a+bfead8c487,g6ae5381d9b+81bc2a20b4,g93c4d6e787+26b17396bd,g98cecbdb62+ed2cb6d659,g98ffbb4407+81bc2a20b4,g9ddcbc5298+7f7571301f,ga1e77700b3+99e9273977,gae46bcf261+6660c170cc,gb2715bf1a1+17526d298f,gc86a011abf+17526d298f,gcf0d15dbbd+96dd2c2ea9,gdaeeff99f8+0d8dbea60f,gdb4ec4c597+6660c170cc,ge23793e450+96dd2c2ea9,gf041782ebf+171108ac67
LSST Data Management Base Package
Loading...
Searching...
No Matches
matchOptimisticB.h
Go to the documentation of this file.
1// -*- lsst-c++ -*-
2#if !defined(LSST_MEAS_ASTROM_MATCHOPTIMISTICB_H)
3#define LSST_MEAS_ASTROM_MATCHOPTIMISTICB_H
4
5#include <cmath>
6#include <string>
7#include <vector>
8
9#include "lsst/pex/config.h"
10#include "lsst/geom/Point.h"
13
14namespace lsst {
15namespace meas {
16namespace astrom {
17
25 mutable bool used; // set true if this star object has already been used for a match
26 // mutable to allow freezing the fundamental object data using const
27 // while keeping track of which objects have been used in each search
28
29 double getX() const { return position.getX(); }
30 double getY() const { return position.getY(); }
31
36
37 bool operator==(RecordProxy const& other) const { return record == other.record; }
38 bool operator!=(RecordProxy const& other) const { return record != other.record; }
39
48
49 explicit RecordProxy() {} // default constructor needed so we can call ProxyVector::resize()
50};
51
53
54ProxyVector makeProxies(afw::table::SourceCatalog const& sourceCat, afw::geom::SkyWcs const& distortedWcs,
55 afw::geom::SkyWcs const& tanWcs);
56
58
59struct ProxyPair {
62 double distance;
63 double pa;
64
65 ProxyPair(RecordProxy const& s1, RecordProxy const& s2) : first(s1), second(s2) {
66 double x1 = first.position.getX();
67 double y1 = first.position.getY();
68 double x2 = second.position.getX();
69 double y2 = second.position.getY();
70 distance = std::hypot(x2 - x1, y2 - y1);
71 pa = std::atan2(y2 - y1, x2 - x1);
72 }
73};
74
76 LSST_CONTROL_FIELD(refFluxField, std::string, "name of flux field in reference catalog");
77 LSST_CONTROL_FIELD(sourceFluxField, std::string, "name of flux field in source catalog");
78 LSST_CONTROL_FIELD(numBrightStars, int, "maximum number of bright reference stars to use");
79 LSST_CONTROL_FIELD(minMatchedPairs, int, "minimum number of matches");
81 "maximum allowed distance between reference objects and sources (pixels)");
82 LSST_CONTROL_FIELD(maxOffsetPix, double, "maximum allowed frame translation (pixels)");
83 LSST_CONTROL_FIELD(maxRotationDeg, double, "maximum allowed frame rotation (deg)");
84 LSST_CONTROL_FIELD(allowedNonperpDeg, double, "allowed non-perpendicularity of x and y axes (deg)");
85 LSST_CONTROL_FIELD(numPointsForShape, int, "number of points in a matching shape");
87
89 : refFluxField("r_flux"),
90 sourceFluxField("slot_ApFlux_instFlux"),
91 numBrightStars(100),
94 maxOffsetPix(300),
95 maxRotationDeg(1.0),
98 maxDeterminant(0.02) {
99 validate();
100 }
101
102 void validate() const;
103
105};
106
126afw::table::ReferenceMatchVector matchOptimisticB(afw::table::SimpleCatalog const& posRefCat,
127 afw::table::SourceCatalog const& sourceCat,
128 MatchOptimisticBControl const& control,
129 afw::geom::SkyWcs const& wcs, int posRefBegInd = 0,
130 bool verbose = false);
131
132} // namespace astrom
133} // namespace meas
134} // namespace lsst
135
136#endif
table::Key< table::Array< std::uint8_t > > wcs
Definition SkyWcs.cc:66
T atan2(T... args)
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
Definition SkyWcs.h:117
Custom catalog class for record/table subclasses that are guaranteed to have an ID,...
#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
A preprocessor macro used to define fields in C++ "control object" structs.
Definition config.h:43
T hypot(T... args)
std::vector< RecordProxy > ProxyVector
ProxyVector makeProxies(afw::table::SourceCatalog const &sourceCat, afw::geom::SkyWcs const &distortedWcs, afw::geom::SkyWcs const &tanWcs)
std::string refFluxField
"name of flux field in reference catalog" ;
double maxRotationDeg
"maximum allowed frame rotation (deg)" ;
double matchingAllowancePix
"maximum allowed distance between reference objects and sources (pixels)" ;
int numPointsForShape
"number of points in a matching shape" ;
int minMatchedPairs
"minimum number of matches" ;
int numBrightStars
"maximum number of bright reference stars to use" ;
std::string sourceFluxField
"name of flux field in source catalog" ;
double maxOffsetPix
"maximum allowed frame translation (pixels)" ;
double allowedNonperpDeg
"allowed non-perpendicularity of x and y axes (deg)" ;
ProxyPair(RecordProxy const &s1, RecordProxy const &s2)
A wrapper around a SimpleRecord or SourceRecord that allows us to record a pixel position in a way th...
bool operator==(RecordProxy const &other) const
bool operator!=(RecordProxy const &other) const
RecordProxy(std::shared_ptr< afw::table::SimpleRecord > record, geom::Point2D const &position)
Construct a RecordProxy.
std::shared_ptr< afw::table::SimpleRecord > record