コード例 #1
0
    /// <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;
    }
コード例 #2
0
    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]));       
        }
    }
コード例 #3
0
ファイル: Helper.cs プロジェクト: heimanhon/researchwork
    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;
    }
コード例 #4
0
ファイル: Helper.cs プロジェクト: heimanhon/researchwork
    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);
    }
コード例 #5
0
ファイル: Helper.cs プロジェクト: heimanhon/researchwork
    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;
    }
コード例 #6
0
    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();
        }
      }

    }
コード例 #7
0
 public void SetupForDataType(DataAroundEventField field_)
 {
   Chart.SetYAxisFormat(Helper.DisplayformatForDataType(field_));
   boundInfraGrid1.ApplyDisplayDoubleFormat(Helper.DisplayformatForDataType(field_));
   boundInfraGrid1.AutoSizeGridColumns();
 }
コード例 #8
0
    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);       
    }