#!/usr/bin/env python # coding: utf-8 # # Test `tracer_thalweg_and_surface` Module # # Render figure object produced by the `nowcast.figures.research.tracer_thalweg_and_surface` module. # # Set-up and function call replicates as nearly as possible what is done in the `nowcast.workers.make_plots` worker # to help ensure that the module will work in the nowcast production context. # Notebooks like this should be developed in a # [Nowcast Figures Development Environment](https://salishsea-nowcast.readthedocs.io/en/latest/figures/fig_dev_env.html) # so that all of the necessary dependency packages are installed. # The development has to be done on a workstation that has the Salish Sea Nowcast system `/results/` parition mounted. # In[1]: # reload lets us pull in changes from modules that we edit from importlib import reload # In[2]: # imports fro the top of the make_plots worker import datetime from glob import glob import logging import os from pathlib import Path import matplotlib import arrow import cmocean from nemo_nowcast import NowcastWorker import netCDF4 as nc import scipy.io as sio from nowcast import lib from nowcast.figures.research import tracer_thalweg_and_surface # In[3]: # some extra imports that we need to simulate how the nowcast system works import io import yaml # In[4]: # render figure objects in the notebook get_ipython().run_line_magic('matplotlib', 'inline') # ## Simulate Nowcast System Config # # The `config` multiline string contains the pieces of `nowcast/config/nowcast.yaml` # that are needed to set up the conditions as `nowcast.workers.make_plots` does # before calling the figure module `make_figure()` function. # # The `yaml.load()` call at the bottom of the cell converts the string into a `config` dict. # In[5]: config = ''' run_types: nowcast-green: bathymetry: /SalishSeaCast/grid/bathymetry_201702.nc mesh_mask: /SalishSeaCast/grid/mesh_mask201702.nc run: results_archive: nowcast-green: /results2/SalishSea/nowcast-green.201806/ ''' config = yaml.load(io.StringIO(config)) # ## Simulate the `make_plots` Command-line Interface # # `make_plots` gets `run_type`, `plot_type`, and `run_date` from the command-line. # In[10]: run_type = 'nowcast-green' plot_type = 'research' run_date = arrow.get('2019-02-22') # ## Simulate the Set-up of Variables and Paths in the `make_plots.make_plots()` Function # # The `make_plots()` function uses paths defined in the nowcast system configuration file # to set up a collection of commonly used variables, paths, and datasets. # These are just the ones that we need for our test. # In[11]: dmy = run_date.format('DDMMMYY').lower() results_dir = Path(config['run']['results_archive'][run_type], dmy) bathy = nc.Dataset(config['run_types'][run_type]['bathymetry']) mesh_mask = nc.Dataset(config['run_types']['nowcast-green']['mesh_mask']) # ## Simulate Dataset Loading in `_prep_nowcast_green_research_fig_functions()` # # This has the same effect as: # ```python # ptrc_T_hr = _results_dataset('1h', 'ptrc_T', results_dir) # ``` # In[12]: yyyymmdd = run_date.format('YYYYMMDD') ptrc_T_hr = nc.Dataset(results_dir/f'SalishSea_1h_{yyyymmdd}_{yyyymmdd}_ptrc_T.nc') # ## Render the Figure # # The `%%timeit` cell magic lets us keep an eye on how log the figure takes to process. # Setting `-n1 -r1` prevents it from processing the figure more than once # as it might try to do to generate better statistics. # # The `reload()` calls reload imported modules so that any edits you have made will take effect here. # # The `make_figure()` call should be the same as goes in the `make_plots` worker module. # In[13]: get_ipython().run_cell_magic('timeit', '-n1 -r1', "\nreload(tracer_thalweg_and_surface)\n\nfig = tracer_thalweg_and_surface.make_figure(\n ptrc_T_hr.variables['nitrate'], bathy, mesh_mask,\n cmap=cmocean.cm.matter, depth_integrated=False\n)\n") # In[ ]: