5 TAI58_OFFSET = datetime.datetime(1970, 1, 1) - datetime.datetime(1958, 1, 1)
9 return float(seconds) +
float(subseconds) / pow(2,8*subseconds.itemsize)
11 CCSDS_timestamp = np.dtype([
20 tmp = np.frombuffer(data, dtype=CCSDS_timestamp, count=1)
26 dt = datetime.datetime.utcfromtimestamp(tai58 - LEAPSEC) - TAI58_OFFSET
33 basetime = dt.replace(hour=0, minute=0, second=0, microsecond=0)
34 return (dt - basetime).total_seconds()
37 return dt.strftime(
'%Y-%m-%dT%H:%M:%S.%fZ')
43 convert numpy structured array to dict of scalars and numpy arrays
47 for key
in structured_array.dtype.names:
48 if ( key.upper().startswith(
'PADDING')
or
49 key.upper().startswith(
'SPARE') ):
51 myDict[key] = structured_array[key][0]
57 packet = bytearray(length)
58 if len(data) > length:
59 packet[:] = data[0:length]
61 packet[0:len(data)] = data
66 cfeHeaderFields = np.dtype([
72 (
'processorid',
'>u4'),
73 (
'fileopen_seconds',
'>u4'),
74 (
'fileopen_subseconds',
'>u4'),
75 (
'description',
'S32'),
78 dsfHeaderFields = np.dtype([
79 (
'fileclose_seconds',
'>u4'),
80 (
'fileclose_subseconds',
'>u4'),
81 (
'filetable_index',
'>u2'),
82 (
'filename_type',
'>u2'),
86 def readFileHeader(filehandle):
89 pos = filehandle.tell()
90 fourchars = filehandle.read(4)
92 if fourchars != b
'cFE1':
96 data = filehandle.read(cfeHeaderFields.itemsize)
97 tmp = np.frombuffer(data, dtype=cfeHeaderFields, count=1)
100 myDict[
'fileopen_subseconds'])
104 if myDict[
'description'].startswith(b
'DS'):
105 data = filehandle.read(dsfHeaderFields.itemsize)
106 tmp = np.frombuffer(data, dtype=dsfHeaderFields, count=1)
109 myDict[
'fileclose_subseconds'])