示例#1
0
        public IEnumerable <int> GetMatchingMs2ScanNums(double sequenceMass)
        {
            var         sequenceMassBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(sequenceMass);
            IList <int> ms2ScanNums;

            if (_sequenceMassBinToScanNumsMap.TryGetValue(sequenceMassBinNum, out ms2ScanNums))
            {
                return(ms2ScanNums);
            }

            ms2ScanNums = new List <int>();
            var averagineEnvelope        = Averagine.GetIsotopomerEnvelope(sequenceMass);
            var mostAbundantIsotopeIndex = averagineEnvelope.MostAbundantIsotopeIndex;

            for (var precursorCharge = _minCharge; precursorCharge <= _maxCharge; precursorCharge++)
            {
                var mostAbundantIsotopeMz = Ion.GetIsotopeMz(sequenceMass, precursorCharge, mostAbundantIsotopeIndex);
                var binNumber             = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(mostAbundantIsotopeMz);
                IList <ChargeAndScanNum> chargeAndScanNumList;
                if (!_mostAbundantIsotopeMzIndexToChargeAndScanNums.TryGetValue(binNumber, out chargeAndScanNumList))
                {
                    continue;
                }
                foreach (var chargeAndScanNum in chargeAndScanNumList)
                {
                    if (chargeAndScanNum.Charge == precursorCharge)
                    {
                        ms2ScanNums.Add(chargeAndScanNum.ScanNum);
                    }
                }
            }

            _sequenceMassBinToScanNumsMap.Add(sequenceMassBinNum, ms2ScanNums);
            return(ms2ScanNums);
        }
示例#2
0
 internal DeisotopedPeak(double monoIsotopicMass, int charge, double score)
 {
     MonoIsotopicMass      = monoIsotopicMass;
     MonoIsotopicMassIndex = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(MonoIsotopicMass);
     Charge = charge;
     Score  = score;
 }
示例#3
0
        public IEnumerable <int> GetMatchingMs2ScanNums(double sequenceMass)
        {
            var         sequenceMassBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(sequenceMass);
            IList <int> ms2ScanNums;

            if (_sequenceMassBinToScanNumsMap.TryGetValue(sequenceMassBinNum, out ms2ScanNums))
            {
                return(ms2ScanNums);
            }
            return(new int[0]);
        }
示例#4
0
        private readonly Dictionary <int, IList <int> > _sequenceMassBinToScanNumsMap; // mass -> scan numbers

        private void PrecomputePossibleSequenceMasses()
        {
            var ms2ScanNums = _run.GetScanNumbers(2);

            foreach (var ms2ScanNum in ms2ScanNums)
            {
                var possibleSequenceMasses = GetPossibleSequenceMasses(ms2ScanNum);
                var binNumHash             = new HashSet <int>();
                foreach (var sequenceMass in possibleSequenceMasses)
                {
                    var dMass     = sequenceMass * _ppmTolerance * 1e-6;
                    var minMass   = sequenceMass - dMass;
                    var maxMass   = sequenceMass + dMass;
                    var minBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(minMass);
                    var maxBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(maxMass);
                    for (var binNum = minBinNum; binNum <= maxBinNum; binNum++)
                    {
                        if (!binNumHash.Add(binNum))
                        {
                            continue;
                        }
                        IList <int> scanNums;
                        if (_sequenceMassBinToScanNumsMap.TryGetValue(binNum, out scanNums))
                        {
                            scanNums.Add(ms2ScanNum);
                        }
                        else
                        {
                            scanNums = new List <int> {
                                ms2ScanNum
                            };
                            _sequenceMassBinToScanNumsMap.Add(binNum, scanNums);
                        }
                    }
                }
            }
        }
示例#5
0
        private void PrecomputeMostAbundantMzToMatches()
        {
            var ms2ScanNums = _run.GetScanNumbers(2);

            _mostAbundantIsotopeMzIndexToChargeAndScanNums = new Dictionary <int, IList <ChargeAndScanNum> >();
            foreach (var ms2ScanNum in ms2ScanNums)
            {
                var possibleSequenceMatches = GetPossibleSequenceMatches(ms2ScanNum);
                foreach (var match in possibleSequenceMatches)
                {
                    var mostAbundantIsotopeMz = match.MostAbundantIsotopeMz;
                    var charge    = match.Charge;
                    var deltaMz   = mostAbundantIsotopeMz * _ppmTolerance * 1e-6;
                    var minMz     = mostAbundantIsotopeMz - deltaMz;
                    var maxMz     = mostAbundantIsotopeMz + deltaMz;
                    var minBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(minMz);
                    var maxBinNum = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(maxMz);
                    for (var binNum = minBinNum; binNum <= maxBinNum; binNum++)
                    {
                        IList <ChargeAndScanNum> chargeAndScanNums;
                        if (_mostAbundantIsotopeMzIndexToChargeAndScanNums.TryGetValue(binNum,
                                                                                       out chargeAndScanNums))
                        {
                            chargeAndScanNums.Add(new ChargeAndScanNum(charge, ms2ScanNum));
                        }
                        else
                        {
                            chargeAndScanNums = new List <ChargeAndScanNum> {
                                new ChargeAndScanNum(charge, ms2ScanNum)
                            };
                            _mostAbundantIsotopeMzIndexToChargeAndScanNums.Add(binNum, chargeAndScanNums);
                        }
                    }
                }
            }
        }