void RealTier_formula (RealTier me, const char32 *expression, Interpreter interpreter, RealTier thee) { try { Formula_compile (interpreter, me, expression, kFormula_EXPRESSION_TYPE_NUMERIC, true); if (! thee) thee = me; for (long icol = 1; icol <= my points.size; icol ++) { struct Formula_Result result; Formula_run (0, icol, & result); if (result. result.numericResult == NUMundefined) Melder_throw (U"Cannot put an undefined value into the tier."); thy points.at [icol] -> value = result. result.numericResult; } } catch (MelderError) { Melder_throw (me, U": formula not completed."); } }
void Matrix_formula (Matrix me, const char32 *expression, Interpreter interpreter, Matrix target) { try { struct Formula_Result result; Formula_compile (interpreter, me, expression, kFormula_EXPRESSION_TYPE_NUMERIC, true); if (! target) target = me; for (long irow = 1; irow <= my ny; irow ++) { for (long icol = 1; icol <= my nx; icol ++) { Formula_run (irow, icol, & result); target -> z [irow] [icol] = result. result.numericResult; } } } catch (MelderError) { Melder_throw (me, U": formula not completed."); } }
void TableOfReal_formula (TableOfReal me, const wchar_t *expression, Interpreter interpreter, TableOfReal thee) { try { Formula_compile (interpreter, me, expression, kFormula_EXPRESSION_TYPE_NUMERIC, TRUE); if (thee == NULL) thee = me; for (long irow = 1; irow <= my numberOfRows; irow ++) { for (long icol = 1; icol <= my numberOfColumns; icol ++) { struct Formula_Result result; Formula_run (irow, icol, & result); thy data [irow] [icol] = result. result.numericResult; } } } catch (MelderError) { Melder_throw (me, ": formula not completed."); } }
void FormantGrid_formula_frequencies (FormantGrid me, const wchar *expression, Interpreter interpreter, FormantGrid thee) { try { Formula_compile (interpreter, me, expression, kFormula_EXPRESSION_TYPE_NUMERIC, TRUE); if (thee == NULL) thee = me; for (long irow = 1; irow <= my formants -> size; irow ++) { RealTier formant = (RealTier) thy formants -> item [irow]; for (long icol = 1; icol <= formant -> points -> size; icol ++) { struct Formula_Result result; Formula_run (irow, icol, & result); if (result. result.numericResult == NUMundefined) Melder_throw ("Cannot put an undefined value into the tier.\nFormula not finished."); ((RealPoint) formant -> points -> item [icol]) -> value = result. result.numericResult; } } } catch (MelderError) { Melder_throw (me, ": frequency formula not completed."); } }
TableOfReal TableOfReal_extractColumnsWhere (TableOfReal me, const wchar_t *condition, Interpreter interpreter) { try { Formula_compile (interpreter, me, condition, kFormula_EXPRESSION_TYPE_NUMERIC, TRUE); /* * Count the new number of columns. */ long numberOfElements = 0; for (long icol = 1; icol <= my numberOfColumns; icol ++) { for (long irow = 1; irow <= my numberOfRows; irow ++) { struct Formula_Result result; Formula_run (irow, icol, & result); if (result. result.numericResult != 0.0) { numberOfElements ++; break; } } } if (numberOfElements < 1) Melder_throw ("No columns match this condition."); /* * Create room for the result. */ autoTableOfReal thee = TableOfReal_create (my numberOfRows, numberOfElements); copyRowLabels (me, thee.peek()); /* * Store the result. */ numberOfElements = 0; for (long icol = 1; icol <= my numberOfColumns; icol ++) { for (long irow = 1; irow <= my numberOfRows; irow ++) { struct Formula_Result result; Formula_run (irow, icol, & result); if (result. result.numericResult != 0.0) { copyColumn (me, icol, thee.peek(), ++ numberOfElements); break; } } } return thee.transfer(); } catch (MelderError) { Melder_throw (me, ": columns not extracted."); } }
void Matrix_formula_part (Matrix me, double xmin, double xmax, double ymin, double ymax, const char32 *expression, Interpreter interpreter, Matrix target) { try { if (xmax <= xmin) { xmin = my xmin; xmax = my xmax; } if (ymax <= ymin) { ymin = my ymin; ymax = my ymax; } long ixmin, ixmax, iymin, iymax; (void) Matrix_getWindowSamplesX (me, xmin, xmax, & ixmin, & ixmax); (void) Matrix_getWindowSamplesY (me, ymin, ymax, & iymin, & iymax); struct Formula_Result result; Formula_compile (interpreter, me, expression, kFormula_EXPRESSION_TYPE_NUMERIC, true); if (! target) target = me; for (long irow = iymin; irow <= iymax; irow ++) { for (long icol = ixmin; icol <= ixmax; icol ++) { Formula_run (irow, icol, & result); target -> z [irow] [icol] = result. result.numericResult; } } } catch (MelderError) { Melder_throw (me, U": formula not completed."); } }