示例#1
0
        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));
                });
            }
        }
示例#4
0
 public List <ModificationSiteProbability> GetSiteProbabilities()
 {
     return(ModificationUtils.ParseProbability(this.SiteProbability));
 }
示例#5
0
        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);
        }