python-awips/examples/notebooks/.ipynb_checkpoints/NEXRAD Level 3 Plot with MetPy-checkpoint.ipynb

163 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",
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
}