From 56710b2fd269ff4a15fb237200464d7fd636899a Mon Sep 17 00:00:00 2001 From: CoryMartin-NOAA Date: Wed, 5 Jul 2023 20:02:38 +0000 Subject: [PATCH] Update for new EVA convention --- ush/eva/jedi_gsi_compare_conv.yaml | 868 +++++++------- ush/eva/jedi_gsi_compare_rad.yaml | 1272 ++++++++++----------- ush/eva/jedi_gsi_compare_rad_summary.yaml | 648 ++++++----- ush/eva/marine_eva_post.py | 31 +- ush/eva/marine_gdas_plots.yaml | 434 ++++--- 5 files changed, 1622 insertions(+), 1631 deletions(-) diff --git a/ush/eva/jedi_gsi_compare_conv.yaml b/ush/eva/jedi_gsi_compare_conv.yaml index 502865385..02293a7b0 100644 --- a/ush/eva/jedi_gsi_compare_conv.yaml +++ b/ush/eva/jedi_gsi_compare_conv.yaml @@ -1,464 +1,462 @@ # template YAML file to create EVA YAML files # based on obs spaces listed in JEDI YAML files -diagnostics: -- data: - datasets: - - name: experiment - type: IodaObsSpace - filenames: - - @FILENAME@ - @CHANNELSKEY@ - groups: - - name: ObsValue - variables: &variables @VARIABLES@ - - name: GsiHofXBc - - name: hofx - - name: EffectiveQC - - name: MetaData - - name: GsiEffectiveQC - - name: GsiFinalObsError - - name: EffectiveError - transforms: +datasets: + - name: experiment + type: IodaObsSpace + filenames: + - @FILENAME@ + @CHANNELSKEY@ + groups: + - name: ObsValue + variables: &variables @VARIABLES@ + - name: GsiHofXBc + - name: hofx + - name: EffectiveQC + - name: MetaData + - name: GsiEffectiveQC + - name: GsiFinalObsError + - name: EffectiveError +transforms: - # difference of hofx - - transform: arithmetic - new name: experiment::HofXDiff::${variable} - equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables + # difference of hofx + - transform: arithmetic + new name: experiment::HofXDiff::${variable} + equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables - # difference of effective error - - transform: arithmetic - new name: experiment::ErrDiff::${variable} - equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} - for: - variable: *variables + # difference of effective error + - transform: arithmetic + new name: experiment::ErrDiff::${variable} + equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} + for: + variable: *variables - # difference of QC - - transform: arithmetic - new name: experiment::QCDiff::${variable} - equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} - for: - variable: *variables + # difference of QC + - transform: arithmetic + new name: experiment::QCDiff::${variable} + equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} + for: + variable: *variables - # Generate omb for GSI - - transform: arithmetic - new name: experiment::ObsValueMinusGsiHofXBc::${variable} - equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables + # Generate omb for GSI + - transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables - # Generate omb for JEDI - - transform: arithmetic - new name: experiment::ObsValueMinusHofx::${variable} - equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} - for: - variable: *variables + # Generate omb for JEDI + - transform: arithmetic + new name: experiment::ObsValueMinusHofx::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} + for: + variable: *variables - # Generate hofx that passed QC for JEDI - - transform: accept where - new name: experiment::hofxPassedQc::${variable} - starting field: experiment::hofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate hofx that passed QC for JEDI + - transform: accept where + new name: experiment::hofxPassedQc::${variable} + starting field: experiment::hofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate GSI hofx that passed JEDI QC - - transform: accept where - new name: experiment::GsiHofXBcPassedQc::${variable} - starting field: experiment::GsiHofXBc::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate GSI hofx that passed JEDI QC + - transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate omb that passed QC for JEDI - - transform: accept where - new name: experiment::ObsValueMinushofxPassedQc::${variable} - starting field: experiment::ObsValueMinusHofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate omb that passed QC for JEDI + - transform: accept where + new name: experiment::ObsValueMinushofxPassedQc::${variable} + starting field: experiment::ObsValueMinusHofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate omb that passed QC for GSI - - transform: accept where - new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - starting field: experiment::ObsValueMinusGsiHofXBc::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate omb that passed QC for GSI + - transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # hofxdiff that passed QC for JEDI - - transform: accept where - new name: experiment::HofXDiffPassedJediQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # hofxdiff that passed QC for JEDI + - transform: accept where + new name: experiment::HofXDiffPassedJediQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # hofxdiff that passed QC for GSI - - transform: accept where - new name: experiment::HofXDiffPassedGsiQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::GsiEffectiveQC::${variable} == 0 - for: - variable: *variables + # hofxdiff that passed QC for GSI + - transform: accept where + new name: experiment::HofXDiffPassedGsiQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::GsiEffectiveQC::${variable} == 0 + for: + variable: *variables - graphics: +graphics: - # ---------- Scatter Plots ---------- - # JEDI h(x) vs Observations - # ------------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Observation Value' - add_ylabel: 'JEDI h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'JEDI h(x) versus obs (all obs)' - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'JEDI h(x) versus obs (passed QC in JEDI)' + # ---------- Scatter Plots ---------- + # JEDI h(x) vs Observations + # ------------------------- + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' - # GSI h(x) vs Observations - # ------------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Observations vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Observation Value' - add_ylabel: 'GSI h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::GsiHofXBc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'GSI h(x) versus obs (all obs)' - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::GsiHofXBcPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'GSI h(x) versus obs (passed QC in JEDI)' + # GSI h(x) vs Observations + # ------------------------- + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'GSI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'GSI h(x) versus obs (passed QC in JEDI)' - # JEDI h(x) vs GSI h(x) - # --------------------- + # JEDI h(x) vs GSI h(x) + # --------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'JEDI h(x) vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_hofx_vs_jedi_hofx_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'GSI h(x)' - add_ylabel: 'JEDI h(x)' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::GsiHofXBc::${variable} - y: - variable: experiment::hofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'JEDI h(x) versus GSI h(x)' - - type: Scatter - x: - variable: experiment::GsiHofXBcPassedQc::${variable} - y: - variable: experiment::hofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_hofx_vs_jedi_hofx_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' - # JEDI omb vs GSI omb - # --------------------- + # JEDI omb vs GSI omb + # --------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'JEDI omb vs. GSI omb | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_omb_vs_jedi_omb_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'GSI observation minus h(x)' - add_ylabel: 'JEDI observation minus h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValueMinusGsiHofXBc::${variable} - y: - variable: experiment::ObsValueMinusHofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'GSI omb vs JEDI omb (all obs)' - - type: Scatter - x: - variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - y: - variable: experiment::ObsValueMinushofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'GSI omb vs JEDI omb (passed QC in JEDI)' + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'JEDI omb vs. GSI omb | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_omb_vs_jedi_omb_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'GSI observation minus h(x)' + add_ylabel: 'JEDI observation minus h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + y: + variable: experiment::ObsValueMinusHofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'GSI omb vs JEDI omb (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'GSI omb vs JEDI omb (passed QC in JEDI)' - # H(x) difference as a function of pressure - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'H(x) JEDI-GSI vs Ob P. | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/hofxdiff_vs_pressure_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'h(x) JEDI - h(x) GSI' - add_ylabel: 'Observation Pressure' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::HofXDiff::${variable} - y: - variable: experiment::MetaData::pressure - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'hofxdiff vs pressure' - statistics: - fields: - - field_name: experiment::HofXDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std + # H(x) difference as a function of pressure + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'H(x) JEDI-GSI vs Ob P. | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/hofxdiff_vs_pressure_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'h(x) JEDI - h(x) GSI' + add_ylabel: 'Observation Pressure' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::HofXDiff::${variable} + y: + variable: experiment::MetaData::pressure + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'hofxdiff vs pressure' + statistics: + fields: + - field_name: experiment::HofXDiff::${variable} + @CHANNELKEY@ + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std - # QC difference as a function of H(x) difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'H(x) JEDI-GSI vs QC JEDI-GSI. | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/hofxdiff_vs_qcdiff_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'h(x) JEDI - h(x) GSI' - add_ylabel: 'h(x) JEDI - h(x) GSI' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::QCDiff::${variable} - y: - variable: experiment::HofXDiff::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'hofxdiff vs qcdiff' - statistics: - fields: - - field_name: experiment::QCDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std + # QC difference as a function of H(x) difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'H(x) JEDI-GSI vs QC JEDI-GSI. | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/hofxdiff_vs_qcdiff_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'h(x) JEDI - h(x) GSI' + add_ylabel: 'h(x) JEDI - h(x) GSI' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::QCDiff::${variable} + y: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'hofxdiff vs qcdiff' + statistics: + fields: + - field_name: experiment::QCDiff::${variable} + @CHANNELKEY@ + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std - # Error difference as a function of pressure - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Error JEDI-GSI vs Ob P. | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/errordiff_vs_pressure_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Error JEDI - Error GSI' - add_ylabel: 'Observation Pressure' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::ErrDiff::${variable} - y: - variable: experiment::MetaData::pressure - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'errordiff vs pressure' + # Error difference as a function of pressure + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Error JEDI-GSI vs Ob P. | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/errordiff_vs_pressure_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Error JEDI - Error GSI' + add_ylabel: 'Observation Pressure' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::ErrDiff::${variable} + y: + variable: experiment::MetaData::pressure + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'errordiff vs pressure' - # ---------- Histograms ---------- - # Histogram of h(x) difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: histograms/hofxdiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'h(x) JEDI - h(x) GSI' - add_ylabel: 'Count' - statistics: - fields: - - field_name: experiment::HofXDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::HofXDiff::${variable} + # ---------- Histograms ---------- + # Histogram of h(x) difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: histograms/hofxdiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'h(x) JEDI - h(x) GSI' + add_ylabel: 'Count' + statistics: + fields: + - field_name: experiment::HofXDiff::${variable} @CHANNELKEY@ - color: 'blue' - label: 'h(x) JEDI - h(x) GSI' - bins: 100 + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + color: 'blue' + label: 'h(x) JEDI - h(x) GSI' + bins: 100 - # Histogram of obs error difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Difference of final obs error JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: histograms/errordiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'error JEDI - error GSI' - add_ylabel: 'Count' - statistics: - fields: - - field_name: experiment::ErrDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::ErrDiff::${variable} + # Histogram of obs error difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Difference of final obs error JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: histograms/errordiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'error JEDI - error GSI' + add_ylabel: 'Count' + statistics: + fields: + - field_name: experiment::ErrDiff::${variable} @CHANNELKEY@ - color: 'blue' - label: 'error JEDI - error GSI' - bins: 100 + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ErrDiff::${variable} + @CHANNELKEY@ + color: 'blue' + label: 'error JEDI - error GSI' + bins: 100 - # ---------- Map Plots ---------- - # Map plot of h(x) difference - # -------- + # ---------- Map Plots ---------- + # Map plot of h(x) difference + # -------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - figure size: [11,5] - title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: map_plots/hofxdiff_map_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - tight_layout: true - plots: - - mapping: - projection: plcarr - domain: global - add_map_features: ['coastline'] - add_grid: - add_colorbar: - layers: - - type: MapScatter - longitude: - variable: experiment::MetaData::longitude - latitude: - variable: experiment::MetaData::latitude - data: - variable: experiment::HofXDiff::${variable} - @CHANNELKEY@ - markersize: 2 - label: '$(variable)' - colorbar: true - # below may need to be edited/removed - cmap: 'bwr' - vmin: -0.5 - vmax: 0.5 + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + figure size: [11,5] + title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: map_plots/hofxdiff_map_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + tight_layout: true + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_grid: + add_colorbar: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + markersize: 2 + label: '$(variable)' + colorbar: true + # below may need to be edited/removed + cmap: 'bwr' + vmin: -0.5 + vmax: 0.5 diff --git a/ush/eva/jedi_gsi_compare_rad.yaml b/ush/eva/jedi_gsi_compare_rad.yaml index 619fe2fdd..b7bd1be89 100644 --- a/ush/eva/jedi_gsi_compare_rad.yaml +++ b/ush/eva/jedi_gsi_compare_rad.yaml @@ -1,642 +1,640 @@ # template YAML file to create EVA YAML files # based on obs spaces listed in JEDI YAML files -diagnostics: -- data: - datasets: - - name: experiment - type: IodaObsSpace - filenames: - - @FILENAME@ - @CHANNELSKEY@ - groups: - - name: ObsValue - variables: &variables @VARIABLES@ - - name: GsiHofXBc - - name: hofx - - name: EffectiveQC - - name: MetaData - - name: GsiEffectiveQC - - name: GsiFinalObsError - - name: EffectiveError - transforms: - - # difference of hofx - - transform: arithmetic - new name: experiment::HofXDiff::${variable} - equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables - - # difference of effective error - - transform: arithmetic - new name: experiment::ErrDiff::${variable} - equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} - for: - variable: *variables - - # difference of QC - - transform: arithmetic - new name: experiment::QCDiff::${variable} - equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} - for: - variable: *variables - - # Generate omb for GSI - - transform: arithmetic - new name: experiment::ObsValueMinusGsiHofXBc::${variable} - equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables - - # Generate omb for JEDI - - transform: arithmetic - new name: experiment::ObsValueMinusHofx::${variable} - equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} - for: - variable: *variables - - # Generate hofx that passed QC for JEDI - - transform: accept where - new name: experiment::hofxPassedQc::${variable} - starting field: experiment::hofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables - - # Generate GSI hofx that passed JEDI QC - - transform: accept where - new name: experiment::GsiHofXBcPassedQc::${variable} - starting field: experiment::GsiHofXBc::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables - - # Generate omb that passed QC for JEDI - - transform: accept where - new name: experiment::ObsValueMinushofxPassedQc::${variable} - starting field: experiment::ObsValueMinusHofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables - - # Generate omb that passed QC for GSI - - transform: accept where - new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - starting field: experiment::ObsValueMinusGsiHofXBc::${variable} - where: - - experiment::GsiEffectiveQC::${variable} == 0 - for: - variable: *variables - - # hofxdiff that passed QC for JEDI - - transform: accept where - new name: experiment::HofXDiffPassedJediQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables - - # hofxdiff that passed QC for GSI - - transform: accept where - new name: experiment::HofXDiffPassedGsiQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::GsiEffectiveQC::${variable} == 0 - for: - variable: *variables - - # Stats for hofx - - transform: channel_stats - variable_name: experiment::HofXDiff::${variable} - for: - variable: *variables - - # Stats for omb that passed QC for GSI - - transform: channel_stats - variable_name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - for: - variable: *variables - - # Stats for omb that passed QC for JEDI - - transform: channel_stats - variable_name: experiment::ObsValueMinushofxPassedQc::${variable} - for: - variable: *variables - - # Stats for Obs Error Difference - - transform: channel_stats - variable_name: experiment::ErrDiff::${variable} - for: - variable: *variables - - # Generate QC Counts Difference - - transform: arithmetic - new name: experiment::QCCountsDiff::${variable} - equals: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature-experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature - for: - variable: *variables - - # Because of some issues with passive IR channels, the following four transforms create QC counts just for channels with non-zero JEDI counts - - transform: accept where - new name: experiment::PassedQc_Used::${variable} - starting field: experiment::ObsValueMinushofxPassedQcCount::${variable} - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables - - - transform: accept where - new name: experiment::GsiPassedQc_Used::${variable} - starting field: experiment::ObsValueMinusGsiHofXBcPassedQcCount::${variable} - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables - - - transform: arithmetic - new name: experiment::QCCountsDiff_Used::${variable} - equals: experiment::PassedQc_Used::brightnessTemperature-experiment::GsiPassedQc_Used::brightnessTemperature - for: - variable: *variables - - - transform: accept where - new name: experiment::MetaData::sensorChannelNumber_Used - starting field: experiment::MetaData::sensorChannelNumber - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables - - graphics: - - figure: - layout: [1,1] - title: 'JEDI HofX - GSI HofX vs Channel | @NAME@ @CYCLE@' - output name: HofX_Difference_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'HofX Difference' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMean::brightnessTemperature - markersize: 5 - color: 'red' - label: 'Mean' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMax::brightnessTemperature - markersize: 5 - color: 'green' - label: 'Maximum' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMin::brightnessTemperature - markersize: 5 - color: 'blue' - label: 'Minimum' - do_linear_regression: False - - - figure: - layout: [1,1] - title: 'Difference in Number of Obs Passing QC | @NAME@ @CYCLE@' - output name: QCCount_Diff_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::QCCountsDiff::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI-GSI Counts Difference' - do_linear_regression: False - - - - figure: - layout: [1,1] - title: 'Difference in Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' - output name: QCCount_Diff_Used_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::QCCountsDiff_Used::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI-GSI Counts Difference' - do_linear_regression: False - - - figure: - layout: [1,1] - title: 'Number of Obs Passing QC | @NAME@ @CYCLE@' - output name: PassedQC_Counts@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature - markersize: 5 - color: 'green' - label: 'GSI' - do_linear_regression: False - - - figure: - layout: [1,1] - title: 'Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' - output name: PassedQC_Counts_Used@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::PassedQc_Used::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::GsiPassedQc_Used::brightnessTemperature - markersize: 5 - color: 'green' - label: 'GSI' - do_linear_regression: False - - - figure: - layout: [1,1] - title: 'JEDI Obs Error - GSI Obs Error vs Channel | @NAME@ @CYCLE@' - output name: ObsErr_Difference_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Observation Error Difference' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMean::brightnessTemperature - markersize: 5 - color: 'red' - label: 'Mean' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMax::brightnessTemperature - markersize: 5 - color: 'green' - label: 'Maximum' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMin::brightnessTemperature - markersize: 5 - color: 'blue' - label: 'Minimum' - do_linear_regression: False - - # ---------- Scatter Plots ---------- - # JEDI h(x) vs Observations - # ------------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Observation Value' - add_ylabel: 'JEDI h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'JEDI h(x) versus obs (all obs)' - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'JEDI h(x) versus obs (passed QC in JEDI)' - - # GSI h(x) vs Observations - # ------------------------- - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Observations vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Observation Value' - add_ylabel: 'GSI h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::GsiHofXBc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'GSI h(x) versus obs (all obs)' - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::GsiHofXBcPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'GSI h(x) versus obs (passed QC in JEDI)' - - # JEDI h(x) vs GSI h(x) - # --------------------- - - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'JEDI h(x) vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_hofx_vs_jedi_hofx_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'GSI h(x)' - add_ylabel: 'JEDI h(x)' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::GsiHofXBc::${variable} - y: - variable: experiment::hofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'JEDI h(x) versus GSI h(x)' - - type: Scatter - x: - variable: experiment::GsiHofXBcPassedQc::${variable} - y: - variable: experiment::hofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' - - # JEDI omb vs GSI omb - # --------------------- - - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'JEDI omb vs. GSI omb | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/gsi_omb_vs_jedi_omb_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'GSI observation minus h(x)' - add_ylabel: 'JEDI observation minus h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValueMinusGsiHofXBc::${variable} - y: - variable: experiment::ObsValueMinusHofx::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'GSI omb vs JEDI omb (all obs)' - - type: Scatter - x: - variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - y: - variable: experiment::ObsValueMinushofxPassedQc::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'GSI omb vs JEDI omb (passed QC in JEDI)' - - # QC difference as a function of H(x) difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'H(x) JEDI-GSI vs QC JEDI-GSI. | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/hofxdiff_vs_qcdiff_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'h(x) JEDI - h(x) GSI' - add_ylabel: 'h(x) JEDI - h(x) GSI' - add_grid: - add_legend: - loc: 'lower left' - layers: - - type: Scatter - x: - variable: experiment::QCDiff::${variable} - y: - variable: experiment::HofXDiff::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'hofxdiff vs qcdiff' - statistics: - fields: - - field_name: experiment::QCDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - - # ---------- Histograms ---------- - # Histogram of h(x) difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: histograms/hofxdiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'h(x) JEDI - h(x) GSI' - add_ylabel: 'Count' - statistics: - fields: - - field_name: experiment::HofXDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::HofXDiff::${variable} +datasets: + - name: experiment + type: IodaObsSpace + filenames: + - @FILENAME@ + @CHANNELSKEY@ + groups: + - name: ObsValue + variables: &variables @VARIABLES@ + - name: GsiHofXBc + - name: hofx + - name: EffectiveQC + - name: MetaData + - name: GsiEffectiveQC + - name: GsiFinalObsError + - name: EffectiveError +transforms: + + # difference of hofx + - transform: arithmetic + new name: experiment::HofXDiff::${variable} + equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + + # difference of effective error + - transform: arithmetic + new name: experiment::ErrDiff::${variable} + equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} + for: + variable: *variables + + # difference of QC + - transform: arithmetic + new name: experiment::QCDiff::${variable} + equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} + for: + variable: *variables + + # Generate omb for GSI + - transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables + + # Generate omb for JEDI + - transform: arithmetic + new name: experiment::ObsValueMinusHofx::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} + for: + variable: *variables + + # Generate hofx that passed QC for JEDI + - transform: accept where + new name: experiment::hofxPassedQc::${variable} + starting field: experiment::hofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables + + # Generate GSI hofx that passed JEDI QC + - transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables + + # Generate omb that passed QC for JEDI + - transform: accept where + new name: experiment::ObsValueMinushofxPassedQc::${variable} + starting field: experiment::ObsValueMinusHofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables + + # Generate omb that passed QC for GSI + - transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::GsiEffectiveQC::${variable} == 0 + for: + variable: *variables + + # hofxdiff that passed QC for JEDI + - transform: accept where + new name: experiment::HofXDiffPassedJediQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables + + # hofxdiff that passed QC for GSI + - transform: accept where + new name: experiment::HofXDiffPassedGsiQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::GsiEffectiveQC::${variable} == 0 + for: + variable: *variables + + # Stats for hofx + - transform: channel_stats + variable_name: experiment::HofXDiff::${variable} + for: + variable: *variables + + # Stats for omb that passed QC for GSI + - transform: channel_stats + variable_name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + for: + variable: *variables + + # Stats for omb that passed QC for JEDI + - transform: channel_stats + variable_name: experiment::ObsValueMinushofxPassedQc::${variable} + for: + variable: *variables + + # Stats for Obs Error Difference + - transform: channel_stats + variable_name: experiment::ErrDiff::${variable} + for: + variable: *variables + + # Generate QC Counts Difference + - transform: arithmetic + new name: experiment::QCCountsDiff::${variable} + equals: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature-experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature + for: + variable: *variables + + # Because of some issues with passive IR channels, the following four transforms create QC counts just for channels with non-zero JEDI counts + - transform: accept where + new name: experiment::PassedQc_Used::${variable} + starting field: experiment::ObsValueMinushofxPassedQcCount::${variable} + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables + + - transform: accept where + new name: experiment::GsiPassedQc_Used::${variable} + starting field: experiment::ObsValueMinusGsiHofXBcPassedQcCount::${variable} + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables + + - transform: arithmetic + new name: experiment::QCCountsDiff_Used::${variable} + equals: experiment::PassedQc_Used::brightnessTemperature-experiment::GsiPassedQc_Used::brightnessTemperature + for: + variable: *variables + + - transform: accept where + new name: experiment::MetaData::sensorChannelNumber_Used + starting field: experiment::MetaData::sensorChannelNumber + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables + +graphics: + - figure: + layout: [1,1] + title: 'JEDI HofX - GSI HofX vs Channel | @NAME@ @CYCLE@' + output name: HofX_Difference_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'HofX Difference' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMean::brightnessTemperature + markersize: 5 + color: 'red' + label: 'Mean' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMax::brightnessTemperature + markersize: 5 + color: 'green' + label: 'Maximum' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMin::brightnessTemperature + markersize: 5 + color: 'blue' + label: 'Minimum' + do_linear_regression: False + + - figure: + layout: [1,1] + title: 'Difference in Number of Obs Passing QC | @NAME@ @CYCLE@' + output name: QCCount_Diff_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::QCCountsDiff::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI-GSI Counts Difference' + do_linear_regression: False + + + - figure: + layout: [1,1] + title: 'Difference in Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' + output name: QCCount_Diff_Used_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::QCCountsDiff_Used::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI-GSI Counts Difference' + do_linear_regression: False + + - figure: + layout: [1,1] + title: 'Number of Obs Passing QC | @NAME@ @CYCLE@' + output name: PassedQC_Counts@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature + markersize: 5 + color: 'green' + label: 'GSI' + do_linear_regression: False + + - figure: + layout: [1,1] + title: 'Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' + output name: PassedQC_Counts_Used@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::PassedQc_Used::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::GsiPassedQc_Used::brightnessTemperature + markersize: 5 + color: 'green' + label: 'GSI' + do_linear_regression: False + + - figure: + layout: [1,1] + title: 'JEDI Obs Error - GSI Obs Error vs Channel | @NAME@ @CYCLE@' + output name: ObsErr_Difference_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Observation Error Difference' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMean::brightnessTemperature + markersize: 5 + color: 'red' + label: 'Mean' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMax::brightnessTemperature + markersize: 5 + color: 'green' + label: 'Maximum' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMin::brightnessTemperature + markersize: 5 + color: 'blue' + label: 'Minimum' + do_linear_regression: False + + # ---------- Scatter Plots ---------- + # JEDI h(x) vs Observations + # ------------------------- + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' + + # GSI h(x) vs Observations + # ------------------------- + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'GSI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'GSI h(x) versus obs (passed QC in JEDI)' + + # JEDI h(x) vs GSI h(x) + # --------------------- + + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_hofx_vs_jedi_hofx_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus GSI h(x) (passed QC in JEDI)' + + # JEDI omb vs GSI omb + # --------------------- + + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'JEDI omb vs. GSI omb | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/gsi_omb_vs_jedi_omb_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'GSI observation minus h(x)' + add_ylabel: 'JEDI observation minus h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + y: + variable: experiment::ObsValueMinusHofx::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'GSI omb vs JEDI omb (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofxPassedQc::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'GSI omb vs JEDI omb (passed QC in JEDI)' + + # QC difference as a function of H(x) difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'H(x) JEDI-GSI vs QC JEDI-GSI. | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/hofxdiff_vs_qcdiff_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'h(x) JEDI - h(x) GSI' + add_ylabel: 'h(x) JEDI - h(x) GSI' + add_grid: + add_legend: + loc: 'lower left' + layers: + - type: Scatter + x: + variable: experiment::QCDiff::${variable} + y: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'hofxdiff vs qcdiff' + statistics: + fields: + - field_name: experiment::QCDiff::${variable} @CHANNELKEY@ - color: 'blue' - label: 'h(x) JEDI - h(x) GSI' - bins: 100 - - # Histogram of obs error difference - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Difference of final obs error JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: histograms/errordiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'error JEDI - error GSI' - add_ylabel: 'Count' - statistics: - fields: - - field_name: experiment::ErrDiff::${variable} - @CHANNELKEY@ - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::ErrDiff::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + + # ---------- Histograms ---------- + # Histogram of h(x) difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: histograms/hofxdiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'h(x) JEDI - h(x) GSI' + add_ylabel: 'Count' + statistics: + fields: + - field_name: experiment::HofXDiff::${variable} @CHANNELKEY@ - color: 'blue' - label: 'error JEDI - error GSI' - bins: 100 - - # ---------- Map Plots ---------- - # Map plot of h(x) difference - # -------- - - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - figure size: [11,5] - title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' - output name: map_plots/hofxdiff_map_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - tight_layout: true - plots: - - mapping: - projection: plcarr - domain: global - add_map_features: ['coastline'] - add_grid: - add_colorbar: - layers: - - type: MapScatter - longitude: - variable: experiment::MetaData::longitude - latitude: - variable: experiment::MetaData::latitude - data: - variable: experiment::HofXDiff::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + color: 'blue' + label: 'h(x) JEDI - h(x) GSI' + bins: 100 + + # Histogram of obs error difference + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Difference of final obs error JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: histograms/errordiff_histogram_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'error JEDI - error GSI' + add_ylabel: 'Count' + statistics: + fields: + - field_name: experiment::ErrDiff::${variable} @CHANNELKEY@ - markersize: 2 - label: '$(variable)' - colorbar: true - # below may need to be edited/removed - cmap: 'bwr' - vmin: -0.1 - vmax: 0.1 + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ErrDiff::${variable} + @CHANNELKEY@ + color: 'blue' + label: 'error JEDI - error GSI' + bins: 100 + + # ---------- Map Plots ---------- + # Map plot of h(x) difference + # -------- + + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + figure size: [11,5] + title: 'Difference of h(x) JEDI-GSI | @NAME@ @CYCLE@ | ${variable_title}' + output name: map_plots/hofxdiff_map_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + tight_layout: true + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_grid: + add_colorbar: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::HofXDiff::${variable} + @CHANNELKEY@ + markersize: 2 + label: '$(variable)' + colorbar: true + # below may need to be edited/removed + cmap: 'bwr' + vmin: -0.1 + vmax: 0.1 diff --git a/ush/eva/jedi_gsi_compare_rad_summary.yaml b/ush/eva/jedi_gsi_compare_rad_summary.yaml index 8424c6935..76f2e59fd 100644 --- a/ush/eva/jedi_gsi_compare_rad_summary.yaml +++ b/ush/eva/jedi_gsi_compare_rad_summary.yaml @@ -1,354 +1,352 @@ # template YAML file to create EVA YAML files # based on obs spaces listed in JEDI YAML files -diagnostics: -- data: - datasets: - - name: experiment - type: IodaObsSpace - filenames: - - @FILENAME@ - @CHANNELSKEY@ - groups: - - name: ObsValue - variables: &variables @VARIABLES@ - - name: GsiHofXBc - - name: hofx - - name: EffectiveQC - - name: MetaData - - name: GsiEffectiveQC - - name: GsiFinalObsError - - name: EffectiveError - transforms: +datasets: + - name: experiment + type: IodaObsSpace + filenames: + - @FILENAME@ + @CHANNELSKEY@ + groups: + - name: ObsValue + variables: &variables @VARIABLES@ + - name: GsiHofXBc + - name: hofx + - name: EffectiveQC + - name: MetaData + - name: GsiEffectiveQC + - name: GsiFinalObsError + - name: EffectiveError +transforms: - # difference of hofx - - transform: arithmetic - new name: experiment::HofXDiff::${variable} - equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables + # difference of hofx + - transform: arithmetic + new name: experiment::HofXDiff::${variable} + equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables - # difference of effective error - - transform: arithmetic - new name: experiment::ErrDiff::${variable} - equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} - for: - variable: *variables + # difference of effective error + - transform: arithmetic + new name: experiment::ErrDiff::${variable} + equals: experiment::EffectiveError::${variable}-experiment::GsiFinalObsError::${variable} + for: + variable: *variables - # difference of QC - - transform: arithmetic - new name: experiment::QCDiff::${variable} - equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} - for: - variable: *variables + # difference of QC + - transform: arithmetic + new name: experiment::QCDiff::${variable} + equals: experiment::EffectiveQC::${variable}-experiment::GsiEffectiveQC::${variable} + for: + variable: *variables - # Generate omb for GSI - - transform: arithmetic - new name: experiment::ObsValueMinusGsiHofXBc::${variable} - equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} - for: - variable: *variables + # Generate omb for GSI + - transform: arithmetic + new name: experiment::ObsValueMinusGsiHofXBc::${variable} + equals: experiment::ObsValue::${variable}-experiment::GsiHofXBc::${variable} + for: + variable: *variables - # Generate omb for JEDI - - transform: arithmetic - new name: experiment::ObsValueMinusHofx::${variable} - equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} - for: - variable: *variables + # Generate omb for JEDI + - transform: arithmetic + new name: experiment::ObsValueMinusHofx::${variable} + equals: experiment::ObsValue::${variable}-experiment::hofx::${variable} + for: + variable: *variables - # Generate hofx that passed QC for JEDI - - transform: accept where - new name: experiment::hofxPassedQc::${variable} - starting field: experiment::hofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate hofx that passed QC for JEDI + - transform: accept where + new name: experiment::hofxPassedQc::${variable} + starting field: experiment::hofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate GSI hofx that passed JEDI QC - - transform: accept where - new name: experiment::GsiHofXBcPassedQc::${variable} - starting field: experiment::GsiHofXBc::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate GSI hofx that passed JEDI QC + - transform: accept where + new name: experiment::GsiHofXBcPassedQc::${variable} + starting field: experiment::GsiHofXBc::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate omb that passed QC for JEDI - - transform: accept where - new name: experiment::ObsValueMinushofxPassedQc::${variable} - starting field: experiment::ObsValueMinusHofx::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate omb that passed QC for JEDI + - transform: accept where + new name: experiment::ObsValueMinushofxPassedQc::${variable} + starting field: experiment::ObsValueMinusHofx::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # Generate omb that passed QC for GSI - - transform: accept where - new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - starting field: experiment::ObsValueMinusGsiHofXBc::${variable} - where: - - experiment::GsiEffectiveQC::${variable} == 0 - for: - variable: *variables + # Generate omb that passed QC for GSI + - transform: accept where + new name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + starting field: experiment::ObsValueMinusGsiHofXBc::${variable} + where: + - experiment::GsiEffectiveQC::${variable} == 0 + for: + variable: *variables - # hofxdiff that passed QC for JEDI - - transform: accept where - new name: experiment::HofXDiffPassedJediQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::EffectiveQC::${variable} == 0 - for: - variable: *variables + # hofxdiff that passed QC for JEDI + - transform: accept where + new name: experiment::HofXDiffPassedJediQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::EffectiveQC::${variable} == 0 + for: + variable: *variables - # hofxdiff that passed QC for GSI - - transform: accept where - new name: experiment::HofXDiffPassedGsiQc::${variable} - starting field: experiment::HofXDiff::${variable} - where: - - experiment::GsiEffectiveQC::${variable} == 0 - for: - variable: *variables + # hofxdiff that passed QC for GSI + - transform: accept where + new name: experiment::HofXDiffPassedGsiQc::${variable} + starting field: experiment::HofXDiff::${variable} + where: + - experiment::GsiEffectiveQC::${variable} == 0 + for: + variable: *variables - # Stats for hofx - - transform: channel_stats - variable_name: experiment::HofXDiff::${variable} - for: - variable: *variables + # Stats for hofx + - transform: channel_stats + variable_name: experiment::HofXDiff::${variable} + for: + variable: *variables - # Stats for omb that passed QC for GSI - - transform: channel_stats - variable_name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} - for: - variable: *variables + # Stats for omb that passed QC for GSI + - transform: channel_stats + variable_name: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + for: + variable: *variables - # Stats for omb that passed QC for JEDI - - transform: channel_stats - variable_name: experiment::ObsValueMinushofxPassedQc::${variable} - for: - variable: *variables + # Stats for omb that passed QC for JEDI + - transform: channel_stats + variable_name: experiment::ObsValueMinushofxPassedQc::${variable} + for: + variable: *variables - # Stats for Obs Error Difference - - transform: channel_stats - variable_name: experiment::ErrDiff::${variable} - for: - variable: *variables + # Stats for Obs Error Difference + - transform: channel_stats + variable_name: experiment::ErrDiff::${variable} + for: + variable: *variables - # Generate QC Counts Difference - - transform: arithmetic - new name: experiment::QCCountsDiff::${variable} - equals: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature-experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature - for: - variable: *variables + # Generate QC Counts Difference + - transform: arithmetic + new name: experiment::QCCountsDiff::${variable} + equals: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature-experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature + for: + variable: *variables - # Because of some issues with passive IR channels, the following four transforms create QC counts just for channels with non-zero JEDI counts - - transform: accept where - new name: experiment::PassedQc_Used::${variable} - starting field: experiment::ObsValueMinushofxPassedQcCount::${variable} - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables + # Because of some issues with passive IR channels, the following four transforms create QC counts just for channels with non-zero JEDI counts + - transform: accept where + new name: experiment::PassedQc_Used::${variable} + starting field: experiment::ObsValueMinushofxPassedQcCount::${variable} + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables - - transform: accept where - new name: experiment::GsiPassedQc_Used::${variable} - starting field: experiment::ObsValueMinusGsiHofXBcPassedQcCount::${variable} - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables + - transform: accept where + new name: experiment::GsiPassedQc_Used::${variable} + starting field: experiment::ObsValueMinusGsiHofXBcPassedQcCount::${variable} + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables - - transform: arithmetic - new name: experiment::QCCountsDiff_Used::${variable} - equals: experiment::PassedQc_Used::brightnessTemperature-experiment::GsiPassedQc_Used::brightnessTemperature - for: - variable: *variables + - transform: arithmetic + new name: experiment::QCCountsDiff_Used::${variable} + equals: experiment::PassedQc_Used::brightnessTemperature-experiment::GsiPassedQc_Used::brightnessTemperature + for: + variable: *variables - - transform: accept where - new name: experiment::MetaData::sensorChannelNumber_Used - starting field: experiment::MetaData::sensorChannelNumber - where: - - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 - for: - variable: *variables + - transform: accept where + new name: experiment::MetaData::sensorChannelNumber_Used + starting field: experiment::MetaData::sensorChannelNumber + where: + - experiment::ObsValueMinushofxPassedQcCount::${variable} > 0 + for: + variable: *variables - graphics: - - figure: - layout: [1,1] - title: 'JEDI HofX - GSI HofX vs Channel | @NAME@ @CYCLE@' - output name: HofX_Difference_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'HofX Difference' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMean::brightnessTemperature - markersize: 5 - color: 'red' - label: 'Mean' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMax::brightnessTemperature - markersize: 5 - color: 'green' - label: 'Maximum' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::HofXDiffMin::brightnessTemperature - markersize: 5 - color: 'blue' - label: 'Minimum' - do_linear_regression: False +graphics: + - figure: + layout: [1,1] + title: 'JEDI HofX - GSI HofX vs Channel | @NAME@ @CYCLE@' + output name: HofX_Difference_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'HofX Difference' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMean::brightnessTemperature + markersize: 5 + color: 'red' + label: 'Mean' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMax::brightnessTemperature + markersize: 5 + color: 'green' + label: 'Maximum' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::HofXDiffMin::brightnessTemperature + markersize: 5 + color: 'blue' + label: 'Minimum' + do_linear_regression: False - - figure: - layout: [1,1] - title: 'Difference in Number of Obs Passing QC | @NAME@ @CYCLE@' - output name: QCCount_Diff_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::QCCountsDiff::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI-GSI Counts Difference' - do_linear_regression: False + - figure: + layout: [1,1] + title: 'Difference in Number of Obs Passing QC | @NAME@ @CYCLE@' + output name: QCCount_Diff_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::QCCountsDiff::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI-GSI Counts Difference' + do_linear_regression: False - - figure: - layout: [1,1] - title: 'Difference in Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' - output name: QCCount_Diff_Used_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::QCCountsDiff_Used::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI-GSI Counts Difference' - do_linear_regression: False + - figure: + layout: [1,1] + title: 'Difference in Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' + output name: QCCount_Diff_Used_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::QCCountsDiff_Used::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI-GSI Counts Difference' + do_linear_regression: False - - figure: - layout: [1,1] - title: 'Number of Obs Passing QC | @NAME@ @CYCLE@' - output name: PassedQC_Counts@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature - markersize: 5 - color: 'green' - label: 'GSI' - do_linear_regression: False + - figure: + layout: [1,1] + title: 'Number of Obs Passing QC | @NAME@ @CYCLE@' + output name: PassedQC_Counts@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ObsValueMinushofxPassedQcCount::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ObsValueMinusGsiHofXBcPassedQcCount::brightnessTemperature + markersize: 5 + color: 'green' + label: 'GSI' + do_linear_regression: False - - figure: - layout: [1,1] - title: 'Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' - output name: PassedQC_Counts_Used@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Counts' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::PassedQc_Used::brightnessTemperature - markersize: 5 - color: 'red' - label: 'JEDI' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber_Used - y: - variable: experiment::GsiPassedQc_Used::brightnessTemperature - markersize: 5 - color: 'green' - label: 'GSI' - do_linear_regression: False + - figure: + layout: [1,1] + title: 'Number of Obs Passing QC - Used Channels Only | @NAME@ @CYCLE@' + output name: PassedQC_Counts_Used@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Counts' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::PassedQc_Used::brightnessTemperature + markersize: 5 + color: 'red' + label: 'JEDI' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber_Used + y: + variable: experiment::GsiPassedQc_Used::brightnessTemperature + markersize: 5 + color: 'green' + label: 'GSI' + do_linear_regression: False - - figure: - layout: [1,1] - title: 'JEDI Obs Error - GSI Obs Error vs Channel | @NAME@ @CYCLE@' - output name: ObsErr_Difference_@CYCLE@_@NAME@.png - plots: - - add_xlabel: 'Channel' - add_ylabel: 'Observation Error Difference' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMean::brightnessTemperature - markersize: 5 - color: 'red' - label: 'Mean' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMax::brightnessTemperature - markersize: 5 - color: 'green' - label: 'Maximum' - do_linear_regression: False - - type: Scatter - x: - variable: experiment::MetaData::sensorChannelNumber - y: - variable: experiment::ErrDiffMin::brightnessTemperature - markersize: 5 - color: 'blue' - label: 'Minimum' - do_linear_regression: False + - figure: + layout: [1,1] + title: 'JEDI Obs Error - GSI Obs Error vs Channel | @NAME@ @CYCLE@' + output name: ObsErr_Difference_@CYCLE@_@NAME@.png + plots: + - add_xlabel: 'Channel' + add_ylabel: 'Observation Error Difference' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMean::brightnessTemperature + markersize: 5 + color: 'red' + label: 'Mean' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMax::brightnessTemperature + markersize: 5 + color: 'green' + label: 'Maximum' + do_linear_regression: False + - type: Scatter + x: + variable: experiment::MetaData::sensorChannelNumber + y: + variable: experiment::ErrDiffMin::brightnessTemperature + markersize: 5 + color: 'blue' + label: 'Minimum' + do_linear_regression: False diff --git a/ush/eva/marine_eva_post.py b/ush/eva/marine_eva_post.py index bf5634f45..9cdf01c90 100755 --- a/ush/eva/marine_eva_post.py +++ b/ush/eva/marine_eva_post.py @@ -23,22 +23,21 @@ def marine_eva_post(inputyaml, outputdir, diagdir): logging.info(f'Loading input YAML from {inputyaml}') except Exception as e: logging.error(f'Error occurred when attempting to load: {inputyaml}, error: {e}') - for diagnostic in input_yaml_dict['diagnostics']: - for dataset in diagnostic['data']['datasets']: - newfilenames = [] - for filename in dataset['filenames']: - newfilename = os.path.join(diagdir, os.path.basename(filename)) - newfilenames.append(newfilename) - dataset['filenames'] = newfilenames - for graphic in diagnostic['graphics']: - # this assumes that there is only one variable, or that the - # variables are all the same - variable = graphic['batch figure']['variables'][0] - for plot in graphic['plots']: - for layer in plot['layers']: - if layer['type'] == 'MapScatter': - layer['vmin'] = vminmax[variable]['vmin'] - layer['vmax'] = vminmax[variable]['vmax'] + for dataset in input_yaml_dict['datasets']: + newfilenames = [] + for filename in dataset['filenames']: + newfilename = os.path.join(diagdir, os.path.basename(filename)) + newfilenames.append(newfilename) + dataset['filenames'] = newfilenames + for graphic in input_yaml_dict['graphics']: + # this assumes that there is only one variable, or that the + # variables are all the same + variable = graphic['batch figure']['variables'][0] + for plot in graphic['plots']: + for layer in plot['layers']: + if layer['type'] == 'MapScatter': + layer['vmin'] = vminmax[variable]['vmin'] + layer['vmax'] = vminmax[variable]['vmax'] # first, let us prepend some comments that tell someone this output YAML was generated now = datetime.datetime.now() diff --git a/ush/eva/marine_gdas_plots.yaml b/ush/eva/marine_gdas_plots.yaml index d42de87e2..78e9f6c17 100644 --- a/ush/eva/marine_gdas_plots.yaml +++ b/ush/eva/marine_gdas_plots.yaml @@ -1,221 +1,219 @@ # template YAML file to create EVA YAML files # based on obs spaces listed in JEDI YAML files -diagnostics: -- data: - datasets: - - name: experiment - type: IodaObsSpace - filenames: - - @FILENAME@ - @CHANNELSKEY@ - groups: - - name: ObsValue - variables: &variables @VARIABLES@ - - name: ObsError - - name: ombg - - name: oman - - name: hofx0 - - name: EffectiveQC0 - - name: MetaData - - name: PreQC - transforms: - - # bkg - - transform: arithmetic - new name: experiment::bkg::${variable} - equals: experiment::ObsValue::${variable}-experiment::ombg::${variable} - for: - variable: *variables - - # Generate omb that passed QC for JEDI - - transform: accept where - new name: experiment::OmBQC::${variable} - starting field: experiment::ombg::${variable} - where: - - experiment::EffectiveQC0::${variable} == 0 - for: - variable: *variables - - # Generate oma that passed QC for JEDI - - transform: accept where - new name: experiment::OmAQC::${variable} - starting field: experiment::oman::${variable} - where: - - experiment::EffectiveQC0::${variable} == 0 - for: - variable: *variables - - # Generate oma that passed QC for JEDI - - transform: accept where - new name: experiment::hofxQC::${variable} - starting field: experiment::hofx0::${variable} - where: - - experiment::EffectiveQC0::${variable} == 0 - for: - variable: *variables - - - - - - graphics: - - # ---------- Map Plots ---------- - # Map plot of OmBQC - # -------- - - - batch figure: - variables: *variables - @CHANNELSKEY@ - dynamic options: - - type: vminvmaxcmap - data variable: experiment::OmBQC::${variable} - figure: - layout: [1,1] - figure size: [11,5] - title: 'OmB post QC | @NAME@ @CYCLE@ | ${variable_title}' - output name: map_plots/@NAME@/${variable}/@CHANNELVAR@/@NAME@_${variable}@CHANNELVAR@OmBQC.png - tight_layout: true - plots: - - mapping: - projection: plcarr - domain: global - add_map_features: ['coastline'] - add_grid: - add_colorbar: - label: '${variable}' - layers: - - type: MapScatter - longitude: - variable: experiment::MetaData::longitude - latitude: - variable: experiment::MetaData::latitude - data: - variable: experiment::OmBQC::${variable} - @CHANNELKEY@ - markersize: 2 - label: '$(variable)' - colorbar: true - # below may need to be edited/removed - cmap: ${dynamic_cmap} - vmin: ${dynamic_vmin} - vmax: ${dynamic_vmax} - - - # Histogram plots - # --------------- - - # OmA pre and post QC - - batch figure: - variables: *variables - figure: - layout: [1,1] - title: 'OmA pre- and post QC | @NAME@ | ${variable_title}' - output name: histograms/@NAME@/${variable}/oma_pre_post_qc_${variable}.png - plots: - - add_xlabel: 'Observation minus anl pre- and post-QC' - add_ylabel: 'Count' - add_legend: - loc: 'upper left' - statistics: - fields: - - field_name: experiment::OmAQC::${variable} - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::OmAQC::${variable} - color: 'blue' - label: 'OmA (post QC)' - bins: 100 - alpha: 0.5 - - type: Histogram - data: - variable: experiment::oman::${variable} - color: 'red' - label: 'OmA (pre QC)' - bins: 100 - alpha: 0.5 - - # diff between OmA and OmB - - batch figure: - variables: *variables - figure: - layout: [1,1] - title: 'OmA and OmB, post-QC | @NAME@ | ${variable_title}' - output name: histograms/@NAME@/${variable}/oma_omb_histogram_${variable}.png - plots: - - add_xlabel: 'OmA and OmB post-QC' - add_ylabel: 'Count' - add_legend: - loc: 'upper left' - statistics: - fields: - - field_name: experiment::OmAQC::${variable} - xloc: 0.5 - yloc: -0.10 - kwargs: - fontsize: 6 - statistics_variables: - - n - - min - - mean - - max - - std - layers: - - type: Histogram - data: - variable: experiment::OmAQC::${variable} - color: 'blue' - label: 'OmA (post QC)' - bins: 100 - alpha: 0.5 - - type: Histogram - data: - variable: experiment::OmBQC::${variable} - color: 'red' - label: 'OmB (post QC)' - bins: 100 - alpha: 0.5 - - - batch figure: - variables: *variables - @CHANNELSKEY@ - figure: - layout: [1,1] - title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' - output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png - plots: - - add_xlabel: 'Observation Value' - add_ylabel: 'JEDI h(x)' - add_grid: - add_legend: - loc: 'upper left' - layers: - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofx0::${variable} +datasets: + - name: experiment + type: IodaObsSpace + filenames: + - @FILENAME@ + @CHANNELSKEY@ + groups: + - name: ObsValue + variables: &variables @VARIABLES@ + - name: ObsError + - name: ombg + - name: oman + - name: hofx0 + - name: EffectiveQC0 + - name: MetaData + - name: PreQC +transforms: + + # bkg + - transform: arithmetic + new name: experiment::bkg::${variable} + equals: experiment::ObsValue::${variable}-experiment::ombg::${variable} + for: + variable: *variables + + # Generate omb that passed QC for JEDI + - transform: accept where + new name: experiment::OmBQC::${variable} + starting field: experiment::ombg::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + + # Generate oma that passed QC for JEDI + - transform: accept where + new name: experiment::OmAQC::${variable} + starting field: experiment::oman::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + + # Generate oma that passed QC for JEDI + - transform: accept where + new name: experiment::hofxQC::${variable} + starting field: experiment::hofx0::${variable} + where: + - experiment::EffectiveQC0::${variable} == 0 + for: + variable: *variables + + + + + +graphics: + + # ---------- Map Plots ---------- + # Map plot of OmBQC + # -------- + + - batch figure: + variables: *variables + @CHANNELSKEY@ + dynamic options: + - type: vminvmaxcmap + data variable: experiment::OmBQC::${variable} + figure: + layout: [1,1] + figure size: [11,5] + title: 'OmB post QC | @NAME@ @CYCLE@ | ${variable_title}' + output name: map_plots/@NAME@/${variable}/@CHANNELVAR@/@NAME@_${variable}@CHANNELVAR@OmBQC.png + tight_layout: true + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_grid: + add_colorbar: + label: '${variable}' + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::OmBQC::${variable} @CHANNELKEY@ - markersize: 5 - color: 'black' - label: 'JEDI h(x) versus obs (all obs)' - - type: Scatter - x: - variable: experiment::ObsValue::${variable} - y: - variable: experiment::hofxQC::${variable} - @CHANNELKEY@ - markersize: 5 - color: 'red' - label: 'JEDI h(x) versus obs (passed QC in JEDI)' + markersize: 2 + label: '$(variable)' + colorbar: true + # below may need to be edited/removed + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + + # Histogram plots + # --------------- + + # OmA pre and post QC + - batch figure: + variables: *variables + figure: + layout: [1,1] + title: 'OmA pre- and post QC | @NAME@ | ${variable_title}' + output name: histograms/@NAME@/${variable}/oma_pre_post_qc_${variable}.png + plots: + - add_xlabel: 'Observation minus anl pre- and post-QC' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::OmAQC::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::OmAQC::${variable} + color: 'blue' + label: 'OmA (post QC)' + bins: 100 + alpha: 0.5 + - type: Histogram + data: + variable: experiment::oman::${variable} + color: 'red' + label: 'OmA (pre QC)' + bins: 100 + alpha: 0.5 + + # diff between OmA and OmB + - batch figure: + variables: *variables + figure: + layout: [1,1] + title: 'OmA and OmB, post-QC | @NAME@ | ${variable_title}' + output name: histograms/@NAME@/${variable}/oma_omb_histogram_${variable}.png + plots: + - add_xlabel: 'OmA and OmB post-QC' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::OmAQC::${variable} + xloc: 0.5 + yloc: -0.10 + kwargs: + fontsize: 6 + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::OmAQC::${variable} + color: 'blue' + label: 'OmA (post QC)' + bins: 100 + alpha: 0.5 + - type: Histogram + data: + variable: experiment::OmBQC::${variable} + color: 'red' + label: 'OmB (post QC)' + bins: 100 + alpha: 0.5 + + - batch figure: + variables: *variables + @CHANNELSKEY@ + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | @NAME@ @CYCLE@ | ${variable_title}' + output name: observation_scatter_plots/jedi_hofx_vs_obs_@CYCLE@_@NAME@_${variable}@CHANNELVAR@.png + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx0::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofxQC::${variable} + @CHANNELKEY@ + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)'