2__all__ = [
"DirectMatchConfig",
"DirectMatchTask",
"DirectMatchConfigWithoutLoader"]
6from lsst.meas.algorithms
import (LoadReferenceObjectsConfig, ScienceSourceSelectorTask,
7 ReferenceSourceSelectorTask)
9from lsst.geom import arcseconds, averageSpherePoint
13 """Configuration for `DirectMatchTask` when an already-initialized
14 ``refObjLoader`` will be passed to this task.
16 matchRadius = Field(dtype=float, default=0.25, doc="Matching radius, arcsec")
17 sourceSelection = ConfigurableField(target=ScienceSourceSelectorTask,
18 doc=
"Selection of science sources")
19 referenceSelection = ConfigurableField(target=ReferenceSourceSelectorTask,
20 doc=
"Selection of reference sources")
24 """Configuration for `DirectMatchTask`.
26 refObjLoader = ConfigField(dtype=LoadReferenceObjectsConfig,
27 doc="Configuration of reference object loader")
31 """Simple, brute force matching of a source catalog to a reference catalog.
36 Compatibility parameter. Should
not be used.
37 refObjLoader : `lsst.meas.algorithms.ReferenceObjectLoader`
or `
None`
38 A reference object loader object; gen3 pipeline tasks will
pass `
None`
39 and call `setRefObjLoader`
in `runQuantum`.
41 Other keyword arguments required
for instantiating a Task (such
as
44 ConfigClass = DirectMatchConfig
45 _DefaultName = "directMatch"
47 def __init__(self, refObjLoader=None, **kwargs):
48 Task.__init__(self, **kwargs)
50 self.makeSubtask(
"sourceSelection")
51 self.makeSubtask(
"referenceSelection")
54 """Set the reference object loader for the task.
58 refObjLoader : `lsst.meas.algorithms.ReferenceObjectLoader`
59 An instance of a reference object loader.
63 def run(self, catalog, filterName=None, epoch=None):
64 """Load reference objects and match to them.
71 Name of filter loading fluxes.
72 epoch : `astropy.time.Time` or `
None`
73 Epoch to which to correct proper motion
and parallax,
or `
None` to
74 not apply such corrections.
78 result : `lsst.pipe.base.Struct`
79 Result struct
with components:
82 Matched sources
with associated reference
85 Match metadata (`lsst.meas.astrom.MatchMetadata`).
88 raise RuntimeError(
"Running matcher task with no refObjLoader set in __ini__ or setRefObjLoader")
90 matchMeta = self.
refObjLoader.getMetadataCircle(circle.center, circle.radius, filterName, epoch=epoch)
91 emptyResult = Struct(matches=[], matchMeta=matchMeta)
92 sourceSelection = self.sourceSelection.
run(catalog)
93 if len(sourceSelection.sourceCat) == 0:
94 self.log.warning(
"No objects selected from %d objects in source catalog", len(catalog))
96 refData = self.
refObjLoader.loadSkyCircle(circle.center, circle.radius, filterName, epoch=epoch)
97 refCat = refData.refCat
98 refSelection = self.referenceSelection.
run(refCat)
99 if len(refSelection.sourceCat) == 0:
100 self.log.warning(
"No objects selected from %d objects in reference catalog", len(refCat))
103 self.config.matchRadius*arcseconds)
104 self.log.info(
"Matched %d from %d/%d input and %d/%d reference sources",
105 len(matches), len(sourceSelection.sourceCat), len(catalog),
106 len(refSelection.sourceCat), len(refCat))
107 return Struct(matches=matches, matchMeta=matchMeta, refCat=refCat, sourceSelection=sourceSelection,
108 refSelection=refSelection)
111 """Calculate a circle enclosing the catalog.
120 result : `lsst.pipe.base.Struct`
121 Result struct with components:
124 ICRS center coordinate (`lsst.afw.geom.SpherePoint`).
128 coordList = [src.getCoord() for src
in catalog]
129 center = averageSpherePoint(coordList)
130 radius = max(center.separation(coord)
for coord
in coordList)
131 return Struct(center=center, radius=radius + self.config.matchRadius*arcseconds)
__init__(self, refObjLoader=None, **kwargs)
run(self, catalog, filterName=None, epoch=None)
setRefObjLoader(self, refObjLoader)
calculateCircle(self, catalog)
std::vector< Match< typename Cat1::Record, typename Cat2::Record > > matchRaDec(Cat1 const &cat1, Cat2 const &cat2, lsst::geom::Angle radius, MatchControl const &mc=MatchControl())