Source code for data_model.data_reader

"""Helper module for reading of standardized simtools data products."""

import logging

from astropy.io.registry.base import IORegistryError
from astropy.table import QTable

from simtools.data_model import validate_data
from simtools.data_model.metadata_collector import MetadataCollector

_logger = logging.getLogger(__name__)


[docs] def read_table_from_file( file_name, schema_file=None, validate=False, metadata_file=None, context=None ): """ Read astropy table from file and validate against schema. Metadata is read from metadata file or from the metadata section of the data file. Schema for validation can be given as argument, or is determined from the metadata associated to the file. Parameters ---------- file_name: str or Path Name of file to be read. schema_file: str or Path Name of schema file to be used for validation. validate: bool Validate data against schema (if true). metadata_file: str or Path Name of metadata file to be read. Returns ------- astropy Table Table read from file. Raises ------ FileNotFoundError If file does not exist. """ try: data_table = QTable.read(file_name) except (FileNotFoundError, IORegistryError) as exc: _logger.error("Error reading tabled data from %s", file_name) raise exc _logger.info("Reading table data from %s", file_name) if validate: metadata = MetadataCollector( args_dict=None, metadata_file_name=(metadata_file if metadata_file is not None else file_name), context=context, ) _validator = validate_data.DataValidator( schema_file=( schema_file if schema_file is not None else metadata.get_data_model_schema_file_name() ), data_table=data_table, ) return _validator.validate_and_transform() return data_table