#!/usr/bin/python
"""make_waves --nchan --nsam .. make rainbow patterns
todo add padto option to pad non-binary WF to binary buffer
todo handle int32 data
"""
import numpy as np
import argparse
import acq400_hapi
from acq400_hapi import intSIAction
[docs]def write_out(args, aw):
    fn = "rainbow-{}-{}-{}".format(args.fname[0], args.nchan, args.nsam)
    (aw*(2**15-1)).astype(np.int16).tofile(fn) 
[docs]def make_waves(args):
    sin = np.sin(np.array(list(range(args.nsam))) * args.cycles*2*np.pi/args.nsam)
    aw = np.zeros((args.nsam, args.nchan))
    for ch in range(0, args.nchan):
        aw[:,ch] = -1.0 + 2.0*ch/args.nchan
    write_out(args, aw) 
[docs]def run_main(args):
    if args.padto > 0:
        print("WORKTODO: padto option NOT implemented")
    make_waves(args) 
[docs]def get_parser():
    parser = argparse.ArgumentParser(description='create host site multi-channel AWG file')
    parser.add_argument('--nchan', type=int, default=32)
    parser.add_argument('--nsam', action=intSIAction, decimal=False, default=0x1000, help='number of samples, can suffix M for binary mega')
    parser.add_argument('--cycles', type=int, default=10, help='number of cycles in waveform')
    parser.add_argument('--padto', action=intSIAction, decimal=False, default=0, help='number of samples, can suffix M for binary mega')
    parser.add_argument('fname', nargs=1, help='file name root')
    return parser 
if __name__ == '__main__':
    run_main(get_parser().parse_args())