http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig12_winter.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig12_winter.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig12_winter.yaml new file mode 100644 index 0000000..f1f0b1e --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig12_winter.yaml @@ -0,0 +1,75 @@ +workdir: ./ +output_netcdf_filename: narccap_prec_DJF_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1980-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 12 + month_end: 2 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: rcmed + data_name: CRU + dataset_id: 10 + parameter_id: 37 + + targets: + data_source: local + path: ../data/prec*ncep.monavg.nc + variable: prec + +number_of_metrics_and_plots: 1 + +metrics1: Portrait_diagram_subregion_interannual_variability + +plots1: + file_name: Fig12_winter + +use_subregions: True + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25]
http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig14_and_Fig15.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig14_and_Fig15.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig14_and_Fig15.yaml new file mode 100644 index 0000000..5e01ce0 --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig14_and_Fig15.yaml @@ -0,0 +1,82 @@ +workdir: ./ +output_netcdf_filename: narccap_rsds_monthly_1984-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1984-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 1 + month_end: 12 + average_each_year: False + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: local + data_name: SRB + path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc + variable: sw_sfc_dn + + + targets: + data_source: local + path: ../data/rsds*ncep.monavg.nc + variable: rsds + +number_of_metrics_and_plots: 2 + +metrics1: Map_plot_bias_of_multiyear_climatology + +plots1: + file_name: Fig14 + subplots_array: !!python/tuple [4,2] + +metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology + +plots2: + file_name: Fig15 + +use_subregions: False + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig16_summer.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig16_summer.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig16_summer.yaml new file mode 100644 index 0000000..db33eff --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig16_summer.yaml @@ -0,0 +1,75 @@ +workdir: ./ +output_netcdf_filename: narccap_rsds_JJA_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1984-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 6 + month_end: 8 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: local + data_name: SRB + path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc + variable: sw_sfc_dn + + targets: + data_source: local + path: ../data/rsds*ncep.monavg.nc + variable: rsds + +number_of_metrics_and_plots: 1 + +metrics1: Portrait_diagram_subregion_interannual_variability + +plots1: + file_name: Fig16_summer + +use_subregions: True + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig16_winter.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig16_winter.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig16_winter.yaml new file mode 100644 index 0000000..e25a4b2 --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig16_winter.yaml @@ -0,0 +1,75 @@ +workdir: ./ +output_netcdf_filename: narccap_rsds_DJF_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1984-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 12 + month_end: 2 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: local + data_name: SRB + path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc + variable: sw_sfc_dn + + targets: + data_source: local + path: ../data/rsds*ncep.monavg.nc + variable: rsds + +number_of_metrics_and_plots: 1 + +metrics1: Portrait_diagram_subregion_interannual_variability + +plots1: + file_name: Fig16_winter + +use_subregions: True + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig5_and_Fig6.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig5_and_Fig6.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig5_and_Fig6.yaml new file mode 100644 index 0000000..ef7cc9c --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig5_and_Fig6.yaml @@ -0,0 +1,50 @@ +workdir: ./ +output_netcdf_filename: narccap_tas_annual_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1980-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 1 + month_end: 12 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: rcmed + data_name: CRU + dataset_id: 10 + parameter_id: 38 + + targets: + data_source: local + path: ../data/temp.*ncep.monavg.nc + variable: temp + +number_of_metrics_and_plots: 2 + +metrics1: Map_plot_bias_of_multiyear_climatology + +plots1: + file_name: Fig5 + subplots_array: !!python/tuple [4,2] + +metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology + +plots2: + file_name: Fig6 + +use_subregions: False http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig7_summer.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig7_summer.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig7_summer.yaml new file mode 100644 index 0000000..ddbce3b --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig7_summer.yaml @@ -0,0 +1,75 @@ +workdir: ./ +output_netcdf_filename: narccap_tas_JJA_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1980-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 6 + month_end: 8 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: rcmed + data_name: CRU + dataset_id: 10 + parameter_id: 38 + + targets: + data_source: local + path: ../data/temp*ncep.monavg.nc + variable: temp + +number_of_metrics_and_plots: 1 + +metrics1: Portrait_diagram_subregion_interannual_variability + +plots1: + file_name: Fig7_summer + +use_subregions: True + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig7_winter.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig7_winter.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig7_winter.yaml new file mode 100644 index 0000000..38add9b --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig7_winter.yaml @@ -0,0 +1,75 @@ +workdir: ./ +output_netcdf_filename: narccap_tas_DJF_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1980-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 12 + month_end: 2 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: rcmed + data_name: CRU + dataset_id: 10 + parameter_id: 38 + + targets: + data_source: local + path: ../data/temp*ncep.monavg.nc + variable: temp + +number_of_metrics_and_plots: 1 + +metrics1: Portrait_diagram_subregion_interannual_variability + +plots1: + file_name: Fig7_winter + +use_subregions: True + +subregions: +#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] + R01: + [42.75, 49.75, -123.75, -120.25] + R02: + [42.75, 49.75, -119.75, -112.75] + R03: + [37.25, 42.25, -123.75, -117.75] + R04: + [32.25, 37.25, -122.75, -114.75] + R05: + [31.25, 37.25, -113.75, -108.25] + R06: + [31.25, 37.25, -108.25, -99.75] + R07: + [37.25, 43.25, -110.25, -103.75] + R08: + [45.25, 49.25, -99.75, -90.25] + R09: + [34.75, 45.25, -99.75, -90.25] + R10: + [29.75, 34.75, -95.75, -84.75] + R11: + [38.25, 44.75, -89.75, -80.25] + R12: + [38.25, 44.75, -79.75, -70.25] + R13: + [30.75, 38.25, -83.75, -75.25] + R14: + [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/configuration_files/NARCCAP_paper/Fig8_and_Fig9.yaml ---------------------------------------------------------------------- diff --git a/RCMES/configuration_files/NARCCAP_paper/Fig8_and_Fig9.yaml b/RCMES/configuration_files/NARCCAP_paper/Fig8_and_Fig9.yaml new file mode 100644 index 0000000..d25ecb6 --- /dev/null +++ b/RCMES/configuration_files/NARCCAP_paper/Fig8_and_Fig9.yaml @@ -0,0 +1,50 @@ +workdir: ./ +output_netcdf_filename: narccap_prec_annual_mean_1980-2003.nc + +# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) +time: + maximum_overlap_period: False + start_time: 1980-01-01 + end_time: 2003-12-31 + temporal_resolution: monthly + month_start: 1 + month_end: 12 + average_each_year: True + +space: + min_lat: 23.75 + max_lat: 49.75 + min_lon: -125.75 + max_lon: -66.75 + +regrid: + regrid_on_reference: False + regrid_dlat: 0.50 + regrid_dlon: 0.50 + +datasets: + reference: + data_source: rcmed + data_name: CRU + dataset_id: 10 + parameter_id: 37 + + targets: + data_source: local + path: ../data/prec.*ncep.monavg.nc + variable: prec + +number_of_metrics_and_plots: 2 + +metrics1: Map_plot_bias_of_multiyear_climatology + +plots1: + file_name: Fig8 + subplots_array: !!python/tuple [4,2] + +metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology + +plots2: + file_name: Fig9 + +use_subregions: False http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/metrics_and_plots.py ---------------------------------------------------------------------- diff --git a/RCMES/metrics_and_plots.py b/RCMES/metrics_and_plots.py new file mode 100644 index 0000000..6e00b0f --- /dev/null +++ b/RCMES/metrics_and_plots.py @@ -0,0 +1,243 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#Apache OCW lib immports +import ocw.dataset as ds +import ocw.data_source.local as local +import ocw.plotter as plotter +import ocw.utils as utils +from ocw.evaluation import Evaluation +import ocw.metrics as metrics + +# Python libraries +import numpy as np +import numpy.ma as ma +import matplotlib.pyplot as plt +from mpl_toolkits.basemap import Basemap +from matplotlib import rcParams +from matplotlib.patches import Polygon +import string + +def Map_plot_bias_of_multiyear_climatology(obs_dataset, obs_name, model_datasets, model_names, + file_name, row, column, map_projection=None): + '''Draw maps of observed multi-year climatology and biases of models"''' + + # calculate climatology of observation data + obs_clim = utils.calc_temporal_mean(obs_dataset) + # determine the metrics + map_of_bias = metrics.TemporalMeanBias() + + # create the Evaluation object + bias_evaluation = Evaluation(obs_dataset, # Reference dataset for the evaluation + model_datasets, # list of target datasets for the evaluation + [map_of_bias, map_of_bias]) + # run the evaluation (bias calculation) + bias_evaluation.run() + + rcm_bias = bias_evaluation.results[0] + + fig = plt.figure() + + lat_min = obs_dataset.lats.min() + lat_max = obs_dataset.lats.max() + lon_min = obs_dataset.lons.min() + lon_max = obs_dataset.lons.max() + + string_list = list(string.ascii_lowercase) + ax = fig.add_subplot(row,column,1) + if map_projection == 'npstere': + m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, + resolution = 'l', fix_aspect=False) + else: + m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, + llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=False) + lons, lats = np.meshgrid(obs_dataset.lons, obs_dataset.lats) + + x,y = m(lons, lats) + + m.drawcoastlines(linewidth=1) + m.drawcountries(linewidth=1) + m.drawstates(linewidth=0.5, color='w') + max = m.contourf(x,y,obs_clim,levels = plotter._nice_intervals(obs_dataset.values, 10), extend='both',cmap='rainbow') + ax.annotate('(a) \n' + obs_name,xy=(lon_min, lat_min)) + cax = fig.add_axes([0.02, 1.-float(1./row), 0.01, 1./row*0.6]) + plt.colorbar(max, cax = cax) + clevs = plotter._nice_intervals(rcm_bias, 11) + for imodel in np.arange(len(model_datasets)): + + ax = fig.add_subplot(row, column,2+imodel) + if map_projection == 'npstere': + m = Basemap(ax=ax, projection ='npstere', boundinglat=lat_min, lon_0=0, + resolution = 'l', fix_aspect=False) + else: + m = Basemap(ax=ax, projection ='cyl', llcrnrlat = lat_min, urcrnrlat = lat_max, + llcrnrlon = lon_min, urcrnrlon = lon_max, resolution = 'l', fix_aspect=False) + m.drawcoastlines(linewidth=1) + m.drawcountries(linewidth=1) + m.drawstates(linewidth=0.5, color='w') + max = m.contourf(x,y,rcm_bias[imodel,:],levels = clevs, extend='both', cmap='RdBu_r') + ax.annotate('('+string_list[imodel+1]+') \n '+model_names[imodel],xy=(lon_min, lat_min)) + + cax = fig.add_axes([0.91, 0.1, 0.015, 0.8]) + plt.colorbar(max, cax = cax) + + plt.subplots_adjust(hspace=0.01,wspace=0.05) + + fig.savefig(file_name,dpi=600,bbox_inches='tight') + +def Taylor_diagram_spatial_pattern_of_multiyear_climatology(obs_dataset, obs_name, model_datasets, model_names, + file_name): + + # calculate climatological mean fields + obs_clim_dataset = ds.Dataset(obs_dataset.lats, obs_dataset.lons, obs_dataset.times, utils.calc_temporal_mean(obs_dataset)) + model_clim_datasets = [] + for dataset in model_datasets: + model_clim_datasets.append(ds.Dataset(dataset.lats, dataset.lons, dataset.times, utils.calc_temporal_mean(dataset))) + + # Metrics (spatial standard deviation and pattern correlation) + # determine the metrics + taylor_diagram = metrics.SpatialPatternTaylorDiagram() + + # create the Evaluation object + taylor_evaluation = Evaluation(obs_clim_dataset, # Climatological mean of reference dataset for the evaluation + model_clim_datasets, # list of climatological means from model datasets for the evaluation + [taylor_diagram]) + + # run the evaluation (bias calculation) + taylor_evaluation.run() + + taylor_data = taylor_evaluation.results[0] + + plotter.draw_taylor_diagram(taylor_data, model_names, obs_name, file_name, pos='upper right',frameon=False) + +def Time_series_subregion(obs_subregion_mean, obs_name, model_subregion_mean, model_names, seasonal_cycle, + file_name, row, column, x_tick=['']): + + nmodel, nt, nregion = model_subregion_mean.shape + + if seasonal_cycle: + obs_data = ma.mean(obs_subregion_mean.reshape([1,nt/12,12,nregion]), axis=1) + model_data = ma.mean(model_subregion_mean.reshape([nmodel,nt/12,12,nregion]), axis=1) + nt = 12 + else: + obs_data = obs_subregion_mean + model_data = model_subregion_mean + + x_axis = np.arange(nt) + x_tick_values = x_axis + + fig = plt.figure() + rcParams['xtick.labelsize'] = 6 + rcParams['ytick.labelsize'] = 6 + + for iregion in np.arange(nregion): + ax = fig.add_subplot(row, column, iregion+1) + x_tick_labels = [''] + if iregion+1 > column*(row-1): + x_tick_labels = x_tick + else: + x_tick_labels=[''] + ax.plot(x_axis, obs_data[0, :, iregion], color='r', lw=2, label=obs_name) + for imodel in np.arange(nmodel): + ax.plot(x_axis, model_data[imodel, :, iregion], lw=0.5, label = model_names[imodel]) + ax.set_xlim([-0.5,nt-0.5]) + ax.set_xticks(x_tick_values) + ax.set_xticklabels(x_tick_labels) + ax.set_title('Region %02d' % (iregion+1), fontsize=8) + + ax.legend(bbox_to_anchor=(-0.2, row/2), loc='center' , prop={'size':7}, frameon=False) + + fig.subplots_adjust(hspace=0.7, wspace=0.5) + fig.savefig(file_name, dpi=600, bbox_inches='tight') + +def Portrait_diagram_subregion(obs_subregion_mean, obs_name, model_subregion_mean, model_names, seasonal_cycle, + file_name, normalize=True): + + nmodel, nt, nregion = model_subregion_mean.shape + + if seasonal_cycle: + obs_data = ma.mean(obs_subregion_mean.reshape([1,nt/12,12,nregion]), axis=1) + model_data = ma.mean(model_subregion_mean.reshape([nmodel,nt/12,12,nregion]), axis=1) + nt = 12 + else: + obs_data = obs_subregion_mean + model_data = model_subregion_mean + + subregion_metrics = ma.zeros([4, nregion, nmodel]) + + for imodel in np.arange(nmodel): + for iregion in np.arange(nregion): + # First metric: bias + subregion_metrics[0, iregion, imodel] = metrics.calc_bias(model_data[imodel, :, iregion], obs_data[0, :, iregion], average_over_time = True) + # Second metric: standard deviation + subregion_metrics[1, iregion, imodel] = metrics.calc_stddev_ratio(model_data[imodel, :, iregion], obs_data[0, :, iregion]) + # Third metric: RMSE + subregion_metrics[2, iregion, imodel] = metrics.calc_rmse(model_data[imodel, :, iregion], obs_data[0, :, iregion]) + # Fourth metric: correlation + subregion_metrics[3, iregion, imodel] = metrics.calc_correlation(model_data[imodel, :, iregion], obs_data[0, :, iregion]) + + if normalize: + for iregion in np.arange(nregion): + subregion_metrics[0, iregion, : ] = subregion_metrics[0, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. + subregion_metrics[1, iregion, : ] = subregion_metrics[1, iregion, : ]*100. + subregion_metrics[2, iregion, : ] = subregion_metrics[2, iregion, : ]/ma.std(obs_data[0, :, iregion])*100. + + region_names = ['R%02d' % i for i in np.arange(nregion)+1] + + for imetric, metric in enumerate(['bias','std','RMSE','corr']): + plotter.draw_portrait_diagram(subregion_metrics[imetric, :, :], region_names, model_names, file_name+'_'+metric, + xlabel='model',ylabel='region') + +def Map_plot_subregion(subregions, ref_dataset, directory): + + lons, lats = np.meshgrid(ref_dataset.lons, ref_dataset.lats) + fig = plt.figure() + ax = fig.add_subplot(111) + m = Basemap(ax=ax, projection='cyl',llcrnrlat = lats.min(), urcrnrlat = lats.max(), + llcrnrlon = lons.min(), urcrnrlon = lons.max(), resolution = 'l') + m.drawcoastlines(linewidth=0.75) + m.drawcountries(linewidth=0.75) + m.etopo() + x, y = m(lons, lats) + #subregion_array = ma.masked_equal(subregion_array, 0) + #max=m.contourf(x, y, subregion_array, alpha=0.7, cmap='Accent') + for subregion in subregions: + draw_screen_poly(subregion[1], m, 'w') + plt.annotate(subregion[0],xy=(0.5*(subregion[1][2]+subregion[1][3]), 0.5*(subregion[1][0]+subregion[1][1])), ha='center',va='center', fontsize=8) + fig.savefig(directory+'map_subregion', bbox_inches='tight') + +def draw_screen_poly(boundary_array, m, linecolor='k'): + + ''' Draw a polygon on a map + + :param boundary_array: [lat_north, lat_south, lon_east, lon_west] + :param m : Basemap object + ''' + + lats = [boundary_array[0], boundary_array[0], boundary_array[1], boundary_array[1]] + lons = [boundary_array[3], boundary_array[2], boundary_array[2], boundary_array[3]] + x, y = m( lons, lats ) + xy = zip(x,y) + poly = Polygon( xy, facecolor='none',edgecolor=linecolor ) + plt.gca().add_patch(poly) + + + + + + + http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/run_RCMES.py ---------------------------------------------------------------------- diff --git a/RCMES/run_RCMES.py b/RCMES/run_RCMES.py new file mode 100644 index 0000000..1054446 --- /dev/null +++ b/RCMES/run_RCMES.py @@ -0,0 +1,246 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +#Apache OCW lib immports +import ocw.dataset_processor as dsp +import ocw.data_source.local as local +import ocw.data_source.rcmed as rcmed +import ocw.plotter as plotter +import ocw.utils as utils +from ocw.dataset import Bounds + +import matplotlib.pyplot as plt +from matplotlib import rcParams +import numpy as np +import numpy.ma as ma +import yaml +from glob import glob +import operator +from dateutil import parser +from datetime import datetime +import os +import sys + +from metrics_and_plots import * + +import ssl +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + +config_file = str(sys.argv[1]) + +print 'Reading the configuration file ', config_file +config = yaml.load(open(config_file)) +time_info = config['time'] +temporal_resolution = time_info['temporal_resolution'] + +start_time = datetime.strptime(time_info['start_time'].strftime('%Y%m%d'),'%Y%m%d') +end_time = datetime.strptime(time_info['end_time'].strftime('%Y%m%d'),'%Y%m%d') + +space_info = config['space'] +min_lat = space_info['min_lat'] +max_lat = space_info['max_lat'] +min_lon = space_info['min_lon'] +max_lon = space_info['max_lon'] + +""" Step 1: Load the reference data """ +ref_data_info = config['datasets']['reference'] +print 'Loading observation dataset:\n',ref_data_info +ref_name = ref_data_info['data_name'] +if ref_data_info['data_source'] == 'local': + ref_dataset = local.load_file(ref_data_info['path'], + ref_data_info['variable'], name=ref_name) +elif ref_data_info['data_source'] == 'rcmed': + ref_dataset = rcmed.parameter_dataset(ref_data_info['dataset_id'], + ref_data_info['parameter_id'], + min_lat, max_lat, min_lon, max_lon, + start_time, end_time) +else: + print ' ' + # TO DO: support ESGF + +ref_dataset = dsp.normalize_dataset_datetimes(ref_dataset, temporal_resolution) +if 'multiplying_factor' in ref_data_info.keys(): + ref_dataset.values = ref_dataset.values*ref_data_info['multiplying_factor'] + +""" Step 2: Load model NetCDF Files into OCW Dataset Objects """ +model_data_info = config['datasets']['targets'] +print 'Loading model datasets:\n',model_data_info +if model_data_info['data_source'] == 'local': + model_datasets, model_names = local.load_multiple_files(file_path = model_data_info['path'], + variable_name =model_data_info['variable']) +else: + print ' ' + # TO DO: support RCMED and ESGF +for idata,dataset in enumerate(model_datasets): + model_datasets[idata] = dsp.normalize_dataset_datetimes(dataset, temporal_resolution) + +""" Step 3: Subset the data for temporal and spatial domain """ +# Create a Bounds object to use for subsetting +if time_info['maximum_overlap_period']: + start_time, end_time = utils.get_temporal_overlap([ref_dataset]+model_datasets) + print 'Maximum overlap period' + print 'start_time:', start_time + print 'end_time:', end_time + +if temporal_resolution == 'monthly' and end_time.day !=1: + end_time = end_time.replace(day=1) +if ref_data_info['data_source'] == 'rcmed': + min_lat = np.max([min_lat, ref_dataset.lats.min()]) + max_lat = np.min([max_lat, ref_dataset.lats.max()]) + min_lon = np.max([min_lon, ref_dataset.lons.min()]) + max_lon = np.min([max_lon, ref_dataset.lons.max()]) +bounds = Bounds(min_lat, max_lat, min_lon, max_lon, start_time, end_time) + +if ref_dataset.lats.ndim !=2 and ref_dataset.lons.ndim !=2: + ref_dataset = dsp.subset(bounds,ref_dataset) +else: + ref_dataset = dsp.temporal_slice(bounds.start, bounds.end, ref_dataset) +for idata,dataset in enumerate(model_datasets): + if dataset.lats.ndim !=2 and dataset.lons.ndim !=2: + model_datasets[idata] = dsp.subset(bounds,dataset) + else: + model_datasets[idata] = dsp.temporal_slice(bounds.start, bounds.end, dataset) + +# Temporaly subset both observation and model datasets for the user specified season +month_start = time_info['month_start'] +month_end = time_info['month_end'] +average_each_year = time_info['average_each_year'] + +ref_dataset = dsp.temporal_subset(month_start, month_end,ref_dataset,average_each_year) +for idata,dataset in enumerate(model_datasets): + model_datasets[idata] = dsp.temporal_subset(month_start, month_end,dataset,average_each_year) + +# generate grid points for regridding +if config['regrid']['regrid_on_reference']: + new_lat = ref_dataset.lats + new_lon = ref_dataset.lons +else: + delta_lat = config['regrid']['regrid_dlat'] + delta_lon = config['regrid']['regrid_dlon'] + nlat = (max_lat - min_lat)/delta_lat+1 + nlon = (max_lon - min_lon)/delta_lon+1 + new_lat = np.linspace(min_lat, max_lat, nlat) + new_lon = np.linspace(min_lon, max_lon, nlon) + +# number of models +nmodel = len(model_datasets) +print 'Dataset loading completed' +print 'Observation data:', ref_name +print 'Number of model datasets:',nmodel +for model_name in model_names: + print model_name + +""" Step 4: Spatial regriding of the reference datasets """ +print 'Regridding datasets: ', config['regrid'] +if not config['regrid']['regrid_on_reference']: + ref_dataset = dsp.spatial_regrid(ref_dataset, new_lat, new_lon) + print 'Reference dataset has been regridded' +for idata,dataset in enumerate(model_datasets): + model_datasets[idata] = dsp.spatial_regrid(dataset, new_lat, new_lon) + print model_names[idata]+' has been regridded' + +print 'Propagating missing data information' +ref_dataset = dsp.mask_missing_data([ref_dataset]+model_datasets)[0] +model_datasets = dsp.mask_missing_data([ref_dataset]+model_datasets)[1:] + +""" Step 5: Checking and converting variable units """ +print 'Checking and converting variable units' +ref_dataset = dsp.variable_unit_conversion(ref_dataset) +for idata,dataset in enumerate(model_datasets): + model_datasets[idata] = dsp.variable_unit_conversion(dataset) + + +print 'Generating multi-model ensemble' +if len(model_datasets) >= 2.: + model_datasets.append(dsp.ensemble(model_datasets)) + model_names.append('ENS') + +""" Step 6: Generate subregion average and standard deviation """ +if config['use_subregions']: + # sort the subregion by region names and make a list + subregions= sorted(config['subregions'].items(),key=operator.itemgetter(0)) + + # number of subregions + nsubregion = len(subregions) + + print 'Calculating spatial averages and standard deviations of ',str(nsubregion),' subregions' + + ref_subregion_mean, ref_subregion_std, subregion_array = utils.calc_subregion_area_mean_and_std([ref_dataset], subregions) + model_subregion_mean, model_subregion_std, subregion_array = utils.calc_subregion_area_mean_and_std(model_datasets, subregions) + +""" Step 7: Write a netCDF file """ +workdir = config['workdir'] +if workdir[-1] != '/': + workdir = workdir+'/' +print 'Writing a netcdf file: ',workdir+config['output_netcdf_filename'] +if not os.path.exists(workdir): + os.system("mkdir "+workdir) + +if config['use_subregions']: + dsp.write_netcdf_multiple_datasets_with_subregions(ref_dataset, ref_name, model_datasets, model_names, + path=workdir+config['output_netcdf_filename'], + subregions=subregions, subregion_array = subregion_array, + ref_subregion_mean=ref_subregion_mean, ref_subregion_std=ref_subregion_std, + model_subregion_mean=model_subregion_mean, model_subregion_std=model_subregion_std) +else: + dsp.write_netcdf_multiple_datasets_with_subregions(ref_dataset, ref_name, model_datasets, model_names, + path=workdir+config['output_netcdf_filename']) + +""" Step 8: Calculate metrics and draw plots """ +nmetrics = config['number_of_metrics_and_plots'] +if config['use_subregions']: + Map_plot_subregion(subregions, ref_dataset, workdir) + +if nmetrics > 0: + print 'Calculating metrics and generating plots' + for imetric in np.arange(nmetrics)+1: + metrics_name = config['metrics'+'%1d' %imetric] + plot_info = config['plots'+'%1d' %imetric] + file_name = workdir+plot_info['file_name'] + + print 'metrics '+str(imetric)+'/'+str(nmetrics)+': ', metrics_name + if metrics_name == 'Map_plot_bias_of_multiyear_climatology': + row, column = plot_info['subplots_array'] + if 'map_projection' in plot_info.keys(): + Map_plot_bias_of_multiyear_climatology(ref_dataset, ref_name, model_datasets, model_names, + file_name, row, column, map_projection=plot_info['map_projection']) + else: + Map_plot_bias_of_multiyear_climatology(ref_dataset, ref_name, model_datasets, model_names, + file_name, row, column) + elif metrics_name == 'Taylor_diagram_spatial_pattern_of_multiyear_climatology': + Taylor_diagram_spatial_pattern_of_multiyear_climatology(ref_dataset, ref_name, model_datasets, model_names, + file_name) + elif config['use_subregions']: + if metrics_name == 'Timeseries_plot_subregion_interannual_variability' and average_each_year: + row, column = plot_info['subplots_array'] + Time_series_subregion(ref_subregion_mean, ref_name, model_subregion_mean, model_names, False, + file_name, row, column, x_tick=['Y'+str(i+1) for i in np.arange(model_subregion_mean.shape[1])]) + if metrics_name == 'Timeseries_plot_subregion_annual_cycle' and not average_each_year and month_start==1 and month_end==12: + row, column = plot_info['subplots_array'] + Time_series_subregion(ref_subregion_mean, ref_name, model_subregion_mean, model_names, True, + file_name, row, column, x_tick=['J','F','M','A','M','J','J','A','S','O','N','D']) + if metrics_name == 'Portrait_diagram_subregion_interannual_variability' and average_each_year: + Portrait_diagram_subregion(ref_subregion_mean, ref_name, model_subregion_mean, model_names, False, + file_name) + if metrics_name == 'Portrait_diagram_subregion_annual_cycle' and not average_each_year and month_start==1 and month_end==12: + Portrait_diagram_subregion(ref_subregion_mean, ref_name, model_subregion_mean, model_names, True, + file_name) + else: + print 'please check the currently supported metrics' + + http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/statistical_downscaling/MPI_tas_JJA.yaml ---------------------------------------------------------------------- diff --git a/RCMES/statistical_downscaling/MPI_tas_JJA.yaml b/RCMES/statistical_downscaling/MPI_tas_JJA.yaml new file mode 100644 index 0000000..17a12a7 --- /dev/null +++ b/RCMES/statistical_downscaling/MPI_tas_JJA.yaml @@ -0,0 +1,29 @@ +case_name: MPI_tas_JJA + +# downscaling method (1: delta addition, 2: Delta correction, 3: quantile mapping, 4: asynchronous regression) +downscaling_option: 4 + +# longitude (-180 ~ 180) and latitude (-90 ~ 90) of the grid point to downscale model output [in degrees] +location: + name: HoChiMinh_City + grid_lat: 10.75 + grid_lon: 106.67 + +# Season (for December - February, month_start=12 & month_end =2; for June - August, month_start=6 & month_end = 8) +month_index: !!python/tuple [6,7,8] + +# reference (observation) data +reference: + data_source: local + data_name: CRU + path: ./data/observation/tas_cru_monthly_1981-2010.nc + variable: tas + +model: + data_name: MPI + variable: tas + present: + path: ./data/model_present/tas_Amon_MPI_decadal1980_198101-201012.nc + future: + scenario_name: RCP8.5_2041-70 + path: ./data/model_rcp85/tas_Amon_MPI_rcp85_204101-207012.nc http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/statistical_downscaling/run_statistical_downscaling.py ---------------------------------------------------------------------- diff --git a/RCMES/statistical_downscaling/run_statistical_downscaling.py b/RCMES/statistical_downscaling/run_statistical_downscaling.py new file mode 100644 index 0000000..60c6ac2 --- /dev/null +++ b/RCMES/statistical_downscaling/run_statistical_downscaling.py @@ -0,0 +1,231 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import datetime +import yaml +import os +import sys +import xlwt + +import numpy as np +import numpy.ma as ma + +import ocw.data_source.local as local +import ocw.dataset as ds +import ocw.dataset_processor as dsp +import ocw.statistical_downscaling as down +import ocw.plotter as plotter + +import ssl + +def spatial_aggregation(target_dataset, lon_min, lon_max, lat_min, lat_max): + """ Spatially subset a dataset within the given longitude and latitude boundaryd_lon-grid_space, grid_lon+grid_space + :param target_dataset: Dataset object that needs spatial subsetting + :type target_dataset: Open Climate Workbench Dataset Object + :param lon_min: minimum longitude (western boundary) + :type lon_min: float + :param lon_max: maximum longitude (eastern boundary) + :type lon_min: float + :param lat_min: minimum latitude (southern boundary) + :type lat_min: float + :param lat_min: maximum latitude (northern boundary) + :type lat_min: float + :returns: A new spatially subset Dataset + :rtype: Open Climate Workbench Dataset Object + """ + + if target_dataset.lons.ndim == 1 and target_dataset.lats.ndim == 1: + new_lon, new_lat = np.meshgrid(target_dataset.lons, target_dataset.lats) + elif target_dataset.lons.ndim == 2 and target_dataset.lats.ndim == 2: + new_lon = target_datasets.lons + new_lat = target_datasets.lats + + y_index, x_index = np.where((new_lon >= lon_min) & (new_lon <= lon_max) & (new_lat >= lat_min) & (new_lat <= lat_max))[0:2] + + #new_dataset = ds.Dataset(target_dataset.lats[y_index.min():y_index.max()+1], + # target_dataset.lons[x_index.min():x_index.max()+1], + # target_dataset.times, + # target_dataset.values[:,y_index.min():y_index.max()+1,x_index.min():x_index.max()+1], + # target_dataset.variable, + # target_dataset.name) + return target_dataset.values[:,y_index.min():y_index.max()+1,x_index.min():x_index.max()+1] + +def extract_data_at_nearest_grid_point(target_dataset, longitude, latitude): + """ Spatially subset a dataset within the given longitude and latitude boundaryd_lon-grid_space, grid_lon+grid_space + :param target_dataset: Dataset object that needs spatial subsetting + :type target_dataset: Open Climate Workbench Dataset Object + :type longitude: float + :param longitude: longitude + :type latitude: float + :param latitude: latitude + :returns: A new spatially subset Dataset + :rtype: Open Climate Workbench Dataset Object + """ + + if target_dataset.lons.ndim == 1 and target_dataset.lats.ndim == 1: + new_lon, new_lat = np.meshgrid(target_dataset.lons, target_dataset.lats) + elif target_dataset.lons.ndim == 2 and target_dataset.lats.ndim == 2: + new_lon = target_datasets.lons + new_lat = target_datasets.lats + distance = (new_lon - longitude)**2. + (new_lat - latitude)**2. + y_index, x_index = np.where(distance == np.min(distance))[0:2] + + return target_dataset.values[:,y_index[0], x_index[0]] + +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + +config_file = str(sys.argv[1]) + +print 'Reading the configuration file ', config_file + +config = yaml.load(open(config_file)) + +case_name = config['case_name'] + +downscale_option_names = [' ','delta_addition','delta_correction','quantile_mapping','asynchronous_regression'] +DOWNSCALE_OPTION = config['downscaling_option'] + +location = config['location'] +grid_lat = location['grid_lat'] +grid_lon = location['grid_lon'] + +month_index = config['month_index'] +month_start = month_index[0] +month_end = month_index[-1] + +ref_info = config['reference'] +model_info = config['model'] + +# Filename for the output data/plot (without file extension) +OUTPUT = "%s_%s_%s_%s_%s" %(location['name'], ref_info['variable'], model_info['data_name'], ref_info['data_name'],model_info['future']['scenario_name']) + +print("Processing "+ ref_info['data_name'] + " data") +""" Step 1: Load Local NetCDF Files into OCW Dataset Objects """ + +print("Loading %s into an OCW Dataset Object" % (ref_info['path'],)) +ref_dataset = local.load_file(ref_info['path'], ref_info['variable']) +print(ref_info['data_name'] +" values shape: (times, lats, lons) - %s \n" % (ref_dataset.values.shape,)) + +print("Loading %s into an OCW Dataset Object" % (model_info['present']['path'],)) +model_dataset_present = local.load_file(model_info['present']['path'], model_info['variable']) +print(model_info['data_name'] +" values shape: (times, lats, lons) - %s \n" % (model_dataset_present.values.shape,)) +dy = model_dataset_present.spatial_resolution()[0] +dx = model_dataset_present.spatial_resolution()[1] + +model_dataset_future = local.load_file(model_info['future']['path'], model_info['variable']) +print(model_info['future']['scenario_name']+':'+model_info['data_name'] +" values shape: (times, lats, lons) - %s \n" % (model_dataset_future.values.shape,)) + +""" Step 2: Temporal subsetting """ +print("Temporal subsetting for the selected month(s)") +ref_temporal_subset = dsp.temporal_subset(month_start, month_end, ref_dataset) +model_temporal_subset_present = dsp.temporal_subset(month_start, month_end, model_dataset_present) +model_temporal_subset_future = dsp.temporal_subset(month_start, month_end, model_dataset_future) + +""" Step 3: Spatial aggregation of observational data into the model grid """ +print("Spatial aggregation of observational data near latitude %0.2f and longitude %0.2f " % (grid_lat, grid_lon)) +# There are two options to aggregate observational data near a model grid point +#ref_subset = spatial_aggregation(ref_temporal_subset, grid_lon-0.5*dx, grid_lon+0.5*dx, grid_lat-0.5*dy, grid_lat+0.5*dy) +#model_subset_present = spatial_aggregation(model_temporal_subset_present, grid_lon-0.5*dx, grid_lon+0.5*dx, grid_lat-0.5*dy, grid_lat+0.5*dy) +#model_subset_future = spatial_aggregation(model_temporal_subset_future, grid_lon-0.5*dx, grid_lon+0.5*dx, grid_lat-0.5*dy, grid_lat+0.5*dy) +ref_subset = extract_data_at_nearest_grid_point(ref_temporal_subset, grid_lon, grid_lat) +model_subset_present = extract_data_at_nearest_grid_point(model_temporal_subset_present, grid_lon, grid_lat) +model_subset_future = extract_data_at_nearest_grid_point(model_temporal_subset_future, grid_lon, grid_lat) + + +""" Step 4: Create a statistical downscaling object and downscaling model output """ +# You can add other methods +print("Creating a statistical downscaling object") + +downscale = down.Downscaling(ref_subset, model_subset_present, model_subset_future) + +print(downscale_option_names[DOWNSCALE_OPTION]+": Downscaling model output") + +if DOWNSCALE_OPTION == 1: + downscaled_model_present, downscaled_model_future = downscale.Delta_addition() +elif DOWNSCALE_OPTION == 2: + downscaled_model_present, downscaled_model_future = downscale.Delta_correction() +elif DOWNSCALE_OPTION == 3: + downscaled_model_present, downscaled_model_future = downscale.Quantile_mapping() +elif DOWNSCALE_OPTION == 4: + downscaled_model_present, downscaled_model_future = downscale.Asynchronous_regression() +else: + sys.exit("DOWNSCALE_OPTION must be an integer between 1 and 4") + + +""" Step 5: Create plots and spreadsheet """ +print("Plotting results") +if not os.path.exists(case_name): + os.system("mkdir "+case_name) +os.chdir(os.getcwd()+"/"+case_name) + +plotter.draw_marker_on_map(grid_lat, grid_lon, fname='downscaling_location', location_name=config['location']['name']) + +plotter.draw_histogram([ref_subset.ravel(), model_subset_present.ravel(), model_subset_future.ravel()], + data_names = [ref_info['data_name'], model_info['data_name'], model_info['future']['scenario_name']], + fname=OUTPUT+'_original') + +plotter.draw_histogram([ref_subset.ravel(), downscaled_model_present, downscaled_model_future], + data_names = [ref_info['data_name'], model_info['data_name'], model_info['future']['scenario_name']], + fname=OUTPUT+'_downscaled_using_'+downscale_option_names[DOWNSCALE_OPTION]) + +print("Generating spreadsheet") + +workbook = xlwt.Workbook() +sheet = workbook.add_sheet(downscale_option_names[config['downscaling_option']]) + +sheet.write(0, 0, config['location']['name']) +sheet.write(0, 2, 'longitude') +sheet.write(0, 4, 'latitude') +sheet.write(0, 6, 'month') + + +sheet.write(0, 3, grid_lon) +sheet.write(0, 5, grid_lat) + + + +for imonth,month in enumerate(month_index): + sheet.write(0, 7+imonth, month) + +sheet.write(3, 1, 'observation') +sheet.write(4, 1, ref_info['data_name']) +for idata, data in enumerate(ref_subset.ravel()[~ref_subset.ravel().mask]): + sheet.write(5+idata,1,data.item()) + +sheet.write(3, 2, 'original') +sheet.write(4, 2, model_info['data_name']) +for idata, data in enumerate(model_subset_present.ravel()): + sheet.write(5+idata,2,data.item()) + +sheet.write(3, 3, 'original') +sheet.write(4, 3, model_info['future']['scenario_name']) +for idata, data in enumerate(model_subset_future.ravel()): + sheet.write(5+idata,3,data.item()) + +sheet.write(3, 4, 'downscaled') +sheet.write(4, 4, model_info['data_name']) +for idata, data in enumerate(downscaled_model_present): + sheet.write(5+idata,4,data.item()) + +sheet.write(3, 5, 'downscaled') +sheet.write(4, 5, model_info['future']['scenario_name']) +for idata, data in enumerate(downscaled_model_future): + sheet.write(5+idata,5,data.item()) + +workbook.save(OUTPUT+'.xls') + http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/RCMES/test/test.py ---------------------------------------------------------------------- diff --git a/RCMES/test/test.py b/RCMES/test/test.py new file mode 100644 index 0000000..beab16f --- /dev/null +++ b/RCMES/test/test.py @@ -0,0 +1,179 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import datetime +import urllib +from os import path + +import numpy as np + +import ocw.data_source.local as local +import ocw.data_source.rcmed as rcmed +from ocw.dataset import Bounds as Bounds +import ocw.dataset_processor as dsp +import ocw.evaluation as evaluation +import ocw.metrics as metrics +import ocw.plotter as plotter +import ssl + +if hasattr(ssl, '_create_unverified_context'): + ssl._create_default_https_context = ssl._create_unverified_context + +# File URL leader +FILE_LEADER = "http://zipper.jpl.nasa.gov/dist/" +# This way we can easily adjust the time span of the retrievals +YEARS = 3 +# Two Local Model Files +MODEL = "AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc" +# Filename for the output image/plot (without file extension) +OUTPUT_PLOT = "cru_31_tmax_knmi_africa_bias_full" + +# Download necessary NetCDF file if not present +if path.exists(MODEL): + pass +else: + urllib.urlretrieve(FILE_LEADER + MODEL, MODEL) + +""" Step 1: Load Local NetCDF File into OCW Dataset Objects """ +print("Loading %s into an OCW Dataset Object" % (MODEL,)) +knmi_dataset = local.load_file(MODEL, "tasmax") +print("KNMI_Dataset.values shape: (times, lats, lons) - %s \n" % (knmi_dataset.values.shape,)) + +""" Step 2: Fetch an OCW Dataset Object from the data_source.rcmed module """ +print("Working with the rcmed interface to get CRU3.1 Daily-Max Temp") +metadata = rcmed.get_parameters_metadata() + +cru_31 = [m for m in metadata if m['parameter_id'] == "39"][0] + +""" The RCMED API uses the following function to query, subset and return the +raw data from the database: + +rcmed.parameter_dataset(dataset_id, parameter_id, min_lat, max_lat, min_lon, + max_lon, start_time, end_time) + +The first two required params are in the cru_31 variable we defined earlier +""" +# Must cast to int since the rcmed api requires ints +dataset_id = int(cru_31['dataset_id']) +parameter_id = int(cru_31['parameter_id']) + +print("We are going to use the Model to constrain the Spatial Domain") +# The spatial_boundaries() function returns the spatial extent of the dataset +print("The KNMI_Dataset spatial bounds (min_lat, max_lat, min_lon, max_lon) are: \n" + "%s\n" % (knmi_dataset.spatial_boundaries(), )) +print("The KNMI_Dataset spatial resolution (lat_resolution, lon_resolution) is: \n" + "%s\n\n" % (knmi_dataset.spatial_resolution(), )) +min_lat, max_lat, min_lon, max_lon = knmi_dataset.spatial_boundaries() + +print("Calculating the Maximum Overlap in Time for the datasets") + +cru_start = datetime.datetime.strptime(cru_31['start_date'], "%Y-%m-%d") +cru_end = datetime.datetime.strptime(cru_31['end_date'], "%Y-%m-%d") +knmi_start, knmi_end = knmi_dataset.time_range() +# Grab the Max Start Time +start_time = max([cru_start, knmi_start]) +# Grab the Min End Time +end_time = min([cru_end, knmi_end]) +print("Overlap computed to be: %s to %s" % (start_time.strftime("%Y-%m-%d"), + end_time.strftime("%Y-%m-%d"))) +print("We are going to grab the first %s year(s) of data" % YEARS) +end_time = datetime.datetime(start_time.year + YEARS, start_time.month, start_time.day) +print("Final Overlap is: %s to %s" % (start_time.strftime("%Y-%m-%d"), + end_time.strftime("%Y-%m-%d"))) + +print("Fetching data from RCMED...") +cru31_dataset = rcmed.parameter_dataset(dataset_id, + parameter_id, + min_lat, + max_lat, + min_lon, + max_lon, + start_time, + end_time) + +""" Step 3: Resample Datasets so they are the same shape """ +print("CRU31_Dataset.values shape: (times, lats, lons) - %s" % (cru31_dataset.values.shape,)) +print("KNMI_Dataset.values shape: (times, lats, lons) - %s" % (knmi_dataset.values.shape,)) +print("Our two datasets have a mis-match in time. We will subset on time to %s years\n" % YEARS) + +# Create a Bounds object to use for subsetting +new_bounds = Bounds(min_lat, max_lat, min_lon, max_lon, start_time, end_time) +knmi_dataset = dsp.subset(new_bounds, knmi_dataset) + +print("CRU31_Dataset.values shape: (times, lats, lons) - %s" % (cru31_dataset.values.shape,)) +print("KNMI_Dataset.values shape: (times, lats, lons) - %s \n" % (knmi_dataset.values.shape,)) + +print("Temporally Rebinning the Datasets to a Single Timestep") +# To run FULL temporal Rebinning use a timedelta > 366 days. I used 999 in this example +knmi_dataset = dsp.temporal_rebin(knmi_dataset, datetime.timedelta(days=999)) +cru31_dataset = dsp.temporal_rebin(cru31_dataset, datetime.timedelta(days=999)) + +print("KNMI_Dataset.values shape: %s" % (knmi_dataset.values.shape,)) +print("CRU31_Dataset.values shape: %s \n\n" % (cru31_dataset.values.shape,)) + +""" Spatially Regrid the Dataset Objects to a 1/2 degree grid """ +# Using the bounds we will create a new set of lats and lons on 0.5 degree step +new_lons = np.arange(min_lon, max_lon, 0.5) +new_lats = np.arange(min_lat, max_lat, 0.5) + +# Spatially regrid datasets using the new_lats, new_lons numpy arrays +print("Spatially Regridding the KNMI_Dataset...") +knmi_dataset = dsp.spatial_regrid(knmi_dataset, new_lats, new_lons) +print("Spatially Regridding the CRU31_Dataset...") +cru31_dataset = dsp.spatial_regrid(cru31_dataset, new_lats, new_lons) +print("Final shape of the KNMI_Dataset:%s" % (knmi_dataset.values.shape, )) +print("Final shape of the CRU31_Dataset:%s" % (cru31_dataset.values.shape, )) + +""" Step 4: Build a Metric to use for Evaluation - Bias for this example """ +# You can build your own metrics, but OCW also ships with some common metrics +print("Setting up a Bias metric to use for evaluation") +bias = metrics.Bias() + +""" Step 5: Create an Evaluation Object using Datasets and our Metric """ +# The Evaluation Class Signature is: +# Evaluation(reference, targets, metrics, subregions=None) +# Evaluation can take in multiple targets and metrics, so we need to convert +# our examples into Python lists. Evaluation will iterate over the lists +print("Making the Evaluation definition") +bias_evaluation = evaluation.Evaluation(knmi_dataset, [cru31_dataset], [bias]) +print("Executing the Evaluation using the object's run() method") +bias_evaluation.run() + +""" Step 6: Make a Plot from the Evaluation.results """ +# The Evaluation.results are a set of nested lists to support many different +# possible Evaluation scenarios. +# +# The Evaluation results docs say: +# The shape of results is (num_metrics, num_target_datasets) if no subregion +# Accessing the actual results when we have used 1 metric and 1 dataset is +# done this way: +print("Accessing the Results of the Evaluation run") +results = bias_evaluation.results[0][0,:] + +# From the bias output I want to make a Contour Map of the region +print("Generating a contour map using ocw.plotter.draw_contour_map()") + +lats = new_lats +lons = new_lons +fname = OUTPUT_PLOT +gridshape = (1, 1) # Using a 1 x 1 since we have a single Bias for the full time range +plot_title = "TASMAX Bias of KNMI Compared to CRU 3.1 (%s - %s)" % (start_time.strftime("%Y/%d/%m"), end_time.strftime("%Y/%d/%m")) +sub_titles = ["Full Temporal Range"] + +plotter.draw_contour_map(results, lats, lons, fname, + gridshape=gridshape, ptitle=plot_title, + subtitles=sub_titles) http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig10_and_Fig11.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig10_and_Fig11.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig10_and_Fig11.yaml deleted file mode 100644 index 0650e61..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig10_and_Fig11.yaml +++ /dev/null @@ -1,81 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_prec_monthly_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 1 - month_end: 12 - average_each_year: False - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 37 - - targets: - data_source: local - path: ../data/prec*ncep.monavg.nc - variable: prec - -number_of_metrics_and_plots: 2 - -metrics1: Timeseries_plot_subregion_annual_cycle - -plots1: - file_name: Fig10 - subplots_array: !!python/tuple [7,2] - -metrics2: Portrait_diagram_subregion_annual_cycle - -plots2: - file_name: Fig11 - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig12_summer.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig12_summer.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig12_summer.yaml deleted file mode 100644 index f11c136..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig12_summer.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_prec_JJA_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 6 - month_end: 8 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 37 - - targets: - data_source: local - path: ../data/prec*ncep.monavg.nc - variable: prec - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig12_summer - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig12_winter.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig12_winter.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig12_winter.yaml deleted file mode 100644 index f1f0b1e..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig12_winter.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_prec_DJF_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 12 - month_end: 2 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 37 - - targets: - data_source: local - path: ../data/prec*ncep.monavg.nc - variable: prec - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig12_winter - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig14_and_Fig15.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig14_and_Fig15.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig14_and_Fig15.yaml deleted file mode 100644 index 5e01ce0..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig14_and_Fig15.yaml +++ /dev/null @@ -1,82 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_rsds_monthly_1984-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1984-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 1 - month_end: 12 - average_each_year: False - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: local - data_name: SRB - path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc - variable: sw_sfc_dn - - - targets: - data_source: local - path: ../data/rsds*ncep.monavg.nc - variable: rsds - -number_of_metrics_and_plots: 2 - -metrics1: Map_plot_bias_of_multiyear_climatology - -plots1: - file_name: Fig14 - subplots_array: !!python/tuple [4,2] - -metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology - -plots2: - file_name: Fig15 - -use_subregions: False - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig16_summer.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig16_summer.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig16_summer.yaml deleted file mode 100644 index db33eff..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig16_summer.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_rsds_JJA_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1984-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 6 - month_end: 8 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: local - data_name: SRB - path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc - variable: sw_sfc_dn - - targets: - data_source: local - path: ../data/rsds*ncep.monavg.nc - variable: rsds - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig16_summer - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig16_winter.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig16_winter.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig16_winter.yaml deleted file mode 100644 index e25a4b2..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig16_winter.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_rsds_DJF_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1984-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 12 - month_end: 2 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: local - data_name: SRB - path: ../data/srb_rel3.0_shortwave_from_1983_to_2007.nc - variable: sw_sfc_dn - - targets: - data_source: local - path: ../data/rsds*ncep.monavg.nc - variable: rsds - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig16_winter - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig5_and_Fig6.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig5_and_Fig6.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig5_and_Fig6.yaml deleted file mode 100644 index ef7cc9c..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig5_and_Fig6.yaml +++ /dev/null @@ -1,50 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_tas_annual_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 1 - month_end: 12 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 38 - - targets: - data_source: local - path: ../data/temp.*ncep.monavg.nc - variable: temp - -number_of_metrics_and_plots: 2 - -metrics1: Map_plot_bias_of_multiyear_climatology - -plots1: - file_name: Fig5 - subplots_array: !!python/tuple [4,2] - -metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology - -plots2: - file_name: Fig6 - -use_subregions: False http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig7_summer.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig7_summer.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig7_summer.yaml deleted file mode 100644 index ddbce3b..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig7_summer.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_tas_JJA_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 6 - month_end: 8 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 38 - - targets: - data_source: local - path: ../data/temp*ncep.monavg.nc - variable: temp - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig7_summer - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig7_winter.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig7_winter.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig7_winter.yaml deleted file mode 100644 index 38add9b..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig7_winter.yaml +++ /dev/null @@ -1,75 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_tas_DJF_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 12 - month_end: 2 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 38 - - targets: - data_source: local - path: ../data/temp*ncep.monavg.nc - variable: temp - -number_of_metrics_and_plots: 1 - -metrics1: Portrait_diagram_subregion_interannual_variability - -plots1: - file_name: Fig7_winter - -use_subregions: True - -subregions: -#subregion name (R01, R02, R03,....) followed by an array of boundaries [south, north, west, east] - R01: - [42.75, 49.75, -123.75, -120.25] - R02: - [42.75, 49.75, -119.75, -112.75] - R03: - [37.25, 42.25, -123.75, -117.75] - R04: - [32.25, 37.25, -122.75, -114.75] - R05: - [31.25, 37.25, -113.75, -108.25] - R06: - [31.25, 37.25, -108.25, -99.75] - R07: - [37.25, 43.25, -110.25, -103.75] - R08: - [45.25, 49.25, -99.75, -90.25] - R09: - [34.75, 45.25, -99.75, -90.25] - R10: - [29.75, 34.75, -95.75, -84.75] - R11: - [38.25, 44.75, -89.75, -80.25] - R12: - [38.25, 44.75, -79.75, -70.25] - R13: - [30.75, 38.25, -83.75, -75.25] - R14: - [24.25, 30.75, -83.75, -80.25] http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/NARCCAP_paper/Fig8_and_Fig9.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/NARCCAP_paper/Fig8_and_Fig9.yaml b/examples/configuration_file_examples/NARCCAP_paper/Fig8_and_Fig9.yaml deleted file mode 100644 index d25ecb6..0000000 --- a/examples/configuration_file_examples/NARCCAP_paper/Fig8_and_Fig9.yaml +++ /dev/null @@ -1,50 +0,0 @@ -workdir: ./ -output_netcdf_filename: narccap_prec_annual_mean_1980-2003.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: False - start_time: 1980-01-01 - end_time: 2003-12-31 - temporal_resolution: monthly - month_start: 1 - month_end: 12 - average_each_year: True - -space: - min_lat: 23.75 - max_lat: 49.75 - min_lon: -125.75 - max_lon: -66.75 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 37 - - targets: - data_source: local - path: ../data/prec.*ncep.monavg.nc - variable: prec - -number_of_metrics_and_plots: 2 - -metrics1: Map_plot_bias_of_multiyear_climatology - -plots1: - file_name: Fig8 - subplots_array: !!python/tuple [4,2] - -metrics2: Taylor_diagram_spatial_pattern_of_multiyear_climatology - -plots2: - file_name: Fig9 - -use_subregions: False http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/cmip5_SE_Asia_prec_DJF_mean_taylor_diagram_to_TRMM.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/cmip5_SE_Asia_prec_DJF_mean_taylor_diagram_to_TRMM.yaml b/examples/configuration_file_examples/cmip5_SE_Asia_prec_DJF_mean_taylor_diagram_to_TRMM.yaml deleted file mode 100644 index 276e744..0000000 --- a/examples/configuration_file_examples/cmip5_SE_Asia_prec_DJF_mean_taylor_diagram_to_TRMM.yaml +++ /dev/null @@ -1,45 +0,0 @@ -workdir: ./ -output_netcdf_filename: cmip5_SE_Asia_prec_DJF_1998-2010.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: True - start_time: 1981-01-01 - end_time: 2010-12-31 - temporal_resolution: monthly - month_start: 12 - month_end: 2 - average_each_year: False - -space: - min_lat: -15.14 - max_lat: 27.26 - min_lon: 89.26 - max_lon: 146.96 - -regrid: - regrid_on_reference: True - regrid_dlat: 0.50 - regrid_dlon: 0.50 - -datasets: - reference: - data_source: rcmed - data_name: TRMM - dataset_id: 3 - parameter_id: 36 - - targets: - data_source: local - path: ./data/pr_Amon* - variable: pr - -number_of_metrics_and_plots: 1 - -metrics1: Taylor_diagram_spatial_pattern_of_multiyear_climatology - -plots1: - file_name: cmip5_SE_ASIA_prec_DJF_mean_taylor_diagram_to_TRMM - -use_subregions: False - http://git-wip-us.apache.org/repos/asf/climate/blob/c6c9dd1c/examples/configuration_file_examples/cordex-AF_tasmax_annual_mean_bias_to_cru.yaml ---------------------------------------------------------------------- diff --git a/examples/configuration_file_examples/cordex-AF_tasmax_annual_mean_bias_to_cru.yaml b/examples/configuration_file_examples/cordex-AF_tasmax_annual_mean_bias_to_cru.yaml deleted file mode 100644 index b1bbb78..0000000 --- a/examples/configuration_file_examples/cordex-AF_tasmax_annual_mean_bias_to_cru.yaml +++ /dev/null @@ -1,46 +0,0 @@ -workdir: ./ -output_netcdf_filename: cordex-AF_CRU_taxmax_monthly_1990-2007.nc - -# (RCMES will temporally subset data between month_start and month_end. If average_each_year is True (False), seasonal mean in each year is (not) calculated and used for metrics calculation.) -time: - maximum_overlap_period: True - start_time: 1990-01-01 - end_time: 2007-12-31 - temporal_resolution: monthly - month_start: 1 - month_end: 12 - average_each_year: False - -space: - min_lat: -45.76 - max_lat: 42.24 - min_lon: -24.64 - max_lon: 60.28 - -regrid: - regrid_on_reference: False - regrid_dlat: 0.44 - regrid_dlon: 0.44 - -datasets: - reference: - data_source: rcmed - data_name: CRU - dataset_id: 10 - parameter_id: 39 - - targets: - data_source: local - path: ./data/AFRICA*tasmax.nc - variable: tasmax - -number_of_metrics_and_plots: 1 - -metrics1: Map_plot_bias_of_multiyear_climatology - -plots1: - file_name: cordex-AF_tasmax_annual_mean_bias_to_cru - subplots_array: !!python/tuple [3,4] - -use_subregions: False -
