{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This example covers the callable methods of python-awips when working with gridded data. We start with a connection to an EDEX server, then query data types, then grid names, parameters, levels, and other information. Finally the gridded data is plotted for its domain using Matplotlib and Cartopy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getSupportedDatatypes()\n", "\n", "getSupportedDatatypes() returns a list of available data types offered by the EDEX server defined above. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['acars',\n", " 'airep',\n", " 'binlightning',\n", " 'bufrmosAVN',\n", " 'bufrmosETA',\n", " 'bufrmosGFS',\n", " 'bufrmosHPC',\n", " 'bufrmosLAMP',\n", " 'bufrmosMRF',\n", " 'bufrua',\n", " 'climate',\n", " 'common_obs_spatial',\n", " 'gfe',\n", " 'gfeEditArea',\n", " 'grid',\n", " 'maps',\n", " 'modelsounding',\n", " 'obs',\n", " 'pirep',\n", " 'practicewarning',\n", " 'profiler',\n", " 'radar',\n", " 'radar_spatial',\n", " 'satellite',\n", " 'sfcobs',\n", " 'topo',\n", " 'warning']" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from awips.dataaccess import DataAccessLayer\n", "import unittest\n", "\n", "DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n", "dataTypes = DataAccessLayer.getSupportedDatatypes()\n", "dataTypes.sort()\n", "list(dataTypes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getAvailableLocationNames()\n", "\n", "Now create a new data request, and set the data type to **grid** to request all available grids with **getAvailableLocationNames()**" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['AUTOSPE',\n", " 'CMC',\n", " 'ESTOFS',\n", " 'ETSS',\n", " 'FFG-ALR',\n", " 'FFG-FWR',\n", " 'FFG-KRF',\n", " 'FFG-MSR',\n", " 'FFG-ORN',\n", " 'FFG-PTR',\n", " 'FFG-RHA',\n", " 'FFG-RSA',\n", " 'FFG-STR',\n", " 'FFG-TAR',\n", " 'FFG-TIR',\n", " 'FFG-TUA',\n", " 'GEFS',\n", " 'GFS',\n", " 'GFS20',\n", " 'HFR-EAST_6KM',\n", " 'HFR-EAST_PR_6KM',\n", " 'HFR-US_EAST_DELAWARE_1KM',\n", " 'HFR-US_EAST_FLORIDA_2KM',\n", " 'HFR-US_EAST_NORTH_2KM',\n", " 'HFR-US_EAST_SOUTH_2KM',\n", " 'HFR-US_EAST_VIRGINIA_1KM',\n", " 'HFR-US_HAWAII_1KM',\n", " 'HFR-US_HAWAII_2KM',\n", " 'HFR-US_HAWAII_6KM',\n", " 'HFR-US_WEST_500M',\n", " 'HFR-US_WEST_CENCAL_2KM',\n", " 'HFR-US_WEST_LOSANGELES_1KM',\n", " 'HFR-US_WEST_LOSOSOS_1KM',\n", " 'HFR-US_WEST_NORTH_2KM',\n", " 'HFR-US_WEST_SANFRAN_1KM',\n", " 'HFR-US_WEST_SOCAL_2KM',\n", " 'HFR-US_WEST_WASHINGTON_1KM',\n", " 'HFR-WEST_6KM',\n", " 'HPCGuide',\n", " 'HPCqpfNDFD',\n", " 'HRRR',\n", " 'LAMP2p5',\n", " 'MRMS_0500',\n", " 'MRMS_1000',\n", " 'NAM12',\n", " 'NAM40',\n", " 'NOHRSC-SNOW',\n", " 'NationalBlend',\n", " 'RAP13',\n", " 'RTMA',\n", " 'RTOFS-Now-WestAtl',\n", " 'RTOFS-Now-WestConus',\n", " 'RTOFS-WestAtl',\n", " 'RTOFS-WestConus',\n", " 'SPCGuide',\n", " 'SeaIce',\n", " 'TPCWindProb',\n", " 'URMA25',\n", " 'WaveWatch']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "request = DataAccessLayer.newDataRequest()\n", "request.setDatatype(\"grid\")\n", "available_grids = DataAccessLayer.getAvailableLocationNames(request)\n", "available_grids.sort()\n", "list(available_grids)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getAvailableParameters()\n", "\n", "After datatype and model name (locationName) are set, you can query all available parameters with **getAvailableParameters()**" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['36SHRMi',\n", " '50dbzZ',\n", " 'AV',\n", " 'Along',\n", " 'AppT',\n", " 'BLI',\n", " 'BRN',\n", " 'BRNEHIi',\n", " 'BRNSHR',\n", " 'BRNmag',\n", " 'BRNvec',\n", " 'BdEPT06',\n", " 'BlkMag',\n", " 'BlkShr',\n", " 'CAPE',\n", " 'CFRZR',\n", " 'CICEP',\n", " 'CIn',\n", " 'CP',\n", " 'CP1hr',\n", " 'CPr',\n", " 'CPrD',\n", " 'CRAIN',\n", " 'CSNOW',\n", " 'CURU',\n", " 'CXR',\n", " 'CapeStk',\n", " 'Corf',\n", " 'CorfF',\n", " 'CorfFM',\n", " 'CorfM',\n", " 'CritT1',\n", " 'CumNrm',\n", " 'CumShr',\n", " 'DivF',\n", " 'DivFn',\n", " 'DivFs',\n", " 'DpD',\n", " 'DpT',\n", " 'EHI',\n", " 'EHI01',\n", " 'EHIi',\n", " 'EPT',\n", " 'EPTA',\n", " 'EPTC',\n", " 'EPTGrd',\n", " 'EPTGrdM',\n", " 'EPTs',\n", " 'EPVg',\n", " 'EPVs',\n", " 'EPVt1',\n", " 'EPVt2',\n", " 'ESP',\n", " 'ESP2',\n", " 'FVecs',\n", " 'FeatMot',\n", " 'FnVecs',\n", " 'FsVecs',\n", " 'Fzra1',\n", " 'Fzra2',\n", " 'GH',\n", " 'GHxSM',\n", " 'GHxSM2',\n", " 'Gust',\n", " 'HI',\n", " 'HI1',\n", " 'HI3',\n", " 'HI4',\n", " 'HIdx',\n", " 'HPBL',\n", " 'Heli',\n", " 'HeliC',\n", " 'INV',\n", " 'IPLayer',\n", " 'Into',\n", " 'KI',\n", " 'L-I',\n", " 'LIsfc2x',\n", " 'LM5',\n", " 'LM6',\n", " 'MAdv',\n", " 'MCon',\n", " 'MCon2',\n", " 'MLLCL',\n", " 'MMP',\n", " 'MMSP',\n", " 'MSFDi',\n", " 'MSFi',\n", " 'MSFmi',\n", " 'MSG',\n", " 'MTV',\n", " 'Mix1',\n", " 'Mix2',\n", " 'Mmag',\n", " 'MpV',\n", " 'NBE',\n", " 'NST',\n", " 'NST1',\n", " 'NST2',\n", " 'OmDiff',\n", " 'P',\n", " 'PAdv',\n", " 'PBE',\n", " 'PEC',\n", " 'PFrnt',\n", " 'PGrd',\n", " 'PGrd1',\n", " 'PGrdM',\n", " 'PIVA',\n", " 'PR',\n", " 'PTvA',\n", " 'PTyp',\n", " 'PVV',\n", " 'PW',\n", " 'PW2',\n", " 'PoT',\n", " 'PoTA',\n", " 'QPV1',\n", " 'QPV2',\n", " 'QPV3',\n", " 'QPV4',\n", " 'REFC',\n", " 'RH',\n", " 'RH_001_bin',\n", " 'RH_002_bin',\n", " 'RM5',\n", " 'RM6',\n", " 'RMprop',\n", " 'RMprop2',\n", " 'RRtype',\n", " 'RV',\n", " 'Rain1',\n", " 'Rain2',\n", " 'Rain3',\n", " 'Ro',\n", " 'SH',\n", " 'SHx',\n", " 'SLI',\n", " 'SNSQ',\n", " 'SNW',\n", " 'SNWA',\n", " 'SRMl',\n", " 'SRMlM',\n", " 'SRMm',\n", " 'SRMmM',\n", " 'SRMr',\n", " 'SRMrM',\n", " 'SSP',\n", " 'SSi',\n", " 'STP',\n", " 'STP1',\n", " 'Shear',\n", " 'ShrMag',\n", " 'SnD',\n", " 'Snow1',\n", " 'Snow2',\n", " 'Snow3',\n", " 'SnowT',\n", " 'St-Pr',\n", " 'StrTP',\n", " 'StrmMot',\n", " 'SuCP',\n", " 'T',\n", " 'TAdv',\n", " 'TGrd',\n", " 'TGrdM',\n", " 'TORi',\n", " 'TORi2',\n", " 'TP',\n", " 'TP1hr',\n", " 'TQIND',\n", " 'TShrMi',\n", " 'TV',\n", " 'TW',\n", " 'T_001_bin',\n", " 'Tdef',\n", " 'Tdend',\n", " 'ThGrd',\n", " 'Thom5',\n", " 'Thom5a',\n", " 'Thom6',\n", " 'TmDpD',\n", " 'Tmax',\n", " 'Tmin',\n", " 'Topo',\n", " 'TotQi',\n", " 'Tstk',\n", " 'TwMax',\n", " 'TwMin',\n", " 'Twstk',\n", " 'TxSM',\n", " 'USTM',\n", " 'VAdv',\n", " 'VAdvAdvection',\n", " 'VGP',\n", " 'VSTM',\n", " 'Vis',\n", " 'WCD',\n", " 'WD',\n", " 'WEASD',\n", " 'WEASD1hr',\n", " 'WGS',\n", " 'Wind',\n", " 'WndChl',\n", " 'ageoVC',\n", " 'ageoW',\n", " 'ageoWM',\n", " 'cCape',\n", " 'cCin',\n", " 'cTOT',\n", " 'capeToLvl',\n", " 'dCape',\n", " 'dP',\n", " 'dT',\n", " 'dVAdv',\n", " 'dZ',\n", " 'defV',\n", " 'del2gH',\n", " 'df',\n", " 'fGen',\n", " 'fnD',\n", " 'fsD',\n", " 'gamma',\n", " 'gammaE',\n", " 'geoVort',\n", " 'geoW',\n", " 'geoWM',\n", " 'loCape',\n", " 'maxEPT',\n", " 'minEPT',\n", " 'mixRat',\n", " 'msl-P',\n", " 'muCape',\n", " 'pV',\n", " 'pVeq',\n", " 'qDiv',\n", " 'qVec',\n", " 'qnVec',\n", " 'qsVec',\n", " 'shWlt',\n", " 'snoRat',\n", " 'snoRatCrocus',\n", " 'snoRatEMCSREF',\n", " 'snoRatOv2',\n", " 'snoRatSPC',\n", " 'snoRatSPCdeep',\n", " 'snoRatSPCsurface',\n", " 'staticCoriolis',\n", " 'staticSpacing',\n", " 'staticTopo',\n", " 'swtIdx',\n", " 'tTOT',\n", " 'tWind',\n", " 'tWindU',\n", " 'tWindV',\n", " 'uFX',\n", " 'uW',\n", " 'uWStk',\n", " 'ulSnoRat',\n", " 'vSmthW',\n", " 'vTOT',\n", " 'vW',\n", " 'vWStk',\n", " 'vertCirc',\n", " 'wDiv',\n", " 'wSp',\n", " 'wSp_001_bin',\n", " 'wSp_002_bin',\n", " 'wSp_003_bin',\n", " 'wSp_004_bin',\n", " 'zAGL']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "request.setLocationNames(\"RAP13\")\n", "availableParms = DataAccessLayer.getAvailableParameters(request)\n", "availableParms.sort()\n", "list(availableParms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getAvailableLevels()\n", "\n", "Selecting **\"T\"** for temperature." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0SFC\n", "350.0MB\n", "475.0MB\n", "610.0_40000.0FHAG\n", "225.0MB\n", "120.0_150.0BL\n", "900.0MB\n", "125.0MB\n", "0.0_610.0FHAG\n", "450.0MB\n", "575.0MB\n", "325.0MB\n", "100.0MB\n", "1000.0MB\n", "60.0_90.0BL\n", "275.0MB\n", "1.0PV\n", "950.0MB\n", "150.0MB\n", "1.5PV\n", "700.0MB\n", "825.0MB\n", "150.0_180.0BL\n", "250.0MB\n", "375.0MB\n", "1000.0_500.0MB\n", "800.0MB\n", "4000.0FHAG\n", "925.0MB\n", "2.0PV\n", "0.5PV\n", "0.0TROP\n", "750.0MB\n", "500.0MB\n", "625.0MB\n", "400.0MB\n", "0.0FHAG\n", "2.0FHAG\n", "875.0MB\n", "175.0MB\n", "0.0_1000.0FHAG\n", "850.0MB\n", "600.0MB\n", "725.0MB\n", "0.0_6000.0FHAG\n", "975.0MB\n", "550.0MB\n", "0.0_3000.0FHAG\n", "675.0MB\n", "425.0MB\n", "200.0MB\n", "0.0_30.0BL\n", "30.0_60.0BL\n", "650.0MB\n", "525.0MB\n", "300.0MB\n", "90.0_120.0BL\n", "1000.0FHAG\n", "775.0MB\n", "340.0_350.0K\n", "290.0_300.0K\n", "700.0_600.0MB\n", "700.0_300.0MB\n", "320.0Ke\n", "800.0_750.0MB\n", "60.0TILT\n", "5.3TILT\n", "1000.0_900.0MB\n", "340.0K\n", "5500.0_6000.0FHAG\n", "255.0K\n", "255.0_265.0K\n", "3000.0_6000.0FHAG\n", "25.0TILT\n", "2000.0FHAG\n", "0.0_500.0FHAG\n", "1000.0_850.0MB\n", "850.0_250.0MB\n", "280.0_290.0Ke\n", "1524.0FHAG\n", "320.0_330.0K\n", "0.0TILT\n", "310.0_320.0Ke\n", "310.0Ke\n", "330.0K\n", "900.0_800.0MB\n", "550.0_500.0MB\n", "2.4TILT\n", "50.0TILT\n", "3500.0FHAG\n", "35.0TILT\n", "12.0TILT\n", "300.0_310.0K\n", "3000.0_12000.0FHAG\n", "0.9TILT\n", "320.0K\n", "400.0_350.0MB\n", "500.0FHAG\n", "750.0_700.0MB\n", "1000.0_400.0MB\n", "345.0K\n", "250.0_260.0K\n", "300.0Ke\n", "290.0Ke\n", "950.0_900.0MB\n", "4572.0FHAG\n", "275.0_285.0Ke\n", "335.0Ke\n", "295.0_305.0Ke\n", "275.0_285.0K\n", "600.0_550.0MB\n", "310.0K\n", "9000.0FHAG\n", "335.0K\n", "1000.0_7000.0FHAG\n", "700.0_500.0MB\n", "9144.0FHAG\n", "325.0_335.0K\n", "2000.0_8000.0FHAG\n", "0.0_609.6FHAG\n", "300.0K\n", "0.0MAXOMEGA\n", "315.0_325.0K\n", "325.0K\n", "340.0Ke\n", "0.0_4000.0FHAG\n", "5000.0_5500.0FHAG\n", "300.0_250.0MB\n", "1.5TILT\n", "335.0_345.0K\n", "315.0K\n", "3.4TILT\n", "2500.0FHAG\n", "10000.0FHAG\n", "0.0_2000.0FHAG\n", "7000.0FHAG\n", "5000.0FHAG\n", "330.0Ke\n", "500.0_400.0MB\n", "1000.0_1500.0FHAG\n", "305.0K\n", "285.0_295.0Ke\n", "14.0TILT\n", "3000.0_3500.0FHAG\n", "325.0_335.0Ke\n", "2000.0_5000.0FHAG\n", "7620.0FHAG\n", "850.0_800.0MB\n", "6096.0FHAG\n", "6000.0_7000.0FHAG\n", "2000.0_7000.0FHAG\n", "9000.0_10000.0FHAG\n", "295.0Ke\n", "305.0Ke\n", "265.0_275.0K\n", "7000.0_8000.0FHAG\n", "3000.0_8000.0FHAG\n", "700.0_650.0MB\n", "1000.0_6000.0FHAG\n", "0.5TILT\n", "450.0_400.0MB\n", "1.8TILT\n", "330.0_340.0K\n", "800.0_700.0MB\n", "850.0_300.0MB\n", "6.0TILT\n", "900.0_850.0MB\n", "3657.6FHAG\n", "0.0_5000.0FHAG\n", "320.0_330.0Ke\n", "8.7TILT\n", "650.0_600.0MB\n", "600.0_400.0MB\n", "55.0TILT\n", "270.0_280.0Ke\n", "30.0TILT\n", "310.0_320.0K\n", "1500.0FHAG\n", "1000.0_950.0MB\n", "5500.0FHAG\n", "250.0_200.0MB\n", "500.0_1000.0FHAG\n", "400.0_300.0MB\n", "500.0_100.0MB\n", "1000.0_3000.0FHAG\n", "8000.0FHAG\n", "285.0Ke\n", "290.0K\n", "305.0_315.0K\n", "285.0_295.0K\n", "0.0_2500.0FHAG\n", "925.0_850.0MB\n", "275.0Ke\n", "1500.0_2000.0FHAG\n", "300.0_200.0MB\n", "260.0_270.0K\n", "2743.2FHAG\n", "3000.0FHAG\n", "315.0_325.0Ke\n", "600.0_500.0MB\n", "16.7TILT\n", "280.0K\n", "500.0_250.0MB\n", "40.0TILT\n", "3048.0FHAG\n", "400.0_200.0MB\n", "300.0_310.0Ke\n", "270.0_280.0K\n", "1000.0_700.0MB\n", "45.0TILT\n", "850.0_500.0MB\n", "2500.0_3000.0FHAG\n", "609.6FHAG\n", "0.0_8000.0FHAG\n", "295.0K\n", "4.3TILT\n", "295.0_305.0K\n", "330.0_340.0Ke\n", "270.0K\n", "4000.0_4500.0FHAG\n", "280.0_290.0K\n", "925.0_700.0MB\n", "0.0_1500.0FHAG\n", "260.0K\n", "10.0TILT\n", "3500.0_4000.0FHAG\n", "325.0Ke\n", "285.0K\n", "290.0_300.0Ke\n", "7.5TILT\n", "1828.8FHAG\n", "280.0Ke\n", "500.0_450.0MB\n", "305.0_315.0Ke\n", "250.0K\n", "4500.0FHAG\n", "1250.0FHAG\n", "0.0_10000.0FHAG\n", "4500.0_5000.0FHAG\n", "250.0_350.0K\n", "270.0Ke\n", "275.0K\n", "315.0Ke\n", "500.0_300.0MB\n", "350.0_300.0MB\n", "750.0FHAG\n", "19.5TILT\n", "2000.0_2500.0FHAG\n", "850.0_700.0MB\n", "350.0K\n", "265.0K\n", "6000.0FHAG\n", "8000.0_9000.0FHAG\n", "700.0_300.0LYRMB\n", "850.0_700.0LYRMB\n" ] } ], "source": [ "request.setParameters(\"T\")\n", "availableLevels = DataAccessLayer.getAvailableLevels(request)\n", "for lvl in availableLevels:\n", " print(lvl)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* **0.0SFC** is the Surface level\n", "* **FHAG** stands for Fixed Height Above Ground (in meters)\n", "* **NTAT** stands for Nominal Top of the ATmosphere\n", "* **BL** stands for Boundary Layer, where **0.0_30.0BL** reads as *0-30 mb above ground level* \n", "* **TROP** is the Tropopause level\n", "\n", "**request.setLevels()**\n", "\n", "For this example we will use Surface Temperature" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "request.setLevels(\"2.0FHAG\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getAvailableTimes()\n", "\n", "* **getAvailableTimes(request, True)** will return an object of *run times* - formatted as `YYYY-MM-DD HH:MM:SS`\n", "* **getAvailableTimes(request)** will return an object of all times - formatted as `YYYY-MM-DD HH:MM:SS (F:ff)`\n", "* **getForecastRun(cycle, times)** will return a DataTime array for a single forecast cycle." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cycles = DataAccessLayer.getAvailableTimes(request, True)\n", "times = DataAccessLayer.getAvailableTimes(request)\n", "fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)\n", "list(fcstRun)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DataAccessLayer.getGridData()\n", "\n", "Now that we have our `request` and DataTime `fcstRun` arrays ready, it's time to request the data array from EDEX." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Time : 2020-09-04 18:00:00\n", "Model: RAP13\n", "Parm : T\n", "Unit : K\n", "(337, 451)\n" ] } ], "source": [ "response = DataAccessLayer.getGridData(request, [fcstRun[-1]])\n", "for grid in response:\n", " data = grid.getRawData()\n", " lons, lats = grid.getLatLonCoords()\n", " print('Time :', str(grid.getDataTime()))\n", "\n", "print('Model:', str(grid.getLocationName()))\n", "print('Parm :', str(grid.getParameter()))\n", "print('Unit :', str(grid.getUnit()))\n", "print(data.shape)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }