private static Dictionary <string, double> CreateMedianData(string simfile) { //this method will take in a sim file //Add scenario file outputs then process the outputs Simulation sim = new Simulation(simfile, System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @".\EngineInputTemplateTypeDefines.xml"); var Models = sim.FindObjectsbyNodeName("Model"); foreach (var Model in Models) { if (Model.ObjectType == "EQUITY" || Model.ObjectType == "CHILDEQUITY") { Model.Parameters["UseNominalRates"].Value = "false"; } } var Params = sim.FindObjectbyNodeName("Params"); Params.Parameters["Scenarios"].Value = "30000"; Params.Parameters["TimeSteps"].Value = "30"; Params.RemoveObjects("TimeStepSizes"); sim.AddAllScenarioFiles(System.IO.Path.GetTempPath() + "\\ScenarioFile.csv"); sim.RemoveOutputs(); sim.Run(System.IO.Path.GetTempPath() + "\\Scendata.csv"); Dictionary <string, double> tempres = new Dictionary <string, double>(); foreach (var scenarioFile in sim.FindObjectsbyNodeName("ScenarioFile")) { List <double> ScenarioData = new List <double>(); using (var fs = File.OpenRead(scenarioFile.Parameters["FileName"].Value.ToString())) using (var reader = new StreamReader(fs)) { //skip the first line var header = reader.ReadLine().Split(','); //Figure out the index to use int headertouse = 0; for (int j = 0; j < header.Length; j++) { if (header[j] == "ROLLUP") { headertouse = j; } } while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); if (int.Parse(values[1]) == 30) { var val = Math.Log(double.Parse(values[headertouse])) / 30; ScenarioData.Add(val); } } } tempres.Add(scenarioFile.Parameters["ModelID"].Value.ToString(), Basic.CalcMedian(ScenarioData)); } return(tempres); }