LSST Applications g00d0e8bbd7+edbf708997,g03191d30f7+6b31559d11,g118115db7c+ac820e85d2,g199a45376c+5137f08352,g1fd858c14a+90100aa1a7,g262e1987ae+64df5f6984,g29ae962dfc+1eb4aece83,g2cef7863aa+73c82f25e4,g3541666cd7+1e37cdad5c,g35bb328faa+edbf708997,g3fd5ace14f+fb4e2866cc,g47891489e3+19fcc35de2,g53246c7159+edbf708997,g5b326b94bb+d622351b67,g64539dfbff+dfe1dff262,g67b6fd64d1+19fcc35de2,g74acd417e5+cfdc02aca8,g786e29fd12+af89c03590,g7aefaa3e3d+dc1a598170,g87389fa792+a4172ec7da,g88cb488625+60ba2c3075,g89139ef638+19fcc35de2,g8d4809ba88+dfe1dff262,g8d7436a09f+db94b797be,g8ea07a8fe4+79658f16ab,g90f42f885a+6577634e1f,g9722cb1a7f+d8f85438e7,g98df359435+7fdd888faa,ga2180abaac+edbf708997,ga9e74d7ce9+128cc68277,gbf99507273+edbf708997,gca7fc764a6+19fcc35de2,gd7ef33dd92+19fcc35de2,gdab6d2f7ff+cfdc02aca8,gdbb4c4dda9+dfe1dff262,ge410e46f29+19fcc35de2,ge41e95a9f2+dfe1dff262,geaed405ab2+062dfc8cdc,w.2025.46
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