示例#1
0
        /// <summary>
        /// Subtract Operation
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ResultSpectrumCalculation</returns>
        private SpectrumCalculationResult OperationSubtract(ResamplingResult result)
        {
            if (!ValidateResult(result))
            {
                return(null);
            }
            SpectrumCalculationResult spectrumResult = new SpectrumCalculationResult();
            ClrDataPoints             basePts        = result.GetResultData(0);
            List <ClrDataPoints>      subtract       = new List <ClrDataPoints>();

            for (int i = 1; i < result.GetXYDataNum(); i++)
            {
                ClrDataPoints temp = new ClrDataPoints();
                for (uint j = 0; j < basePts.getLength(); j++)
                {
                    if (_stopFlag == true)
                    {
                        return(null);
                    }
                    temp.addPoint(basePts.getX(j),
                                  result.GetResultData(i).getY(j) - basePts.getY(j));
                }
                subtract.Add(temp);
            }
            for (int i = 0; i < subtract.Count; i++)
            {
                if (_stopFlag == true)
                {
                    return(null);
                }
                spectrumResult.AddResult(subtract[i], _specList[i + 1], SPECTRUMNAME_SUBTRACTED);
            }
            return(spectrumResult);
        }
示例#2
0
        /// <summary>
        /// Check ResultResampling.
        /// </summary>
        /// <param name="result">Target of validation</param>
        /// <returns>Result of validation</returns>
        private bool ValidateResult(ResamplingResult result)
        {
            if (result == null)
            {
                return(false);
            }

            return(result.GetXYDataNum() != 0);
        }
示例#3
0
        /// <summary>
        /// Execute Resampling.
        /// </summary>
        public void Execute()
        {
            Progress = 0;

            if (_param == null)
            {
                return;
            }

            if (_result != null)
            {
                _result.Dispose();
            }

            _result = new ResamplingResult();

            //Calculate resampling point.
            double[] xi = CreateResamplingPoint();
            if (xi == null)
            {
                return;
            }
            for (int i = 0; i < _param.GetXYDataNum(); i++)
            {
                if (StopFlag)
                {
                    return;
                }
                ClrDataPoints xyData = _param.GetXYData(i);

                double[] yi;
                double[,] data;
                yi = new double[xi.Length];
                ConvertXYDataToXYArray(xyData, out data);
                InterpolateMethod method = _param.Interpolation ==
                                           ResamplingParameter.InterpolationAlgorithm.LINEAR ?
                                           InterpolateMethod.LINEAR : InterpolateMethod.PCHIP;

                if (UpdateResamplingProgress != null)
                {
                    UpdateResamplingProgress(PROGRESS_RESAMPLING_PHASE.RESAMPLING_START, 0, i + 1, _param.GetXYDataNum());
                }
                WrapMatlabInterp1(yi, data.GetLength(1), data, xi.Length, xi, method, ExtrapolateType.FILL_ZERO);
                _result.AddData(xi, yi);
                if (UpdateResamplingProgress != null)
                {
                    UpdateResamplingProgress(PROGRESS_RESAMPLING_PHASE.RESAMPLING_DOING, 0, i + 1, _param.GetXYDataNum());
                }

                Progress++;
            }
            if (UpdateResamplingProgress != null)
            {
                UpdateResamplingProgress(PROGRESS_RESAMPLING_PHASE.RESAMPLING_END, 0, _param.GetXYDataNum(), _param.GetXYDataNum());
            }
        }
示例#4
0
        /// <summary>
        /// Divide Operation
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ResultSpectrumCalculation</returns>
        private SpectrumCalculationResult OperationDivide(ResamplingResult result)
        {
            if (!ValidateResult(result))
            {
                return(null);
            }
            SpectrumCalculationResult spectrumResult = new SpectrumCalculationResult();
            ClrDataPoints             basePts        = new ClrDataPoints();
            ClrDataPoints             firstPts       = result.GetResultData(0);
            double threshold = firstPts.getMaxY() * Math.Pow(10, -6);

            for (uint i = 0; i < firstPts.getLength(); i++)
            {
                if (_stopFlag == true)
                {
                    return(null);
                }
                double value = Math.Max(firstPts.getY(i), threshold);
                basePts.addPoint(firstPts.getX(i), value);
            }

            List <ClrDataPoints> subtract = new List <ClrDataPoints>();

            for (int i = 1; i < result.GetXYDataNum(); i++)
            {
                ClrDataPoints temp = new ClrDataPoints();
                for (uint j = 0; j < basePts.getLength(); j++)
                {
                    if (_stopFlag == true)
                    {
                        return(null);
                    }
                    temp.addPoint(basePts.getX(j),
                                  result.GetResultData(i).getY(j) / basePts.getY(j));
                }
                subtract.Add(temp);
            }
            //2013/11/26 - del
            //spectrumResult.AddResult(basePts, _specList[0], SPECTRUMNAME_DIVIDED);
            //enddel
            for (int i = 0; i < subtract.Count; i++)
            {
                if (_stopFlag == true)
                {
                    return(null);
                }
                spectrumResult.AddResult(subtract[i], _specList[i + 1], SPECTRUMNAME_DIVIDED);
            }
            return(spectrumResult);
        }
示例#5
0
        /// <summary>
        /// Sum Operation
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ResultSpectrumCalculation</returns>
        private SpectrumCalculationResult OperationSum(ResamplingResult result)
        {
            if (!ValidateResult(result))
            {
                return(null);
            }
            SpectrumCalculationResult spectrumResult = new SpectrumCalculationResult();

            spectrumResult.AddResult(CalculateDataPointsSum(result), _specList[0], SPECTRUMNAME_SUMMED);
            if (_stopFlag == true)
            {
                return(null);
            }
            return(spectrumResult);
        }
示例#6
0
        /// <summary>
        /// Operation(Average/Sum/Subtract/Divide)
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ResultSpectrumCalculation</returns>
        private SpectrumCalculationResult Operation(ResamplingResult result)
        {
            switch (this.OperationSetting)
            {
            case OperationSettings.AVERAGE:
                return(OperationAverage(result));

            case OperationSettings.SUM:
                return(OperationSum(result));

            case OperationSettings.SUBTRACT:
                return(OperationSubtract(result));

            case OperationSettings.DIVIDE:
                return(OperationDivide(result));

            default:
                throw new ArgumentException("OperationSettings");
            }
        }
示例#7
0
        /// <summary>Execute</summary>
        public void Execute()
        {
            _resultSpecCal = null;
            SetXYDataToResamplingCalculation();
            if (_stopFlag == true)
            {
                return;
            }
            _resampCal.Execute();
            if (_stopFlag == true)
            {
                return;
            }
            ResamplingResult resultRs = _resampCal.Result;

            _resultSpecCal = Operation(resultRs);
            if (_stopFlag == true)
            {
                return;
            }
        }
示例#8
0
        /// <summary>
        /// Calculate Sum of Data Points
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ClrDataPoints</returns>
        private ClrDataPoints CalculateDataPointsSum(ResamplingResult result)
        {
            ClrDataPoints sum = result.GetResultData(0);
            ClrDataPoints temp;

            for (int i = 1; i < result.GetXYDataNum(); i++)
            {
                temp = sum;
                sum  = new ClrDataPoints();
                ClrDataPoints data = result.GetResultData(i);

                for (uint j = 0; j < data.getLength(); j++)
                {
                    if (_stopFlag == true)
                    {
                        return(null);
                    }
                    sum.addPoint(data.getX(j), data.getY(j) + temp.getY(j));
                }
            }
            return(sum);
        }
示例#9
0
        /// <summary>
        /// Average Operation
        /// </summary>
        /// <param name="result">ResultResampling Class</param>
        /// <returns>ResultSpectrumCalculation</returns>
        private SpectrumCalculationResult OperationAverage(ResamplingResult result)
        {
            if (!ValidateResult(result))
            {
                return(null);
            }
            SpectrumCalculationResult spectrumResult = new SpectrumCalculationResult();
            ClrDataPoints             sum            = CalculateDataPointsSum(result);
            ClrDataPoints             average        = new ClrDataPoints();

            for (uint i = 0; i < sum.getLength(); i++)
            {
                if (_stopFlag == true)
                {
                    return(null);
                }
                average.addPoint(
                    sum.getX(i),
                    sum.getY(i) / result.GetXYDataNum());
            }
            spectrumResult.AddResult(average, _specList[0], SPECTRUMNAME_AVERAGED);
            return(spectrumResult);
        }