In [3]:
from boto.s3.connection import S3Connection
import pyart
import gzip
from matplotlib import pyplot as plt
import shutil, os
from datetime import timedelta, datetime
import numpy as np
import tempfile
%matplotlib inline
In [1]:
def nearestDate(dates, pivot):
return min(dates, key=lambda x: abs(x - pivot))
def get_radar_from_aws(site, datetime_t):
"""
Get the closest volume of NEXRAD data to a particular datetime.
Parameters
----------
site : string
four letter radar designation
datetime_t : datetime
desired date time
"""
#First create the query string for the bucket knowing
#how NOAA and AWS store the data
my_pref = datetime_t.strftime('%Y/%m/%d/') + site
#Connect to the bucket
conn = S3Connection(anon = True)
bucket = conn.get_bucket('noaa-nexrad-level2')
#Get a list of files
bucket_list = list(bucket.list(prefix = my_pref))
#print(bucket_list)
#we are going to create a list of keys and datetimes to allow easy searching
keys = []
datetimes = []
#populate the list
for i in range(len(bucket_list)):
this_str = str(bucket_list[i].key)
if 'gz' in this_str:
endme = this_str[-22:-3]
fmt = '%Y%m%d_%H%M%S_V06'
dt = datetime.strptime(endme, fmt)
datetimes.append(dt)
keys.append(bucket_list[i])
#print(dt)
if this_str[-3::] == 'V06': #'LSX20160707_000150_' does not match format '%Y%m%d_%H%M%S_V06'
#print(this_str)
#print(this_str[-19::])
endme = this_str[-19::]
fmt = '%Y%m%d_%H%M%S_V06'
dt = datetime.strptime(endme, fmt)
datetimes.append(dt)
keys.append(bucket_list[i])
#function to allow easy searching
def func(x):
delta = x - datetime_t if x > datetime_t else timedelta.max
return delta
#find the closest available radar to your datetime
closest_datetime = nearestDate(datetimes, datetime_t)
index = datetimes.index(closest_datetime)
#print(closest_datetime)
#create a temp file, download radar data to file from S3
#read into a radar object and return
localfile = tempfile.NamedTemporaryFile()
keys[index].get_contents_to_filename(localfile.name)
radar = pyart.io.read(localfile.name)
return radar
In [34]:
b_d = datetime.utcnow() #datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KLSX',b_d )
max_lat = 42
min_lat = 36
min_lon = -95
max_lon = -89
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [36]:
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('differential_reflectivity', sweep = 0, resolution = 'i',
vmin = -0.1, vmax = 4, mask_outside = False,
cmap = pyart.graph.cm.LangRainbow12,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [37]:
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('velocity', sweep = 1, resolution = 'i',
vmin = -18, vmax = 18, mask_outside = False,
cmap = pyart.graph.cm.BlueBrown10,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [83]:
b_d = datetime.utcnow() #datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KICT',b_d )
max_lat = 39.8
min_lat = 36.5
min_lon = -100
max_lon = -95.5
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [81]:
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('velocity', sweep = 1, resolution = 'i',
vmin = -18, vmax = 18, mask_outside = False,
cmap = pyart.graph.cm.BlueBrown11,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [82]:
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('differential_reflectivity', sweep = 0, resolution = 'i',
vmin = -1, vmax = 6, mask_outside = False,
cmap = pyart.graph.cm.LangRainbow12,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [12]:
#Look at some special cases.
base_date = "20110520_100000"
fmt = '%Y%m%d_%H%M%S'
b_d = datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KVNX',b_d )
min_lat = 35
max_lat = 38.5
min_lon = -100
max_lon = -96.5
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [4]:
base_date = "20150630_093000"
fmt = '%Y%m%d_%H%M%S'
b_d = datetime.utcnow() # datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KLOT',b_d )
max_lat = 42.5
min_lat = 40
min_lon = -88.5
max_lon = -86
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [88]:
base_date = "20160525_195000"
fmt = '%Y%m%d_%H%M%S'
b_d = datetime.utcnow()#datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KFTG',b_d )
max_lat = 41
min_lat = 39
min_lon = -106
max_lon = -104
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
display.basemap.drawcounties()
display.plot_point( -105.2455834,40.0308768,
label_text = 'NCAR CG', label_offset = (0.0,0.0) )
In [77]:
b_d = datetime.utcnow() #datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KGLD',b_d )
max_lat = 42
min_lat = 39
min_lon = -104
max_lon = -101
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [79]:
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('velocity', sweep = 1, resolution = 'i',
vmin = -18, vmax = 18, mask_outside = False,
cmap = pyart.graph.cm.BlueBrown10,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon)
In [9]:
b_d = datetime.utcnow() #datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KAMX',b_d )
max_lat = 27
min_lat = 24
min_lon = -81
max_lon = -77
lal = np.arange(min_lat, max_lat, .5)
lol = np.arange(min_lon, max_lon, .5)
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon,
lat_lines = lal, lon_lines = lol)
In [18]:
nyq = my_radar.instrument_parameters['nyquist_velocity']['data'][1]
print(nyq)
print(my_radar.fields['velocity']['data'].max())
In [25]:
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('velocity', sweep = 1, resolution = 'i',
vmin = -33.01, vmax = 33.01, mask_outside = False,
cmap = pyart.graph.cm.NWSVel,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon,
lat_lines = lal, lon_lines = lol)
In [26]:
gatefilter = pyart.correct.GateFilter(my_radar)
gatefilter.exclude_masked('reflectivity')
corr_vel = pyart.correct.dealias_region_based(
my_radar, vel_field='velocity', keep_original=False,
gatefilter = gatefilter, nyquist_vel=33.01, centered = True)
my_radar.add_field('corrected_velocity', corr_vel, replace_existing = True)
In [27]:
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('corrected_velocity', sweep = 1, resolution = 'i',
vmin = -60, vmax = 60, mask_outside = False,
cmap = pyart.graph.cm.NWSVel,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon,
lat_lines = lal, lon_lines = lol)
In [6]:
base_date = "20161030_143011"
fmt = '%Y%m%d_%H%M%S'
b_d = datetime.strptime(base_date, fmt)
my_radar = get_radar_from_aws('KENX',b_d )
max_lat = 45
min_lat = 41
min_lon = -77
max_lon = -73
lal = np.arange(min_lat, max_lat, .5)
lol = np.arange(min_lon, max_lon, .5)
display = pyart.graph.RadarMapDisplay(my_radar)
fig = plt.figure(figsize = [10,8])
display.plot_ppi_map('reflectivity', sweep = 0, resolution = 'i',
vmin = -8, vmax = 64, mask_outside = False,
cmap = pyart.graph.cm.NWSRef,
min_lat = min_lat, min_lon = min_lon,
max_lat = max_lat, max_lon = max_lon,
lat_lines = lal, lon_lines = lol)
In [ ]: