public Shewhart()
        {
            InitializeComponent();

            System.Windows.Forms.Application.EnableVisualStyles();

            // Create a Windows Forms checkbox control and assign
            // it as the WindowsFormsHost element's child.

            var measSys = new MeasurementSystem();
            measSys.SetPreambula(SiPreambuledUnitType.Hz, SiPreambula.Giga);

            _graphPlotControl = new GraphPlotControl(CoordinateSystemType.Users);

            var measurement = new ShewharMeasurement
            {
                Foundry = 0,
                Process = 0,
                TestName = "CMIM",
                TrendManager = new TrendManager(TrendsFactory.GetAllTrends())
            };

            var shewhartChart = new ShewhartControlChart(measurement.TrendManager);

            shewhartChart.Abscisses[0].Title = "Number";
            shewhartChart.Ordinates[0].Title = "Value";

            _graphPlotControl.Plot.CoordinateSystem = shewhartChart;

            _graphPlotControl.Plot.Legend.Visible = false;
            _graphPlotControl.BorderStyle = BorderStyle.None;
            _graphPlotControl.MeasurementSystem = measSys;
            _graphPlotControl.Plot.CoordinateSystem.SweepValueQuantityType = PhysicalQuantityType.Frequencies;
            _graphPlotControl.Plot.Data = MakeData(measurement);

              //  _graphPlotControl.Tag = megaMeasurement;

            graphicsHost.Child = _graphPlotControl;

            // Cause the OnFlowDirectionChange delegate to be called.
            graphicsHost.FlowDirection = System.Windows.FlowDirection.LeftToRight;

            // Cause the OnClipChange delegate to be called.
            graphicsHost.Clip = new RectangleGeometry();
        }
        private Traces MakeData(ShewharMeasurement measurement)
        {
            var symbol = new MarkerSymbol
                             {
                                 Type = MarkerSymbolType.Circle,
                                 Visible = true
                             };

            var function = new TraceReal
                               {
                                   Pen = new System.Drawing.Pen(System.Drawing.Color.Green) { Width = 1 },
                                   Name = "Shewhart",
                                   IsGistogram = false,
                                   IsVisibleInMarker = true,
                                   Visible = true,
                                   GraphIndex = 0,
                                   Approximator = null,
                                   ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                   SymbolInterval = 1,
                                   SymbolsAutoInterval = false,
                                   Symbol = symbol
                               };

            var noneSymbol = new MarkerSymbol
                                 {
                                     Type = MarkerSymbolType.None,
                                     Visible = false
                                 };

            var meanFunction = new TraceReal
                                   {
                                       Pen = new System.Drawing.Pen(System.Drawing.Color.Blue),
                                       Name = "Mean",
                                       IsGistogram = false,
                                       IsVisibleInMarker = true,
                                       Visible = true,
                                       GraphIndex = 0,
                                       Approximator = null,
                                       ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                       Symbol = noneSymbol
                                   };

            var uclSymbol = new MarkerSymbol
                                {
                                    Type = MarkerSymbolType.TriangleUp,
                                    Visible = true
                                };

            var uclFunction = new TraceReal
                                  {
                                      Pen = new System.Drawing.Pen(System.Drawing.Color.Red),
                                      Name = "UCL",
                                      IsGistogram = false,
                                      IsVisibleInMarker = true,
                                      Visible = true,
                                      GraphIndex = 0,
                                      Approximator = null,
                                      ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                      Symbol = noneSymbol
                                  };

            var cUpFunction = new TraceReal
                                  {
                                      Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 192, 192)) { DashPattern = new[] { 4.0F, 8.0F } },
                                      Name = "C above mean",
                                      Visible = true,
                                      GraphIndex = 0,
                                      Approximator = null,
                                      ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                      Symbol = noneSymbol
                                  };

            var bUpFunction = new TraceReal
                                  {
                                      Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 128, 128)) { DashPattern = new[] { 4.0F, 8.0F } },
                                      Name = "B above mean",
                                      Visible = true,
                                      GraphIndex = 0,
                                      Approximator = null,
                                      ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                      Symbol = noneSymbol
                                  };

            var lclSymbol = new MarkerSymbol
                                {
                                    Type = MarkerSymbolType.TriangleDown,
                                    Visible = true
                                };

            var lclFunction = new TraceReal
                                  {
                                      Pen = new System.Drawing.Pen(System.Drawing.Color.Red),
                                      Name = "LCL",
                                      IsGistogram = false,
                                      IsVisibleInMarker = true,
                                      Visible = true,
                                      GraphIndex = 0,
                                      Approximator = null,
                                      ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                      Symbol = noneSymbol
                                  };

            var cDownFunction = new TraceReal
                                    {
                                        Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 192, 192)) { DashPattern = new[] { 4.0F, 8.0F } },
                                        Name = "C below mean",
                                        Visible = true,
                                        GraphIndex = 0,
                                        Approximator = null,
                                        ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                        Symbol = noneSymbol
                                    };

            var bDownFunction = new TraceReal
                                    {
                                        Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 128, 128)) { DashPattern = new[] { 4.0F, 8.0F } },
                                        Name = "B below mean",
                                        Visible = true,
                                        GraphIndex = 0,
                                        Approximator = null,
                                        ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                        Symbol = noneSymbol
                                    };

            var minSpecFunction = new TraceReal
                                      {
                                          Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(64, 64, 64)),
                                          Name = "Min spec",
                                          Visible = true,
                                          GraphIndex = 0,
                                          Approximator = null,
                                          ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                          Symbol = noneSymbol
                                      };

            var maxSpecFunction = new TraceReal
                                      {
                                          Pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(64, 64, 64)),
                                          Name = "Max spec",
                                          Visible = true,
                                          GraphIndex = 0,
                                          Approximator = null,
                                          ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                          Symbol = noneSymbol
                                      };

            var nominalSpecFunction = new TraceReal
                                          {
                                              Pen = new System.Drawing.Pen(System.Drawing.Color.Black),
                                              Name = "Nominal spec",
                                              Visible = true,
                                              GraphIndex = 0,
                                              Approximator = null,
                                              ArgumentQuantityType = PhysicalQuantityType.Scalar,
                                              Symbol = noneSymbol
                                          };

            var functionDataSector = new GraphDataSectorReal();
            var meanDataSector = new GraphDataSectorReal();
            var uclDataSector = new GraphDataSectorReal();
            var cUpDataSector = new GraphDataSectorReal();
            var bUpDataSector = new GraphDataSectorReal();
            var lclDataSector = new GraphDataSectorReal();
            var cDownDataSector = new GraphDataSectorReal();
            var bDownDataSector = new GraphDataSectorReal();
            var minSpecDataSector = new GraphDataSectorReal();
            var maxSpecDataSector = new GraphDataSectorReal();
            var nominalSpecDataSector = new GraphDataSectorReal();

            var values = new List<double> {378, 376, 375, 370, 371, 388, 389, 390, 388, 400, 391, 392, 386, 382, 378, 374, 370, 380, 381, 387};
            var meanvalue = 382.3;
            var sigma = 8.25;
            var uclValue = meanvalue + 3*sigma;
            var bUpValue = meanvalue + 2*sigma;
            var cUpValue = meanvalue + sigma;
            var lclValue = meanvalue - 3*sigma;
            var bDownValue = meanvalue - 2*sigma;
            var cDownValue = meanvalue - sigma;

            double? usersMinSpec = 340;
            double? usersMaxSpec = 420;
            double? usersNominalSpec = 380;

            for (int i = 0; i < values.Count; i++)
            {
                functionDataSector.Add(new PointValueReal(i, values[i]));
                meanDataSector.Add(new PointValueReal(i, meanvalue));
                uclDataSector.Add(new PointValueReal(i, uclValue));
                bUpDataSector.Add(new PointValueReal(i, bUpValue));
                cUpDataSector.Add(new PointValueReal(i, cUpValue));
                lclDataSector.Add(new PointValueReal(i, lclValue));
                bDownDataSector.Add(new PointValueReal(i, bDownValue));
                cDownDataSector.Add(new PointValueReal(i, cDownValue));

                if (usersMinSpec.HasValue)
                    minSpecDataSector.Add(new PointValueReal(i, usersMinSpec.Value));

                if (usersMaxSpec.HasValue)
                    maxSpecDataSector.Add(new PointValueReal(i, usersMaxSpec.Value));

                if (usersNominalSpec.HasValue)
                    nominalSpecDataSector.Add(new PointValueReal(i, usersNominalSpec.Value));
            }

            function.Add(functionDataSector);
            meanFunction.Add(meanDataSector);
            uclFunction.Add(uclDataSector);
            bUpFunction.Add(bUpDataSector);
            cUpFunction.Add(cUpDataSector);
            lclFunction.Add(lclDataSector);
            bDownFunction.Add(bDownDataSector);
            cDownFunction.Add(cDownDataSector);
            minSpecFunction.Add(minSpecDataSector);
            maxSpecFunction.Add(maxSpecDataSector);
            nominalSpecFunction.Add(nominalSpecDataSector);

            var result = new Traces();

            result.RealFunctions.Add(uclFunction);
            result.RealFunctions.Add(bUpFunction);
            result.RealFunctions.Add(cUpFunction);
            result.RealFunctions.Add(meanFunction);
            result.RealFunctions.Add(cDownFunction);
            result.RealFunctions.Add(bDownFunction);
            result.RealFunctions.Add(lclFunction);
            result.RealFunctions.Add(maxSpecFunction);
            result.RealFunctions.Add(nominalSpecFunction);
            result.RealFunctions.Add(minSpecFunction);
            result.RealFunctions.Add(function);

            var points = new List<PointValueReal>();
            foreach (var sector in function)
            {
                foreach (var pointValueBase in sector)
                {
                    points.Add((PointValueReal) pointValueBase);
                }
            }

            measurement.TrendManager.SetData(points.ToArray(), sigma, meanvalue);

            var Cp = (usersMaxSpec.Value - usersMinSpec.Value)/(6*sigma);

            var Cpk = Math.Min((usersMaxSpec.Value - meanvalue)/(3*sigma),
                                   (meanvalue - usersMinSpec.Value)/(3*sigma));

            _graphPlotControl.GraphTitle += "\nCp = " + Cp;
            _graphPlotControl.GraphTitle += "\nCpk = " + Cpk;

            return result;
        }