Coverage for python/lsst/meas/algorithms/readTextCatalogTask.py: 88%

20 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2022-08-20 02:03 -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__ = ["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 

59class ReadTextCatalogTask(pipeBase.Task): 

60 """Read an object catalog from a text file 

61 """ 

62 _DefaultName = 'readCatalog' 

63 ConfigClass = ReadTextCatalogConfig 

64 

65 def run(self, filename): 

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

67 

68 Parameters 

69 ---------- 

70 filename : `string` 

71 Path to specified text file 

72 

73 Returns 

74 ------- 

75 A numpy structured array containing the specified columns 

76 """ 

77 kwargs = {} 

78 if self.config.colnames: 78 ↛ 80line 78 didn't jump to line 80, because the condition on line 78 was never true

79 # Wrap in list() to avoid transferring a pex_config proxy object. 

80 kwargs['names'] = list(self.config.colnames) 

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

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

83 else: 

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

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

86 

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

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

89 delimiter=self.config.delimiter, 

90 **kwargs).as_array())