Hide keyboard shortcuts

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/>. 

21 

22"""Convert a gen2 butler repo to gen 3. See 

23`lsst.obs.base.ConvertRepoConfig` for most of the config options. 

24""" 

25 

26import lsst.daf.butler 

27import lsst.log 

28import lsst.utils 

29 

30from ..gen2to3 import ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun 

31from ..utils import getInstrument 

32 

33 

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. 

38 

39 Convert the gen 2 Butler repo at `gen2root` into a gen 3 repo 

40 living at `repo`. 

41 

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 

73 

74 butler = lsst.daf.butler.Butler(butlerConfig) 

75 instr = getInstrument(instrument, butler.registry) 

76 

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) 

87 

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] 

93 

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 )