
This notebook is developed during the pythia cook-off at NCAR Mesa-Lab Boulder Colorado, June 12-14, 2024
Participants in the workshop event have the chance to practice collaborative problem-solving and hands-on learning in the field of Python programming.
This notebook is part of the Breakout Topic: Geostationary on AWS, lead by Jorge Humberto Bravo Mendez jbravo2@stevens.edu, from Stevens Institute of Technology
Advanced Baseline Imager (ABI) data with Satpy¶
Using Satpy to read and Advanced Baseline Imager (ABI) data from GOES-R satellites. Here’s a step-by-step guide:
Imports¶
import warnings
warnings.filterwarnings('ignore')
from satpy.scene import Scene
from satpy.utils import debug_on
from datetime import datetime
from glob import glob
Starting to create satpy scenes¶
sat_files = glob("input/G18_ABI-L1b-RadC/*")
sat_files
['input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C12_G18_s20230041816176_e20230041818555_c20230041819009.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C02_G18_s20230041816176_e20230041818549_c20230041818582.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C09_G18_s20230041816176_e20230041818555_c20230041819014.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C13_G18_s20230041816176_e20230041818561_c20230041819034.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C14_G18_s20230041816176_e20230041818549_c20230041819017.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C04_G18_s20230041816176_e20230041818549_c20230041818580.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C01_G18_s20230041816176_e20230041818551_c20230041818587.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C15_G18_s20230041816176_e20230041818555_c20230041819030.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C08_G18_s20230041816176_e20230041818549_c20230041818599.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C10_G18_s20230041816176_e20230041818563_c20230041819021.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C11_G18_s20230041816176_e20230041818549_c20230041818594.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C07_G18_s20230041816176_e20230041818562_c20230041818592.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C06_G18_s20230041816176_e20230041818555_c20230041819032.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C03_G18_s20230041816176_e20230041818550_c20230041818584.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C16_G18_s20230041816176_e20230041818561_c20230041819025.nc',
'input/G18_ABI-L1b-RadC/OR_ABI-L1b-RadC-M6C05_G18_s20230041816176_e20230041818550_c20230041819005.nc']
scn = Scene(filenames = sat_files, reader='abi_l1b')
dataset_names = scn.all_dataset_names()
print(dataset_names)
['C01', 'C02', 'C03', 'C04', 'C05', 'C06', 'C07', 'C08', 'C09', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16']
scn.load([f'C{x:02d}' for x in range(1, 17)])
print(scn.available_composite_names())
['24h_microphysics', 'airmass', 'ash', 'blowing_snow', 'cimss_cloud_type', 'cimss_cloud_type_raw', 'cimss_green', 'cimss_green_sunz', 'cimss_green_sunz_rayleigh', 'cimss_true_color', 'cimss_true_color_sunz', 'cimss_true_color_sunz_rayleigh', 'cira_day_convection', 'cira_fire_temperature', 'cloud_phase', 'cloud_phase_distinction', 'cloud_phase_distinction_raw', 'cloud_phase_raw', 'cloudtop', 'color_infrared', 'colorized_ir_clouds', 'convection', 'day_cloud_type', 'day_microphysics', 'day_microphysics_abi', 'day_microphysics_eum', 'day_severe_storms', 'day_severe_storms_tropical', 'dust', 'fire_temperature_awips', 'fog', 'geo_color', 'geo_color_background_with_low_clouds', 'geo_color_high_clouds', 'geo_color_low_clouds', 'geo_color_night', 'green', 'green_crefl', 'green_nocorr', 'green_raw', 'green_snow', 'highlight_C14', 'ir108_3d', 'ir_cloud_day', 'land_cloud', 'land_cloud_fire', 'natural_color', 'natural_color_nocorr', 'natural_color_raw', 'natural_color_raw_with_night_ir', 'night_fog', 'night_ir_alpha', 'night_ir_with_background', 'night_ir_with_background_hires', 'night_microphysics', 'night_microphysics_eum', 'night_microphysics_tropical', 'overshooting_tops', 'overview', 'overview_raw', 'rocket_plume_day', 'rocket_plume_night', 'snow', 'snow_fog', 'so2', 'tropical_airmass', 'true_color', 'true_color_crefl', 'true_color_nocorr', 'true_color_raw', 'true_color_reproduction', 'true_color_reproduction_corr', 'true_color_reproduction_uncorr', 'true_color_with_night_fires', 'true_color_with_night_fires_nocorr', 'true_color_with_night_ir', 'true_color_with_night_ir_hires', 'water_vapors1', 'water_vapors2']
rgb_im = 'airmass'
scn.load([rgb_im])
### Uncomment to show it
#scn.show(rgb_im)
result = scn[rgb_im]
result
Loading...
keys = scn.keys()
keys
[DataID(name='C01', wavelength=WavelengthRange(min=0.45, central=0.47, max=0.49, unit='µm'), resolution=1000, calibration=<1>, modifiers=()),
DataID(name='C02', wavelength=WavelengthRange(min=0.59, central=0.64, max=0.69, unit='µm'), resolution=500, calibration=<1>, modifiers=()),
DataID(name='C03', wavelength=WavelengthRange(min=0.8455, central=0.865, max=0.8845, unit='µm'), resolution=1000, calibration=<1>, modifiers=()),
DataID(name='C04', wavelength=WavelengthRange(min=1.3705, central=1.378, max=1.3855, unit='µm'), resolution=2000, calibration=<1>, modifiers=()),
DataID(name='C05', wavelength=WavelengthRange(min=1.58, central=1.61, max=1.64, unit='µm'), resolution=1000, calibration=<1>, modifiers=()),
DataID(name='C06', wavelength=WavelengthRange(min=2.225, central=2.25, max=2.275, unit='µm'), resolution=2000, calibration=<1>, modifiers=()),
DataID(name='C07', wavelength=WavelengthRange(min=3.8, central=3.9, max=4.0, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C08', wavelength=WavelengthRange(min=5.77, central=6.185, max=6.6, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C09', wavelength=WavelengthRange(min=6.75, central=6.95, max=7.15, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C10', wavelength=WavelengthRange(min=7.24, central=7.34, max=7.44, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C11', wavelength=WavelengthRange(min=8.3, central=8.5, max=8.7, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C12', wavelength=WavelengthRange(min=9.42, central=9.61, max=9.8, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C13', wavelength=WavelengthRange(min=10.1, central=10.35, max=10.6, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C14', wavelength=WavelengthRange(min=10.8, central=11.2, max=11.6, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C15', wavelength=WavelengthRange(min=11.8, central=12.3, max=12.8, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='C16', wavelength=WavelengthRange(min=13.0, central=13.3, max=13.6, unit='µm'), resolution=2000, calibration=<2>, modifiers=()),
DataID(name='airmass', resolution=2000)]
area_info = scn["C13"].area
area_info
Loading...
area_info = scn["C01"].area
area_info
Loading...
area_info = scn["C02"].area
area_info
Loading...
scn.load(["natural_color"])
The following datasets were not created and may require resampling to be generated: DataID(name='natural_color')
rs = scn["C13"].area
lscn = scn.resample(rs)
lscn.load(["natural_color"])
### Uncomment to show it
#lscn.show("natural_color")
lscn.load(['true_color'])
### Uncomment to show it
#lscn.show('true_color')
0%| | 0/52 [00:00<?, ?kB/s]
100%|██████████| 52/52 [00:00<00:00, 1418.15kB/s]
No rsr file /home/runner/.local/share/pyspectral/rsr_abi_GOES-18.h5 on disk
0%| | 0/5 [00:00<?, ?kB/s]
6kB [00:00, 1262.14kB/s]