Source code for ecpi.process.imag.io.inputs

"""IMAG input functions
"""
import logging
import os

import numpy as np
from astropy.io import fits
from ecpi.common.instru.array_convention import yzegp_to_ijdet_array, ijdet_to_yzegp_array
from ecpi.process.bube.core.detector_images import DetectorImages

logger = logging.getLogger(__name__)
EOF_EXT = ["NEO", "PEO", "TEO", "NPE"]


[docs]def read_ecl_det_ubc_file(det_file): """Load information contained in ECL-DET-UBC files. ..warning: works for a single ECL-DET-UBC file for the moment (DC1). :param l_files: list of ECL-DET-UBC files as specified in parameter file. :type l_files: list :return: dictionary of read values in ECL-DET-UBC file :rtype: dict """ assert isinstance(det_file, str) assert os.path.isfile(det_file) # dict_file = {} with fits.open(det_file) as hdul: num_ext = len(list(hdul)) dict_file = { 'shadowgrams': np.array([ ijdet_to_yzegp_array(hdul[k].data) for k in range(2, num_ext, 3) ]), 'shadowgrams_var': np.array([ ijdet_to_yzegp_array(hdul[k].data) for k in range(3, num_ext + 1, 3) ]), 'energy_ranges': [ [int(hdul[k].header['CHANMIN']), int(hdul[k].header['CHANMAX'])] for k in range(2, num_ext, 3) ], 'hdu1_head': hdul[1].header, 'hdu0_head': hdul[0].header } return dict_file
[docs]def load_det_images_from_files(l_files): """Load information contained in ECL-DET-UBC files. ..warning: works for a single ECL-DET-UBC file for the moment (DC1). :param l_files: list of ECL-DET-UBC files as specified in parameter file. :type l_files: list :return: dictionary of read values in ECL-DET-UBC file :rtype: dict """ # TODO: check if there are several ECL-DET-UBC files for eof_type # In practice, it reads a set of different ubc files called # ECL-DET-UBC-NEO/PEO/NPE and we classify and import in a # dictionary which contains all the elements reference by # type of earth GTI assert isinstance(l_files, list) assert len(l_files) > 0 dict_det_images = {} for det_file in l_files: for eof_type in EOF_EXT: if det_file.find(eof_type) > 10: # a postfix du prefix! logger.info(f"Loading DET_UBC file {det_file}") det_data = read_ecl_det_ubc_file(det_file) detim = DetectorImages() detim.set_shadow( det_data['shadowgrams'], det_data['shadowgrams_var'], det_data['hdu1_head']['EXPOSURE'], det_data['energy_ranges'] ) dict_det_images[eof_type] = { "det_ima": detim, "tstart": det_data['hdu1_head']['TSTART'], "exposure": det_data['hdu1_head']['EXPOSURE'], "pointing": [ det_data['hdu1_head']['RA_PNT'], det_data['hdu1_head']['DEC_PNT'], det_data['hdu1_head']['ORI_PNT'], ] } return dict_det_images