#!/usr/bin/env python3
"""acq400_upload.py :: simplified upload-only program.
For fullshot capture and upload, see acq400_fullshot.py
example: upload data from previous "DEMUX=0" shot::
[pgm@hoy5 acq400_hapi]$ ./user_apps/acq400/acq400_upload.py --save_data BOLO --trace_upload 1 acq2106_123
INFO: Shotcontroller.handle_data() acq2106_123 data valid: UNKNOWN
TIMING:func:'handle_data' took: 11.63 sec
RAW DATA BOLO/acq2106_123_CH00 size 19200000
TIMING:func:'upload' took: 23.67 sec
TIMING:func:'run_main' took: 23.67 sec
[pgm@hoy5 acq400_hapi]$ ls -l BOLO
BOLO/ BOLO_README
[pgm@hoy5 acq400_hapi]$ ls -l BOLO/
acq2106_123_CH00 format
[pgm@hoy5 acq400_hapi]$ ls -l BOLO/acq2106_123_CH00
-rw-r--r-- 1 pgm pgm 19200000 Jul 2 20:27 BOLO/acq2106_123_CH00
"""
import sys
import acq400_hapi
import numpy as np
import os
import errno
import argparse
import re
import time
from subprocess import call
[docs]class TimedShotController(acq400_hapi.ShotControllerWithDataHandler):
[docs] @acq400_hapi.timing
def handle_data(self, args):
return super().handle_data(args)
[docs] def __init__(self, _uuts, args, shot=None):
super().__init__(_uuts, args, shot)
[docs]@acq400_hapi.timing
def upload(args, doClose=False):
uuts = [acq400_hapi.Acq400(u) for u in args.uuts]
#[ acq400_hapi.Acq400UI.exec_args(uut, args) for uut in uuts ]
shot_controller = TimedShotController(uuts, args)
shot_controller.handle_data(args)
for u in uuts:
u.read_chan(0)
rawfn = "{}/{}_CH00".format(args.save_data, u.uut)
print("RAW DATA {} size {}".format(rawfn, os.stat(rawfn).st_size))
if doClose:
for u in uuts:
u.close()
[docs]def uniq(inp):
out = []
for x in inp:
if x not in out:
out.append(x)
return out
[docs]def get_parser(argStr=None):
parser = argparse.ArgumentParser(description='Simple capture and get data')
acq400_hapi.ShotControllerUI.add_args(parser)
parser.add_argument('uuts', nargs = '+', help="uut[s]")
return parser
[docs]@acq400_hapi.timing
def run_main(args):
# deduplicate (yes, some non-optimal apps call with duplicated uuts, wastes time)
args.uuts = uniq(args.uuts)
# encourage single ints to become a list
if re.search(r'^\d$', args.channels) is not None:
args.channels += ','
upload(args)
# execution starts here
if __name__ == '__main__':
run_main(get_parser().parse_args())