22 __all__ = [
"makeMergedSchema",
"copyIntoCatalog",
23 "matchesToCatalog",
"matchesFromCatalog",
"copyAliasMapWithPrefix"]
30 from ._schema
import Schema
31 from ._schemaMapper
import SchemaMapper
32 from ._base
import BaseCatalog
33 from ._table
import SimpleTable
34 from ._simple
import SimpleCatalog
35 from ._source
import SourceCatalog, SourceTable
36 from ._match
import ReferenceMatch
41 def makeMapper(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None):
42 """Create a SchemaMapper between the input source and target schemas.
46 sourceSchema : :py:class:`lsst.afw.table.Schema`
47 Input source schema that fields will be mapped from.
48 targetSchema : :py:class:`lsst.afw.table.Schema`
49 Target schema that fields will be mapped to.
50 sourcePrefix : `str`, optional
51 If set, only those keys with that prefix will be mapped.
52 targetPrefix : `str`, optional
53 If set, prepend it to the mapped (target) key name.
57 SchemaMapper : :py:class:`lsst.afw.table.SchemaMapper`
58 Mapping between source and target schemas.
61 for key, field
in sourceSchema:
62 keyName = field.getName()
63 if sourcePrefix
is not None:
64 if not keyName.startswith(sourcePrefix):
67 keyName = field.getName().replace(sourcePrefix,
"", 1)
68 m.addMapping(key, (targetPrefix
or "") + keyName)
72 def makeMergedSchema(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None):
73 """Return a schema that is a deep copy of a mapping between source and target schemas.
77 sourceSchema : :py:class:`lsst.afw.table.Schema`
78 Input source schema that fields will be mapped from.
79 targetSchema : :py:class:`lsst.afw.atable.Schema`
80 Target schema that fields will be mapped to.
81 sourcePrefix : `str`, optional
82 If set, only those keys with that prefix will be mapped.
83 targetPrefix : `str`, optional
84 If set, prepend it to the mapped (target) key name.
88 schema : :py:class:`lsst.afw.table.Schema`
89 Schema that is the result of the mapping between source and target schemas.
91 return makeMapper(sourceSchema, targetSchema, sourcePrefix, targetPrefix).getOutputSchema()
94 def copyIntoCatalog(catalog, target, sourceSchema=None, sourcePrefix=None, targetPrefix=None):
95 """Copy entries from one Catalog into another.
99 catalog : :py:class:`lsst.afw.table.base.Catalog`
100 Source catalog to be copied from.
101 target : :py:class:`lsst.afw.table.base.Catalog`
102 Target catalog to be copied to (edited in place).
103 sourceSchema : :py:class:`lsst.afw.table.Schema`, optional
104 Schema of source catalog.
105 sourcePrefix : `str`, optional
106 If set, only those keys with that prefix will be copied.
107 targetPrefix : `str`, optional
108 If set, prepend it to the copied (target) key name
112 target : :py:class:`lsst.afw.table.base.Catalog`
113 Target catalog that is edited in place.
115 if sourceSchema
is None:
116 sourceSchema = catalog.schema
118 targetSchema = target.schema
119 target.reserve(len(catalog))
120 for i
in range(len(target), len(catalog)):
123 if len(catalog) != len(target):
124 raise RuntimeError(f
"Length mismatch: {len(catalog)} vs {len(target)}")
126 m =
makeMapper(sourceSchema, targetSchema, sourcePrefix, targetPrefix)
127 for rFrom, rTo
in zip(catalog, target):
132 """Denormalise matches into a Catalog of "unpacked matches".
136 matches : `~lsst.afw.table.match.SimpleMatch`
137 Unpacked matches, i.e. a list of Match objects whose schema
138 has "first" and "second" attributes which, resepectively,
139 contain the reference and source catalog entries, and a
140 "distance" field (the measured distance between the reference
142 matchMeta : `~lsst.daf.base.PropertySet`
143 Metadata for matches (must have .add attribute).
147 mergedCatalog : :py:class:`lsst.afw.table.BaseCatalog`
148 Catalog of matches (with ``ref_`` and ``src_`` prefix identifiers for
149 referece and source entries, respectively, including alias
150 maps from reference and source catalogs)
152 if len(matches) == 0:
153 raise RuntimeError(
"No matches provided.")
155 refSchema = matches[0].first.getSchema()
156 srcSchema = matches[0].second.getSchema()
160 srcSchema, mergedSchema, targetPrefix=
"src_")
165 distKey = mergedSchema.addField(
166 "distance", type=np.float64, doc=
"Distance between ref and src")
170 sourceSchema=refSchema, targetPrefix=
"ref_")
172 sourceSchema=srcSchema, targetPrefix=
"src_")
173 for m, r
in zip(matches, mergedCatalog):
174 r.set(distKey, m.distance)
178 catalogName = os.path.basename(
getPackageDir(
"astrometry_net_data"))
180 catalogName =
"NOT_SET"
181 matchMeta.add(
"REFCAT", catalogName)
182 mergedCatalog.getTable().setMetadata(matchMeta)
188 """Generate a list of ReferenceMatches from a Catalog of "unpacked matches".
192 catalog : :py:class:`lsst.afw.table.BaseCatalog`
193 Catalog of matches. Must have schema where reference entries
194 are prefixed with ``ref_`` and source entries are prefixed with
196 sourceSlotConfig : `lsst.meas.base.baseMeasurement.SourceSlotConfig`, optional
197 Configuration for source slots.
201 matches : :py:class:`lsst.afw.table.ReferenceMatch`
205 catalog.schema, SimpleTable.makeMinimalSchema(), sourcePrefix=
"ref_")
210 catalog.schema, SourceTable.makeMinimalSchema(), sourcePrefix=
"src_")
214 if sourceSlotConfig
is not None:
215 sourceSlotConfig.setupSchema(srcCatalog.schema)
218 distKey = catalog.schema.find(
"distance").key
219 for ref, src, cat
in zip(refCatalog, srcCatalog, catalog):
226 """Copy an alias map from one schema into another.
228 This copies the alias map of one schema into another, optionally
229 prepending a prefix to both the "from" and "to" names of the alias
230 (the example use case here is for the "match" catalog created by
231 `lsst.meas.astrom.denormalizeMatches` where prefixes ``src_`` and
232 ``ref_`` are added to the source and reference field entries,
237 inSchema : `lsst.afw.table.Schema`
238 The input schema whose `lsst.afw.table.AliasMap` is to be
239 copied to ``outSchema``.
240 outSchema : `lsst.afw.table.Schema`
241 The output schema into which the `lsst.afw.table.AliasMap`
242 from ``inSchema`` is to be copied (modified in place).
243 prefix : `str`, optional
244 An optional prefix to add to both the "from" and "to" names
245 of the alias (default is an empty string).
249 outSchema : `lsst.afw.table.Schema`
250 The output schema with the alias mappings from `inSchema`
253 for k, v
in inSchema.getAliasMap().
items():
254 outSchema.getAliasMap().
set(prefix + k, prefix + v)
std::vector< SchemaItem< Flag > > * items
Reports attempts to access elements using an invalid key.
daf::base::PropertySet * set
def makeMergedSchema(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None)
def makeMapper(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None)
def matchesToCatalog(matches, matchMeta)
def copyAliasMapWithPrefix(inSchema, outSchema, prefix="")
def matchesFromCatalog(catalog, sourceSlotConfig=None)
def copyIntoCatalog(catalog, target, sourceSchema=None, sourcePrefix=None, targetPrefix=None)
Match< SimpleRecord, SourceRecord > ReferenceMatch
SortedCatalogT< SimpleRecord > SimpleCatalog
CatalogT< BaseRecord > BaseCatalog
std::string getPackageDir(std::string const &packageName)
return the root directory of a setup package