python-awips/examples/notebooks/Grid_Levels_and_Parameters.ipynb

641 lines
461 KiB
Text
Raw Permalink Normal View History

2016-04-20 19:05:36 -05:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This examples covers the callable methods of the Python AWIPS DAF 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.changeEDEXHost()\n",
"\n",
"After DataAccessLayer is imported from the package `awips.dataaccess`, the first step is to define the EDEX data server hostname (`edex-cloud.unidata.ucar.edu` for these examples)\n",
"\n"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")"
]
},
{
"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",
2017-02-01 10:35:51 -07:00
"execution_count": 2,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false,
"scrolled": true
},
"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",
" 'ffmp',\n",
" 'gfe',\n",
" 'grid',\n",
" 'hydro',\n",
" 'ldadmesonet',\n",
" 'maps',\n",
" 'modelsounding',\n",
" 'obs',\n",
" 'pirep',\n",
" 'practicewarning',\n",
" 'profiler',\n",
" 'radar',\n",
" 'radar_spatial',\n",
" 'satellite',\n",
" 'sfcobs',\n",
2017-02-01 10:35:51 -07:00
" 'topo',\n",
" 'warning']"
]
},
2017-02-01 10:35:51 -07:00
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataTypes = DataAccessLayer.getSupportedDatatypes()\n",
"list(dataTypes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### DataAccessLayer.newDataRequest()\n",
"\n",
"Now create a new data request, and set the data type to **grid** and \"locationName\" to **RAP40** with **setDataType()** and **setLocationNames()**"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request = DataAccessLayer.newDataRequest()\n",
"request.setDatatype(\"grid\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### DataAccessLayer.getAvailableLocationNames()\n",
"\n",
"With datatype set to \"grid\", we can query all available grid names with **getAvailableLocationNames()**"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['CMC',\n",
" 'DGEX',\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",
" 'FNMOC-FAROP',\n",
2017-02-01 10:35:51 -07:00
" 'FNMOC-NCODA',\n",
" 'FNMOC-WW3',\n",
" 'GFS',\n",
" 'GFS20',\n",
2017-02-01 10:35:51 -07:00
" 'GribModel:7:14:108',\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",
" 'HPCqpf',\n",
" 'HPCqpfNDFD',\n",
" 'HRRR',\n",
" 'LAMP2p5',\n",
" 'MOSGuide',\n",
" 'MOSGuideExtended',\n",
2017-02-01 10:35:51 -07:00
" 'MRMS_0500',\n",
" 'MRMS_1000',\n",
" 'NAM12',\n",
" 'NAM40',\n",
" 'NAVGEM',\n",
" 'NCWF',\n",
" 'NOHRSC-SNOW',\n",
" 'NamDNG',\n",
" 'QPE-ALR',\n",
" 'QPE-FWR',\n",
" 'QPE-KRF',\n",
" 'QPE-MSR',\n",
" 'QPE-ORN',\n",
" 'QPE-TIR',\n",
" 'QPE-TUA',\n",
" 'RAP13',\n",
" 'RAP20',\n",
" 'RAP40',\n",
" 'RFCqpf',\n",
" 'RTMA',\n",
" 'UKMET-Global',\n",
" 'UKMET-MODEL1',\n",
" 'URMA25',\n",
2017-02-01 10:35:51 -07:00
" 'WaveWatch']"
]
},
2017-02-01 10:35:51 -07:00
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"available_grids = DataAccessLayer.getAvailableLocationNames(request)\n",
"available_grids.sort()\n",
"list(available_grids)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Set grid name with `setLocationNames()`"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
2017-02-01 10:35:51 -07:00
"request.setLocationNames(\"RAP13\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# List Available Parameters for a Grid\n",
"\n",
"### DataAccessLayer.getAvailableParameters()\n",
"\n",
"After datatype and model name (locationName) are set, you can query all available parameters with **getAvailableParameters()**"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 6,
"metadata": {
"collapsed": false
},
2016-04-20 19:05:36 -05:00
"outputs": [
{
"data": {
"text/plain": [
2017-02-01 10:35:51 -07:00
"['BLI',\n",
" 'CAPE',\n",
" 'CFRZR',\n",
" 'CICEP',\n",
" 'CIn',\n",
" 'CP1hr',\n",
" 'CRAIN',\n",
" 'CSNOW',\n",
" 'GH',\n",
" 'HPBL',\n",
" 'Heli',\n",
" 'LgSP1hr',\n",
" 'MMSP',\n",
" 'P',\n",
" 'PR',\n",
" 'PVV',\n",
" 'PW',\n",
2017-02-01 10:35:51 -07:00
" 'REFC',\n",
" 'RH',\n",
" 'SLI',\n",
" 'SnD',\n",
" 'T',\n",
" 'USTM',\n",
" 'VSTM',\n",
" 'Vis',\n",
" 'WEASD',\n",
" 'WEASD1hr',\n",
" 'WGS',\n",
" 'uW',\n",
" 'vW']"
]
},
2017-02-01 10:35:51 -07:00
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
2016-04-20 19:05:36 -05:00
}
],
"source": [
"availableParms = DataAccessLayer.getAvailableParameters(request)\n",
"availableParms.sort()\n",
"list(availableParms)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### setParameters()\n",
2016-04-20 19:05:36 -05:00
"\n",
"\n",
"set the request parameter"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"request.setParameters(\"T\")"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## List Available Levels for Parameter\n",
"\n",
"Using **DataAccessLayer.getAvailableLevels()**"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 8,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false,
"scrolled": true
2016-04-20 19:05:36 -05:00
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2017-02-01 10:35:51 -07:00
"150.0MB\n",
"575.0MB\n",
2017-02-01 10:35:51 -07:00
"90.0_120.0BL\n",
"925.0MB\n",
"400.0MB\n",
"900.0MB\n",
"700.0MB\n",
2017-02-01 10:35:51 -07:00
"100.0MB\n",
"60.0_90.0BL\n",
"975.0MB\n",
"450.0MB\n",
"225.0MB\n",
2016-04-20 19:05:36 -05:00
"550.0MB\n",
2017-02-01 10:35:51 -07:00
"750.0MB\n",
"425.0MB\n",
"350.0MB\n",
"525.0MB\n",
"500.0MB\n",
"2.0FHAG\n",
"675.0MB\n",
"150.0_180.0BL\n",
2017-02-01 10:35:51 -07:00
"200.0MB\n",
"0.0TROP\n",
"375.0MB\n",
"1000.0MB\n",
"30.0_60.0BL\n",
2017-02-01 10:35:51 -07:00
"650.0MB\n",
"950.0MB\n",
"825.0MB\n",
2017-02-01 10:35:51 -07:00
"475.0MB\n",
"125.0MB\n",
"800.0MB\n",
2017-02-01 10:35:51 -07:00
"775.0MB\n",
"625.0MB\n",
2017-02-01 10:35:51 -07:00
"600.0MB\n",
"275.0MB\n",
"300.0MB\n",
"725.0MB\n",
"325.0MB\n",
"250.0MB\n",
"0.0_30.0BL\n",
"875.0MB\n",
"120.0_150.0BL\n",
"850.0MB\n",
"175.0MB\n"
2016-04-20 19:05:36 -05:00
]
}
],
"source": [
"availableLevels = DataAccessLayer.getAvailableLevels(request)\n",
"for level in availableLevels:\n",
" print(level)"
]
},
{
"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",
2016-04-20 19:05:36 -05:00
"\n",
"For this example we will use Surface Temperature"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
2017-02-01 10:35:51 -07:00
"request.setLevels(\"2.0FHAG\")"
2016-04-20 19:05:36 -05:00
]
},
{
"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",
2017-02-01 10:35:51 -07:00
"* **getForecastRun(cycle, times)** will return a DataTime array for a single forecast cycle."
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 10,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
2017-02-01 10:35:51 -07:00
"[<DataTime instance: 2017-02-01 16:00:00 (1) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (2) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (3) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (4) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (6) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (15) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (16) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (17) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (18) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (19) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (20) >,\n",
" <DataTime instance: 2017-02-01 16:00:00 (21) >]"
]
},
2017-02-01 10:35:51 -07:00
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
2017-02-01 10:35:51 -07:00
"fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)\n",
"list(fcstRun)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Request a Grid\n",
"\n",
"### 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",
2017-02-01 10:35:51 -07:00
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2017-02-01 10:35:51 -07:00
"('Time :', '2017-02-01 16:00:00 (21)')\n",
"('Model:', 'RAP13')\n",
"('Parm :', 'T')\n",
"('Unit :', 'K')\n",
2017-02-01 10:35:51 -07:00
"(337, 451)\n"
]
}
],
"source": [
2017-02-01 10:35:51 -07:00
"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",
2016-04-20 19:05:36 -05:00
"\n",
"print('Model:', str(grid.getLocationName()))\n",
"print('Parm :', str(grid.getParameter()))\n",
"print('Unit :', str(grid.getUnit()))\n",
"print(data.shape)"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plot a Grid with Matplotlib and Cartopy\n",
2017-02-01 10:35:51 -07:00
"\n",
"## 1. pcolormesh"
2016-04-20 19:05:36 -05:00
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 15,
2016-04-20 19:05:36 -05:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2017-02-01 10:35:51 -07:00
"image/png": "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\nHEzHjh1N2zLzySefsGn
2016-04-20 19:05:36 -05:00
"text/plain": [
2017-02-01 10:35:51 -07:00
"<matplotlib.figure.Figure at 0x10f214250>"
2016-04-20 19:05:36 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib\n",
"import cartopy.crs as ccrs\n",
2017-02-01 10:35:51 -07:00
"import cartopy.feature as cfeature\n",
"from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER\n",
2016-04-20 19:05:36 -05:00
"import numpy as np\n",
2017-02-01 10:35:51 -07:00
"import numpy.ma as ma\n",
"from scipy.io import loadmat\n",
"def make_map(bbox, projection=ccrs.PlateCarree()):\n",
" fig, ax = plt.subplots(figsize=(16, 9),\n",
" subplot_kw=dict(projection=projection))\n",
" ax.set_extent(bbox)\n",
" ax.coastlines(resolution='50m')\n",
" gl = ax.gridlines(draw_labels=True)\n",
" gl.xlabels_top = gl.ylabels_right = False\n",
" gl.xformatter = LONGITUDE_FORMATTER\n",
" gl.yformatter = LATITUDE_FORMATTER\n",
" return fig, ax\n",
2016-04-20 19:05:36 -05:00
"\n",
"cmap = plt.get_cmap('rainbow')\n",
2017-02-01 10:35:51 -07:00
"bbox = [lons.min(), lons.max(), lats.min(), lats.max()]\n",
"fig, ax = make_map(bbox=bbox)\n",
"cs = ax.pcolormesh(lons, lats, data, cmap=cmap)\n",
"cbar = fig.colorbar(cs, extend='both', shrink=0.5, orientation='horizontal')\n",
"cbar.set_label(str(grid.getLocationName()) +\" \" \\\n",
" + str(grid.getLevel()) + \" \" \\\n",
" + str(grid.getParameter()) \\\n",
" + \" (\" + str(grid.getUnit()) + \") \" \\\n",
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2017-02-01 10:35:51 -07:00
"## 2. contourf"
]
},
{
"cell_type": "code",
2017-02-01 10:35:51 -07:00
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2017-02-01 10:35:51 -07:00
"image/png": "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\nePAALy8vHB0d+eyzzxg
"text/plain": [
2017-02-01 10:35:51 -07:00
"<matplotlib.figure.Figure at 0x10f0f6910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
2017-02-01 10:35:51 -07:00
"fig2, ax2 = make_map(bbox=bbox)\n",
"cs2 = ax2.contourf(lons, lats, data, 80, cmap=cmap,\n",
" vmin=data.min(), vmax=data.max())\n",
"cbar2 = fig2.colorbar(cs2, extend='both', shrink=0.5, orientation='horizontal')\n",
"cbar2.set_label(str(grid.getLocationName()) +\" \" \\\n",
" + str(grid.getLevel()) + \" \" \\\n",
" + str(grid.getParameter()) \\\n",
" + \" (\" + str(grid.getUnit()) + \") \" \\\n",
" + \"valid \" + str(grid.getDataTime().getRefTime()))"
2016-04-20 19:05:36 -05:00
]
2017-02-01 10:35:51 -07:00
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
2016-04-20 19:05:36 -05:00
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
2017-02-01 10:35:51 -07:00
"version": "2.7.11"
2016-04-20 19:05:36 -05:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}