mirror of
https://github.com/Unidata/python-awips.git
synced 2025-02-24 06:57:56 -05:00
332 lines
128 KiB
Text
332 lines
128 KiB
Text
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Radar access with python-awips"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 25,
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"record.getDataTime() = 2016-03-15 16:48:22\n",
|
||
|
"record.getLongitude() = -104.546\n",
|
||
|
"record.getLatitude() = 39.786\n",
|
||
|
"record.getElevation() = 5610.0\n",
|
||
|
"record.getElevationNumber() = 1\n",
|
||
|
"record.getTrueElevationAngle() = 0.5\n",
|
||
|
"record.getVolumeCoveragePattern() = 32\n",
|
||
|
"(360,)\n",
|
||
|
"(1201,)\n",
|
||
|
"[ 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241.\n",
|
||
|
" 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253.\n",
|
||
|
" 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265.\n",
|
||
|
" 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277.\n",
|
||
|
" 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289.\n",
|
||
|
" 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301.\n",
|
||
|
" 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313.\n",
|
||
|
" 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325.\n",
|
||
|
" 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337.\n",
|
||
|
" 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349.\n",
|
||
|
" 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 0. 1.\n",
|
||
|
" 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.\n",
|
||
|
" 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.\n",
|
||
|
" 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.\n",
|
||
|
" 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.\n",
|
||
|
" 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.\n",
|
||
|
" 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73.\n",
|
||
|
" 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.\n",
|
||
|
" 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97.\n",
|
||
|
" 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109.\n",
|
||
|
" 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121.\n",
|
||
|
" 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133.\n",
|
||
|
" 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145.\n",
|
||
|
" 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157.\n",
|
||
|
" 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169.\n",
|
||
|
" 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181.\n",
|
||
|
" 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193.\n",
|
||
|
" 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205.\n",
|
||
|
" 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217.\n",
|
||
|
" 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229.]\n",
|
||
|
"[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.\n",
|
||
|
" 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.\n",
|
||
|
" 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.\n",
|
||
|
" 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.\n",
|
||
|
" 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.\n",
|
||
|
" 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.\n",
|
||
|
" 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83.\n",
|
||
|
" 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95.\n",
|
||
|
" 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107.\n",
|
||
|
" 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119.\n",
|
||
|
" 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131.\n",
|
||
|
" 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143.\n",
|
||
|
" 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155.\n",
|
||
|
" 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167.\n",
|
||
|
" 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179.\n",
|
||
|
" 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191.\n",
|
||
|
" 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203.\n",
|
||
|
" 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215.\n",
|
||
|
" 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227.\n",
|
||
|
" 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239.\n",
|
||
|
" 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251.\n",
|
||
|
" 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263.\n",
|
||
|
" 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275.\n",
|
||
|
" 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287.\n",
|
||
|
" 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299.\n",
|
||
|
" 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311.\n",
|
||
|
" 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323.\n",
|
||
|
" 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335.\n",
|
||
|
" 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347.\n",
|
||
|
" 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359.\n",
|
||
|
" 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371.\n",
|
||
|
" 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383.\n",
|
||
|
" 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395.\n",
|
||
|
" 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407.\n",
|
||
|
" 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419.\n",
|
||
|
" 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431.\n",
|
||
|
" 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443.\n",
|
||
|
" 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455.\n",
|
||
|
" 456. 457. 458. 459. 460.]\n",
|
||
|
"200.0\n",
|
||
|
"radar_common.get_data_type(azdat) = radial\n",
|
||
|
"xLen = 460\n",
|
||
|
"yLen = 360\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"from datetime import datetime\n",
|
||
|
"from datetime import timedelta\n",
|
||
|
"\n",
|
||
|
"from awips.dataaccess import DataAccessLayer\n",
|
||
|
"from awips import ThriftClient\n",
|
||
|
"import radar_common\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",
|
||
|
"import numpy as np\n",
|
||
|
"\n",
|
||
|
" \n",
|
||
|
"def encode_data(yLen, xLen, array):\n",
|
||
|
" nxy = yLen*xLen\n",
|
||
|
" j = 0\n",
|
||
|
" msg = \"\"\n",
|
||
|
" while j<nxy :\n",
|
||
|
" i = 0\n",
|
||
|
" while i<xLen :\n",
|
||
|
" if array[i+j]<0 :\n",
|
||
|
" msg += str(256+array[i+j]) + \" \"\n",
|
||
|
" else :\n",
|
||
|
" msg += str(array[i+j]) + \" \"\n",
|
||
|
" i += 1\n",
|
||
|
" msg += \"\\n\"\n",
|
||
|
" j += xLen\n",
|
||
|
" return msg[0:-1]\n",
|
||
|
"\n",
|
||
|
"\n",
|
||
|
"# EDEXIngest /data_store/radar/FTG/DHR/SDUS55_FTG_DHR_151639_426761196.rad \n",
|
||
|
"dateTimeStr = \"2016-03-15 16:48\"\n",
|
||
|
"slop = 300\n",
|
||
|
"client = ThriftClient.ThriftClient(\"edex-cloud.unidata.ucar.edu\")\n",
|
||
|
"dateTime = datetime.strptime(dateTimeStr, \"%Y-%m-%d %H:%M\")\n",
|
||
|
"beginRange = dateTime - timedelta(0, slop)\n",
|
||
|
"endRange = dateTime + timedelta(0, slop)\n",
|
||
|
"timerange = TimeRange(beginRange, endRange)\n",
|
||
|
"#print \"Requesting \", beginRange, \"to\", endRange\n",
|
||
|
"\n",
|
||
|
"# Perform a GetRadarHDF5Request\n",
|
||
|
"request = GetRadarDataRecordRequest()\n",
|
||
|
"# must be lower case here\n",
|
||
|
"request.setRadarId(\"kftg\")\n",
|
||
|
"request.setPrimaryElevationAngle(\"0.5\")\n",
|
||
|
"request.setProductCode(94)\n",
|
||
|
"request.setTimeRange(timerange)\n",
|
||
|
"response = client.sendRequest(request)\n",
|
||
|
"\n",
|
||
|
"if response.getData():\n",
|
||
|
" for record in response.getData():\n",
|
||
|
" idra = record.getHdf5Data()\n",
|
||
|
" rdat,azdat,depVals,threshVals = radar_common.get_hdf5_data(idra)\n",
|
||
|
"\n",
|
||
|
" dim = rdat.getDimension()\n",
|
||
|
" yLen = rdat.getSizes()[0]\n",
|
||
|
" xLen = rdat.getSizes()[1]\n",
|
||
|
" # byte[] -- the raw data\n",
|
||
|
" array = rdat.getByteData()\n",
|
||
|
" arraySize = len(array)\n",
|
||
|
" # get data for azimuth angles if we have them.\n",
|
||
|
" if azdat :\n",
|
||
|
" azVals = azdat.getFloatData()\n",
|
||
|
" azValsLen = len(azVals)\n",
|
||
|
" #msg = radar_common.get_header(record, format, xLen, yLen, azdat, \"description\")\n",
|
||
|
" header = radar_common.get_header(record, format, xLen, yLen, azdat, \"description\")\n",
|
||
|
" print \"record.getDataTime() =\",record.getDataTime()\n",
|
||
|
" print \"record.getLongitude() =\",record.getLongitude()\n",
|
||
|
" print \"record.getLatitude() =\",record.getLatitude()\n",
|
||
|
" print \"record.getElevation() =\",record.getElevation()\n",
|
||
|
" print \"record.getElevationNumber() =\",record.getElevationNumber()\n",
|
||
|
" print \"record.getTrueElevationAngle() =\",record.getTrueElevationAngle()\n",
|
||
|
" print \"record.getVolumeCoveragePattern() =\",record.getVolumeCoveragePattern()\n",
|
||
|
" dattyp = radar_common.get_data_type(azdat)\n",
|
||
|
" radialArray = np.array(radar_common.encode_radial(azVals))\n",
|
||
|
" print radialArray.shape\n",
|
||
|
" print rng.shape\n",
|
||
|
" print radialArray\n",
|
||
|
" rng = np.linspace(0, xLen, xLen + 1)\n",
|
||
|
" print rng\n",
|
||
|
" print rng[200]\n",
|
||
|
" #print radar_common.encode_dep_vals(depVals)\n",
|
||
|
" #print radar_common.encode_thresh_vals(threshVals)\n",
|
||
|
" print \"radar_common.get_data_type(azdat) =\", dattyp\n",
|
||
|
" print \"xLen =\",xLen\n",
|
||
|
" print \"yLen =\", yLen\n",
|
||
|
" #print header\n",
|
||
|
"\n",
|
||
|
" #msg += radar_common.encode_thresh_vals(threshVals)\n",
|
||
|
" #msg += radar_common.encode_dep_vals(depVals)\n",
|
||
|
" #if azdat :\n",
|
||
|
" # msg += radar_common.encode_radial(azVals)\n",
|
||
|
" #msg += encode_data(yLen, xLen, radialArray)\n",
|
||
|
" #print msg\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 24,
|
||
|
"metadata": {
|
||
|
"collapsed": false
|
||
|
},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"max range 460.0\n",
|
||
|
"(361,)\n",
|
||
|
"(461,)\n",
|
||
|
"max range 300.0\n",
|
||
|
"(361,)\n",
|
||
|
"(1201,)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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\n87VwPV3Xai+0sjSULHd
|
||
|
"text/plain": [
|
||
|
"<matplotlib.figure.Figure at 0x7f39713d4450>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"import numpy as np\n",
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"from numpy import ma\n",
|
||
|
"\n",
|
||
|
"from metpy.cbook import get_test_data\n",
|
||
|
"from metpy.io.nexrad import Level3File\n",
|
||
|
"from metpy.plots import ctables\n",
|
||
|
"\n",
|
||
|
"%matplotlib inline\n",
|
||
|
"\n",
|
||
|
"fig, axes = plt.subplots(1, 2, figsize=(15, 8))\n",
|
||
|
"for v, ctable, ax in zip(('N0Q', 'N0U'), ('NWSReflectivity', 'NWSVelocity'), axes):\n",
|
||
|
" # Open the file\n",
|
||
|
" name = get_test_data('nids/KOUN_SDUS54_%sTLX_201305202016' % v, as_file_obj=False)\n",
|
||
|
" f = Level3File(name)\n",
|
||
|
"\n",
|
||
|
" # Pull the data out of the file object\n",
|
||
|
" datadict = f.sym_block[0][0]\n",
|
||
|
"\n",
|
||
|
" # Turn into an array, then mask\n",
|
||
|
" data = ma.array(datadict['data'])\n",
|
||
|
" data[data==0] = ma.masked\n",
|
||
|
"\n",
|
||
|
" # Grab azimuths and calculate a range based on number of gates\n",
|
||
|
" #print datadict['start_az']\n",
|
||
|
" #print datadict['end_az']\n",
|
||
|
" az = np.array(datadict['start_az'] + [datadict['end_az'][-1]])\n",
|
||
|
" rng = np.linspace(0, f.max_range, data.shape[-1] + 1)\n",
|
||
|
" #print v, data.shape\n",
|
||
|
" print \"max range\", f.max_range\n",
|
||
|
" print az.shape\n",
|
||
|
" print rng.shape\n",
|
||
|
" # Convert az,range to x,y\n",
|
||
|
" xlocs = rng * np.sin(np.deg2rad(az[:, np.newaxis]))\n",
|
||
|
" ylocs = rng * np.cos(np.deg2rad(az[:, np.newaxis]))\n",
|
||
|
" \n",
|
||
|
" \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",
|
||
|
" ax.set_xlim(-40, 20)\n",
|
||
|
" ax.set_ylim(-30, 30)\n",
|
||
|
"\n",
|
||
|
"plt.show()"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
},
|
||
|
{
|
||
|
"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
|
||
|
}
|