lsst.meas.algorithms  20.0.0-7-gc818c6e6+1837e4e01e
readTextCatalogTask.py
Go to the documentation of this file.
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 
26 import numpy as np
27 from astropy.table import Table
28 
29 import lsst.pex.config as pexConfig
30 import lsst.pipe.base as pipeBase
31 
32 
33 class 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 
64 
65 
66 class 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())
lsst::meas::algorithms.readTextCatalogTask.ReadTextCatalogTask
Read an object catalog from a text file.
Definition: readTextCatalogTask.py:66
lsst::pex::config
lsst::meas::algorithms.readTextCatalogTask.ReadTextCatalogConfig
Definition: readTextCatalogTask.py:33
lsst::meas::algorithms.readTextCatalogTask.ReadTextCatalogTask.run
def run(self, filename)
Definition: readTextCatalogTask.py:115
lsst::pipe::base