コード例 #1
0
        private void RefreshTimerEventProcess(Object pObject, EventArgs pEventArgs)
        {
            gRefreshTimer.Stop();

            try {
                //Need refresh the parameters when restart a data ACQ
                //There are two methods to do this
                //1. Use the timer check the flag
                //2. Use the function call to clear the flag
                #region Used to clear graph when a new ACQ Start

                if (gParentWindow.gRefreshAllEnergyDiagram && (gCleanFlag[gPixelNo] == false))
                {
                    gCleanFlag[gPixelNo] = true;

                    //Display raw data related
                    #region Clear Raw Data Display

                    gLastEnergyCount = 0;

                    //Update Count
                    lblPixelTotalEcentCountsValue.Text = "0";

                    gXData.Clear();
                    gYData.Clear();
                    #endregion

                    //Clear fitting parameters
                    #region Clear Fitting Parameters

                    gFittingXData.Clear();
                    gFittingYData.Clear();

                    gFittingG1XData.Clear();
                    gFittingG1YData.Clear();

                    gFittingG2XData.Clear();
                    gFittingG2YData.Clear();

                    gFittingG3XData.Clear();
                    gFittingG3YData.Clear();

                    gFittingLinearXData.Clear();
                    gFittingLinearYData.Clear();

                    gFittingPeakXData.Clear( );
                    gFittingPeakYData.Clear( );

                    #endregion

                    zGraph1.f_Refresh();
                }

                #endregion

                if ((( int )gParentWindow.gSelectedScanParametersForDataAcq.gSourceType < ( int )cScanParameters.eSourceType.LightShare))
                {
                    //Only there is new data point, then refresh the graph
                    #region Disable Raw Data

                    if (gLastEnergyCount != gParentWindow.gEventDataInfo[gPixelNo].Count)
                    {
                        //This is used to track how many data point is displayed
                        int myDisplayedCount = 0;

                        //Get total count
                        gLastEnergyCount = gParentWindow.gEventDataInfo[gPixelNo].Count;

                        //Update Count
                        lblPixelTotalEcentCountsValue.Text = gLastEnergyCount.ToString( );

                        gXData.Clear( );
                        gYData.Clear( );

                        for (int myIndex = 0; myDisplayedCount < gLastEnergyCount; myIndex++)
                        {
                            List <cRawData> mySatisfiedRange = gParentWindow.gEventDataInfo[gPixelNo].FindAll(cRawData => (cRawData.mData >= gBinSize * myIndex) && (cRawData.mData < gBinSize * (myIndex + 1)));

                            myDisplayedCount += mySatisfiedRange.Count;

                            //This might solve the tail problem
                            if (((gBinSize * myIndex + gBinSize / 2) > 50) && (mySatisfiedRange.Count > 1))
                            {
                                gXData.Add(gBinSize * myIndex + gBinSize / 2);

                                gYData.Add(( float )mySatisfiedRange.Count);
                            }
                            else if ((gBinSize * myIndex + gBinSize / 2) < 50)
                            {
                                gXData.Add(gBinSize * myIndex + gBinSize / 2);

                                gYData.Add(( float )mySatisfiedRange.Count);
                            }
                        }

                        zGraph1.f_Refresh( );
                    }

                    #endregion
                }
                else
                {
                    //Usally no raw data to display
                }

                #region Fitting

                if (gParentWindow.gIsAutoFitting)
                {
                    if (gParentWindow.gIsFittingDone && (gFittingFlag[gPixelNo] == false))
                    {
                        gFittingFlag[gPixelNo] = true;

                        if (gParentWindow.gFitting != null)
                        {
                            cFittingParameters myFittingParameters = new cFittingParameters();

                            if (gParentWindow.gFitting.gDictFittingParameters.TryGetValue(gPixelNo, out myFittingParameters))
                            {
                                if (myFittingParameters.mStatus == (int)cFittingParameters.eStatus.OK)
                                {
                                    #region Clear Fitting Data List

                                    gFittingXData.Clear();
                                    gFittingYData.Clear();

                                    gFittingG1XData.Clear();
                                    gFittingG1YData.Clear();

                                    gFittingG2XData.Clear();
                                    gFittingG2YData.Clear();

                                    gFittingG3XData.Clear();
                                    gFittingG3YData.Clear();

                                    gFittingLinearXData.Clear();
                                    gFittingLinearYData.Clear();

                                    gFittingPeakXData.Clear( );
                                    gFittingPeakYData.Clear( );

                                    #endregion

                                    #region Draw Light Share Raw Data

                                    if ((( int )gParentWindow.gSelectedScanParametersForDataAcq.gSourceType >= ( int )cScanParameters.eSourceType.LightShare))
                                    {
                                        gXData.Clear( );
                                        gYData.Clear( );

                                        UInt32 myTotalCount = 0;

                                        foreach (cRawData myData in gParentWindow.gEventDataInfo[gPixelNo])
                                        {
                                            /*
                                             * if (myData.mAddress <= 254) {
                                             *
                                             *  gXData.Add(myData.mAddress * 64);
                                             *
                                             *  gYData.Add((float)myData.mData);
                                             *
                                             *  myTotalCount += (UInt32)myData.mData;
                                             *
                                             *  //In case the slope is 2, it will draw another line
                                             *  if (myData.mAddress == 254) {
                                             *
                                             *      break;
                                             *
                                             *  }
                                             *
                                             * } else  {
                                             *
                                             *  break;
                                             *
                                             * }
                                             */

                                            gXData.Add(myData.mAddress * 64);

                                            gYData.Add((float)myData.mData);

                                            myTotalCount += (UInt32)myData.mData;
                                        }

                                        lblPixelTotalEcentCountsValue.Text = myTotalCount.ToString( );

                                        //zGraph1.f_Refresh( );
                                    }

                                    #endregion

                                    #region Draw Fitting Line

                                    gG2PeakYValue = 0f;
                                    gG2PeakXValue = 0f;

                                    gBinSize = 64;

                                    for (int myIndex = 0; myIndex < 16384 / gBinSize; myIndex++)
                                    {
                                        myXValue = (float)(myIndex * gBinSize + gBinSize / 2.0);

                                        gParentWindow.gFitting.FillFittingFormula(myFittingParameters, myXValue, out myYValue, out myYG1Value, out myYG2Value, out myYG3Value, out myYLinearValue, out myG2Peak, out myG2PeakXValue);

                                        #region Add Fitting X Value

                                        /*
                                         * if (gParentWindow.gSelectedScanParametersForDataAcq.gSourceType == (int)cScanParameters.eSourceType.LightShareSiglePixel) {
                                         *
                                         *  //beause don't change the gause formula then can only do this
                                         *  //This is used to solve the problem that the single pixel raw data is calibarted
                                         *  //But the fitting is still not using calibrated value
                                         *  myXValue = (float)((myIndex * gBinSize + gBinSize / 2.0) * gCalibratedSlope + gCalibratedOffset);
                                         *
                                         * }
                                         */

                                        //gFittingXData.Add(myXValue);
                                        //gFittingG1XData.Add(myXValue);
                                        gFittingG2XData.Add(myXValue);
                                        //gFittingG3XData.Add(myXValue);
                                        //gFittingLinearXData.Add(myXValue);

                                        if (myYG2Value > gG2PeakYValue)
                                        {
                                            gG2PeakXValue = myXValue;
                                            gG2PeakYValue = myYG2Value;
                                        }

                                        #endregion

                                        #region Zero negtive value

                                        if (myYValue < 0)
                                        {
                                            myYValue = 0f;
                                        }

                                        if (myYG1Value < 0)
                                        {
                                            myYG1Value = 0f;
                                        }

                                        if (myYG2Value < 0)
                                        {
                                            myYG2Value = 0f;
                                        }

                                        if (myYG3Value < 0)
                                        {
                                            myYG3Value = 0f;
                                        }

                                        if (myYLinearValue < 0)
                                        {
                                            myYLinearValue = 0f;
                                        }

                                        #endregion

                                        #region Adding Fitting Y Value

                                        //gFittingYData.Add(myYValue);
                                        //gFittingG1YData.Add(myYG1Value);
                                        gFittingG2YData.Add(myYG2Value);
                                        //gFittingG3YData.Add(myYG3Value);
                                        //gFittingLinearYData.Add(myYLinearValue);

                                        #endregion
                                    }


                                    zGraph1.f_reXY( );

                                    gParentWindow.gFitting.gPixelRawDataPeak[gPixelNo] = gG2PeakXValue;

                                    for (int i = 0; i < ( int )zGraph1._fYEnd; i++)
                                    {
                                        gFittingPeakXData.Add(gG2PeakXValue);
                                        gFittingPeakYData.Add(i);
                                    }

                                    //zGraph1.f_Refresh( );

                                    lblFittingPeakValue.Text      = myFittingParameters.mG2Center.ToString("0.0#");
                                    lblEnergyResolutionValue.Text = myFittingParameters.mEnergyResolution.ToString("0.0#") + "%";

                                    lblG2CenterError.Text = myFittingParameters.mG2Error.ToString("+/- 0.0#");

                                    #endregion

                                    zGraph1.f_Refresh();
                                }
                                else
                                {
                                    gParentWindow.gErrorOutput.OutPutErrorMessage(cErrorCode.gkecFitting_ExceptionWhenFitting, "");
                                }
                            }
                            else
                            {
                                //MessageBox.Show("No enough correct data for fitting");
                                gParentWindow.gErrorOutput.OutPutErrorMessage(cErrorCode.gkecFitting_NoEnoughCorrectData, "");
                            }
                        }
                        else
                        {
                            gParentWindow.gErrorOutput.OutPutErrorMessage(cErrorCode.gkecFitting_NoFittingResult, "");
                        }
                    }
                }

                #endregion
            } catch {
            }

            gRefreshTimer.Start();
        }
コード例 #2
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            string myPeakValue = txtPeakValue.Text;

            float myPixelPeakValue = 0.0f;

            string myWarning      = "";
            string myTitle        = "";
            string myInputWarning = "";

            if (gMainWindows.gSelectedLanguage == (int)Demo.gLanguageVersion.English)
            {
                myInputWarning = "Please enter a valid value";
                myWarning      = "Manual set energy peak value will overwrite this pixel's auto fitting result, please confirm";
                myTitle        = "Confirm Peak Modify";
            }
            else
            {
                myInputWarning = "请输入正确的峰值";
                myWarning      = "手动赋值能谱峰值将覆盖当前像素自动fitting结果,请确认";
                myTitle        = "峰值确认";
            }

            if (!float.TryParse(myPeakValue, out myPixelPeakValue))
            {
                #region Warning User

                MessageBox.Show(myInputWarning);

                #endregion
            }
            else
            {
                #region Check and input

                cFittingParameters myFittingParameters = new cFittingParameters( );

                if (gMainWindows.gFitting.gDictFittingParameters.TryGetValue(gPixelNo, out myFittingParameters))
                {
                    if (myFittingParameters.mStatus == (int)cFittingParameters.eStatus.OK)
                    {
                        if (MessageBox.Show(myWarning, myTitle, MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mStatus = (int)cFittingParameters.eStatus.ManualFit;

                            gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mG2Center = myPixelPeakValue;

                            gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mEnergyResolution = 0f;;
                        }
                    }
                    else
                    {
                        gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mStatus = (int)cFittingParameters.eStatus.ManualFit;

                        gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mG2Center = myPixelPeakValue;

                        gMainWindows.gFitting.gDictFittingParameters[gPixelNo].mEnergyResolution = 0f;
                    }
                }

                #endregion

                this.Close( );
            }
        }