#!/usr/bin/env python3

import sys
import astropy.units as u
from baseband import vdif


if len(sys.argv)!=2:
    print("Usage: checkThreads.py <VDIFFILE>")
    sys.exit()

vdiffile = sys.argv[1]

f = vdif.open(vdiffile, 'rb')

sample_rate=128*u.MHz

# Do the first frame
frame = f.read_frame()
currentThread = frame['thread_id']
firstFrame = lastFrame = frame['frame_nr']
firstSeconds = lastSeconds = frame['seconds']

bits = frame['bits_per_sample']+1
nchan = 2**frame['lg2_nchan']
dataframe_length = frame['frame_length']*8 - 32

bytespersec = bits*nchan*sample_rate.to_value(u.Hz)*2/8
framesperSec = bytespersec//dataframe_length

while True:
    try:
        frame = f.read_frame()

        frame_num = frame['frame_nr']
        thread = frame['thread_id']
        seconds = frame['seconds']

        if thread==currentThread:
            lastFrame = frame_num
            lastSeconds = seconds
        else:
            delta = (lastSeconds - firstSeconds)*framesperSec + lastFrame-firstFrame + 1
            
            print("Thread{}: {}-{}   {:.0f}".format(currentThread, firstFrame, lastFrame, delta))
            
            currentThread = thread
            firstFrame = lastFrame = frame_num
            firstSeconds = lastSeconds = seconds
    except:
        break
    
delta = (lastSeconds - firstSeconds)*framesperSec + lastFrame-firstFrame + 1
            
print("Thread{}: {}-{}   {:.0f}".format(currentThread, firstFrame, lastFrame, delta))

f.close()
