public static PrepData PrepSimulation(Excel.Application app, Excel.Workbook wbh, ProgBar pb, bool ignore_parse_errors) { // build graph var dag = new DAG(wbh, app, ignore_parse_errors); if (dag.containsLoop()) { throw new DataDebugMethods.ContainsLoopException(); } pb.IncrementProgress(); // get terminal input and terminal formula nodes once var terminal_input_nodes = dag.terminalInputVectors(); var terminal_formula_nodes = dag.terminalFormulaNodes(true); ///the boolean indicates whether to use all outputs or not if (terminal_input_nodes.Length == 0) { throw new NoRangeInputs(); } if (terminal_formula_nodes.Length == 0) { throw new NoFormulas(); } // save original spreadsheet state CellDict original_inputs = UserSimulation.Utility.SaveInputs(dag); // force a recalculation before saving outputs, otherwise we may // erroneously conclude that the procedure did the wrong thing // based solely on Excel floating-point oddities UserSimulation.Utility.InjectValues(app, wbh, original_inputs); // save function outputs CellDict correct_outputs = UserSimulation.Utility.SaveOutputs(terminal_formula_nodes, dag); return(new PrepData() { dag = dag, original_inputs = original_inputs, correct_outputs = correct_outputs, terminal_input_nodes = terminal_input_nodes, terminal_formula_nodes = terminal_formula_nodes }); }
public static void RunSimulation(Excel.Application app, Excel.Workbook wbh, int nboots, double significance, double threshold, UserSimulation.Classification c, Random r, String outfile, long max_duration_in_ms, String logfile, ProgBar pb, PrepData prepdata, CellDict errors) { // write header if needed if (!System.IO.File.Exists(outfile)) { System.IO.File.AppendAllText(outfile, Simulation.HeaderRowForCSV()); } // CheckCell weighted, all outputs, quantile //var s_1 = new UserSimulation.Simulation(); //s_1.RunFromBatch(nboots, // number of bootstraps // wbh.FullName, // Excel filename // significance, // statistical significance threshold for hypothesis test // app, // Excel.Application // new QuantileCutoff(0.05), // max % extreme values to flag // c, // classification data // r, // random number generator // UserSimulation.AnalysisType.CheckCell5,// analysis type // true, // weighted analysis // true, // use all outputs for analysis // prepdata.graph, // AnalysisData // wbh, // Excel.Workbook // errors, // pre-generated errors // prepdata.terminal_input_nodes, // input range nodes // prepdata.terminal_formula_nodes, // output nodes // prepdata.original_inputs, // original input values // prepdata.correct_outputs, // original output values // max_duration_in_ms, // max duration of simulation // logfile); //System.IO.File.AppendAllText(outfile, s_1.FormatResultsAsCSV()); pb.IncrementProgress(); // CheckCell weighted, all outputs, quantile var s_4 = new UserSimulation.Simulation(); s_4.RunFromBatch(nboots, // number of bootstraps wbh.FullName, // Excel filename significance, // statistical significance of threshold app, // Excel.Application new QuantileCutoff(0.10), // max % extreme values to flag c, // classification data r, // random number generator UserSimulation.AnalysisType.CheckCell10, // analysis type true, // weighted analysis true, // use all outputs for analysis prepdata.dag, // AnalysisData wbh, // Excel.Workbook errors, // pre-generated errors prepdata.terminal_input_nodes, // input range nodes prepdata.terminal_formula_nodes, // output nodes prepdata.original_inputs, // original input values prepdata.correct_outputs, // original output values max_duration_in_ms, // max duration of simulation logfile); System.IO.File.AppendAllText(outfile, s_4.FormatResultsAsCSV()); pb.IncrementProgress(); // Normal, all inputs var s_2 = new UserSimulation.Simulation(); s_2.RunFromBatch(nboots, // irrelevant wbh.FullName, // Excel filename significance, // normal cutoff? app, // Excel.Application new NormalCutoff(threshold), // ?? c, // classification data r, // random number generator UserSimulation.AnalysisType.NormalAllInputs, // analysis type true, // irrelevant true, // irrelevant prepdata.dag, // AnalysisData wbh, // Excel.Workbook errors, // pre-generated errors prepdata.terminal_input_nodes, // input range nodes prepdata.terminal_formula_nodes, // output nodes prepdata.original_inputs, // original input values prepdata.correct_outputs, // original output values max_duration_in_ms, // max duration of simulation logfile); System.IO.File.AppendAllText(outfile, s_2.FormatResultsAsCSV()); pb.IncrementProgress(); // Normal, range inputs //var s_3 = new UserSimulation.Simulation(); //s_3.RunFromBatch(nboots, // irrelevant // wbh.FullName, // Excel filename // significance, // normal cutoff? // app, // Excel.Application // new NormalCutoff(threshold), // ?? // c, // classification data // r, // random number generator // UserSimulation.AnalysisType.NormalPerRange, // analysis type // true, // irrelevant // true, // irrelevant // prepdata.graph, // AnalysisData // wbh, // Excel.Workbook // errors, // pre-generated errors // prepdata.terminal_input_nodes, // input range nodes // prepdata.terminal_formula_nodes, // output nodes // prepdata.original_inputs, // original input values // prepdata.correct_outputs, // original output values // max_duration_in_ms, // max duration of simulation // logfile); //System.IO.File.AppendAllText(outfile, s_3.FormatResultsAsCSV()); pb.IncrementProgress(); }