Example #1
0
        public ISpectrum Process(ISpectrum spectrum)
        {
            List <IPeak> peaks = spectrum.GetPeaks();

            double[] signal = peaks.Select(p => p.GetIntensity()).ToArray();
            SortedDictionary <double, List <double> > matrix =
                new SortedDictionary <double, List <double> >();

            for (double a = 1.0; a <= maxScale; a += steps)
            {
                double[] processed = Algorithm.CWT.Transform(signal, a);
                matrix[a] = processed.ToList();
            }

            List <RidgeLine> lines = finder.Find(
                spectrum.GetPeaks().Select(p => p.GetMZ()).ToList(),
                matrix);
            HashSet <double> mz = new HashSet <double>(lines.Select(p => p.Pos).ToList());

            List <IPeak> processedPeaks = peaks.Where(p => mz.Contains(p.GetMZ())).ToList();
            ISpectrum    newSpectrum    = spectrum.Clone();

            newSpectrum.SetPeaks(processedPeaks);
            return(newSpectrum);
        }
        public ISpectrum Process(ISpectrum spectrum)
        {
            if (spectrum.GetPeaks().Count == 0)
            {
                return(spectrum);
            }
            // insert pseudo peaks for large gap
            List <IPeak> peaks = new List <IPeak>();
            double       mz    = spectrum.GetPeaks().First().GetMZ();

            peaks.Add(new GeneralPeak(mz - precision, 0));
            foreach (IPeak peak in spectrum.GetPeaks())
            {
                if (peak.GetMZ() - mz > precision)
                {
                    double middle = (mz + peak.GetMZ()) / 2;
                    peaks.Add(new GeneralPeak(middle, 0));
                }
                peaks.Add(peak);
                mz = peak.GetMZ();
            }
            peaks.Add(new GeneralPeak(mz + precision, 0));

            List <IPeak> processedPeaks = new List <IPeak>();

            int index = 1;
            int end   = peaks.Count - 1;
            int head  = index + 1;

            while (index < end)
            {
                if (peaks[index - 1].GetIntensity() < peaks[index].GetIntensity())
                {
                    head = index + 1;
                }

                while (head < end &&
                       peaks[head].GetIntensity() == peaks[index].GetIntensity())
                {
                    head++;
                }

                if (peaks[head].GetIntensity() < peaks[index].GetIntensity())
                {
                    processedPeaks.Add(peaks[index]);
                    index = head;
                }
                index++;
            }

            ISpectrum newSpectrum = spectrum.Clone();

            newSpectrum.SetPeaks(processedPeaks);
            return(newSpectrum);
        }
        public ISpectrum Process(ISpectrum spectrum)
        {
            if (spectrum.GetPeaks().Count == 0)
            {
                return(spectrum);
            }
            // insert pseudo peaks for large gap
            List <IPeak> peaks          = InsertPeaks(spectrum);
            List <IPeak> processedPeaks = new List <IPeak>();

            int index = 1;
            int end   = peaks.Count - 1;
            int head  = index + 1;

            while (index < end)
            {
                if (peaks[index - 1].GetIntensity() < peaks[index].GetIntensity())
                {
                    head = index + 1;
                }

                while (head < end &&
                       peaks[head].GetIntensity() == peaks[index].GetIntensity())
                {
                    head++;
                }

                if (peaks[head].GetIntensity() < peaks[index].GetIntensity())
                {
                    processedPeaks.Add(peaks[index]);
                    index = head;
                }
                index++;
            }

            ISpectrum newSpectrum = spectrum.Clone();

            newSpectrum.SetPeaks(processedPeaks);
            return(newSpectrum);
        }
 /// <summary>
 ///     Copy the data inside into a new one.
 /// </summary>
 /// <returns></returns>
 public ISpectrum Clone()
 {
     return(_spectrum.Clone());
 }