public PepXmlModifications ParseModifications(XElement searchSummary) { PepXmlModifications result = new PepXmlModifications(); var aminoacid_modifications = searchSummary.FindDescendants("aminoacid_modification"); foreach (var am in aminoacid_modifications) { PepXmlModificationItem item = new PepXmlModificationItem(); item.IsVariable = am.Attribute("variable").Value.Equals("Y"); item.IsAminoacid = true; item.IsProteinTerminal = false; item.IsTerminalN = false; item.Aminoacid = am.Attribute("aminoacid").Value; item.Mass = MyConvert.ToDouble(am.Attribute("mass").Value); item.MassDiff = MyConvert.ToDouble(am.Attribute("massdiff").Value); result.Add(item); } var terminal_modifications = searchSummary.FindDescendants("terminal_modification"); foreach (var am in terminal_modifications) { PepXmlModificationItem item = new PepXmlModificationItem(); item.IsVariable = am.Attribute("variable").Value.Equals("Y"); item.IsAminoacid = false; item.IsProteinTerminal = am.Attribute("protein_terminus").Value.Equals("Y"); item.IsTerminalN = am.Attribute("terminus").Value.Equals("n");; item.Mass = MyConvert.ToDouble(am.Attribute("mass").Value); item.MassDiff = MyConvert.ToDouble(am.Attribute("massdiff").Value); result.Add(item); } result.AssignModificationChar(); return(result); }
private void ParseSearchHit(IIdentifiedSpectrum sph, XElement searchHit, PepXmlModifications ppmods) { var sp = new IdentifiedPeptide(sph); var mod_info = searchHit.FindFirstDescendant("modification_info"); string seq = searchHit.Attribute("peptide").Value; if (mod_info != null) { var modified_peptide = mod_info.Attribute("modified_peptide"); if (modified_peptide != null && !modReg.Match(modified_peptide.Value).Success) { seq = modified_peptide.Value; } else { var pureSeq = seq; var modaas = PeptideProphetUtils.ParseModificationAminoacidMass(mod_info); if (modaas != null && modaas.Count > 0) { modaas.Reverse(); foreach (var modaa in modaas) { string modchar = FindModificationChar(ppmods, modaa, pureSeq); seq = seq.Insert(modaa.Position, modchar); } } } } if (searchHit.Attribute("peptide_prev_aa") != null) { sp.Sequence = searchHit.Attribute("peptide_prev_aa").Value + "." + seq + "." + searchHit.Attribute("peptide_next_aa").Value; } else { sp.Sequence = seq; } sph.NumMissedCleavages = GetAttributeValue(searchHit, "num_missed_cleavages", 0); sph.NumProteaseTermini = GetAttributeValue(searchHit, "num_tol_term", 2); sp.AddProtein(searchHit.Attribute("protein").Value); var NumTotalProteins = int.Parse(searchHit.Attribute("num_tot_proteins").Value); if (NumTotalProteins > 1) { var alternative_proteins = searchHit.FindDescendants("alternative_protein"); foreach (var alternative_protein in alternative_proteins) { sp.AddProtein(alternative_protein.Attribute("protein").Value); } } ParseScoreAndOtherInformation(sph, searchHit); }
private void WriteModifications(StreamWriter sw, PepXmlModifications sp) { var aas = new Aminoacids(); foreach (var ssm in sp) { if (ssm.MassDiff != 0.0) { if (ssm.IsAminoacid) { sw.Write(" <aminoacid_modification aminoacid=\"{0}\" massdiff=\"{1:0.0000}\" mass=\"{2:0.0000}\" variable=\"{3}\"", ssm.Aminoacid, ssm.MassDiff, ssm.Mass, ssm.IsVariable ? "Y" : "N"); } else { sw.Write(" <terminal_modification terminus=\"{0}\" massdiff=\"{1:0.0000}\" mass=\"{2:0.0000}\" variable=\"{3}\" protein_terminus=\"{4}\"", ssm.IsTerminalN ? "n" : "c", ssm.MassDiff, ssm.Mass, ssm.IsVariable ? "Y" : "N", ssm.IsProteinTerminal ? (ssm.IsTerminalN ? "n" : "c") : ""); } if (string.IsNullOrEmpty(ssm.Symbol)) { sw.WriteLine("/>"); } else { sw.WriteLine(" symbol=\"{0}\"/>", ssm.Symbol); } } } }
protected virtual string FindModificationChar(PepXmlModifications ppmods, ModificationAminoacidMass modaa, string pureSeq) { return(ppmods.FindModificationChar(modaa.Mass)); }