22 """Convert a gen2 butler repo to gen 3. See
23 `lsst.obs.base.ConvertRepoConfig` for most of the config options.
26 from lsst.daf.persistence
import Butler
as Butler2
27 import lsst.daf.butler
28 from lsst.log
import Log
30 from lsst.log.utils
import temporaryLogLevel
32 from ..gen2to3
import ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun
35 def convert(repo, gen2root, skymap_name, skymap_config, calibs, reruns, config_file, transfer, processes=1):
36 """Implements the command line interface `butler convert` subcommand,
37 should only be called by command line tools and unit test code that tests
40 Convert the gen 2 Butler repo at `gen2root` into a gen 3 repo
46 URI to the gen 3 repository.
48 URI to the gen 2 repository.
49 skymap_name : `str` or None
50 Name of the skymap to be converted in the repo.
51 skymap_config : `str` or None
52 Path to the `lsst.skymap.BaseSkyMapConfig` of the gen2 skymap to be
54 calibs : `str` or None
55 Path to the gen2 calibration repository to be converted.
56 If a relative path, it is assumed to be relative to `gen2root`.
57 reruns : `list` [`str`] or None
58 List of reruns to convert. They will be placed in the
59 ``shared/INSTRUMENT/RERUN`` collection.
60 config_file : `str` or None
61 Path to `lsst.obs.base.ConvertRepoConfig` configuration to load
62 after all default/instrument configurations.
63 transfer : `str` or None
64 Mode to use when transferring data into the gen3 repository.
66 Number of processes to use for conversion.
70 butlerConfig = lsst.daf.butler.Butler.makeRepo(repo)
71 except FileExistsError:
75 butler = lsst.daf.butler.Butler(butlerConfig)
80 with temporaryLogLevel(
"", Log.ERROR):
81 butler2 = Butler2(gen2root)
82 gen2mapperClass = butler2.getMapperClass(gen2root)
85 instrument = gen2mapperClass.getGen3Instrument()()
87 convertRepoConfig = ConvertRepoTask.ConfigClass()
88 instrument.applyConfigOverrides(ConvertRepoTask._DefaultName, convertRepoConfig)
89 convertRepoConfig.raws.transfer = transfer
90 if skymap_name
is not None:
92 convertRepoConfig.skyMaps[skymap_name].load(skymap_config)
93 convertRepoConfig.rootSkyMapName = skymap_name
94 if config_file
is not None:
95 convertRepoConfig.load(config_file)
100 rerunsArg = [
Rerun(rerun, runName=f
"shared/{instrument.getName()}/{rerun}",
101 chainName=f
"shared/{instrument.getName()}", parents=[])
for rerun
in reruns]
104 butler = lsst.daf.butler.Butler(butlerConfig, run=instrument.makeDefaultRawIngestRunName())
105 convertRepoTask =
ConvertRepoTask(config=convertRepoConfig, butler3=butler, instrument=instrument)
109 calibs=
None if calibs
is None else {calibs: instrument.makeCollectionName(
"calib")},