22 """Convert a gen2 butler repo to gen 3. See
23 `lsst.obs.base.ConvertRepoConfig` for most of the config options.
26 import lsst.daf.butler
30 from ..gen2to3
import ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun
31 from ..utils
import getInstrument
34 def convert(repo, gen2root, instrument, skymap_name, skymap_config, calibs, reruns, config_file, transfer):
35 """Implements the command line interface `butler convert` subcommand,
36 should only be called by command line tools and unit test code that tests
39 Convert the gen 2 Butler repo at `gen2root` into a gen 3 repo
45 URI to the gen 3 repository.
47 URI to the gen 2 repository.
49 The fully-qualified name of the Instrument subclass being converted.
50 skymap_name : `str` or None
51 Name of the skymap to be converted in the repo.
52 skymap_config : `str` or None
53 Path to the `lsst.skymap.BaseSkyMapConfig` of the gen2 skymap to be
55 calibs : `str` or None
56 Path to the gen2 calibration repository to be converted.
57 If a relative path, it is assumed to be relative to `gen2root`.
58 reruns : `list` [`str`] or None
59 List of reruns to convert. They will be placed in the
60 ``shared/INSTRUMENT/RERUN`` collection.
61 config_file : `str` or None
62 Path to `lsst.obs.base.ConvertRepoConfig` configuration to load
63 after all default/instrument configurations.
64 transfer : `str` or None
65 Mode to use when transferring data into the gen3 repository.
69 butlerConfig = lsst.daf.butler.Butler.makeRepo(repo)
70 except FileExistsError:
74 butler = lsst.daf.butler.Butler(butlerConfig)
77 convertRepoConfig = ConvertRepoTask.ConfigClass()
78 instr.applyConfigOverrides(ConvertRepoTask._DefaultName, convertRepoConfig)
79 convertRepoConfig.instrument = instrument
80 convertRepoConfig.raws.transfer = transfer
81 if skymap_name
is not None:
83 convertRepoConfig.skyMaps[skymap_name].load(skymap_config)
84 convertRepoConfig.rootSkyMapName = skymap_name
85 if config_file
is not None:
86 convertRepoConfig.load(config_file)
91 rerunsArg = [
Rerun(rerun, runName=f
"shared/{instr.getName()}/{rerun}",
92 chainName=f
"shared/{instr.getName()}", parents=[])
for rerun
in reruns]
95 butler = lsst.daf.butler.Butler(butlerConfig, run=instr.makeDefaultRawIngestRunName())
96 convertRepoTask =
ConvertRepoTask(config=convertRepoConfig, butler3=butler)
100 calibs=
None if calibs
is None else {calibs: instr.makeCollectionName(
"calib")}