Source code for singleport_convert

#!/usr/bin/env python
"""
Example use of BeamSet and subclasses BeamMeasure.

Copyright (C) CSIRO 2018
"""
import argparse as ap
import sys
import re

import aces.beamset.beamfactory as bf



[docs]EXPLANATION = """The singleport_convert process tkes an Holography file containing both single-port and formed-beam data and splits it into two separate hdf5 files. It adapts the metadata of the single-port file to describe the data. This maybe a temporary script: some of the functions here can be put directly into the script that writes the original holography file. """
[docs]HELPSTART = """The singleport_convert process tkes an Holography file containing both single-port and formed-beam data and splits it into two separate hdf5 files. """
[docs]def arg_init(): """Define the interprestation of command line arguments. """ parser = ap.ArgumentParser(prog='singleport_convert.py', formatter_class=ap.RawDescriptionHelpFormatter, description=HELPSTART, epilog='See -x for more explanation') parser.add_argument('inFile', nargs="?", help="Data file (hdf5 format)") parser.add_argument('-p', '--ports', default=None, help="Name of file holding ports list.") parser.add_argument('-v', '--verbose', action='store_true') parser.add_argument('-x', '--explain', action='store_true', help="Give an expanded explanation") return parser
[docs]def main(): # parse command line options print("\n fit_contour\n\n") args = arg_init().parse_args() if args.explain: print(EXPLANATION) sys.exit(0) if args.verbose: print("ARGS = ", args) if args.inFile: infile = args.inFile else: print("Try -h for help") sys.exit(0) if args.ports: ports_file = args.ports else: ports_file = "ports_list.txt" holo_pos = infile.find("holo") if holo_pos >= 0: p = holo_pos + 4 else: p = infile.find(".hdf5") outfile_sp = infile[:p] + '_sp.hdf5' outfile_fb = infile[:p] + '_fb.hdf5' old = bf.load_beamset_class(infile) try: portlist = open(ports_file, 'rU').readlines()[0] # portlist = '[[6, 7], [8, 9], [10, 11], [14, 15], [16, 17], [18, 19], [20, 21], [24, 25], [26, 27], [28, 29],' \ # '[30, 31], [34, 35], [36, 37], [38, 39], [40, 41], [44, 45], [46, 47], [48, 49], [50, 51], [54, 55],' \ # '[56, 57], [58, 59], [60, 61], [64, 65], [66, 67], [68, 69], [70, 71], [74, 75], [76, 77], [78, 79],' \ # '[80, 81], [84, 85], [86, 87], [88, 89]]' p1 = re.findall('[0-9]+', portlist) p2 = list(map(int, p1)) npo = len(p2) print("Found {:d} ports.".format(npo)) except IOError: print("{} file not found".format(ports_file)) sys.exit() # Create the new object and populate the metadata new_md = old.get_metadata() new_md['beamType'] = 'singleport' new_md['beams'] = p2 new_md['polarizations'] = ['XX'] # Skip the reference antenna # todo Don't assume AK01 is reference new_md['antennas'] = old.get_metadata()['antennas'][1:] new_obj = old.__class__(new_md) for ia in range(1, old.Na): for ip in [0, 1]: for ib in range(npo/2): ob = ib*2 + ip new_obj.data[0, ia-1, ob, 0, :] = old.data[0, ia, ib+1, ip, :] new_obj.flags[0, ia-1, ob, 0, :] = old.flags[0, ia, ib+1, ip, :] new_obj.add_to_history("Translated to single port format") new_obj.write_to_hdf5(outfile_sp)
# todo Write out formed boresight beam, if present # todo Handle Y ports, or a mixture of x and Y ports. if __name__ == "__main__": sys.exit(main())