Coverage for python/lsst/meas/algorithms/readFitsCatalogTask.py: 37%

22 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-14 02:24 -0700

1# 

2# LSST Data Management System 

3# 

4# Copyright 2008-2017 AURA/LSST. 

5# 

6# This product includes software developed by the 

7# LSST Project (http://www.lsst.org/). 

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 LSST License Statement and 

20# the GNU General Public License along with this program. If not, 

21# see <https://www.lsstcorp.org/LegalNotices/>. 

22# 

23 

24__all__ = ["ReadFitsCatalogConfig", "ReadFitsCatalogTask"] 

25 

26from astropy.table import Table 

27 

28import lsst.pex.config as pexConfig 

29import lsst.pipe.base as pipeBase 

30 

31 

32class ReadFitsCatalogConfig(pexConfig.Config): 

33 hdu = pexConfig.Field( 

34 dtype=int, 

35 default=1, 

36 doc="HDU containing the desired binary table, 0-based but a binary table never occurs in HDU 0", 

37 ) 

38 column_map = pexConfig.DictField( 

39 doc="Mapping of input column name: output column name; each specified column must exist, " 

40 "but additional columns in the input data are written using their original name. ", 

41 keytype=str, 

42 itemtype=str, 

43 default={}, 

44 ) 

45 

46 

47class ReadFitsCatalogTask(pipeBase.Task): 

48 """Read an object catalog from a FITS table 

49 

50 The resulting `catalogArray` is a numpy structured array containing fields such as "name", "ra" and "dec" 

51 and a few rows of data. For more complicated cases config parameters allow you to rename columns 

52 and choose which HDU to read. 

53 """ 

54 _DefaultName = 'readCatalog' 

55 ConfigClass = ReadFitsCatalogConfig 

56 

57 def run(self, filename): 

58 """Read an object catalog from the specified FITS file 

59 

60 Parameters 

61 ---------- 

62 filename : `str` 

63 Path to specified FITS file 

64 

65 Returns 

66 ------- 

67 table : `np.array` 

68 a numpy structured array containing the specified columns 

69 """ 

70 

71 table = Table.read(filename, hdu=self.config.hdu) 

72 if table is None: 

73 raise RuntimeError("No data found in %s HDU %s" % (filename, self.config.hdu)) 

74 

75 if not self.config.column_map: 

76 # take the data as it is 

77 return table.as_array() 

78 

79 missingnames = set(self.config.column_map.keys()) - set(table.columns.keys()) 

80 if missingnames: 

81 raise RuntimeError("Columns %s in column_map were not found in %s" % (missingnames, filename)) 

82 

83 for inname, outname in self.config.column_map.items(): 

84 table.columns[inname].name = outname 

85 return table.as_array()