1 #ifndef GNUMERIC_ANALYSIS_TOOLS_H 2 #define GNUMERIC_ANALYSIS_TOOLS_H 3 4 #include <gnumeric.h> 5 #include <numbers.h> 6 #include <tools/dao.h> 7 #include <tools/tools.h> 8 #include <regression.h> 9 #include <func.h> 10 11 12 /*******************************************************************/ 13 /* Section 1: Undoable tools and their data structures */ 14 15 typedef enum { 16 analysis_tools_noerr = 0, 17 analysis_tools_reported_err, 18 analysis_tools_reported_err_input, 19 analysis_tools_missing_data, 20 analysis_tools_too_few_cols, 21 analysis_tools_too_few_rows, 22 analysis_tools_replication_invalid, 23 analysis_tools_no_records_found, 24 analysis_tools_invalid_field 25 } analysis_tools_error_code_t; 26 27 28 /********************************************************************/ 29 /* Section 2: Undoable Tools using the first common generic data struct */ 30 31 typedef struct { 32 analysis_tools_error_code_t err; 33 WorkbookControl *wbc; 34 GSList *input; 35 group_by_t group_by; 36 gboolean labels; 37 } analysis_tools_data_generic_t; 38 39 /**************** Correlation Tool ***************/ 40 41 gboolean analysis_tool_correlation_engine (GOCmdContext *gcc, 42 data_analysis_output_t *dao, 43 gpointer specs, 44 analysis_tool_engine_t selector, 45 gpointer result); 46 47 48 /**************** Covariance Tool ***************/ 49 50 gboolean analysis_tool_covariance_engine (GOCmdContext *gcc, 51 data_analysis_output_t *dao, 52 gpointer specs, 53 analysis_tool_engine_t selector, 54 gpointer result); 55 56 57 /********************************************************************/ 58 /* Section 3: Undoable Tools using the first common generic */ 59 /* data struct augmented with some simple fields */ 60 61 /************** Single Factor ANOVA *************/ 62 63 typedef struct { 64 analysis_tools_data_generic_t base; 65 gnm_float alpha; 66 } analysis_tools_data_anova_single_t; 67 68 gboolean analysis_tool_anova_single_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 69 analysis_tool_engine_t selector, gpointer result); 70 71 /********** Descriptive Statistics Tool **********/ 72 73 typedef struct { 74 analysis_tools_data_generic_t base; 75 gboolean summary_statistics; 76 gboolean confidence_level; 77 gboolean kth_largest; 78 gboolean kth_smallest; 79 gboolean use_ssmedian; 80 int k_smallest; 81 int k_largest; 82 gnm_float c_level; 83 } analysis_tools_data_descriptive_t; 84 85 gboolean analysis_tool_descriptive_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 86 analysis_tool_engine_t selector, gpointer result); 87 88 89 /************** Moving Averages **** *************/ 90 91 typedef enum { 92 moving_average_type_sma = 0, 93 moving_average_type_cma, 94 moving_average_type_wma, 95 moving_average_type_spencer_ma, 96 moving_average_type_central_sma 97 } moving_average_type_t; 98 99 typedef struct { 100 analysis_tools_data_generic_t base; 101 int interval; 102 int std_error_flag; 103 int df; 104 int offset; 105 gboolean show_graph; 106 moving_average_type_t ma_type; 107 } analysis_tools_data_moving_average_t; 108 109 gboolean analysis_tool_moving_average_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 110 analysis_tool_engine_t selector, gpointer result); 111 112 113 /************** Fourier Analysis **** *************/ 114 115 typedef struct { 116 analysis_tools_data_generic_t base; 117 gboolean inverse; 118 } analysis_tools_data_fourier_t; 119 120 gboolean analysis_tool_fourier_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 121 analysis_tool_engine_t selector, gpointer result); 122 123 124 /************** Sampling Tool **********************/ 125 126 typedef struct { 127 analysis_tools_data_generic_t base; 128 gboolean periodic; 129 gboolean row_major; 130 guint offset; 131 guint size; 132 guint period; 133 guint number; 134 } analysis_tools_data_sampling_t; 135 136 gboolean analysis_tool_sampling_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 137 analysis_tool_engine_t selector, gpointer result); 138 139 140 /************** Ranking Tool *************************/ 141 142 typedef struct { 143 analysis_tools_data_generic_t base; 144 gboolean av_ties; 145 } analysis_tools_data_ranking_t; 146 147 gboolean analysis_tool_ranking_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 148 analysis_tool_engine_t selector, gpointer result); 149 150 151 152 153 /********************************************************************/ 154 /* Section 4: Undoable Tools using the second common generic */ 155 /* data struct augmented with some simple fields */ 156 157 /*********************** FTest ************************/ 158 159 typedef struct { 160 analysis_tools_error_code_t err; 161 WorkbookControl *wbc; 162 GnmValue *range_1; 163 GnmValue *range_2; 164 gboolean labels; 165 gnm_float alpha; 166 } analysis_tools_data_generic_b_t; 167 168 gboolean analysis_tool_ftest_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 169 analysis_tool_engine_t selector, gpointer result); 170 171 /**************** Regression ********************/ 172 173 typedef struct { 174 analysis_tools_data_generic_b_t base; 175 group_by_t group_by; 176 gboolean intercept; 177 gboolean multiple_regression; 178 gboolean multiple_y; 179 gboolean residual; 180 GSList *indep_vars; 181 } analysis_tools_data_regression_t; 182 183 gboolean analysis_tool_regression_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 184 analysis_tool_engine_t selector, gpointer result); 185 /*********************** TTest paired *****************/ 186 187 typedef struct { 188 analysis_tools_data_generic_b_t base; 189 gnm_float mean_diff; 190 gnm_float var1; 191 gnm_float var2; 192 } analysis_tools_data_ttests_t; 193 194 gboolean analysis_tool_ttest_paired_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 195 analysis_tool_engine_t selector, gpointer result); 196 197 198 /*********************** TTest equal variances *********/ 199 200 gboolean analysis_tool_ttest_eqvar_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 201 analysis_tool_engine_t selector, gpointer result); 202 203 204 /*********************** TTest unequal variances *******/ 205 206 gboolean analysis_tool_ttest_neqvar_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 207 analysis_tool_engine_t selector, gpointer result); 208 209 210 /*********************** ZTest ************************/ 211 212 gboolean analysis_tool_ztest_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 213 analysis_tool_engine_t selector, gpointer result); 214 215 /**************** Advanced Filter ********************/ 216 217 typedef struct { 218 analysis_tools_data_generic_b_t base; 219 gboolean unique_only_flag; 220 } analysis_tools_data_advanced_filter_t; 221 222 gboolean analysis_tool_advanced_filter_engine (GOCmdContext *gcc, data_analysis_output_t *dao, gpointer specs, 223 analysis_tool_engine_t selector, gpointer result); 224 225 226 227 228 /********************************************************************/ 229 /* Section 5 Functions also needed elsewhere. */ 230 231 gboolean analysis_tool_generic_clean (gpointer specs); 232 gboolean analysis_tool_generic_b_clean (gpointer specs); 233 234 int analysis_tool_calc_length (analysis_tools_data_generic_t *info); 235 236 void analysis_tools_write_label (GnmValue *val, /* depreceated */ 237 data_analysis_output_t *dao, 238 analysis_tools_data_generic_t *info, 239 int x, int y, int i); 240 void analysis_tools_write_label_ftest (GnmValue *val, /* depreceated */ 241 data_analysis_output_t *dao, 242 int x, int y, 243 gboolean labels, int i); 244 245 gboolean analysis_tool_table (data_analysis_output_t *dao, 246 analysis_tools_data_generic_t *info, 247 gchar const *title, gchar const *functionname, 248 gboolean full_table); 249 250 void prepare_input_range (GSList **input_range, group_by_t group_by); 251 252 const GnmExpr *make_cellref (int dx, int dy); 253 const GnmExpr *make_rangeref (int dx0, int dy0, int dx1, int dy1); 254 255 void set_cell_text_row (data_analysis_output_t *dao, 256 int col, int row, const char *text); 257 void set_cell_text_col (data_analysis_output_t *dao, 258 int col, int row, const char *text); 259 260 GnmFunc *analysis_tool_get_function (char const *name, 261 data_analysis_output_t *dao); 262 263 #endif 264