21 from __future__
import annotations
23 __all__ = [
"StandardRepoConverter"]
26 from dataclasses
import dataclass
27 from typing
import TYPE_CHECKING, Iterator, Tuple
29 from lsst.log
import Log
30 from lsst.log.utils
import temporaryLogLevel
31 from lsst.daf.persistence
import Butler
as Butler2
32 from lsst.daf.butler
import DatasetType, DatasetRef, DataCoordinate, FileDataset
33 from .repoConverter
import RepoConverter
34 from .filePathParser
import FilePathParser
35 from .dataIdExtractor
import DataIdExtractor
37 SKYMAP_DATASET_TYPES = {
38 coaddName: f
"{coaddName}Coadd_skyMap" for coaddName
in (
"deep",
"goodSeeing",
"dcr")
42 from lsst.skymap
import BaseSkyMap
43 from lsst.daf.butler
import StorageClass
44 from .cameraMapper
import CameraMapper
45 from ..mapping
import Mapping
as CameraMapperMapping
50 """Struct containing information about a SkyMap found in a Gen2 repository. 54 """Name of the skymap used in Gen3 data IDs. 58 """An instance of the actual skymap class. 62 """The coadd name used as a prefix for the dataset type this skymap was 67 """A `DatasetRef` that can be used to ingest the skymap dataset into a 72 """Name of the file containing the skymap dataset, relative to the 78 """A specialization of `RepoConverter` for non-calibration repositories. 83 Keyword arguments are forwarded to (and required by) `RepoConverter`. 89 with temporaryLogLevel(
"CameraMapper", Log.ERROR):
90 with temporaryLogLevel(
"HscMapper", Log.ERROR):
97 return datasetTypeName
in SKYMAP_DATASET_TYPES.values()
105 self.
task.log.info(f
"Looking for skymaps in root {self.root}.")
106 for coaddName, datasetTypeName
in SKYMAP_DATASET_TYPES.items():
107 if not self.
task.isDatasetTypeIncluded(datasetTypeName):
110 exists = self.
butler2.datasetExists(datasetTypeName)
111 except AttributeError:
116 instance = self.
butler2.get(datasetTypeName)
117 name = self.
task.useSkyMap(instance)
118 datasetType = DatasetType(datasetTypeName, dimensions=[
"skymap"],
119 storageClass=
"SkyMap", universe=self.
task.universe)
120 dataId = DataCoordinate.standardize(skymap=name, universe=self.
task.universe)
121 struct =
FoundSkyMap(name=name, instance=instance, coaddName=coaddName,
122 ref=DatasetRef(datasetType, dataId),
123 filename=self.
butler2.getUri(datasetTypeName))
125 self.
task.log.info(
"Found skymap %s in %s in %s.", name, datasetTypeName, self.
root)
130 for datasetTypeName, mapping
in self.
mapper.mappings.items():
131 if datasetTypeName
not in self.
mapper.calibrations:
132 yield datasetTypeName, mapping
135 storageClass: StorageClass) -> DataIdExtractor:
140 for coaddName
in SKYMAP_DATASET_TYPES.keys():
141 if coaddName
in datasetTypeName:
150 (
"Dataset %s looks like it might need a skymap, but no %sCoadd_skyMap " 151 "found in repo %s."),
152 datasetTypeName, coaddName, self.
root 157 filePathParser=parser,
158 universe=self.
task.universe,
159 instrument=self.
task.instrument.getName(),
160 skyMap=struct.instance
if struct
is not None else None,
161 skyMapName=struct.name
if struct
is not None else None,
167 if self.
task.isDatasetTypeIncluded(struct.ref.datasetType.name):
168 yield FileDataset(path=os.path.join(self.
root, struct.filename), ref=struct.ref)
175 """Gen2 butler associated with this repository. 179 """Gen2 mapper associated with this repository.