GOES Geostationary Lightning Mapper Tools
glmtools requires Python 3.5+ and provides a conda environment.yml
for the key dependencies.
See the documentation in docs/index.rst
for complete installation instructions.
Compatible data:
- NetCDF format Level 2 data, as described in the Product Definition and Users Guide
glmtools automatically reconstitutes the parent-child relationships implicit in the L2 GLM data and adds traversal information to the dataset:
- calculating the parent flash id for each event
- calculating the number of groups and events in each flash
- calculating the number of events in each group
xarray's dimension-aware indexing lets you quickly reduce the dataset to flashes of interest, as described below.
glmtools can restore the GLM event geometry using a built-in corner-point lookup table, which allows for gridding of the imagery at finer resolutions that accurately represent the full footprint of each event, group, and flash.
Use the script in examples/grid/make_GLM_grids.py
. See the documentation in docs/index.rst
for complete instructions and example commands.
See the examples folder. basic_read_plot.ipynb
is a good place to start.
from glmtools.io.glm import GLMDataset
filename = 'OR_GLM-L2-LCFA_G16_s20180040537000_e20180040537200_c20180040537226.nc'
glm = GLMDataset(filename)
flash_id_list = glm.dataset.flash_id[20:30]
smaller_dataset = glm.get_flashes(flash_id_list)
See glmtools.io.glm.GLMDataset.subset_flashes
.
The logic implemented above is pretty simple, and below shows how to adapt it to find large flashes.
from glmtools.io.glm import GLMDataset
filename = 'OR_GLM-L2-LCFA_G16_s20180040537000_e20180040537200_c20180040537226.nc'
glm = GLMDataset(filename)
fl_idx = glm.dataset['flash_area'] > 2000
flash_ids = glm.dataset[{glm.fl_dim: fl_idx}].flash_id.data
smaller_dataset = glm.get_flashes(flash_ids)
print(smaller_dataset)