Grid Levels and Parameters

Notebook Python-AWIPS Tutorial Notebook


Objectives

  • Cover the relevant methods for accessing EDEX and investigating what data is available.

  • This example we look at the “grid” data type and investigate the Global Forcast System (GFS) model.

  • We will talk quite a bit about the DataAccessLayer utility, and its online documentation might be a helpful reference.


Table of Contents

1 Imports

Start by importing the DataAccessLayer package from python-awips:

from awips.dataaccess import DataAccessLayer

Top


2 Connect to EDEX

Define a url for your EDEX connection, and then point python-awips at that EDEX

# Unidata's cloud EDEX instance is used in this example
edex_url = "edex-cloud.unidata.ucar.edu"
DataAccessLayer.changeEDEXHost(edex_url)

Top


3 Get a List of Supported Data Types

DataAccessLayer.getSupportedDatatypes() returns a list of supported data types offered by the EDEX server defined above. The code below shows how to populate, sort, and print out that list.

dataTypes = DataAccessLayer.getSupportedDatatypes()
dataTypes.sort()
list(dataTypes)
['acars',
 'airep',
 'binlightning',
 'bufrmosavn',
 'bufrmoseta',
 'bufrmosgfs',
 'bufrmoshpc',
 'bufrmoslamp',
 'bufrmosmrf',
 'bufrua',
 'climate',
 'common_obs_spatial',
 'dmw',
 'gfe',
 'gfeeditarea',
 'grid',
 'ldadmesonet',
 'maps',
 'modelsounding',
 'obs',
 'pirep',
 'practicewarning',
 'profiler',
 'radar',
 'radar_spatial',
 'satellite',
 'sfcobs',
 'topo',
 'warning']

Top


4 Create a New Data Request and Set the Type

Now create a new data request using DataAccessLayer.newDataRequest(), and set the data type using request.setDatatype(). Below we create a few different requests with different data types to show some differences with other methods.

For this example we are going to look at the grid data type, which is where the model data can be found, along with some other datasets (such as MRMS).

# Create a request for data type grid
grid_request = DataAccessLayer.newDataRequest()
grid_request.setDatatype("grid")

5 Get Available Locations

Use the DataAccessLayer.getAvailableLocationNames(request) method to find out what locations are available for the given dataset. Typically these will be geographic locations or NWS sites, although in some instances it will be something else. Take a look at what’s outputted for the grid_request, for example.

# Grid Locations
grid_locations = DataAccessLayer.getAvailableLocationNames(grid_request)
grid_locations.sort()
list(grid_locations)
['AK-NAM11',
 'BHP-ALPW',
 'BLENDED-PCT_TPW-Sat',
 'BLENDED-Rain_Rate-Sat',
 'BLENDED-TPW-Sat',
 'ESTOFS',
 'ESTOFS-other',
 'ETSS',
 'FFG-ALR',
 'FFG-FWR',
 'FFG-KRF',
 'FFG-MSR',
 'FFG-ORN',
 'FFG-PTR',
 'FFG-RHA',
 'FFG-RSA',
 'FFG-STR',
 'FFG-TAR',
 'FFG-TIR',
 'FFG-TUA',
 'GEFS',
 'GFS1p0',
 'GFS20',
 'GOES-East_Gridded_Turbulence',
 'GOES-West_Gridded_Turbulence',
 'GlobalWave',
 'HFR-EAST_6KM',
 'HFR-EAST_PR_6KM',
 'HFR-US_EAST_DELAWARE_1KM',
 'HFR-US_EAST_FLORIDA_2KM',
 'HFR-US_EAST_NORTH_2KM',
 'HFR-US_EAST_SOUTH_2KM',
 'HFR-US_EAST_VIRGINIA_1KM',
 'HFR-US_HAWAII_1KM',
 'HFR-US_HAWAII_2KM',
 'HFR-US_HAWAII_6KM',
 'HFR-US_WEST_500M',
 'HFR-US_WEST_CENCAL_2KM',
 'HFR-US_WEST_LOSANGELES_1KM',
 'HFR-US_WEST_LOSOSOS_1KM',
 'HFR-US_WEST_NORTH_2KM',
 'HFR-US_WEST_SANFRAN_1KM',
 'HFR-US_WEST_SOCAL_2KM',
 'HFR-US_WEST_WASHINGTON_1KM',
 'HFR-WEST_6KM',
 'HPCqpfNDFD',
 'HREF-AK',
 'HREF-HI',
 'HREF-SJU',
 'HREF-US',
 'HRRR',
 'HRRR-Smoke',
 'HiResW-ARW',
 'HiResW-ARW-AK',
 'HiResW-ARW-GU',
 'HiResW-ARW-HI',
 'HiResW-ARW-SJU',
 'HiResW-FV3',
 'HiResW-FV3-AK',
 'HiResW-FV3-GU',
 'HiResW-FV3-HI',
 'HiResW-FV3-SJU',
 'LAMP2p5',
 'LightningCast',
 'MRMS_0500',
 'MRMS_1000',
 'MRMS_AK_1000',
 'MRMS_CA_0500',
 'MRMS_CA_1000',
 'MRMS_GU_0500',
 'MRMS_HI_0500',
 'NAM12',
 'NAM40',
 'NationalBlend',
 'NationalBlendPR',
 'RAP13',
 'RTMA',
 'RTOFS-HudsonBaffin',
 'RTOFS-Now-HudsonBaffin',
 'RTOFS-Now-WestAtl',
 'RTOFS-Now-WestConus',
 'RTOFS-WestAtl',
 'RTOFS-WestConus',
 'SPCGuide',
 'SREF212',
 'SeaIce',
 'TPCWindProb',
 'URMA25']

Top


6 Get Available Parameters

We’re setting the “location” (in this case, what model we are interested in) to specify our request before we look at the available parameters.

Take a look at the available parameters for the data set by using DataAccessLayer.getAvailableParameters(request)

# Pick a model and set the location for the grid request -- we'll be using the Global Forecast System 20km (GFS20)
grid_request.setLocationNames("GFS20")
grid_params = DataAccessLayer.getAvailableParameters(grid_request)
grid_params.sort()
list(grid_params)
['-10C Hgt AGL',
 '-12 to -18C Omega',
 '-12 to -18C Thickness',
 '-12C Hgt',
 '-18C Hgt',
 '-20C Hgt AGL',
 '-30C Hgt AGL',
 '0 to 3km Line Normal Shear Vectors (Left)',
 '0 to 3km Line Normal Shear Vectors (Right)',
 '0-10km Blk Shr Mag',
 '0-10km Blk Shr Vect',
 '0-1km Blk Shr Mag',
 '0-1km Blk Shr Vect',
 '0-1km EHI',
 '0-1km Helicity',
 '0-1km Mixing Ratio',
 '0-1km Moisture Convergence',
 '0-1km Theta-E',
 '0-1km Theta-E Adv',
 '0-1km Wind Streamlines',
 '0-2km Blk Shr Mag',
 '0-2km Blk Shr Vect',
 '0-2km EHI',
 '0-2km Helicity',
 '0-3km Blk Shr Mag',
 '0-3km Blk Shr Vect',
 '0-3km EHI',
 '0-3km Helicity',
 '0-3km LR',
 '0-3km MLCAPE',
 '0-3km ThetaE Diff',
 '0-3km VGP',
 '0-500m Blk Shr Mag',
 '0-500m Blk Shr Vect',
 '0-500m Helicity',
 '0-500m Wind Streamlines',
 '0-6km Blk Shr Mag',
 '0-6km Blk Shr Vect',
 '0-8km Blk Shr Mag',
 '0-8km Blk Shr Vect',
 '0C Hgt AGL',
 '0to5',
 '1 Hr Sfc Press Change',
 '250mb Height',
 '250mb Wind',
 '2xTP6hr',
 '3 Hr Sfc Press Change',
 '36SHRMi',
 '50 dBZ Hail Hgt AGL',
 '500-300mb RH',
 '500mb 12hr Hgt Change',
 '500mb 6hr Hgt Change',
 '500mb Height',
 '500mb Temp',
 '500mb Wind',
 '50dbzZ',
 '600mb CAPE',
 '600mb CIN',
 '625mb CAPE',
 '625mb CIN',
 '650mb CAPE',
 '650mb CIN',
 '675mb CAPE',
 '675mb CIN',
 '700-300mb Mean Wind',
 '700-500mb LR',
 '700-500mb RH',
 '700mb CAPE',
 '700mb CIN',
 '700mb Dew Point',
 '700mb Height',
 '700mb Temp',
 '700mb Wind',
 '700mb Wind Streamlines',
 '725mb CAPE',
 '725mb CIN',
 '750mb CAPE',
 '750mb CIN',
 '775mb CAPE',
 '775mb CIN',
 '800mb CAPE',
 '800mb CIN',
 '825mb CAPE',
 '825mb CIN',
 '850mb CAPE',
 '850mb CIN',
 '850mb Dew Point',
 '850mb Height',
 '850mb Moisture Convergence',
 '850mb Moisture Flux Divergence',
 '850mb Moisture Trans Mag',
 '850mb Moisture Transport Vectors',
 '850mb Temp',
 '850mb Theta-E',
 '850mb Theta-E Adv',
 '850mb Wind',
 '850mb Wind Streamlines',
 '875mb CAPE',
 '875mb CIN',
 '900mb CAPE',
 '900mb CIN',
 '925mb CAPE',
 '925mb CIN',
 '925mb Dew Point',
 '925mb Height',
 '925mb Moisture Convergence',
 '925mb Moisture Flux Divergence',
 '925mb Moisture Trans Mag',
 '925mb Moisture Transport Vectors',
 '925mb Temp',
 '925mb Theta-E',
 '925mb Theta-E Adv',
 '925mb Wind',
 '925mb Wind Streamlines',
 '950mb CAPE',
 '950mb CIN',
 'AV',
 'Along',
 'AppT',
 'Avg Cold Nose Wet Bulb Temp',
 'BLI',
 'BRN',
 'BRNEHIi',
 'BRNSHR',
 'BRNmag',
 'BRNvec',
 'BdEPT06',
 'BlkMag',
 'BlkShr',
 'Bulk Richardson Number',
 'Bunkers Elevated Left-Moving Supercell Vectors',
 'Bunkers Elevated Right-Moving Supercell Vectors',
 'Bunkers Left-Moving Supercell Vectors',
 'Bunkers Right-Moving Supercell Vectors',
 'CAPE',
 'CFRZR',
 'CFRZR3hr',
 'CFRZR6hr',
 'CICEP',
 'CICEP3hr',
 'CICEP6hr',
 'CIn',
 'CP',
 'CP-GFS',
 'CP3hr',
 'CP6hr',
 'CPr',
 'CPrD',
 'CRAIN',
 'CRAIN3hr',
 'CRAIN6hr',
 'CSNOW',
 'CSNOW3hr',
 'CSNOW6hr',
 'CURU',
 'CapeStk',
 'Corf',
 'CorfF',
 'CorfFM',
 'CorfM',
 'Corfidi Vectors',
 'CritT1',
 'Critical Angle',
 'Critical Angle (Filtered)',
 'Cross Totals',
 'CumNrm',
 'CumShr',
 'DCAPE',
 'DIABi',
 'DivF',
 'DivFn',
 'DivFs',
 'DpD',
 'DpDt',
 'DpT',
 'Dpress',
 'DthDt',
 'EHI',
 'EHI01',
 'EHIi',
 'EMSP',
 'EPT',
 'EPTA',
 'EPTC',
 'EPTGrd',
 'EPTGrdM',
 'EPTs',
 'EPVg',
 'EPVs',
 'EPVt1',
 'EPVt2',
 'ESP',
 'ESP2',
 'FRZR12hr',
 'FRZRrun',
 'FVecs',
 'FnVecs',
 'Forward-Propagating Corfidi Vectors',
 'FsVecs',
 'Fzra1',
 'Fzra2',
 'GH',
 'GHxSM',
 'GHxSM2',
 'GVV',
 'HI',
 'HI1',
 'HI1High',
 'HI1Low',
 'HI1Middle',
 'HI3',
 'HI3High',
 'HI3Low',
 'HI3Middle',
 'HI4',
 'HI4High',
 'HI4Low',
 'HI4Middle',
 'HIHigh',
 'HILow',
 'HIMiddle',
 'HIdx',
 'Hail Growth Zone Thickness',
 'Heli',
 'HeliC',
 'INV',
 'IPLayer',
 'Into',
 'K Index',
 'KI',
 'L-I',
 'LIsfc2x',
 'LM5',
 'LM6',
 'Large Hail Parameter',
 'MAdv',
 'MCS Maint Prob',
 'MCon',
 'MCon2',
 'ML Hail Growth CAPE',
 'ML LCL Hgt',
 'MLCAPE',
 'MLCIN',
 'MLLCL',
 'MMP',
 'MSFDi',
 'MSFi',
 'MSFmi',
 'MSG',
 'MSL Pressure',
 'MTV',
 'MUCAPE',
 'Max 0-5km Dew Point Dep',
 'Max Warm Nose Wet Bulb Temp',
 'Mean RH in Dendritic Layer',
 'Microburst Composite',
 'Min Cold Nose Wet Bulb Temp',
 'Mix1',
 'Mix2',
 'Mmag',
 'MnT',
 'MnT3hr',
 'MnT6hr',
 'MpV',
 'MxT',
 'MxT3hr',
 'MxT6hr',
 'NBE',
 'NSEA_BlkShr500mDir',
 'NSEA_CritAngRMa',
 'NSEA_CritAng_sbCAPECheck',
 'NSEA_CritAng_sbCINCheck',
 'NSEA_DpDMax',
 'NSEA_DpDstk',
 'NSEA_LHP10',
 'NSEA_LHP11',
 'NSEA_LHP12',
 'NSEA_LHP13',
 'NSEA_LHP14',
 'NSEA_LHP15',
 'NSEA_LHP16',
 'NSEA_LHP17',
 'NSEA_LHP18',
 'NSEA_LHP19',
 'NSEA_LHP2',
 'NSEA_LHP20',
 'NSEA_LHP21',
 'NSEA_LHP22',
 'NSEA_LHP23',
 'NSEA_LHP24',
 'NSEA_LHP25',
 'NSEA_LHP26',
 'NSEA_LHP27',
 'NSEA_LHP3',
 'NSEA_LHP4',
 'NSEA_LHP5',
 'NSEA_LHP6',
 'NSEA_LHP7',
 'NSEA_LHP8',
 'NSEA_LHP9',
 'NSEA_SRMrDir',
 'NSEA_TwMax',
 'NSEA_TwMin',
 'NSEA_cCape',
 'NSEA_cCape_0.5kmAGL',
 'NSEA_cCape_1kmAGL',
 'NSEA_cCape_SFC',
 'NSEA_capeToLvl',
 'NSEA_capeToLvl_0.5kmAGL',
 'NSEA_capeToLvl_1kmAGL',
 'NSEA_capeToLvl_SFC',
 'NSEA_dGH6',
 'NSEA_maxEPT01',
 'NSEA_minEPT13',
 'NSEA_uBlkShr500m',
 'NSEA_uSRMr',
 'NSEA_vBlkShr500m',
 'NSEA_vSRMr',
 'NST',
 'NST1',
 'NST2',
 'NetIO',
 'Non-Supercell Tor Parm',
 'OmDiff',
 'P',
 'P3hr',
 'P6hr',
 'PAdv',
 'PBE',
 'PEC',
 'PEC_TT24',
 'PFrnt',
 'PGrd',
 'PGrd1',
 'PGrdM',
 'PIVA',
 'PTvA',
 'PTyp',
 'PVV',
 'PW',
 'PW2',
 'PoT',
 'PoTA',
 'Precipitable H2O',
 'QPV1',
 'QPV2',
 'QPV3',
 'QPV4',
 'RH',
 'RH_001_bin',
 'RH_002_bin',
 'RM5',
 'RM6',
 'RMGH2',
 'RMprop',
 'RMprop2',
 'RV',
 'Rain1',
 'Rain2',
 'Rain3',
 'Ro',
 'SA12hr',
 'SA24hr',
 'SA36hr',
 'SA3hr',
 'SA48hr',
 'SA6hr',
 'SAcc',
 'SArun',
 'SB Hail Growth CAPE',
 'SB LI',
 'SBCAPE',
 'SBCIN',
 'SH',
 'SHERB_S3',
 'SHx',
 'SLI',
 'SNSQ',
 'SNW',
 'SNWA',
 'SRMl',
 'SRMlM',
 'SRMm',
 'SRMmM',
 'SRMr',
 'SRMrM',
 'SSP',
 'SSi',
 'STP',
 'STP1',
 'SWEAT Index',
 'Sfc Dew Point',
 'Sfc Mixing Ratio',
 'Sfc Moisture Convergence',
 'Sfc Pot Temp',
 'Sfc Temp',
 'Sfc Theta-E',
 'Sfc Theta-E Adv',
 'Sfc Wind',
 'Sfc Wind Streamlines',
 'Sfc-Based LCL Hgt',
 'Shear',
 'Showalter Index',
 'ShrMag',
 'Sig Severe',
 'Sig Tor Parm',
 'Snow1',
 'Snow2',
 'Snow3',
 'SnowT',
 'St-Pr',
 'StrTP',
 'StrmMot',
 'SuCP',
 'Supercell Composite Parm',
 'T',
 'TAdv',
 'TGrd',
 'TGrdM',
 'TORi',
 'TORi2',
 'TP',
 'TP-GFS',
 'TP12hr',
 'TP168hr',
 'TP24hr',
 'TP36hr',
 'TP3hr',
 'TP48hr',
 'TP6hr',
 'TP72hr',
 'TPrun',
 'TPx12x6',
 'TQIND',
 'TShrMi',
 'TV',
 'TW',
 'T_001_bin',
 'Tdef',
 'Tdend',
 'ThGrd',
 'ThetaE',
 'Thom5',
 'Thom5a',
 'Thom6',
 'TmDpD',
 'Tmax',
 'Tmin',
 'TotQi',
 'Total Totals',
 'Tstk',
 'TwMax',
 'TwMin',
 'Twstk',
 'TxSM',
 'VAdv',
 'VAdvAdvection',
 'VGP',
 'VSS',
 'Vertical Totals',
 'WCD',
 'WD',
 'WEASD',
 'Warm Cloud Depth',
 'Warm Cloud Depth Raw',
 'Wind',
 'WndChl',
 'ageoVC',
 'ageoW',
 'ageoWM',
 'cCape',
 'cCin',
 'cTOT',
 'capeToLvl',
 'dCape',
 'dGH12',
 'dP',
 'dP1hr',
 'dP3hr',
 'dP6hr',
 'dPW1hr',
 'dPW3hr',
 'dPW6hr',
 'dT',
 'dVAdv',
 'dZ',
 'defV',
 'del2gH',
 'df',
 'fGen',
 'fnD',
 'fsD',
 'gamma',
 'gammaE',
 'geoVort',
 'geoW',
 'geoWM',
 'loCape',
 'maxEPT',
 'minEPT',
 'mixRat',
 'msl-P',
 'muCape',
 'pV',
 'pVeq',
 'qDiv',
 'qVec',
 'qnVec',
 'qsVec',
 'shWlt',
 'snoRat',
 'snoRatCrocus',
 'snoRatEMCSREF',
 'snoRatOv2',
 'snoRatSPC',
 'snoRatSPCdeep',
 'snoRatSPCsurface',
 'swtIdx',
 'tTOT',
 'tWind',
 'tWindU',
 'tWindV',
 'uFX',
 'uW',
 'uWStk',
 'ulSnoRat',
 'vSmthW',
 'vTOT',
 'vW',
 'vWStk',
 'vertCirc',
 'wDiv',
 'wSp',
 'wSp_001_bin',
 'wSp_002_bin',
 'wSp_003_bin',
 'wSp_004_bin',
 'zAGL']

Top


7 Get Available Levels

Setting the parameters is just an option, you do not need to filter the data if you do not wish to. Also, although we are only setting one parameter in this example, you can set multiple parameters by using an array:

params = ("param1", "param2", "param3"...)
request.setParameters(params)

Set a parameter, from the output above and take a look at what “levels” are available for the data set you’re looking at using DataAccessLayer.getAvailableLevels(request).

Warning: Not all datasets support levels. If you are trying this with another dataset and run into an exception (error), it’s most likely because levels are not supported for that data type.

# For grid data we'll use the temperature parameter ("T")
grid_request.setParameters("T")
grid_levels = DataAccessLayer.getAvailableLevels(grid_request)
for lvl in grid_levels:
    print(lvl)
 100.0MB
 200.0MB
 250.0MB
 300.0MB
 400.0MB
 500.0MB
 700.0MB
 850.0MB
 925.0MB
 1000.0MB
 0.0SFC
 2.0FHAG
 340.0_350.0K
 290.0_300.0K
 700.0_600.0MB
 700.0_300.0MB
 320.0Ke
 3962.4FHAG
 800.0_750.0MB
 0.0_610.0FHAG
 60.0TILT
 5.3TILT
 550.0MB
 1000.0_900.0MB
 340.0K
 1000.0_500.0MB
 5500.0_6000.0FHAG
 255.0K
 255.0_265.0K
 3000.0_6000.0FHAG
 25.0TILT
 2000.0FHAG
 0.0_500.0FHAG
 1000.0_850.0MB
 850.0_250.0MB
 280.0_290.0Ke
 1524.0FHAG
 320.0_330.0K
 0.0TILT
 150.0_180.0BL
 310.0_320.0Ke
 310.0Ke
 330.0K
 900.0_800.0MB
 550.0_500.0MB
 900.0MB
 825.0MB
 2.4TILT
 50.0TILT
 3500.0FHAG
 35.0TILT
 12.0TILT
 300.0_310.0K
 3000.0_12000.0FHAG
 0.9TILT
 320.0K
 400.0_350.0MB
 500.0FHAG
 750.0_700.0MB
 1000.0_400.0MB
 345.0K
 250.0_260.0K
 2438.4FHAG
 300.0Ke
 725.0MB
 290.0Ke
 0.0TROP
 950.0_900.0MB
 4572.0FHAG
 275.0_285.0Ke
 800.0MB
 335.0Ke
 295.0_305.0Ke
 275.0_285.0K
 600.0_550.0MB
 310.0K
 9000.0FHAG
 0.0_30.0BL
 335.0K
 1000.0_7000.0FHAG
 700.0_500.0MB
 9144.0FHAG
 325.0_335.0K
 2000.0_8000.0FHAG
 0.0_609.6FHAG
 300.0K
 0.0MAXOMEGA
 750.0MB
 675.0MB
 315.0_325.0K
 325.0K
 340.0Ke
 0.0_4000.0FHAG
 450.0MB
 5000.0_5500.0FHAG
 300.0_250.0MB
 762.0FHAG
 1.5TILT
 335.0_345.0K
 0.0_300000.0FHAG
 315.0K
 3.4TILT
 2500.0FHAG
 10000.0FHAG
 0.0_2000.0FHAG
 7000.0FHAG
 0.0_1000.0FHAG
 5000.0FHAG
 1066.8FHAG
 575.0MB
 330.0Ke
 90.0_120.0BL
 650.0MB
 500.0_400.0MB
 1000.0_1500.0FHAG
 305.0K
 285.0_295.0Ke
 14.0TILT
 3000.0_3500.0FHAG
 325.0_335.0Ke
 2000.0_5000.0FHAG
 7620.0FHAG
 850.0_800.0MB
 120.0_150.0BL
 6096.0FHAG
 875.0MB
 6000.0_7000.0FHAG
 2000.0_7000.0FHAG
 9000.0_10000.0FHAG
 295.0Ke
 950.0MB
 305.0Ke
 265.0_275.0K
 7000.0_8000.0FHAG
 3000.0_8000.0FHAG
 700.0_650.0MB
 1000.0_6000.0FHAG
 0.5TILT
 450.0_400.0MB
 1.8TILT
 1219.2FHAG
 330.0_340.0K
 800.0_700.0MB
 850.0_300.0MB
 4000.0FHAG
 6.0TILT
 900.0_850.0MB
 3657.6FHAG
 0.0_5000.0FHAG
 320.0_330.0Ke
 8.7TILT
 650.0_600.0MB
 0.0FHAG
 600.0_400.0MB
 55.0TILT
 270.0_280.0Ke
 30.0TILT
 310.0_320.0K
 1500.0FHAG
 1000.0_950.0MB
 1.0PV
 775.0MB
 5500.0FHAG
 250.0_200.0MB
 1.5PV
 500.0_1000.0FHAG
 400.0_300.0MB
 500.0_100.0MB
 1000.0_3000.0FHAG
 8000.0FHAG
 285.0Ke
 290.0K
 305.0_315.0K
 285.0_295.0K
 350.0MB
 0.0_2500.0FHAG
 925.0_850.0MB
 275.0Ke
 1500.0_2000.0FHAG
 2.0PV
 300.0_200.0MB
 610.0_40000.0FHAG
 260.0_270.0K
 0.0_6000.0FHAG
 2743.2FHAG
 3000.0FHAG
 315.0_325.0Ke
 600.0_500.0MB
 16.7TILT
 0.5PV
 280.0K
 4267.2FHAG
 500.0_250.0MB
 40.0TILT
 1000.0FHAG
 3048.0FHAG
 400.0_200.0MB
 300.0_310.0Ke
 270.0_280.0K
 1000.0_700.0MB
 45.0TILT
 850.0_500.0MB
 60.0_90.0BL
 2500.0_3000.0FHAG
 609.6FHAG
 0.0_8000.0FHAG
 2133.6FHAG
 295.0K
 4.3TILT
 295.0_305.0K
 330.0_340.0Ke
 270.0K
 4000.0_4500.0FHAG
 280.0_290.0K
 925.0_700.0MB
 0.0_1500.0FHAG
 260.0K
 10.0TILT
 3500.0_4000.0FHAG
 325.0Ke
 625.0MB
 285.0K
 30.0_60.0BL
 290.0_300.0Ke
 7.5TILT
 1828.8FHAG
 3352.8FHAG
 280.0Ke
 500.0_450.0MB
 914.4FHAG
 305.0_315.0Ke
 250.0K
 4500.0FHAG
 1250.0FHAG
 975.0MB
 0.0_10000.0FHAG
 4500.0_5000.0FHAG
 250.0_350.0K
 270.0Ke
 275.0K
 315.0Ke
 500.0_300.0MB
 600.0MB
 525.0MB
 350.0_300.0MB
 750.0FHAG
 19.5TILT
 0.0_3000.0FHAG
 2000.0_2500.0FHAG
 150.0MB
 850.0_700.0MB
 350.0K
 265.0K
 6000.0FHAG
 8000.0_9000.0FHAG
 1100.0_800.0MB
 800.0_500.0MB
 2000.0_3000.0FHAG


Note: 0.0SFC is the Surface level HAG stands for Fixed
Height Above Ground (in meters) NTAT stands for Nominal Top of
the ATmosphere BL stands for Boundary Layer, where 0.0_30.0BL
reads as 0-30 mb above ground level TROP is the Tropopause
level
# We'll set the level to surface level
grid_request.setLevels("0.0SFC")

Top


8 Get Available Times

Take a look at what time options are available for the data you’re looking at using the DataAccessLayer.getAvailableTimes() method:

  • getAvailableTimes(request, True) will return an object of run times - formatted as YYYY-MM-DD HH:MM:SS

  • getAvailableTimes(request) will return an object of all times - formatted as YYYY-MM-DD HH:MM:SS (F:ff)

  • getForecastRun(cycle, times) will return a DataTime array for a single forecast cycle.

# Available grid times
grid_cycles = DataAccessLayer.getAvailableTimes(grid_request, True)
grid_times = DataAccessLayer.getAvailableTimes(grid_request)

assert grid_cycles, "No grid forecast cycles returned"
assert grid_times, "No grid forecast times returned"

## Using -1 in an array will access the last element of the array
##  (using -2 will access the second last element, and so on)
grid_fcstRun = DataAccessLayer.getForecastRun(grid_cycles[-1], grid_times)

assert grid_fcstRun, (
    "No forecast run constructed from the latest grid cycle"
)

## print out the time instances
times = []
for fcst in grid_fcstRun:
    print(fcst.getRefTime(), ':', fcst.getFcstTime(), 'seconds')
2026-09-02 12:00:00.000 : 0 seconds
2026-09-02 12:00:00.000 : 10800 seconds
2026-09-02 12:00:00.000 : 21600 seconds
2026-09-02 12:00:00.000 : 32400 seconds
2026-09-02 12:00:00.000 : 43200 seconds
2026-09-02 12:00:00.000 : 54000 seconds
2026-09-02 12:00:00.000 : 64800 seconds
2026-09-02 12:00:00.000 : 75600 seconds
2026-09-02 12:00:00.000 : 86400 seconds
2026-09-02 12:00:00.000 : 97200 seconds
2026-09-02 12:00:00.000 : 108000 seconds
2026-09-02 12:00:00.000 : 118800 seconds
2026-09-02 12:00:00.000 : 129600 seconds
2026-09-02 12:00:00.000 : 140400 seconds
2026-09-02 12:00:00.000 : 151200 seconds
2026-09-02 12:00:00.000 : 162000 seconds
2026-09-02 12:00:00.000 : 172800 seconds
2026-09-02 12:00:00.000 : 183600 seconds
2026-09-02 12:00:00.000 : 194400 seconds
2026-09-02 12:00:00.000 : 205200 seconds
2026-09-02 12:00:00.000 : 216000 seconds
2026-09-02 12:00:00.000 : 226800 seconds
2026-09-02 12:00:00.000 : 237600 seconds
2026-09-02 12:00:00.000 : 248400 seconds
2026-09-02 12:00:00.000 : 259200 seconds
2026-09-02 12:00:00.000 : 270000 seconds
2026-09-02 12:00:00.000 : 280800 seconds
2026-09-02 12:00:00.000 : 291600 seconds
2026-09-02 12:00:00.000 : 302400 seconds
2026-09-02 12:00:00.000 : 324000 seconds
2026-09-02 12:00:00.000 : 345600 seconds
2026-09-02 12:00:00.000 : 367200 seconds
2026-09-02 12:00:00.000 : 388800 seconds
2026-09-02 12:00:00.000 : 410400 seconds
2026-09-02 12:00:00.000 : 432000 seconds
2026-09-02 12:00:00.000 : 453600 seconds
2026-09-02 12:00:00.000 : 475200 seconds
2026-09-02 12:00:00.000 : 496800 seconds
2026-09-02 12:00:00.000 : 518400 seconds
2026-09-02 12:00:00.000 : 540000 seconds
2026-09-02 12:00:00.000 : 561600 seconds
2026-09-02 12:00:00.000 : 583200 seconds
2026-09-02 12:00:00.000 : 604800 seconds
2026-09-02 12:00:00.000 : 626400 seconds
2026-09-02 12:00:00.000 : 648000 seconds
2026-09-02 12:00:00.000 : 669600 seconds
2026-09-02 12:00:00.000 : 691200 seconds
2026-09-02 12:00:00.000 : 712800 seconds
2026-09-02 12:00:00.000 : 734400 seconds
2026-09-02 12:00:00.000 : 756000 seconds
2026-09-02 12:00:00.000 : 777600 seconds
2026-09-02 12:00:00.000 : 799200 seconds
2026-09-02 12:00:00.000 : 820800 seconds
2026-09-02 12:00:00.000 : 842400 seconds
2026-09-02 12:00:00.000 : 864000 seconds

Top


9 Get the Data!

Now that we have our request and DataTime fcstRun arrays ready, it’s time to request the data array from EDEX. Depending on what kind of data we’re working with, we’ll either use DataAccessLayer.getGridData() or DataAccessLayer.getGeometryData()

Note: We have more, detailed notebooks about how analyze and visualize the data once you have what you want.

## Grid Data
grid_response = DataAccessLayer.getGridData(grid_request, [grid_fcstRun[-1]])
for grid in grid_response:
    grid_data = grid.getRawData()
    lons, lats = grid.getLatLonCoords()
    print('Time :', grid.getDataTime(), "-", grid.getDataTime().getFcstTime(), 'seconds')

assert grid_response, (
    f"No grid data returned for forecast time {grid_fcstRun[-1]}"
)

## Take a look at some information in our data
print('Model:', str(grid.getLocationName()))
print('Parm :', str(grid.getParameter()))
print('Unit :', str(grid.getUnit()))
print(grid_data.shape)
Time : 2026-09-02 12:00:00 (240) - 864000 seconds
Model: GFS20
Parm : T
Unit : K
(257, 369)

10 See Also

Several functions are used throughout this notebook from the DataAccessLayer class in python-awips, to see full documentation for these functions vist here.