LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
readTextCatalogTask.py
Go to the documentation of this file.
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 fill_values = pexConfig.ListField(
58 dtype=str,
59 default=None,
60 optional=True,
61 doc=("A list giving [<match_string>, <fill_value>], which is used to mask"
62 " the given values in the input file. '0' is suggested for the fill value in order to prevent"
63 " changing the column datatype. The default behavior is to fill empty data with zeros. See "
64 "https://docs.astropy.org/en/stable/io/ascii/read.html#bad-or-missing-values for more details."
65 "Use `replace_missing_floats_with_nan` to change floats to NaN instead of <fill_value>.")
66 )
67 replace_missing_floats_with_nan = pexConfig.Field(
68 dtype=bool,
69 default=False,
70 doc="If True, replace missing data in float columns with NaN instead of zero. If `fill_values` is "
71 "set, this parameter with replace the floats identified as missing by `fill_values`, and the fill"
72 " value from `fill_values` will be overridden with NaN for floats."
73 )
74
75
76class ReadTextCatalogTask(pipeBase.Task):
77 """Read an object catalog from a text file
78 """
79 _DefaultName = 'readCatalog'
80 ConfigClass = ReadTextCatalogConfig
81
82 def run(self, filename):
83 """Read an object catalog from the specified text file
84
85 Parameters
86 ----------
87 filename : `string`
88 Path to specified text file
89
90 Returns
91 -------
92 A numpy structured array containing the specified columns
93 """
94 kwargs = {}
95 if self.config.colnames:
96 # Wrap in list() to avoid transferring a pex_config proxy object.
97 kwargs['names'] = list(self.config.colnames)
98 # if we specify the column names, then we need to just ignore the header lines.
99 kwargs['data_start'] = self.config.header_lines
100 else:
101 # if we don't specify column names, start the header at this line.
102 kwargs['header_start'] = self.config.header_lines
103
104 if self.config.fill_values:
105 kwargs['fill_values'] = [list(self.config.fill_values)]
106
107 table = Table.read(filename, format=self.config.format,
108 delimiter=self.config.delimiter,
109 **kwargs)
110
111 # convert to a numpy array for backwards compatibility with other readers
112 arr = np.array(table.as_array())
113
114 if self.config.replace_missing_floats_with_nan:
115 for column in table.columns:
116 if (table.dtype[column] == np.float32) or (table.dtype[column] == np.float64):
117 arr[column][table.mask[column]] = np.nan
118
119 return arr
Tag types used to declare specialized field types.
Definition misc.h:31