21 from __future__
import annotations
23 __all__ = [
"StandardRepoConverter"]
25 from dataclasses
import dataclass
26 from typing
import TYPE_CHECKING, Iterator, Tuple
28 from lsst.log
import Log
29 from lsst.log.utils
import temporaryLogLevel
30 from lsst.daf.persistence
import Butler
as Butler2
31 from lsst.daf.butler
import DatasetType, DatasetRef, DataCoordinate
32 from .repoConverter
import RepoConverter
33 from .filePathParser
import FilePathParser
34 from .dataIdExtractor
import DataIdExtractor
36 SKYMAP_DATASET_TYPES = {
37 coaddName: f
"{coaddName}Coadd_skyMap" for coaddName
in (
"deep",
"goodSeeing",
"dcr")
41 from lsst.skymap
import BaseSkyMap
42 from lsst.daf.butler
import StorageClass
43 from .cameraMapper
import CameraMapper
44 from ..mapping
import Mapping
as CameraMapperMapping
49 """Struct containing information about a SkyMap found in a Gen2 repository. 53 """Name of the skymap used in Gen3 data IDs. 57 """An instance of the actual skymap class. 61 """The coadd name used as a prefix for the dataset type this skymap was 66 """A `DatasetRef` that can be used to ingest the skymap dataset into a 71 """Name of the file containing the skymap dataset, relative to the 77 """A specialization of `RepoConverter` for non-calibration repositories. 82 Keyword arguments are forwarded to (and required by) `RepoConverter`. 88 with temporaryLogLevel(
"CameraMapper", Log.ERROR):
89 with temporaryLogLevel(
"HscMapper", Log.ERROR):
96 return datasetTypeName
in SKYMAP_DATASET_TYPES.values()
104 self.
task.log.info(f
"Looking for skymaps in root {self.root}.")
105 for coaddName, datasetTypeName
in SKYMAP_DATASET_TYPES.items():
106 if not self.
task.isDatasetTypeIncluded(datasetTypeName):
109 exists = self.
butler2.datasetExists(datasetTypeName)
110 except AttributeError:
115 instance = self.
butler2.get(datasetTypeName)
116 name = self.
task.useSkyMap(instance)
117 datasetType = DatasetType(datasetTypeName, dimensions=[
"skymap"],
118 storageClass=
"SkyMap", universe=self.
task.universe)
119 dataId = DataCoordinate.standardize(skymap=name, universe=self.
task.universe)
120 struct =
FoundSkyMap(name=name, instance=instance, coaddName=coaddName,
121 ref=DatasetRef(datasetType, dataId),
122 filename=self.
butler2.getUri(datasetTypeName))
124 self.
task.log.info(
"Found skymap %s in %s in %s.", name, datasetTypeName, self.
root)
129 for datasetTypeName, mapping
in self.
mapper.mappings.items():
130 if datasetTypeName
not in self.
mapper.calibrations:
131 yield datasetTypeName, mapping
134 storageClass: StorageClass) -> DataIdExtractor:
139 for coaddName
in SKYMAP_DATASET_TYPES.keys():
140 if coaddName
in datasetTypeName:
149 (
"Dataset %s looks like it might need a skymap, but no %sCoadd_skyMap " 150 "found in repo %s."),
151 datasetTypeName, coaddName, self.
root 156 filePathParser=parser,
157 universe=self.
task.universe,
158 instrument=self.
task.instrument.getName(),
159 skyMap=struct.instance
if struct
is not None else None,
160 skyMapName=struct.name
if struct
is not None else None,
166 if self.
task.isDatasetTypeIncluded(struct.ref.datasetType.name):
167 yield struct.filename, struct.ref
174 """Gen2 butler associated with this repository. 178 """Gen2 mapper associated with this repository.