LSST Applications g0fba68d861+5616995c1c,g1ebb85f214+2420ccdea7,g1fd858c14a+44c57a1f81,g21d47ad084+8e51fce9ac,g262e1987ae+1a7d68eb3b,g2cef7863aa+3bd8df3d95,g35bb328faa+fcb1d3bbc8,g36ff55ed5b+2420ccdea7,g47891489e3+5c6313fe9a,g53246c7159+fcb1d3bbc8,g646c943bdb+dbb9921566,g67b6fd64d1+5c6313fe9a,g6bd32b75b5+2420ccdea7,g74acd417e5+37fc0c974d,g786e29fd12+cf7ec2a62a,g86c591e316+6e13bcb9e9,g87389fa792+1e0a283bba,g89139ef638+5c6313fe9a,g90f42f885a+fce05a46d3,g9125e01d80+fcb1d3bbc8,g93e38de9ac+5345a64125,g95a1e89356+47d08a1cc6,g97be763408+bba861c665,ga9e4eb89a6+85210110a1,gb0b61e0e8e+1f27f70249,gb58c049af0+f03b321e39,gb89ab40317+5c6313fe9a,gc4e39d7843+4e09c98c3d,gd16ba4ae74+5402bcf54a,gd8ff7fe66e+2420ccdea7,gd9a9a58781+fcb1d3bbc8,gdab6d2f7ff+37fc0c974d,gde280f09ee+604b327636,ge278dab8ac+50e2446c94,ge410e46f29+5c6313fe9a,gef3c2e6661+6b480e0fb7,gf67bdafdda+5c6313fe9a,gffca2db377+fcb1d3bbc8,v29.2.0.rc1
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(150),
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
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:118
#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< ReferenceMatch > ReferenceMatchVector
Definition fwd.h:108
SortedCatalogT< SimpleRecord > SimpleCatalog
Definition fwd.h:79
Point< double, 2 > Point2D
Definition Point.h:324
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