public Aggregates getAggregates(long tStart, long tEnd) { Aggregates agg = new Aggregates(); long totalSeconds = 0; bool firstFound = false; for (int i = 0; i < timestamps.Length; i++) { long left = Math.Max(timestamps[i] - step, tStart); long right = Math.Min(timestamps[i], tEnd); long delta = right - left; if (delta > 0) { double value = values[i]; double min = Util.min(agg.Min, value); if (double.IsNaN(agg.Min) || agg.Min > min) { agg.Min = min; agg.MinTimeStamp = timestamps[i]; } double max = Util.max(agg.Max, value); if (double.IsNaN(agg.Max) || agg.Max < max) { agg.Max = max; agg.MaxTimeStamp = timestamps[i]; } if (!firstFound) { agg.First = value; agg.FirstTimeStamp = timestamps[i]; firstFound = true; } agg.Last = value; agg.LastTimeStamp = timestamps[i]; if (!Double.IsNaN(value)) { agg.Total = Util.sum(agg.Total, delta * value); totalSeconds += delta; } } } agg.Average = totalSeconds > 0 ? (agg.Total / totalSeconds) : Double.NaN; return(agg); }
public Aggregates getAggregates(long tStart, long tEnd) { Aggregates agg = new Aggregates(); long totalSeconds = 0; bool firstFound = false; for (int i = 0; i < timestamps.Length; i++) { long left = Math.Max(timestamps[i] - step, tStart); long right = Math.Min(timestamps[i], tEnd); long delta = right - left; if (delta > 0) { double value = values[i]; double min = Util.min(agg.Min, value); if (double.IsNaN(agg.Min) || agg.Min > min) { agg.Min = min; agg.MinTimeStamp = timestamps[i]; } double max = Util.max(agg.Max, value); if (double.IsNaN(agg.Max) || agg.Max < max) { agg.Max = max; agg.MaxTimeStamp = timestamps[i]; } if (!firstFound) { agg.First = value; agg.FirstTimeStamp = timestamps[i]; firstFound = true; } agg.Last = value; agg.LastTimeStamp = timestamps[i]; if (!Double.IsNaN(value)) { agg.Total = Util.sum(agg.Total, delta * value); totalSeconds += delta; } } } agg.Average = totalSeconds > 0 ? (agg.Total / totalSeconds) : Double.NaN; return agg; }
public void setValue(Aggregates aggregates) { setValues(new double[] { aggregates.getAggregate(AggregateFunction) }); setTimestamps(new long[] { aggregates.getTimeStamp(AggregateFunction) }); }