Ejemplo n.º 1
0
 private void AddCalcColumns(TableProcessing.Table table, params string[] columns)
 {
     foreach (var columnName in columns)
     {
         table.AddColumnIfNotExist(tables.CalcsHydro.Column(columnName));
     }
 }
Ejemplo n.º 2
0
        public static void CopyCoeffs(string coeffTypeColumnName,
                                      TableProcessing.Table bazaHydroTable,
                                      TableProcessing.Table coeffsTable,
                                      TableProcessing.Table hydroTable,
                                      params string[] coeffsArray)
        {
            hydroTable.AddColumnIfNotExist(bazaHydroTable.Column(coeffTypeColumnName));

            var coeffsTableRows = coeffsTable.GetRows();

            hydroTable.IterateRows(calcsRow =>
            {
                var query = from coeffsRow in coeffsTableRows
                            where coeffsRow["OI_RnDF"].StringValue
                            == calcsRow[coeffTypeColumnName].StringValue
                            select coeffsRow;

                var neededRow = query.First();

                foreach (var coeffColumnName in coeffsArray)
                {
                    calcsRow.Set(coeffColumnName, neededRow[coeffColumnName]);
                }
            }, null, coeffsArray);
        }
Ejemplo n.º 3
0
        private int Find_PY(TableProcessing.Table interpTable, double kY, string CvY_columnName)
        {
            var PY_cells  = interpTable.Column("PY").GetCells();
            var CvY_cells = interpTable.Column(CvY_columnName).GetCells();

            var rowsCount = PY_cells.Count;


            var minDiff      = double.MaxValue;
            var minDiffIndex = -1;

            for (var i = 0; i < rowsCount; ++i)
            {
                var diff = Math.Abs(CvY_cells[i].DoubleValue - kY);

                if (diff < minDiff)
                {
                    minDiff      = diff;
                    minDiffIndex = i;
                }
            }

            var PY = PY_cells[minDiffIndex].IntValue;

            return(PY);
        }
Ejemplo n.º 4
0
 public CalcMeteoTable(string name,
                       TableProcessing.Table operInfoMeteoTable) : base(name)
 {
     AddColumns(
         operInfoMeteoTable.Column(Tables.OperInfoMeteo.Index),
         operInfoMeteoTable.Column(Tables.OperInfoMeteo.OI_Meteo),
         operInfoMeteoTable.Column(Tables.OperInfoMeteo.Meteo));
 }
Ejemplo n.º 5
0
 public CalcsHydroTable(string name,
                        TableProcessing.Table operInfoHydroTable) : base(name)
 {
     AddColumns(
         operInfoHydroTable.Column(Tables.OperInfoHydro.Index),
         operInfoHydroTable.Column(Tables.OperInfoHydro.OI_Hydro),
         operInfoHydroTable.Column(Tables.OperInfoHydro.Hydro));
 }
Ejemplo n.º 6
0
        private void InterpolateCvY(double value)
        {
            var interpColumnName = CvYColumnConverter.NameFromValue(value);

            var interpTable = new TableProcessing.Table("Interpolate " + interpColumnName);

            interpTable.AddColumn(tables.OrdinKtgr.Column("PY"));

            var floorValue = double.NegativeInfinity;
            var ceilValue  = double.PositiveInfinity;

            for (var i = 0; i < tables.OrdinKtgr.DataTable.Columns.Count; i++)
            {
                var column = tables.OrdinKtgr.DataTable.Columns[i];

                if (column.ColumnName.IndexOf("CvY_", StringComparison.Ordinal) != 0)
                {
                    continue;
                }

                var CV_value = CvYColumnConverter.ValueFromName(column.ColumnName);

                if (CV_value < value)
                {
                    floorValue = CV_value;
                }
                else if (CV_value > value)
                {
                    ceilValue = CV_value;
                    break;
                }
            }

            var floorStr = CvYColumnConverter.NameFromValue(floorValue);

            var ceilStr = CvYColumnConverter.NameFromValue(ceilValue);

            interpTable.AddColumn(tables.OrdinKtgr.Column(floorStr));
            var column_res = interpTable.Column(interpColumnName);

            interpTable.AddColumn(tables.OrdinKtgr.Column(ceilStr));

            interpTable.IterateRows(row =>
            {
                double[] x = { floorValue, ceilValue };
                double[] y =
                {
                    row[floorStr].DoubleValue,
                    row[ceilStr].DoubleValue
                };

                var res = LinearSpline.Interpolate(x, y).Interpolate(value);
                row.Set(column_res.Name, res);
            }, column_res.Name);

            tables.OrdinKtgr.AddColumn(interpTable.Column(interpColumnName));
        }
Ejemplo n.º 7
0
 private void ImportColumns(TableProcessing.Table table,
                            params string[] columns)
 {
     foreach (var column in columns)
     {
         var col = tables.CalcsHydro.AddColumn("_" + column);
         col.SetDataFrom(table.Column(column));
     }
 }
Ejemplo n.º 8
0
        public void AddCustomTableIfNotExists(TableProcessing.Table newTable)
        {
            foreach (var table in customTables)
            {
                if (table.DataTable.TableName == newTable.DataTable.TableName)
                {
                    return;
                }
            }

            AddCustomTable(newTable);
        }
Ejemplo n.º 9
0
        private void AddCalcColumnsOrdinal(TableProcessing.Table table, int firstOrdinal,
                                           params string[] columns)
        {
            var ordinal = firstOrdinal;

            foreach (var columnName in columns)
            {
                table.AddColumn(tables.CalcsHydro.Column(columnName));

                table.DataTable.Columns[columnName].SetOrdinal(ordinal);

                ordinal++;
            }
        }
Ejemplo n.º 10
0
        public static void CalcMeteoAvg(List <Row> meteoRows, string meteoColumnName,
                                        TableProcessing.Table calcsHydroTable, string hydroColumnName,
                                        ICellMapper cellMapper, params TableProcessing.Table[] resultTables)
        {
            var valuesColumnName = meteoColumnName + "_Values";


            calcsHydroTable.IterateRows(hydroRow =>
            {
                var intList = hydroRow["OI_METEO"].ToIntList();

                double number = 0;

                var realMeteoColumnName = meteoColumnName;

                if (meteoColumnName.StartsWith("&"))
                {
                    var hydroPtr        = meteoColumnName.Substring(1);
                    realMeteoColumnName = hydroRow[hydroPtr].StringValue;
                }

                Etc.NoThrow(() =>
                {
                    var doubleQuery = from meteoRow in meteoRows
                                      where intList.Contains(meteoRow["OI_Meteo"].IntValue) &&
                                      double.TryParse(
                        meteoRow[realMeteoColumnName].StringValue, out number)
                                      select number;

                    var enumerable = doubleQuery.ToList();

                    var strQuery = from dbl in enumerable
                                   select cellMapper.Map(new Cell(dbl)).StringValue;

                    var res = string.Join(";", strQuery.ToArray());

                    hydroRow.Set(valuesColumnName, res);

                    hydroRow.Set(hydroColumnName,
                                 enumerable.Average(), cellMapper);
                });
            }, valuesColumnName, hydroColumnName);

            foreach (var table in resultTables)
            {
                table.AddColumn(calcsHydroTable.Column(hydroColumnName));
            }
        }
Ejemplo n.º 11
0
        private void LoadDbTables()
        {
            var userArgYear   = userInput[CalculationsForm.Arg_Year];
            var operTableArgs = OperTableContract.CreateArgs(userArgYear);

            OperInfoHydro = dbTableLoader.LoadTable(Tables.Names.OperInfoHydro, operTableArgs);
            OperInfoMeteo = dbTableLoader.LoadTable(Tables.Names.OperInfoMeteo, operTableArgs);

            BazaInfoHydro  = dbTableLoader.LoadTable(Tables.Names.BazaInfoHydro);
            BazaInfoMeteo  = dbTableLoader.LoadTable(Tables.Names.BazaInfoMeteo);
            BazaInfoCoeffs = dbTableLoader.LoadTable(Tables.Names.BazaInfoCoeffs);

            OrdinKtgr = dbTableLoader.LoadTable(Tables.Names.OrdinKtgr);
            Posts     = dbTableLoader.LoadTable(Tables.Names.Posts);
            ConsultSp = dbTableLoader.LoadTable(Tables.Names.ConsultSp);
        }
Ejemplo n.º 12
0
        public static void BlockE_Calc_kWP(int totalOffset,
                                           TableProcessing.Table calcsTable,
                                           Dictionary <string, string> userInput,
                                           Dictionary <string, object> calcMemory
                                           )
        {
            var column_kWP = calcsTable.Column("kWP");

            if (userInput[CalculationsForm.Arg_Qp] == QpItemsRepr.Wj)
            {
                column_kWP.SetDataFrom(calcsTable.Column("kWSR"));
                calcMemory["DF_Offset"] = totalOffset + 10;
            }
            else
            {
                column_kWP.SetDataFrom(calcsTable.Column("kQP"));
                calcMemory["DF_Offset"] = totalOffset;
            }
        }
Ejemplo n.º 13
0
 public void AddCustomTable(TableProcessing.Table newTable)
 {
     customTables.Add(newTable);
 }
Ejemplo n.º 14
0
        private void Calc_PY()
        {
            var interpTable = new TableProcessing.Table("Інтерполяція PY");

            tables.AddCustomTable(interpTable);

            interpTable.AddColumn("PY");
            interpTable.AddRow("0,001");
            interpTable.AddRow("0,01");
            interpTable.AddRow("0,03");
            interpTable.AddRow("0,05");
            interpTable.AddRow("0,1");
            interpTable.AddRow("0,3");
            interpTable.AddRow("0,5");

            for (var i = 1; i <= 99; i++)
            {
                interpTable.AddRow(i);
            }

            tables.CalcsHydro.IterateRows(row =>
            {
                var kY             = row["kY"].DoubleValue;
                var CvY_columnName = row["CvY_Column"].StringValue;

                if (CvY_columnName.IndexOf("CvY_", StringComparison.Ordinal) != 0)
                {
                    return;
                }

                if (!tables.OrdinKtgr.DataTable.Columns.Contains(CvY_columnName))
                {
                    var value_CvY = CvYColumnConverter.ValueFromName(CvY_columnName);
                    InterpolateCvY(value_CvY);
                }

                var PY_cells  = tables.OrdinKtgr.Column("PY").GetCells();
                var CvY_cells = tables.OrdinKtgr.Column(CvY_columnName).GetCells();

                var x = new List <double>();
                var y = new List <double>();

                for (var i = 0; i < PY_cells.Count; i++)
                {
                    Etc.NoThrow(() =>
                    {
                        var xValue = PY_cells[i].DoubleValue;
                        var yValue = CvY_cells[i].DoubleValue;

                        x.Add(xValue);
                        y.Add(yValue);
                    });
                }

                Etc.NoThrow(() =>
                {
                    var spline = LinearSpline.Interpolate(x, y);

                    interpTable.IterateRows(row2 =>
                    {
                        row2.Set(CvY_columnName,
                                 spline.Interpolate(row2["PY"].DoubleValue));
                    }, CvY_columnName);
                });

                var PY = Find_PY(interpTable, kY, CvY_columnName);
                row.Set("PY", PY);
            }, "PY");

            tables.Result.AddColumn(tables.CalcsHydro.Column("PY"));
        }
Ejemplo n.º 15
0
        public static void RestoreColumn(TableProcessing.Table coeffsTable,
                                         Column xCol, Column yCol,
                                         ICellMapper resultMapper, string equationName,
                                         bool needPlusA = true)
        {
            var count = xCol.Height;

            var xDoubles = new List <double>();
            var yDoubles = new List <double>();

            for (var i = 0; i < count; i++)
            {
                if (!xCol[i].IsEmpty && !yCol[i].IsEmpty)
                {
                    xDoubles.Add(xCol[i].DoubleValue);
                    yDoubles.Add(yCol[i].DoubleValue);
                }
            }

            var restoredColumn = yCol.Table.Column(yCol.Name + "_Restored");
            var usedColumn     = yCol.Table.Column(yCol.Name + "_Used");

            if (xDoubles.Count < 2)
            {
                return;
            }

            var p = Fit.Line(xDoubles.ToArray(), yDoubles.ToArray());

            // y = a + b*x

            var coeffMapper = new RoundDoubleCellMapper(6);

            var a = 0.0;

            if (needPlusA)
            {
                a = p.Item1;
            }

            var b = p.Item2;

            var aValue = "";

            if (needPlusA)
            {
                aValue = coeffMapper.Map(new Cell(a)).StringValue;
            }

            coeffsTable.DataTable.Rows.Add(equationName,
                                           aValue,
                                           coeffMapper.Map(new Cell(b)).StringValue);

            for (var i = 0; i < count; i++)
            {
                if (!xCol[i].IsEmpty)
                {
                    var restoredValue = a + b * xCol[i].DoubleValue;
                    restoredColumn.Set(i, restoredValue, resultMapper);

                    usedColumn.Set(i, yCol[i].IsEmpty ? restoredColumn[i] : yCol[i]);
                }
            }
        }