71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
import sys
|
|
import os
|
|
from .logarithmic import is_log_step
|
|
from .reader import XTCReader
|
|
|
|
def next_log_step(step, per_decade):
|
|
step += 1
|
|
while not is_log_step(step, per_decade): step += 1
|
|
return step
|
|
|
|
def next_lin_step(step, frequency):
|
|
return step+frequency
|
|
|
|
class LogWriter:
|
|
current_offset = 0
|
|
log_step = 0
|
|
fd = None
|
|
|
|
def __init__(self, file, offset, log_freq):
|
|
self.fd = open(file,'wb')
|
|
self.offset = offset
|
|
self.log_freq = log_freq
|
|
|
|
def consume_frame(self, step, raw_frame):
|
|
if step > self.log_step+self.offset:
|
|
raise Exception("Missing frame {}".format(step))
|
|
|
|
if step == self.log_step+self.offset:
|
|
self.fd.write(raw_frame)
|
|
self.log_step = next_log_step(self.log_step, self.log_freq)
|
|
|
|
|
|
def main():
|
|
filename = sys.argv[1]
|
|
reader = XTCReader(filename, load_cache_file=False)
|
|
lin_freq = int(sys.argv[2])
|
|
log_freq = int(sys.argv[3])
|
|
log_restart = int(sys.argv[4])
|
|
|
|
base,ext = os.path.splitext(filename)
|
|
|
|
lin_file = base + '.lin' + ext
|
|
lin_step = 0
|
|
|
|
log_writers = []
|
|
|
|
with open(lin_file,'wb') as lin_fd:
|
|
try:
|
|
while True:
|
|
raw_frame, frame = reader.dump_frame()
|
|
|
|
if frame.index % log_restart == 0:
|
|
print('Starting new log band: {}'.format(frame.index))
|
|
log_filename = '{}.{}.log{}'.format(base, len(log_writers), ext)
|
|
log_writers.append(LogWriter(log_filename, frame.index, log_freq))
|
|
|
|
if frame.index > lin_step:
|
|
raise Exception("Missing frames")
|
|
|
|
if frame.index == lin_step:
|
|
lin_fd.write(raw_frame)
|
|
lin_step = next_lin_step(lin_step, lin_freq)
|
|
|
|
for writer in log_writers:
|
|
writer.consume_frame(frame.index, raw_frame)
|
|
|
|
except EOFError:
|
|
pass
|
|
|
|
if __name__ == '__main__':
|
|
main() |