Skip to content
Snippets Groups Projects
Select Git revision
  • 2ba2abeb8356a88aad4265b68486ebbe927e46e8
  • master default protected
  • use_flight_altitude
  • distribute
4 results

amv_raob.cpython-37.pyc

Blame
  • subptVisualizer.py 2.44 KiB
    import sys, os, argparse, datetime
    
    try:
        import matplotlib
        matplotlib.use('agg')
        import matplotlib.pyplot as plt
        import matplotlib.patches as mpatches
    except ImportError as e:
        print("Matplotlib is needed to generate graphs")
        sys.exit(1)
    try:
        import numpy as np
    except ImportError as e:
        print("Numpy is needed to generate graphs")
        sys.exit(1)
    
    SAT_ROW = 0
    YEAR_ROW = 1
    DAY_ROW = 2
    SUBPOINT_LON_ROW = 3
    SUBPOINT_LAT_ROW = 4
    
    def genData(data):
        x_vals = np.char.partition(data[:,SUBPOINT_LAT_ROW], ':')[:,0].astype('float')
        heights = np.full_like(data[:,0], 1/ 365, dtype = 'float')
        widths = np.full_like(data[:,0], 60, dtype='float')
        bottoms = np.add([int(x) for x in data[:,YEAR_ROW]],[int(x)/365 for x in data[:,DAY_ROW]])
        return (x_vals, heights, widths, bottoms)
    
    def main(argv):
        parser = argparse.ArgumentParser(description='A utility that visualizes daily positions of satellites')
        parser.add_argument('-v','--verbose', action='store_true', help='programs verbocity')
        parser.add_argument('-o', '--outdir', default= '.', help='directory to store generates image(s), default .')
        parser.add_argument('-l','--list', nargs='+', help='One or more paths to generated daily subpoint files', required=True)
    
        args = parser.parse_args(argv)
    
        if(not os.path.isdir(args.outdir)):
            print("Output directory does not exist: " + args.outdir)
            sys.exit(1)
    
        plt.ylabel('Year')
        plt.xlabel('Longitude')
        plt.title('Geostationary Equator Coverage')
        plt.figure().set_figheight(15)
        plt.xlim(-180,180)
    
        min_date =  9999999
        max_date = -9999999
        plot_list = []
        patch_list = []
        for subpt in args.list:
            data = np.loadtxt(subpt, dtype='str')
            min_date = min(min_date, int(data[0][1]))
            max_date = max(max_date, int(data[-1][1]))
            if(args.verbose):
                print("Graphing " + data[0][0])
            gen = genData(data)
            p = plt.bar(gen[0], gen[1], width = gen[2], bottom = gen[3])
            patch_list.append(mpatches.Patch(label=data[0][0], color = p[-1].get_facecolor()))
           
        year_axis = np.arange(max_date, min_date - 1, -1, dtype='int')
        plt.yticks(year_axis)
        plt.gca().invert_yaxis()
        plt.legend(handles=patch_list)
        
        if(len(args.list) == 1):
            out_name = data[0][0]
        else:
            out_name = "sats"
        plt.savefig(os.path.join(args.outdir, out_name + '.png')) 
    
    if __name__ == '__main__':
        main(sys.argv[1:])