blob: 2cef98e89d4d8fabaea73571880f28431b2d8562 [file] [log] [blame]
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import sys\n",
"import subprocess\n",
"import jinja2\n",
"import requests\n",
"from metadata_extractor import CORDEXMetadataExtractor, obs4MIPSMetadataExtractor\n",
"from tqdm import tqdm_notebook as tqdm\n",
"from glob import glob\n",
"from IPython.display import Markdown, Image, FileLink"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"domain should be one of these three: 'AFR-44', 'EUR-11', 'NAM-44'\n",
"* AFR-44: CORDEX Africa RCMs at 44 km resolution\n",
"* EUR-11: CORDEX Europe RCMs at 11 km resolution\n",
"* NAM-44: CORDEX North America RCMs at 44 km resolution"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"domain = 'NAM-44'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# The output directory\n",
"cwd = os.getcwd()\n",
"workdir = cwd +'/evaluation_result'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Location of obs4Mips files\n",
"obs_dir = '/mnt/efs/obs4mips'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Location of CORDEX files\n",
"models_dir = '/mnt/efs/'+domain+'/*'.format(domain=domain)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Extract metadata from model and obs files, pairing up files with the same\n",
"# variables for separate evaluations\n",
"obs_extractor = obs4MIPSMetadataExtractor(obs_dir)\n",
"models_extractor = CORDEXMetadataExtractor(models_dir)\n",
"groups = obs_extractor.group(models_extractor, 'variable')\n",
"\n",
"# Configuration file template, to be rendered repeatedly for each evaluation\n",
"# run\n",
"env = jinja2.Environment(loader=jinja2.FileSystemLoader('./templates'),\n",
" trim_blocks=True, lstrip_blocks=True)\n",
"t = env.get_template('CORDEX.yaml.template')\n",
"\n",
"# Each group represents a single evaluation. Repeat the evaluation for\n",
"# three seasons: Summer, Winter, and Annual.\n",
"seasons = ['annual', 'winter', 'summer']\n",
"errored = []\n",
"for group in tqdm(groups, desc='variable loop'):\n",
" obs_info, models_info = group\n",
" instrument = obs_info['instrument']\n",
" variable = obs_info['variable']\n",
" for season in tqdm(seasons, desc='season loop'):\n",
" configfile_basename = '_'.join([domain, instrument, variable, season]) + '.yaml'\n",
" configfile_path = os.path.join(workdir, domain, instrument,\n",
" variable, season)\n",
" if not os.path.exists(configfile_path):\n",
" os.makedirs(configfile_path)\n",
" configfile_path = os.path.join(configfile_path, configfile_basename)\n",
" with open(configfile_path, 'w') as configfile:\n",
" configfile.write(t.render(obs_info=obs_info, models_info=models_info,\n",
" season=season, output_dir=workdir))\n",
"\n",
" # TODO: Do this in parallel. Will change this once this approach\n",
" # is well tested.\n",
" code = subprocess.call([sys.executable, '../run_RCMES.py', configfile_path])\n",
" if code:\n",
" errored.append(configfile_path)\n",
"print(\"All runs done. The following ended with an error: {}\".format(errored))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Check the evaluation result or download the processed obs4mips and model output."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"display(Markdown('Evaluation results'))\n",
"ip_address = (requests.get('http://169.254.169.254/latest/meta-data/public-ipv4').content).decode('utf-8')\n",
"for obs_info in obs_extractor.data:\n",
" inst_name = obs_info['instrument']\n",
" var_name = obs_info['variable']\n",
" display(Markdown('Instrument: '+inst_name+'& Variable: '+var_name))\n",
" for season in seasons:\n",
" savedir = os.path.join('evaluation_result', domain, inst_name, var_name, season)\n",
" png_files = glob(os.path.join(savedir, '*.png'))\n",
" for png_file in png_files: \n",
" display(Image(png_file))\n",
" nc_file = glob(os.path.join(savedir, '*.nc'))[0]\n",
" display(FileLink(nc_file))\n",
"os.chdir(cwd) \n"
]
}
],
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}