Esempio n. 1
0
 public void CombineLikeMZPeaks(List <MZPeak> peaks, double value)
 {
     if (peaks.Count > 0)
     {
         double        currentMZ      = peaks[0].MZ;
         double        totalIntensity = peaks[0].Intensity;
         List <MZPeak> combinedPeaks  = new List <MZPeak>();
         for (int i = 1; i < peaks.Count; i++)
         {
             MZPeak currentPeak = peaks[i];
             if (Math.Round(currentPeak.MZ) == Math.Round(currentMZ))
             {
                 totalIntensity += currentPeak.Intensity;
             }
             else
             {
                 MZPeak newPeak = new MZPeak(Math.Round(currentMZ), totalIntensity);
                 combinedPeaks.Add(newPeak);
                 currentMZ      = Math.Round(currentPeak.MZ);
                 totalIntensity = currentPeak.Intensity;
             }
         }
         MZPeak peak = new MZPeak(currentMZ, totalIntensity);
         combinedPeaks.Add(peak);
         peaks.Clear();
         peaks.AddRange(combinedPeaks);
         NormalizePeaksOnlyIntensities(peaks, value);
     }
 }
Esempio n. 2
0
 public RTPeak(MZPeak peak, double RT)
 {
     this._Intensity = peak.Intensity;
     this._MZ        = peak.MZ;
     this._RT        = RT;
     this._peak      = peak;
 }
Esempio n. 3
0
        public double GetPrecusorMz(int spectrumNumber, double searchMZ, int msnOrder = 2)
        {
            int    parentScanNumber = GetParentSpectrumNumber(spectrumNumber);
            var    ms1Scan          = GetSpectrum(parentScanNumber);
            MZPeak peak             = ms1Scan.GetClosestPeak(MassRange.FromDa(searchMZ, 50));

            if (peak != null)
            {
                return(peak.MZ);
            }
            return(double.NaN);
        }
Esempio n. 4
0
        public Feature(MZPeak firstPeak, double RT, double HCDEnergy = 0)
        {
            this.allRTPeaks    = new List <RTPeak>();
            this.smoothRTPeaks = new List <RTPeak>();
            this.minRT         = RT;
            this.maxRT         = RT;
            RTPeak newRTPeak = new RTPeak(firstPeak, RT);

            this.allRTPeaks.Add(newRTPeak);
            this.maxPeak = newRTPeak;
            this.totalMZTimesIntensity += (firstPeak.Intensity * firstPeak.MZ);
            this.totalIntensity        += (firstPeak.Intensity);
            this.averageMZ              = firstPeak.MZ;
            newRTPeak.HCDEnergy         = HCDEnergy;
        }
Esempio n. 5
0
        public void AddPeak(MZPeak peak, double RT, double HCDEnergy = 0)
        {
            RTPeak newRTPeak = new RTPeak(peak, RT);

            this.allRTPeaks.Add(newRTPeak);
            if (peak.Intensity > maxPeak.Intensity)
            {
                apexTime = RT;
                maxPeak  = newRTPeak;
            }
            this.maxRT = RT;
            this.totalMZTimesIntensity += (peak.Intensity * peak.MZ);
            this.totalIntensity        += (peak.Intensity);
            this.averageMZ              = (this.totalMZTimesIntensity / this.totalIntensity);
            newRTPeak.HCDEnergy         = HCDEnergy;
        }
Esempio n. 6
0
        public List <MZPeak> GetPeaksFromNearestSpectrum(FeatureGroup group, ThermoRawFile rawFile)
        {
            int              scanNum     = rawFile.GetSpectrumNumber(group.ApexTime);
            List <MZPeak>    returnPeaks = new List <MZPeak>();
            ThermoSpectrum   spectrum    = rawFile.GetLabeledSpectrum(scanNum);
            HashSet <double> peakMZs     = new HashSet <double>();

            foreach (Feature feature in group.allFeatures)
            {
                MZPeak outPeak = spectrum.GetClosestPeak(MassRange.FromPPM(feature.AverageMZ, 10));
                if (outPeak != null)
                {
                    if (!peakMZs.Contains(outPeak.Intensity))
                    {
                        returnPeaks.Add(new MZPeak(feature.AverageMZ, outPeak.Intensity));
                        peakMZs.Add(outPeak.Intensity);
                    }
                }
            }
            returnPeaks = returnPeaks.OrderBy(x => x.MZ).ToList();
            return(returnPeaks);
        }
Esempio n. 7
0
        private void MatchPeaks(List <Feature> features, MZPeak[] currentPeaks, double ppmTolerance, double rt, bool allowMultipleFeatureMatches = false)
        {
            if (features == null || currentPeaks == null)
            {
                return;
            }

            int fCount = features.Count;

            if (fCount == 0)
            {
                features.AddRange(currentPeaks.Select(p => new Feature(p, rt)));
                return;
            }

            int cCount = currentPeaks.Length;

            if (cCount == 0)
            {
                return;
            }

            int     c         = 0;
            int     f         = 0;
            Feature feature   = features[f];
            double  featureMZ = feature.AverageMZ;

            MZPeak cPeak = currentPeaks[c];

            ppmTolerance /= 2e6;

            double tolerance = cPeak.MZ * ppmTolerance;
            double lowmz     = cPeak.MZ - tolerance;

            List <Feature> featuresToAdd = new List <Feature>(cCount);

            while (true)
            {
                if (featureMZ < lowmz)
                {
                    if (++f == fCount) // Feature mz is to small, go to the next one
                    {
                        break;         // no more features, so just break out now
                    }
                    feature   = features[f];
                    featureMZ = feature.AverageMZ;
                    continue; // keep the current peak, so continue the loop right away
                }

                if (featureMZ < cPeak.MZ + tolerance)
                {
                    feature.AddPeak(cPeak, rt); // Peak matches feature, add it to the feature
                    if (!allowMultipleFeatureMatches)
                    {
                        if (++f == fCount) // Feature mz is to small, go to the next one
                        {
                            break;         // no more features, so just break out now
                        }
                        feature   = features[f];
                        featureMZ = feature.AverageMZ;
                    }
                }
                else
                {
                    // Peak didn't match any features, so save this peak to start a new feature
                    featuresToAdd.Add(new Feature(cPeak, rt));
                }

                if (++c == cCount)
                {
                    break; // no more current peaks, so just break out now
                }
                cPeak     = currentPeaks[c];
                tolerance = cPeak.MZ * ppmTolerance;
                lowmz     = cPeak.MZ - tolerance;
            }

            // Append unmatched peaks as new features
            features.AddRange(featuresToAdd);

            // Add left over peaks as new features
            while (c < cCount)
            {
                features.Add(new Feature(currentPeaks[c++], rt));
            }
        }