Source code for pynpoint.readwrite.attr_writing
"""
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 AttributeWritingModule(WritingModule):
"""
Module for writing a 1D or 2D array of non-static attributes to a text file.
"""
__author__ = 'Tomas Stolker'
@typechecked
def __init__(self,
name_in: str,
data_tag: str,
attribute: str,
file_name: str = 'attributes.dat',
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 the ``PARANG`` attribute is read.
attribute : str
Name of the non-static attribute as given in the central database (e.g., 'INDEX' or
'STAR_POSITION').
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_attribute = attribute
self.m_header = header
[docs] @typechecked
def run(self) -> None:
"""
Run method of the module. Writes the non-static attributes (1D or 2D) to a a text file.
Returns
-------
NoneType
None
"""
if self.m_header is None:
self.m_header = ''
print('Writing attribute data...', end='')
out_name = os.path.join(self.m_output_location, self.m_file_name)
if self.m_attribute not in self.m_data_port.get_all_non_static_attributes():
raise ValueError(f'The \'{self.m_attribute}\' attribute is not present in '
f'\'{self.m_data_port.tag}\'.')
values = self.m_data_port.get_attribute(self.m_attribute)
np.savetxt(out_name, values, header=self.m_header, comments='# ')
print(' [DONE]')
self.m_data_port.close_port()
[docs]class ParangWritingModule(WritingModule):
"""
Module for writing a list of parallactic angles to a text file.
"""
__author__ = 'Tomas Stolker'
@typechecked
def __init__(self,
name_in: str,
data_tag: str,
file_name: str = 'parang.dat',
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 the ``PARANG`` attribute is read.
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. Writes the parallactic angles from the ``PARANG`` attribute of
the specified database tag to a a text file.
Returns
-------
NoneType
None
"""
print('Writing parallactic angles...', end='')
if self.m_header is None:
self.m_header = ''
out_name = os.path.join(self.m_output_location, self.m_file_name)
if 'PARANG' not in self.m_data_port.get_all_non_static_attributes():
raise ValueError(f'The PARANG attribute is not present in \'{self.m_data_port.tag}\'.')
parang = self.m_data_port.get_attribute('PARANG')
np.savetxt(out_name, parang, header=self.m_header, comments='# ')
print(' [DONE]')
self.m_data_port.close_port()