mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 14:57:57 -05:00
159 lines
57 KiB
Text
159 lines
57 KiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 20,
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"using time 2016-03-15 23:07:04\n",
|
||
|
"buffer by 60\n",
|
||
|
"using range (Mar 15 16 23:06:04 , Mar 15 16 23:08:04 )\n",
|
||
|
"found 94 2016-03-15 23:07:04\n",
|
||
|
"found 99 2016-03-15 23:07:04\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\nEl3MxIZampWpVa9keXh
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x7fd244337390>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"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",
|
||
|
"edex = \"edex-cloud.unidata.ucar.edu\"\n",
|
||
|
"site = \"kftg\"\n",
|
||
|
"\n",
|
||
|
"DataAccessLayer.changeEDEXHost(edex)\n",
|
||
|
"\n",
|
||
|
"request = DataAccessLayer.newDataRequest()\n",
|
||
|
"request.setDatatype(\"radar\")\n",
|
||
|
"request.setLocationNames(site)\n",
|
||
|
"\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": [],
|
||
|
"source": [
|
||
|
"\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"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
|
||
|
}
|