void 第二步数据处理(object LockWatingThread)
        {
            int count = SystemParam.L * 4;

            /************************************************************************/
            /* y50                                                                  */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算明场像素点均值");
            Calc2.y50 = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.LightTempFile);
                ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        Calc2.y50[m, n] += pic[m, n];
                    }
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1)) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.y50[m, n] = Calc2.y50[m, n] / SystemParam.L;
                }
            }
            /************************************************************************/
            /* y50_dark                                                             */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算暗场像素点均值");
            waitProc.SetProcessBar(0);
            Calc2.y50_dark = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.DarkTempFile);
                ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        Calc2.y50_dark[m, n] += pic[m, n];
                    }
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.y50_dark[m, n] = Calc2.y50_dark[m, n] / SystemParam.L;
                }
            }
            /************************************************************************/
            /* miu_y50                                                              */
            /************************************************************************/
            Calc2.miu_y50 = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.miu_y50 += Calc2.y50[m, n];
                }
            }
            Calc2.miu_y50 = Calc2.miu_y50 / m_Buffers.Height / m_Buffers.Width;

            /************************************************************************/
            /* miu_y50_dark                                                         */
            /************************************************************************/
            Calc2.miu_y50_dark = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.miu_y50_dark += Calc2.y50_dark[m, n];
                }
            }
            Calc2.miu_y50_dark = Calc2.miu_y50_dark / m_Buffers.Height / m_Buffers.Width;

            /************************************************************************/
            /* delta_y50                                                            */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算明场像素点方差");
            waitProc.SetProcessBar(0);
            Calc2.delta_y50 = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.LightTempFile);
                ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        Calc2.delta_y50[m, n] += (pic[m, n] - Calc2.y50[m, n]) * (pic[m, n] - Calc2.y50[m, n]);
                    }
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L * 2) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.delta_y50[m, n] = Calc2.delta_y50[m, n] / (SystemParam.L - 1);
                }
            }
            /************************************************************************/
            /* delta_y50_dark                                                       */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算暗场像素点方差");
            waitProc.SetProcessBar(0);
            Calc2.delta_y50_dark = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.DarkTempFile);
                ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        Calc2.delta_y50_dark[m, n] += (pic[m, n] - Calc2.y50_dark[m, n]) * (pic[m, n] - Calc2.y50_dark[m, n]);
                    }
                }
                if (waitProc.HasBeenCancelled())
                {
                    this.Invoke((EventHandler)(delegate
                    {
                        textBox1.AppendText("用户终止自动测试\r\n");
                        return;
                    }));
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L * 3) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.delta_y50_dark[m, n] = Calc2.delta_y50_dark[m, n] / (SystemParam.L - 1);
                }
            }

            /************************************************************************/
            /* delta_y50_stack                                                             */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算PRUN、DSUN、亮点、暗点");
            waitProc.SetProcessBar(0);
            waitProc.SetProcessBarRange(0, 7);
            Calc2.delta_y50_stack = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.delta_y50_stack += Calc2.delta_y50[m, n];
                }
            }
            Calc2.delta_y50_stack = Calc2.delta_y50_stack / m_Buffers.Height / m_Buffers.Width;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* delta_y50_dark_stack                                                         */
            /************************************************************************/
            Calc2.delta_y50_dark_stack = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.delta_y50_dark_stack += Calc2.delta_y50_dark[m, n];
                }
            }
            Calc2.delta_y50_dark_stack = Calc2.delta_y50_dark_stack / m_Buffers.Height / m_Buffers.Width;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* S2_y50                                                               */
            /************************************************************************/
            Calc2.S2_y50 = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.S2_y50 += (Calc2.y50[m, n] - Calc2.miu_y50) * (Calc2.y50[m, n] - Calc2.miu_y50);
                }
            }
            Calc2.S2_y50 = Calc2.S2_y50 / (m_Buffers.Height * m_Buffers.Width - 1);
            Calc2.S2_y50 = Calc2.S2_y50 - Calc2.delta_y50_stack / SystemParam.L;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* S2_y50_dark                                                          */
            /************************************************************************/
            Calc2.S2_y50_dark = 0;
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    Calc2.S2_y50_dark += (Calc2.y50_dark[m, n] - Calc2.miu_y50_dark) * (Calc2.y50_dark[m, n] - Calc2.miu_y50_dark);
                }
            }
            Calc2.S2_y50_dark = Calc2.S2_y50_dark / (m_Buffers.Height * m_Buffers.Width - 1);
            Calc2.S2_y50_dark = Calc2.S2_y50_dark - Calc2.delta_y50_dark_stack / SystemParam.L;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* DSNU1288 ,PRNU1288                                                   */
            /************************************************************************/
            Calc2.DSNU1288 = Math.Sqrt(Calc2.S2_y50_dark) / Calc1.OverAllGain_K;

            Calc2.PRNU1288 = Math.Sqrt(Math.Abs(Calc2.S2_y50 - Calc2.S2_y50_dark)) / (Calc2.miu_y50 - Calc2.miu_y50_dark);
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[14].SubItems[1].Text = "完成";
                listView1.Items[15].SubItems[1].Text = "完成";

                listView1.Items[14].SubItems[2].Text = Calc2.DSNU1288.ToString("F2");
                listView1.Items[15].SubItems[2].Text = Calc2.PRNU1288.ToString("F4");
                textBox1.AppendText("DSNU1288 ,PRNU1288计算完成\r\n");
            }));
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* 暗点查找                                                           */
            /************************************************************************/
            double dP = Calc2.miu_y50 * SystemParam.DarkPointPer / 100;

            Calc2.DarkPoints = new List <PixelInfo>();
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    if (Calc2.y50[m, n] < dP)
                    {
                        PixelInfo p = new PixelInfo();
                        p.row = m;
                        p.col = n;
                        p.y   = Calc2.y50[m, n];
                        Calc2.DarkPoints.Add(p);
                    }
                }
            }
            waitProc.SetProcessBarPerformStep();
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[16].SubItems[1].Text = "完成";
                textBox1.AppendText("暗点查找完成\r\n");
            }));
            /************************************************************************/
            /* 明点查找                                                           */
            /************************************************************************/
            double lP = Calc2.miu_y50_dark * (100 + SystemParam.LightPointPer) / 100;

            Calc2.LightPoints = new List <PixelInfo>();
            for (int m = 0; m < m_Buffers.Height; m++)
            {
                for (int n = 0; n < m_Buffers.Width; n++)
                {
                    if (Calc2.y50_dark[m, n] > lP)
                    {
                        PixelInfo p = new PixelInfo();
                        p.row = m;
                        p.col = n;
                        p.y   = Calc2.y50_dark[m, n];
                        Calc2.LightPoints.Add(p);
                    }
                }
            }
            waitProc.SetProcessBarPerformStep();
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[17].SubItems[1].Text = "完成";
                textBox1.AppendText("亮点查找完成\r\n");
            }));
        }
        void RGB_第二步数据处理(object LockWatingThread)
        {
            int count = SystemParam.L * 4;

            ushort[] yR;
            ushort[] yG;
            ushort[] yB;
            byte[]   p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, 0, Calc2.LightTempFile);
            wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth,
                                   SystemParam.cmosInfo.RGB1, SystemParam.cmosInfo.RGB2, SystemParam.cmosInfo.RGB3, SystemParam.cmosInfo.RGB4,
                                   out yR, out yG, out yB);
            Calc2.R_y50            = new double[yR.Length];
            Calc2.G_y50            = new double[yG.Length];
            Calc2.B_y50            = new double[yB.Length];
            Calc2.R_y50_dark       = new double[yR.Length];
            Calc2.G_y50_dark       = new double[yG.Length];
            Calc2.B_y50_dark       = new double[yB.Length];
            Calc2.R_delta_y50      = new double[yR.Length];
            Calc2.G_delta_y50      = new double[yG.Length];
            Calc2.B_delta_y50      = new double[yB.Length];
            Calc2.R_delta_y50_dark = new double[yR.Length];
            Calc2.G_delta_y50_dark = new double[yG.Length];
            Calc2.B_delta_y50_dark = new double[yB.Length];
            /************************************************************************/
            /* y50                                                                  */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算明场像素点均值");
            for (int i = 0; i < SystemParam.L; i++)
            {
                p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.LightTempFile);
                wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth,
                                       SystemParam.cmosInfo.RGB1, SystemParam.cmosInfo.RGB2, SystemParam.cmosInfo.RGB3, SystemParam.cmosInfo.RGB4,
                                       out yR, out yG, out yB);
                for (int j = 0; j < yR.Length; j++)
                {
                    Calc2.R_y50[j] += yR[j];
                }
                for (int j = 0; j < yG.Length; j++)
                {
                    Calc2.G_y50[j] += yG[j];
                }
                for (int j = 0; j < yB.Length; j++)
                {
                    Calc2.B_y50[j] += yB[j];
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1)) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                Calc2.R_y50[j] = Calc2.R_y50[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                Calc2.G_y50[j] = Calc2.G_y50[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                Calc2.B_y50[j] = Calc2.B_y50[j] / SystemParam.L;
            }
            /************************************************************************/
            /* y50_dark                                                             */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算暗场像素点均值");
            waitProc.SetProcessBar(0);
            Calc2.y50_dark = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.DarkTempFile);
                wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth,
                                       SystemParam.cmosInfo.RGB1, SystemParam.cmosInfo.RGB2, SystemParam.cmosInfo.RGB3, SystemParam.cmosInfo.RGB4,
                                       out yR, out yG, out yB);
                for (int j = 0; j < yR.Length; j++)
                {
                    Calc2.R_y50_dark[j] += yR[j];
                }
                for (int j = 0; j < yG.Length; j++)
                {
                    Calc2.G_y50_dark[j] += yG[j];
                }
                for (int j = 0; j < yB.Length; j++)
                {
                    Calc2.B_y50_dark[j] += yB[j];
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int j = 0; j < Calc2.R_y50_dark.Length; j++)
            {
                Calc2.R_y50_dark[j] = Calc2.R_y50_dark[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.G_y50_dark.Length; j++)
            {
                Calc2.G_y50_dark[j] = Calc2.G_y50_dark[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.B_y50_dark.Length; j++)
            {
                Calc2.B_y50_dark[j] = Calc2.B_y50_dark[j] / SystemParam.L;
            }
            /************************************************************************/
            /* miu_y50                                                              */
            /************************************************************************/
            Calc2.R_miu_y50 = 0;
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                Calc2.R_miu_y50 += Calc2.R_y50[j];
            }
            Calc2.R_miu_y50 = Calc2.R_miu_y50 / Calc2.R_y50.Length;

            Calc2.G_miu_y50 = 0;
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                Calc2.G_miu_y50 += Calc2.G_y50[j];
            }
            Calc2.G_miu_y50 = Calc2.G_miu_y50 / Calc2.G_y50.Length;

            Calc2.B_miu_y50 = 0;
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                Calc2.B_miu_y50 += Calc2.B_y50[j];
            }
            Calc2.B_miu_y50 = Calc2.B_miu_y50 / Calc2.B_y50.Length;
            /************************************************************************/
            /* miu_y50_dark                                                         */
            /************************************************************************/
            Calc2.R_miu_y50_dark = 0;
            for (int j = 0; j < Calc2.R_y50_dark.Length; j++)
            {
                Calc2.R_miu_y50_dark += Calc2.R_y50_dark[j];
            }
            Calc2.R_miu_y50_dark = Calc2.R_miu_y50_dark / Calc2.R_y50_dark.Length;

            Calc2.G_miu_y50_dark = 0;
            for (int j = 0; j < Calc2.G_y50_dark.Length; j++)
            {
                Calc2.G_miu_y50_dark += Calc2.G_y50_dark[j];
            }
            Calc2.G_miu_y50_dark = Calc2.G_miu_y50_dark / Calc2.G_y50_dark.Length;

            Calc2.B_miu_y50_dark = 0;
            for (int j = 0; j < Calc2.B_y50_dark.Length; j++)
            {
                Calc2.B_miu_y50_dark += Calc2.B_y50_dark[j];
            }
            Calc2.B_miu_y50_dark = Calc2.B_miu_y50_dark / Calc2.B_y50_dark.Length;

            /************************************************************************/
            /* delta_y50                                                            */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算明场像素点方差");
            waitProc.SetProcessBar(0);
            for (int i = 0; i < SystemParam.L; i++)
            {
                p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.LightTempFile);
                wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth,
                                       SystemParam.cmosInfo.RGB1, SystemParam.cmosInfo.RGB2, SystemParam.cmosInfo.RGB3, SystemParam.cmosInfo.RGB4,
                                       out yR, out yG, out yB);
                for (int j = 0; j < yR.Length; j++)
                {
                    Calc2.R_delta_y50[j] += (yR[j] - Calc2.R_y50[j]) * (yR[j] - Calc2.R_y50[j]);
                }
                for (int j = 0; j < yG.Length; j++)
                {
                    Calc2.G_delta_y50[j] += (yG[j] - Calc2.G_y50[j]) * (yG[j] - Calc2.G_y50[j]);
                }
                for (int j = 0; j < yB.Length; j++)
                {
                    Calc2.B_delta_y50[j] += (yB[j] - Calc2.B_y50[j]) * (yB[j] - Calc2.B_y50[j]);
                }
                if (waitProc.HasBeenCancelled())
                {
                    return;
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L * 2) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                Calc2.R_delta_y50[j] = Calc2.R_delta_y50[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                Calc2.G_delta_y50[j] = Calc2.G_delta_y50[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                Calc2.B_delta_y50[j] = Calc2.B_delta_y50[j] / SystemParam.L;
            }
            /************************************************************************/
            /* delta_y50_dark                                                       */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算暗场像素点方差");
            waitProc.SetProcessBar(0);
            Calc2.delta_y50_dark = new double[m_Buffers.Height, m_Buffers.Width];
            for (int i = 0; i < SystemParam.L; i++)
            {
                p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, i, Calc2.DarkTempFile);
                wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth,
                                       SystemParam.cmosInfo.RGB1, SystemParam.cmosInfo.RGB2, SystemParam.cmosInfo.RGB3, SystemParam.cmosInfo.RGB4,
                                       out yR, out yG, out yB);
                for (int j = 0; j < yR.Length; j++)
                {
                    Calc2.R_delta_y50_dark[j] += (yR[j] - Calc2.R_y50_dark[j]) * (yR[j] - Calc2.R_y50_dark[j]);
                }
                for (int j = 0; j < yG.Length; j++)
                {
                    Calc2.G_delta_y50_dark[j] += (yG[j] - Calc2.G_y50_dark[j]) * (yG[j] - Calc2.G_y50_dark[j]);
                }
                for (int j = 0; j < yB.Length; j++)
                {
                    Calc2.B_delta_y50_dark[j] += (yB[j] - Calc2.B_y50_dark[j]) * (yB[j] - Calc2.B_y50_dark[j]);
                }
                if (waitProc.HasBeenCancelled())
                {
                    this.Invoke((EventHandler)(delegate
                    {
                        textBox1.AppendText("用户终止自动测试\r\n");
                        return;
                    }));
                }
                waitProc.SetProcessBar((int)((i + 1)));
                this.Invoke((EventHandler)(delegate
                {
                    listView1.Items[14].SubItems[1].Text = (((double)(i + 1) + SystemParam.L * 3) * 100 / count).ToString("F1") + "%";
                }));
            }
            for (int j = 0; j < Calc2.R_y50_dark.Length; j++)
            {
                Calc2.R_delta_y50_dark[j] = Calc2.R_delta_y50_dark[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.G_y50_dark.Length; j++)
            {
                Calc2.G_delta_y50_dark[j] = Calc2.G_delta_y50_dark[j] / SystemParam.L;
            }
            for (int j = 0; j < Calc2.B_y50_dark.Length; j++)
            {
                Calc2.B_delta_y50_dark[j] = Calc2.B_delta_y50_dark[j] / SystemParam.L;
            }

            /************************************************************************/
            /* delta_y50_stack                                                             */
            /************************************************************************/
            waitProc.SetTitle("相同曝光条件下数据处理---计算PRUN、DSUN、亮点、暗点");
            waitProc.SetProcessBar(0);
            waitProc.SetProcessBarRange(0, 7);
            Calc2.R_delta_y50_stack = 0;
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                Calc2.R_delta_y50_stack += Calc2.R_delta_y50[j];
            }
            Calc2.R_delta_y50_stack = Calc2.R_delta_y50_stack / Calc2.R_y50.Length;

            Calc2.G_delta_y50_stack = 0;
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                Calc2.G_delta_y50_stack += Calc2.G_delta_y50[j];
            }
            Calc2.G_delta_y50_stack = Calc2.G_delta_y50_stack / Calc2.G_y50.Length;

            Calc2.B_delta_y50_stack = 0;
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                Calc2.B_delta_y50_stack += Calc2.B_delta_y50[j];
            }
            Calc2.B_delta_y50_stack = Calc2.B_delta_y50_stack / Calc2.B_y50.Length;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* delta_y50_dark_stack                                                         */
            /************************************************************************/
            Calc2.R_delta_y50_dark_stack = 0;
            for (int j = 0; j < Calc2.R_y50_dark.Length; j++)
            {
                Calc2.R_delta_y50_dark_stack += Calc2.R_delta_y50_dark[j];
            }
            Calc2.R_delta_y50_dark_stack = Calc2.R_delta_y50_dark_stack / Calc2.R_y50_dark.Length;

            Calc2.G_delta_y50_dark_stack = 0;
            for (int j = 0; j < Calc2.G_y50_dark.Length; j++)
            {
                Calc2.G_delta_y50_dark_stack += Calc2.G_delta_y50_dark[j];
            }
            Calc2.G_delta_y50_dark_stack = Calc2.G_delta_y50_dark_stack / Calc2.G_y50_dark.Length;

            Calc2.B_delta_y50_dark_stack = 0;
            for (int j = 0; j < Calc2.B_y50_dark.Length; j++)
            {
                Calc2.B_delta_y50_dark_stack += Calc2.B_delta_y50_dark[j];
            }
            Calc2.B_delta_y50_dark_stack = Calc2.B_delta_y50_dark_stack / Calc2.B_y50_dark.Length;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* S2_y50                                                               */
            /************************************************************************/
            Calc2.R_S2_y50 = 0;
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                Calc2.R_S2_y50 += (Calc2.R_y50[j] - Calc2.R_miu_y50) * (Calc2.R_y50[j] - Calc2.R_miu_y50);
            }
            Calc2.R_S2_y50 = Calc2.R_S2_y50 / (Calc2.R_y50.Length - 1);
            Calc2.R_S2_y50 = Calc2.R_S2_y50 - Calc2.R_delta_y50_stack / SystemParam.L;

            Calc2.G_S2_y50 = 0;
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                Calc2.G_S2_y50 += (Calc2.G_y50[j] - Calc2.G_miu_y50) * (Calc2.G_y50[j] - Calc2.G_miu_y50);
            }
            Calc2.G_S2_y50 = Calc2.G_S2_y50 / (Calc2.G_y50.Length - 1);
            Calc2.G_S2_y50 = Calc2.G_S2_y50 - Calc2.G_delta_y50_stack / SystemParam.L;

            Calc2.B_S2_y50 = 0;
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                Calc2.B_S2_y50 += (Calc2.B_y50[j] - Calc2.B_miu_y50) * (Calc2.B_y50[j] - Calc2.B_miu_y50);
            }
            Calc2.B_S2_y50 = Calc2.B_S2_y50 / (Calc2.B_y50.Length - 1);
            Calc2.B_S2_y50 = Calc2.B_S2_y50 - Calc2.B_delta_y50_stack / SystemParam.L;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* S2_y50_dark                                                          */
            /************************************************************************/
            Calc2.R_S2_y50_dark = 0;
            for (int j = 0; j < Calc2.R_y50_dark.Length; j++)
            {
                Calc2.R_S2_y50_dark += (Calc2.R_y50_dark[j] - Calc2.R_miu_y50_dark) * (Calc2.R_y50_dark[j] - Calc2.R_miu_y50_dark);
            }
            Calc2.R_S2_y50_dark = Calc2.R_S2_y50_dark / (Calc2.R_y50_dark.Length - 1);
            Calc2.R_S2_y50_dark = Calc2.R_S2_y50_dark - Calc2.R_delta_y50_dark_stack / SystemParam.L;

            Calc2.G_S2_y50_dark = 0;
            for (int j = 0; j < Calc2.G_y50_dark.Length; j++)
            {
                Calc2.G_S2_y50_dark += (Calc2.G_y50_dark[j] - Calc2.G_miu_y50_dark) * (Calc2.G_y50_dark[j] - Calc2.G_miu_y50_dark);
            }
            Calc2.G_S2_y50_dark = Calc2.G_S2_y50_dark / (Calc2.G_y50_dark.Length - 1);
            Calc2.G_S2_y50_dark = Calc2.G_S2_y50_dark - Calc2.G_delta_y50_dark_stack / SystemParam.L;

            Calc2.B_S2_y50_dark = 0;
            for (int j = 0; j < Calc2.B_y50_dark.Length; j++)
            {
                Calc2.B_S2_y50_dark += (Calc2.B_y50_dark[j] - Calc2.B_miu_y50_dark) * (Calc2.B_y50_dark[j] - Calc2.B_miu_y50_dark);
            }
            Calc2.B_S2_y50_dark = Calc2.B_S2_y50_dark / (Calc2.B_y50_dark.Length - 1);
            Calc2.B_S2_y50_dark = Calc2.B_S2_y50_dark - Calc2.B_delta_y50_dark_stack / SystemParam.L;
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* DSNU1288 ,PRNU1288                                                   */
            /************************************************************************/
            Calc2.R_DSNU1288 = Math.Sqrt(Calc2.R_S2_y50_dark) / Calc1.R_OverAllGain_K;
            Calc2.G_DSNU1288 = Math.Sqrt(Calc2.G_S2_y50_dark) / Calc1.G_OverAllGain_K;
            Calc2.B_DSNU1288 = Math.Sqrt(Calc2.B_S2_y50_dark) / Calc1.B_OverAllGain_K;

            Calc2.R_PRNU1288 = Math.Sqrt(Math.Abs(Calc2.R_S2_y50 - Calc2.R_S2_y50_dark)) / (Calc2.R_miu_y50 - Calc2.R_miu_y50_dark);
            Calc2.G_PRNU1288 = Math.Sqrt(Math.Abs(Calc2.G_S2_y50 - Calc2.G_S2_y50_dark)) / (Calc2.G_miu_y50 - Calc2.G_miu_y50_dark);
            Calc2.B_PRNU1288 = Math.Sqrt(Math.Abs(Calc2.B_S2_y50 - Calc2.B_S2_y50_dark)) / (Calc2.B_miu_y50 - Calc2.B_miu_y50_dark);
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[14].SubItems[1].Text = "完成";
                listView1.Items[15].SubItems[1].Text = "完成";

                listView1.Items[14].SubItems[2].Text = Calc2.R_DSNU1288.ToString("F2") + "||" + Calc2.G_DSNU1288.ToString("F2") + "||" + Calc2.B_DSNU1288.ToString("F2");
                listView1.Items[15].SubItems[2].Text = Calc2.R_PRNU1288.ToString("F4") + "||" + Calc2.G_PRNU1288.ToString("F4") + "||" + Calc2.B_PRNU1288.ToString("F4");
                textBox1.AppendText("DSNU1288 ,PRNU1288计算完成\r\n");
            }));
            waitProc.SetProcessBarPerformStep();
            /************************************************************************/
            /* 暗点查找                                                           */
            /************************************************************************/
            double dP = Calc2.R_miu_y50 * SystemParam.DarkPointPer / 100;

            Calc2.R_DarkPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                if (Calc2.R_y50[j] < dP)
                {
                    PixelInfo pD = wfSapGUI.RPixel[j];
                    pD.y = Calc2.R_y50[j];
                    Calc2.R_DarkPoints.Add(pD);
                }
            }

            dP = Calc2.G_miu_y50 * SystemParam.DarkPointPer / 100;
            Calc2.G_DarkPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                if (Calc2.G_y50[j] < dP)
                {
                    PixelInfo pD = wfSapGUI.GPixel[j];
                    pD.y = Calc2.G_y50[j];
                    Calc2.G_DarkPoints.Add(pD);
                }
            }

            dP = Calc2.B_miu_y50 * SystemParam.DarkPointPer / 100;
            Calc2.B_DarkPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                if (Calc2.B_y50[j] < dP)
                {
                    PixelInfo pD = wfSapGUI.BPixel[j];
                    pD.y = Calc2.B_y50[j];
                    Calc2.B_DarkPoints.Add(pD);
                }
            }
            waitProc.SetProcessBarPerformStep();
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[16].SubItems[1].Text = "完成";
                textBox1.AppendText("暗点查找完成\r\n");
            }));
            /************************************************************************/
            /* 明点查找                                                           */
            /************************************************************************/
            double lP = Calc2.R_miu_y50_dark * (100 + SystemParam.LightPointPer) / 100;

            Calc2.R_LightPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.R_y50.Length; j++)
            {
                if (Calc2.R_y50_dark[j] > lP)
                {
                    PixelInfo pD = wfSapGUI.RPixel[j];
                    pD.y = Calc2.R_y50_dark[j];
                    Calc2.R_LightPoints.Add(pD);
                }
            }

            lP = Calc2.G_miu_y50_dark * (100 + SystemParam.LightPointPer) / 100;
            Calc2.G_LightPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.G_y50.Length; j++)
            {
                if (Calc2.G_y50_dark[j] > lP)
                {
                    PixelInfo pD = wfSapGUI.GPixel[j];
                    pD.y = Calc2.G_y50_dark[j];
                    Calc2.G_LightPoints.Add(pD);
                }
            }

            lP = Calc2.B_miu_y50_dark * (100 + SystemParam.LightPointPer) / 100;
            Calc2.B_LightPoints = new List <PixelInfo>();
            for (int j = 0; j < Calc2.B_y50.Length; j++)
            {
                if (Calc2.B_y50_dark[j] > lP)
                {
                    PixelInfo pD = wfSapGUI.BPixel[j];
                    pD.y = Calc2.B_y50_dark[j];
                    Calc2.B_LightPoints.Add(pD);
                }
            }
            waitProc.SetProcessBarPerformStep();
            this.Invoke((EventHandler)(delegate
            {
                listView1.Items[17].SubItems[1].Text = "完成";
                textBox1.AppendText("亮点查找完成\r\n");
            }));
        }
        void FPNTest_ProcData(object LockWatingThread)
        {
            string strName = FPNFile_Path + "FPN_L" + FPN_L.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bin";

            /************************************************************************/
            /* FPN_y                                                                */
            /************************************************************************/
            miu_y = new List <double>();
            for (int i = 0; i < FPN_L; i++)
            {
                FPN_y = new ushort[m_Buffers.Height, m_Buffers.Width];
                ysave = new byte[SystemParam.ByteLen4Pic];
                for (int j = 0; j < FPN_Ns; j++)
                {
                    byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, j, FPNFile_Path + "TempData\\Light\\" + (i + 1).ToString() + "bin");
                    ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                    for (int m = 0; m < m_Buffers.Height; m++)
                    {
                        for (int n = 0; n < m_Buffers.Width; n++)
                        {
                            FPN_y[m, n] += pic[m, n];
                        }
                    }
                    if (waitProc.HasBeenCancelled())
                    {
                        return;
                    }
                    waitProc.SetProcessBarPerformStep();
                }
                double miu = 0;
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        FPN_y[m, n] = (ushort)(FPN_y[m, n] / FPN_Ns);
                        miu        += FPN_y[m, n];
                    }
                }
                ysave = wfSapGUI.ReTransPicDatas(FPN_y, m_Buffers.Height, m_Buffers.Width);
                SystemParam.WriteTempFile(ysave, i, strName);
                miu = miu / m_Buffers.Height / m_Buffers.Width;
                miu_y.Add(miu);
            }

            this.Invoke((EventHandler)(delegate
            {
                textBox1.AppendText("FPN明场数据处理完成\r\n");
            }));

            strName = FPNFile_Path + "FPN_D" + FPN_L.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bin";
            /************************************************************************/
            /* FPN_y                                                                */
            /************************************************************************/
            miu_ydark = new List <double>();
            for (int i = 0; i < FPN_L; i++)
            {
                FPN_y = new ushort[m_Buffers.Height, m_Buffers.Width];
                ysave = new byte[SystemParam.ByteLen4Pic];
                for (int j = 0; j < FPN_Ns; j++)
                {
                    byte[] p = SystemParam.ReadTempFile(SystemParam.ByteLen4Pic, j, FPNFile_Path + "TempData\\Dark\\" + (i + 1).ToString() + "bin");
                    ushort[,] pic = wfSapGUI.TransPicDatas(p, m_Buffers.Height, m_Buffers.Width, m_Buffers.PixelDepth);
                    for (int m = 0; m < m_Buffers.Height; m++)
                    {
                        for (int n = 0; n < m_Buffers.Width; n++)
                        {
                            FPN_y[m, n] += pic[m, n];
                        }
                    }
                    if (waitProc.HasBeenCancelled())
                    {
                        return;
                    }
                    waitProc.SetProcessBarPerformStep();
                }
                double miu = 0;
                for (int m = 0; m < m_Buffers.Height; m++)
                {
                    for (int n = 0; n < m_Buffers.Width; n++)
                    {
                        FPN_y[m, n] = (ushort)(FPN_y[m, n] / FPN_Ns);
                        miu        += FPN_y[m, n];
                    }
                }
                ysave = wfSapGUI.ReTransPicDatas(FPN_y, m_Buffers.Height, m_Buffers.Width);
                SystemParam.WriteTempFile(ysave, i, strName);
                miu = miu / m_Buffers.Height / m_Buffers.Width;
                miu_ydark.Add(miu);
            }

            this.Invoke((EventHandler)(delegate
            {
                textBox1.AppendText("FPN暗场数据处理完成\r\n");
            }));

            TextLog.AddTextLog("--------------" + DateTime.Now.ToString() + "----------------", FPNFile_Path + "FPN" + FPN_L.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", false);
            TextLog.AddTextLog(String.Format("{0,-11}{1,-11}{2,-11}", "曝光时间", "明场均值", "暗场均值"), FPNFile_Path + "FPN" + FPN_L.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", false);
            uint lsup = SystemParam.eStart + (uint)(Calc1.saturation * FPN_Per / 100) * SystemParam.eStep;

            for (int i = 0; i < FPN_L; i++)
            {
                uint   ls = (uint)(lsup / FPN_L * (i + 1));
                double t  = ((double)(ls)) * SystemParam.Ts;
                TextLog.AddTextLog(String.Format("{0,-15}{1,-15}{2,-15}", t.ToString("F3"), miu_y[i].ToString("F6"), miu_ydark[i].ToString("F6")), FPNFile_Path + "FPN" + FPN_L.ToString() + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt", false);
            }
        }