LSSTApplications  19.0.0-10-g920eed2,19.0.0-11-g48a0200+2,19.0.0-18-gfc4e62b+13,19.0.0-2-g3b2f90d+2,19.0.0-2-gd671419+5,19.0.0-20-g5a5a17ab+11,19.0.0-21-g2644856+13,19.0.0-23-g84eeccb+1,19.0.0-24-g878c510+1,19.0.0-25-g6c8df7140,19.0.0-25-gb330496+1,19.0.0-3-g2b32d65+5,19.0.0-3-g8227491+12,19.0.0-3-g9c54d0d+12,19.0.0-3-gca68e65+8,19.0.0-3-gcfc5f51+5,19.0.0-3-ge110943+11,19.0.0-3-ge74d124,19.0.0-3-gfe04aa6+13,19.0.0-30-g9c3fd16+1,19.0.0-4-g06f5963+5,19.0.0-4-g3d16501+13,19.0.0-4-g4a9c019+5,19.0.0-4-g5a8b323,19.0.0-4-g66397f0+1,19.0.0-4-g8278b9b+1,19.0.0-4-g8557e14,19.0.0-4-g8964aba+13,19.0.0-4-ge404a01+12,19.0.0-5-g40f3a5a,19.0.0-5-g4db63b3,19.0.0-5-gfb03ce7+13,19.0.0-6-gbaebbfb+12,19.0.0-61-gec4c6e08+1,19.0.0-7-g039c0b5+11,19.0.0-7-gbea9075+4,19.0.0-7-gc567de5+13,19.0.0-71-g41c0270,19.0.0-9-g2f02add+1,19.0.0-9-g463f923+12,w.2020.22
LSSTDataManagementBasePackage
convert.py
Go to the documentation of this file.
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 
26 import lsst.daf.butler
27 import lsst.log
28 import lsst.utils
29 
30 from ..gen2to3 import ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun
31 from ..utils import getInstrument
32 
33 
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
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  )
lsst.obs.base.utils.getInstrument
def getInstrument(instrumentName, registry=None)
Definition: utils.py:100
lsst.obs.base.gen2to3.convertRepo.ConvertRepoSkyMapConfig
Definition: convertRepo.py:102
lsst.obs.base.script.convert.convert
def convert(repo, gen2root, instrument, skymap_name, skymap_config, calibs, reruns, config_file, transfer)
Definition: convert.py:34
lsst::log
Definition: Log.h:706
lsst::utils
Definition: Backtrace.h:29
lsst.obs.base.gen2to3.convertRepo.Rerun
Definition: convertRepo.py:73
lsst.obs.base.gen2to3.convertRepo.ConvertRepoTask
Definition: convertRepo.py:287