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__ = ["ReadTextCatalogConfig", "ReadTextCatalogTask"] 

25 

26import numpy as np 

27from astropy.table import Table 

28 

29import lsst.pex.config as pexConfig 

30import lsst.pipe.base as pipeBase 

31 

32 

33class ReadTextCatalogConfig(pexConfig.Config): 

34 header_lines = pexConfig.Field( 

35 dtype=int, 

36 default=0, 

37 doc='Number of lines to skip when reading the text reference file.' 

38 ) 

39 colnames = pexConfig.ListField( 

40 dtype=str, 

41 default=[], 

42 doc="An ordered list of column names to use in ingesting the catalog. " 

43 "With an empty list, column names will be discovered from the first line " 

44 "after the skipped header lines." 

45 ) 

46 delimiter = pexConfig.Field( 

47 dtype=str, 

48 default=',', 

49 doc='Delimiter to use when reading text reference files. Comma is default.' 

50 ) 

51 format = pexConfig.Field( 

52 dtype=str, 

53 default='csv', 

54 doc=("Format of files to read, from the astropy.table I/O list here:" 

55 "http://docs.astropy.org/en/stable/io/unified.html#built-in-table-readers-writers") 

56 ) 

57 

58## @addtogroup LSST_task_documentation 

59## @{ 

60## @page ReadTextCatalogTask 

61## @ref ReadTextCatalogTask_ "ReadTextCatalogTask" 

62## @copybrief ReadTextCatalogTask 

63## @} 

64 

65 

66class ReadTextCatalogTask(pipeBase.Task): 

67 r"""!Read an object catalog from a text file 

68 

69 @anchor ReadTextCatalogTask_ 

70 

71 @section meas_algorithms_readTextCatalog_Contents Contents 

72 

73 - @ref meas_algorithms_readTextCatalog_Purpose 

74 - @ref meas_algorithms_readTextCatalog_Initialize 

75 - @ref meas_algorithms_readTextCatalog_Config 

76 - @ref meas_algorithms_readTextCatalog_Example 

77 

78 @section meas_algorithms_readTextCatalog_Purpose Description 

79 

80 Read an object catalog from a text file. Designed to read foreign catalogs 

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

82 

83 The file is assumed to be encoded as UTF-8 (which is compatible with ASCII). 

84 

85 @section meas_algorithms_readTextCatalog_Initialize Task initialisation 

86 

87 @copydoc \_\_init\_\_ 

88 

89 @section meas_algorithms_readTextCatalog_Config Configuration parameters 

90 

91 See @ref ReadTextCatalogConfig 

92 

93 @section meas_algorithms_readTextCatalog_Example A complete example of using ReadTextCatalogTask 

94 

95 Given a file named `table.csv` containing the following: 

96 

97 ra, dec, flux 

98 5.5, -45.2, 12453 

99 19.6, 34.2, 32123 

100 

101 you can read this file with the following code: 

102 

103 from lsst.meas.algorithms.readTextCatalogTask import ReadTextCatalogTask 

104 task = ReadTextCatalogTask() 

105 catalogArray = task.run("table.csv") 

106 

107 The resulting `catalogArray` is a numpy structured array containing three fields 

108 ("ra", "dec" and "flux") and two rows of data. For more complex cases, 

109 config parameters allow you to specify the names of the columns (instead of using automatic discovery) 

110 and set the number of rows to skip. 

111 """ 

112 _DefaultName = 'readCatalog' 

113 ConfigClass = ReadTextCatalogConfig 

114 

115 def run(self, filename): 

116 """Read an object catalog from the specified text file 

117 

118 @param[in] filename path to text file 

119 @return a numpy structured array containing the specified columns 

120 """ 

121 kwargs = {} 

122 if self.config.colnames: 

123 kwargs['names'] = self.config.colnames 

124 # if we specify the column names, then we need to just ignore the header lines. 

125 kwargs['data_start'] = self.config.header_lines 

126 else: 

127 # if we don't specify column names, start the header at this line. 

128 kwargs['header_start'] = self.config.header_lines 

129 

130 # return a numpy array for backwards compatibility with other readers 

131 return np.array(Table.read(filename, format=self.config.format, 

132 delimiter=self.config.delimiter, 

133 **kwargs).as_array())