python-awips/examples/notebooks/GOES_Geostationary_Lightning_Mapper.ipynb

165 lines
200 KiB
Text
Raw Normal View History

2018-10-04 17:25:20 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Geostationary Lightning Mapper, or GLM, on board GOESR Series spacecraft, is the first operational lightning mapper flown in geostationary orbit. GLM detects the light emitted by lightning at the tops of clouds day and night and collects information such as the frequency, location and extent of lightning discharges. The instrument measures total lightning, both in-cloud and cloud-to-ground, to aid in forecasting developing severe storms and a wide range of high-impact environmental phenomena including hailstorms, microburst winds, tornadoes, hurricanes, flash floods, snowstorms and fires.\n",
"\n",
"AWIPS GLM point data are available in three formats\n",
"\n",
"* `GLMev` - Events\n",
"* `GLMfl` - Flashes\n",
"* `GLMgr` - Groups\n",
"\n",
"and with seven attributes:\n",
"\n",
"* height\n",
"* intensity\n",
"* msgType\n",
"* pulseCount\n",
"* pulseIndex\n",
"* sensorCount\n",
"* strikeType\n",
"\n",
"\n",
"## GLM Sources and Parameters"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"available sources:\n",
2018-10-05 17:09:43 -06:00
"[b'GLMev', b'GLMfl', b'GLMgr']\n",
2018-10-04 17:25:20 -06:00
"\n",
"available parameters:\n",
"[b'height', b'intensity', b'msgType', b'pulseCount', b'pulseIndex', b'sensorCount', b'strikeType']\n"
]
}
],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import cartopy.crs as ccrs\n",
"import cartopy.feature as cfeat\n",
"import matplotlib.pyplot as plt\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
"import numpy as np\n",
"import datetime\n",
"\n",
"# Create an EDEX data request\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"binlightning\")\n",
"\n",
"# Show available sources\n",
"sources = DataAccessLayer.getIdentifierValues(request, \"source\")\n",
"print(\"available sources:\")\n",
"print(list(sources))\n",
"print(\"\")\n",
"availableParms = DataAccessLayer.getAvailableParameters(request)\n",
"availableParms.sort()\n",
"print(\"available parameters:\")\n",
"print(list(availableParms))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"request.addIdentifier(\"source\", \"GLMev\")\n",
"request.setParameters(\"intensity\")\n",
"times = DataAccessLayer.getAvailableTimes(request)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
2018-10-05 17:09:43 -06:00
"<matplotlib.collections.PathCollection at 0x13229a2e8>"
2018-10-04 17:25:20 -06:00
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2018-10-05 17:09:43 -06:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAygAAAN7CAYAAACu7r6oAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3XlcVPX+P/DXmWEYGPZ9lR1kFQQFUnApc8GlroqVlXbL0rTU7Gp6b2ZaV/12K7tW97b8NLWb5ZaZJqbFJqLIKosCArKD7AwwLLN8fn9wmSvJMsDMnAE+z8fjPB565pzPeR+UmXmfz+fz/jCEEFAURVEURVEURWkCDtsBUBRFURRFURRF9aAJCkVRFEVRFEVRGoMmKBRFURRFURRFaQyaoFAURVEURVEUpTFogkJRFEVRFEVRlMagCQpFURRFURRFURqDJigURVEURVEURWkMmqBQFEVRFEVRFKUxaIJCURRFURRFUZTG0FL0QDMzs3NCoXCBKoOhKIqiKIpim66u7vctLS2vEEI62Y6FosYjhRMUQohPTEwMLzAwUL6vs7MTL7/8Ms6cOQN3d3esWbMGJ0+eREVFBRoaGvCnP/0Jhw8fVkngQ1FRUYGamhpMnjyZ7VDGjNu3b8PExAQ2NjZshzIuxMfHY8aMGWyHoXSEEJw6dQo7duzA66+/js2bN/d5nEwmg1QqxdGjR7Fp0yY0NjZCW1tb6fGkpqbCzc0NRkZGSm97POrq6sL169cRGhoKPp8/orbS09OxYsUKbNu2DS+//DKA7vchfX19ODg4KCNcVlRXV6OwsBAhISHQ0lL4I3lUIIQgPz8fQqEQgYGB4HK5rMZSVFSE+/fvIzAwEDo6Ov0e297ejlWrVkUmJCT4MwyzgBBSpcZQKYoCun9pFdlMTEwKUlJSyIO2bdtGAPS7Pf/884RtXV1dJDo6mnR2drIdypghk8lITEwMkUgkbIcybsTExLAdgkqVl5cTJycncvz48YdeS0pKIg4ODsTGxoZ88MEHZM6cOcTf35+Ul5erJI47d+4ovd3xrLy8nGRkZAz5PLFYTEpLS0lzczO5ffs2sbKyIqdOnSIymYycOHGCLF26lMyePZsAID/88IMKIlef0tJSkpSURGQyGduhqERxcTG5du0aEYvFbIdCamtrSUxMDBEKhQMeJ5VKyTvvvNMlEAjqAQQTBb8r0Y1udFPONqI5KEKhENbW1vK/3759u1fjx44dG0nzSpGfnw8XFxeVPG0dr1paWqCnp8fq0zBqbLGzs8PJkyexcuVKxMbGQiQSAejupf3zn/+Mt956C5988gni4uJQWFiIW7duoaSkROlxWFpaoqamRuntjme2trZobW1FU1PTgMe1tbWhvb0d6enpmD17NoyMjBAaGgpbW1sEBgbi//7v/+Dg4IDQ0FC88847CAsLQ0xMDADghx9+UMetqMyECROgp6eH3NxctkNRCUdHR9jb2yMpKQkSiYTVWMzNzREYGIiUlBTU19f3exyHw8Hu3bt5x48fN9XX14/R1tZercYwKWrcG1GCsnXrVhBCcOTIERBC4OXlpay4lKKlpQUNDQ2juvtfE1VXV/dKTClqpK5fv47g4GAAwLp162Bubo6wsDBs3LgRXC4X69evx4oVK3D+/Hm0tbUBAKZNm6b0OHg8HrS0tOQJEjVyDMPAz88P2dnZIIT0ecyFCxdgbGwMY2NjLFmyBJGRkaiurkZFRQWam5tRW1uL1atX47XXXsOKFStw+/btXkN2V68e/d8dvb29IRQKUV5eznYoKuHg4ABHR0ckJSVBLBazGouhoSFCQ0ORk5ODioqKAY994okncOPGDYGlpeW/DAwM/sUwzNgah0dRGmpECcrJkyfh6+vb68OhvLwcR44cGWlcI0YIQXZ2Nnx8fMAwDNvhjCn379+HlZUV22FQY0hPslFSUoLc3Fw0NDRgx44d+Pnnn5GVlYWvv/4aQPeX3ZSUFJXObbO2tkZ1dbXK2h+PDA0NYWho2O+X7wsXLmDTpk3o7OxEWVkZ1q9fDwMDAwAAl8uFvr4+ZDIZGIaBra0tOBwOZs6ciU8//RTLly/Hrl27IJVK1XlLSscwDIKCglBYWIiGhga2w1EJe3t7ODk5aUSSoquri0ceeQSlpaUoKCjoN3kGAB8fH2RlZQmCgoJWGxoaXmUYxkyNoVLUuMQM9Ev5IFNT04KzZ8+6SqVSiMViTJs2DR0dHfD29sb69esBdD9Z/+qrrwCg31/269evw8nJSeWTq6uqqlBVVYUHJ/VTI9fR0YHU1FRMnz6d7VDGldjYWMyaNYvtMFRGKpX2OWRQKpVizpw5iI2NBdA9DEggEKg0FpFIhIyMDJX00IxnXV1duHbtGsLCwsDj8eT7c3NzER4ejpycHFhaWvZ7fnl5OSZMmIDMzEz4+fnJ9xNCMHHiRJw4cWJMFEIRiURISkpCaGgodHV12Q5HJSorK+WFAdgefi2TyXDr1i1wuVz4+fkN+EBTKpVi69atXV999VVDW1vbXEJIlhpDpahxZUg9KIsXL8a7776Lffv2wcXFBefPn0dcXByEQiE6OzvlTx1nzJiBTz/9FEKhsNf5hw4dwrRp05Cdna28O+iDVCpFXl4evL29VXqd8Yj2nlCq0N98Ji6Xi5iYGKSkpAAApkyZovJYBAIBxGIx6094xxptbW04OzsjPz9fvk8ikeCvf/0r1q9fP2By0nO+ra0tGhsbe+3PyclBbW0tbGxssH37djz22GMqiV9dBAIB/P39kZyczPp8DVWxtbWFm5sbbty4ga6uLlZj4XA4CAgIgLa2Nm7evDngz5zL5eLjjz/W/vLLL60FAsENHo+3XI2hUtS4MqQE5cCBA9iyZQuam5vh5eWFzz//HC+88AICAgKwfft2/PzzzwC6S6Ju3LgRGzduBMMwkMlk+Oyzz7BmzRr4+/vj8ccfV8nN9CgoKIC9vf2AZQSp4aHzTyg2BAUFQSgUyt9jVM3KyopOllcBR0dH1NfXo6WlBUD3Z0p9fT22bt066LlFRUWorKxEenp6r/2GhoYQi8WwtraGp6cn5syZo5LY1cnU1BROTk5IS0sbcOjRaGZjY4OJEyfixo0b6Oxkd6kRhmHg6ekJa2trheJ59tlnER8fLzA2Nj6mr6+/j2EYuug1RSnZkCZ7rVmzRv7nTZs24aOPPsLFixfx73//G+vXrwePx+v11PHo0aMA/vd0dM6cOYiKilJG3P0SiUSoqqoak2tGsE0ikaC9vR36+vpsh0KNQwYGBvJ5CapmbW2NwsJC2NnZqeV64wXDMPD19UV2djbKy8uxf/9+xMTEKPSewuFwwOfzsWLFil77KysrYW9vDwB44YUXVBE2KxwcHNDS0oLc3FyNK0CjLFZWVmAYBjdu3FDKWjkj5ejoCF1dXVy/fh1TpkwZ8P9lUFAQsrOzdRctWrQxPz9/CsMwywghwn5PoChqSIZcjaKwsBAXL17Eq6++Ci6Xi8WLF2Px4sWQyWS4d+8eEhMTceHCBSQnJwMA7t27BxMTE4SGhuLixYvydiQSCbhcrtInsOfk5MDb2xscDn2goWx1dXWwsLBgOwyKUjkjIyMIhULIZLIx8V5SWVmJ/Px8cDgcHD16FFwuF1KpFHfv3kVFRQUcHR1hYWEBsViM8vJy8Hg8ODo6oqamBmVlZbCwsEBYWBjMzMyQl5eHkpIStLa2gs/nw8LCApaWlvD19YWBgQFCQ0Ph5uYGQgjKyspACEFmZiZqampgZGSEmpoa6Onp4fvvv8ehQ4cwadIkhe7B2dkZOjo6D/XgZmZmwsxsbM5Z9vb2xs2bN1FeXi5PwsYaS0tLeZISEhLC+sgHS0tL8Pl8JCcnw9/fH6ampv0ea2VlhWvXrgnWr18ffuLEiUyGYR4nhNxVY7gUNWYNOUFxdXXFqlWrsHbt2l7jxjkcDlxdXeHq6ornn39ePskPABobGxEZGdmrHV9fX0ycOBHnzp0b4S38T21tLQghg45lpoanuroaEyZMYDsMilI5hmFgamqKhoYGmJubsx3OiJw7dw4rVqyAl5c
2018-10-04 17:25:20 -06:00
"text/plain": [
"<Figure size 1152x1152 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"def make_map(bbox, projection=ccrs.Orthographic(central_longitude=-90.0)):\n",
" fig, ax = plt.subplots(figsize=(16,16),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.coastlines(resolution='50m')\n",
" ax.gridlines()\n",
" return fig, ax\n",
"\n",
"response = DataAccessLayer.getGeometryData(request, times[-20:-10])\n",
"glm_points=[]\n",
"for ob in response:\n",
" avail_params = ob.getParameters()\n",
" glm_points.append(ob.getGeometry())\n",
"# Plot markers\n",
"fig, ax = make_map(bbox=[180,-180,-90,90])\n",
"ax.scatter([point.x for point in glm_points],\n",
" [point.y for point in glm_points],\n",
" transform=ccrs.Geodetic(),marker=\"+\",facecolor='orange')\n",
"\n",
"response = DataAccessLayer.getGeometryData(request, times[-10:-1])\n",
"glm_points=[]\n",
"for ob in response:\n",
" avail_params = ob.getParameters()\n",
" glm_points.append(ob.getGeometry())\n",
"ax.scatter([point.x for point in glm_points],\n",
" [point.y for point in glm_points],\n",
" transform=ccrs.Geodetic(),marker=\"+\",facecolor='red')"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}