/// <summary> /// Gets the interval average of all spectrums. /// </summary> /// <returns>Interval</returns> private double GetAverageInterval() { double sum = 0; int count = 0; for (int i = 0; i < _param.GetXYDataNum(); i++) { ClrDataPoints xydata = _param.GetXYData(i); if (xydata.getLength() <= 1) { continue; } uint length = xydata.getLength(); for (uint j = 1; j < length; j++) { double distance = Math.Abs(xydata.getX(j) - xydata.getX(j - 1)); if (distance == 0) { continue; } sum += distance; count++; } } return(sum / count); }
/// <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> /// add xySetData to XYDataWrapper class /// add data that set before calling this method to XYDataWrapper class /// between min and max /// </summary> /// <param name="xyData">add to class</param> /// <param name="minX">min(if this argument is below 0,min is not checked)</param> /// <param name="maxX">max(if this argument is below 0,max is not checked)</param> public override void onGetXYData(XYDataWrapper xyData, double minX, double maxX) { uint num; if (_pts == null) { return; } xyData.clearPoints(); num = _pts.getLength(); xyData.reserve(num); for (uint n = 0; n < num; n++) { if (((minX < 0) || (minX <= _pts.getX(n))) && ((maxX < 0) || (_pts.getX(n) <= maxX))) { xyData.addPoint(_pts.getX(n), _pts.getY(n)); } } }
/// <summary> /// Create Same array that first spectrum difference. /// </summary> /// <returns></returns> private double[] CreateSameArrayFirstSpectrumDifference() { ClrDataPoints xydata = _param.GetXYData(0); if (xydata == null) { return(null); } uint length = xydata.getLength(); uint count = 0; double lower = GetLowerOutputRange(); double higher = GetHigherOutputRange(); for (uint i = 0; i < length; i++) { if ((xydata.getX(i) < lower) || (higher < xydata.getX(i))) { continue; } if (i == 0) { count++; } else if (xydata.getX(i) != xydata.getX(i - 1)) { count++; } } if (count == 0) { return(null); } double[] result = new double[count]; uint index = 0; for (uint i = 0; i < length; i++) { if ((xydata.getX(i) < lower) || (higher < xydata.getX(i))) { continue; } if ((xydata.getX(i) == 0) || !result.Contains(xydata.getX(i))) { result[index++] = xydata.getX(i); } } return(result); }
/// <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> /// Gets the interval minimum of all spectrums. /// </summary> /// <returns>Interval</returns> private double GetMinimumInterval() { double result = double.MaxValue; for (int i = 0; i < _param.GetXYDataNum(); i++) { ClrDataPoints xydata = _param.GetXYData(i); uint length = xydata.getLength(); for (uint j = 1; j < length; j++) { double distance = Math.Abs(xydata.getX(j) - xydata.getX(j - 1)); if (distance == 0) { continue; } result = Math.Min(distance, result); } } return(result); }
/// <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); }
private bool CreateBaselineSubtractedXIC( PluginFunctionItemWrapper pfiw, List <ClrDataPoints> resamplingList, List <SpectrumWrapper> ms1List, SettingParameterValuesWrapper spvw, ref ClrDataPoints[] subtractLowerXICList, ref ClrDataPoints[] subtractHigherXICList, ref ClrDataPoints subtractHighestXICList ) { uint resamplingLength = resamplingList[0].getLength(); int lowerIndex = (resamplingLength < int.MaxValue) ? (int)resamplingLength : int.MaxValue; int higherIndex = (0 < (int)(resamplingLength - lowerIndex))? (int)(resamplingLength - lowerIndex) : 0; subtractLowerXICList = new ClrDataPoints[lowerIndex]; subtractHigherXICList = new ClrDataPoints[higherIndex]; for (uint i = 0; i < resamplingLength; i++) { //Update message. if (UpdateProgress != null) { UpdateProgress( PROGRESS_REMOVECONTAMINANT_PHASE.REMOVE_CONTAMINANT_PEAK, (int)i, (int)resamplingLength); } //Cancel. if (StopFlag) { break; } //Create XIC. ClrDataPoints pts = new ClrDataPoints(); for (int j = 0; j < resamplingList.Count; j++) { //Cancel. if (StopFlag) { break; } pts.addPoint(ms1List[j].getRt(), resamplingList[j].getY(i)); } //Cancel. if (StopFlag) { pts.clearPoints(); pts.Dispose(); break; } //Baseline Subtraction ClrParameters param = new ClrParameters(); ClrDataPoints baseline = new ClrDataPoints(); ClrPluginCallTool.setXYData(param, pts); ClrPluginCallTool.setBaseline(param, baseline); ClrPluginCallTool.setSettingValues(param, spvw); pfiw.getCall().invoke(param); //Cancel. if (StopFlag) { param.Dispose(); baseline.clearPoints(); baseline.Dispose(); } //Resampling baseline. ClrDataPoints subtracted = new ClrDataPoints(); ResamplingParameter resamplingParam = new ResamplingParameter(); ResamplingCalculation resamplingCalc = new ResamplingCalculation(resamplingParam); resamplingParam.ResamplingMode = ResamplingParameter.SamplingMode.FIRST; resamplingParam.Interpolation = _resamplingParam.Interpolation; resamplingParam.AddXYData(pts); resamplingParam.AddXYData(baseline); resamplingCalc.Execute(); ClrDataPoints resampledBaseline = resamplingCalc.Result.getResultData(1); for (uint j = 0; j < resampledBaseline.getLength(); j++) { double intensity = Math.Max(pts.getY(j) - resampledBaseline.getY(j), 0); subtracted.addPoint(pts.getX(j), intensity); } // Countermeasure to OutOfBoundsException. if (i < int.MaxValue) { subtractLowerXICList[i] = subtracted; } else if (int.MaxValue < i && i < (uint)int.MaxValue * 2) { subtractHigherXICList[i - int.MaxValue] = subtracted; } else { subtractHighestXICList = subtracted; } resamplingParam.ClearXYDataList(); resamplingCalc.Result.ClearXYDataList(); } return(!StopFlag); }