Source code for user_apps.utils.hexdump

#!/usr/bin/env python

"""
hexdump

Example::

    ./user_apps/utils/hexdump.py --word=int16 --outroot=outdir bin1 bin2

.. rst-class:: hidden

    usage: hexdump.py [-h] [--nchan NCHAN] [--delim DELIM] [--word WORD] [--outroot OUTROOT] [--out OUT] [--paste PASTE]
                  binfiles [binfiles ...]

    hexdump

    positional arguments:
    binfiles           file[s] to convert

    optional arguments:
    -h, --help         show this help message and exit
    --nchan NCHAN      number of channels
    --delim DELIM
    --word WORD        int16|int32,uint16,uint32
    --outroot OUTROOT  output root directory
    --out OUT          explicit output name
    --paste PASTE      1: paste multiple files * 1 chan

"""

import csv
import argparse
import numpy as np
import os

[docs]def get_word_type(args, wtype): if wtype == 'int16': args.hexfmt = '%6d' args.wtype = np.int16 elif wtype == 'int32': args.hexfmt = '%12d' args.wtype = np.int32 elif wtype == 'uint16': args.hexfmt = '%04x' args.wtype = np.uint16 elif wtype == 'uint32': args.hexfmt = '%08x' args.wtype = np.uint32 else: print("ERROR, undefined word type {}".format(wtype)) exit(1) args.hexfmt += args.delim
[docs]def hexdump2d(args, chx, nrows): lastprint = max(args.pchanset) try: for row in range(nrows): for col in range(args.nchan): if col in args.pchanset: print(args.hexfmt % chx[row][col], end = '\n' if col==lastprint else '') except BrokenPipeError: pass
[docs]def hexdump_onesource_manychan(args): for src in args.binfiles: raw = np.fromfile(src, args.wtype) nrows = len(raw)//args.nchan chx = np.reshape(raw[:nrows*args.nchan], (nrows, args.nchan)) hexdump2d(args, chx, nrows)
[docs]def hexdump_many_onechan_sources(args): chx = list() for binf in args.binfiles: chx.append(np.fromfile(binf, args.wtype)) lens = [ len(u) for u in chx ] nrows = lens[0] chxx = np.vstack(chx) hexdump2d(args, np.vstack[chx], nrows)
[docs]def hexdump(args): get_word_type(args, args.word) if args.paste: hexdump_many_onechan_sources(args) else: hexdump_onesource_manychan(args)
[docs]def expand_pchan(args): if args.pchan == '0': pchan = [ ch for ch in range(0,args.nchan) ] else: pchan = [ int(ch)-1 for ch in eval('[ ' + args.pchan + ' ]') ] args.pchanset = set(pchan)
# print(args.pchanset)
[docs]def run_main(args): expand_pchan(args) hexdump(args)
[docs]def get_parser(): parser = argparse.ArgumentParser(description='hexdump') parser.add_argument('--nchan', default=1, type=int, help="number of channels") parser.add_argument('--pchan', default='0', type=str, help="list channels to print eg 1,2,3,4 default all") parser.add_argument('--delim', default=',') parser.add_argument('--word', default='int16', help="int16|int32,uint16,uint32") parser.add_argument('--outroot', default='', help="output root directory") parser.add_argument('--out', default='', help="explicit output name") parser.add_argument('--paste', default=0, type=int, help="1: paste multiple files * 1 chan") parser.add_argument('binfiles', nargs='+', help="file[s] to convert") return parser
# execution starts here if __name__ == '__main__': run_main(get_parser().parse_args())