MODEMultivar: Create objects of brightness temps and radar reflectivity

model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf

Scientific Objective

This use case identifies convective objects, which are defined by the intersection of: 1) satellite infrared brightness temperature < 235 K and 2) radar reflectivity > 40 dBZ. Satellite brightness temperatures are used in conjunction with radar reflectivity to capture both the cloud top (satellite) and in-cloud (radar) characteristics. Convective objects are also defined as lightning thresholds exceeding the 10th percentile. A percentile threshold is used for lightning data as RRFS lightning has units which are “non-dimensional” and therefore cannot be directly compared to the Geostationary Lightning Mapper.

Version Added

METplus Version 6.0

Datasets

Forecast: Rapid Refresh Forecast System (RRFS) 3km resolution, channel 13 brightness temperature, composite reflectivity, and lightning strike density.

Observation: Geostationary Operational Environmental Satellites (GOES) 3km resolution, channel 13 brightness temperature; Multi-radar Multi-sensor (MRMS) 3km resolution, composite reflectivity; GOES Global Lightning Mapper (GLM) 3km resolution, flash_extent_density.

Climatology: None

Location: All of the input data required for this use case can be found in a sample data tarball. Each use case category will have one or more sample data tarballs. It is only necessary to download the tarball with the use case’s dataset and not the entire collection of sample data. Click here to access the METplus releases page and download sample data for the appropriate release: https://github.com/dtcenter/METplus/releases This tarball should be unpacked into the directory that you will set the value of INPUT_BASE. See Running METplus for more information.

METplus Components

The only tool this use case calls is MODE, which will identify super-objects by intersection of the multiple variable fields.

METplus Workflow

Beginning Time (INIT_BEG): 2024010905

End Time (INIT_END): 2024010905

Increment between beginning and end times (VALID_INCREMENT): 1H

Sequence of forecast leads to process (LEAD_SEQ): 9,10

This use case runs twice, once for each forecast lead time provided. It creates objects valid at 14UTC and 15UTC from 09 January 2024 are compared to the 9h and 10h forecasts initialized at 05UTC on 9 January 2024. Convective objects are identified with thresholds of satellite brightness temperature < 235 K and radar reflectivity > 40 dBZ, or lightning > 10th percentile. In this use case, MODE super-object intensity statistics are output for both radar reflectivity and lightning. Using the MODE_MULTIVAR_INTENSITY_FLAG, users can control for which variables super object intensity statistics will be output. If all are set to False, then no intensity information will be output and only statistics relative to the super-object geometry will be available.

METplus Configuration

METplus first loads all of the configuration files found in parm/metplus_config, then it loads any configuration files passed to METplus via the command line, i.e. parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf

[config]

# Documentation for this use-case can be found at:
# https://metplus.readthedocs.io/en/latest/generated/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.html

# Processes to run
PROCESS_LIST = MODE

# Time Info
LOOP_BY = INIT
INIT_TIME_FMT = %Y%m%d%H
INIT_BEG=2024010905
INIT_END=2024010905
INIT_INCREMENT = 1H

LEAD_SEQ = 9,10

MODEL = RRFS
OBTYPE = ANALYSIS

##################################
# Multivariate MODE Configurations
##################################

# Run MODE to output super objects
MODE_MULTIVAR_LOGIC = #1 && #2 || #3
MODE_MULTIVAR_INTENSITY_COMPARE_FCST = 2, 3
MODE_MULTIVAR_INTENSITY_COMPARE_OBS = 2, 3

FCST_MODE_INPUT_DIR = {INPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning
FCST_MODE_INPUT_TEMPLATE= {init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc,{init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc,{init?fmt=%Y%m%d}.{init?fmt=%H}00.F{lead?fmt=%HH}00.nc

OBS_MODE_INPUT_DIR = {INPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning
OBS_MODE_INPUT_TEMPLATE = remap_GOES-16.{valid?fmt=%Y%m%d}.{valid?fmt=%H}0000.nc,{valid?fmt=%Y%m%d}-{valid?fmt=%H}0000_remap.nc,remap_GOES-16_lightning_{valid?fmt=%Y%m%d}-{valid?fmt=%H}00_75W.nc

MODE_OUTPUT_DIR = {OUTPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning
MODE_OUTPUT_TEMPLATE = f{lead?fmt=%2H}

FCST_MODE_FILE_WINDOW_BEGIN = 0
FCST_MODE_FILE_WINDOW_END = 0

OBS_MODE_FILE_WINDOW_BEGIN = 0
OBS_MODE_FILE_WINDOW_END = 0

###
# Field Info
###


FCST_VAR1_NAME = bt13_topofatmosphere_G16
FCST_VAR1_LEVELS = (*,*)
FCST_VAR1_OPTIONS = conv_radius = 5; conv_thresh = <=230; merge_thresh = <=230; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [<=0]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA


OBS_VAR1_NAME = channel_13_brightness_temperature
OBS_VAR1_LEVELS = L0
OBS_VAR1_OPTIONS = conv_radius = 0; conv_thresh = <=230; merge_thresh = <=230; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [<=0]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA


FCST_VAR2_NAME = REFC_entireatmosphere_consideredasinglelayer
FCST_VAR2_LEVELS = (*,*)
FCST_VAR2_OPTIONS = conv_radius = 5; conv_thresh = >=40; merge_thresh = >=40; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [< -30]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA

OBS_VAR2_NAME = MergedReflectivityQCComposite
OBS_VAR2_LEVELS = (*,*)
OBS_VAR2_OPTIONS = conv_radius = 5; conv_thresh = >=40; merge_thresh = >=40; merge_flag = NONE; file_type = NETCDF_MET; filter_attr_name = ["AREA"]; filter_attr_thresh= [ >=1 ]; censor_thresh = [< -30]; censor_val = [9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA


FCST_VAR3_NAME = LTNG_entireatmosphere
FCST_VAR3_LEVELS = (*,*)
FCST_VAR3_OPTIONS = conv_radius = 3; conv_thresh = >SFP10; merge_thresh = >SFP10; merge_flag = THRESH; file_type = NETCDF_MET; censor_thresh = [<= 0]; censor_val = [-9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA

OBS_VAR3_NAME = flash_extent_density
OBS_VAR3_LEVELS = (*,*)
OBS_VAR3_OPTIONS = conv_radius = 3; conv_thresh = >SOP10; merge_thresh = >SOP10; merge_flag = THRESH; file_type = NETCDF_MET; censor_thresh = [<= 0]; censor_val = [-9999]; vld_thresh = 0.5; inten_perc_value  = 100; inten_perc_thresh = NA


MODE_MATCH_FLAG = MERGE_BOTH

MODE_REGRID_TO_GRID = NONE

LOG_MODE_VERBOSITY = 4

MODE_OUTPUT_PREFIX = {MODEL}_or_{OBTYPE}

MODE_GRID_RES = 3

MODE_INTEREST_FUNCTION_CENTROID_DIST = ((            0.0, 1.0 )(  60.0/grid_res, 1.0 )( 450.0/grid_res, 0.0 ))
MODE_INTEREST_FUNCTION_BOUNDARY_DIST = ((            0.0, 1.0 )( 400.0/grid_res, 0.0 ))
MODE_INTEREST_FUNCTION_CONVEX_HULL_DIST = ((            0.0, 1.0 )( 400.0/grid_res, 0.0 ))
MODE_INTEREST_FUNCTION_ANGLE_DIFF = ((  0.0, 1.0 )( 30.0, 1.0 )( 90.0, 0.0 ))
MODE_INTEREST_FUNCTION_ASPECT_DIFF = ((  0.00, 1.0 )(  0.10, 1.0 )(  0.75, 0.0 ))
MODE_INTEREST_FUNCTION_AREA_RATIO = ((    0.0, 0.0 )(    0.8, 1.0 )(    1.0, 1.0 ))
MODE_INTEREST_FUNCTION_INT_AREA_RATIO = (( 0.00, 0.00 )( 0.10, 0.50 )( 0.25, 1.00 )( 1.00, 1.00 ))
MODE_INTEREST_FUNCTION_CURVATURE_RATIO = ((    0.0, 0.0 )(    0.8, 1.0 )(    1.0, 1.0 ))
MODE_INTEREST_FUNCTION_COMPLEXITY_RATIO = ((    0.0, 0.0 )(    0.8, 1.0 )(    1.0, 1.0 ))
MODE_INTEREST_FUNCTION_INTEN_PERC_RATIO = ((    0.0, 0.0 )(    0.8, 1.0 )(    1.0, 1.0 ))

MODE_TOTAL_INTEREST_THRESH = 0.65

MODE_MASK_GRID = ""
MODE_MASK_GRID_FLAG = NONE
MODE_MASK_POLY = ""
MODE_MASK_POLY_FLAG = NONE

MODE_MASK_MISSING_FLAG = BOTH
MODE_MATCH_FLAG = MERGE_BOTH

MODE_MAX_CENTROID_DIST = 600.0/grid_res

MODE_WEIGHT_CENTROID_DIST = 4.0
MODE_WEIGHT_BOUNDARY_DIST = 3.0
MODE_WEIGHT_CONVEX_HULL_DIST = 1.0 
MODE_WEIGHT_ANGLE_DIFF = 1.0
MODE_WEIGHT_ASPECT_DIFF = 0.0
MODE_WEIGHT_AREA_RATIO = 4.0
MODE_WEIGHT_INT_AREA_RATIO = 3.0
MODE_WEIGHT_CURVATURE_RATIO = 0.0
MODE_WEIGHT_COMPLEXITY_RATIO = 0.0
MODE_WEIGHT_INTEN_PERC_RATIO = 0.0
MODE_WEIGHT_INTEN_PERC_VALUE = 50

MODE_NC_PAIRS_FLAG_LATLON = TRUE
MODE_NC_PAIRS_FLAG_RAW = TRUE
MODE_NC_PAIRS_FLAG_OBJECT_RAW = TRUE
MODE_NC_PAIRS_FLAG_OBJECT_ID = TRUE
MODE_NC_PAIRS_FLAG_CLUSTER_ID = TRUE
MODE_NC_PAIRS_FLAG_POLYLINES = TRUE

MODE_QUILT = False

MODE_PS_PLOT_FLAG = TRUE
MODE_CT_STATS_FLAG = TRUE

MET Configuration

METplus sets environment variables based on user settings in the METplus configuration file. See How METplus controls MET config file settings for more details.

YOU SHOULD NOT SET ANY OF THESE ENVIRONMENT VARIABLES YOURSELF! THEY WILL BE OVERWRITTEN BY METPLUS WHEN IT CALLS THE MET TOOLS!

If there is a setting in the MET configuration file that is currently not supported by METplus you’d like to control, please refer to: Overriding Unsupported MET config file settings

MODEConfig_wrapped
////////////////////////////////////////////////////////////////////////////////
//
// MODE configuration file.
//
// For additional information, see the MET_BASE/config/README file.
//
////////////////////////////////////////////////////////////////////////////////

//
// Output model name to be written
//
// model =
${METPLUS_MODEL}

//
// Output description to be written
//
// desc =
${METPLUS_DESC}

//
// Output observation type to be written
//
// obtype =
${METPLUS_OBTYPE}

////////////////////////////////////////////////////////////////////////////////

//
// Verification grid
//
// regrid = {
${METPLUS_REGRID_DICT}

////////////////////////////////////////////////////////////////////////////////

//
// Approximate grid resolution (km)
//
// grid_res =
${METPLUS_GRID_RES}

////////////////////////////////////////////////////////////////////////////////

//
// Run all permutations of radius and threshold
//
// quilt =
${METPLUS_QUILT}

//
// MODE Multivar boolean combination logic
//
//multivar_logic =
${METPLUS_MULTIVAR_LOGIC}

//multivar_intensity_compare_fcst =
${METPLUS_MULTIVAR_INTENSITY_COMPARE_FCST}

//multivar_intensity_compare_obs =
${METPLUS_MULTIVAR_INTENSITY_COMPARE_OBS}

//
// Forecast and observation fields to be verified
//
fcst = {
   //field = {
   ${METPLUS_FCST_FIELD}

   //censor_thresh      = [
   ${METPLUS_FCST_CENSOR_THRESH}
   //censor_val         = [
   ${METPLUS_FCST_CENSOR_VAL}
   //conv_radius        =
   ${METPLUS_FCST_CONV_RADIUS}
   //conv_thresh        =
   ${METPLUS_FCST_CONV_THRESH}
   //vld_thresh         =
   ${METPLUS_FCST_VLD_THRESH}
   //filter_attr_name   = [
   ${METPLUS_FCST_FILTER_ATTR_NAME}
   //filter_attr_thresh = [
   ${METPLUS_FCST_FILTER_ATTR_THRESH}
   //merge_thresh       =
   ${METPLUS_FCST_MERGE_THRESH}
   //merge_flag         =
   ${METPLUS_FCST_MERGE_FLAG}

   ${METPLUS_FCST_FILE_TYPE}
   ${METPLUS_FCST_MULTIVAR_NAME}
   ${METPLUS_FCST_MULTIVAR_LEVEL}
}

obs = {
   //field = {
   ${METPLUS_OBS_FIELD}

   //censor_thresh      = [
   ${METPLUS_OBS_CENSOR_THRESH}
   //censor_val         = [
   ${METPLUS_OBS_CENSOR_VAL}
   //conv_radius        =
   ${METPLUS_OBS_CONV_RADIUS}
   //conv_thresh        =
   ${METPLUS_OBS_CONV_THRESH}
   //vld_thresh         =
   ${METPLUS_OBS_VLD_THRESH}
   //filter_attr_name   = [
   ${METPLUS_OBS_FILTER_ATTR_NAME}
   //filter_attr_thresh = [
   ${METPLUS_OBS_FILTER_ATTR_THRESH}
   //merge_thresh       =
   ${METPLUS_OBS_MERGE_THRESH}
   //merge_flag         =
   ${METPLUS_OBS_MERGE_FLAG}

   ${METPLUS_OBS_FILE_TYPE}
   ${METPLUS_OBS_MULTIVAR_NAME}
   ${METPLUS_OBS_MULTIVAR_LEVEL}
}

////////////////////////////////////////////////////////////////////////////////

//
// Handle missing data
//
// mask_missing_flag =
${METPLUS_MASK_MISSING_FLAG}

//
// Match objects between the forecast and observation fields
//
//match_flag =
${METPLUS_MATCH_FLAG}

//
// Maximum centroid distance for objects to be compared
//
//max_centroid_dist =
${METPLUS_MAX_CENTROID_DIST}

////////////////////////////////////////////////////////////////////////////////

//
// Verification masking regions
//
//mask = {
${METPLUS_MASK_DICT}

////////////////////////////////////////////////////////////////////////////////

//
// Fuzzy engine weights
//
//weight = {
${METPLUS_WEIGHT_DICT}

////////////////////////////////////////////////////////////////////////////////

//
// Fuzzy engine interest functions
//
interest_function = {

   //centroid_dist = (
   ${METPLUS_INTEREST_FUNCTION_CENTROID_DIST}

   //boundary_dist = (
   ${METPLUS_INTEREST_FUNCTION_BOUNDARY_DIST}

   //convex_hull_dist = (
   ${METPLUS_INTEREST_FUNCTION_CONVEX_HULL_DIST}

   angle_diff = (
      (  0.0, 1.0 )
      ( 30.0, 1.0 )
      ( 90.0, 0.0 )
   );

   aspect_diff = (
      (  0.00, 1.0 )
      (  0.10, 1.0 )
      (  0.75, 0.0 )
   );

   corner   = 0.8;
   ratio_if = (
      (    0.0, 0.0 )
      ( corner, 1.0 )
      (    1.0, 1.0 )
   );

   area_ratio = ratio_if;

   int_area_ratio = (
      ( 0.00, 0.00 )
      ( 0.10, 0.50 )
      ( 0.25, 1.00 )
      ( 1.00, 1.00 )
   );

   curvature_ratio = ratio_if;

   complexity_ratio = ratio_if;

   inten_perc_ratio = ratio_if;
}

////////////////////////////////////////////////////////////////////////////////

//
// Total interest threshold for determining matches
//
//total_interest_thresh =
${METPLUS_TOTAL_INTEREST_THRESH}

//
// Interest threshold for printing output pair information
//
print_interest_thresh = 0.0;

////////////////////////////////////////////////////////////////////////////////

//
// Plotting information
//
met_data_dir = "MET_BASE";

fcst_raw_plot = {
   color_table      = "MET_BASE/colortables/met_default.ctable";
   plot_min         = 0.0;
   plot_max         = 0.0;
}

obs_raw_plot = {
   color_table      = "MET_BASE/colortables/met_default.ctable";
   plot_min         = 0.0;
   plot_max         = 0.0;
}

object_plot = {
   color_table      = "MET_BASE/colortables/mode_obj.ctable";
}

//
// Boolean for plotting on the region of valid data within the domain
//
plot_valid_flag = FALSE;

//
// Plot polyline edges using great circle arcs instead of straight lines
//
plot_gcarc_flag = FALSE;

////////////////////////////////////////////////////////////////////////////////

//
// NetCDF matched pairs, PostScript, and contingency table output files
//
//ps_plot_flag =
${METPLUS_PS_PLOT_FLAG}

//nc_pairs_flag = {
${METPLUS_NC_PAIRS_FLAG_DICT}

//ct_stats_flag =
${METPLUS_CT_STATS_FLAG}


////////////////////////////////////////////////////////////////////////////////

shift_right = 0;   //  grid squares

////////////////////////////////////////////////////////////////////////////////

${METPLUS_OUTPUT_PREFIX}
//version        = "V10.0";

tmp_dir = "${MET_TMP_DIR}";

////////////////////////////////////////////////////////////////////////////////

${METPLUS_TIME_OFFSET_WARNING}
${METPLUS_MET_CONFIG_OVERRIDES}

Python Embedding

This use case does not use any Python embedding.

User Scripting

This use case does not use additional scripts.

Running METplus

Pass the use case configuration file to the run_metplus.py script along with any user-specific system configuration files if desired:

run_metplus.py /path/to/METplus/parm/use_cases/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning.conf /path/to/user_system.conf

See Running METplus for more information.

Expected Output

A successful run will output the following both to the screen and to the logfile:

INFO: METplus has successfully finished running.

Refer to the value set for OUTPUT_BASE to find where the output data was generated. Output for this use case will be found in {OUTPUT_BASE}/model_applications/short_range/MODEMultivar_fcstRRFS_obsGOES_MRMS_BrightnessTemp_Lightning/f??, where the ‘??’ characters will reflect the two forecast leads (09 and 10). Each of these directories will contain the following files with their appropriate verification times:

* mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_cts.txt
* mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.nc
* mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.txt
* mode_Fcst_LTNG_entireatmosphere_all_all_Obs_flash_extent_density_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A.ps
* mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_cts.txt
* mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.nc
* mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A_obj.txt
* mode_Fcst_REFC_entireatmosphere_consideredasinglelayer_all_all_Obs_MergedReflectivityQCComposite_all_all_RRFS_or_ANALYSIS_090000L_20240109_140000V_000000A.ps

Keywords

Note

  • MODEToolUseCase

  • ShortRangeAppUseCase

  • NetCDFFileUseCase

  • MvMODEUseCase

Navigate to the METplus Quick Search for Use Cases page to discover other similar use cases.

#

Gallery generated by Sphinx-Gallery