コード例 #1
0
        /// <summary>
        /// Creates a fixed time step series with the lowest possible timestep
        /// </summary>
        /// <param name="ts"></param>
        public FixedTimeStepSeries(TimeSpanSeries ts, bool Accumulate) : this()
        {
            var maxtimestep = TimeSpan.FromSeconds(ts.Items.Average(tse => tse.Duration.TotalSeconds));

            this.TimeStepSize    = TSTools.GetLowestZoomLevel(maxtimestep);
            this.StartTime       = TSTools.GetTimeOfFirstTimeStep(ts.StartTime, TimeStepSize);
            this.OffSetStartTime = ts.StartTime;
            OffSetEndTime        = ts.EndTime;
            DateTime NextEnd = StartTime.AddTimeStepUnit(TimeStepSize);

            List <int> Nvalues = new List <int>();

            foreach (var v in ts.Items)
            {
                if (v.EndTime <= NextEnd)
                {
                    if (Items.Count == 0)
                    {
                        Items.Add(new ValueDouble(0));
                        Nvalues.Add(0);
                    }
                    if (v.Value != ts.DeleteValue)
                    {
                        Items[Items.Count - 1].Value += v.Value;
                        Nvalues[Items.Count - 1]++;
                    }
                }
                else
                {
                    Items.Add(new ValueDouble(DeleteValue));
                    Nvalues.Add(0);
                    while (v.EndTime > (NextEnd = NextEnd.AddTimeStepUnit(TimeStepSize)))
                    {
                        Items.Add(new ValueDouble(DeleteValue));
                        Nvalues.Add(0);
                    }
                    Items[Count - 1].Value = v.Value;
                    Nvalues[Items.Count - 1]++;
                }
            }

            if (!Accumulate)
            {
                for (int i = 0; i < Nvalues.Count; i++)
                {
                    if (Nvalues[i] > 0)
                    {
                        Items[i].Value /= Nvalues[i];
                    }
                }
            }
        }