Repository: climate
Updated Branches:
  refs/heads/master 67189a7d6 -> 8bc19c65a


CLIMATE-717 - Debugging CLI

- ocw-cli/cli_app.py has been updated.
- Spatial subsetting is not applied if the model data uses curvilinear grids.
- Units of all datasets are checked and converted if needed.
- Missing data information is propagated from each dataset to the others.
- CLI uses the recently added metrics class, TemporalMeanBias.
- Climatology plots of an observation and a model are generated.


Project: http://git-wip-us.apache.org/repos/asf/climate/repo
Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/a40b8e42
Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/a40b8e42
Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/a40b8e42

Branch: refs/heads/master
Commit: a40b8e42b7ffb1459cd328102303ef5e7d7dbd7c
Parents: ca93686
Author: huikyole <[email protected]>
Authored: Thu Jan 7 00:02:03 2016 -0800
Committer: huikyole <[email protected]>
Committed: Thu Jan 7 00:02:03 2016 -0800

----------------------------------------------------------------------
 ocw-cli/cli_app.py | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/climate/blob/a40b8e42/ocw-cli/cli_app.py
----------------------------------------------------------------------
diff --git a/ocw-cli/cli_app.py b/ocw-cli/cli_app.py
index 0d28ce6..76ca391 100644
--- a/ocw-cli/cli_app.py
+++ b/ocw-cli/cli_app.py
@@ -599,7 +599,13 @@ def run_screen(model_datasets, models_info, 
observations_info,
 
              for member, each_target_dataset in enumerate(new_model_datasets):
                   new_model_datasets[member] = 
dsp.temporal_rebin(new_model_datasets[member], timedelta(days))
-                  new_model_datasets[member] = dsp.subset(EVAL_BOUNDS, 
new_model_datasets[member])
+                  if each_target_dataset.lats.ndim !=2 and 
each_target_dataset.lons.ndim !=2:
+                      new_model_datasets[member] = dsp.subset(EVAL_BOUNDS, 
new_model_datasets[member])
+                  else:
+                      timeStart = min(np.nonzero(each_target_dataset.times >= 
EVAL_BOUNDS.start)[0])
+                      timeEnd = max(np.nonzero(each_target_dataset.times <= 
EVAL_BOUNDS.end)[0])
+                      new_model_datasets[member].times = 
each_target_dataset.times[timeStart:timeEnd+1]
+                      new_model_datasets[member].values = 
each_target_dataset.values[timeStart:timeEnd+1,:]
              screen.addstr(5, 4, "--> Temporally regridded.")
              screen.refresh()
 
@@ -609,21 +615,18 @@ def run_screen(model_datasets, models_info, 
observations_info,
              new_lons = np.arange(overlap_min_lon, overlap_max_lon, 
spatial_grid_setting_lon)
              for i in range(len(obs_dataset)):
                   obs_dataset[i] = dsp.spatial_regrid(obs_dataset[i], 
new_lats, new_lons)
+                  obs_dataset[i] = dsp.variable_unit_conversion(obs_dataset[i])
 
              for member, each_target_dataset in enumerate(new_model_datasets):
                   new_model_datasets[member] = 
dsp.spatial_regrid(new_model_datasets[member], new_lats, new_lons)
+                  new_model_datasets[member] = 
dsp.variable_unit_conversion(new_model_datasets[member])
              screen.addstr(6, 4, "--> Spatially regridded.")
              screen.refresh()
 
-             if metric == 'bias':
-                  for i in range(len(obs_dataset)):
-                       _, obs_dataset[i].values = 
utils.calc_climatology_year(obs_dataset[i])
-                       obs_dataset[i].values = 
np.expand_dims(obs_dataset[i].values, axis=0)
-
-                  for member, each_target_dataset in 
enumerate(new_model_datasets):
-                          _, new_model_datasets[member].values = 
utils.calc_climatology_year(new_model_datasets[member])
-                          new_model_datasets[member].values = 
np.expand_dims(new_model_datasets[member].values, axis=0)
+             obs_dataset = 
dsp.mask_missing_data(obs_dataset+new_model_datasets)[0:len(obs_dataset)]
+             new_model_datasets = 
dsp.mask_missing_data(obs_dataset+new_model_datasets)[len(obs_dataset):]
 
+             if metric == 'bias':
                   allNames = []
 
                   for model in new_model_datasets:
@@ -631,7 +634,7 @@ def run_screen(model_datasets, models_info, 
observations_info,
 
                   screen.addstr(7, 4, "Setting up metrics...")
                   screen.refresh()
-                  mean_bias = metrics.Bias()
+                  mean_bias = metrics.TemporalMeanBias()
                   pattern_correlation = metrics.PatternCorrelation()
                   spatial_std_dev_ratio = metrics.StdDevRatio()
                   screen.addstr(7, 4, "--> Metrics setting done.")
@@ -652,21 +655,24 @@ def run_screen(model_datasets, models_info, 
observations_info,
                             targets.append(new_model_datasets[int(target[-1])])
 
                   evaluation_result = evaluation.Evaluation(reference, 
targets, [mean_bias])
-                  export_evaluation_to_config(evaluation_result)
+                  #export_evaluation_to_config(evaluation_result)
                   evaluation_result.run()
                   screen.addstr(8, 4, "--> Evaluation Finished.")
                   screen.refresh()
 
                   screen.addstr(9, 4, "Generating plots....")
                   screen.refresh()
-                  rcm_bias = evaluation_result.results[:][0]
-                  new_rcm_bias = 
np.squeeze(np.array(evaluation_result.results))
+                  new_rcm_bias = evaluation_result.results[0]
 
                   if not os.path.exists(working_directory):
                        os.makedirs(working_directory)
 
                   fname = working_directory + 'Bias_contour'
+                  fname2= working_directory + 'Obs_contour'
+                  fname3= working_directory + 'Model_contour'
                   plotter.draw_contour_map(new_rcm_bias, new_lats, new_lons, 
gridshape=(2, 5), fname=fname, subtitles=allNames, cmap='coolwarm_r')
+                  
plotter.draw_contour_map(utils.calc_temporal_mean(reference), new_lats, 
new_lons, gridshape=(2, 5), fname=fname2, subtitles=allNames, cmap='coolwarm_r')
+                  
plotter.draw_contour_map(utils.calc_temporal_mean(targets[0]), new_lats, 
new_lons, gridshape=(2, 5), fname=fname3, subtitles=allNames, cmap='coolwarm_r')
                   screen.addstr(9, 4, "--> Plots generated.")
                   screen.refresh()
                   screen.addstr(y-2, 1, "Press 'enter' to Exit: ")

Reply via email to