Source code for pynpoint.readwrite.textwriting

"""
Modules for writing data as text file.
"""

import os

from typing import Optional

import numpy as np

from typeguard import typechecked

from pynpoint.core.processing import WritingModule


[docs]class TextWritingModule(WritingModule): """ Module for writing a 1D or 2D data set from the central HDF5 database as text file. TextWritingModule is a :class:`pynpoint.core.processing.WritingModule` and supports the use of the Pypeline default output directory as well as a specified location. """ __author__ = 'Tomas Stolker' @typechecked def __init__(self, name_in: str, data_tag: str, file_name: str, output_dir: Optional[str] = None, header: Optional[str] = None) -> None: """ Parameters ---------- name_in : str Unique name of the module instance. data_tag : str Tag of the database entry from which data is exported. file_name : str Name of the output file. output_dir : str, None Output directory where the text file will be stored. If no path is specified then the Pypeline default output location is used. header : str, None Header that is written at the top of the text file. Returns ------- NoneType None """ super().__init__(name_in, output_dir=output_dir) self.m_data_port = self.add_input_port(data_tag) self.m_file_name = file_name self.m_header = header
[docs] @typechecked def run(self) -> None: """ Run method of the module. Saves the specified data from the database to a text file. Returns ------- NoneType None """ if self.m_header is None: self.m_header = '' print('Writing text file...', end='') out_name = os.path.join(self.m_output_location, self.m_file_name) data = self.m_data_port.get_all() if data.ndim == 3 and data.shape[0] == 1: data = np.squeeze(data, axis=0) if data.ndim > 2: raise ValueError('Only 1D or 2D arrays can be written to a text file.') if data.dtype == 'int32' or data.dtype == 'int64': np.savetxt(out_name, data, header=self.m_header, comments='# ', fmt='%i') elif data.dtype == 'float32' or data.dtype == 'float64': np.savetxt(out_name, data, header=self.m_header, comments='# ') print(' [DONE]') self.m_data_port.close_port()