{ "cells": [ { "cell_type": "markdown", "id": "48080cc2-be7e-4fa2-b34d-329041fccdd7", "metadata": {}, "source": [ "# ASIA-AQ and WRF-Chem: Read paired data and Create plots" ] }, { "cell_type": "markdown", "id": "1f968f42-85e9-4eab-bbe7-f53e3c54e315", "metadata": {}, "source": [ "First, import the {mod}`melodies_monet.driver` module." ] }, { "cell_type": "code", "execution_count": 1, "id": "d7240c01-7c05-49e7-bfca-01e23dc6bed6", "metadata": {}, "outputs": [], "source": [ "from melodies_monet import driver" ] }, { "cell_type": "markdown", "id": "0a8484c7-5b57-4d0b-b132-cb30338bac43", "metadata": {}, "source": [ "## Analysis driver class" ] }, { "cell_type": "markdown", "id": "24c2f889-4fde-4e13-9092-35c54c096148", "metadata": {}, "source": [ "Now, lets create an instance of the analysis driver class, {class}`melodies_monet.driver.analysis`. It consists of these main parts:\n", "\n", "* model instances\n", "\n", "* observation instances\n", "\n", "* a paired instance of both" ] }, { "cell_type": "code", "execution_count": 2, "id": "45a85e85-8d36-4dd6-8001-c6cc28275746", "metadata": {}, "outputs": [], "source": [ "an = driver.analysis()" ] }, { "cell_type": "markdown", "id": "8f39e654-28eb-42b0-ad1b-887ef241755c", "metadata": {}, "source": [ "## Control file\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "cf1a865a-ead4-436a-8287-5bb8cbf4d3fe", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'analysis': {'start_time': '2024-02-11-00:00:00',\n", " 'end_time': '2024-02-11-23:59:00',\n", " 'output_dir': '/glade/work/emmons/MM_tutorial_24/plots_asiaaq',\n", " 'debug': True},\n", " 'model': {'wrfchem': {'files': '/glade/campaign/acom/acom-da/rkumar/ASIA_AQ_Post/wrf_run/wrfout_d01_2024-02-11_*',\n", " 'mod_type': 'wrfchem',\n", " 'radius_of_influence': 12000,\n", " 'mapping': {'asiaaq': {'no2': 'NO2_pptv_FRANCHIN',\n", " 'no': 'NO_pptv_FRANCHIN',\n", " 'co': 'CO_DACOM_DISKIN'}},\n", " 'variables': {'pres_pa_mid': {'rename': 'pressure_model',\n", " 'unit_scale': 100,\n", " 'unit_scale_method': '/'},\n", " 'temperature_k': {'rename': 'temp_model',\n", " 'unit_scale': 1,\n", " 'unit_scale_method': '*'}},\n", " 'projection': None,\n", " 'plot_kwargs': {'color': 'dodgerblue', 'marker': '^', 'linestyle': ':'}}},\n", " 'obs': {'asiaaq': {'filename': '/glade/work/emmons/ASIAAQ/merges/asiaaq-mrg60_dc8_20240211_RA_20241018T1458.ict',\n", " 'obs_type': 'aircraft',\n", " 'time_var': 'Time_Start',\n", " 'resample': '60s',\n", " 'variables': {'O3_ppbv_FRANCHIN': {'unit_scale': 1,\n", " 'unit_scale_method': '*',\n", " 'nan_value': -7777,\n", " 'LLOD_value': -8888,\n", " 'LLOD_setvalue': 0.0,\n", " 'ylabel_plot': 'O3 (ppbv)'},\n", " 'NO_pptv_FRANCHIN': {'unit_scale': 1000.0,\n", " 'unit_scale_method': '/',\n", " 'nan_value': -7777,\n", " 'LLOD_value': -8888,\n", " 'LLOD_setvalue': 0.0,\n", " 'ylabel_plot': 'NO (ppbv)'},\n", " 'NO2_pptv_FRANCHIN': {'unit_scale': 1000.0,\n", " 'unit_scale_method': '/',\n", " 'nan_value': -7777,\n", " 'LLOD_value': -8888,\n", " 'LLOD_setvalue': 0.0,\n", " 'ylabel_plot': 'NO2 (ppbv)'},\n", " 'CO_DACOM_DISKIN': {'nan_value': -7777,\n", " 'LLOD_value': -8888,\n", " 'LLOD_setvalue': 0.0,\n", " 'ylabel_plot': 'CO (ppbv)'},\n", " 'Latitude': {'rename': 'latitude',\n", " 'unit_scale': 1,\n", " 'unit_scale_method': '*'},\n", " 'Longitude': {'rename': 'longitude',\n", " 'unit_scale': 1,\n", " 'unit_scale_method': '*'},\n", " 'Static_Pressure': {'rename': 'pressure_obs',\n", " 'unit_scale': 1,\n", " 'unit_scale_method': '*'},\n", " 'Static_Air_Temp': {'rename': 'temp_obs',\n", " 'unit_scale': 273.0,\n", " 'unit_scale_method': '+'},\n", " 'Pressure_Altitude': {'rename': 'altitude',\n", " 'unit_scale': 0.3048,\n", " 'unit_scale_method': '*'},\n", " 'Time_Start': {'rename': 'time'}}}},\n", " 'plots': {'plot_grp1': {'type': 'timeseries',\n", " 'fig_kwargs': {'figsize': [12, 6]},\n", " 'default_plot_kwargs': {'linewidth': 2.0, 'markersize': 5.0},\n", " 'text_kwargs': {'fontsize': 18.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Manila'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True,\n", " 'ts_select_time': 'time',\n", " 'set_axis': False,\n", " 'altitude_yax2': {'altitude_variable': 'altitude',\n", " 'altitude_ticks': 1000,\n", " 'ylabel2': 'Altitude (m)',\n", " 'plot_kwargs_y2': {'color': 'g'},\n", " 'altitude_unit': 'm',\n", " 'altitude_scaling_factor': 1}}},\n", " 'plot_grp2': {'type': 'vertprofile',\n", " 'fig_kwargs': {'figsize': [10, 14]},\n", " 'default_plot_kwargs': {'linewidth': 4.0, 'markersize': 10.0},\n", " 'text_kwargs': {'fontsize': 18.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Manila'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True,\n", " 'set_axis': False,\n", " 'interquartile_style': 'shading'},\n", " 'altitude_variable': 'altitude',\n", " 'vertprofile_bins': [0, 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000],\n", " 'vmin': None,\n", " 'vmax': None},\n", " 'plot_grp3': {'type': 'violin',\n", " 'fig_kwargs': {'figsize': [10, 8]},\n", " 'text_kwargs': {'fontsize': 25.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Manila'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True, 'set_axis': False}},\n", " 'plot_grp4': {'type': 'scatter_density',\n", " 'fig_kwargs': {'figsize': [10, 10]},\n", " 'default_plot_kwargs': {'linewidth': 4.0, 'markersize': 10.0},\n", " 'text_kwargs': {'fontsize': 18.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Philippines'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True,\n", " 'set_axis': False,\n", " 'vmin_x': None,\n", " 'vmax_x': None,\n", " 'vmin_y': None,\n", " 'vmax_y': None},\n", " 'color_map': {'colors': ['royalblue', 'cyan', 'yellow', 'orange'],\n", " 'over': 'red',\n", " 'under': 'blue'},\n", " 'xlabel': 'Model',\n", " 'ylabel': 'Observation',\n", " 'title': 'Scatter Density Plot',\n", " 'fill': True,\n", " 'shade_lowest': True,\n", " 'vcenter': None,\n", " 'extensions': ['min', 'max']},\n", " 'plot_grp5': {'type': 'taylor',\n", " 'fig_kwargs': {'figsize': [8, 8]},\n", " 'default_plot_kwargs': {'linewidth': 2.0, 'markersize': 10.0},\n", " 'text_kwargs': {'fontsize': 16.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Philippines'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True, 'set_axis': False}},\n", " 'plot_grp6': {'type': 'boxplot',\n", " 'fig_kwargs': {'figsize': [8, 6]},\n", " 'text_kwargs': {'fontsize': 20.0},\n", " 'domain_type': ['all'],\n", " 'domain_name': ['Philippines'],\n", " 'data': ['asiaaq_wrfchem'],\n", " 'data_proc': {'rem_obs_nan': True, 'set_axis': False}}}}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We set the YAML control file and begin by reading the file.\n", "control_fn='control_read_aircraft_ASIA-AQ.yaml'\n", "an.control=control_fn\n", "an.read_control() \n", "an.control_dict " ] }, { "cell_type": "code", "execution_count": 4, "id": "1adbb5e0-17a1-4420-978a-7c2b27bc0452", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "analysis(\n", " control='control_read_aircraft_ASIA-AQ.yaml',\n", " control_dict=...,\n", " models={},\n", " obs={},\n", " paired={},\n", " start_time=Timestamp('2024-02-11 00:00:00'),\n", " end_time=Timestamp('2024-02-11 23:59:00'),\n", " time_intervals=None,\n", " download_maps=True,\n", " output_dir='/glade/work/emmons/MM_tutorial_24/plots_asiaaq',\n", " output_dir_save='/glade/work/emmons/MM_tutorial_24/plots_asiaaq',\n", " output_dir_read='/glade/work/emmons/MM_tutorial_24/plots_asiaaq',\n", " debug=True,\n", " save=None,\n", " read=None,\n", ")" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Now, some of our analysis object’s attributes are populated:\n", "an" ] }, { "cell_type": "markdown", "id": "f31ca9b8-be51-4116-831a-dc8568b964ac", "metadata": {}, "source": [ "## Load the model data" ] }, { "cell_type": "markdown", "id": "bd3879b4-511a-4566-8019-96a07f52bca0", "metadata": {}, "source": [ "The driver will automatically loop through the “models” found in the model section of the YAML file and create an instance of melodies_monet.driver.model for each that includes the\n", "\n", "* label\n", "\n", "* mapping information\n", "\n", "* file names (can be expressed using a glob expression)\n", "\n", "* xarray object" ] }, { "cell_type": "code", "execution_count": 5, "id": "70b89dc7-5d11-47b6-b53f-ef1a05b2bf59", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wrfchem\n", "/glade/campaign/acom/acom-da/rkumar/ASIA_AQ_Post/wrf_run/wrfout_d01_2024-02-11_*\n", "**** Reading WRF-Chem model output...\n" ] } ], "source": [ "an.open_models()" ] }, { "cell_type": "markdown", "id": "dc72de4e-8379-4dd7-bdb5-747882b800c0", "metadata": {}, "source": [ "Applying open_models() populates the models attribute." ] }, { "cell_type": "code", "execution_count": 6, "id": "49e3ca24-3457-4bc6-9b0b-f247661c64de", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'wrfchem': model(\n", " model='wrfchem',\n", " radius_of_influence=12000,\n", " mod_kwargs={'var_list': ['no', 'co', 'no2', 'pres', 'height', 'tk', 'height_agl', 'PSFC', 'zstag']},\n", " file_str='/glade/campaign/acom/acom-da/rkumar/ASIA_AQ_Post/wrf_run/wrfout_d01_2024-02-11_*',\n", " label='wrfchem',\n", " obj=...,\n", " mapping={'asiaaq': {'no2': 'NO2_pptv_FRANCHIN', 'no': 'NO_pptv_FRANCHIN', 'co': 'CO_DACOM_DISKIN'}},\n", " label='wrfchem',\n", " ...\n", " )}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "an.models" ] }, { "cell_type": "markdown", "id": "b33c2c76-296c-40da-82bd-e7c33a23c4f3", "metadata": {}, "source": [ "We can access the underlying dataset with the obj attribute." ] }, { "cell_type": "code", "execution_count": 8, "id": "c5343592-fc96-467a-9d09-c3a380b9eed0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset> Size: 807MB\n", "Dimensions: (y: 390, x: 340, time: 4, z: 42, bottom_top_stag: 43)\n", "Coordinates:\n", " longitude (y, x) float32 530kB 86.37 86.53 86.7 ... 143.3 143.5 143.6\n", " latitude (y, x) float32 530kB -13.89 -13.89 -13.89 ... 45.83 45.83\n", " * time (time) datetime64[ns] 32B 2024-02-11 ... 2024-02-11T18:00:00\n", "Dimensions without coordinates: y, x, z, bottom_top_stag\n", "Data variables:\n", " no (time, z, y, x) float32 89MB 0.0001207 0.0001249 ... 0.0\n", " co (time, z, y, x) float32 89MB 45.25 45.3 ... 13.15 13.15\n", " no2 (time, z, y, x) float32 89MB 0.02307 0.02316 ... 0.2793\n", " pressure_model (time, z, y, x) float32 89MB 1.012e+03 1.012e+03 ... 52.44\n", " alt_msl_m_mid (time, z, y, x) float32 89MB 26.51 26.51 ... 1.996e+04\n", " temp_model (time, z, y, x) float32 89MB 300.4 300.5 ... 227.0 227.2\n", " alt_agl_m_mid (time, z, y, x) float32 89MB 26.51 26.51 ... 1.996e+04\n", " surfpres_pa (time, y, x) float32 2MB 1.015e+05 1.015e+05 ... 1.016e+05\n", " zstag (time, bottom_top_stag, y, x) float32 91MB 0.0 ... 2.026e+04\n", " dz_m (time, z, y, x) float32 89MB 53.01 53.02 ... 618.3 618.7\n", "Attributes: (12/15)\n", " FieldType: 104\n", " MemoryOrder: XYZ\n", " description: NO mixing ratio\n", " units: ppmv\n", " stagger: \n", " coordinates: XLONG XLAT XTIME\n", " ... ...\n", " MOAD_CEN_LAT: 18.499992\n", " STAND_LON: 127.0\n", " MAP_PROJ: 3\n", " CEN_LAT: 18.499992\n", " CEN_LON: 115.0\n", " mapping_tables_to_airnow: {'OZONE': 'o3', 'PM2.5': 'PM2_5_DRY', 'PM10': ...