Пример #1
0
        /// <summary>
        /// Routes input series using lag coefficients
        /// </summary>
        /// <param name="s"></param>
        /// <param name="lagCoefficients"></param>
        public static Series RoutingWithLags(Series s, double[] lagCoefficients)
        {
            double[] result = new double[s.Count];

            Series rval = s.Copy();
            int    sz   = s.Count;

            Math.Multiply(rval, 0);
            Series.CopyAttributes(s, rval);

            for (int i = 0; i < s.Count; i++)
            {
                double v = s[i].Value;

                for (int j = 0; j < lagCoefficients.Length && i + j < sz; j++)
                {
                    result[i + j] += v * lagCoefficients[j];
                }
            }

            // put results back into Series format.
            rval.Values = result;
            return(rval);
        }
Пример #2
0
        /// <summary>
        /// Converts series to specified units
        /// </summary>
        /// <param name="units"></param>
        public static void ConvertUnits(Series s, string units)
        {
            if (s.Count == 0)
            {
                return;
            }

            if (s.Units == "degrees C" && units == "degrees F")
            {
                for (int i = 0; i < s.Count; i++)
                {
                    Point p = s[i];
                    if (p.IsMissing)
                    {
                        continue;
                    }
                    p.Value = p.Value * 9.0 / 5.0 + 32.0;
                    s[i]    = p;
                }
                s.Units = "degrees F";
                return;
            }

            else if (s.Units.ToLower() == "degrees f" && units.ToLower() == "degrees c")
            {
                for (int i = 0; i < s.Count; i++)
                {
                    Point p = s[i];
                    if (p.IsMissing)
                    {
                        continue;
                    }
                    p.Value = (p.Value - 32.0) * 5.0 / 9.0;
                    s[i]    = p;
                }
                s.Units = "degrees C";
                return;
            }
            else
            if (s.Units == "acre-feet" && units == "cfs")
            {
                if (s.TimeInterval == TimeInterval.Daily)
                {
                    Math.Multiply(s, ConvertUnitsFactor(s.TimeInterval, s.Units, units, DateTime.Now));
                    s.Units = "cfs";
                    return;
                }
                else
                if (s.TimeInterval == TimeInterval.Monthly)
                {
                    for (int i = 0; i < s.Count; i++)
                    {
                        Point pt = s[i];
                        pt   = pt * ConvertUnitsFactor(s.TimeInterval, s.Units, units, pt.DateTime);
                        s[i] = pt;
                    }
                    s.Units = "cfs";
                    return;
                }
            }

            throw new NotImplementedException("cannot convert " + s.TimeInterval.ToString() + " " + s.Units + " to " + units);
        }