LSSTApplications  19.0.0-14-gb0260a2+72efe9b372,20.0.0+7927753e06,20.0.0+8829bf0056,20.0.0+995114c5d2,20.0.0+b6f4b2abd1,20.0.0+bddc4f4cbe,20.0.0-1-g253301a+8829bf0056,20.0.0-1-g2b7511a+0d71a2d77f,20.0.0-1-g5b95a8c+7461dd0434,20.0.0-12-g321c96ea+23efe4bbff,20.0.0-16-gfab17e72e+fdf35455f6,20.0.0-2-g0070d88+ba3ffc8f0b,20.0.0-2-g4dae9ad+ee58a624b3,20.0.0-2-g61b8584+5d3db074ba,20.0.0-2-gb780d76+d529cf1a41,20.0.0-2-ged6426c+226a441f5f,20.0.0-2-gf072044+8829bf0056,20.0.0-2-gf1f7952+ee58a624b3,20.0.0-20-geae50cf+e37fec0aee,20.0.0-25-g3dcad98+544a109665,20.0.0-25-g5eafb0f+ee58a624b3,20.0.0-27-g64178ef+f1f297b00a,20.0.0-3-g4cc78c6+e0676b0dc8,20.0.0-3-g8f21e14+4fd2c12c9a,20.0.0-3-gbd60e8c+187b78b4b8,20.0.0-3-gbecbe05+48431fa087,20.0.0-38-ge4adf513+a12e1f8e37,20.0.0-4-g97dc21a+544a109665,20.0.0-4-gb4befbc+087873070b,20.0.0-4-gf910f65+5d3db074ba,20.0.0-5-gdfe0fee+199202a608,20.0.0-5-gfbfe500+d529cf1a41,20.0.0-6-g64f541c+d529cf1a41,20.0.0-6-g9a5b7a1+a1cd37312e,20.0.0-68-ga3f3dda+5fca18c6a4,20.0.0-9-g4aef684+e18322736b,w.2020.45
LSSTDataManagementBasePackage
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"
11 #include "lsst/afw/table/Source.h"
12 #include "lsst/afw/table/Match.h"
13 
14 namespace lsst {
15 namespace meas {
16 namespace astrom {
17 
22 struct RecordProxy {
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 
35  operator PTR(afw::table::SimpleRecord)() const { return record; }
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 
54 ProxyVector makeProxies(afw::table::SourceCatalog const& sourceCat, afw::geom::SkyWcs const& distortedWcs,
55  afw::geom::SkyWcs const& tanWcs);
56 
58 
59 struct 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),
92  minMatchedPairs(50),
94  maxOffsetPix(300),
95  maxRotationDeg(1.0),
96  allowedNonperpDeg(3.0),
98  maxDeterminant(0.02) {
99  validate();
100  }
101 
102  void validate() const;
103 
105 };
106 
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
lsst::meas::astrom::ProxyPair::second
RecordProxy second
Definition: matchOptimisticB.h:61
lsst::meas::astrom::RecordProxy::used
bool used
Definition: matchOptimisticB.h:25
std::string
STL class.
lsst::meas::astrom::MatchOptimisticBControl::refFluxField
std::string refFluxField
"name of flux field in reference catalog" ;
Definition: matchOptimisticB.h:76
lsst::meas::astrom::MatchOptimisticBControl::sourceFluxField
std::string sourceFluxField
"name of flux field in source catalog" ;
Definition: matchOptimisticB.h:77
std::atan2
T atan2(T... args)
lsst::meas::astrom::MatchOptimisticBControl::validate
void validate() const
Definition: matchOptimisticB.cc:403
Match.h
wcs
table::Key< table::Array< std::uint8_t > > wcs
Definition: SkyWcs.cc:71
std::vector
STL class.
lsst::meas::astrom::makeProxies
ProxyVector makeProxies(afw::table::SourceCatalog const &sourceCat, afw::geom::SkyWcs const &distortedWcs, afw::geom::SkyWcs const &tanWcs)
Definition: matchOptimisticB.cc:436
lsst::meas::astrom::MatchOptimisticBControl::~MatchOptimisticBControl
~MatchOptimisticBControl()
Definition: matchOptimisticB.h:104
lsst::meas::astrom::MatchOptimisticBControl::maxOffsetPix
double maxOffsetPix
"maximum allowed frame translation (pixels)" ;
Definition: matchOptimisticB.h:82
lsst::meas::astrom::MatchOptimisticBControl::MatchOptimisticBControl
MatchOptimisticBControl()
Definition: matchOptimisticB.h:88
lsst::meas::astrom::RecordProxy::record
boost::shared_ptr< afw::table::SimpleRecord > record
Definition: matchOptimisticB.h:23
lsst::meas::astrom::MatchOptimisticBControl::numPointsForShape
int numPointsForShape
"number of points in a matching shape" ;
Definition: matchOptimisticB.h:85
lsst::meas::astrom::MatchOptimisticBControl::numBrightStars
int numBrightStars
"maximum number of bright reference stars to use" ;
Definition: matchOptimisticB.h:78
lsst::afw::geom::SkyWcs
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
Definition: SkyWcs.h:117
lsst::meas::astrom::RecordProxy::position
geom::Point2D position
Definition: matchOptimisticB.h:24
lsst::meas::astrom::RecordProxy::operator==
bool operator==(RecordProxy const &other) const
Definition: matchOptimisticB.h:37
PTR
#define PTR(...)
Definition: base.h:41
lsst::meas::astrom::ProxyPair::distance
double distance
Definition: matchOptimisticB.h:62
lsst::meas::astrom::MatchOptimisticBControl::maxDeterminant
double maxDeterminant
"?" ;
Definition: matchOptimisticB.h:86
lsst::meas::astrom::ProxyPair
Definition: matchOptimisticB.h:59
Point.h
lsst::meas::astrom::MatchOptimisticBControl::maxRotationDeg
double maxRotationDeg
"maximum allowed frame rotation (deg)" ;
Definition: matchOptimisticB.h:83
lsst::meas::astrom::RecordProxy::getX
double getX() const
Definition: matchOptimisticB.h:29
std::hypot
T hypot(T... args)
lsst::afw::table._source.SourceCatalog
Definition: _source.py:32
other
ItemVariant const * other
Definition: Schema.cc:56
lsst::meas::astrom::MatchOptimisticBControl
Definition: matchOptimisticB.h:75
lsst::meas::astrom::matchOptimisticB
afw::table::ReferenceMatchVector matchOptimisticB(afw::table::SimpleCatalog const &posRefCat, afw::table::SourceCatalog const &sourceCat, MatchOptimisticBControl const &control, afw::geom::SkyWcs const &wcs, int posRefBegInd=0, bool verbose=false)
Match sources to stars in a position reference catalog using optimistic pattern matching B.
Definition: matchOptimisticB.cc:459
LSST_CONTROL_FIELD
#define LSST_CONTROL_FIELD(NAME, TYPE, DOC)
A preprocessor macro used to define fields in C++ "control object" structs.
Definition: config.h:43
lsst::meas::astrom::MatchOptimisticBControl::allowedNonperpDeg
double allowedNonperpDeg
"allowed non-perpendicularity of x and y axes (deg)" ;
Definition: matchOptimisticB.h:84
lsst::meas::astrom::ProxyPair::pa
double pa
Definition: matchOptimisticB.h:63
lsst::meas::astrom::RecordProxy::operator!=
bool operator!=(RecordProxy const &other) const
Definition: matchOptimisticB.h:38
Source.h
lsst
A base class for image defects.
Definition: imageAlgorithm.dox:1
lsst::meas::astrom::ProxyPair::first
RecordProxy first
Definition: matchOptimisticB.h:60
lsst::meas::astrom::RecordProxy
A wrapper around a SimpleRecord or SourceRecord that allows us to record a pixel position in a way th...
Definition: matchOptimisticB.h:22
lsst::meas::astrom::RecordProxy::getY
double getY() const
Definition: matchOptimisticB.h:30
lsst::meas::astrom::MatchOptimisticBControl::matchingAllowancePix
double matchingAllowancePix
"maximum allowed distance between reference objects and sources (pixels)" ;
Definition: matchOptimisticB.h:81
lsst::meas::astrom::RecordProxy::RecordProxy
RecordProxy(boost::shared_ptr< afw::table::SimpleRecord > record, geom::Point2D const &position)
Construct a RecordProxy.
Definition: matchOptimisticB.h:46
lsst::meas::astrom::RecordProxy::RecordProxy
RecordProxy()
Definition: matchOptimisticB.h:49
lsst::geom::Point< double, 2 >
lsst::meas::astrom::MatchOptimisticBControl::minMatchedPairs
int minMatchedPairs
"minimum number of matches" ;
Definition: matchOptimisticB.h:79
config.h
lsst::meas::astrom::ProxyPair::ProxyPair
ProxyPair(RecordProxy const &s1, RecordProxy const &s2)
Definition: matchOptimisticB.h:65
lsst::afw::table::SimpleRecord
Record class that must contain a unique ID field and a celestial coordinate field.
Definition: Simple.h:48
lsst::afw::table::SortedCatalogT
Custom catalog class for record/table subclasses that are guaranteed to have an ID,...
Definition: fwd.h:63
lsst::meas::astrom::ProxyVector
std::vector< RecordProxy > ProxyVector
Definition: matchOptimisticB.h:52