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# 

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## @addtogroup LSST_task_documentation 

47## @{ 

48## @page ReadFitsCatalogTask 

49## @ref ReadFitsCatalogTask_ "ReadFitsCatalogTask" 

50## @copybrief ReadFitsCatalogTask 

51## @} 

52 

53 

54class ReadFitsCatalogTask(pipeBase.Task): 

55 r"""!Read an object catalog from a FITS table 

56 

57 @anchor ReadFitsCatalogTask_ 

58 

59 @section meas_algorithms_readFitsCatalog_Contents Contents 

60 

61 - @ref meas_algorithms_readFitsCatalog_Purpose 

62 - @ref meas_algorithms_readFitsCatalog_Initialize 

63 - @ref meas_algorithms_readFitsCatalog_Config 

64 - @ref meas_algorithms_readFitsCatalog_Example 

65 

66 @section meas_algorithms_readFitsCatalog_Purpose Description 

67 

68 Read an object catalog from a FITS table. Designed to read foreign catalogs 

69 so they can be written out in a form suitable for IngestIndexedReferenceTask. 

70 

71 @section meas_algorithms_readFitsCatalog_Initialize Task initialisation 

72 

73 @copydoc \_\_init\_\_ 

74 

75 @section meas_algorithms_readFitsCatalog_Config Configuration parameters 

76 

77 See @ref ReadFitsCatalogConfig 

78 

79 @section meas_algorithms_readFitsCatalog_Example A complete example of using ReadFitsCatalogTask 

80 

81 Run the following code from the main directory of meas_algorithms: 

82 

83 from lsst.meas.algorithms.readFitsCatalogTask import ReadFitsCatalogTask 

84 filePath = "tests/data/testReadFitsCatalog.fits" 

85 task = ReadFitsCatalogTask() 

86 catalogArray = task.run(filePath) 

87 

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

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

90 and choose which HDU to read. 

91 """ 

92 _DefaultName = 'readCatalog' 

93 ConfigClass = ReadFitsCatalogConfig 

94 

95 def run(self, filename): 

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

97 

98 @param[in] filename path to FITS file 

99 @return a numpy structured array containing the specified columns 

100 """ 

101 

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

103 if table is None: 103 ↛ 104line 103 didn't jump to line 104, because the condition on line 103 was never true

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

105 

106 if not self.config.column_map: 

107 # take the data as it is 

108 return table.as_array() 

109 

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

111 if missingnames: 

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

113 

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

115 table.columns[inname].name = outname 

116 return table.as_array()