Ejemplo n.º 1
0
        /// <summary>
        /// Filters the <see cref="DataFrameBuilder.Points"/> down to just those that are 
        /// visible if the graph has been zoomed in.
        /// This method only filters based on the value on the Base Axis 
        /// (i.e. the X-Axis for most curves).
        /// </summary>
        public virtual DataFrameBuilder FilterToZoomedRange(DataFrameBuilder dataFrameBuilder)
        {
            var graphPane = dataFrameBuilder.GraphPane;
            var pointList = dataFrameBuilder.Points;
            var baseAxis = dataFrameBuilder.CurveItem.BaseAxis(graphPane);
            if (baseAxis.Scale.IsAnyOrdinal)
            {
                // If the Scale is either Ordinal or Text, then don't
                // filter the PointList, because the point values
                // are derived from their position in the list.
                return dataFrameBuilder;
            }
            Func<PointPair, double> valueOfPointFunc = ValueOfPointFuncForAxis(dataFrameBuilder, baseAxis);
            if (null == valueOfPointFunc)
            {
                return dataFrameBuilder;
            }

            double min = baseAxis.Scale.Min;
            double max = baseAxis.Scale.Max;
            var pointPairList = new PointPairList();
            for (int i = 0; i < pointList.Count; i++)
            {
                var pointPair = pointList[i];
                double value = valueOfPointFunc(pointPair);
                if (value < min || value > max)
                {
                    continue;
                }
                pointPairList.Add(pointPair);
            }
            return dataFrameBuilder.SetPoints(pointPairList);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns a <see cref="DataColumn"/> containing the values on the <paramref name="axis"/>.
        /// If <see cref="Scale.IsText"/> is true for the <see cref="Axis.Scale"/>,
        /// then the DataColumn will contain string values.
        /// </summary>
        protected virtual DataColumn GetColumnForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
        {
            if (axis == null)
            {
                return(null);
            }
            if (axis.Scale.IsText)
            {
                var textValues = new string[dataFrameBuilder.Points.Count];
                Array.Copy(axis.Scale.TextLabels, 0, textValues, 0, Math.Min(textValues.Length, axis.Scale.TextLabels.Length));
                return(new DataColumn <string>(axis.Title.Text, textValues));
            }
            if (axis.Scale.IsOrdinal)
            {
                return(new DataColumn <int>(axis.Title.Text, Enumerable.Range(0, dataFrameBuilder.Points.Count)));
            }
            var values       = new double[dataFrameBuilder.Points.Count];
            var valueOfPoint = ValueOfPointFuncForAxis(dataFrameBuilder, axis);

            if (valueOfPoint != null)
            {
                for (int i = 0; i < dataFrameBuilder.Points.Count; i++)
                {
                    values[i] = valueOfPoint(dataFrameBuilder.Points[i]);
                }
            }
            if (values.Any(value => PointPairBase.Missing == value))
            {
                var valuesWithNull = values.Select(value => PointPairBase.Missing == value ? (double?)null : value);
                return(new DataColumn <double?>(axis.Title.Text, valuesWithNull));
            }
            return(new DataColumn <double>(axis.Title.Text, values));
        }
Ejemplo n.º 3
0
 protected override DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
     var points = dataFrameBuilder.Points;
     var apexes = new double?[points.Count];
     var starts = new double?[points.Count];
     var fwhms = new double?[points.Count];
     for (int i = 0; i < points.Count; i++)
     {
         var point = points[i];
         if (point.IsMissing)
         {
             continue;
         }
         starts[i] = point.Z;
         var middleErrorTag = point.Tag as MiddleErrorTag;
         if (middleErrorTag != null)
         {
             apexes[i] = middleErrorTag.Middle;
             fwhms[i] = middleErrorTag.Error;
         }
     }
     var dataFrame = new DataFrame(dataFrameBuilder.ValueAxis.Title.Text, dataFrameBuilder.Points.Count);
     dataFrame = dataFrame.AddColumn(new DataColumn<double?>("Apex", apexes));  // Not L10N
     dataFrame = dataFrame.AddColumn(new DataColumn<double?>("Start", starts)); // Not L10N
     dataFrame = dataFrame.AddColumn(GetColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis).SetTitle("End")); // Not L10N
     dataFrame = dataFrame.AddColumn(new DataColumn<double?>("FWHM", fwhms)); // Not L10N
     dataFrameBuilder = dataFrameBuilder.AddColumn(dataFrame);
     return dataFrameBuilder;
 }
Ejemplo n.º 4
0
        protected override DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
        {
            dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
            // Group the "High" and "Low" columns together, and put the title from the Axis on top of them
            var dataFrame = new DataFrame(dataFrameBuilder.ValueAxis.Title.Text, dataFrameBuilder.Points.Count);
            dataFrame = dataFrame.AddColumn(GetColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis).SetTitle("High")); // Not L10N
            dataFrame = dataFrame.AddColumn(GetZAxisColumn(dataFrameBuilder.Points).SetTitle("Low")); // Not L10N

            dataFrameBuilder = dataFrameBuilder.SetDataFrame(dataFrameBuilder.DataFrame.AddColumn(dataFrame));
            return dataFrameBuilder;
        }
Ejemplo n.º 5
0
 private DataFrameBuilder(DataFrameBuilder dataFrameBuilder)
 {
     GraphPane = dataFrameBuilder.GraphPane;
     CurveItem = dataFrameBuilder.CurveItem;
     Points    = dataFrameBuilder.Points;
     XAxis     = dataFrameBuilder.XAxis;
     YAxis     = dataFrameBuilder.YAxis;
     BaseAxis  = dataFrameBuilder.BaseAxis;
     ValueAxis = dataFrameBuilder.ValueAxis;
     DataFrame = dataFrameBuilder.DataFrame;
 }
Ejemplo n.º 6
0
 private DataFrameBuilder(DataFrameBuilder dataFrameBuilder)
 {
     GraphPane = dataFrameBuilder.GraphPane;
     CurveItem = dataFrameBuilder.CurveItem;
     Points = dataFrameBuilder.Points;
     XAxis = dataFrameBuilder.XAxis;
     YAxis = dataFrameBuilder.YAxis;
     BaseAxis = dataFrameBuilder.BaseAxis;
     ValueAxis = dataFrameBuilder.ValueAxis;
     DataFrame = dataFrameBuilder.DataFrame;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Adds columns to the <see cref="DataFrameBuilder.DataFrame"/> for all
 /// of the data in the <see cref="DataFrameBuilder.Points"/>.
 /// </summary>
 protected virtual DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis);
     if (HasZAxis(dataFrameBuilder))
     {
         dataFrameBuilder = dataFrameBuilder.AddColumn(GetZAxisColumn(dataFrameBuilder.Points));
     }
     dataFrameBuilder = dataFrameBuilder.AddColumn(GetTagColumn(dataFrameBuilder.Points));
     return(dataFrameBuilder);
 }
Ejemplo n.º 8
0
        public static GraphPaneData GetGraphPaneData(GraphPane graphPane)
        {
            var dataFrames           = new List <DataFrame>();
            var rowHeaderToListIndex = new Dictionary <IColumnGroup, int>();

            foreach (var curveItem in graphPane.CurveList)
            {
                var curveHandler = CurveDataHandlers.FindCurveHandler(curveItem);
                if (curveHandler == null)
                {
                    continue;
                }
                var curveData = new DataFrameBuilder(graphPane, curveItem);
                curveData = curveHandler.FilterToZoomedRange(curveData);
                curveData = curveHandler.CreateDataFrame(curveData);
                var dataFrame = curveData.DataFrame;
                if (dataFrame == null)
                {
                    continue;
                }
                var rowHeader = dataFrame.RowHeader;
                int existingIndex;
                if (rowHeader != null && rowHeaderToListIndex.TryGetValue(rowHeader, out existingIndex))
                {
                    DataFrame previousFrame = dataFrames[existingIndex];
                    DataFrame mergedFrame;
                    if (null == previousFrame.Title)
                    {
                        mergedFrame = previousFrame.AddColumn(dataFrame.RemoveRowHeader());
                    }
                    else
                    {
                        mergedFrame = new DataFrame(null, rowHeader)
                                      .AddColumn(previousFrame.RemoveRowHeader())
                                      .AddColumn(dataFrame.RemoveRowHeader());
                    }
                    dataFrames[existingIndex] = mergedFrame;
                }
                else
                {
                    if (rowHeader != null)
                    {
                        rowHeaderToListIndex.Add(rowHeader, dataFrames.Count);
                    }
                    dataFrames.Add(dataFrame);
                }
            }
            if (dataFrames.Count == 0)
            {
                return(null);
            }
            return(new GraphPaneData(graphPane.Title.Text, dataFrames));
        }
Ejemplo n.º 9
0
        protected override DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
        {
            dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
            // Group the "High" and "Low" columns together, and put the title from the Axis on top of them
            var dataFrame = new DataFrame(dataFrameBuilder.ValueAxis.Title.Text, dataFrameBuilder.Points.Count);

            dataFrame = dataFrame.AddColumn(GetColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis).SetTitle("High")); // Not L10N
            dataFrame = dataFrame.AddColumn(GetZAxisColumn(dataFrameBuilder.Points).SetTitle("Low"));                         // Not L10N

            dataFrameBuilder = dataFrameBuilder.SetDataFrame(dataFrameBuilder.DataFrame.AddColumn(dataFrame));
            return(dataFrameBuilder);
        }
Ejemplo n.º 10
0
 public static GraphPaneData GetGraphPaneData(GraphPane graphPane)
 {
     var dataFrames = new List<DataFrame>();
     var rowHeaderToListIndex = new Dictionary<IColumnGroup, int>();
     foreach (var curveItem in graphPane.CurveList)
     {
         var curveHandler = CurveDataHandlers.FindCurveHandler(curveItem);
         if (curveHandler == null)
         {
             continue;
         }
         var curveData = new DataFrameBuilder(graphPane, curveItem);
         curveData = curveHandler.FilterToZoomedRange(curveData);
         curveData = curveHandler.CreateDataFrame(curveData);
         var dataFrame = curveData.DataFrame;
         if (dataFrame == null)
         {
             continue;
         }
         var rowHeader = dataFrame.RowHeader;
         int existingIndex;
         if (rowHeader != null && rowHeaderToListIndex.TryGetValue(rowHeader, out existingIndex))
         {
             DataFrame previousFrame = dataFrames[existingIndex];
             DataFrame mergedFrame;
             if (null == previousFrame.Title)
             {
                 mergedFrame = previousFrame.AddColumn(dataFrame.RemoveRowHeader());
             }
             else
             {
                 mergedFrame = new DataFrame(null, rowHeader)
                     .AddColumn(previousFrame.RemoveRowHeader())
                     .AddColumn(dataFrame.RemoveRowHeader());
             }
             dataFrames[existingIndex] = mergedFrame;
         }
         else
         {
             if (rowHeader != null)
             {
                 rowHeaderToListIndex.Add(rowHeader, dataFrames.Count);
             }
             dataFrames.Add(dataFrame);
         }
     }
     if (dataFrames.Count == 0)
     {
         return null;
     }
     return new GraphPaneData(graphPane.Title.Text, dataFrames);
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Determines whether <paramref name="axis"/> is the X-Axis or the Y-Axis,
 /// and returns a function that returns either <see cref="PointPair.X"/> or
 /// <see cref="PointPair.Y"/>.
 /// Returns null if the axis is neither.
 /// </summary>
 protected virtual Func <PointPair, double> ValueOfPointFuncForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
 {
     if (axis is XAxis || axis is X2Axis || ReferenceEquals(axis, dataFrameBuilder.XAxis))
     {
         return(point => point.X);
     }
     if (axis is YAxis || axis is Y2Axis || ReferenceEquals(axis, dataFrameBuilder.YAxis))
     {
         return(point => point.Y);
     }
     Trace.TraceError("Could not determine type of axis {0}", axis); // Not L10N
     return(null);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Adds the data for the <paramref name="axis"/> to the <see cref="DataFrameBuilder.DataFrame"/>.
        /// If <paramref name="axis"/> is the <see cref="CurveItem.BaseAxis"/> then the column
        /// is added as the <see cref="DataFrame.RowHeader"/>, otherwise it is added
        /// to <see cref="DataFrame.ColumnGroups"/>.
        /// The X-Axis is usually the base axis, but for bar graphs that display horizontally,
        /// the Y-Axis is the base axis.
        /// </summary>
        protected virtual DataFrameBuilder AddColumnForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
        {
            var column = GetColumnForAxis(dataFrameBuilder, axis);

            if (column == null)
            {
                return(dataFrameBuilder);
            }
            var dataFrame = dataFrameBuilder.DataFrame;

            if (dataFrame.RowHeader == null && ReferenceEquals(axis, dataFrameBuilder.BaseAxis))
            {
                dataFrame = dataFrame.SetRowHeaders(column);
            }
            else
            {
                dataFrame = dataFrame.AddColumn(column);
            }
            return(dataFrameBuilder.SetDataFrame(dataFrame));
        }
Ejemplo n.º 13
0
        /// <summary>
        /// Filters the <see cref="DataFrameBuilder.Points"/> down to just those that are
        /// visible if the graph has been zoomed in.
        /// This method only filters based on the value on the Base Axis
        /// (i.e. the X-Axis for most curves).
        /// </summary>
        public virtual DataFrameBuilder FilterToZoomedRange(DataFrameBuilder dataFrameBuilder)
        {
            var graphPane = dataFrameBuilder.GraphPane;
            var pointList = dataFrameBuilder.Points;
            var baseAxis  = dataFrameBuilder.CurveItem.BaseAxis(graphPane);

            if (baseAxis.Scale.IsAnyOrdinal)
            {
                // If the Scale is either Ordinal or Text, then don't
                // filter the PointList, because the point values
                // are derived from their position in the list.
                return(dataFrameBuilder);
            }
            Func <PointPair, double> valueOfPointFunc = ValueOfPointFuncForAxis(dataFrameBuilder, baseAxis);

            if (null == valueOfPointFunc)
            {
                return(dataFrameBuilder);
            }

            double min           = baseAxis.Scale.Min;
            double max           = baseAxis.Scale.Max;
            var    pointPairList = new PointPairList();

            for (int i = 0; i < pointList.Count; i++)
            {
                var    pointPair = pointList[i];
                double value     = valueOfPointFunc(pointPair);
                if (value < min || value > max)
                {
                    continue;
                }
                pointPairList.Add(pointPair);
            }
            return(dataFrameBuilder.SetPoints(pointPairList));
        }
Ejemplo n.º 14
0
 public virtual DataFrameBuilder CreateDataFrame(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = dataFrameBuilder.SetDataFrame(new DataFrame(dataFrameBuilder.CurveItem.Label.Text, dataFrameBuilder.Points.Count));
     dataFrameBuilder = AddColumns(dataFrameBuilder);
     return(dataFrameBuilder);
 }
Ejemplo n.º 15
0
 protected override DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis);
     var points = dataFrameBuilder.Points;
     var errors = new double?[points.Count];
     for (int i = 0; i < points.Count; i++)
     {
         var point = points[i];
         if (point.IsMissing)
         {
             continue;
         }
         var errorTag = point.Tag as ErrorTag;
         if (errorTag != null)
         {
             errors[i] = errorTag.Error;
         }
     }
     dataFrameBuilder = dataFrameBuilder.AddColumn(new DataColumn<double?>("StdErr", errors)); // Not L10N
     return dataFrameBuilder;
 }
Ejemplo n.º 16
0
 public virtual DataFrameBuilder CreateDataFrame(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = dataFrameBuilder.SetDataFrame(new DataFrame(dataFrameBuilder.CurveItem.Label.Text, dataFrameBuilder.Points.Count));
     dataFrameBuilder = AddColumns(dataFrameBuilder);
     return dataFrameBuilder;
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Determines whether <paramref name="axis"/> is the X-Axis or the Y-Axis,
 /// and returns a function that returns either <see cref="PointPair.X"/> or 
 /// <see cref="PointPair.Y"/>.
 /// Returns null if the axis is neither.
 /// </summary>
 protected virtual Func<PointPair, double> ValueOfPointFuncForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
 {
     if (axis is XAxis || axis is X2Axis || ReferenceEquals(axis, dataFrameBuilder.XAxis))
     {
         return point => point.X;
     }
     if (axis is YAxis || axis is Y2Axis || ReferenceEquals(axis, dataFrameBuilder.YAxis))
     {
         return point => point.Y;
     }
     Trace.TraceError("Could not determine type of axis {0}", axis); // Not L10N
     return null;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Returns true if any of the values in <see cref="PointPair.Z"/> are nonzero.
 /// </summary>
 protected bool HasZAxis(DataFrameBuilder dataFrameBuilder)
 {
     return AsEnumerable(dataFrameBuilder.Points).Any(point => 0 != point.Z);
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Returns a <see cref="DataColumn"/> containing the values on the <paramref name="axis"/>.
 /// If <see cref="Scale.IsText"/> is true for the <see cref="Axis.Scale"/>,
 /// then the DataColumn will contain string values.
 /// </summary>
 protected virtual DataColumn GetColumnForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
 {
     if (axis == null)
     {
         return null;
     }
     if (axis.Scale.IsText)
     {
         var textValues = new string[dataFrameBuilder.Points.Count];
         Array.Copy(axis.Scale.TextLabels, 0, textValues, 0, Math.Min(textValues.Length, axis.Scale.TextLabels.Length));
         return new DataColumn<string>(axis.Title.Text, textValues);
     }
     if (axis.Scale.IsOrdinal)
     {
         return new DataColumn<int>(axis.Title.Text, Enumerable.Range(0, dataFrameBuilder.Points.Count));
     }
     var values = new double[dataFrameBuilder.Points.Count];
     var valueOfPoint = ValueOfPointFuncForAxis(dataFrameBuilder, axis);
     if (valueOfPoint != null)
     {
         for (int i = 0; i < dataFrameBuilder.Points.Count; i++)
         {
             values[i] = valueOfPoint(dataFrameBuilder.Points[i]);
         }
     }
     if (values.Any(value=>PointPairBase.Missing == value))
     {
         var valuesWithNull = values.Select(value => PointPairBase.Missing == value ? (double?) null : value);
         return new DataColumn<double?>(axis.Title.Text, valuesWithNull);
     }
     return new DataColumn<double>(axis.Title.Text, values);
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Adds columns to the <see cref="DataFrameBuilder.DataFrame"/> for all
 /// of the data in the <see cref="DataFrameBuilder.Points"/>.
 /// </summary>
 protected virtual DataFrameBuilder AddColumns(DataFrameBuilder dataFrameBuilder)
 {
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.BaseAxis);
     dataFrameBuilder = AddColumnForAxis(dataFrameBuilder, dataFrameBuilder.ValueAxis);
     if (HasZAxis(dataFrameBuilder))
     {
         dataFrameBuilder = dataFrameBuilder.AddColumn(GetZAxisColumn(dataFrameBuilder.Points));
     }
     dataFrameBuilder = dataFrameBuilder.AddColumn(GetTagColumn(dataFrameBuilder.Points));
     return dataFrameBuilder;
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Adds the data for the <paramref name="axis"/> to the <see cref="DataFrameBuilder.DataFrame"/>.
 /// If <paramref name="axis"/> is the <see cref="CurveItem.BaseAxis"/> then the column
 /// is added as the <see cref="DataFrame.RowHeader"/>, otherwise it is added
 /// to <see cref="DataFrame.ColumnGroups"/>.
 /// The X-Axis is usually the base axis, but for bar graphs that display horizontally, 
 /// the Y-Axis is the base axis.
 /// </summary>
 protected virtual DataFrameBuilder AddColumnForAxis(DataFrameBuilder dataFrameBuilder, Axis axis)
 {
     var column = GetColumnForAxis(dataFrameBuilder, axis);
     if (column == null)
     {
         return dataFrameBuilder;
     }
     var dataFrame = dataFrameBuilder.DataFrame;
     if (dataFrame.RowHeader == null && ReferenceEquals(axis, dataFrameBuilder.BaseAxis))
     {
         dataFrame = dataFrame.SetRowHeaders(column);
     }
     else
     {
         dataFrame = dataFrame.AddColumn(column);
     }
     return dataFrameBuilder.SetDataFrame(dataFrame);
 }
Ejemplo n.º 22
0
 /// <summary>
 /// Returns true if any of the values in <see cref="PointPair.Z"/> are nonzero.
 /// </summary>
 protected bool HasZAxis(DataFrameBuilder dataFrameBuilder)
 {
     return(AsEnumerable(dataFrameBuilder.Points).Any(point => 0 != point.Z));
 }