/// <summary> /// /// </summary> /// <param name="field"></param> /// <returns>Each Column is a different. Each Row is a different index point</returns> public ConstructGenGen<int, double> GetCombined(DataAroundEventField field) { if (m_cache.ContainsKey(field)) return m_cache[field]; if (DataInterEvents == null || DataInterEvents.Length == 0) return null; var allEvents = DataInterEvents.Where(x => x.HasProcessedData).ToArray(); var allindexes = allEvents.Select(x => x[field].Select(p => p.Index).ToArray()).SelectMany(x => x).OrderBy(x => x).ToArray(); var minIndex = allindexes[0]; var maxIndex = allindexes[allindexes.Length - 1]; var combined = new ConstructGenGen<int, double>(allEvents.Select(x => x.EventSpan.ToString()).ToArray()); for (int i = minIndex; i <= maxIndex; ++i) combined.SetValues(i, ExtensionMethods.CreateArrayRep(double.NaN, combined.ArrayLength)); for (int eventIndex = 0; eventIndex < allEvents.Length; ++eventIndex) { foreach (var point in allEvents[eventIndex][field]) combined.SetValue(point.Index, eventIndex, point.Value); } m_cache[field] = combined; //m_combined.DisplayInGrid("title", "span"); return combined; }
public void ApplyData(DataAroundEvent[] data_, int numberAroundEvent_, DataAroundEventField field_) { var con = Helper.TransformToCon(data_, numberAroundEvent_, field_); if (con == null) return; for (int i = 0; i < con.Dates.Count; i++) { ApplyData(con.Dates[i].ToString("dd-MM-yy") + " " + data_[i].EventCode /*+ ": \n" + data_[i].Instrument*/, con.ColumnHeadings, con.GetValues(con.Dates[i])); } }
public static string DisplayformatForDataType(DataAroundEventField field_) { switch (field_) { case DataAroundEventField.Filled_Diff: case DataAroundEventField.Filled_Level: return "##0.0##"; case DataAroundEventField.Filled_Pct: return "##0.0%"; } return null; }
public static Tuple<ConstructGen<double>, int, DateTime> TransformToCompoChartDataAndShift(DataAroundEvent[] data_, int numberAroundEvents_, DataAroundEventField field_) { ConstructGen<double> ret = new ConstructGen<double>(numberAroundEvents_ + 1); ret.ColumnHeadings = new string[ret.ArrayLength]; //ret.ColumnHeadings[0] = DateTime.Today.ToString("dd-MMM-yyyy"); for (int i = 0; i <= numberAroundEvents_; ++i) { ret.ColumnHeadings[i] = i.ToString(); } var headings = new List<string>(ret.ColumnHeadings); int dayShift=0; DateTime closestEvent=DateTime.MinValue; if (data_ != null) { var eventdates = data_.Select(d => d.EventDate).ToArray(); // first find out any events falls within next 15 days var maxAllowEventDate = DateTime.Today.AddDays(numberAroundEvents_); var includeEvents = eventdates .Where(newEvent => newEvent >= DateTime.Today && newEvent <= maxAllowEventDate); if (includeEvents.Any()) { closestEvent = includeEvents.OrderBy(e => e).First(); dayShift = (int)(closestEvent -DateTime.Today).TotalDays; int firstDataIndex = numberAroundEvents_ - dayShift; foreach (var eve in data_.OrderBy(x => x.EventDate)) { // initialise to NaN ret.SetValues(eve.EventDate, Utils.GetArrayOfValue<double>(double.NaN, ret.ArrayLength)); var subData = eve[field_]; if (subData != null) for (int i = 0; i <= numberAroundEvents_; i++) { if (firstDataIndex + i > subData.Data.Length -1) continue; if (subData.Data[firstDataIndex+i] == null) continue; ret.SetValue(eve.EventDate, i, subData.Data[firstDataIndex+i].Value); } } } } return new Tuple<ConstructGen<double>, int, DateTime>(ret, dayShift, closestEvent); }
public static ConstructGen<double> TransformToCon(DataAroundEvent[] data_, int numberAroundEvents_, DataAroundEventField field_) { ConstructGen<double> ret = new ConstructGen<double>((numberAroundEvents_ * 2) + 1); ret.ColumnHeadings = new string[ret.ArrayLength]; ret.ColumnHeadings[numberAroundEvents_] = "0"; for (int i = 1; i <= numberAroundEvents_; ++i) { ret.ColumnHeadings[numberAroundEvents_ - i] = (-i).ToString(); ret.ColumnHeadings[numberAroundEvents_ + i] = i.ToString(); } var headings = new List<string>(ret.ColumnHeadings); if(data_!=null) foreach (var eve in data_.OrderBy(x => x.EventDate)) { // initialise to NaN ret.SetValues(eve.EventDate, Utils.GetArrayOfValue<double>(double.NaN, ret.ArrayLength)); var subData = eve[field_]; if(subData!=null) foreach (var point in subData.Data) { if (point == null) continue; var index = headings.IndexOf((point.Index - data_.First().Offset).ToString()); ret.SetValue(eve.EventDate, index, point.Value); } } return ret; }
public IList<IndexedPoint> this[DataAroundEventField field_] { get { if (m_processedData == null) return null; switch (field_) { case DataAroundEventField.Filled_Diff: return m_processedData.Select(x => new IndexedPoint() {Index = x.Index, Value = x.Value[0]}).ToList(); case DataAroundEventField.Filled_Level: return m_processedData.Select(x => new IndexedPoint() {Index = x.Index, Value = x.Value[1]}).ToList(); case DataAroundEventField.Filled_Pct: return m_processedData.Select(x => new IndexedPoint() { Index = x.Index, Value = x.Value[2] }).ToList(); case DataAroundEventField.Filled_Daily_Diff: return m_processedData.Select(x => new IndexedPoint() {Index = x.Index, Value = x.Value[3]}).ToList(); default: return m_processedData.Select(x => new IndexedPoint() { Index = x.Index, Value = x.Value[0] }).ToList(); } } }
public void SetupForDataType(DataAroundEventField field_) { Chart.SetYAxisFormat(Helper.DisplayformatForDataType(field_)); boundInfraGrid1.ApplyDisplayDoubleFormat(Helper.DisplayformatForDataType(field_)); boundInfraGrid1.AutoSizeGridColumns(); }
public void ApplyStats(DataAroundEvent[] data_, int numberAroundEvent_, DataAroundEventField field_) { var con = Helper.TransformToCon(data_, numberAroundEvent_, field_); if (con == null) return; var avgs = new double[con.ArrayLength]; var zscore = new double[con.ArrayLength]; for (int i = 0; i < avgs.Length; ++i) { var validNumberSeries = con.GetColumnValues(i).Where(x => double.IsNaN(x) == false); if (!validNumberSeries.Any()) continue; avgs[i] = validNumberSeries.ToArray().Average(); var sd = Statistics.Stdev(validNumberSeries.ToArray()); zscore[i] = avgs[i]/sd; } ApplyData("Average", con.ColumnHeadings, avgs); ApplyData("Avg/S.d.", con.ColumnHeadings, zscore); }