LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
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,...
Definition: SortedCatalog.h:42
#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