2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cells": [
|
2016-04-20 19:05:36 -05:00
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {
|
|
|
|
"collapsed": true
|
|
|
|
},
|
|
|
|
"source": [
|
|
|
|
"# NEXRAD Level 3 Plot with Matplotlib"
|
|
|
|
]
|
|
|
|
},
|
2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-04-20 19:05:36 -05:00
|
|
|
"execution_count": 5,
|
2016-03-15 20:27:25 -05:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2016-04-20 19:05:36 -05:00
|
|
|
"using time 2016-04-11 23:02:22\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"buffer by 60\n",
|
2016-04-20 19:05:36 -05:00
|
|
|
"using range (Apr 11 16 23:01:22 , Apr 11 16 23:03:22 )\n",
|
|
|
|
"found 94 2016-04-11 23:02:22\n",
|
|
|
|
"found 99 2016-04-11 23:02:22\n"
|
2016-03-15 20:27:25 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
2016-04-20 19:05:36 -05:00
|
|
|
"image/png": "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\nmE7fmCKOCI4ZACDNIhw
|
2016-03-15 20:27:25 -05:00
|
|
|
"text/plain": [
|
2016-04-20 19:05:36 -05:00
|
|
|
"<matplotlib.figure.Figure at 0x7f076b37d650>"
|
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",
|
|
|
|
"\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",
|
|
|
|
"\n",
|
|
|
|
"from datetime import datetime\n",
|
|
|
|
"from datetime import timedelta\n",
|
|
|
|
"\n",
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"import numpy as np\n",
|
|
|
|
"from numpy import ma\n",
|
|
|
|
"\n",
|
|
|
|
"# use metpy for color table\n",
|
|
|
|
"from metpy.plots import ctables\n",
|
|
|
|
"\n",
|
|
|
|
"# Set EDEX server and radar site\n",
|
2016-04-20 19:05:36 -05:00
|
|
|
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"request = DataAccessLayer.newDataRequest()\n",
|
|
|
|
"request.setDatatype(\"radar\")\n",
|
2016-04-20 19:05:36 -05:00
|
|
|
"request.setLocationNames(\"klzk\")\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\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\",buffer\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",
|
|
|
|
"\n",
|
|
|
|
"plt.show()"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"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",
|
|
|
|
"version": "2.7.9"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 0
|
|
|
|
}
|