LSST Applications g180d380827+6621f76652,g2079a07aa2+86d27d4dc4,g2305ad1205+f5a9e323a1,g2bbee38e9b+c6a8a0fb72,g337abbeb29+c6a8a0fb72,g33d1c0ed96+c6a8a0fb72,g3a166c0a6a+c6a8a0fb72,g3ddfee87b4+9a10e1fe7b,g48712c4677+c9a099281a,g487adcacf7+f2e03ea30b,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+aead732c78,g64a986408d+eddffb812c,g858d7b2824+eddffb812c,g864b0138d7+aa38e45daa,g974c55ee3d+f37bf00e57,g99cad8db69+119519a52d,g9c22b2923f+e2510deafe,g9ddcbc5298+9a081db1e4,ga1e77700b3+03d07e1c1f,gb0e22166c9+60f28cb32d,gb23b769143+eddffb812c,gba4ed39666+c2a2e4ac27,gbb8dafda3b+27317ec8e9,gbd998247f1+585e252eca,gc120e1dc64+5817c176a8,gc28159a63d+c6a8a0fb72,gc3e9b769f7+6707aea8b4,gcf0d15dbbd+9a10e1fe7b,gdaeeff99f8+f9a426f77a,ge6526c86ff+6a2e01d432,ge79ae78c31+c6a8a0fb72,gee10cc3b42+585e252eca,gff1a9f87cc+eddffb812c,v27.0.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: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