"""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