#!/usr/bin/env python try: import matplotlib matplotlib.use("Agg") import numpy as np import matplotlib.pyplot as plt plt.rcParams.update({"font.size": 32}) import argparse from matplotlib.gridspec import GridSpec parser = argparse.ArgumentParser() parser.add_argument("freq") parser.add_argument("samp_rate") parser.add_argument("nchan") parser.add_argument("nbin") parser.add_argument("n") parser.add_argument("dur") parser.add_argument("fminimum") parser.add_argument("fmaximum") args = parser.parse_args() def decibel(x): return 10.0 * np.log10(x) # return x if __name__ == "__main__": # Observation parameters exec(args.freq) exec(args.samp_rate) exec(args.nchan) exec(args.nbin) exec(args.n) exec(args.dur) exec(args.fminimum) exec(args.fmaximum) frequency = freq # Load data z = 1000 * (np.fromfile("0.dat", dtype="float32").reshape(-1, nchan) / nbin) allarrays = [] # N = amount of .dat files for i in range(int(n)): final = 1000 * ( np.fromfile(str(i) + ".dat", dtype="float32").reshape(-1, nchan) / nbin ) allarrays.append(final) z_final = np.concatenate(allarrays, axis=1) # Number of sub-integrations nsub = z_final.shape[0] # Compute average spectrum zmean = np.mean(z_final, axis=0) # Compute time axis tint = float(nbin * nchan) / samp_rate t = tint * np.arange(nsub) # Compute frequency axis (convert to MHz) allfreq = [] for i in range(int(n)): freq = ( np.linspace( (frequency + samp_rate * i) - 0.5 * samp_rate, (frequency + samp_rate * i) + 0.5 * samp_rate, nchan, endpoint=False, ) * 1e-6 ) allfreq.append(freq) freq = np.concatenate(allfreq) # Initialize plot fig = plt.figure(figsize=(5 * n, 20.25)) gs = GridSpec(1, 1) # Plot average spectrum ax1 = fig.add_subplot(gs[0, 0]) ax1.plot(freq, decibel(zmean), "#3182bd") ax1.fill_between(freq, decibel(zmean), color="#deebf7") ax1.set_xlim(np.min(freq), np.max(freq)) # np.min(freq), np.max(freq) ax1.set_ylim(np.amin(decibel(zmean)) - 0.5, np.amin(decibel(zmean)) + 15) ax1.ticklabel_format(useOffset=False) ax1.set_xlabel("Frequency (MHz)", labelpad=25) ax1.set_ylabel("Relative Power (dB)", labelpad=25) try: ax1.set_title("\nAveraged RFI Spectrum", pad=25) except: ax1.set_title("\nAveraged RFI Spectrum") ax1.annotate( "Frequency range scanned: " + str(float(fminimum) / 1000000) + "-" + str(float(fmaximum) / 1000000) + " MHz ($\\Delta\\nu$ = " + str(float((fmaximum) - float(fminimum)) / 1000000) + " MHz)\nBandwidth per spectrum: " + str(float(samp_rate) / 1000000) + " MHz\nIntegration time per spectrum: " + str(dur) + " sec\nNumber of channels per spectrum (FFT size): " + str(nchan), xy=(17, 1179), xycoords="axes points", size=32, ha="left", va="top", color="brown", ) ax1.grid() plt.tight_layout() plt.savefig("rfi_plot.png") except Exception as e: print(e) pass