/// <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); }
/// <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); }
/// <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()); } }
/// <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); }
/// <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); }
/// <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"); } }
/// <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; } }
/// <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); }
/// <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); }