python-awips/examples/NEXRAD_Level_3_Plot_with_MetPy.ipynb

162 lines
72 KiB
Text
Raw Normal View History

2016-03-15 17:03:09 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# NEXRAD Level 3 Plot with MetPy"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"using time 2016-03-15 20:21:13\n",
"buffer by 60\n",
"using range (Mar 15 16 20:20:13 , Mar 15 16 20:22:13 )\n",
"found 94 2016-03-15 20:21:13\n",
"found 99 2016-03-15 20:21:13\n"
]
},
{
"data": {
"image/png": "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\nOnJKqa8H8BcB3Gqt/75
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3970c8d650>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from datetime import datetime\n",
"from datetime import timedelta\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from numpy import ma\n",
"\n",
"from awips.dataaccess import DataAccessLayer\n",
"from awips import ThriftClient, RadarCommon\n",
"\n",
"from dynamicserialize.dstypes.com.raytheon.uf.common.time import TimeRange\n",
"from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.level import Level\n",
"from dynamicserialize.dstypes.com.raytheon.uf.common.dataplugin.radar.request import GetRadarDataRecordRequest\n",
"\n",
"from metpy.cbook import get_test_data\n",
"from metpy.io.nexrad import Level3File\n",
"from metpy.plots import ctables\n",
"\n",
"# Set EDEX server and radar site\n",
"edex = \"edex-cloud.unidata.ucar.edu\"\n",
"site = \"kftg\"\n",
"DataAccessLayer.changeEDEXHost(edex)\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"radar\")\n",
"request.setLocationNames(site)\n",
"datatimes = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"# Get last available time\n",
"timerange = datatimes[-1].validPeriod\n",
"dateTimeStr = str(datatimes[-1])\n",
"\n",
"# Buffer length in seconds\n",
"buffer = 60\n",
"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",
"print \"using time\",dateTimeStr\n",
"print \"buffer by\",slop\n",
"print \"using range\",timerange\n",
"\n",
"client = ThriftClient.ThriftClient(edex)\n",
"request = GetRadarDataRecordRequest()\n",
"request.setRadarId(site)\n",
"request.setPrimaryElevationAngle(\"0.5\")\n",
"request.setTimeRange(timerange)\n",
"\n",
"fig, axes = plt.subplots(1, 2, figsize=(15, 8))\n",
"for v, ctable, ax in zip((94, 99), ('NWSReflectivity', 'NWSVelocity'), axes):\n",
" request.setProductCode(v)\n",
" response = client.sendRequest(request)\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",
" yLen,xLen = rdat.getSizes()\n",
" array = rdat.getByteData()\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",
" \n",
" print \"found\",v,record.getDataTime()\n",
"\n",
" header = RadarCommon.get_header(record, format, xLen, yLen, azdat, \"description\")\n",
" rng = np.linspace(0, xLen, xLen + 1)\n",
" xlocs = rng * np.sin(np.deg2rad(az[:, np.newaxis]))\n",
" ylocs = rng * np.cos(np.deg2rad(az[:, np.newaxis]))\n",
" multiArray = np.reshape(array, (-1, xLen))\n",
" data = ma.array(multiArray)\n",
" data[data==0] = ma.masked\n",
"\n",
" # Plot the data\n",
" norm, cmap = ctables.registry.get_with_steps(ctable, 16, 16)\n",
" ax.pcolormesh(xlocs, ylocs, data, norm=norm, cmap=cmap)\n",
" ax.set_aspect('equal', 'datalim')\n",
" \n",
" multp = 100*(2*xLen/460)\n",
" ax.set_xlim(-multp,multp)\n",
" ax.set_ylim(-multp,multp)\n",
" # This is setting x/ylim on gate/pixel and not km\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"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",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}