Coverage for python/lsst/pipe/tasks/script/registerSkymap.py: 35%

26 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2023-04-12 02:50 -0700

1# This file is part of pipe_tasks. 

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 

22import logging 

23 

24from lsst.daf.butler import Butler 

25from lsst.resources import ResourcePath 

26import lsst.pex.config as pexConfig 

27from lsst.skymap import skyMapRegistry 

28 

29 

30_log = logging.getLogger(__name__) 

31 

32 

33class MakeSkyMapConfig(pexConfig.Config): 

34 """Config for makeSkyMap. 

35 """ 

36 name = pexConfig.Field( 

37 doc="Name assigned to created skymap in butler registry", 

38 dtype=str, 

39 default=None, 

40 optional=True 

41 ) 

42 skyMap = skyMapRegistry.makeField( 

43 doc="type of skyMap", 

44 default="dodeca", 

45 ) 

46 

47 def validate(self): 

48 if self.name is None: 

49 raise ValueError("The name field must be set to the name of the specific " 

50 "skymap to use when writing to the butler") 

51 

52 

53def makeSkyMap(butler, config): 

54 """Construct and save a SkyMap into a gen3 butler repository. 

55 

56 Parameters 

57 ---------- 

58 butler : `lsst.daf.butler.Butler` 

59 Butler repository to which the new skymap will be written. 

60 config : `MakeSkyMapConfig` or None 

61 Instance of a configuration class specifying task options. 

62 """ 

63 skyMap = config.skyMap.apply() 

64 skyMap.logSkyMapInfo(_log) 

65 skyMap.register(config.name, butler) 

66 

67 

68def registerSkymap(repo, config, config_file): 

69 """Make and register a SkyMap in a butler repository. 

70 

71 Parameters 

72 ---------- 

73 repo : `str` 

74 URI to the location of the butler repository. 

75 config : `dict` [`str`, `str`] or `None` 

76 Key-value pairs to apply as overrides to the ingest config. 

77 config_file : `str` or `None` 

78 Path to a config overrides file. Can be a URI. 

79 

80 Raises 

81 ------ 

82 RuntimeError 

83 If a config overrides file is given and does not exist. 

84 """ 

85 

86 skyMapConfig = MakeSkyMapConfig() 

87 if config_file: 

88 # pex_config can not support URIs but in the script interface 

89 # we trust that the caller trusts the remote resource they are 

90 # specifying (configs allow arbitrary python code to run). 

91 resource = ResourcePath(config_file) 

92 with resource.as_local() as local_config: 

93 skyMapConfig.load(local_config.ospath) 

94 

95 if config: 

96 skyMapConfig.update(**config) 

97 

98 butler = Butler(repo, writeable=True) 

99 makeSkyMap(butler, skyMapConfig)