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(
"Length mismatch: %d vs %d" %
125 (len(catalog), len(target)))
127 m =
makeMapper(sourceSchema, targetSchema, sourcePrefix, targetPrefix)
128 for rFrom, rTo
in zip(catalog, target):
133 """Denormalise matches into a Catalog of "unpacked matches". 137 matches : `~lsst.afw.table.match.SimpleMatch` 138 Unpacked matches, i.e. a list of Match objects whose schema 139 has "first" and "second" attributes which, resepectively, 140 contain the reference and source catalog entries, and a 141 "distance" field (the measured distance between the reference 143 matchMeta : `~lsst.daf.base.PropertySet` 144 Metadata for matches (must have .add attribute). 148 mergedCatalog : :py:class:`lsst.afw.table.BaseCatalog` 149 Catalog of matches (with ref_ and src_ prefix identifiers for 150 referece and source entries, respectively, including alias 151 maps from reference and source catalogs) 153 if len(matches) == 0:
154 raise RuntimeError(
"No matches provided.")
156 refSchema = matches[0].first.getSchema()
157 srcSchema = matches[0].second.getSchema()
161 srcSchema, mergedSchema, targetPrefix=
"src_")
166 distKey = mergedSchema.addField(
167 "distance", type=np.float64, doc=
"Distance between ref and src")
171 sourceSchema=refSchema, targetPrefix=
"ref_")
173 sourceSchema=srcSchema, targetPrefix=
"src_")
174 for m, r
in zip(matches, mergedCatalog):
175 r.set(distKey, m.distance)
179 catalogName = os.path.basename(
getPackageDir(
"astrometry_net_data"))
181 catalogName =
"NOT_SET" 182 matchMeta.add(
"REFCAT", catalogName)
183 mergedCatalog.getTable().setMetadata(matchMeta)
189 """Generate a list of ReferenceMatches from a Catalog of "unpacked matches". 193 catalog : :py:class:`lsst.afw.table.BaseCatalog` 194 Catalog of matches. Must have schema where reference entries 195 are prefixed with "ref_" and source entries are prefixed with 197 sourceSlotConfig : `lsst.meas.base.baseMeasurement.SourceSlotConfig`, optional 198 Configuration for source slots. 202 matches : :py:class:`lsst.afw.table.ReferenceMatch` 206 catalog.schema, SimpleTable.makeMinimalSchema(), sourcePrefix=
"ref_")
211 catalog.schema, SourceTable.makeMinimalSchema(), sourcePrefix=
"src_")
215 if sourceSlotConfig
is not None:
216 sourceSlotConfig.setupSchema(srcCatalog.schema)
219 distKey = catalog.schema.find(
"distance").key
220 for ref, src, cat
in zip(refCatalog, srcCatalog, catalog):
227 """Copy an alias map from one schema into another. 229 This copies the alias map of one schema into another, optionally 230 prepending a prefix to both the "from" and "to" names of the alias 231 (the example use case here is for the "match" catalog created by 232 `lsst.meas.astrom.denormalizeMatches` where prefixes "src_" and 233 "ref_" are added to the source and reference field entries, 238 inSchema : `lsst.afw.table.Schema` 239 The input schema whose `lsst.afw.table.AliasMap` is to be 240 copied to ``outSchema``. 241 outSchema : `lsst.afw.table.Schema` 242 The output schema into which the `lsst.afw.table.AliasMap` 243 from ``inSchema`` is to be copied (modified in place). 244 prefix : `str`, optional 245 An optional prefix to add to both the "from" and "to" names 246 of the alias (default is an empty string). 250 outSchema : `lsst.afw.table.Schema` 251 The output schema with the alias mappings from `inSchema` 254 for k, v
in inSchema.getAliasMap().
items():
255 outSchema.getAliasMap().
set(prefix + k, prefix + v)
CatalogT< BaseRecord > BaseCatalog
def matchesFromCatalog(catalog, sourceSlotConfig=None)
def makeMergedSchema(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None)
std::vector< SchemaItem< Flag > > * items
def matchesToCatalog(matches, matchMeta)
daf::base::PropertySet * set
std::string getPackageDir(std::string const &packageName)
return the root directory of a setup package
def makeMapper(sourceSchema, targetSchema, sourcePrefix=None, targetPrefix=None)
Reports attempts to access elements using an invalid key.
def copyIntoCatalog(catalog, target, sourceSchema=None, sourcePrefix=None, targetPrefix=None)
Match< SimpleRecord, SourceRecord > ReferenceMatch
def copyAliasMapWithPrefix(inSchema, outSchema, prefix="")
SortedCatalogT< SimpleRecord > SimpleCatalog