2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cells": [
|
2017-02-01 23:20:30 -07:00
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"Shown here are plots for Base Reflectivity (N0Q, 94) and Base Velocity (N0U, 99) using AWIPS data rendered with Matplotlib, Cartopy, and MetPy."
|
|
|
|
]
|
|
|
|
},
|
2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2017-02-01 23:20:30 -07:00
|
|
|
"execution_count": 141,
|
2016-03-15 20:27:25 -05:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
2017-02-01 23:20:30 -07:00
|
|
|
"image/png": "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\nezL0sUboY43hHg4RUcg
|
2016-03-15 20:27:25 -05:00
|
|
|
"text/plain": [
|
2017-02-01 23:20:30 -07:00
|
|
|
"<matplotlib.figure.Figure at 0x1147a6e90>"
|
2016-03-15 20:27:25 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
2016-04-20 19:05:36 -05:00
|
|
|
"%matplotlib inline\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"from awips.dataaccess import DataAccessLayer\n",
|
|
|
|
"from awips import ThriftClient, RadarCommon\n",
|
|
|
|
"from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange\n",
|
|
|
|
"from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.radar.request import GetRadarDataRecordRequest\n",
|
|
|
|
"from datetime import datetime\n",
|
|
|
|
"from datetime import timedelta\n",
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"import numpy as np\n",
|
|
|
|
"from numpy import ma\n",
|
|
|
|
"from metpy.plots import ctables\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"import cartopy.crs as ccrs\n",
|
|
|
|
"import cartopy.io.shapereader as shpreader\n",
|
|
|
|
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
|
|
|
|
"from pyproj import Geod\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"# set EDEX server and radar site definitions\n",
|
|
|
|
"edex = \"edex-cloud.unidata.ucar.edu\"\n",
|
|
|
|
"site = \"kmux\"\n",
|
|
|
|
"DataAccessLayer.changeEDEXHost(edex)\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"request = DataAccessLayer.newDataRequest()\n",
|
|
|
|
"request.setDatatype(\"radar\")\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"request.setLocationNames(site)\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"# Get latest available time for site\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
|
|
|
|
"timerange = datatimes[-1].validPeriod\n",
|
|
|
|
"dateTimeStr = str(datatimes[-1])\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"buffer = 60 # seconds\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"dateTime = datetime.strptime(dateTimeStr, \"%Y-%m-%d %H:%M:%S\")\n",
|
|
|
|
"beginRange = dateTime - timedelta(0, buffer)\n",
|
|
|
|
"endRange = dateTime + timedelta(0, buffer)\n",
|
|
|
|
"timerange = TimeRange(beginRange, endRange)\n",
|
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"# Make request\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"client = ThriftClient.ThriftClient(edex)\n",
|
|
|
|
"request = GetRadarDataRecordRequest()\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"request.setTimeRange(timerange)\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"request.setRadarId(site)\n",
|
|
|
|
"request.setPrimaryElevationAngle(\"0.5\")\n",
|
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"# Define map config here\n",
|
|
|
|
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
|
|
|
|
" fig, ax = plt.subplots(figsize=(12, 12),\n",
|
|
|
|
" subplot_kw=dict(projection=projection))\n",
|
|
|
|
" ax.set_extent(bbox)\n",
|
|
|
|
" ax.coastlines(resolution='50m')\n",
|
|
|
|
" gl = ax.gridlines(draw_labels=True)\n",
|
|
|
|
" gl.xlabels_top = gl.ylabels_right = False\n",
|
|
|
|
" gl.xformatter = LONGITUDE_FORMATTER\n",
|
|
|
|
" gl.yformatter = LATITUDE_FORMATTER\n",
|
|
|
|
" return fig, ax\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"# N0Q Reflectivity \n",
|
|
|
|
"v = 94\n",
|
|
|
|
"ctable = 'NWSStormClearReflectivity'\n",
|
|
|
|
"rangeRes = 1000 # km\n",
|
|
|
|
"request.setProductCode(v)\n",
|
|
|
|
"response = client.sendRequest(request)\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
"if response.getData():\n",
|
|
|
|
" for record in response.getData():\n",
|
|
|
|
" idra = record.getHdf5Data()\n",
|
|
|
|
" rdat,azdat,depVals,threshVals = RadarCommon.get_hdf5_data(idra)\n",
|
|
|
|
" dim = rdat.getDimension()\n",
|
|
|
|
" radials,rangeGates = rdat.getSizes()\n",
|
|
|
|
" dbzValues=np.array(rdat.getByteData())\n",
|
|
|
|
" # \n",
|
|
|
|
" array = []\n",
|
|
|
|
" for rec in dbzValues:\n",
|
|
|
|
" if rec<0:\n",
|
|
|
|
" rec+=256\n",
|
|
|
|
" array.append(rec) \n",
|
|
|
|
" lat,lon = record.getLatitude(),record.getLongitude()\n",
|
|
|
|
" if azdat :\n",
|
|
|
|
" azVals = azdat.getFloatData()\n",
|
|
|
|
" az = np.array(RadarCommon.encode_radial(azVals))\n",
|
|
|
|
" dattyp = RadarCommon.get_data_type(azdat)\n",
|
|
|
|
" az = np.append(az,az[-1])\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
" header = RadarCommon.get_header(record, format, rangeGates, radials, azdat, \"description\")\n",
|
|
|
|
" rng = np.linspace(0, rangeGates, rangeGates + 1)\n",
|
|
|
|
" \n",
|
|
|
|
" # Convert az, range to a lat/lon\n",
|
|
|
|
" g = Geod(ellps='clrk66')\n",
|
|
|
|
" center_lat = np.ones([len(az),len(rng)])*float(lat) \n",
|
|
|
|
" center_lon = np.ones([len(az),len(rng)])*float(lon)\n",
|
|
|
|
" az2D = np.ones_like(center_lat)*az[:,None]\n",
|
|
|
|
" rng2D = np.ones_like(center_lat)*np.transpose(rng[:,None])*rangeRes\n",
|
|
|
|
" llon,llat,back=g.fwd(center_lon,center_lat,az2D,rng2D)\n",
|
|
|
|
" bbox = [llon.min(), llon.max(), llat.min(), llat.max()]\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
2017-02-01 23:20:30 -07:00
|
|
|
" multiArray = np.reshape(array, (-1, rangeGates))\n",
|
|
|
|
" data = ma.array(multiArray)\n",
|
|
|
|
" data = (data/2)-32.5\n",
|
|
|
|
" data[data<=0] = ma.masked\n",
|
|
|
|
"\n",
|
|
|
|
" fig, ax = make_map(bbox=bbox)\n",
|
|
|
|
" norm, cmap = ctables.registry.get_with_steps(ctable, -40, 0.5)\n",
|
|
|
|
" cs = ax.pcolormesh(llon, llat, data, norm=norm, cmap=cmap)\n",
|
|
|
|
" ax.set_aspect('equal', 'datalim')\n",
|
|
|
|
" cbar = plt.colorbar(cs, extend='both', shrink=0.75, orientation='horizontal')\n",
|
|
|
|
" cbar.set_label(site + \" (\" + ctable + \") \" + str(record.getDataTime()))\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"plt.show()"
|
|
|
|
]
|
|
|
|
},
|
2017-02-01 23:20:30 -07:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 146,
|
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "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\naZO9xrykadr/NkaMguB
|
|
|
|
"text/plain": [
|
|
|
|
"<matplotlib.figure.Figure at 0x10b3de390>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"v = 99\n",
|
|
|
|
"ctable = 'NWS8bitVel'\n",
|
|
|
|
"rangeRes=250\n",
|
|
|
|
"request.setProductCode(v)\n",
|
|
|
|
"response = client.sendRequest(request)\n",
|
|
|
|
"\n",
|
|
|
|
"if response.getData():\n",
|
|
|
|
" for record in response.getData():\n",
|
|
|
|
" idra = record.getHdf5Data()\n",
|
|
|
|
" rdat,azdat,depVals,threshVals = RadarCommon.get_hdf5_data(idra)\n",
|
|
|
|
" dim = rdat.getDimension()\n",
|
|
|
|
" radials,rangeGates = rdat.getSizes()\n",
|
|
|
|
" dValues=np.array(rdat.getByteData())\n",
|
|
|
|
" # Need to convert byte data (-127 to 128) \n",
|
|
|
|
" array = []\n",
|
|
|
|
" for rec in dValues:\n",
|
|
|
|
" if rec<0:\n",
|
|
|
|
" rec+=256\n",
|
|
|
|
" array.append(rec) \n",
|
|
|
|
" lat,lon = record.getLatitude(),record.getLongitude()\n",
|
|
|
|
" \n",
|
|
|
|
" # get data for azimuth angles if we have them.\n",
|
|
|
|
" if azdat :\n",
|
|
|
|
" azVals = azdat.getFloatData()\n",
|
|
|
|
" az = np.array(RadarCommon.encode_radial(azVals))\n",
|
|
|
|
" dattyp = RadarCommon.get_data_type(azdat)\n",
|
|
|
|
" az = np.append(az,az[-1])\n",
|
|
|
|
" header = RadarCommon.get_header(record, format, rangeGates, radials, azdat, \"description\")\n",
|
|
|
|
" rng = np.linspace(0, rangeGates, rangeGates + 1)\n",
|
|
|
|
"\n",
|
|
|
|
" # Convert az, range to a lat/lon\n",
|
|
|
|
" g = Geod(ellps='clrk66')\n",
|
|
|
|
" center_lat = np.ones([len(az),len(rng)])*float(lat) \n",
|
|
|
|
" center_lon = np.ones([len(az),len(rng)])*float(lon)\n",
|
|
|
|
" az2D = np.ones_like(center_lat)*az[:,None]\n",
|
|
|
|
" rng2D = np.ones_like(center_lat)*np.transpose(rng[:,None])*rangeRes\n",
|
|
|
|
" llon,llat,back=g.fwd(center_lon,center_lat,az2D,rng2D)\n",
|
|
|
|
" bbox = [llon.min(), llon.max(), llat.min(), llat.max()]\n",
|
|
|
|
" multiArray = np.reshape(array, (-1, rangeGates))\n",
|
|
|
|
" \n",
|
|
|
|
" # threshVals[0:2] contains halfwords 31,32,33:\n",
|
|
|
|
" # page 3-34: https://www.roc.noaa.gov/wsr88d/PublicDocs/ICDS/2620001U.pdf\n",
|
|
|
|
" # - halfword 31 contains the minimum data value in m/s*10\n",
|
|
|
|
" # - halfword 32 contains the increment in m/s*10\n",
|
|
|
|
" # - halfword 33 contains the number of levels (0 - 255)\n",
|
|
|
|
" multiArray[multiArray==0] = ma.masked\n",
|
|
|
|
" data = ma.array(threshVals[0]/10. + (multiArray)*threshVals[1]/10.)\n",
|
|
|
|
" data[data<-63] = ma.masked\n",
|
|
|
|
" data *= 1.94384 # Convert to knots\n",
|
|
|
|
"\n",
|
|
|
|
" fig, ax = make_map(bbox=bbox)\n",
|
|
|
|
" norm, cmap = ctables.registry.get_with_steps(ctable, -100,1)\n",
|
|
|
|
" cs = ax.pcolormesh(llon, llat, data, norm=norm, cmap=cmap)\n",
|
|
|
|
" ax.set_aspect('equal', 'datalim')\n",
|
|
|
|
" cbar = plt.colorbar(cs, extend='both', shrink=0.75, orientation='horizontal')\n",
|
|
|
|
" cbar.set_label(site + \" (\" + ctable + \") \" + str(record.getDataTime()))\n",
|
|
|
|
"\n",
|
|
|
|
"plt.show()"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"verified against AWIPS CAVE rendering\n",
|
|
|
|
"\n",
|
|
|
|
""
|
|
|
|
]
|
|
|
|
},
|
2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": null,
|
|
|
|
"metadata": {
|
|
|
|
"collapsed": true
|
|
|
|
},
|
|
|
|
"outputs": [],
|
2016-04-20 19:05:36 -05:00
|
|
|
"source": []
|
2016-03-15 20:27:25 -05:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"metadata": {
|
|
|
|
"kernelspec": {
|
|
|
|
"display_name": "Python 2",
|
|
|
|
"language": "python",
|
|
|
|
"name": "python2"
|
|
|
|
},
|
|
|
|
"language_info": {
|
|
|
|
"codemirror_mode": {
|
|
|
|
"name": "ipython",
|
|
|
|
"version": 2
|
|
|
|
},
|
|
|
|
"file_extension": ".py",
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
"name": "python",
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
"pygments_lexer": "ipython2",
|
2017-02-01 23:20:30 -07:00
|
|
|
"version": "2.7.11"
|
2016-03-15 20:27:25 -05:00
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 0
|
|
|
|
}
|