2016-03-15 17:03:09 -05:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"# NEXRAD Level 3 Plot with MetPy"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-15 20:27:25 -05:00
|
|
|
"execution_count": 200,
|
2016-03-15 17:03:09 -05:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"using time 2016-03-15 20:21:13\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"buffer by 60 sec\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"using range (Mar 15 16 20:20:13 , Mar 15 16 20:22:13 )\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"2016-03-15 20:21:13\n",
|
|
|
|
"2016-03-15 20:21:13\n"
|
2016-03-15 17:03:09 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "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\nOnJKqa8H8BcB3Gqt/75
|
|
|
|
"text/plain": [
|
2016-03-15 20:27:25 -05:00
|
|
|
"<matplotlib.figure.Figure at 0x7f39713aa950>"
|
2016-03-15 17:03:09 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
"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",
|
2016-03-15 20:27:25 -05:00
|
|
|
"\n",
|
|
|
|
"EDEX_SERVER = \"edex-cloud.unidata.ucar.edu\"\n",
|
|
|
|
"SITE = \"kftg\"\n",
|
|
|
|
"\n",
|
|
|
|
"DataAccessLayer.changeEDEXHost(EDEX_SERVER)\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"request = DataAccessLayer.newDataRequest()\n",
|
|
|
|
"request.setDatatype(\"radar\")\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"request.setLocationNames(SITE)\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"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",
|
2016-03-15 20:27:25 -05:00
|
|
|
"print \"buffer by\",slop,\"sec\"\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"print \"using range\",timerange\n",
|
|
|
|
"\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"client = ThriftClient.ThriftClient(EDEX_SERVER)\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"request = GetRadarDataRecordRequest()\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"request.setRadarId(SITE)\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"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",
|
2016-03-15 20:27:25 -05:00
|
|
|
" print record.getDataTime()\n",
|
2016-03-15 17:03:09 -05:00
|
|
|
"\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
|
|
|
|
}
|