25from .matcher_probabilistic
import MatchProbabilisticConfig, MatcherProbabilistic
30from typing
import Dict, Set, Tuple
32__all__ = [
'MatchProbabilisticTask']
36 """Run MatchProbabilistic on a reference and target catalog covering the same tract.
38 ConfigClass = MatchProbabilisticConfig
39 _DefaultName = "matchProbabilistic"
51 catalog_ref: pd.DataFrame,
52 catalog_target: pd.DataFrame,
53 select_ref: np.array =
None,
54 select_target: np.array =
None,
55 wcs: afwGeom.SkyWcs =
None,
56 logger: logging.Logger =
None,
57 logging_n_rows: int =
None,
58 ) -> Tuple[pd.DataFrame, pd.DataFrame, Dict[int, str]]:
59 """Match sources in a reference tract catalog with a target catalog.
63 catalog_ref : `pandas.DataFrame`
64 A reference catalog to match objects/sources from.
65 catalog_target : `pandas.DataFrame`
66 A target catalog to match reference objects/sources to.
67 select_ref : `numpy.array`
68 A boolean array of the same length
as `catalog_ref` selecting the sources that can be matched.
69 select_target : `numpy.array`
70 A boolean array of the same length
as `catalog_target` selecting the sources that can be matched.
71 wcs : `lsst.afw.image.SkyWcs`
72 A coordinate system to convert catalog positions to sky coordinates. Only used
if
73 `self.config.coords_ref_to_convert`
is set.
74 logger : `logging.Logger`
76 logging_n_rows : `int`
77 Number of matches to make before outputting incremental log message.
81 catalog_out_ref : `pandas.DataFrame`
82 Reference matched catalog
with indices of target matches.
83 catalog_out_target : `pandas.DataFrame`
84 Reference matched catalog
with indices of target matches.
91 if config.column_order
is None:
92 flux_tot = np.nansum(catalog_ref.loc[:, config.columns_ref_flux].values, axis=1)
93 catalog_ref[
'flux_total'] = flux_tot
94 if config.mag_brightest_ref != -np.inf
or config.mag_faintest_ref != np.inf:
95 mag_tot = -2.5 * np.log10(flux_tot) + config.mag_zeropoint_ref
96 select_mag = (mag_tot >= config.mag_brightest_ref) & (
97 mag_tot <= config.mag_faintest_ref)
99 select_mag = np.isfinite(flux_tot)
100 if select_ref
is None:
101 select_ref = select_mag
103 select_ref &= select_mag
105 if config.coords_ref_to_convert:
106 ra_ref, dec_ref = [catalog_ref[column]
for column
in config.coords_ref_to_convert.keys()]
107 factor = config.coords_ref_factor
109 for ra, dec
in zip(ra_ref, dec_ref)]
110 xy_true = wcs.skyToPixel(radec_true)
112 for idx_coord, column_out
in enumerate(config.coords_ref_to_convert.values()):
113 catalog_ref[column_out] = np.array([xy[idx_coord]
for xy
in xy_true])
115 select_additional = (len(config.columns_target_select_true)
116 + len(config.columns_target_select_false)) > 0
117 if select_additional:
118 if select_target
is None:
119 select_target = np.ones(len(catalog_target), dtype=bool)
120 for column
in config.columns_target_select_true:
121 select_target &= catalog_target[column].values
122 for column
in config.columns_target_select_false:
123 select_target &= ~catalog_target[column].values
125 logger.info(
'Beginning MatcherProbabilistic.match with %d/%d ref sources selected vs %d/%d target',
126 np.sum(select_ref), len(select_ref), np.sum(select_target), len(select_target))
128 catalog_out_ref, catalog_out_target, exceptions = self.
matchermatcher.
match(
131 select_ref=select_ref,
132 select_target=select_target,
134 logging_n_rows=logging_n_rows,
137 return catalog_out_ref, catalog_out_target, exceptions
142 catalog_ref: pd.DataFrame,
143 catalog_target: pd.DataFrame,
144 wcs: afwGeom.SkyWcs =
None,
146 ) -> pipeBase.Struct:
147 """Match sources in a reference tract catalog with a target catalog.
151 catalog_ref : `pandas.DataFrame`
152 A reference catalog to match objects/sources from.
153 catalog_target : `pandas.DataFrame`
154 A target catalog to match reference objects/sources to.
155 wcs : `lsst.afw.image.SkyWcs`
156 A coordinate system to convert catalog positions to sky coordinates.
157 Only needed
if `config.coords_ref_to_convert`
is used to convert
158 reference catalog sky coordinates to pixel positions.
159 kwargs : Additional keyword arguments to
pass to `match`.
163 retStruct : `lsst.pipe.base.Struct`
164 A struct
with output_ref
and output_target attribute containing the
165 output matched catalogs,
as well
as a dict
167 catalog_ref, catalog_target, exceptions = self.matchmatch(catalog_ref, catalog_target, wcs=wcs, **kwargs)
168 return pipeBase.Struct(cat_output_ref=catalog_ref, cat_output_target=catalog_target,
169 exceptions=exceptions)
pipeBase.Struct run(self, pd.DataFrame catalog_ref, pd.DataFrame catalog_target, afwGeom.SkyWcs wcs=None, **kwargs)
Tuple[pd.DataFrame, pd.DataFrame, Dict[int, str]] match(self, pd.DataFrame catalog_ref, pd.DataFrame catalog_target, np.array select_ref=None, np.array select_target=None, afwGeom.SkyWcs wcs=None, logging.Logger logger=None, int logging_n_rows=None)
def __init__(self, **kwargs)
Set[str] columns_in_target(self)
Set[str] columns_in_ref(self)