Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Create Remove Contaminant Peak Result.
        /// </summary>
        /// <param name="scanNumbers">Scan Numbers</param>
        /// <param name="tempDir">Temporal Directory</param>
        /// <param name="ms1List">MS1 List</param>
        /// <returns>Remove Contaminant Peak Result</returns>
        private RemoveResult CreateRemoveResult(
            int scanNumbers, string tempDir,
            List <SpectrumWrapper> ms1List)
        {
            RemoveResult result = new RemoveResult();

            for (int i = 0; i < scanNumbers; i++)
            {
                if (UpdateProgress != null)
                {
                    UpdateProgress(
                        PROGRESS_REMOVECONTAMINANT_PHASE.READ_FROM_TEMPORARY,
                        i, scanNumbers);
                }
                using (StreamReader sr = new StreamReader(tempDir + @"\Scan" + i.ToString() + ".csv"))
                {
                    ClrDataPoints pts = new ClrDataPoints();
                    while (!sr.EndOfStream)
                    {
                        string[] splitLine = sr.ReadLine().Split(',');
                        double   x         = double.Parse(splitLine[0]);
                        double   y         = double.Parse(splitLine[1]);
                        pts.addPoint(x, y);
                    }
                    result.AddResult(pts, ms1List[i]);
                }
            }

            return(result);
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Add result data points(added data is clone).
        /// </summary>
        /// <param name="points"></param>
        public void AddResult(ClrDataPoints points, SpectrumWrapper baseSpectrum, string name)
        {
            SpectrumResampling spectrum = new SpectrumResampling(baseSpectrum.getSample(), name);

            spectrum.SetData(points);
            _list.Add(spectrum);
        }
Ejemplo n.º 5
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());
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Submit latest result to sample tree.
        /// </summary>
        public void SubmitResultToTree()
        {
            // No Result
            if (Result == null)
            {
                return;
            }

            ClrMsDataVariant     msObj = new ClrMsDataVariant(_clrVariant);
            DataGroupNodeWrapper dgnw  = msObj.getSample().getRootDataGroupNode();

            //Add result to sample tree.
            SampleSetResampling sampleSet = new SampleSetResampling();
            SampleResampling    sample    = new SampleResampling(sampleSet);

            sample.openSample();
            DataGroupNodeWrapper root = sample.getRootDataGroupNode();

            sample.setName("Contaminant peak removed " + msObj.getSample().getName());
            root.setName("Contaminant peak removed " + dgnw.getName());

            int cnt = 0;

            for (int i = 0; i < Result.Spectrums.Count(); i++)
            {
                ClrDataPoints      pts = Result.DataPoints[i];
                SpectrumWrapper    sw  = Result.Spectrums[i];
                XYDataWrapper      xyd;
                SpectrumResampling spec;

                if (Result.Spectrums.Count == 1)
                {
                    spec = new SpectrumResampling(sample, sw.getName());
                }
                else
                {
                    cnt++;
                    spec = new SpectrumResampling(sample, Result.Spectrums[i].getName() + " (" + cnt.ToString() + ")");
                }
                xyd = spec.getXYData();
                spec.SetData(pts);
                spec.onGetXYData(xyd, -1.0, -1.0);
                spec.setMinX(pts.getMinX());
                spec.setMaxX(pts.getMaxX());
                spec.setMaxIntensity(pts.getMaxY());
                spec.setMsStage((int)sw.getMsStage());
                sample.setSampleIndex((int)0);
                root.addSpectrum(spec);
            }
            sampleSet.addSample(sample);
            ClrPluginCallTool.onOpenSample(sample);
        }
Ejemplo n.º 7
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);
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Set XYData To Resampling Calculation Class
 /// </summary>
 private void SetXYDataToResamplingCalculation()
 {
     _param.ClearXYDataList();
     foreach (SpectrumWrapper spec in _specList)
     {
         if (_stopFlag == true)
         {
             break;
         }
         ClrDataPoints pts = new ClrDataPoints();
         spec.getXYData(pts, false);
         _param.AddXYData(pts);
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Display Calculation Results on tree view
        /// </summary>
        public void DisplayCalculationResult()
        {
            // No Result
            if (_resultSpecCal == null)
            {
                return;
            }

            //Add result to sample tree.
            SampleSetResampling sampleSet = new SampleSetResampling();
            SampleResampling    sample    = new SampleResampling(sampleSet);

            sample.openSample();
            DataGroupNodeWrapper root = sample.getRootDataGroupNode();

            sample.setName(_resultSpecCal.Spectrums[0].getName() + " Sample");
            root.setName(_resultSpecCal.Spectrums[0].getName() + " Sample");

            int cnt = 0;

            foreach (SpectrumResampling sr in _resultSpecCal.Spectrums)
            {
                ClrDataPoints      xyd = new ClrDataPoints();
                SpectrumResampling spec;

                if (_resultSpecCal.Spectrums.Count == 1)
                {
                    spec = new SpectrumResampling(sample, sr.getName() + " Spectrum");
                }
                else
                {
                    cnt++;
                    spec = new SpectrumResampling(sample, sr.getName() + " Spectrum_" + cnt.ToString());
                }
                ClrDataPoints pts = new ClrDataPoints();
                sr.getXYData(pts, false);
                spec.getXYData(xyd, false);
                spec.SetData(pts);
                spec.setMinX(pts.getMinX());
                spec.setMaxX(pts.getMaxX());
                spec.setMaxIntensity(pts.getMaxY());
                spec.onGetXYData(xyd, -1.0, -1.0);
                spec.setMsStage((int)sr.getMsStage());
                sample.setSampleIndex((int)0);
                root.addSpectrum(spec);
            }
            sampleSet.addSample(sample);
            ClrPluginCallTool.onOpenSample(sample);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Set Spectrum calculation result to active object.
        /// </summary>
        /// <param name="resultSpecCal">Spectrum calculation result</param>
        private static void SetResultToActiveObject(SpectrumCalculationResult resultSpecCal)
        {
            // Preparing Output files.
            SampleSetResampling sampleSet = new SampleSetResampling();
            SampleResampling    sample    = new SampleResampling(sampleSet);

            sample.openSample();
            DataGroupNodeWrapper root = sample.getRootDataGroupNode();

            // _resultSpecCal.Spectrums[0].getName() returns
            // "Average" or "Summed" or "Subtracted" or "Divided".
            sample.setName(resultSpecCal.Spectrums[0].getName() + " " + SAMPLE_STRING);
            root.setName(resultSpecCal.Spectrums[0].getName() + " " + SAMPLE_STRING);

            int cnt = 0;

            foreach (SpectrumResampling sr in resultSpecCal.Spectrums)
            {
                ClrDataPoints      xyd = new ClrDataPoints();
                SpectrumResampling spec;

                if (resultSpecCal.Spectrums.Count == 1)
                {
                    spec = new SpectrumResampling(sample, sr.getName() + " " + SPECTRUM_STRING);
                }
                else
                {
                    cnt++;
                    spec = new SpectrumResampling(sample, sr.getName() + " " + SPECTRUM_STRING + "_" + cnt.ToString());
                }
                ClrDataPoints pts = new ClrDataPoints();
                sr.getXYData(pts, false);
                spec.getXYData(xyd, false);
                spec.SetData(pts);
                spec.setMinX(pts.getMinX());
                spec.setMaxX(pts.getMaxX());
                spec.setMaxIntensity(pts.getMaxY());
                spec.onGetXYData(xyd, -1.0, -1.0);
                spec.setMsStage((int)sr.getMsStage());
                sample.setSampleIndex((int)0);
                root.addSpectrum(spec);
            }
            sampleSet.addSample(sample);

            // -out
            kome.clr.ActiveObjectsManagerWrapper aoMgr = kome.clr.ActiveObjectsManagerWrapper.getInstance();
            aoMgr.setActiveSample(sample);
        }
Ejemplo n.º 12
0
        /// <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);
        }
Ejemplo n.º 13
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);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Clear ClrDataPoints.
        /// </summary>
        /// <param name="subtractLowerXICList">Subtracted Lower XIC List</param>
        /// <param name="subtractHigherXICList">Subtracted Higher XIC List</param>
        /// <param name="subtractHighestXICList">Subtracted Highest XIC List</param>
        /// <param name="resamplingList">Resampling List</param>
        /// <param name="spvw">SettingParameterValuesWrapper</param>
        private void ClearClrDataPoints(
            ClrDataPoints[] subtractLowerXICList,
            ClrDataPoints[] subtractHigherXICList,
            ClrDataPoints subtractHighestXICList,
            List <ClrDataPoints> resamplingList,
            SettingParameterValuesWrapper spvw
            )
        {
            foreach (ClrDataPoints pts in subtractLowerXICList)
            {
                if (pts == null)
                {
                    break;
                }
                pts.clearPoints();
                pts.Dispose();
            }

            foreach (ClrDataPoints pts in subtractHigherXICList)
            {
                pts.clearPoints();
                pts.Dispose();
            }

            foreach (ClrDataPoints pts in resamplingList)
            {
                pts.clearPoints();
                pts.Dispose();
            }

            if (subtractHighestXICList != null)
            {
                subtractHighestXICList.clearPoints();
                subtractHighestXICList.Dispose();
            }

            spvw.clear();
            spvw.Dispose();
        }
Ejemplo n.º 15
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);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// add xyData to XYDataWrapper list and RT data list
        /// x arrengement number and y arrengement number have to be same
        /// </summary>
        /// <param name="x">x data arrengement</param>
        /// <param name="y">y data arrengement</param>
        /// <returns>ture:success/false:fail</returns>
        public bool AddData(double[] x, double[] y)
        {
            ClrDataPoints xyData = new ClrDataPoints();

            // Resampling Results are same number
            if (x.Length != y.Length)
            {
                return(false);
            }
            if (_xyDataList.Count > 0)
            {
                if (x.Length != _xyDataList[0].getLength())
                {
                    return(false);
                }
            }

            for (int n = 0; n < x.Length; n++)
            {
                xyData.addPoint(x[n], y[n]);
            }
            _xyDataList.Add(xyData);
            return(true);
        }
Ejemplo n.º 17
0
        /// <summary>
        /// Execute Remove Contaminant Peak.
        /// </summary>
        /// <exception cref="ArgumentException"></exception>
        /// <exception cref="ArgumentNullException"></exception>
        public void Execute()
        {
            //Update Message
            if (UpdateProgress != null)
            {
                UpdateProgress(
                    PROGRESS_REMOVECONTAMINANT_PHASE.PREPARE,
                    (int)0, (int)1);
            }

            //Create Temporary Folder.
            string tempDir = CreateTempDir();

            if (tempDir == null)
            {
                return;
            }

            //Initialize.
            StopFlag = false;
            Result   = null;
            ResultRemove result = new ResultRemove();

            //Get root node
            ClrMsDataVariant     msObj = new ClrMsDataVariant(_clrVariant);
            DataGroupNodeWrapper dgnw  = msObj.getSample().getRootDataGroupNode();

            //Get all MS1 Spectrums.
            List <SpectrumWrapper> ms1List = new List <SpectrumWrapper>();

            ReadSpectrum(dgnw, ref ms1List);

            //If count of MS1 Spectrums is 0, quit remove contaminant peak.
            if (ms1List.Count <= 0)
            {
                //Update Message
                if (UpdateProgress != null)
                {
                    UpdateProgress(
                        PROGRESS_REMOVECONTAMINANT_PHASE.CANCELLED,
                        (int)1, (int)1);
                }
                msObj.Dispose();
                return;
            }
            else
            {
                foreach (SpectrumWrapper sw in ms1List)
                {
                    _resamplingParam.AddXYData(sw.getXYData());
                }
            }

            //Get wrappers
            SettingParameterValuesWrapper spvw = new SettingParameterValuesWrapper();
            PluginFunctionItemWrapper     pfiw = PluginManagerWrapper.getInstance().getFunctionItem(
                FUNCTIONTYPE_BASELINE, _baselineParam.Algorithm, null);

            //Convert parameters to string for SettingParameterValuesWrapper.
            string paramString = _baselineParam.ABCWindowWidth.ToString() + ","
                                 + _baselineParam.NoiseFactor.ToString() + ","
                                 + _baselineParam.SmoothingWidth.ToString();

            pfiw.getSettingsPage().setParameterString(spvw, paramString);

            if (StopFlag)
            {
                _resamplingParam.ClearXYDataList();
                return;
            }

            _resampling.UpdateResamplingProgress += UpdateSpecCalcResamplingProgress;
            //Resampling.
            _resampling.Execute();
            if (StopFlag)
            {
                _resamplingParam.ClearXYDataList();
                return;
            }

            List <ClrDataPoints> resamplingList = _resampling.Result.getAllResultData();

            _resampling.UpdateResamplingProgress -= UpdateSpecCalcResamplingProgress;

            //Dispose.
            _resamplingParam.ClearXYDataList();

            //if resampling result is empty, quit remove contaminant peak.
            if (resamplingList.Count == 0)
            {
                _resampling.Result.Dispose();
                return;
            }

            //Garbage collect.
            GC.Collect();

            // Countermeasure to OutOfBoundsException.
            // Max of List and Array Index is "int".
            // Max Index of XYDataPoints is bigger than maximum integer.
            // Maximum uint = (Maximum int) * 2 + 1.
            ClrDataPoints[] subtractLowerXICList   = null;
            ClrDataPoints[] subtractHigherXICList  = null;
            ClrDataPoints   subtractHighestXICList = null;

            bool complete = true;

            // Create Baseline subtracted XIC.
            if (CreateBaselineSubtractedXIC(
                    pfiw,
                    resamplingList,
                    ms1List,
                    spvw,
                    ref subtractLowerXICList,
                    ref subtractHigherXICList,
                    ref subtractHighestXICList))
            {
                //Create XIC Complete.
                uint count = (uint)(subtractHighestXICList == null ? 0 : 1);
                count += (uint)subtractLowerXICList.Length;
                count += (uint)subtractHigherXICList.Length;

                //Replace intensity of resampled spectrum
                for (int i = 0; i < resamplingList.Count; i++)
                {
                    if (UpdateProgress != null)
                    {
                        UpdateProgress(
                            PROGRESS_REMOVECONTAMINANT_PHASE.WRITE_TO_TEMPORARY,
                            i, resamplingList.Count);
                    }
                    if (StopFlag)
                    {
                        complete = false;
                        break;
                    }
                    try
                    {
                        using (StreamWriter sw = new StreamWriter(tempDir + @"\Scan" + i.ToString() + ".csv"))
                        {
                            for (uint j = 0; j < subtractLowerXICList.Length; j++)
                            {
                                if (j <= int.MaxValue)
                                {
                                    sw.WriteLine(resamplingList[i].getX(j).ToString() + ","
                                                 + subtractLowerXICList[(int)j].getY((uint)i).ToString());
                                }
                                else if (j == uint.MaxValue)
                                {
                                    sw.WriteLine(resamplingList[i].getX(j).ToString() + ","
                                                 + subtractHighestXICList.getY((uint)i).ToString());
                                }
                                else
                                {
                                    sw.WriteLine(resamplingList[i].getX(j).ToString() + ","
                                                 + subtractHigherXICList[(int)(j - int.MaxValue)].getY((uint)i).ToString());
                                }
                            }
                        }
                    }
                    catch
                    {
                        complete = false;
                        break;
                    }
                }
            }
            else
            {
                complete = false;
            }
            int scanNumbers = resamplingList.Count;


            foreach (ClrDataPoints pts in subtractLowerXICList)
            {
                if (pts == null)
                {
                    break;
                }
                pts.clearPoints();
                pts.Dispose();
            }
            foreach (ClrDataPoints pts in subtractHigherXICList)
            {
                pts.clearPoints();
                pts.Dispose();
            }
            if (complete == false)
            {
                return;
            }
            foreach (ClrDataPoints pts in resamplingList)
            {
                pts.Dispose();
            }

            if (subtractHighestXICList != null)
            {
                subtractHighestXICList.clearPoints();
                subtractHighestXICList.Dispose();
            }
            spvw.clear();
            spvw.Dispose();

            //Garbage collect.
            GC.Collect();

            if (StopFlag || !complete)
            {
                return;
            }

            for (int i = 0; i < scanNumbers; i++)
            {
                if (UpdateProgress != null)
                {
                    UpdateProgress(
                        PROGRESS_REMOVECONTAMINANT_PHASE.READ_FROM_TEMPORARY,
                        i, scanNumbers);
                }
                using (StreamReader sr = new StreamReader(tempDir + @"\Scan" + i.ToString() + ".csv"))
                {
                    ClrDataPoints pts = new ClrDataPoints();
                    while (!sr.EndOfStream)
                    {
                        string[] splitLine = sr.ReadLine().Split(',');
                        double   x         = double.Parse(splitLine[0]);
                        double   y         = double.Parse(splitLine[1]);
                        pts.addPoint(x, y);
                    }
                    result.AddResult(pts, ms1List[i]);
                }
            }

            if (UpdateProgress != null)
            {
                UpdateProgress(
                    PROGRESS_REMOVECONTAMINANT_PHASE.COMPLETE,
                    1, 1);
            }

            Result = result;
            GC.Collect();
            return;
        }
Ejemplo n.º 18
0
 /// <summary>
 /// add xyData to XYDataWrapper list
 /// </summary>
 /// <param name="xyData">XYDataWrapper</param>
 public void AddXYData(ClrDataPoints xyData)
 {
     _xyDataList.Add(xyData);
 }
Ejemplo n.º 19
0
        /// <summary>
        /// Create Temporal XIC Files.
        /// </summary>
        /// <param name="subtractLowerXICList">Subtracted Lower XIC List</param>
        /// <param name="subtractHigherXICList">Subtracted Higher XIC List</param>
        /// <param name="subtractHighestXICList">Subtracted Highest XIC List</param>
        /// <param name="resamplingList">Resampling List</param>
        /// <param name="tempDir">Temporal Directory</param>
        /// <returns>Result</returns>
        private bool CreateTempXICFiles(
            ClrDataPoints[] subtractLowerXICList,
            ClrDataPoints[] subtractHigherXICList,
            ClrDataPoints subtractHighestXICList,
            List <ClrDataPoints> resamplingList,
            string tempDir)
        {
            uint count = (uint)(subtractHighestXICList == null ? 0 : 1);

            count += (uint)subtractLowerXICList.Length;
            count += (uint)subtractHigherXICList.Length;

            //Replace intensity of resampled spectrum
            for (int i = 0; i < resamplingList.Count; i++)
            {
                if (UpdateProgress != null)
                {
                    UpdateProgress(
                        PROGRESS_REMOVECONTAMINANT_PHASE.WRITE_TO_TEMPORARY,
                        i, resamplingList.Count);
                }
                if (StopFlag)
                {
                    return(false);
                }
                try
                {
                    using (StreamWriter sw = new StreamWriter(tempDir + @"\Scan" + i.ToString() + ".csv"))
                    {
                        for (uint j = 0; j < count; j++)
                        {
                            int    xicIndex = 0;
                            double x        = resamplingList[i].getX(j);

                            if (x < _resamplingParam.OutputLowerRange || _resamplingParam.OutputHigherRange < x)
                            {
                                continue;
                            }

                            if (j <= int.MaxValue)
                            {
                                sw.WriteLine(x.ToString() + "," + subtractLowerXICList[(int)j].getY((uint)xicIndex).ToString());
                            }
                            else if (j == uint.MaxValue)
                            {
                                sw.WriteLine(x + "," + subtractHighestXICList.getY((uint)xicIndex).ToString());
                            }
                            else
                            {
                                sw.WriteLine(x + "," + subtractHigherXICList[(int)(j - int.MaxValue)].getY((uint)xicIndex).ToString());
                            }
                            xicIndex++;
                        }
                    }
                }
                catch
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Execute Remove Contaminant Peak.
        /// </summary>
        /// <exception cref="ArgumentException"></exception>
        /// <exception cref="ArgumentNullException"></exception>
        public void Execute()
        {
            //Update Message
            if (UpdateProgress != null)
            {
                UpdateProgress(
                    PROGRESS_REMOVECONTAMINANT_PHASE.PREPARE,
                    (int)0, (int)1);
            }

            //Create Temporary Folder.
            string tempDir = CreateTempDir();

            if (tempDir == null)
            {
                return;
            }

            //Initialize.
            StopFlag = false;
            if (Result != null)
            {
                Result.ClearResult();
            }
            Result = null;

            //Get root node
            ClrMsDataVariant     msObj = new ClrMsDataVariant(_clrVariant);
            DataGroupNodeWrapper dgnw  = msObj.getSample().getRootDataGroupNode();

            //Get all MS1 Spectrums.
            List <SpectrumWrapper> ms1List = new List <SpectrumWrapper>();

            ReadSpectrum(dgnw, ref ms1List);

            //If count of MS1 Spectrums is 0, quit remove contaminant peak.
            if (ms1List.Count <= 0)
            {
                //Update Message
                if (UpdateProgress != null)
                {
                    UpdateProgress(
                        PROGRESS_REMOVECONTAMINANT_PHASE.CANCELED, 1, 1);
                }
                msObj.Dispose();
                return;
            }

            //Create Resampling parameters.
            foreach (SpectrumWrapper sw in ms1List)
            {
                ClrDataPoints pts = new ClrDataPoints();
                sw.getXYData(pts, false);
                _resamplingParam.AddXYData(pts);
            }

            //Get wrappers
            SettingParameterValuesWrapper spvw = new SettingParameterValuesWrapper();
            PluginFunctionItemWrapper     pfiw = PluginManagerWrapper.getInstance().getFunctionItem(
                FUNCTIONTYPE_BASELINE, _baselineParam.Algorithm, null);

            //Convert parameters to string for SettingParameterValuesWrapper.
            string paramString = _baselineParam.ABCWindowWidth.ToString() + ","
                                 + _baselineParam.NoiseFactor.ToString() + ","
                                 + _baselineParam.SmoothingWidth.ToString();

            pfiw.getSettingsPage().setParameterString(spvw, paramString);

            if (StopFlag)
            {
                _resamplingParam.ClearXYDataList();
                return;
            }

            _resampling.UpdateResamplingProgress += UpdateSpecCalcResamplingProgress;

            //Resampling.
            _resampling.Execute();

            if (StopFlag)
            {
                _resamplingParam.ClearXYDataList();
                return;
            }

            List <ClrDataPoints> resamplingList = _resampling.Result.GetAllResultData();

            _resampling.UpdateResamplingProgress -= UpdateSpecCalcResamplingProgress;

            //Dispose.
            _resamplingParam.ClearXYDataList();

            //if resampling result is empty, quit remove contaminant peak.
            if (resamplingList.Count == 0)
            {
                _resampling.Result.Dispose();
                return;
            }

            // Countermeasure to OutOfBoundsException.
            // Max of List and Array Index is "int".
            // Max Index of XYDataPoints is bigger than maximum integer.
            // Maximum uint = (Maximum int) * 2 + 1.
            ClrDataPoints[] subtractLowerXICList   = null;
            ClrDataPoints[] subtractHigherXICList  = null;
            ClrDataPoints   subtractHighestXICList = null;

            bool complete = true;

            // Create Baseline subtracted XIC.
            if (CreateBaselineSubtractedXIC(
                    pfiw, resamplingList, ms1List, spvw,
                    ref subtractLowerXICList,
                    ref subtractHigherXICList,
                    ref subtractHighestXICList))
            {
                complete = CreateTempXICFiles(subtractLowerXICList,
                                              subtractHigherXICList, subtractHighestXICList,
                                              resamplingList, tempDir);
            }
            else
            {
                complete = false;
            }

            int scanNumbers = resamplingList.Count;

            ClearClrDataPoints(
                subtractLowerXICList,
                subtractHigherXICList,
                subtractHighestXICList,
                resamplingList, spvw);

            if (StopFlag || !complete)
            {
                return;
            }

            if (UpdateProgress != null)
            {
                UpdateProgress(
                    PROGRESS_REMOVECONTAMINANT_PHASE.COMPLETE,
                    1, 1);
            }

            Result = CreateRemoveResult(scanNumbers, tempDir, ms1List);
            return;
        }
Ejemplo n.º 21
0
        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);
        }
Ejemplo n.º 22
0
 /// <summary>
 /// Add result data points.
 /// </summary>
 /// <param name="points"></param>
 public void AddResult(ClrDataPoints points, SpectrumWrapper baseSpectrum)
 {
     _ptsList.Add(points);
     _specList.Add(baseSpectrum);
 }
Ejemplo n.º 23
0
 /// <summary>
 /// set Datapoints for onGetXYData
 /// </summary>
 /// <param name="pts">ClrDataPoints</param>
 public void SetData(ClrDataPoints pts)
 {
     _pts = pts;
 }