コード例 #1
0
ファイル: Deterministic.cs プロジェクト: rpuchy/PlanningTool
        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);
        }