CLIMATE-583 - Add portrait diagram support

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

Branch: refs/heads/master
Commit: c8539d009d1eefe0efa59d4c554f66c95f12928e
Parents: f9e13d7
Author: Michael Joyce <[email protected]>
Authored: Thu Jun 4 09:50:24 2015 -0700
Committer: Michael Joyce <[email protected]>
Committed: Thu Jun 4 14:44:42 2015 -0700

----------------------------------------------------------------------
 ocw-config-runner/configuration_parsing.py      |  9 ++++--
 ocw-config-runner/example/portrait_diagram.yaml | 30 ++++++++++++++++++++
 ocw-config-runner/plot_generation.py            | 16 ++++++++++-
 3 files changed, 51 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/configuration_parsing.py
----------------------------------------------------------------------
diff --git a/ocw-config-runner/configuration_parsing.py 
b/ocw-config-runner/configuration_parsing.py
index 283a39d..ff853b7 100644
--- a/ocw-config-runner/configuration_parsing.py
+++ b/ocw-config-runner/configuration_parsing.py
@@ -123,9 +123,9 @@ def _config_is_well_formed(config_data):
                 is_well_formed = False
             # Ensure that if we're trying to make a plot that require
             # subregion info that the config has this present.
-            elif plot['type'] in ['subregion']:
+            elif plot['type'] in ['subregion', 'portrait']:
                 if ('subregions' not in config_data or
-                    len(config_data['subregions'] < 1)):
+                    len(config_data['subregions']) < 1):
                     logger.error(
                         'Plot config that requires subregion information is 
present '
                         'in a config file without adequate subregion 
information '
@@ -240,7 +240,10 @@ def _valid_plot_config_data(plot_config_data):
     elif plot_type == 'time_series':
         logger.warn('Time series plots are currently unsupported. Skipping 
validation')
     elif plot_type == 'portrait':
-        logger.warn('Portrait diagrams are currently unsupported. Skipping 
validation')
+        required_keys = set([
+            'metric_index',
+            'output_name'
+        ])
     else:
         logger.error('Invalid plot type specified.')
         return False

http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/example/portrait_diagram.yaml
----------------------------------------------------------------------
diff --git a/ocw-config-runner/example/portrait_diagram.yaml 
b/ocw-config-runner/example/portrait_diagram.yaml
new file mode 100644
index 0000000..f3e45de
--- /dev/null
+++ b/ocw-config-runner/example/portrait_diagram.yaml
@@ -0,0 +1,30 @@
+evaluation:
+    temporal_time_delta: 365
+    spatial_regrid_lats: !!python/tuple [-40, 40, 1]
+    spatial_regrid_lons: !!python/tuple [-40, 40, 1]
+
+datasets:
+    reference:
+        data_source: local
+        file_count: 1
+        path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc
+        variable: tasmax
+
+    targets:
+        - data_source: local
+          file_count: 1
+          path: /tmp/AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc
+          variable: tasmax
+          optional_args:
+              name: WRF
+metrics:
+    - PatternCorrelation
+
+plots:
+    - type: portrait
+      metric_index: 0
+      output_name: portrait_test
+
+subregions:
+    - [-10.0, 0.0, 29.0, 36.5] 
+    - [0.0, 10.0,  29.0, 37.5] 

http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/plot_generation.py
----------------------------------------------------------------------
diff --git a/ocw-config-runner/plot_generation.py 
b/ocw-config-runner/plot_generation.py
index 9da97c2..c0bfa03 100644
--- a/ocw-config-runner/plot_generation.py
+++ b/ocw-config-runner/plot_generation.py
@@ -43,7 +43,7 @@ def plot_from_config(evaluation, config_data):
         elif plot['type'] == 'time_series':
             logger.warn('Time series plots are currently unsupported. Skipping 
...')
         elif plot['type'] == 'portrait':
-            logger.warn('Portrait diagrams are currently unsupported. Skipping 
...')
+            _draw_portrait_diagram(evaluation, plot)
         else:
             logger.error('Unrecognized plot type requested: 
{}'.format(plot['type']))
 
@@ -104,3 +104,17 @@ def _draw_subregion_diagram(evaluation, plot_config):
                           lons,
                           plot_config['output_name'],
                           **plot_config.get('optional_args', {}))
+
+def _draw_portrait_diagram(evaluation, plot_config):
+    """"""
+    metric_index = plot_config['metric_index']
+
+    diagram_data = np.array(evaluation.results[:][metric_index][:])
+    subregion_names = ["R{}".format(i) for i in 
range(len(evaluation.subregions))]
+    target_names = [t.name for t in evaluation.target_datasets]
+
+    plots.draw_portrait_diagram(diagram_data,
+                                target_names,
+                                subregion_names,
+                                fname=plot_config['output_name'],
+                                **plot_config.get('optional_args', {}))

Reply via email to