The Geostationary Lightning Mapper, or GLM, on board GOES–R 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.

AWIPS GLM point data are available in three formats

  • GLMev - Events
  • GLMfl - Flashes
  • GLMgr - Groups

and with seven attributes:

  • height
  • intensity
  • msgType
  • pulseCount
  • pulseIndex
  • sensorCount
  • strikeType

GLM Sources and Parameters


In [1]:
from awips.dataaccess import DataAccessLayer
import cartopy.crs as ccrs
import cartopy.feature as cfeat
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
import numpy as np
import datetime

# Create an EDEX data request
DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu")
request = DataAccessLayer.newDataRequest()
request.setDatatype("binlightning")

# Show available sources
sources = DataAccessLayer.getIdentifierValues(request, "source")
print("available sources:")
print(list(sources))
print("")
availableParms = DataAccessLayer.getAvailableParameters(request)
availableParms.sort()
print("available parameters:")
print(list(availableParms))


available sources:
[b'GLMev', b'GLMfl', b'GLMgr']

available parameters:
[b'height', b'intensity', b'msgType', b'pulseCount', b'pulseIndex', b'sensorCount', b'strikeType']

In [2]:
request.addIdentifier("source", "GLMev")
request.setParameters("intensity")
times = DataAccessLayer.getAvailableTimes(request)

In [3]:
%matplotlib inline
def make_map(bbox, projection=ccrs.Orthographic(central_longitude=-90.0)):
    fig, ax = plt.subplots(figsize=(16,16),
            subplot_kw=dict(projection=projection))
    ax.coastlines(resolution='50m')
    ax.gridlines()
    return fig, ax

response = DataAccessLayer.getGeometryData(request, times[-20:-10])
glm_points=[]
for ob in response:
    avail_params = ob.getParameters()
    glm_points.append(ob.getGeometry())
# Plot markers
fig, ax = make_map(bbox=[180,-180,-90,90])
ax.scatter([point.x for point in glm_points],
       [point.y for point in glm_points],
       transform=ccrs.Geodetic(),marker="+",facecolor='orange')

response = DataAccessLayer.getGeometryData(request, times[-10:-1])
glm_points=[]
for ob in response:
    avail_params = ob.getParameters()
    glm_points.append(ob.getGeometry())
ax.scatter([point.x for point in glm_points],
       [point.y for point in glm_points],
       transform=ccrs.Geodetic(),marker="+",facecolor='red')


Out[3]:
<matplotlib.collections.PathCollection at 0x13229a2e8>