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); }
internal DeisotopedPeak(double monoIsotopicMass, int charge, double score) { MonoIsotopicMass = monoIsotopicMass; MonoIsotopicMassIndex = ProductScorerBasedOnDeconvolutedSpectra.GetBinNumber(MonoIsotopicMass); Charge = charge; Score = score; }
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]); }
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); } } } } }
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); } } } } }