public BondStructureOTR(Focus focus_, Tuple<int,BondMarket,double>[] points_)
      : base(points_.GetDescription())
    {
      Points = points_;
      m_focus = focus_;

      foreach (BondMarket mkt in points_.Select(x => x.Item2).Distinct())
      {
        CountryBondSource.GetInstance(mkt).OTRCache.ItemAdded += handleCachedChanged;
        CountryBondSource.GetInstance(mkt).OTRCache.ItemRemoved += handleCachedChanged;
      }

      rebuild();
    }
    public BondStructureCMT(Focus focus_, Tuple<int,BondMarket,double>[] points_)
      : base(points_.GetDescription())
    {
      Points = points_;
      Focus = focus_;

      m_bits =
        Points.Select(x => x.Item2)
          .Distinct()
          .Select(x => CountryBondSource.GetInstance(x).GetSmoothCurveGroupForFocus(Focus).LiveCMT)
          .ToDictionary(x => x.Market, x => x);
      subscribeToFit();
      setPriorValue();

      RecalculateLive();
    }