lsst.meas.algorithms gbe01a4569f+b2ef577126
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
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:
79 kwargs['names'] = self.config.colnames
80 # if we specify the column names, then we need to just ignore the header lines.
81 kwargs['data_start'] = self.config.header_lines
82 else:
83 # if we don't specify column names, start the header at this line.
84 kwargs['header_start'] = self.config.header_lines
85
86 # return a numpy array for backwards compatibility with other readers
87 return np.array(Table.read(filename, format=self.config.format,
88 delimiter=self.config.delimiter,
89 **kwargs).as_array())