python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html

527 lines
61 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Forecast Model Vertical Sounding &mdash; python-awips documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=19f00094" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js?v=b3ba4146"></script>
<script src="../../_static/doctools.js?v=888ff710"></script>
<script src="../../_static/sphinx_highlight.js?v=4825356b"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="author" title="About these documents" href="../../about.html" />
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="GOES CIRA Product Writer" href="GOES_CIRA_Product_Writer.html" />
<link rel="prev" title="Colorized Grid Data" href="Colorized_Grid_Data.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
python-awips
</a>
<div class="version">
20.1
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../api/index.html">API Documentation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../datatypes.html">Available Data Types</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Data Plotting Examples</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Colored_Surface_Temperature_Plot.html">Colored Surface Temperature Plot</a></li>
<li class="toctree-l2"><a class="reference internal" href="Colorized_Grid_Data.html">Colorized Grid Data</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Forecast Model Vertical Sounding</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#objectives">Objectives</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#table-of-contents">Table of Contents</a></li>
<li class="toctree-l4"><a class="reference internal" href="#imports">1 Imports</a></li>
<li class="toctree-l4"><a class="reference internal" href="#edex-connection">2 EDEX Connection</a></li>
<li class="toctree-l4"><a class="reference internal" href="#define-useful-variables">3 Define Useful Variables</a></li>
<li class="toctree-l4"><a class="reference internal" href="#function-get-surface-data">4 Function: get_surface_data()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#function-get-levels-data">5 Function: get_levels_data()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#function-plot-skewt">6 Function: plot_skewT()</a></li>
<li class="toctree-l4"><a class="reference internal" href="#retrieve-necessary-plotting-data">7 Retrieve Necessary Plotting Data</a></li>
<li class="toctree-l4"><a class="reference internal" href="#skew-t-log-p">8 Skew-T/Log-P</a></li>
<li class="toctree-l4"><a class="reference internal" href="#model-sounding-comparison">9 Model Sounding Comparison</a></li>
<li class="toctree-l4"><a class="reference internal" href="#see-also">10 See Also</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="GOES_CIRA_Product_Writer.html">GOES CIRA Product Writer</a></li>
<li class="toctree-l2"><a class="reference internal" href="Grid_Levels_and_Parameters.html">Grid Levels and Parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="METAR_Station_Plot_with_MetPy.html">METAR Station Plot with MetPy</a></li>
<li class="toctree-l2"><a class="reference internal" href="Map_Resources_and_Topography.html">Map Resources and Topography</a></li>
<li class="toctree-l2"><a class="reference internal" href="Model_Sounding_Data.html">Model Sounding Data</a></li>
<li class="toctree-l2"><a class="reference internal" href="NEXRAD_Level3_Radar.html">NEXRAD Level3 Radar</a></li>
<li class="toctree-l2"><a class="reference internal" href="Precip_Accumulation_Region_of_Interest.html">Precip Accumulation Region of Interest</a></li>
<li class="toctree-l2"><a class="reference internal" href="Regional_Surface_Obs_Plot.html">Regional Surface Obs Plot</a></li>
<li class="toctree-l2"><a class="reference internal" href="Satellite_Imagery.html">Satellite Imagery</a></li>
<li class="toctree-l2"><a class="reference internal" href="Upper_Air_BUFR_Soundings.html">Upper Air BUFR Soundings</a></li>
<li class="toctree-l2"><a class="reference internal" href="Watch_Warning_and_Advisory_Plotting.html">Watch Warning and Advisory Plotting</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../dev.html">Development Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../gridparms.html">Grid Parameters</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../about.html">About Unidata AWIPS</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">python-awips</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Data Plotting Examples</a></li>
<li class="breadcrumb-item active">Forecast Model Vertical Sounding</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/examples/generated/Forecast_Model_Vertical_Sounding.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="forecast-model-vertical-sounding">
<h1>Forecast Model Vertical Sounding<a class="headerlink" href="#forecast-model-vertical-sounding" title="Permalink to this heading"></a></h1>
<p><a class="reference external" href="http://nbviewer.ipython.org/github/Unidata/python-awips/blob/master/examples/notebooks/Forecast_Model_Vertical_Sounding.ipynb">Notebook</a>
Python-AWIPS Tutorial Notebook</p>
<hr class="docutils" />
<section id="objectives">
<h2>Objectives<a class="headerlink" href="#objectives" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>Use python-awips to connect to an edex server</p></li>
<li><p>Request data using the <a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding
class</a>
in addition to using the normal <a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">DataAccess
class</a></p></li>
<li><p>Create and compare vertical sounding from different AWIPS model data
with isobaric levels</p></li>
<li><p>Use <a class="reference external" href="https://shapely.readthedocs.io/en/stable/reference/shapely.Point.html">Shapely Point
geometry</a>
to define a point</p></li>
<li><p>Convert between units when necessary</p></li>
<li><p>Use MetPy to create
<a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html">SkewT</a>
and
<a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html">Hodograph</a>
plots</p></li>
</ul>
<hr class="docutils" />
<section id="table-of-contents">
<h3>Table of Contents<a class="headerlink" href="#table-of-contents" title="Permalink to this heading"></a></h3>
<div class="line-block">
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#imports">1
Imports</a></div>
<div class="line"><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#edex-connection">2 EDEX
Connection</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#define-useful-variables">3 Define Useful
Variables</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#function-get-surface-data">4 Function:
get_surface_data()</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#function-get-levels-data">5 Function:
get_levels_data()</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#function-plot-skewt">6 Function:
plot_skewT()</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#retrieve-necessary-plotting-data">7 Retrieve Necessary Plotting
Data</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#skew-t-log-p">8
Skew-T/Log-P</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#model-sounding-comparison">9 Model Sounding
Comparison</a></div>
<div class="line"><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#see-also">10 See
Also</a></div>
<div class="line">    <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#related-notebooks">10.1 Related
Notebooks</a></div>
<div class="line">    <a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html#additional-documentation">10.2 Additional
Documentation</a></div>
</div>
</section>
<section id="imports">
<h3>1 Imports<a class="headerlink" href="#imports" title="Permalink to this heading"></a></h3>
<p>The imports below are used throughout the notebook. Note the first
import is coming directly from python-awips and allows us to connect to
an EDEX server. The subsequent imports are for data manipulation and
visualization.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">awips.dataaccess</span> <span class="kn">import</span> <span class="n">DataAccessLayer</span><span class="p">,</span> <span class="n">ModelSounding</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">metpy.plots</span> <span class="kn">import</span> <span class="n">SkewT</span><span class="p">,</span> <span class="n">Hodograph</span>
<span class="kn">from</span> <span class="nn">metpy.units</span> <span class="kn">import</span> <span class="n">units</span>
<span class="kn">from</span> <span class="nn">mpl_toolkits.axes_grid1.inset_locator</span> <span class="kn">import</span> <span class="n">inset_axes</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sqrt</span>
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Point</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="edex-connection">
<h3>2 EDEX Connection<a class="headerlink" href="#edex-connection" title="Permalink to this heading"></a></h3>
<p>First we establish a connection to Unidatas public EDEX server. This
sets the proper server on the <strong>DataAccessLayer</strong>, which we will use
numerous times throughout the notebook.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">server</span> <span class="o">=</span> <span class="s1">&#39;edex-cloud.unidata.ucar.edu&#39;</span>
<span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">changeEDEXHost</span><span class="p">(</span><span class="n">server</span><span class="p">)</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="define-useful-variables">
<h3>3 Define Useful Variables<a class="headerlink" href="#define-useful-variables" title="Permalink to this heading"></a></h3>
<p>The plotting in this notebook needs a model name, a location point
(defined by latitude and longitude), and the most recent time range with
the initial forecast run.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Note the order is Lon,Lat and not Lat,Lon</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mf">104.67</span><span class="p">,</span><span class="mf">39.87</span><span class="p">)</span>
<span class="n">model</span><span class="o">=</span><span class="s2">&quot;NAM40&quot;</span>
<span class="c1"># Get latest forecast cycle run</span>
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">&quot;grid&quot;</span><span class="p">)</span>
<span class="n">timeReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
<span class="n">fcstRun</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
<span class="n">timeRange</span> <span class="o">=</span> <span class="p">[</span><span class="n">fcstRun</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="n">model</span> <span class="o">+</span> <span class="s2">&quot; forecast time &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">timeRange</span><span class="p">))</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="p">[</span><span class="o">&lt;</span><span class="n">DataTime</span> <span class="n">instance</span><span class="p">:</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span> <span class="o">&gt;</span><span class="p">]</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="function-get-surface-data">
<h3>4 Function: get_surface_data()<a class="headerlink" href="#function-get-surface-data" title="Permalink to this heading"></a></h3>
<p>This function is used to get the initial forecast model data for surface
height. This is done separately from the rest of the heights to
determine the surface pressure. It uses the
<a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding</a>
data object from python-awips to retrieve all the relevant information.</p>
<p>This function takes the model name, location, and time as attributes,
and returns arrays for pressure, temperature, dewpoint, and the u and v
wind components.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_surface_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; model name, location, and timeRange desire &quot;&quot;&quot;</span>
<span class="c1"># request data and sort response</span>
<span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span> <span class="o">=</span> <span class="p">[],[],[],[],[]</span>
<span class="n">use_parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;T&#39;</span><span class="p">,</span><span class="s1">&#39;DpT&#39;</span><span class="p">,</span><span class="s1">&#39;uW&#39;</span><span class="p">,</span><span class="s1">&#39;vW&#39;</span><span class="p">,</span><span class="s1">&#39;P&#39;</span><span class="p">]</span>
<span class="n">use_level</span> <span class="o">=</span> <span class="s2">&quot;0.0FHAG&quot;</span>
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="p">[</span><span class="n">use_level</span><span class="p">],</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
<span class="n">pressure</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">&#39;P&#39;</span><span class="p">]))</span>
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">&#39;T&#39;</span><span class="p">]))</span>
<span class="n">dpt</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">&#39;DpT&#39;</span><span class="p">]))</span>
<span class="n">ucomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">&#39;uW&#39;</span><span class="p">]))</span>
<span class="n">vcomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">use_level</span><span class="p">][</span><span class="s1">&#39;vW&#39;</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Found surface record at &quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">pressure</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;MB&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;sndObject returned empty for query [&quot;</span>
<span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">use_parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">use_level</span><span class="p">))</span> <span class="o">+</span><span class="s2">&quot;]&quot;</span><span class="p">)</span>
<span class="c1"># return information for plotting</span>
<span class="k">return</span> <span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="function-get-levels-data">
<h3>5 Function: get_levels_data()<a class="headerlink" href="#function-get-levels-data" title="Permalink to this heading"></a></h3>
<p>This function is similar to <em>get_surface_data()</em>, except it gets data
values for presure heights above the surface. It uses the
<a class="reference external" href="http://unidata.github.io/python-awips/api/ModelSounding.html">ModelSounding</a>
data object from python-awips to retrieve all the relevant information.</p>
<p>It takes the model name, location, and time (similar to the other
function), and also takes the instantiated pressure, temperature,
dewpoint, and wind vector arrays.</p>
<p>It returns the fully populated pressure, temperature, dewpoint,
u-component, v-component, and computed wind arrays.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">get_levels_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">,</span> <span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">):</span>
<span class="c1"># Get isobaric levels with our requested parameters</span>
<span class="n">parms</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;T&#39;</span><span class="p">,</span><span class="s1">&#39;DpT&#39;</span><span class="p">,</span><span class="s1">&#39;uW&#39;</span><span class="p">,</span><span class="s1">&#39;vW&#39;</span><span class="p">]</span>
<span class="n">levelReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">&quot;grid&quot;</span><span class="p">,</span> <span class="n">envelope</span><span class="o">=</span><span class="n">point</span><span class="p">)</span>
<span class="n">levelReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">model</span><span class="p">)</span>
<span class="n">levelReq</span><span class="o">.</span><span class="n">setParameters</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">parms</span><span class="p">))</span>
<span class="n">availableLevels</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableLevels</span><span class="p">(</span><span class="n">levelReq</span><span class="p">)</span>
<span class="c1"># Clean levels list of unit string (MB, FHAG, etc.)</span>
<span class="n">levels</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">availableLevels</span><span class="p">:</span>
<span class="n">name</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;MB&#39;</span> <span class="ow">in</span> <span class="n">name</span> <span class="ow">and</span> <span class="s1">&#39;_&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">name</span><span class="p">:</span>
<span class="c1"># If this level is above (less than in mb) our 0.0FHAG record</span>
<span class="k">if</span> <span class="nb">float</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;MB&#39;</span><span class="p">,</span><span class="s1">&#39;&#39;</span><span class="p">))</span> <span class="o">&lt;</span> <span class="n">pressure</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">levels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lvl</span><span class="p">)</span>
<span class="c1"># Get Sounding</span>
<span class="n">sndObject</span> <span class="o">=</span> <span class="n">ModelSounding</span><span class="o">.</span><span class="n">getSounding</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">levels</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">sndObject</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;sndObject returned empty for query [&quot;</span>
<span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">parms</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">levels</span><span class="p">))</span> <span class="o">+</span><span class="s2">&quot;]&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">time</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">:</span>
<span class="k">for</span> <span class="n">lvl</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">]</span><span class="o">.</span><span class="n">levels</span><span class="p">():</span>
<span class="k">for</span> <span class="n">parm</span> <span class="ow">in</span> <span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">]</span><span class="o">.</span><span class="n">parameters</span><span class="p">():</span>
<span class="k">if</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">&quot;T&quot;</span><span class="p">:</span>
<span class="n">temp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s2">&quot;DpT&quot;</span><span class="p">:</span>
<span class="n">dpt</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">&#39;uW&#39;</span><span class="p">:</span>
<span class="n">ucomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
<span class="k">elif</span> <span class="n">parm</span> <span class="o">==</span> <span class="s1">&#39;vW&#39;</span><span class="p">:</span>
<span class="n">vcomp</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">]))</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;WHAT IS THIS&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">sndObject</span><span class="o">.</span><span class="n">_dataDict</span><span class="p">[</span><span class="n">time</span><span class="p">][</span><span class="n">lvl</span><span class="p">][</span><span class="n">parm</span><span class="p">])</span>
<span class="c1"># Pressure is our requested level rather than a returned parameter</span>
<span class="n">pressure</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">lvl</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;MB&#39;</span><span class="p">,</span><span class="s1">&#39;&#39;</span><span class="p">)))</span>
<span class="c1"># convert to numpy.array()</span>
<span class="n">pressure</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span>
<span class="n">temp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">temp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
<span class="n">dpt</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">dpt</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">-</span> <span class="mf">273.15</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="o">.</span><span class="n">degC</span>
<span class="n">ucomp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">ucomp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">&#39;m/s&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">&#39;knots&#39;</span><span class="p">)</span>
<span class="n">vcomp</span> <span class="o">=</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">vcomp</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">float</span><span class="p">)</span> <span class="o">*</span> <span class="n">units</span><span class="p">(</span><span class="s1">&#39;m/s&#39;</span><span class="p">))</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s1">&#39;knots&#39;</span><span class="p">)</span>
<span class="n">wind</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">ucomp</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">vcomp</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">levels</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; levels between &quot;</span> <span class="o">+</span>
<span class="nb">str</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="nb">max</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; and &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%.1f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="nb">min</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;MB&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">pressure</span><span class="p">,</span><span class="n">temp</span><span class="p">,</span><span class="n">dpt</span><span class="p">,</span><span class="n">ucomp</span><span class="p">,</span><span class="n">vcomp</span><span class="p">,</span><span class="n">wind</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="function-plot-skewt">
<h3>6 Function: plot_skewT()<a class="headerlink" href="#function-plot-skewt" title="Permalink to this heading"></a></h3>
<p>Since were plotting many different models for comparison, all that code
was used to create this function.</p>
<p>The function takes the model name, reference time, and the pressure,
temperature, dewpoint, u-component, v-component, and wind arrays. It
plots a skewT and hodograph using metpy.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">plot_skewT</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span> <span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">,</span> <span class="n">wind</span><span class="p">,</span> <span class="n">refTime</span><span class="p">):</span>
<span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;figure.figsize&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">14</span><span class="p">)</span>
<span class="c1"># Skew-T</span>
<span class="n">skew</span> <span class="o">=</span> <span class="n">SkewT</span><span class="p">(</span><span class="n">rotation</span><span class="o">=</span><span class="mi">45</span><span class="p">)</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">dpt</span><span class="p">,</span> <span class="s1">&#39;g&#39;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot_barbs</span><span class="p">(</span><span class="n">pressure</span><span class="p">,</span> <span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">)</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot_dry_adiabats</span><span class="p">()</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot_moist_adiabats</span><span class="p">()</span>
<span class="n">skew</span><span class="o">.</span><span class="n">plot_mixing_lines</span><span class="p">(</span><span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;:&#39;</span><span class="p">)</span>
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">1000</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">pressure</span><span class="p">))</span>
<span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="o">-</span><span class="mi">50</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># Title</span>
<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="n">modelName</span> <span class="o">+</span> <span class="s2">&quot; (&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;) &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">refTime</span><span class="p">))</span>
<span class="c1"># Hodograph</span>
<span class="n">ax_hod</span> <span class="o">=</span> <span class="n">inset_axes</span><span class="p">(</span><span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="p">,</span> <span class="s1">&#39;40%&#39;</span><span class="p">,</span> <span class="s1">&#39;40%&#39;</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="n">h</span> <span class="o">=</span> <span class="n">Hodograph</span><span class="p">(</span><span class="n">ax_hod</span><span class="p">,</span> <span class="n">component_range</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">wind</span><span class="o">.</span><span class="n">magnitude</span><span class="p">))</span>
<span class="n">h</span><span class="o">.</span><span class="n">add_grid</span><span class="p">(</span><span class="n">increment</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
<span class="n">h</span><span class="o">.</span><span class="n">plot_colormapped</span><span class="p">(</span><span class="n">ucomp</span><span class="p">,</span> <span class="n">vcomp</span><span class="p">,</span> <span class="n">wind</span><span class="p">)</span>
<span class="c1"># Dotted line at 0C isotherm</span>
<span class="n">l</span> <span class="o">=</span> <span class="n">skew</span><span class="o">.</span><span class="n">ax</span><span class="o">.</span><span class="n">axvline</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="retrieve-necessary-plotting-data">
<h3>7 Retrieve Necessary Plotting Data<a class="headerlink" href="#retrieve-necessary-plotting-data" title="Permalink to this heading"></a></h3>
<p>First we get the initial data at surface level using the
get_surface_data function, and then pass those initial data arrays onto
the get_levels_data request to finish populating for additional heights
needed for Skew-T plots. We want to keep track of the pressure,
temeperature, dewpoint, u-component, v-component, and wind arrays so we
store them in variables to use later on.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="n">get_surface_data</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">timeRange</span><span class="p">)</span>
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span> <span class="o">=</span> <span class="n">get_levels_data</span><span class="p">(</span><span class="n">model</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">timeRange</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">833.2</span><span class="n">MB</span>
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">833.2</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
</pre></div>
</div>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="skew-t-log-p">
<h3>8 Skew-T/Log-P<a class="headerlink" href="#skew-t-log-p" title="Permalink to this heading"></a></h3>
<p>Here we use our plot_skewT function to generate our skewT &amp; hodograph
charts for the data we retreived so far. This is where the pressure,
temperature, dewpoint, and wind data is needed.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">plot_skewT</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">timeRange</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</pre></div>
</div>
<img alt="../../_images/Forecast_Model_Vertical_Sounding_25_0.png" src="../../_images/Forecast_Model_Vertical_Sounding_25_0.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="model-sounding-comparison">
<h3>9 Model Sounding Comparison<a class="headerlink" href="#model-sounding-comparison" title="Permalink to this heading"></a></h3>
<p>Now that we know how to retreive and plot the data for one model, we can
run a loop to retreive data for various models and plot them for
comparison. In this example well also plot RAP13 and GFS20 data to
compare with NAM40.</p>
<p>This is also where our functions become so important, because we can
easily recall all that logic and keep this for-loop fairly simple.</p>
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="n">models</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;RAP13&quot;</span><span class="p">,</span> <span class="s2">&quot;GFS20&quot;</span><span class="p">,</span> <span class="s2">&quot;NAM40&quot;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">modelName</span> <span class="ow">in</span> <span class="n">models</span><span class="p">:</span>
<span class="n">timeReq</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">newDataRequest</span><span class="p">(</span><span class="s2">&quot;grid&quot;</span><span class="p">)</span>
<span class="n">timeReq</span><span class="o">.</span><span class="n">setLocationNames</span><span class="p">(</span><span class="n">modelName</span><span class="p">)</span>
<span class="n">cycles</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">times</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getAvailableTimes</span><span class="p">(</span><span class="n">timeReq</span><span class="p">)</span>
<span class="n">fr</span> <span class="o">=</span> <span class="n">DataAccessLayer</span><span class="o">.</span><span class="n">getForecastRun</span><span class="p">(</span><span class="n">cycles</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">times</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Using &quot;</span> <span class="o">+</span> <span class="n">modelName</span> <span class="o">+</span> <span class="s2">&quot; forecast time &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">fr</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span>
<span class="n">tr</span> <span class="o">=</span> <span class="p">[</span><span class="n">fr</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span> <span class="o">=</span> <span class="n">get_surface_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">tr</span><span class="p">)</span>
<span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span> <span class="o">=</span> <span class="n">get_levels_data</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">point</span><span class="p">,</span><span class="n">tr</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">)</span>
<span class="c1"># Skew-T</span>
<span class="n">plot_skewT</span><span class="p">(</span><span class="n">modelName</span><span class="p">,</span><span class="n">p</span><span class="p">,</span><span class="n">t</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">,</span><span class="n">w</span><span class="p">,</span><span class="n">tr</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">RAP13</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">19</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">839.4</span><span class="n">MB</span>
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">839.4</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
</pre></div>
</div>
<img alt="../../_images/Forecast_Model_Vertical_Sounding_28_1.png" src="../../_images/Forecast_Model_Vertical_Sounding_28_1.png" />
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">GFS20</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">12</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">842.5</span><span class="n">MB</span>
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">842.5</span> <span class="ow">and</span> <span class="mf">100.0</span><span class="n">MB</span>
</pre></div>
</div>
<img alt="../../_images/Forecast_Model_Vertical_Sounding_28_3.png" src="../../_images/Forecast_Model_Vertical_Sounding_28_3.png" />
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Using</span> <span class="n">NAM40</span> <span class="n">forecast</span> <span class="n">time</span> <span class="mi">2023</span><span class="o">-</span><span class="mi">07</span><span class="o">-</span><span class="mi">25</span> <span class="mi">18</span><span class="p">:</span><span class="mi">00</span><span class="p">:</span><span class="mi">00</span>
<span class="n">Found</span> <span class="n">surface</span> <span class="n">record</span> <span class="n">at</span> <span class="mf">833.8</span><span class="n">MB</span>
<span class="n">Using</span> <span class="mi">32</span> <span class="n">levels</span> <span class="n">between</span> <span class="mf">833.8</span> <span class="ow">and</span> <span class="mf">50.0</span><span class="n">MB</span>
</pre></div>
</div>
<img alt="../../_images/Forecast_Model_Vertical_Sounding_28_5.png" src="../../_images/Forecast_Model_Vertical_Sounding_28_5.png" />
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
</section>
<hr class="docutils" />
<section id="see-also">
<h3>10 See Also<a class="headerlink" href="#see-also" title="Permalink to this heading"></a></h3>
<section id="related-notebooks">
<h4>10.1 Related Notebooks<a class="headerlink" href="#related-notebooks" title="Permalink to this heading"></a></h4>
<ul class="simple">
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Grid_Levels_and_Parameters.html">Grid Levels and
Parameters</a></p></li>
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Upper_Air_BUFR_Soundings.html">Upper Air BUFR
Soundings</a></p></li>
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/examples/generated/Model_Sounding_Data.html">Model Sounding
Data</a></p></li>
</ul>
</section>
<section id="additional-documentation">
<h4>10.2 Additional Documentation<a class="headerlink" href="#additional-documentation" title="Permalink to this heading"></a></h4>
<p><strong>python-awips:</strong></p>
<ul class="simple">
<li><p><a class="reference external" href="http://unidata.github.io/python-awips/api/DataAccessLayer.html">awips.DataAccessLayer</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/python-awips/api/ModelSounding.html">awips.ModelSounding</a></p></li>
</ul>
<p><strong>matplotlib:</strong></p>
<ul class="simple">
<li><p><a class="reference external" href="https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.html">matplotlib.pyplot</a></p></li>
</ul>
<p><strong>MetPy</strong></p>
<ul class="simple">
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_speed.html">metpy.wind_speed</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.wind_direction.html">metpy.wind_direction</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.vapor_pressure.html">metpy.vapor_pressure</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.calc.dewpoint.html">metpy.dewpoint</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.SkewT.html">metpy.skewt</a></p></li>
<li><p><a class="reference external" href="https://unidata.github.io/MetPy/latest/api/generated/metpy.plots.Hodograph.html">metpy.hodograph</a></p></li>
</ul>
<p><a class="reference external" href="https://unidata.github.io/python-awips/examples/generated/Forecast_Model_Vertical_Sounding.html">Top</a></p>
<hr class="docutils" />
</section>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="Colorized_Grid_Data.html" class="btn btn-neutral float-left" title="Colorized Grid Data" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="GOES_CIRA_Product_Writer.html" class="btn btn-neutral float-right" title="GOES CIRA Product Writer" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018, NSF Unidata.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>