def aocal_ratio(sol_numerator, sol_denominator, outpath): """Take the ratio of two sets of gains that are stored in the mwareduce solution file format. The result is placed in a new file compatible with applysolutions. Args: sol_numerator (str): Path to the gains that will act as the numerator sol_denominator (str): Path to the gains that will as the denominator outpath (str): The output path of the new solution file to create """ ao_num = fromfile(sol_numerator) ao_den = fromfile(sol_denominator) ao_ratio = ao_num / ao_den mask = np.isfinite(ao_ratio) ao_ratio[~mask] = np.nan ao_ratio.tofile(outpath)
def check_solutions(aofile, threshold=THRESHOLD, *args, **kwargs): """Inspects the ao-calibrate solutions file to evaluate its reliability Args: aofile (str): aocal solutions file to inspect Keyword Args: threshold (float): The threshold, between 0 to 1, where too many solutions are flagged before the file becomes invalid (default: 0.25) Returns: bool: a valid of invalid aosolutions file """ threshold = threshold / 100 if threshold > 1 else threshold if not os.path.exists(aofile): return False ao_results = fromfile(aofile) ao_flagged = np.sum(np.isnan(ao_results)) / np.prod(ao_results.shape) if ao_flagged > threshold: return False return True
action="store_true", default=False, dest="rms", help="Plot rms histogram as well as del_phi") # TO ADD: LOG HISTOGRAMS OPTION # parser.add_option("--output", default=None, dest="output", help="output names [default: OBSID_histogram.png and OBSID_phasemap.png") # parser.add_option("--marker", default=',', dest="marker", type="string", help="matplotlib marker [default: %default]") # parser.add_option("--markersize", default=2, dest="markersize", type="int", help="matplotlib markersize [default: %default]") options, args = parser.parse_args() if len(args) != 1: parser.error("incorrect number of arguments") filename = args[0] if os.path.exists(filename): ao = aocal.fromfile(filename) else: print(filename + " does not exist!") sys.exit(1) obsid = filename[0:10] diffs = np.array(diff(ao, options.metafits, options.refant)) # Flatten array and delete NaNs for histogram median, peak, std = histo_diffs( diffs[np.logical_not(np.isnan(diffs))].flatten(), obsid) csv_out(obsid, median, peak, std) if options.metafits is not None: if os.path.exists(options.metafits): # Plotting on a single frequency, single pol on map because it's impossible otherwise
dest="preserve_xterms", help="preserve cross-terms (default is to set them all to 0+0j)") opts, args = parser.parse_args() if len(args) != 3: parser.error("incorrect number of arguments") infilename = args[0] outfilename = args[1] refant = int(args[2]) if opts.verbose == 1: logging.basicConfig(level=logging.INFO) elif opts.verbose > 1: logging.basicConfig(level=logging.DEBUG) ao = fromfile(infilename) ref_phasor = (ao[0, refant, ...] / np.abs(ao[0, refant, ...]))[np.newaxis, np.newaxis, ...] if opts.incremental: logging.warn("incremental solution untested!") ao = ao / (ao * ref_phasor) else: ao = ao / ref_phasor if not opts.preserve_xterms: ao[0, :, :, 1] = np.zeros(ao.shape[1:3], dtype=np.complex128) ao[0, :, :, 2] = np.zeros(ao.shape[1:3], dtype=np.complex128) ao.tofile(outfilename)
dest="amp_max", type="float", help="Maximum of y axis of amplitude plots") parser.add_option("--marker", default=',', dest="marker", type="string", help="matplotlib marker [default: %default]") parser.add_option("--markersize", default=2, dest="markersize", type="int", help="matplotlib markersize [default: %default]") opts, args = parser.parse_args() if len(args) != 1: parser.error("incorrect number of arguments") ao = aocal.fromfile(args[0]) plot(ao, os.path.splitext(args[0])[0] + opts.suffix, opts.refant, plot_title=opts.plot_title, outdir=opts.outdir, format=opts.format, amp_max=opts.amp_max, marker=opts.marker, markersize=opts.markersize, verbose=opts.verbose, metafits=opts.metafits)