n_cols = 2 mapping = { 'source': 'lma_source', 'flash_extent': 'flash_extent', 'flash_init': 'flash_initiation', 'footprint': 'flash_footprint' } #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir + '/20%s/*.nc' % (date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir + '/20%s' % (date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call([ 'chmod', 'a+w', outpath, plot_dir + '/20%s' % (date.strftime('%y/%b')), plot_dir + '/20%s' % (date.strftime('%y')) ]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] print(f) make_plot(f, var, n_cols=n_cols, outpath=outpath) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_flash_extent.nc', 'flash_extent', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_flash_init.nc', 'flash_initiation', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_source.nc', 'lma_source', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_footprint.nc', 'flash_footprint', n_cols=n_cols)
def test_sort_and_grid_and_plot(outpath): """ Given an output path, run sample data included in lmatools through flash sorting and gridding""" base_sort_dir = outpath logger_setup(outpath) files = get_sample_data_list() center_ID = 'WTLMA' ctr_lat, ctr_lon = 33.5, -101.5 params = {'stations':(6,13), 'chi2':(0,1.0), 'ctr_lat':ctr_lat, 'ctr_lon':ctr_lon, 'distance':3000.0, 'thresh_critical_time':0.15, 'mask_length':6, } h5_dir = os.path.join(base_sort_dir, 'h5_files') grid_dir = os.path.join(base_sort_dir, 'grid_files') plot_dir = os.path.join(base_sort_dir, 'plots') y,m,d,H,M,S = tfromfile(files[0]) date = datetime(y,m,d, H,M,S) # Create HDF5 flash files base_out_dir = (h5_dir+"/20%s" %(date.strftime('%y/%b/%d'))) if os.path.exists(base_out_dir) == False: os.makedirs(base_out_dir) subprocess.call(['chmod', 'a+w', base_out_dir, h5_dir+'/20%s' %(date.strftime('%y/%b')), h5_dir+'/20%s' %(date.strftime('%y'))]) tag = '' outdir = os.path.join(base_out_dir, tag) info = open(os.path.join(outdir, 'input_params.py'), 'w') info.write(str(params)) info.close() run_files_with_params(files, outdir, params, cluster, retain_ascii_output=False, cleanup_tmp=True) # Figure out which HDF5 files were created h5_filenames = glob.glob(h5_dir+'/20%s/LYLOUT*.dat.flash.h5' %(date.strftime('%y/%b/%d'))) h5_filenames.sort() # Create NetCDF gridded data frame_interval=60.0*2 # seconds dx_km=3.0e3 # meters dy_km=3.0e3 x_bnd_km = (-200e3, 200e3) y_bnd_km = (-200e3, 200e3) # There are similar functions in lmatools to grid on a regular x,y grid in some map projection. dx, dy, x_bnd, y_bnd = dlonlat_at_grid_center(ctr_lat, ctr_lon, dx=dx_km, dy=dy_km, x_bnd = x_bnd_km, y_bnd = y_bnd_km ) # print("dx, dy = {0}, {1} deg".format(dx,dy)) # print("lon_range = {0} deg".format(x_bnd)) # print("lat_range = {0} deg".format(y_bnd)) for f in h5_filenames: y,m,d,H,M,S = tfromfile(f) # print y,m,d,H,M,S start_time = datetime(y,m,d, H,M,S) end_time = start_time + timedelta(0,600) # print start_time, end_time outpath = grid_dir+'/20%s' %(date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call(['chmod', 'a+w', outpath, grid_dir+'/20%s' %(date.strftime('%y/%b')), grid_dir+'/20%s' %(date.strftime('%y'))]) grid_h5flashfiles(h5_filenames, start_time, end_time, frame_interval=frame_interval, proj_name='latlong', dx=dx, dy=dy, x_bnd=x_bnd, y_bnd=y_bnd, ctr_lon=ctr_lon, ctr_lat=ctr_lat, outpath = outpath, output_writer = write_cf_netcdf_latlon, output_filename_prefix=center_ID, spatial_scale_factor=1.0 ) # Create plots n_cols=2 mapping = { 'source':'lma_source', 'flash_extent':'flash_extent', 'flash_init':'flash_initiation', 'footprint':'flash_footprint'} #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir+'/20%s/*.nc' %(date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir+'/20%s' %(date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call(['chmod', 'a+w', outpath, plot_dir+'/20%s' %(date.strftime('%y/%b')), plot_dir+'/20%s' %(date.strftime('%y'))]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] # print f make_plot(f, var, n_cols=n_cols, x_name='longitude', y_name='latitude', outpath = outpath)
if True: n_cols = 2 mapping = { 'source': 'lma_source', 'flash_extent': 'flash_extent', 'flash_init': 'flash_initiation', 'footprint': 'flash_footprint' } #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir + '/20%s/*.nc' % (date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir + '/20%s' % (date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call([ 'chmod', 'a+w', outpath, plot_dir + '/20%s' % (date.strftime('%y/%b')), plot_dir + '/20%s' % (date.strftime('%y')) ]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] print f make_plot(f, var, n_cols=n_cols, x_name='longitude', y_name='latitude', outpath=outpath)
outpath = grid_dir+'/20%s' %(date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call(['chmod', 'a+w', outpath, grid_dir+'/20%s' %(date.strftime('%y/%b')), grid_dir+'/20%s' %(date.strftime('%y'))]) grid_h5flashfiles(h5_filenames, start_time, end_time, frame_interval=frame_interval, proj_name='latlong', dx=dx, dy=dy, x_bnd=x_bnd, y_bnd=y_bnd, ctr_lon=ctr_lon, ctr_lat=ctr_lat, outpath = outpath, output_writer = write_cf_netcdf_latlon, output_filename_prefix=center_ID, spatial_scale_factor=1.0 ) # ----- Create plots ----- if True: n_cols=2 mapping = { 'source':'lma_source', 'flash_extent':'flash_extent', 'flash_init':'flash_initiation', 'footprint':'flash_footprint'} #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir+'/20%s/*.nc' %(date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir+'/20%s' %(date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call(['chmod', 'a+w', outpath, plot_dir+'/20%s' %(date.strftime('%y/%b')), plot_dir+'/20%s' %(date.strftime('%y'))]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] print f make_plot(f, var, n_cols=n_cols, x_name='longitude', y_name='latitude', outpath = outpath)
dx=dx, dy=dy, x_bnd=x_bnd, y_bnd=y_bnd, ctr_lon=ctr_lon, ctr_lat=ctr_lat, outpath = outpath, output_writer = write_cf_netcdf_latlon, output_filename_prefix=center_ID, spatial_scale_factor=1.0 ) # Make plots if False: n_cols=2 mapping = { 'source':'lma_source', 'flash_extent':'flash_extent', 'flash_init':'flash_initiation', 'footprint':'flash_footprint'} #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir+'/20%s/*.nc' %(date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir+'/20%s' %(date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call(['chmod', 'a+w', outpath, plot_dir+'/20%s' %(date.strftime('%y/%b')), plot_dir+'/20%s' %(date.strftime('%y'))]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] print f make_plot(f, var, n_cols=n_cols, outpath = outpath) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_flash_extent.nc', 'flash_extent', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_flash_init.nc', 'flash_initiation', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_source.nc', 'lma_source', n_cols=n_cols) # make_plot('/data/rtlma/flash_sort/LMA_20120319_010000_600_10src_4000.0m-dx_footprint.nc', 'flash_footprint', n_cols=n_cols)
This is useful if one wishes to add additional data to the plot, e.g., an GPS track. Be careful to use the correct map projection information from the NetCDF file when plotting new data. It also demonstrates how to change the backend from the default (non-windowed) backend so that the figure can be worked with interactively. It is necessary to edit the "backend" import line to use a backend that can run on your computer. """ from __future__ import absolute_import from lmatools.multiples_nc import make_plot f, p, start, fname = make_plot('LMA_20040622_052000_600_10src_flash_extent.nc', 'flash_extent', n_cols=1, do_save=False) # Plot some other stuff here, using # ax = p.multiples.flat[frame_sequence_id] # ax.plot(...) # etc. # ---EDIT ME --- Import a backend that can run on your computer from matplotlib.backends.backend_macosx import FigureManagerMac, FigureCanvasMac # Replace the existing canvas with one that matches the backend canvas = FigureCanvasMac(f) f.set_canvas(canvas) # Tell the OS to make a window
def test_sort_and_grid_and_plot(outpath): """ Given an output path, run sample data included in lmatools through flash sorting and gridding""" base_sort_dir = outpath logger_setup(outpath) files = get_sample_data_list() center_ID = 'WTLMA' ctr_lat, ctr_lon = 33.5, -101.5 params = { 'stations': (6, 13), 'chi2': (0, 1.0), 'ctr_lat': ctr_lat, 'ctr_lon': ctr_lon, 'distance': 3000.0, 'thresh_critical_time': 0.15, 'mask_length': 6, } h5_dir = os.path.join(base_sort_dir, 'h5_files') grid_dir = os.path.join(base_sort_dir, 'grid_files') plot_dir = os.path.join(base_sort_dir, 'plots') y, m, d, H, M, S = tfromfile(files[0]) date = datetime(y, m, d, H, M, S) # Create HDF5 flash files base_out_dir = (h5_dir + "/20%s" % (date.strftime('%y/%b/%d'))) if os.path.exists(base_out_dir) == False: os.makedirs(base_out_dir) subprocess.call([ 'chmod', 'a+w', base_out_dir, h5_dir + '/20%s' % (date.strftime('%y/%b')), h5_dir + '/20%s' % (date.strftime('%y')) ]) tag = '' outdir = os.path.join(base_out_dir, tag) info = open(os.path.join(outdir, 'input_params.py'), 'w') info.write(str(params)) info.close() run_files_with_params(files, outdir, params, cluster, retain_ascii_output=False, cleanup_tmp=True) # Figure out which HDF5 files were created h5_filenames = glob.glob(h5_dir + '/20%s/LYLOUT*.dat.flash.h5' % (date.strftime('%y/%b/%d'))) h5_filenames.sort() # Create NetCDF gridded data frame_interval = 60.0 * 2 # seconds dx_km = 3.0e3 # meters dy_km = 3.0e3 x_bnd_km = (-200e3, 200e3) y_bnd_km = (-200e3, 200e3) # There are similar functions in lmatools to grid on a regular x,y grid in some map projection. dx, dy, x_bnd, y_bnd = dlonlat_at_grid_center(ctr_lat, ctr_lon, dx=dx_km, dy=dy_km, x_bnd=x_bnd_km, y_bnd=y_bnd_km) # print("dx, dy = {0}, {1} deg".format(dx,dy)) # print("lon_range = {0} deg".format(x_bnd)) # print("lat_range = {0} deg".format(y_bnd)) for f in h5_filenames: y, m, d, H, M, S = tfromfile(f) # print y,m,d,H,M,S start_time = datetime(y, m, d, H, M, S) end_time = start_time + timedelta(0, 600) # print start_time, end_time outpath = grid_dir + '/20%s' % (date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call([ 'chmod', 'a+w', outpath, grid_dir + '/20%s' % (date.strftime('%y/%b')), grid_dir + '/20%s' % (date.strftime('%y')) ]) grid_h5flashfiles(h5_filenames, start_time, end_time, frame_interval=frame_interval, proj_name='latlong', dx=dx, dy=dy, x_bnd=x_bnd, y_bnd=y_bnd, ctr_lon=ctr_lon, ctr_lat=ctr_lat, outpath=outpath, output_writer=write_cf_netcdf_latlon, output_filename_prefix=center_ID, spatial_scale_factor=1.0) # Create plots n_cols = 2 mapping = { 'source': 'lma_source', 'flash_extent': 'flash_extent', 'flash_init': 'flash_initiation', 'footprint': 'flash_footprint' } #nc_names = glob.glob('/home/ebruning/Mar18-19/grids/*.nc') nc_names = glob.glob(grid_dir + '/20%s/*.nc' % (date.strftime('%y/%b/%d'))) nc_names.sort() outpath = plot_dir + '/20%s' % (date.strftime('%y/%b/%d')) if os.path.exists(outpath) == False: os.makedirs(outpath) subprocess.call([ 'chmod', 'a+w', outpath, plot_dir + '/20%s' % (date.strftime('%y/%b')), plot_dir + '/20%s' % (date.strftime('%y')) ]) for f in nc_names: gridtype = f.split('dx_')[-1].replace('.nc', '') var = mapping[gridtype] # print f make_plot(f, var, n_cols=n_cols, x_name='longitude', y_name='latitude', outpath=outpath)
further processing. This is useful if one wishes to add additional data to the plot, e.g., an GPS track. Be careful to use the correct map projection information from the NetCDF file when plotting new data. It also demonstrates how to change the backend from the default (non-windowed) backend so that the figure can be worked with interactively. It is necessary to edit the "backend" import line to use a backend that can run on your computer. """ from lmatools.multiples_nc import make_plot f,p,start,fname=make_plot('LMA_20040622_052000_600_10src_flash_extent.nc', 'flash_extent', n_cols=1, do_save=False) # Plot some other stuff here, using # ax = p.multiples.flat[frame_sequence_id] # ax.plot(...) # etc. # ---EDIT ME --- Import a backend that can run on your computer from matplotlib.backends.backend_macosx import FigureManagerMac, FigureCanvasMac # Replace the existing canvas with one that matches the backend canvas = FigureCanvasMac(f) f.set_canvas(canvas) # Tell the OS to make a window fm = FigureManagerMac(canvas, 1)