Source code for user_apps.acq400.wait_for_pulse

#!/usr/bin/env python


"""
wait_for_pulse.py is a script that monitors the number of trigger pulses that
the UUT recieves and sends the abort command once n triggers have passed.

The script is intended to be run before starting a stream. For example, if the
user wanted to start the stream on one trigger and stop the stream on the next
trigger, then the user would set --n=2 as such::

    ./wait_for_pulse.py --n=2 --reset=1 acq2106_085

The reset parameter shown above sets the counter to 0.

wait_for_pulse MUST be running BEFORE the stream starts
wait_for_pulse does NOT start the stream, some other agent must do that.
wait_for_pulse will STOP the stream
"""


import acq400_hapi
import numpy as np
import matplotlib.pyplot as plt
import argparse


[docs]def run(args): uuts = [] for uut in args.uuts: uuts.append(acq400_hapi.Acq400(uut)) if args.reset == 1: for uut in uuts: uut.s0.SIG_TRG_EXT_RESET = 1 while int(uut.s0.SIG_TRG_EXT_COUNT.split(" ")[1]) != 0: uut.s0.SIG_TRG_EXT_RESET = 1 continue first_counters = [] for uut in uuts: first_counters.append(int(uut.s0.SIG_TRG_EXT_COUNT.split(" ")[1])) counter = 1 current_trg = int(uuts[0].s0.SIG_TRG_EXT_COUNT.split(" ")[1]) end_trg = current_trg + args.n print("Setup complete: Please start stream now.") while current_trg < end_trg: current_trg = int(uuts[0].s0.SIG_TRG_EXT_COUNT.split(" ")[1]) if args.verbose == 1: print("Loop {}. Current = {}, End = {}" .format(counter, current_trg, end_trg)) counter += 1 for uut in uuts: uut.s0.set_abort = 1 print("Number of triggers met. System has been stopped. Quitting now.") for pos, uut in enumerate(uuts): if int(uut.s0.SIG_TRG_EXT_COUNT.split(" ")[1]) != first_counters[pos] + args.n: print("WARNING: {} final trigger pulse counter does not equal its " \ "starting counter + {}. Please check for configuration errors." .format(uut.s0.HN, args.n)) return None
[docs]def get_parser(): parser = argparse.ArgumentParser(description='Stop UUT after N triggers') parser.add_argument('--n', default=2, type=int, help="How many trgs to wait through before sending abort cmd. Default: 2") parser.add_argument('--reset', default=0, type=int, help='Whether or not to reset the trg counter before starting. Default: 0') parser.add_argument('--verbose', default=0, type=int, help='Whether or not to print status messages during operation. Default: 0') parser.add_argument('uuts', nargs='+', help="uut list") return parser
if __name__ == '__main__': run(get_parser().parse_args())