Source code for baseband.vdif.file_info
# Licensed under the GPLv3 - see LICENSE
"""The VDIFFileReaderInfo property.
Includes information about threads and frame sets.
"""
from ..base.file_info import FileReaderInfo, info_item
__all__ = ['VDIFFileReaderInfo']
[docs]class VDIFFileReaderInfo(FileReaderInfo):
attr_names = (('format', 'edv', 'number_of_frames', 'thread_ids',
'number_of_framesets')
+ FileReaderInfo.attr_names[2:])
"""Attributes that the container provides."""
edv = info_item(needs='header0', doc=(
'Extended data version (False if legacy).'))
@info_item
def thread_ids(self):
# To get the thread_ids and thus the real sample shape,
# need to check frame sets.
with self._parent.temporary_offset(0) as fh:
return fh.get_thread_ids()
@info_item
def header0(self):
with self._parent.temporary_offset(0) as fh:
# Almost all bytes are interpretable as headers,
# so we need a basic sanity check.
return fh.find_header(maximum=0)
# Some headers also need frame rate, but fine to let that
# lead to an error.
@info_item(needs='header0')
def start_time(self):
return self.header0.get_time(frame_rate=self.frame_rate)
@info_item(needs=('header0', 'thread_ids'))
def sample_shape(self):
return (len(self.thread_ids), self.header0.nchan)
@info_item(needs=('number_of_frames', 'thread_ids'))
def number_of_framesets(self):
number_of_framesets = self.number_of_frames / len(self.thread_ids)
if number_of_framesets % 1 == 0:
return int(number_of_framesets)
else:
self.warnings['number_of_framesets'] = (
'file contains non-integer number ({}) of '
'framesets'.format(number_of_framesets))
return None