Skip to content
Snippets Groups Projects
Commit 10be3fb8 authored by Mattia Mancini's avatar Mattia Mancini
Browse files

SSB-47: loading calibration tables in directory

parent 74748c4e
No related branches found
No related tags found
1 merge request!44Merge back holography to master
......@@ -5,8 +5,10 @@ from struct import iter_unpack, pack
from typing import BinaryIO
from typing import List
from h5py import File
from dataclasses import dataclass, asdict
from numpy import empty as empty_ndarray, ndarray, fromiter as array_from_iter, float64
from os import path
from dataclasses import dataclass, asdict, field
from numpy import empty as empty_ndarray, ndarray, fromiter as array_from_iter, float64, array_equal
from glob import glob
logger = logging.getLogger(__name__)
......@@ -16,6 +18,8 @@ __FREQUENCIES = 512
__FLOATS_PER_FREQUENCY = 2
__N_ANTENNAS_DUTCH = 96
__N_ANTENNAS_INTERNATIONAL = 192
__CALIBRATION_TABLE_FILENAME_PATTERN = '*CalTable-???-???-???_???.dat'
_ATTRIBUTE_NAME_TO_SERIALIZED_NAME = {
'observation_station': 'CalTableHeader.Observation.Station',
'observation_mode': 'CalTableHeader.Observation.Mode',
......@@ -77,7 +81,7 @@ def parse_data(data_buffer):
return complex_data
@dataclass(init=True, repr=True, frozen=True)
@dataclass(init=True, repr=True, frozen=True, eq=True)
class CalibrationTable:
observation_station: str
observation_mode: str
......@@ -89,7 +93,7 @@ class CalibrationTable:
calibration_name: str
calibration_date: datetime
calibration_ppsdelay: List[int]
data: ndarray
data: ndarray = field(compare=False)
comment: str = ''
@staticmethod
......@@ -131,11 +135,25 @@ class CalibrationTable:
file_descriptor[uri] = self.data
for key, value in asdict(self).items():
if key is 'data':
# skipping field data
continue
file_descriptor[uri].attrs[key] = value
file_descriptor.flush()
def __eq__(self, other):
return super().__eq__(other) and array_equal(self.data, other.data)
def store_to_file(self, file_path):
with open(file_path, 'wb') as file_stream:
self.__serialize_header(file_stream)
self.__serialize_data(file_stream)
def read_calibration_tables_in_directory(directory_path: str):
if not path.isdir(directory_path):
raise NotADirectoryError(directory_path)
files = path.join(directory_path, __CALIBRATION_TABLE_FILENAME_PATTERN)
return [CalibrationTable.load_from_file(file_path)
for file_path in glob(files, recursive=False)]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment