Coverage for python/lsst/obs/base/script/convert.py : 19%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of obs_base.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (http://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
22"""Convert a gen2 butler repo to gen 3. See
23`lsst.obs.base.ConvertRepoConfig` for most of the config options.
24"""
26import lsst.daf.butler
27import lsst.log
28import lsst.utils
30from ..gen2to3 import ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun
31from ..utils import getInstrument
34def 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
37 this function.
39 Convert the gen 2 Butler repo at `gen2root` into a gen 3 repo
40 living at `repo`.
42 Parameters
43 ----------
44 repo : `str`
45 URI to the gen 3 repository.
46 gen2root : `str`
47 URI to the gen 2 repository.
48 instrument : `str`
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
54 converted.
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.
66 """
67 # Allow a gen3 butler to be reused
68 try:
69 butlerConfig = lsst.daf.butler.Butler.makeRepo(repo)
70 except FileExistsError:
71 # Use the existing butler configuration
72 butlerConfig = repo
74 butler = lsst.daf.butler.Butler(butlerConfig)
75 instr = getInstrument(instrument, butler.registry)
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:
82 convertRepoConfig.skyMaps[skymap_name] = ConvertRepoSkyMapConfig()
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)
88 if reruns is None:
89 rerunsArg = []
90 else:
91 rerunsArg = [Rerun(rerun, runName=f"shared/{instr.getName()}/{rerun}",
92 chainName=f"shared/{instr.getName()}", parents=[]) for rerun in reruns]
94 # create a new butler instance for running the convert repo task
95 butler = lsst.daf.butler.Butler(butlerConfig, run=f"raw/{instr.getName()}")
96 convertRepoTask = ConvertRepoTask(config=convertRepoConfig, butler3=butler)
97 convertRepoTask.run(
98 root=gen2root,
99 reruns=rerunsArg,
100 calibs=None if calibs is None else {calibs: f"calib/{instr.getName()}"}
101 )