Skip to content

Commit

Permalink
Per #1283, move multivar mode config file setting definitions into co…
Browse files Browse the repository at this point in the history
…nfig_constants.h. Make each error message consistently begin with 1 newline and end with 2. Use lookup_bool_array() defined in dictionary.cc and remove the redefinition in mode_conf_info.cc
  • Loading branch information
JohnHalleyGotway committed Jun 12, 2023
1 parent f9279f0 commit 3e9ca75
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 57 deletions.
15 changes: 9 additions & 6 deletions src/basic/vx_config/config_constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -693,12 +693,6 @@ static const char conf_key_is_wind_speed[] = "is_wind_speed";
static const char conf_key_is_wind_direction[] = "is_wind_direction";
static const char conf_key_is_prob[] = "is_prob";

//
// for use with mode multivar
//

static const char conf_key_multivar_logic [] = "multivar_logic";

//
// Climatology parameter key names
//
Expand Down Expand Up @@ -893,6 +887,15 @@ static const char conf_key_plot_gcarc_flag[] = "plot_gcarc_flag";
static const char conf_key_ct_stats_flag[] = "ct_stats_flag";
static const char conf_key_shift_right[] = "shift_right";

//
// Multivar MODE specific parameter key names
//

static const char conf_key_multivar_logic [] = "multivar_logic";
static const char conf_key_multivar_name [] = "multivar_name";
static const char conf_key_multivar_level [] = "multivar_level";
static const char conf_key_multivar_intensity_flag [] = "multivar_intensity_flag";

//
// MTD specific parameter key names
//
Expand Down
11 changes: 8 additions & 3 deletions src/basic/vx_config/dictionary.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1523,22 +1523,27 @@ return ( Entry->b_value() );

}


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


BoolArray Dictionary::lookup_bool_array(const char * name,
bool error_out,
bool print_warning,
bool search_parent)
{
bool search_parent) {

BoolArray array;
NumArray num_array = lookup_num_array(name, error_out, print_warning);

for (int i=0; i<num_array.n_elements(); i++)
for (int i=0; i<num_array.n_elements(); i++) {
array.add( num_array[i] == 1 ? true:false);
}

return ( array );

}


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


Expand Down
76 changes: 28 additions & 48 deletions src/libcode/vx_shapedata/mode_conf_info.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,10 @@ using namespace std;

#include "vx_data2d_factory.h"
#include "vx_log.h"
// #include "var_info_nccf.h"

// static BoolArray lookup_bool_array (const char * name,
// Dictionary *dict,
// bool error_out = default_dictionary_error_out,
// bool print_warning = default_dictionary_print_warning);
////////////////////////////////////////////////////////////////////////

static const char default_multivar_name[] = "Super";

////////////////////////////////////////////////////////////////////////
//
Expand Down Expand Up @@ -572,7 +569,7 @@ const DictionaryEntry * ee = dict->lookup(conf_key_field);

if ( !ee ) {

mlog << "\n\n ModeConfInfo::read_fields () -> \"field\" entry not found in dictionary!\n\n";
mlog << "\nModeConfInfo::read_fields () -> \"field\" entry not found in dictionary!\n\n";

exit ( 1 );

Expand All @@ -593,7 +590,7 @@ if ( field->is_array() ) {
if ( (N_fields > 0) && (N != N_fields) ) {

mlog << Error
<< "\n\n ModeConfInfo::read_field_dict() -> fcst and obs dictionaries have different number of entries\n\n";
<< "\nModeConfInfo::read_field_dict() -> fcst and obs dictionaries have different number of entries\n\n";

exit ( 1 );

Expand All @@ -607,7 +604,7 @@ if ( field->is_array() ) {
if ( (e->type() != DictionaryType) && (e->type() != ArrayType) ) {

mlog << Error
<< "\n\n ModeConfInfo::read_field_dict() -> field entry # " << (j + 1) << " is not a dictionary!\n\n";
<< "\nModeConfInfo::read_field_dict() -> field entry # " << (j + 1) << " is not a dictionary!\n\n";

exit ( 1 );

Expand Down Expand Up @@ -695,7 +692,7 @@ void ModeConfInfo::set_field_index(int k)
if ( (k < 0) || (k >= N_fields) ) {

mlog << Error
<< "\n\n ModeConfInfo::set_field_index(int) -> range check error\n\n";
<< "\nModeConfInfo::set_field_index(int) -> range check error\n\n";

exit ( 1 );

Expand Down Expand Up @@ -1026,7 +1023,7 @@ const DictionaryEntry * e = conf.lookup("fcst");
if ( e->type() != DictionaryType ) {

mlog << Error
<< "\n\n ModeConfInfo::is_multivar() const -> bad object type for entry \"fcst\"\n\n";
<< "\nModeConfInfo::is_multivar() const -> bad object type for entry \"fcst\"\n\n";

exit ( 1 );

Expand All @@ -1043,7 +1040,7 @@ switch ( e2->type() ) {

default:
mlog << Error
<< "\n\n ModeConfInfo::is_multivar() const -> bad object type for entry \"fcst.field\"\n\n";
<< "\nModeConfInfo::is_multivar() const -> bad object type for entry \"fcst.field\"\n\n";
exit ( 1 );

}
Expand All @@ -1065,26 +1062,26 @@ Dictionary * dict = (Dictionary *) 0;

fcst_multivar_logic.clear();
obs_multivar_logic.clear();
fcst_multivar_name = "Super"; // default, maybe set elsewhere?
obs_multivar_name = "Super";
fcst_multivar_level = "NA";
obs_multivar_level = "NA";
fcst_multivar_name = default_multivar_name;
obs_multivar_name = default_multivar_name;
fcst_multivar_level = na_str;
obs_multivar_level = na_str;

dict = conf.lookup_dictionary(conf_key_fcst);

if ( dict->lookup(conf_key_multivar_logic) ) fcst_multivar_logic = dict->lookup_string(conf_key_multivar_logic);
if ( dict->lookup("multivar_name") ) fcst_multivar_name = dict->lookup_string("multivar_name");
if ( dict->lookup("multivar_level") ) fcst_multivar_level = dict->lookup_string("multivar_level");

if ( dict->lookup(conf_key_multivar_logic) ) fcst_multivar_logic = dict->lookup_string(conf_key_multivar_logic);
if ( dict->lookup(conf_key_multivar_name) ) fcst_multivar_name = dict->lookup_string(conf_key_multivar_name);
if ( dict->lookup(conf_key_multivar_level) ) fcst_multivar_level = dict->lookup_string(conf_key_multivar_level);

dict = conf.lookup_dictionary(conf_key_obs);

if ( dict->lookup(conf_key_multivar_logic) ) obs_multivar_logic = dict->lookup_string(conf_key_multivar_logic);
if ( dict->lookup("multivar_name") ) obs_multivar_name = dict->lookup_string("multivar_name");
if ( dict->lookup("multivar_level") ) obs_multivar_level = dict->lookup_string("multivar_level");
if ( dict->lookup(conf_key_multivar_logic) ) obs_multivar_logic = dict->lookup_string(conf_key_multivar_logic);
if ( dict->lookup(conf_key_multivar_name) ) obs_multivar_name = dict->lookup_string(conf_key_multivar_name);
if ( dict->lookup(conf_key_multivar_level) ) obs_multivar_level = dict->lookup_string(conf_key_multivar_level);

multivar_intensity.clear();
if ( dict->lookup("multivar_intensity_flag")) multivar_intensity = dict->lookup_bool_array("multivar_intensity_flag");
if ( dict->lookup(conf_key_multivar_intensity_flag)) multivar_intensity = dict->lookup_bool_array(conf_key_multivar_intensity_flag);

return;
}

Expand All @@ -1100,37 +1097,37 @@ void ModeConfInfo::check_multivar_not_implemented()
bool status = false;
if (quilt) {
mlog << Error
<< "\n\nModeConfInfo::multivar_not_implemented:\n"
<< " quilting not yet implemented for multivar mode\n";
<< "\nModeConfInfo::multivar_not_implemented:\n"
<< " quilting not yet implemented for multivar mode\n\n";
status = true;
}

for (int i=0; i<N_fields; ++i) {
if (fcst_array[i].merge_flag == MergeType_Both || fcst_array[i].merge_flag == MergeType_Engine) {
mlog << Error
<< "\n\n ModeConfInfo::multivar_not_implemented:\n"
<< " merge_flag ENGINE or BOTH not implemented for multivariate mode\n";
<< "\nModeConfInfo::multivar_not_implemented:\n"
<< " merge_flag ENGINE or BOTH not implemented for multivariate mode\n\n";
status = true;
break;
}
if (obs_array[i].merge_flag == MergeType_Both || obs_array[i].merge_flag == MergeType_Engine) {
mlog << Error
<< "\n\nModeConfInfo::multivar_not_implemented:\n"
<< " merge_flag ENGINE or BOTH not implemented for multivariate mode\n";
<< "\nModeConfInfo::multivar_not_implemented:\n"
<< " merge_flag ENGINE or BOTH not implemented for multivariate mode\n\n";
status = true;
break;
}
}

// if (multivar_intensities_all_false()) {
// mlog << Error
// << "\n\n ModeConfInfo::multivar_not_implemented "
// << "\nModeConfInfo::multivar_not_implemented "
// << ": multivar_intensity flags all FALSE not yet implemented for multivar mode\n\n";
// status = true;
// }
if (status) {
mlog << Error
<< " Some features not yet implemented in multivar mode\n\n";
<< "\nSome features not yet implemented in multivar mode\n\n";
exit ( 1 );
}
}
Expand Down Expand Up @@ -1235,20 +1232,3 @@ return;


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

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


BoolArray lookup_bool_array(const char * name,
Dictionary *dict,
bool error_out,
bool print_warning)

{

BoolArray array;
NumArray num_array = dict->lookup_num_array(name, error_out, print_warning);
for (int i=0; i<num_array.n_elements(); i++)
array.add( num_array[i]);
return ( array );
}

0 comments on commit 3e9ca75

Please sign in to comment.