/// <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]; } } } }