//Returns an empirical formula string with or without PTMs. //Accounts for the PTMs using the Averagine formula. //Parses out the PTMs and calculates the empirical formula for the known unmodified sequence. //Adds or subtracts the PTM formula from the sequence formula based on the overall mass of the PTMs public string GetEmpiricalFormulaFromSequence(string code, bool cysteinesAreModified = false) { var ptmFormula = ""; var sequenceFormula = ""; var empiricalFormula = ""; var ptmMass = PtmMassFromCode(code); ptmFormula = IsotopicDistributionCalculator.Instance.GetAveragineFormulaAsString(Math.Abs(ptmMass), false); sequenceFormula = SequenceToEmpiricalFormula(code, cysteinesAreModified); if (ptmMass < 0) { empiricalFormula = EmpiricalFormulaUtilities.SubtractFormula(sequenceFormula, ptmFormula); } else { empiricalFormula = EmpiricalFormulaUtilities.AddFormula(sequenceFormula, ptmFormula); } //TEMPORARY HANDLING OF BAD TARGETS WITH PTM > SEQUENCE //CHECK THE UPDATEMISSINGTARGETINFO IN IQTARGETUTILITES WHEN CHANGING if (String.IsNullOrEmpty(empiricalFormula)) { empiricalFormula = "C0H0N0O0S0"; } return(empiricalFormula); }
public void ProteinSequenceToMassHugePTMTest() { var parser = new IqCodeParser(); var proteoform = "M.V(HLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVC)[-11849.17]VLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH."; var trueMass = 4008.08; // only one significant decimal really. could be 4008.07 or .08 Can't tell yet var unmodifiedProteoform = "M.VHLTPEEKSAVTALWGKVNVDEVGGEALGRLLVVYPWTQRFFESFGDLSTPDAVMGNPKVKAHGKKVLGAFSDGLAHLDNLKGTFATLSELHCDKLHVDPENFRLLGNVLVCVLAHHFGKEFTPPVQAAYQKVVAGVANALAHKYH."; var ptm = "[-11849.17]"; var proteoformComposition = parser.GetEmpiricalFormulaFromSequence(proteoform); var unmodifiedProteoformComposition = parser.GetEmpiricalFormulaFromSequence(unmodifiedProteoform); var ptmComposition = parser.GetEmpiricalFormulaFromSequence(ptm); var difference = EmpiricalFormulaUtilities.SubtractFormula(unmodifiedProteoformComposition, ptmComposition); Console.WriteLine(proteoformComposition); Console.WriteLine(difference); Assert.AreEqual(proteoformComposition, difference); var differenceMass = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(difference); var proteformMass = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(proteoformComposition); var unmodifiedProteoformMass = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(unmodifiedProteoformComposition); Console.WriteLine(unmodifiedProteoformMass); var ptmMass = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(ptmComposition); Console.WriteLine(ptmMass); var conversionFirst = unmodifiedProteoformMass - ptmMass; Console.WriteLine(conversionFirst); Assert.AreEqual(trueMass, conversionFirst, 0.1); Assert.AreEqual(trueMass, differenceMass, .1); Assert.AreEqual(trueMass, proteformMass, .1); }
public void MsAlignCodeParserTest() { var parser = new IqCodeParser(); var examplemod = "A.AENVVHHKLDGMPISEAVEINAGNNLVF(LSGKVPTKKSADAPEGELASYGNTE)[713.72]EQTINVLEQIKTNLNNLGLDMKDVVKMQVFLVGGEENNGTMDFKGFMNGYSKFYDASKTNQLPARSAFQVA(K)[1.02]LANPAWRVEIEVIAVRPAK."; var checkmass = "[714.74]"; var examplenomod = "A.AENVVHHKLDGMPISEAVEINAGNNLVLSGKVPTKKSADAPEGELASYGNTEFEQTINVLEQIKTNLNNLGLDMKDVVKMQVFLVGGEENNGTMDFKGFMNGYSKFYDASKTNQLPARSAFQVAKLANPAWRVEIEVIAVRPAK."; var examplemodresult = parser.GetEmpiricalFormulaFromSequence(examplemod); var checkmassresult = parser.GetEmpiricalFormulaFromSequence(checkmass); var examplenomodresult = parser.GetEmpiricalFormulaFromSequence(examplenomod); Console.WriteLine(examplemodresult); Console.WriteLine(checkmassresult); Console.WriteLine(examplenomodresult); var difference = EmpiricalFormulaUtilities.SubtractFormula(examplemodresult, checkmassresult); Assert.AreEqual(examplenomodresult, difference); }
public void MsgfCodeParserTest() { var parser = new IqCodeParser(); var examplemod = "+144.102PRYRK+144.102RTPVSLY+79.966QK+144.102T+79.966PNGEK+144.102PYEC+57.021GEC+57.021GK+144.102-202"; var checkmass = "+792.484"; var examplenomod = "PRYRKRTPVSLYQKTPNGEKPYECGECGK"; var examplemodresult = parser.GetEmpiricalFormulaFromSequence(examplemod); var checkmassresult = parser.GetEmpiricalFormulaFromSequence(checkmass); var examplenomodresult = parser.GetEmpiricalFormulaFromSequence(examplenomod); Console.WriteLine(examplemodresult); Console.WriteLine(checkmassresult); Console.WriteLine(examplenomodresult); var difference = EmpiricalFormulaUtilities.SubtractFormula(examplemodresult, checkmassresult); Assert.AreEqual(examplenomodresult, difference); }
public void PyroglutamateTest1() { const string testPeptide = "SAMPLER"; var peptideUtils = new PeptideUtils(); var formula = peptideUtils.GetEmpiricalFormulaForPeptideSequence(testPeptide); const string pyroglutamateMod = "H3N1"; var empiricalFormula = EmpiricalFormulaUtilities.SubtractFormula(formula, pyroglutamateMod); var massUnmodified = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(formula); var massModified = EmpiricalFormulaUtilities.GetMonoisotopicMassFromEmpiricalFormula(empiricalFormula); var diff = Math.Round(massModified - massUnmodified, 1, MidpointRounding.AwayFromZero); Console.WriteLine(formula + "\t" + massUnmodified); Console.WriteLine(empiricalFormula + "\t" + massModified); Console.WriteLine("diff= " + diff); Assert.AreEqual(-17.0, diff); }
//Returns an empirical formula string with or without PTMs. //Accounts for the PTMs using the Averagine formula. //Parses out the PTMs and calculates the empirical formula for the known unmodified sequence. //Adds or subtracts the PTM formula from the sequence formula based on the overall mass of the PTMs public string GetEmpiricalFormulaFromSequence(string code) { string PTM_Formula = ""; string SequenceFormula = ""; string EmpiricalFormula = ""; double ptm_mass = PTMMassFromCode(code); PTM_Formula = IsotopicDistributionCalculator.Instance.GetAveragineFormulaAsString(Math.Abs(ptm_mass), false); SequenceFormula = SequenceToEmpiricalFormula(code); if (ptm_mass < 0) { EmpiricalFormula = EmpiricalFormulaUtilities.SubtractFormula(SequenceFormula, PTM_Formula); } else { EmpiricalFormula = EmpiricalFormulaUtilities.AddFormula(SequenceFormula, PTM_Formula); } return(EmpiricalFormula); }
public string GetEmpiricalFormulaForSequenceWithMods(string code) { // Check for pyroglutamate modification var containsPyroglutamateMod = false; if (_modPyroglutamate.IsMatch(code)) { containsPyroglutamateMod = true; // Remove the modification from the string var pieces = _modPyroglutamate.Match(code).Groups; code = pieces["prefix"].Value + pieces["modified"].Value + pieces["suffix"].Value; } // Check for acetylation modification var containsAcetylationMod = false; if (_modAcetylation.IsMatch(code)) { containsAcetylationMod = true; // Remove the modification from the string var pieces = _modAcetylation.Match(code).Groups; code = pieces["prefix"].Value + pieces["modified"].Value + pieces["suffix"].Value; } // Check for phosphorylation modification // TODO: this function does not account for the fact that phosphorylation could occur multiple times var containsPhosphorylationMod = false; if (_modPhosphorylation.IsMatch(code)) { containsPhosphorylationMod = true; // Remove the modification from the string var pieces = _modPhosphorylation.Match(code).Groups; code = pieces["prefix"].Value + pieces["modified"].Value + pieces["suffix"].Value; } // If the peptide sequence still has modifications, we can't get the empirical formula if (code.Contains("(")) { return(String.Empty); } // Get the empirical formula as if the peptide sequence was unmodified var empiricalFormula = _peptideUtils.GetEmpiricalFormulaForPeptideSequence(code); // Apply modifications to empirical formula if (containsPyroglutamateMod) { empiricalFormula = EmpiricalFormulaUtilities.SubtractFormula(empiricalFormula, "H3N1"); } if (containsAcetylationMod) { empiricalFormula = EmpiricalFormulaUtilities.AddFormula(empiricalFormula, "C2H2O"); } if (containsPhosphorylationMod) { empiricalFormula = EmpiricalFormulaUtilities.AddFormula(empiricalFormula, "HPO3"); } return(empiricalFormula); }