#!/usr/bin/env python3
"""Wrapper for move aquadb and host demux
examples::
./user_apps/special/AquadB_analysis.py --ecolumn=DI6 --run_test=yes --silence=YES acq2106_999
./user_apps/special/AquadB_analysis.py --stim=acq2106_888 --dwg=dat_files/dwg123 --run_test=yes --silence=NO acq2106_999
args for subordinate scripts should pass through wrapper
"""
import argparse
import os
import sys
import argparse
from acq400_hapi import PR, Acq400UI
import user_apps.special.run_AquadB_movement as MOVE
import user_apps.analysis.host_demux as DEMUX
from prettytable import PrettyTable as PT
import numpy as np
wrapper_args = None
FAT_ROOT = '../AquadB_FAT'
[docs]def main(args):
global wrapper_args
PR.Yellow("Running Host_Demux: pses={} pcfg={}".format(args.pses, args.pcfg))
PR.Yellow("Running Move : stim={} dwg={}".format(args.stim, args.dwg))
wrapper_args = args
if args.run_test.upper() == 'YES':
#aquadb_args = aquadb_move_args()
blockPrint()
MOVE.main(args)
enablePrint()
# hazard: MOVE callback and DEMUX callback have different signatures, so args.callback MUST be null for MOVE
args.callback = homecoming
#demux_args = host_demux_args()
blockPrint()
DEMUX.run_main(args)
enablePrint()
[docs]def aquadb_move_args(parser):
parser = MOVE.get_parser(parser)
default_args = {
'force_delete' : 1,
'root': FAT_ROOT+'/DATA',
'stim': 'acq2106_351',
'dwg': FAT_ROOT+'/DWG/wiggle',
'verbose': 2
}
parser = Acq400UI.imported_defaults_overrider(parser,default_args)
return parser
[docs]def host_demux_args(parser):
parser = DEMUX.get_parser(parser)
default_args = {
'src' : FAT_ROOT+'/DATA',
'pcfg': FAT_ROOT+'/PCFG/qen_and_wr_and_di.pcfg',
'pses': '1:-1:1',
'plot': 0
}
parser = Acq400UI.imported_defaults_overrider(parser,default_args)
return parser
[docs]def blockPrint():
if wrapper_args.silence.upper() == 'YES':
sys.stdout = open(os.devnull, 'w')
[docs]def enablePrint():
if wrapper_args.silence.upper() == 'YES':
sys.stdout = sys.__stdout__
[docs]def get_events(data):
arr_name = wrapper_args.ecolumn
if arr_name not in data:
PR.Red('Warning: Event array "{}" not found'.format(arr_name))
return []
event_arr = data[arr_name]
lower = event_arr[0]
arr_len = len(event_arr)
consecutive = False
events = []
events.append(0)
for i in range(arr_len):
if event_arr[i] > lower:
if not consecutive:
consecutive = True
events.append(i)
else:
consecutive = False
if len(events) == 0:
return []
PR.Purple("{} Low: {} High: {} Length: {}".format(arr_name,lower,event_arr[events[0]],arr_len))
return events
[docs]def build_table(events,data):
arr_name = wrapper_args.ecolumn
events = demarcate(events)
t = PT()
t.add_column('events({})'.format(arr_name),events)
for arr in data:
if arr != arr_name:
new_column = []
for ev in events:
if ev == '-':
new_column.append(ev)
continue
value = data[arr][ev]
value = round(value, 2)
new_column.append(value)
t.add_column(arr,new_column)
t.align = 'r'
print(t)
[docs]def demarcate(events):
gap = 1000
pre = events[0]
output = []
for num in events:
if num - pre > gap:
output.append('-')
output.append(num)
pre = num
return output
[docs]def homecoming(data):
enablePrint()
PR.Green('Homecoming')
events = get_events(data)
if len(events) == 0:
PR.Red('Warning: No events found')
return
build_table(events,data)
[docs]def get_parser():
parser = argparse.ArgumentParser(description='Wrapper for move aquadb and host demux')
parser.add_argument('--run_test', default='YES', help="whether or not to run the test")
parser.add_argument('--ecolumn', default=None, help="Event column")
parser.add_argument('--silence', default='YES', help='Hide subordinate script output')
parser.add_argument('--aqbsite', default='1', help='Active AquadB site with STIM loopback')
parser.add_argument('uuts', nargs='+', help='uuts - for auto configuration data_type, nchan, egu or just a label')
aquadb_move_args(parser)
host_demux_args(parser)
return parser
if __name__ == '__main__':
main(get_parser().parse_args())