Skip to content

Commit

Permalink
Per #1735, add AsciiTable::expand() function to increase the AsciiTab…
Browse files Browse the repository at this point in the history
…le dimensions and also update the Stat-Analysis handling of the output .stat file it writes.
  • Loading branch information
JohnHalleyGotway committed Apr 14, 2021
1 parent 8aa2007 commit b2138c7
Show file tree
Hide file tree
Showing 3 changed files with 140 additions and 67 deletions.
50 changes: 46 additions & 4 deletions met/src/basic/vx_util/ascii_table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -331,8 +331,6 @@ if ( e.size() != NRC ) {

}

//for (j=0; j<NRC; ++j) e[j] = "";

Nrows = NR;
Ncols = NC;

Expand All @@ -346,8 +344,6 @@ if ( !ColWidth.size() ) {

}

//for (j=0; j<Ncols; ++j) ColWidth[j] = 0;

InterColumnSpace.resize(Ncols - 1, default_ics);
InterRowSpace.resize(Nrows - 1, default_irs);

Expand Down Expand Up @@ -438,6 +434,52 @@ return;
////////////////////////////////////////////////////////////////////////


void AsciiTable::expand(const int NR, const int NC)

{

//
// already big enough, nothing to do
//

if ( NR < Nrows && NC < Ncols ) return;

//
// stash existing table
//

AsciiTable at = *this;

//
// resize and copy over data
//

set_size(max(Nrows, NR), max(Ncols, NC));

int r, c;

for (r=0; r<at.nrows(); ++r) {

for (c=0; c<at.ncols(); ++c) {

set_entry(r, c, at(r, c));

}

}

//
// done
//

return;

}


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


void AsciiTable::set_ics(int value)

{
Expand Down
1 change: 1 addition & 0 deletions met/src/basic/vx_util/ascii_table.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ class AsciiTable {

virtual void set_size(const int NR, const int NC);
virtual void add_rows(const int NR);
virtual void expand (const int NR, const int NC);

virtual void set_entry(const int r, const int c, const char*);
virtual void set_entry(const int r, const int c, const ConcatString &);
Expand Down
156 changes: 93 additions & 63 deletions met/src/libcode/vx_analysis_util/stat_job.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1911,9 +1911,8 @@ void STATAnalysisJob::setup_stat_file(int n_row, int n) {

//
// Nothing to do if no output STAT file stream is defined
// or if the output table has already been setup
//
if(!stat_out || stat_at.nrows() > 0) return;
if(!stat_out) return;

//
// Check for a single output line type
Expand All @@ -1923,11 +1922,6 @@ void STATAnalysisJob::setup_stat_file(int n_row, int n) {
out_lt = (out_sa.n() == 1 ?
string_to_statlinetype(out_sa[0].c_str()) : no_stat_line_type);

//
// Multiply number of rows by the number of output line types
//
n_row *= out_sa.n();

//
// Loop through the output line types and determine the number of
// output columns
Expand Down Expand Up @@ -1982,69 +1976,105 @@ void STATAnalysisJob::setup_stat_file(int n_row, int n) {
n_col += n_header_columns;

//
// Setup the STAT table
//
stat_at.set_size(n_row, n_col);
justify_stat_cols(stat_at);
stat_at.set_precision(precision);
stat_at.set_bad_data_value(bad_data_double);
stat_at.set_bad_data_str(na_str);
stat_at.set_delete_trailing_blank_rows(1);

//
// Write the STAT header row
//
switch(out_lt) {
case stat_sl1l2: write_header_row (sl1l2_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_sal1l2: write_header_row (sal1l2_columns, n_sal1l2_columns, 1, stat_at, 0, 0); break;
case stat_vl1l2: write_header_row (vl1l2_columns, n_vl1l2_columns, 1, stat_at, 0, 0); break;
case stat_val1l2: write_header_row (val1l2_columns, n_val1l2_columns, 1, stat_at, 0, 0); break;
case stat_fho: write_header_row (fho_columns, n_fho_columns, 1, stat_at, 0, 0); break;
case stat_ctc: write_header_row (ctc_columns, n_ctc_columns, 1, stat_at, 0, 0); break;
case stat_cts: write_header_row (cts_columns, n_cts_columns, 1, stat_at, 0, 0); break;
case stat_mctc: write_mctc_header_row (1, n, stat_at, 0, 0); break;
case stat_mcts: write_header_row (mcts_columns, n_mcts_columns, 1, stat_at, 0, 0); break;
case stat_cnt: write_header_row (cnt_columns, n_cnt_columns, 1, stat_at, 0, 0); break;
case stat_vcnt: write_header_row (vcnt_columns, n_vcnt_columns, 1, stat_at, 0, 0); break;
case stat_pct: write_pct_header_row (1, n, stat_at, 0, 0); break;
case stat_pstd: write_pstd_header_row (1, n, stat_at, 0, 0); break;
case stat_pjc: write_pjc_header_row (1, n, stat_at, 0, 0); break;
case stat_prc: write_prc_header_row (1, n, stat_at, 0, 0); break;
case stat_eclv: write_eclv_header_row (1, n, stat_at, 0, 0); break;
case stat_mpr: write_header_row (mpr_columns, n_mpr_columns, 1, stat_at, 0, 0); break;
case stat_nbrctc: write_header_row (nbrctc_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_nbrcts: write_header_row (nbrcts_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_nbrcnt: write_header_row (nbrcnt_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_grad: write_header_row (grad_columns, n_grad_columns, 1, stat_at, 0, 0); break;
case stat_isc: write_header_row (isc_columns, n_isc_columns, 1, stat_at, 0, 0); break;
case stat_wdir: write_header_row (job_wdir_columns, n_job_wdir_columns, 1, stat_at, 0, 0); break;
case stat_ecnt: write_header_row (ecnt_columns, n_ecnt_columns, 1, stat_at, 0, 0); break;
case stat_rps: write_header_row (rps_columns, n_rps_columns, 1, stat_at, 0, 0); break;
case stat_rhist: write_rhist_header_row (1, n, stat_at, 0, 0); break;
case stat_phist: write_phist_header_row (1, n, stat_at, 0, 0); break;
case stat_relp: write_relp_header_row (1, n, stat_at, 0, 0); break;
case stat_orank: write_header_row (orank_columns, n_orank_columns, 1, stat_at, 0, 0); break;
case stat_ssvar: write_header_row (ssvar_columns, n_ssvar_columns, 1, stat_at, 0, 0); break;
case stat_genmpr: write_header_row (genmpr_columns, n_genmpr_columns, 1, stat_at, 0, 0); break;
// Create table from scratch
//
if(stat_row == 0) {

//
// Multiply the number of rows by the number of
// output line types to avoid resizing later
//
n_row *= max(1, out_sa.n());

//
// Write only header columns for unspecified line type
// Setup the STAT table
//
case no_stat_line_type:
write_header_row ((const char **) 0, 0, 1, stat_at, 0, 0); break;
stat_at.set_size(n_row, n_col);
justify_stat_cols(stat_at);
stat_at.set_precision(precision);
stat_at.set_bad_data_value(bad_data_double);
stat_at.set_bad_data_str(na_str);
stat_at.set_delete_trailing_blank_rows(1);

default:
mlog << Error << "\nSTATAnalysisJob::setup_stat_file() -> "
<< "unexpected stat line type \"" << statlinetype_to_string(out_lt)
<< "\"!\n\n";
exit(1);
break;
}
//
// Write the STAT header row
//
switch(out_lt) {
case stat_sl1l2: write_header_row (sl1l2_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_sal1l2: write_header_row (sal1l2_columns, n_sal1l2_columns, 1, stat_at, 0, 0); break;
case stat_vl1l2: write_header_row (vl1l2_columns, n_vl1l2_columns, 1, stat_at, 0, 0); break;
case stat_val1l2: write_header_row (val1l2_columns, n_val1l2_columns, 1, stat_at, 0, 0); break;
case stat_fho: write_header_row (fho_columns, n_fho_columns, 1, stat_at, 0, 0); break;
case stat_ctc: write_header_row (ctc_columns, n_ctc_columns, 1, stat_at, 0, 0); break;
case stat_cts: write_header_row (cts_columns, n_cts_columns, 1, stat_at, 0, 0); break;
case stat_mctc: write_mctc_header_row (1, n, stat_at, 0, 0); break;
case stat_mcts: write_header_row (mcts_columns, n_mcts_columns, 1, stat_at, 0, 0); break;
case stat_cnt: write_header_row (cnt_columns, n_cnt_columns, 1, stat_at, 0, 0); break;
case stat_vcnt: write_header_row (vcnt_columns, n_vcnt_columns, 1, stat_at, 0, 0); break;
case stat_pct: write_pct_header_row (1, n, stat_at, 0, 0); break;
case stat_pstd: write_pstd_header_row (1, n, stat_at, 0, 0); break;
case stat_pjc: write_pjc_header_row (1, n, stat_at, 0, 0); break;
case stat_prc: write_prc_header_row (1, n, stat_at, 0, 0); break;
case stat_eclv: write_eclv_header_row (1, n, stat_at, 0, 0); break;
case stat_mpr: write_header_row (mpr_columns, n_mpr_columns, 1, stat_at, 0, 0); break;
case stat_nbrctc: write_header_row (nbrctc_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_nbrcts: write_header_row (nbrcts_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_nbrcnt: write_header_row (nbrcnt_columns, n_sl1l2_columns, 1, stat_at, 0, 0); break;
case stat_grad: write_header_row (grad_columns, n_grad_columns, 1, stat_at, 0, 0); break;
case stat_isc: write_header_row (isc_columns, n_isc_columns, 1, stat_at, 0, 0); break;
case stat_wdir: write_header_row (job_wdir_columns, n_job_wdir_columns, 1, stat_at, 0, 0); break;
case stat_ecnt: write_header_row (ecnt_columns, n_ecnt_columns, 1, stat_at, 0, 0); break;
case stat_rps: write_header_row (rps_columns, n_rps_columns, 1, stat_at, 0, 0); break;
case stat_rhist: write_rhist_header_row (1, n, stat_at, 0, 0); break;
case stat_phist: write_phist_header_row (1, n, stat_at, 0, 0); break;
case stat_relp: write_relp_header_row (1, n, stat_at, 0, 0); break;
case stat_orank: write_header_row (orank_columns, n_orank_columns, 1, stat_at, 0, 0); break;
case stat_ssvar: write_header_row (ssvar_columns, n_ssvar_columns, 1, stat_at, 0, 0); break;
case stat_genmpr: write_header_row (genmpr_columns, n_genmpr_columns, 1, stat_at, 0, 0); break;

//
// Write only header columns for unspecified line type
//
case no_stat_line_type:
write_header_row ((const char **) 0, 0, 1, stat_at, 0, 0); break;

default:
mlog << Error << "\nSTATAnalysisJob::setup_stat_file() -> "
<< "unexpected stat line type \"" << statlinetype_to_string(out_lt)
<< "\"!\n\n";
exit(1);
break;
}

//
// Increment row counter
//
stat_row++;
}
//
// Initialize the stat row counter after writing the header line
// Expand the table, if needed
//
stat_row = 1;
else {

//
// Determine the required dimensions
//
int need_rows = max(stat_at.nrows(), stat_row + n_row);
int need_cols = max(stat_at.ncols(), n_col);

if(need_rows > stat_at.nrows() || need_cols > stat_at.ncols()) {

//
// Resize the STAT table
//
stat_at.expand(need_rows, need_cols);
justify_stat_cols(stat_at);
stat_at.set_precision(precision);
stat_at.set_bad_data_value(bad_data_double);
stat_at.set_bad_data_str(na_str);
stat_at.set_delete_trailing_blank_rows(1);
}
}

return;
}
Expand Down

0 comments on commit b2138c7

Please sign in to comment.