public Aminoacids GetAminoacids() { var mod = ModificationUtils.ParseFromOutFileLine(this.Modification); var result = new Aminoacids(); mod.ForEach(m => result[m.Key].ResetMass(m.Value, m.Value)); return(result); }
//(STY* +79.96633) (M# +15.99492) (ST@ -18.00000) C=160.16523 Enzyme:Trypsin(KR) (1) public static Aminoacids ParseModificationFromOutFileLine(string line) { Dictionary <char, double> map = ModificationUtils.ParseFromOutFileLine(line); var result = new Aminoacids(); foreach (char c in map.Keys) { result[c].ResetMass(map[c], map[c]); } return(result); }
/// <summary> /// Filter spectra by quantify mode /// </summary> /// <param name="isoSpectra"></param> public void FilterSpectraByQuantifyMode(List <IIdentifiedSpectrum> isoSpectra) { if (QuantifyMode.qmModificationSite == options.Mode) { isoSpectra.RemoveAll(m => !ModificationUtils.IsModifiedSequence(m.GetMatchSequence(), options.ModifiedAminoacids)); if (isoSpectra.Any(m => m.Peptide.GetSiteProbabilities().Any(l => l.Probability > 0.0))) { isoSpectra.RemoveAll(m => m.Peptide.GetSiteProbabilities().Any(l => l.Probability < options.MinimumSiteProbability)); } else { Progress.SetMessage("There is no site probability in spectra, cannot filter spectra by minimum site probability, filter ignored."); } } else if (QuantifyMode.qmUnmodifiedPeptide == options.Mode) { isoSpectra.RemoveAll(m => { return(ModificationUtils.IsModifiedSequence(m.GetMatchSequence(), options.ModifiedAminoacids)); }); } }
public List <ModificationSiteProbability> GetSiteProbabilities() { return(ModificationUtils.ParseProbability(this.SiteProbability)); }
public virtual Dictionary <int, IIdentifiedPeptide> ParsePeptideMap(string fileName, bool isDecoy) { var suffix = isDecoy ? "_decoy" : ""; SQLiteDBHelper sqlite = new SQLiteDBHelper(fileName); Dictionary <int, IIdentifiedPeptide> result = new Dictionary <int, IIdentifiedPeptide>(); var pniReader = sqlite.ExecuteReader(string.Format("select distinct(ProcessingNodeID) from peptidescores{0}", suffix), null); if (!pniReader.Read()) { return(result); } var nodeid = pniReader.GetInt32(0); var pniScore = sqlite.ExecuteReader(string.Format("select scoreid from processingnodescores where processingnodeid={0} and ismainscore=1", nodeid), null); if (!pniScore.Read()) { return(result); } var scoreid = pniScore.GetInt32(0); Dictionary <int, IIdentifiedSpectrum> spectra = ParseSpectrumMap(fileName); var aas = ParseAminoacids(fileName); //读取肽段列表 string sqlPeptide = string.Format("select pep.SpectrumID, pep.PeptideID, pep.TotalIonsCount, pep.MatchedIonsCount, pep.ConfidenceLevel, pep.Sequence, pep.MissedCleavages, ps.ScoreValue from Peptides{0} as pep, PeptideScores{0} as ps where pep.PeptideID=ps.PeptideID and ps.ScoreID={1} order by pep.SpectrumID, pep.SearchEngineRank", suffix, scoreid); var peptideReader = sqlite.ExecuteReader(sqlPeptide, null); Progress.SetMessage("Parsing peptides{0} ...", suffix); while (peptideReader.Read()) { var specid = peptideReader.GetInt32(0); if (!spectra.ContainsKey(specid)) { throw new Exception(string.Format("Cannot find spectrum id {0}", specid)); } var pepid = peptideReader.GetInt32(1); var seq = peptideReader.GetString(5); var missedCleavage = peptideReader.GetInt32(6); var score = peptideReader.GetDouble(7); IIdentifiedSpectrum spectrum = spectra[specid]; if (spectrum.Peptides.Count == 0) { spectrum.Id = specid.ToString(); spectrum.TheoreticalIonCount = peptideReader.GetInt32(2); spectrum.MatchedIonCount = peptideReader.GetInt32(3); IdentifiedPeptide peptide = new IdentifiedPeptide(spectrum); peptide.ConfidenceLevel = peptideReader.GetInt32(4); peptide.Sequence = seq; spectrum.NumMissedCleavages = missedCleavage; spectrum.Score = score; spectrum.TheoreticalMass = aas.MonoPeptideMass(peptide.Sequence); spectrum.Rank = 1; spectrum.DeltaScore = 1.0; spectrum.FromDecoy = isDecoy; result[pepid] = peptide; continue; } else { if (score == spectrum.Score) { IIdentifiedPeptide peptide = new IdentifiedPeptide(spectrum); peptide.ConfidenceLevel = peptideReader.GetInt32(4); peptide.Sequence = seq; result[pepid] = peptide; continue; } if (seq == spectrum.Peptide.Sequence) { continue; } var dscore = (spectrum.Score - score) / spectrum.Score; if (dscore < spectrum.DeltaScore) { spectrum.DeltaScore = dscore; } } } //动态氨基酸修饰 var unexpectedModifications = new HashSet <int>(); var modMap = ParseModifications(fileName, unexpectedModifications); string sqlPeptideMod = string.Format("select PeptideID, AminoAcidModificationID, Position from PeptidesAminoacidModifications{0} order by Position desc", suffix); var pepModReader = sqlite.ExecuteReader(sqlPeptideMod, null); Progress.SetMessage("Parsing peptide modifications{0} ...", suffix); while (pepModReader.Read()) { var pepid = pepModReader.GetInt32(0); if (!result.ContainsKey(pepid)) { //Some peptides ranked lower are ignored. continue; } var modid = pepModReader.GetInt32(1); if (unexpectedModifications.Contains(modid)) { continue; } var position = pepModReader.GetInt32(2); var mod = modMap[modid]; var peptide = result[pepid]; var aminoacid = peptide.Sequence[position]; if (peptide.IsTopOne()) { var modStr = string.Format("{0} ({1})", mod.SignStr, aminoacid); if (string.IsNullOrEmpty(peptide.Spectrum.Modifications)) { peptide.Spectrum.Modifications = modStr; } else { peptide.Spectrum.Modifications = peptide.Spectrum.Modifications + "; " + modStr; } peptide.Spectrum.TheoreticalMass += mod.DeltaMass; } var modchar = mod.SignChar; var seq = peptide.Sequence; peptide.Sequence = seq.Insert(position + 1, modchar.ToString()); } //动态末端修饰 string sqlTermMod = string.Format("select PeptideID, TerminalModificationID from PeptidesTerminalModifications{0}", suffix); var termModReader = sqlite.ExecuteReader(sqlTermMod, null); Progress.SetMessage("Parsing terminal modifications{0} ...", suffix); while (termModReader.Read()) { var pepid = termModReader.GetInt32(0); if (result.ContainsKey(pepid)) { var modid = termModReader.GetInt32(1); var peptide = result[pepid]; var mod = modMap[modid]; if (peptide.IsTopOne()) { if (string.IsNullOrEmpty(peptide.Spectrum.Modifications)) { peptide.Spectrum.Modifications = mod.SignStr; } else if (mod.PositionType == 1) { peptide.Spectrum.Modifications = mod.SignStr + "; " + peptide.Spectrum.Modifications; } else { peptide.Spectrum.Modifications = peptide.Spectrum.Modifications + "; " + mod.SignStr; } peptide.Spectrum.TheoreticalMass += mod.DeltaMass; } var modchar = mod.SignChar; var seq = peptide.Sequence; if (mod.PositionType == 1) { seq = modchar.ToString() + seq; } else { seq = seq + modchar.ToString(); } peptide.Sequence = seq; } } //其他Score Progress.SetMessage("Parsing other scores{0} ...", suffix); var dcReader = sqlite.ExecuteReader(string.Format("select ps.PeptideID, pns.ScoreName, ps.ScoreValue from PeptideScores{0} as ps, ProcessingNodeScores as pns where ps.ScoreID=pns.ScoreID and pns.IsMainScore=0", suffix), null); while (dcReader.Read()) { var pepid = dcReader.GetInt32(0); if (result.ContainsKey(pepid)) { var pep = result[pepid]; if (pep.IsTopOne()) { var name = dcReader.GetString(1); var value = dcReader.GetDouble(2); if (name.Equals("SpScore")) { pep.Spectrum.SpScore = value; } else if (name.Equals("ProbabilityScore")) { pep.Spectrum.Probability = value; } } } } var pniProb = sqlite.ExecuteReader("select FieldId from CustomDataFields where DisplayName='phosphoRS Site Probabilities'", null); if (!pniProb.Read()) { Progress.SetMessage("Not phosphoylation data!"); return(result); } var fieldid = pniProb.GetInt32(0); string sqlPhospho = string.Format("select PeptideID, FieldValue from CustomDataPeptides where FieldId={0}", fieldid); var phosphoReader = sqlite.ExecuteReader(sqlPhospho, null); Progress.SetMessage("Parsing peptide phosphoylation probability ..."); while (phosphoReader.Read()) { var pepid = phosphoReader.GetInt32(0); IIdentifiedPeptide peptide; if (!result.TryGetValue(pepid, out peptide)) { continue; } peptide.SiteProbability = ModificationUtils.FilterSiteProbability(peptide.Sequence, phosphoReader.GetString(1)); } return(result); }