LSST Applications  21.0.0+75b29a8a7f,21.0.0+e70536a077,21.0.0-1-ga51b5d4+62c747d40b,21.0.0-10-gbfb87ad6+3307648ee3,21.0.0-15-gedb9d5423+47cba9fc36,21.0.0-2-g103fe59+fdf0863a2a,21.0.0-2-g1367e85+d38a93257c,21.0.0-2-g45278ab+e70536a077,21.0.0-2-g5242d73+d38a93257c,21.0.0-2-g7f82c8f+e682ffb718,21.0.0-2-g8dde007+d179fbfa6a,21.0.0-2-g8f08a60+9402881886,21.0.0-2-ga326454+e682ffb718,21.0.0-2-ga63a54e+08647d4b1b,21.0.0-2-gde069b7+26c92b3210,21.0.0-2-gecfae73+0445ed2f95,21.0.0-2-gfc62afb+d38a93257c,21.0.0-27-gbbd0d29+ae871e0f33,21.0.0-28-g5fc5e037+feb0e9397b,21.0.0-3-g21c7a62+f4b9c0ff5c,21.0.0-3-g357aad2+57b0bddf0b,21.0.0-3-g4be5c26+d38a93257c,21.0.0-3-g65f322c+3f454acf5d,21.0.0-3-g7d9da8d+75b29a8a7f,21.0.0-3-gaa929c8+9e4ef6332c,21.0.0-3-ge02ed75+4b120a55c4,21.0.0-4-g3300ddd+e70536a077,21.0.0-4-g591bb35+4b120a55c4,21.0.0-4-gc004bbf+4911b9cd27,21.0.0-4-gccdca77+f94adcd104,21.0.0-4-ge8fba5a+2b3a696ff9,21.0.0-5-gb155db7+2c5429117a,21.0.0-5-gdf36809+637e4641ee,21.0.0-6-g00874e7+c9fd7f7160,21.0.0-6-g4e60332+4b120a55c4,21.0.0-7-gc8ca178+40eb9cf840,21.0.0-8-gfbe0b4b+9e4ef6332c,21.0.0-9-g2fd488a+d83b7cd606,w.2021.05
LSST Data Management Base Package
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 from lsst.daf.persistence import Butler as Butler2
27 import lsst.daf.butler
28 from lsst.log import Log
29 import lsst.utils
30 from lsst.log.utils import temporaryLogLevel
31 
32 from ..gen2to3 import CalibRepo, ConvertRepoTask, ConvertRepoSkyMapConfig, Rerun
33 
34 
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
38  this function.
39 
40  Convert the gen 2 Butler repo at `gen2root` into a gen 3 repo
41  living at `repo`.
42 
43  Parameters
44  ----------
45  repo : `str`
46  URI to the gen 3 repository.
47  gen2root : `str`
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
53  converted.
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 rerun paths to convert. Output collection names will be
59  guessed, which can fail if the Gen2 repository paths do not follow a
60  recognized convention. In this case, the command-line interface cannot
61  be used.
62  config_file : `str` or None
63  Path to `lsst.obs.base.ConvertRepoConfig` configuration to load
64  after all default/instrument configurations.
65  transfer : `str` or None
66  Mode to use when transferring data into the gen3 repository.
67  processess : `int`
68  Number of processes to use for conversion.
69  """
70  # Allow a gen3 butler to be reused
71  try:
72  butlerConfig = lsst.daf.butler.Butler.makeRepo(repo)
73  except FileExistsError:
74  # Use the existing butler configuration
75  butlerConfig = repo
76 
77  butler = lsst.daf.butler.Butler(butlerConfig)
78 
79  # Derive the gen3 instrument from the gen2root
80  # This requires we instantiate a gen2 butler solely to get its mapper
81  # Hide all logging -- the later call will show them
82  with temporaryLogLevel("", Log.ERROR):
83  butler2 = Butler2(gen2root)
84  gen2mapperClass = butler2.getMapperClass(gen2root)
85  del butler2
86 
87  instrument = gen2mapperClass.getGen3Instrument()()
88 
89  convertRepoConfig = ConvertRepoTask.ConfigClass()
90  instrument.applyConfigOverrides(ConvertRepoTask._DefaultName, convertRepoConfig)
91  convertRepoConfig.raws.transfer = transfer
92  if skymap_name is not None:
93  convertRepoConfig.skyMaps[skymap_name] = ConvertRepoSkyMapConfig()
94  convertRepoConfig.skyMaps[skymap_name].load(skymap_config)
95  convertRepoConfig.rootSkyMapName = skymap_name
96  if config_file is not None:
97  convertRepoConfig.load(config_file)
98 
99  if reruns is None:
100  rerunsArg = []
101  else:
102  rerunsArg = [Rerun(rerun, runName=None, chainName=None, parents=[]) for rerun in reruns]
103 
104  # create a new butler instance for running the convert repo task
105  butler = lsst.daf.butler.Butler(butlerConfig, run=instrument.makeDefaultRawIngestRunName())
106  convertRepoTask = ConvertRepoTask(config=convertRepoConfig, butler3=butler, instrument=instrument)
107  convertRepoTask.run(
108  root=gen2root,
109  reruns=rerunsArg,
110  calibs=None if calibs is None else [CalibRepo(path=calibs)],
111  processes=processes,
112  )
def temporaryLogLevel(name, level)
Definition: utils.py:49
Definition: Log.h:706
def convert(repo, gen2root, skymap_name, skymap_config, calibs, reruns, config_file, transfer, processes=1)
Definition: convert.py:35