private async void OnPropertyChanged(HistogramMethod method, string target, string observation) { hmethod = method; var data = Data; var io = await Task.Run(() => GetInputOutput(data, observation, target)); if (io != null) { await Update(io.Item1.Zip(io.Item2, (a, b) => Tuple.Create(a, b)).ToArray(), BinCount, BinSize, method) .ContinueWith(async(xx) => await this.Dispatcher.InvokeAsync(async() => { var points = await xx; if (points != null) { this.SetValue(PointsProperty, points); } }, System.Windows.Threading.DispatcherPriority.Background, default(System.Threading.CancellationToken))); //subject.OnNext(data.ToList()); } }
private static Dictionary <Tuple <double, double>, double> GetHistogram(IEnumerable <Tuple <double, double> > data, HistogramMethod method, int bincount, double binsize) { switch (method) { case (HistogramMethod.Count): return(UtilityMath.Histogram.ToHistogramByBinCount((data), bincount).ToDictionary(_ => _.Key, _ => _.Value)); case (HistogramMethod.Size): return(UtilityMath.Histogram.ToHistogram((data), binsize)); default: throw new ArgumentOutOfRangeException(); } }
private static async Task <dynamic> Update(IEnumerable <Tuple <double, double> > data, double bincount, double binsize, HistogramMethod method) { if (data != null) { if (data.Count() > 0) { return(await Task.Run(() => { var his = GetHistogram(data, method, Convert.ToInt16(bincount), (double)binsize); return his.SelectMany(_ => new[] { Tuple.Create(_.Key.Item1, _.Value), Tuple.Create(_.Key.Item2, _.Value) }).ToList(); })); } } return(null); }