Ejemplo n.º 1
0
        public void Run(IContext ctx)
        {
            resultSet = new DataSet();
            Statistics stat = new Statistics();
            DataTable kTable = new DataTable() { TableName = "FlowSequence" };
            kTable.Columns.Add("K");
            DataTable Option = new DataTable() { TableName = "OptionsSequence" };
            Option.Columns.Add("Type");
            Option.Columns.Add("Srednee");
            Option.Columns.Add("Sigma");
            Option.Columns.Add("Cv");
            Option.Columns.Add("Cs");
            Option.Columns.Add("Eta");
            Option.Columns.Add("r");

            DataTable paramsTable = data.Tables["params"];

            var attrs = typeof(FlowSequenceGeneration).GetCustomAttributes<ParameterAttribute>();

            double eps = (double)attrs.First((param) => { return param.Name == "eps"; }).DefaultValue;
            int n = (int)attrs.First((param) => { return param.Name == "N"; }).DefaultValue;
            double r = (double)attrs.First((param) => { return param.Name == "r"; }).DefaultValue;
            double cv = (double)attrs.First((param) => { return param.Name == "CV"; }).DefaultValue;
            double eta = (double)attrs.First((param) => { return param.Name == "ETA"; }).DefaultValue;

            foreach(DataRow row in paramsTable.Rows) {
                switch (row["Name"].ToString())
                {
                    case "eps":
                        eps = double.Parse(row["Value"].ToString(), CultureInfo.InvariantCulture);
                        break;
                    case "N":
                        n = int.Parse(row["Value"].ToString());
                        break;
                    case "r":
                        r = double.Parse(row["Value"].ToString(), CultureInfo.InvariantCulture);
                        break;
                    case "CV":
                        cv = double.Parse(row["Value"].ToString(), CultureInfo.InvariantCulture);
                        break;
                    case "ETA":
                        eta = double.Parse(row["Value"].ToString(), CultureInfo.InvariantCulture);
                        break;
                }
            }

            DataTable optSource = ctx.InitialData.Tables["optsource_big"];

            double[] kArray = Sequence(optSource, stat, n, r, cv, eta,eps);

            for (int i = 0; i < kArray.Length; i++)
            {
                DataRow row = kTable.NewRow();
                row["K"] = kArray[i];
                kTable.Rows.Add(row);
            }

            resultSet.Tables.Add(kTable);
            double[] x = BigOptSource(optSource, cv, eta);
            DataRow row0 = Option.NewRow();
            row0["Type"] = "K_teor";
            row0["Srednee"] = stat.Average(x, 0, x.Length-1);
            row0["Sigma"] = stat.Sigma(x, 0, x.Length-1);
               //     row0["Cv"] = stat.Variation(x, 0, x.Length - 1);
               //     row0["Cs"] = stat.Asimmetria(x, 0, x.Length - 1);
               //     row0["Eta"] = stat.Asimmetria(x, 0, x.Length - 1) / stat.Variation(x, 0, x.Length - 1);
               //     row0["r"] = stat.Correlation(x, 0, x.Length - 1);
            row0["Cv"] = cv;
            row0["Cs"] = cv*eta;
            row0["Eta"] = eta;
            row0["r"] = r;
            Option.Rows.Add(row0);
            DataRow row1 = Option.NewRow();
            row1["Type"] = "K_practic";
            row1["Srednee"] = stat.Average(kArray, 0, n-1);
            row1["Sigma"] = stat.Sigma(kArray, 0, n-1);
            row1["Cv"] = stat.Variation(kArray, 0, n-1);
            row1["Cs"] = stat.Asimmetria(kArray, 0, n-1);
            row1["Eta"] = stat.Asimmetria(kArray, 0, n) / stat.Variation(kArray, 0, n-1);
            row1["r"] = stat.Correlation(kArray, 0, n-1);
            Option.Rows.Add(row1);

            DataRow row2 = Option.NewRow();
            row2["Type"] = "P";
            row2["Srednee"] = Average_p;
            row2["Sigma"] = Sigma_p;
            Option.Rows.Add(row2);
            resultSet.Tables.Add(Option);
        }