public static ITimeSeries MakeCumulative(ITimeSeries ts) { HydroTimeSeries ts2 = new HydroTimeSeries(ts.Start, ts.End); double sum = 0.0; PointPair curPt; for ( int i = 0; i < ts.Count; ++i ) { curPt = ts[i]; if ( curPt.IsMissing ) { ts2.AddUnknownValue(XDate.XLDateToDateTime(curPt.X)); } else { if (curPt.Y > 0) { sum += curPt.Y; } ts2.AddObservation(XDate.XLDateToDateTime(curPt.X), sum); } } return ts2; }
/// <summary> /// Splits a regular time-series with data gaps into two or more sub-series /// The maximum allowed gap size is determined by GetDefaultTimeStep() /// Use this function for stage and discharge /// </summary> /// <param name="ts">The time series</param> /// <returns>the list of splitted regular time-series</returns> public static List<HydroTimeSeries> SplitTimeSeries(ITimeSeries ts) { List<HydroTimeSeries> hsList = new List<HydroTimeSeries>(); List<int> breakIx = GetDataBreaks(ts); if (breakIx.Count > 0) { //for the final segment if (breakIx[breakIx.Count - 1] != ts.Count - 1) { breakIx.Add(ts.Count - 1); } int begIndex = 0; for (int i = 0; i < breakIx.Count; i++) { //all data before each break int endIndex = breakIx[i]; DateTime begDate = DateTime.FromOADate(ts[begIndex].X); DateTime endDate = DateTime.FromOADate(ts[endIndex].X); HydroTimeSeries newTs = new HydroTimeSeries(begDate, endDate); for (int j = begIndex; j <= endIndex; j++) { newTs.AddObservation(DateTime.FromOADate(ts[j].X), ts[j].Y); } begIndex = endIndex + 1; if (newTs.Count > 0) { hsList.Add(newTs); } } } else { hsList.Add((HydroTimeSeries)ts); } return hsList; }
public ITimeSeries ShowUnknown(double valueToDisplay) { HydroTimeSeries ts2 = new HydroTimeSeries(_data.Start, _data.End); for (int i=0; i < Count; ++i) { PointPair p = this[i]; if (p.IsMissing) { ts2.AddObservation(XDate.XLDateToDateTime(p.X),valueToDisplay); } } return ts2; }