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
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)
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']
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']
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']
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")
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:SSgetAvailableTimes(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
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.