#!/usr/bin/env python3 # Note: this utility can run under python2.7 or python3 program = 'vdifbstate' author = 'Walter Brisken' version = '0.6' verdate = '20230106' from os import system from sys import exit, argv def printVersion(): print('%s ver. %s %s %s' % (program, version, author, verdate)) def usage(): print('') printVersion() print('') print('A VDIF state counter for multi-thread VDIF data. Uses vmux') print('and m5bstate to do the heavy lifting.\n') print('Usage : %s [ [{E|O}] ]\n' % program) print(' is the name of the VDIF file\n') print(' is the size of each input VDIF frame, inc. header (e.g., 5032)\n') print(' is the stream data rate (Mbps)\n') print(' is the number of frames to bstate-erize\n') print(' is number of bytes into file to start decoding\n') print(' E: Putting an E after the offset parameter causes the program to consider even samples (starting with 0)') print(' O: Putting an O after the offset parameter causes the program to consider odd samples (starting with 0)\n') print('Note: Only works on 2-bit (real or complex) data for now...\n') if '--version' in argv: printVersion() exit() if len(argv) < 6: usage() exit() infile = argv[1] framesize = int(argv[2]) datarate = int(argv[3]) threadlist = argv[4] nt = len(threadlist.split(',')) nframes = int(argv[5]) if len(argv) > 6: offset = int(argv[6]) else: offset = 0 if len(argv) > 7: if argv[7].upper() in ['E', 'O']: eo = argv[7].upper() else: usage() exit() else: eo = '' nc = 1 while(nc < nt): nc *= 2 outputpayload = nc*(framesize-32) framespersecond = (datarate*1000000)//(nt*(framesize-32)*8) outputdatarate = outputpayload*framespersecond*8//1000000 cmd = 'vmux %s %d %d %s - %d | m5bstate - VDIF_%d-%d-%d-2 %d %d %s' % (infile, framesize, framespersecond, threadlist, offset, outputpayload, outputdatarate, nc, nframes, 0, eo) print('Executing: %s' % cmd) system(cmd)