2016-03-15 20:27:25 -05:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2016-03-16 16:32:17 -05:00
|
|
|
"execution_count": 22,
|
2016-03-15 20:27:25 -05:00
|
|
|
"metadata": {
|
|
|
|
"collapsed": false
|
|
|
|
},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2016-03-16 16:32:17 -05:00
|
|
|
"using time 2016-03-16 19:16:03\n",
|
2016-03-15 20:27:25 -05:00
|
|
|
"buffer by 60\n",
|
2016-03-16 16:32:17 -05:00
|
|
|
"using range (Mar 16 16 19:15:03 , Mar 16 16 19:17:03 )\n",
|
|
|
|
"found 94 2016-03-16 19:16:03\n",
|
|
|
|
"found 99 2016-03-16 19:16:03\n"
|
2016-03-15 20:27:25 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
2016-03-16 16:32:17 -05:00
|
|
|
"image/png": "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\nSIxRn19mx+ephU7pgfR
|
2016-03-15 20:27:25 -05:00
|
|
|
"text/plain": [
|
2016-03-16 16:32:17 -05:00
|
|
|
"<matplotlib.figure.Figure at 0x7fd244384d90>"
|
2016-03-15 20:27:25 -05:00
|
|
|
]
|
|
|
|
},
|
|
|
|
"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
|
|
|
|
}
|