diff --git a/EngineLayer/SpectralLibrarySearch/LibrarySpectrum.cs b/EngineLayer/SpectralLibrarySearch/LibrarySpectrum.cs index 2650f5b4d..13b8cba61 100644 --- a/EngineLayer/SpectralLibrarySearch/LibrarySpectrum.cs +++ b/EngineLayer/SpectralLibrarySearch/LibrarySpectrum.cs @@ -48,10 +48,16 @@ public override string ToString() { double intensityFraction = matchedIon.Intensity / maxIntensity; + string neutralLoss = null; + if (matchedIon.NeutralTheoreticalProduct.NeutralLoss != 0) + { + neutralLoss = "-" + matchedIon.NeutralTheoreticalProduct.NeutralLoss; + } + spectrum.Append("\n"+matchedIon.Mz + "\t" + intensityFraction + "\t" + "\"" + matchedIon.NeutralTheoreticalProduct.ProductType.ToString() + matchedIon.NeutralTheoreticalProduct.FragmentNumber.ToString() + "^" + - matchedIon.Charge + "/" + 0 + "ppm" + "\""); + matchedIon.Charge + neutralLoss + "/" + 0 + "ppm" + "\""); } return spectrum.ToString(); diff --git a/EngineLayer/SpectralLibrarySearch/SpectralLibrary.cs b/EngineLayer/SpectralLibrarySearch/SpectralLibrary.cs index f2d7d61e5..dc0c0f42a 100644 --- a/EngineLayer/SpectralLibrarySearch/SpectralLibrary.cs +++ b/EngineLayer/SpectralLibrarySearch/SpectralLibrary.cs @@ -26,6 +26,12 @@ public class SpectralLibrary { "Carbamidomethyl", "[Common Fixed:Carbamidomethyl on C]" } }; + private static Dictionary pDeepToMetaMorpheusModDictionary = new Dictionary + { + { "Oxidation","[Common Variable:Oxidation on M]" }, + {"CAM", "[Common Fixed:Carbamidomethyl on C]" } + }; + public SpectralLibrary(List pathsToLibraries) { LibraryPaths = pathsToLibraries; @@ -149,7 +155,14 @@ private LibrarySpectrum ReadSpectrumFromLibraryFile(string path, long byteOffset reader.DiscardBufferedData(); // return the library spectrum - return ReadLibrarySpectrum(reader); + if (path.Contains("pdeep")) + { + return ReadLibrarySpectrum_pDeep(reader); + } + else + { + return ReadLibrarySpectrum(reader); + } } private LibrarySpectrum ReadLibrarySpectrum(StreamReader reader, bool onlyReadHeader = false) @@ -159,6 +172,7 @@ private LibrarySpectrum ReadLibrarySpectrum(StreamReader reader, bool onlyReadHe char[] commentSplit = new char[] { ' ', ':', '=' }; char[] modSplit = new char[] { '=', '/' }; char[] fragmentSplit = new char[] { '\t', '\"', ')', '/' }; + char[] neutralLossSplit = new char[] { '-' }; bool readingPeaks = false; string sequence = null; @@ -316,6 +330,13 @@ private LibrarySpectrum ReadLibrarySpectrum(StreamReader reader, bool onlyReadHe // read fragment type, number Match regexMatchResult = IonParserRegex.Match(split[2]); + double neutralLoss = 0; + if (split[2].Contains("-")) + { + String[] neutralLossInformation = split[2].Split(neutralLossSplit, StringSplitOptions.RemoveEmptyEntries).ToArray(); + neutralLoss = double.Parse(neutralLossInformation[1]); + } + string fragmentType = regexMatchResult.Groups[1].Value; int fragmentNumber = int.Parse(regexMatchResult.Groups[2].Value); int fragmentCharge = 1; @@ -330,6 +351,120 @@ private LibrarySpectrum ReadLibrarySpectrum(StreamReader reader, bool onlyReadHe //TODO: figure out terminus FragmentationTerminus terminus = (FragmentationTerminus)Enum.Parse(typeof(FragmentationTerminus), "None", true); + //TODO: figure out amino acid position + var product = new Product(peakProductType, terminus, experMz, fragmentNumber, 0, neutralLoss); + + matchedFragmentIons.Add(new MatchedFragmentIon(ref product, experMz, experIntensity, fragmentCharge)); + } + } + + return new LibrarySpectrum(sequence, precursorMz, z, matchedFragmentIons, rt); + } + + private LibrarySpectrum ReadLibrarySpectrum_pDeep(StreamReader reader, bool onlyReadHeader = false) + { + char[] nameSplit = new char[] { '/', '_' }; + char[] mwSplit = new char[] { ':' }; + char[] commentSplit = new char[] { ' ', ':', '=' }; + char[] modSplit = new char[] { '/', '(', ')' }; + char[] fragmentSplit = new char[] { '\t', '/' }; + + bool readingPeaks = false; + string sequence = null; + int z = 2; + double precursorMz = 0; + double rt = 0; + List matchedFragmentIons = new List(); + + while (reader.Peek() > 0) + { + string line = reader.ReadLine(); + string[] split; + + if (line.StartsWith("Name", StringComparison.InvariantCultureIgnoreCase)) + { + if (sequence != null) + { + return new LibrarySpectrum(sequence, precursorMz, z, matchedFragmentIons, rt); + } + + split = line.Split(nameSplit); + + // get sequence + sequence = split[0].Replace("Name:", string.Empty).Trim(); + + // get charge + z = int.Parse(split[1].Trim()); + + string[] mods = split[2].Split(modSplit, StringSplitOptions.RemoveEmptyEntries); + for (int i = mods.Length - 1; i > 0; i--) + { + string[] modInfo = mods[i].Split(','); + int index = Convert.ToInt32(modInfo[0]); + string mod = modInfo[2]; + string metaMorpheusMod = pDeepToMetaMorpheusModDictionary[mod]; + //add the mod into the sequence + string leftSeq = sequence.Substring(0, index + 1); + string rightSeq = sequence.Substring(index + 1); + sequence = leftSeq + metaMorpheusMod + rightSeq; + } + + } + else if (line.StartsWith("Comment", StringComparison.InvariantCultureIgnoreCase)) + { + split = line.Split(commentSplit); + + // get precursor m/z in comment + int indOfParent = Array.IndexOf(split, "Parent"); + if (indOfParent > 0) + { + precursorMz = double.Parse(split[indOfParent + 1]); + } + + // get RT + int indOfRt = Array.IndexOf(split, "RTInSeconds"); + if (indOfRt > 0) + { + rt = double.Parse(split[indOfRt + 1]); + } + } + else if (line.StartsWith("Num peaks", StringComparison.InvariantCultureIgnoreCase)) + { + if (onlyReadHeader) + { + return new LibrarySpectrum(sequence, precursorMz, z, matchedFragmentIons, rt); + } + + // this assumes that the peaks are listed after the "Num peaks" line + readingPeaks = true; + } + else if (readingPeaks && line != "") + { + split = line.Split(fragmentSplit, StringSplitOptions.RemoveEmptyEntries); + + // read fragment m/z + var experMz = double.Parse(split[0], CultureInfo.InvariantCulture); + + // read fragment intensity + var experIntensity = double.Parse(split[1], CultureInfo.InvariantCulture); + + // read fragment type, number + + string fragmentType = split[2].ToCharArray()[0].ToString(); + int fragmentNumber = int.Parse(new string(split[2].Split(new char[] { '^' })[0].Where(Char.IsDigit).ToArray())); + int fragmentCharge = 1; + + + if (split[2].Contains('^')) + { + fragmentCharge = int.Parse(split[2].Split('^')[1]); + } + + ProductType peakProductType = (ProductType)Enum.Parse(typeof(ProductType), fragmentType, true); + + //TODO: figure out terminus + FragmentationTerminus terminus = (FragmentationTerminus)Enum.Parse(typeof(FragmentationTerminus), "None", true); + //TODO: figure out amino acid position var product = new Product(peakProductType, terminus, experMz, fragmentNumber, 0, 0); @@ -360,7 +495,15 @@ private void IndexSpectralLibrary(string path) reader.DiscardBufferedData(); // parse the header - var libraryItem = ReadLibrarySpectrum(reader, onlyReadHeader: true); + LibrarySpectrum libraryItem; + if (path.Contains("pdeep")) + { + libraryItem = ReadLibrarySpectrum_pDeep(reader, onlyReadHeader: true); + } + else + { + libraryItem = ReadLibrarySpectrum(reader, onlyReadHeader: true); + } // add the spectrum to the index SequenceToFileAndLocation.TryAdd(libraryItem.Name, (path, byteOffset)); diff --git a/Test/SpectralLibraryReaderTest.cs b/Test/SpectralLibraryReaderTest.cs index 1c60770ca..9af8f7d3a 100644 --- a/Test/SpectralLibraryReaderTest.cs +++ b/Test/SpectralLibraryReaderTest.cs @@ -148,5 +148,182 @@ public static void SpectralLibrarySearchTest() Directory.Delete(outputDir, true); } + + [Test] + public static void SpectralLibraryReaderTestNeutralLoss() + { + var path = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\SpectralLibrarySearch\spectralLibraryNeutralLossTest.msp"); + + var testLibraryWithoutDecoy = new SpectralLibrary(new List { path }); + var librarySpectra = testLibraryWithoutDecoy.GetAllLibrarySpectra().ToList(); + Assert.That(librarySpectra[0].MatchedFragmentIons[9].NeutralTheoreticalProduct.NeutralLoss == 97.976895573); + Assert.That(librarySpectra[0].MatchedFragmentIons[11].NeutralTheoreticalProduct.NeutralLoss == 97.976895573); + Assert.That(librarySpectra[0].MatchedFragmentIons[13].NeutralTheoreticalProduct.NeutralLoss == 97.976895573); + Assert.That(librarySpectra[0].MatchedFragmentIons[23].NeutralTheoreticalProduct.NeutralLoss == 97.976895573); + + testLibraryWithoutDecoy.TryGetSpectrum("ASVSELAC[Common Fixed:Carbamidomethyl on C]IYSALILHDDEVTVTEDKINALIKAAGVNVEPFWPGLFAKALANVNIGSLIC[Common Fixed:Carbamidomethyl on C]NVGAGGPAPAAGAAPAGGPAPSTAAAPAEEKKVEAKKEES[Common Biological:Phosphorylation on S]EES[Common Biological:Phosphorylation on S]DDDMGFGLFD", 11, out var test1); + Assert.AreEqual(test1.ChargeState, 11); + var frags = new List<(double mz, double intensity, ProductType ProductType, int fragmentNumber, int charge, double neutralLoss)> + { + (474.22253552109225, 0.12327031966337068, ProductType.b, 5, 1, 0.0), + (598.2911881692844, 0.17637685313108434, ProductType.y, 5, 1, 0.0), + (587.3078660257297, 0.26448833020105406, ProductType.b, 6, 1, 0.0), + (655.3122852061485, 0.2573965224084584, ProductType.y, 6, 1, 0.0), + (786.3547054957799, 0.5973180470179946, ProductType.y, 7, 1, 0.0), + (901.3828669653562, 0.1394747476004537, ProductType.y, 8, 1, 0.0), + (931.4665832519531, 0.1434341615825174, ProductType.b, 9, 1, 0.0), + (1298.4420166015627, 0.04799051344737827, ProductType.y, 11, 1, 0.0), + (1194.1036493343909, 0.16497897552735782, ProductType.b, 22, 2, 0.0), + (1412.6153999317123, 0.059408140384558945, ProductType.y, 24, 2, 97.976895573), + + (1610.16612195462, 0.06598126929193648, ProductType.y, 27, 2, 0.0), + (1561.176395469285, 0.3655719849041352, ProductType.y, 27, 2, 97.976895573), + (1596.6949731527957, 0.1196248007420883, ProductType.y, 28, 2,97.976895573), + (1632.2140387967154, 0.1134099785167373, ProductType.y, 29, 2, 97.976895573), + (1239.8634635821659, 0.19969145903784855, ProductType.y, 33, 3, 0.0), + (1207.2033996967743, 0.4866798941848081, ProductType.y, 33, 3, 97.976895573), + (1810.301461311722, 0.2822226465462767, ProductType.y, 33, 2, 97.976895573), + (1282.2420159220214, 0.06365769264631967, ProductType.y, 36, 3, 97.976895573), + (1333.9057047796402, 0.04957330666530949, ProductType.y, 37, 3, 0.0), + (1042.7038942258248, 0.10714201465676373, ProductType.y, 39, 4, 0.0), + (1389.9361001454733, 0.20027716863748268, ProductType.y, 39, 3, 0.0), + (1018.2100179729548, 0.23609364592477405, ProductType.y, 39, 4, 97.976895573), + (1357.2775984749799, 1, ProductType.y, 39, 3, 97.976895573), + (1503.354187325224, 0.060227438209151066, ProductType.y, 45, 3, 97.976895573) + }; + + for (int i = 0; i < frags.Count; i++) + { + var frag = frags[i]; + var readFrag = test1.MatchedFragmentIons[i]; + + Assert.That(frag.mz == readFrag.Mz); + Assert.That(frag.intensity == readFrag.Intensity); + Assert.That(frag.ProductType == readFrag.NeutralTheoreticalProduct.ProductType); + Assert.That(frag.fragmentNumber == readFrag.NeutralTheoreticalProduct.FragmentNumber); + Assert.That(frag.charge == readFrag.Charge); + Assert.That(frag.neutralLoss == readFrag.NeutralTheoreticalProduct.NeutralLoss); + } + + // write the library w/ the ToString method + var writtenPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\testLibraryToString.msp"); + var str = librarySpectra.SelectMany(p => p.ToString().Split(new char[] { '\n' })); + File.WriteAllLines(writtenPath, str); + + testLibraryWithoutDecoy.CloseConnections(); + + // read the written library and make sure the results are readable + testLibraryWithoutDecoy = new SpectralLibrary(new List { writtenPath }); + librarySpectra = testLibraryWithoutDecoy.GetAllLibrarySpectra().ToList(); + + Assert.That(librarySpectra.Count == 1); + + testLibraryWithoutDecoy.TryGetSpectrum("ASVSELAC[Common Fixed:Carbamidomethyl on C]IYSALILHDDEVTVTEDKINALIKAAGVNVEPFWPGLFAKALANVNIGSLIC[Common Fixed:Carbamidomethyl on C]NVGAGGPAPAAGAAPAGGPAPSTAAAPAEEKKVEAKKEES[Common Biological:Phosphorylation on S]EES[Common Biological:Phosphorylation on S]DDDMGFGLFD", 11, out test1); + + Assert.AreEqual(test1.ChargeState, 11); + double maxOfIntensity = frags.Select(p => p.intensity).ToList().Max(); + for (int i = 0; i < frags.Count; i++) + { + var frag = frags[i]; + var readFrag = test1.MatchedFragmentIons[i]; + + Assert.That(frag.mz == readFrag.Mz); + Assert.That((frag.intensity / maxOfIntensity) == readFrag.Intensity); + Assert.That(frag.ProductType == readFrag.NeutralTheoreticalProduct.ProductType); + Assert.That(frag.fragmentNumber == readFrag.NeutralTheoreticalProduct.FragmentNumber); + Assert.That(frag.charge == readFrag.Charge); + Assert.That(frag.neutralLoss == readFrag.NeutralTheoreticalProduct.NeutralLoss); + } + + testLibraryWithoutDecoy.CloseConnections(); + File.Delete(writtenPath); + } + + [Test] + public static void SpectralLibraryReaderTest_pDeep() + { + var path = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\SpectralLibrarySearch\yeast2fake_pdeep_lib.msp"); + + var testLibraryWithoutDecoy = new SpectralLibrary(new List { path }); + var librarySpectra = testLibraryWithoutDecoy.GetAllLibrarySpectra().ToList(); + + Assert.That(librarySpectra.Count == 5); + Assert.That(testLibraryWithoutDecoy.TryGetSpectrum("VGIVPGEVIAPGM[Common Variable:Oxidation on M]R", 3, out var spectrum1)); + Assert.That(testLibraryWithoutDecoy.TryGetSpectrum("C[Common Fixed:Carbamidomethyl on C]TSC[Common Fixed:Carbamidomethyl on C]NGQGIKFVTR", 3, out var spectrum2)); + Assert.AreEqual(spectrum2.PrecursorMz, 543.2608252287667); + Assert.AreEqual(spectrum2.RetentionTime, 2789.812255859375); + + testLibraryWithoutDecoy.TryGetSpectrum("YHPDKNPSEEAAEK", 3, out var test1); + + Assert.AreEqual(test1.PrecursorMz, 538.9179945621); + Assert.AreEqual(test1.RetentionTime, 1361.375244140625); + Assert.AreEqual(test1.ChargeState, 3); + + var frags = new List<(double mz, double intensity, ProductType ProductType, int fragmentNumber, int charge, double ppm)> + { + (301.1295080000, 10000.0, ProductType.b, 2, 1, 0.0), + (657.8122378432, 1102.3, ProductType.y, 12, 2, 0.0), + (974.4425296863, 1476.0, ProductType.y, 9, 1, 0.0), + (860.3996026863, 7228.2, ProductType.y, 8, 1, 0.0), + (763.3468386863, 1201.9, ProductType.y, 7, 1, 0.0), + (418.2296246863, 1178.9, ProductType.y, 4, 1, 0.0), + (347.1925106863, 1042.8, ProductType.y, 3, 1, 0.0) + }; + + for (int i = 0; i < frags.Count; i++) + { + var frag = frags[i]; + var readFrag = test1.MatchedFragmentIons[i]; + + Assert.That(frag.mz == readFrag.Mz); + Assert.That(frag.intensity == readFrag.Intensity); + Assert.That(frag.ProductType == readFrag.NeutralTheoreticalProduct.ProductType); + Assert.That(frag.fragmentNumber == readFrag.NeutralTheoreticalProduct.FragmentNumber); + Assert.That(frag.charge == readFrag.Charge); + //Assert.That(frag.ppm == readFrag.MassErrorPpm); + } + + // write the library w/ the ToString method + var writtenPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\testLibraryToString.msp"); + var str = librarySpectra.SelectMany(p => p.ToString().Split(new char[] { '\n' })); + File.WriteAllLines(writtenPath, str); + + testLibraryWithoutDecoy.CloseConnections(); + + // read the written library and make sure the results are readable + testLibraryWithoutDecoy = new SpectralLibrary(new List { writtenPath }); + librarySpectra = testLibraryWithoutDecoy.GetAllLibrarySpectra().ToList(); + + Assert.That(librarySpectra.Count == 5); + Assert.That(testLibraryWithoutDecoy.TryGetSpectrum("VGIVPGEVIAPGM[Common Variable:Oxidation on M]R", 3, out var spectrum3)); + Assert.That(testLibraryWithoutDecoy.TryGetSpectrum("C[Common Fixed:Carbamidomethyl on C]TSC[Common Fixed:Carbamidomethyl on C]NGQGIKFVTR", 3, out var spectrum4)); + Assert.AreEqual(spectrum4.PrecursorMz, 543.2608252287667); + Assert.AreEqual(spectrum4.RetentionTime, 2789.812255859375); + + + testLibraryWithoutDecoy.TryGetSpectrum("YHPDKNPSEEAAEK", 3, out test1); + + Assert.AreEqual(test1.PrecursorMz, 538.9179945621); + Assert.AreEqual(test1.RetentionTime, 1361.375244140625); + Assert.AreEqual(test1.ChargeState, 3); + double maxOfIntensity = frags.Select(p => p.intensity).ToList().Max(); + for (int i = 0; i < frags.Count; i++) + { + var frag = frags[i]; + var readFrag = test1.MatchedFragmentIons[i]; + + Assert.That(frag.mz == readFrag.Mz); + Assert.That((frag.intensity/ maxOfIntensity) == readFrag.Intensity); + Assert.That(frag.ProductType == readFrag.NeutralTheoreticalProduct.ProductType); + Assert.That(frag.fragmentNumber == readFrag.NeutralTheoreticalProduct.FragmentNumber); + Assert.That(frag.charge == readFrag.Charge); + //Assert.That(frag.ppm == readFrag.MassErrorPpm); + } + + testLibraryWithoutDecoy.CloseConnections(); + File.Delete(writtenPath); + } + } + } diff --git a/Test/Test.csproj b/Test/Test.csproj index 52bf290ca..beb93c0ca 100644 --- a/Test/Test.csproj +++ b/Test/Test.csproj @@ -199,6 +199,12 @@ Always + + Always + + + Always + Always diff --git a/Test/TestData/SpectralLibrarySearch/spectralLibraryNeutralLossTest.msp b/Test/TestData/SpectralLibrarySearch/spectralLibraryNeutralLossTest.msp new file mode 100644 index 000000000..ef7bee73a --- /dev/null +++ b/Test/TestData/SpectralLibrarySearch/spectralLibraryNeutralLossTest.msp @@ -0,0 +1,28 @@ +Name: ASVSELAC[Common Fixed:Carbamidomethyl on C]IYSALILHDDEVTVTEDKINALIKAAGVNVEPFWPGLFAKALANVNIGSLIC[Common Fixed:Carbamidomethyl on C]NVGAGGPAPAAGAAPAGGPAPSTAAAPAEEKKVEAKKEES[Common Biological:Phosphorylation on S]EES[Common Biological:Phosphorylation on S]DDDMGFGLFD/11 +MW: 1060.205561768771 +Comment: Parent=1060.205561768771 RT=68.094517 +Num peaks: 24 +474.22253552109225 0.12327031966337068 "b5^1/0ppm" +598.2911881692844 0.17637685313108434 "y5^1/0ppm" +587.3078660257297 0.26448833020105406 "b6^1/0ppm" +655.3122852061485 0.2573965224084584 "y6^1/0ppm" +786.3547054957799 0.5973180470179946 "y7^1/0ppm" +901.3828669653562 0.1394747476004537 "y8^1/0ppm" +931.4665832519531 0.1434341615825174 "b9^1/0ppm" +1298.4420166015627 0.04799051344737827 "y11^1/0ppm" +1194.1036493343909 0.16497897552735782 "b22^2/0ppm" +1412.6153999317123 0.059408140384558945 "y24^2-97.976895573/0ppm" +1610.16612195462 0.06598126929193648 "y27^2/0ppm" +1561.176395469285 0.3655719849041352 "y27^2-97.976895573/0ppm" +1596.6949731527957 0.1196248007420883 "y28^2-97.976895573/0ppm" +1632.2140387967154 0.1134099785167373 "y29^2-97.976895573/0ppm" +1239.8634635821659 0.19969145903784855 "y33^3/0ppm" +1207.2033996967743 0.4866798941848081 "y33^3-97.976895573/0ppm" +1810.301461311722 0.2822226465462767 "y33^2-97.976895573/0ppm" +1282.2420159220214 0.06365769264631967 "y36^3-97.976895573/0ppm" +1333.9057047796402 0.04957330666530949 "y37^3/0ppm" +1042.7038942258248 0.10714201465676373 "y39^4/0ppm" +1389.9361001454733 0.20027716863748268 "y39^3/0ppm" +1018.2100179729548 0.23609364592477405 "y39^4-97.976895573/0ppm" +1357.2775984749799 1 "y39^3-97.976895573/0ppm" +1503.354187325224 0.060227438209151066 "y45^3-97.976895573/0ppm" \ No newline at end of file diff --git a/Test/TestData/SpectralLibrarySearch/yeast2fake_pdeep_lib.msp b/Test/TestData/SpectralLibrarySearch/yeast2fake_pdeep_lib.msp new file mode 100644 index 000000000..7a7d757b0 --- /dev/null +++ b/Test/TestData/SpectralLibrarySearch/yeast2fake_pdeep_lib.msp @@ -0,0 +1,71 @@ +Name: VGIVPGEVIAPGMR/3_1(12,M,Oxidation) +MW: 1409.7700726863 +Comment: Spec=pDeep Mods=1(12,M,Oxidation) Fullname=-.VGIVPGEVIAPGMR.- Charge=3 Parent=470.93063356209996 Protein="sp|P25491|MAS5_YEAST/sp|P25492|MAS6_YEAST" RTInSeconds=3602.51220703125 +Num peaks: 6 +369.2496320000 2099.8 b4/0 +652.3664530000 5036.1 b7/0 +751.4348670000 2768.1 b8/0 +660.3497576863 3808.8 y6/0 +547.2656936863 8431.8 y5/0 +379.1758156863 4735.7 y3/0 + +Name: YHPDKNPSEEAAEK/3_0 +MW: 1613.7321556863 +Comment: Spec=pDeep Mods=0 Fullname=-.YHPDKNPSEEAAEK.- Charge=3 Parent=538.9179945621 Protein="sp|P25491|MAS5_YEAST/sp|P25492|MAS6_YEAST" RTInSeconds=1361.375244140625 +Num peaks: 7 +301.1295080000 10000.0 b2/0 +657.8122378432 1102.3 y12^2/0 +974.4425296863 1476.0 y9/0 +860.3996026863 7228.2 y8/0 +763.3468386863 1201.9 y7/0 +418.2296246863 1178.9 y4/0 +347.1925106863 1042.8 y3/0 + +Name: CTSCNGQGIKFVTR/3_2(0,C,CAM)(3,C,CAM) +MW: 1626.7606476863 +Comment: Spec=pDeep Mods=2(0,C,CAM)(3,C,CAM) Fullname=-.CTSCNGQGIKFVTR.- Charge=3 Parent=543.2608252287667 Protein="sp|P25491|MAS5_YEAST/sp|P25492|MAS6_YEAST" RTInSeconds=2789.812255859375 +Num peaks: 12 +683.8484358432 3655.2 y12^2/0 +640.3324218432 1811.9 y11^2/0 +1119.6269186863 1642.4 y10/0 +560.3170973432 2243.5 y10^2/0 +1005.5839916863 3061.7 y9/0 +503.2956338432 2321.0 y9^2/0 +948.5625276863 1625.5 y8/0 +820.5039496863 7343.1 y7/0 +763.4824856863 1679.2 y6/0 +650.3984216863 9571.4 y5/0 +522.3034586863 10000.0 y4/0 +375.2350446863 3704.7 y3/0 + +Name: HEISASLEELYKGR/2_0 +MW: 1630.8314756863 +Comment: Spec=pDeep Mods=0 Fullname=-.HEISASLEELYKGR.- Charge=2 Parent=816.42301384315 Protein="sp|P25491|MAS5_YEAST/sp|P25492|MAS6_YEAST" RTInSeconds=3433.582763671875 +Num peaks: 10 +1494.7798396863 3166.9 y13/0 +1365.7372466863 7644.3 y12/0 +380.1928450000 1979.1 b3/0 +1252.6531826863 7926.3 y11/0 +1165.6211546863 2319.4 y10/0 +1094.5840406863 3212.3 y9/0 +1007.5520126863 1257.7 y8/0 +894.4679486863 1581.7 y7/0 +765.4253556863 1535.7 y6/0 +636.3827626863 1209.5 y5/0 + +Name: HEISASLEELYKGR/4_0 +MW: 1630.8314756863 +Comment: Spec=pDeep Mods=0 Fullname=-.HEISASLEELYKGR.- Charge=4 Parent=408.71514492157496 Protein="sp|P25491|MAS5_YEAST/sp|P25492|MAS6_YEAST" RTInSeconds=3433.582763671875 +Num peaks: 12 +380.1928450000 4063.4 b3/0 +467.2248730000 2927.5 b4/0 +538.2619870000 1392.6 b5/0 +504.2796443431 1060.0 y8^2/0 +894.4679486863 3743.4 y7/0 +447.7376123431 2600.6 y7^2/0 +765.4253556863 4176.3 y6/0 +383.2163158431 1345.6 y6^2/0 +636.3827626863 5507.8 y5/0 +318.6950193431 1994.7 y5^2/0 +523.2986986863 10000.0 y4/0 +360.2353786863 6862.4 y3/0