diff --git a/src/eva/tests/config/testGsiObsSpaceAmsuaMetop-A_hvplot.yaml b/src/eva/tests/config/testGsiObsSpaceAmsuaMetop-A_hvplot.yaml new file mode 100644 index 00000000..681323dd --- /dev/null +++ b/src/eva/tests/config/testGsiObsSpaceAmsuaMetop-A_hvplot.yaml @@ -0,0 +1,94 @@ +datasets: + - name: experiment + type: GsiObsSpace + satellite: metop-a + sensor: amsua + filenames: + - ${data_input_path}/gsi_obs_space.amsua_metop-a_ges.2020092200.nc4 + channels: &channels 3,8 + groups: + - name: GsiNcDiag + # Note: channelNumber is automatically added to the output and should not + # be listed as a variable + variables: &variables [Obs_Minus_Forecast_adjusted, + Observation, + Latitude, + Longitude] + +transforms: + # Stats for hofxPassedGSIQc + - transform: channel_stats + variable_name: experiment::GsiNcDiag::${variable} + for: + variable: *variables + +graphics: + + plotting_backend: Hvplot + figure_list: + + # Histogram plots + # --------------- + + # OmB Jedi and OmB GSI + - batch figure: + variables: Obs_Minus_Forecast_adjusted + channels: *channels + figure: + layout: [1,1] + title: 'GSI omf | AMSU-A Metop-A | Omf' + output name: histograms/amsua_n19/Obs_Minus_Forecast_adjusted/${channel}/gsi_omb_histogram_amsua_n19_Obs_Minus_Forecast_adjusted_${channel}.html + plots: + - add_xlabel: 'Observation minus forecast' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::GsiNcDiag::Obs_Minus_Forecast_adjusted + channel: ${channel} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'black' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::GsiNcDiag::Obs_Minus_Forecast_adjusted + channel: ${channel} + color: 'blue' + label: 'GSI omb (all obs)' + bins: 100 + alpha: 0.5 + + # ---------- Statistical Plot ---------- + # JEDI h(x) vs GSI h(x) + # ------------------------- + - figure: + layout: [1,1] + title: 'Mean HofX vs Channel' + output name: hofx_vs_channel/amsua_n19/brightness_temperature/meanhofx_vs_channel.html + plots: + - add_xlabel: 'Channel' + add_ylabel: 'GSI HofX' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::GsiNcDiag::channelNumber + y: + variable: experiment::GsiNcDiagMean::Obs_Minus_Forecast_adjusted + markersize: 5 + color: 'red' + label: 'GSI h(x) versus channels (all obs)' + do_linear_regression: False diff --git a/src/eva/tests/config/testIodaObsSpaceAmsuaN19_hvplot.yaml b/src/eva/tests/config/testIodaObsSpaceAmsuaN19_hvplot.yaml new file mode 100644 index 00000000..439e04d5 --- /dev/null +++ b/src/eva/tests/config/testIodaObsSpaceAmsuaN19_hvplot.yaml @@ -0,0 +1,549 @@ +datasets: + - name: experiment + type: IodaObsSpace + filenames: + - ${data_input_path}/ioda_obs_space.amsua_n19.hofx.2020-12-14T210000Z.nc4 + channels: &channels 3,8 + groups: + - name: ObsValue + variables: &variables [brightnessTemperature] + - name: GsiHofXBc + - name: hofx + - name: EffectiveQC + - name: MetaData + +transforms: + + # 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 difference + - transform: arithmetic + new name: experiment::HofxMinusGsiHofXBc::${variable} + equals: experiment::hofx::${variable}-experiment::GsiHofXBc::${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::EffectiveQC::${variable} == 0 + for: + variable: *variables + +graphics: + + plotting_backend: Hvplot + figure_list: + + # Correlation scatter plots + # ------------------------- + + # JEDI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. JEDI h(x) | AMSU-A NOAA-19 | ${variable_title}' + output name: observation_scatter_plots/amsua_n19/${variable}/${channel}/jedi_hofx_vs_obs_amsua_n19_${variable}_${channel}.html + plots: + - add_xlabel: 'Observation Value' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::hofx::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'black' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::hofxPassedQc::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofx::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'JEDI h(x) versus obs (passed QC in JEDI)' + + # GSI h(x) vs Observations + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'Observations vs. GSI h(x) | AMSU-A NOAA-19 | ${variable_title}' + output name: observation_scatter_plots/amsua_n19/${variable}/${channel}/gsi_hofx_vs_obs_amsua_n19_${variable}_${channel}.html + 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} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI h(x) versus obs (all obs)' + - type: Scatter + x: + variable: experiment::ObsValue::${variable} + y: + variable: experiment::GsiHofXBcPassedQc::${variable} + channel: ${channel} + 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 + channels: *channels + figure: + layout: [1,1] + title: 'JEDI h(x) vs. GSI h(x) | AMSU-A NOAA-19 | ${variable_title}' + output name: observation_scatter_plots/amsua_n19/${variable}/${channel}/gsi_hofx_vs_jedi_hofx_amsua_n19_${variable}_${channel}.html + plots: + - add_xlabel: 'GSI h(x)' + add_ylabel: 'JEDI h(x)' + add_grid: + add_legend: + loc: 'upper left' + layers: + - type: Scatter + x: + variable: experiment::GsiHofXBc::${variable} + y: + variable: experiment::hofx::${variable} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'JEDI h(x) versus GSI h(x)' + - type: Scatter + x: + variable: experiment::GsiHofXBcPassedQc::${variable} + y: + variable: experiment::hofxPassedQc::${variable} + channel: ${channel} + 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 + channels: *channels + figure: + layout: [1,1] + title: 'JEDI omb vs. GSI omb| AMSU-A NOAA-19 | ${variable_title}' + output name: observation_scatter_plots/amsua_n19/${variable}/${channel}/gsi_omb_vs_jedi_omb_amsua_n19_${variable}_${channel}.html + 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} + channel: ${channel} + markersize: 5 + color: 'black' + label: 'GSI omb vs JEDI omb (all obs)' + - type: Scatter + x: + variable: experiment::ObsValueMinusGsiHofXBcPassedQc::${variable} + y: + variable: experiment::ObsValueMinushofxPassedQc::${variable} + channel: ${channel} + markersize: 5 + color: 'red' + label: 'GSI omb vs JEDI omb (passed QC in JEDI)' + + + # Histogram plots + # --------------- + + # OmB Jedi and OmB GSI + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI omb vs. GSI omb | AMSU-A NOAA-19 | ${variable_title}' + output name: histograms/amsua_n19/${variable}/${channel}/gsi_omb_jedi_omb_histogram_amsua_n19_${variable}_${channel}.html + plots: + - add_xlabel: 'Observation minus h(x)' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'blue' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::ObsValueMinusHofx::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Histogram + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + color: 'blue' + label: 'GSI omb (all obs)' + bins: 100 + alpha: 0.5 + - type: Histogram + data: + variable: experiment::ObsValueMinusHofx::${variable} + channel: ${channel} + color: 'red' + label: 'JEDI omb (all obs)' + bins: 100 + alpha: 0.5 + + # Density plots + # ------------- + + # OmB Jedi and OmB GSI + - batch figure: + variables: *variables + channels: *channels + figure: + layout: [1,1] + title: 'JEDI omb vs. GSI omb | AMSU-A NOAA-19 | ${variable_title}' + output name: density/amsua_n19/${variable}/${channel}/gsi_omb_jedi_omb_density_amsua_n19_${variable}_${channel}.html + plots: + - add_xlabel: 'Observation minus h(x)' + add_ylabel: 'Count' + add_legend: + loc: 'upper left' + statistics: + fields: + - field_name: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.10 + kwargs: + color: 'blue' + fontsize: 8 + fontfamily: monospace + - field_name: experiment::ObsValueMinusHofx::${variable} + channel: ${channel} + xloc: 0.5 + yloc: -0.13 + kwargs: + color: 'red' + fontsize: 8 + fontfamily: monospace + statistics_variables: + - n + - min + - mean + - max + - std + layers: + - type: Density + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + color: 'blue' + label: 'GSI omb (all obs)' + alpha: 0.5 + bw_adjust: 1.0 # Reduce this value to fit the data more closely + - type: Density + data: + variable: experiment::ObsValueMinusHofx::${variable} + channel: ${channel} + color: 'red' + label: 'JEDI omb (all obs)' + alpha: 0.5 + bw_adjust: 1.0 # Reduce this value to fit the data more closely + - type: VerticalLine + x: 0 + linewidth: 0.5 + - type: HorizontalLine + y: 1 + linewidth: 0.5 + + + # Map plots + # --------- + # Observations + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValue::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Observations | AMSU-A NOAA-19 | Obs Value' + output name: map_plots/amsua_n19/${variable}/${channel}/observations_amsua_n19_${variable}_${channel}.html + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: ObsValue + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValue::${variable} + channel: ${channel} + markersize: 2 + label: ObsValue + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + # Observations over north polar region + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValue::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Observations | AMSU-A NOAA-19 | Obs Value' + output name: map_plots/amsua_n19/${variable}/${channel}/observations_amsua_n19_${variable}_${channel}_np.html + plots: + - mapping: + projection: npstere + domain: north + add_map_features: ['coastline'] + add_colorbar: + label: ObsValue + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValue::${variable} + channel: ${channel} + markersize: 2 + label: ObsValue + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + # omb jedi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusHofx::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'JEDI OmB | AMSU-A NOAA-19 | ${variable_title}' + output name: map_plots/amsua_n19/${variable}/${channel}/omb_jedi_amsua_n19_${variable}_${channel}.html + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusHofx::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # omb gsi + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::ObsValueMinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'GSI OmB | AMSU-A NOAA-19 | ${variable_title}' + output name: map_plots/amsua_n19/${variable}/${channel}/omb_gsi_amsua_n19_${variable}_${channel}.html + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::ObsValueMinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} + + # hofx difference + - batch figure: + variables: *variables + channels: *channels + dynamic options: + - type: vminvmaxcmap + channel: ${channel} + data variable: experiment::HofxMinusGsiHofXBc::${variable} + figure: + figure size: [20,10] + layout: [1,1] + title: 'Hofx Difference | AMSU-A NOAA-19 | ${variable_title}' + output name: map_plots/amsua_n19/${variable}/${channel}/hofx_difference_amsua_n19_${variable}_${channel}.html + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: '${variable}' + add_grid: + layers: + - type: MapScatter + longitude: + variable: experiment::MetaData::longitude + latitude: + variable: experiment::MetaData::latitude + data: + variable: experiment::HofxMinusGsiHofXBc::${variable} + channel: ${channel} + markersize: 2 + label: '${variable}' + colorbar: true + cmap: ${dynamic_cmap} + vmin: ${dynamic_vmin} + vmax: ${dynamic_vmax} diff --git a/src/eva/tests/config/testJediLog_hvplot.yaml b/src/eva/tests/config/testJediLog_hvplot.yaml new file mode 100644 index 00000000..8cb23465 --- /dev/null +++ b/src/eva/tests/config/testJediLog_hvplot.yaml @@ -0,0 +1,152 @@ +datasets: + - type: JediLog + collection_name: jedi_log_test_rpcg + jedi_log_to_parse: ${data_input_path}/jedi_log.var_rpcg.txt + data_to_parse: + convergence: true + - type: JediLog + collection_name: jedi_log_test_dripcg + jedi_log_to_parse: ${data_input_path}/jedi_log.var_dripcg_ctest.txt + data_to_parse: + convergence: true + + +# Make plots +graphics: + + plotting_backend: Hvplot + figure_list: + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Gradient and Norm Reduction Plots RPCG' + output name: jedi_log/convergence/norm_gradient_reduction_rpcg.html + plots: + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Gradient reduction' + layers: + - type: LinePlot + x: + variable: jedi_log_test_rpcg::convergence::total_iteration + y: + variable: jedi_log_test_rpcg::convergence::gradient_reduction + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Norm reduction' + layers: + - type: LinePlot + x: + variable: jedi_log_test_rpcg::convergence::total_iteration + y: + variable: jedi_log_test_rpcg::convergence::norm_reduction + color: 'black' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Normalized Value' + add_legend: + layers: + - type: LinePlot + x: + variable: jedi_log_test_rpcg::convergence::total_iteration + y: + variable: jedi_log_test_rpcg::convergence::gradient_reduction_normalized + color: 'red' + label: 'Normalized gradient reduction' + - type: LinePlot + x: + variable: jedi_log_test_rpcg::convergence::total_iteration + y: + variable: jedi_log_test_rpcg::convergence::norm_reduction_normalized + color: 'blue' + label: 'Normalized norm reduction' + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Gradient and Norm Reduction Plots DRIPCG' + output name: jedi_log/convergence/norm_gradient_reduction_dripcg_ctest.html + plots: + + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Gradient reduction' + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::gradient_reduction + color: 'black' + + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Norm reduction' + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::norm_reduction + color: 'black' + + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Normalized Value' + add_legend: + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::gradient_reduction_normalized + color: 'red' + label: 'Normalized gradient reduction' + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::norm_reduction_normalized + color: 'blue' + label: 'Normalized norm reduction' + + - figure: + layout: [3,1] + figure size: [12,10] + title: 'Cost Function Plots DRIPCG' + output name: jedi_log/convergence/cost_function_dripcg_ctest.html + plots: + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'J (Normalized)' + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::j_normalized + color: 'red' + label: 'J Normalized' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'Jb (Normalized)' + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::jb_normalized + color: 'blue' + label: 'Jb Normalized' + + - add_xlabel: 'Total inner iteration number' + add_ylabel: 'JoJc (Normalized)' + layers: + - type: LinePlot + x: + variable: jedi_log_test_dripcg::convergence::total_iteration + y: + variable: jedi_log_test_dripcg::convergence::jojc_normalized + color: 'green' + label: 'JoJc Normalized' diff --git a/src/eva/tests/config/testSocaRestart_hvplot.yaml b/src/eva/tests/config/testSocaRestart_hvplot.yaml new file mode 100644 index 00000000..72577ef3 --- /dev/null +++ b/src/eva/tests/config/testSocaRestart_hvplot.yaml @@ -0,0 +1,46 @@ +# Data read +# --------- +datasets: + - name: experiment + type: SocaRestart + soca_filenames: ${data_input_path}/ocn.3dvar_soca.an.2018-04-15T00:00:00Z.nc + geometry_file: ${data_input_path}/soca_gridspec.72x35x25.nc + + variables: [ave_ssh, Salt] + coordinate variables: [lon, lat] + +graphics: + + plotting_backend: Hvplot + figure_list: + +# Map plots +# --------- + + # Observations + - batch figure: + variables: [ave_ssh, Salt] + figure: + figure size: [20,10] + layout: [1,1] + title: 'SOCA | ${variable}' + output name: map_plots/SOCA/soca_2dfield_${variable}.html + plots: + - mapping: + projection: plcarr + domain: global + add_map_features: ['coastline'] + add_colorbar: + label: ${variable} + add_grid: + layers: + - type: MapGridded + longitude: + variable: experiment::SOCAgrid::lon + latitude: + variable: experiment::SOCAgrid::lat + data: + variable: experiment::SOCAVars::${variable} + slices: '[0,...]' + cmap: 'viridis' + colorbar: true