22 __all__ = (
"CalibRepoConverter",)
26 from datetime
import datetime, timedelta
28 from lsst.daf.butler.gen2convert
import makeCalibrationLabel
29 from .repoConverter
import RepoConverter
33 """A helper class that ingests (some of) the contents of a Gen2 calibration 34 data repository into a Gen3 data repository. 36 This class must be used instead of the base `RepoConverter` to process 37 dataset types that are associated with validity ranges. 42 Root of the Gen2 data repository. 43 universe : `lsst.daf.butler.DimensionUniverse` 44 Object containing all dimension definitions. 46 Key-value pairs that may need to appear in the Gen3 data ID, but can 47 never be inferred from a Gen2 filename. This should always include 48 the instrument name (even Gen3 data IDs that don't involve the 49 instrument dimension have instrument-dependent Gen2 filenames). 50 mapper : `lsst.obs.base.CameraMapper`, optional 51 Object that defines Gen2 filename templates. Will be identified, 52 imported, and constructed from ``root`` if not provided. 55 def __init__(self, root, *, universe, baseDataId, mapper=None):
56 super().
__init__(root, universe=universe, baseDataId=baseDataId, mapper=mapper)
57 self.
db = sqlite3.connect(os.path.join(root,
"calibRegistry.sqlite3"))
58 self.
db.row_factory = sqlite3.Row
65 if "calibration_label" not in extractor.datasetType.dimensions:
67 fields = [
"validStart",
"validEnd",
"calibDate"]
68 if "detector" in extractor.datasetType.dimensions.names:
71 fields.append(
"NULL AS ccd")
72 if "physical_filter" in extractor.datasetType.dimensions.names:
73 fields.append(
"filter")
75 fields.append(
"NULL AS filter")
76 query = f
"SELECT DISTINCT {', '.join(fields)} FROM {datasetTypeName};" 77 for row
in self.
db.execute(query):
78 label = makeCalibrationLabel(datasetTypeName, row[
"calibDate"],
79 ccd=row[
"ccd"], filter=row[
"filter"])
82 "calibration_label": label,
83 "valid_first": datetime.strptime(row[
"validStart"],
"%Y-%m-%d"),
84 "valid_last": datetime.strptime(row[
"validEnd"],
"%Y-%m-%d") + timedelta(days=1),
88 def convertRepo(self, butler, *, directory=None, transfer=None, formatter=None, skipDirs=()):
90 butler.registry.addDimensionEntryList(butler.registry.dimensions[
"calibration_label"],
92 super().
convertRepo(butler, directory=directory, transfer=transfer, formatter=formatter,
93 skipDirs=tuple(skipDirs) + (
"focalplane",))
def convertRepo(self, butler, directory=None, transfer=None, formatter=None, skipDirs=())
std::shared_ptr< FrameSet > append(FrameSet const &first, FrameSet const &second)
Construct a FrameSet that performs two transformations in series.
def __init__(self, root, universe, baseDataId, mapper=None)
def addDatasetType(self, datasetTypeName, storageClass)