public void MultiLabelExplicitSerialTest() { // Create a simple document and add two peptides SrmDocument document = new SrmDocument(SrmSettingsList.GetDefault()); const string pepSequence1 = "QFVLSCVILR"; const string pepSequence2 = "DIEVYCDGAITTK"; var reader = new StringReader(string.Join("\n", new[] { ">peptides1", pepSequence1, pepSequence2 })); IdentityPath path; document = document.ImportFasta(reader, true, IdentityPath.ROOT, out path); Assert.AreEqual(2, document.PeptideCount); // Add some modifications in two new label types var modCarb = new StaticMod("Carbamidomethyl Cysteine", "C", null, "C2H3ON"); var modOther = new StaticMod("Another Cysteine", "C", null, "CO8N2"); var staticMods = new[] { modCarb, modOther }; var mod15N = new StaticMod("All 15N", null, null, null, LabelAtoms.N15, null, null); var modK13C = new StaticMod("13C K", "K", ModTerminus.C, null, LabelAtoms.C13, null, null); var modR13C = new StaticMod("13C R", "R", ModTerminus.C, null, LabelAtoms.C13, null, null); var modV13C = new StaticMod("Heavy V", "V", null, null, LabelAtoms.C13 | LabelAtoms.N15, null, null); var heavyMods = new[] { mod15N, modK13C, modR13C, modV13C }; var labelTypeAA = new IsotopeLabelType("heavy AA", IsotopeLabelType.FirstHeavy); var labelTypeAll = new IsotopeLabelType("heavy All", IsotopeLabelType.FirstHeavy + 1); var settings = document.Settings; settings = settings.ChangePeptideModifications(mods => new PeptideModifications(mods.StaticModifications, new[] { new TypedModifications(labelTypeAA, new[] { modK13C, modR13C }), new TypedModifications(labelTypeAll, new[] { mod15N }) })); document = document.ChangeSettings(settings); Assert.AreEqual(6, document.PeptideTransitionGroupCount); // Add modifications to light and heavy AA in the first peptide path = document.GetPathTo((int)SrmDocument.Level.Molecules, 0); var nodePepMod = (PeptideDocNode)document.FindNode(path); var explicitMod = new ExplicitMods(nodePepMod.Peptide, new[] { new ExplicitMod(pepSequence1.IndexOf('C'), modOther) }, new[] { new TypedExplicitModifications(nodePepMod.Peptide, labelTypeAA, new ExplicitMod[0]) }); document = document.ChangePeptideMods(path, explicitMod, staticMods, heavyMods); Assert.AreEqual(5, document.PeptideTransitionGroupCount); // Add a modification to heavy All in the second peptide path = document.GetPathTo((int)SrmDocument.Level.Molecules, 1); nodePepMod = (PeptideDocNode)document.FindNode(path); explicitMod = new ExplicitMods(nodePepMod.Peptide, null, new[] { new TypedExplicitModifications(nodePepMod.Peptide, labelTypeAll, new[] { new ExplicitMod(pepSequence2.IndexOf('V'), modV13C) }) }); document = document.ChangePeptideMods(path, explicitMod, staticMods, heavyMods); Assert.AreEqual(5, document.PeptideTransitionGroupCount); AssertEx.Serializable(document, 3, AssertEx.DocumentCloned); }
public void AddRemoveExplicitModTest() { SrmDocument docStudy7 = CreateStudy7Doc(); string transitionList = ExportCsv(docStudy7); Assert.AreEqual(69, transitionList.Split('\n').Length); // Special test mode may add an extra doc node var modifications = docStudy7.Settings.PeptideSettings.Modifications; var listStaticMods = modifications.StaticModifications; var listHeavyMods = modifications.AllHeavyModifications.ToList(); docStudy7 = docStudy7.ChangeSettings(docStudy7.Settings.ChangeTransitionFilter(filter => filter.ChangeAutoSelect(false))); // Remove all modifications int i = 0; // But save them for later var removedMods = new Dictionary <int, ExplicitMods>(); foreach (var peptide in docStudy7.Peptides) { if (peptide.HasExplicitMods) { removedMods.Add(i, peptide.ExplicitMods); IdentityPath path = docStudy7.GetPathTo((int)SrmDocument.Level.Molecules, i); docStudy7 = docStudy7.ChangePeptideMods(path, null, listStaticMods, listHeavyMods); } i++; } // Removes heavy from peptide with c-terminal P AssertEx.IsDocumentState(docStudy7, 6, 7, 11, 21, 63); modifications = docStudy7.Settings.PeptideSettings.Modifications; Assert.AreEqual(2, modifications.AllHeavyModifications.Count()); Assert.AreEqual(0, modifications.AllHeavyModifications.Count(mod => mod.IsExplicit)); Assert.AreEqual(0, docStudy7.Peptides.Count(peptide => peptide.HasExplicitMods)); listHeavyMods = ATOMIC_HEAVY_MODS; foreach (var pair in removedMods) { IdentityPath path = docStudy7.GetPathTo((int)SrmDocument.Level.Molecules, pair.Key); docStudy7 = docStudy7.ChangePeptideMods(path, pair.Value, listStaticMods, listHeavyMods); } AssertEx.IsDocumentState(docStudy7, 11, 7, 11, 21, 63); // Replace the heavy precursor that was removed // TODO: Yuck. Would be nice to have a way to do this without duplicating // so much of the logic in PeptideDocNode and PeptideTreeNode var pepPath = docStudy7.GetPathTo((int)SrmDocument.Level.Molecules, 10); var nodePep = (PeptideDocNode)docStudy7.FindNode(pepPath); var mods = nodePep.ExplicitMods; var nodeGroupLight = (TransitionGroupDocNode)nodePep.Children[0]; var settings = docStudy7.Settings; foreach (var tranGroup in nodePep.GetTransitionGroups(settings, mods, false)) { if (tranGroup.PrecursorAdduct.Equals(nodeGroupLight.TransitionGroup.PrecursorAdduct) && !tranGroup.LabelType.IsLight) { TransitionDocNode[] transitions = nodePep.GetMatchingTransitions(tranGroup, settings, mods); var nodeGroup = new TransitionGroupDocNode(tranGroup, transitions); nodeGroup = nodeGroup.ChangeSettings(settings, nodePep, mods, SrmSettingsDiff.ALL); docStudy7 = (SrmDocument)docStudy7.Add(pepPath, nodeGroup); break; } } AssertEx.IsDocumentState(docStudy7, 12, 7, 11, 22, 66); modifications = docStudy7.Settings.PeptideSettings.Modifications; Assert.AreEqual(2, modifications.AllHeavyModifications.Count(mod => mod.IsExplicit && mod.Label13C)); Assert.AreEqual(2, modifications.AllHeavyModifications.Count(mod => mod.Formula != null)); Assert.AreEqual(3, docStudy7.Peptides.Count(peptide => peptide.HasExplicitMods)); Assert.AreEqual(2, docStudy7.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.StaticModifications.Count > 0 && peptide.ExplicitMods.StaticModifications[0].Modification.AAs[0] == 'C')); Assert.AreEqual(2, docStudy7.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'V' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C)); Assert.AreEqual(1, docStudy7.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'L' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C)); AssertEx.NoDiff(transitionList, ExportCsv(docStudy7)); }
public void ModifyExplicitModTest() { SrmDocument docStudy7 = CreateStudy7Doc(); var settings = docStudy7.Settings.ChangeTransitionFilter(filter => filter.ChangeAutoSelect(false)); var listStaticMods = settings.PeptideSettings.Modifications.StaticModifications; var listHeavyMods = new List <StaticMod>(settings.PeptideSettings.Modifications.AllHeavyModifications); // Change an explicit heavy modification to something new var modV = new StaticMod("Heavy V", "V", null, LabelAtoms.C13 | LabelAtoms.N15); listHeavyMods.Add(modV); IdentityPath path = docStudy7.GetPathTo((int)SrmDocument.Level.Molecules, 0); var peptideMod = (PeptideDocNode)docStudy7.FindNode(path); var explicitMods = peptideMod.ExplicitMods; explicitMods = explicitMods.ChangeHeavyModifications(new[] { explicitMods.HeavyModifications[0].ChangeModification(modV) }); var docHeavyV = docStudy7.ChangePeptideMods(path, explicitMods, listStaticMods, listHeavyMods); var modSettings = docHeavyV.Settings.PeptideSettings.Modifications; Assert.AreEqual(5, modSettings.AllHeavyModifications.Count()); Assert.AreEqual(4, modSettings.AllHeavyModifications.Count(mod => mod.Formula != null)); Assert.AreEqual(1, modSettings.AllHeavyModifications.Count(mod => mod.Label13C && mod.Label15N)); Assert.AreEqual(3, docHeavyV.Peptides.Count(peptide => peptide.HasExplicitMods)); Assert.AreEqual(1, docHeavyV.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'V' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C)); Assert.AreEqual(1, docHeavyV.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'V' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C && peptide.ExplicitMods.HeavyModifications[0].Modification.Label15N)); // Change an explicit heavy modification to something new listHeavyMods = new List <StaticMod>(settings.PeptideSettings.Modifications.AllHeavyModifications); modV = listHeavyMods[2] = ATOMIC_HEAVY_MODS[2]; explicitMods = peptideMod.ExplicitMods; explicitMods = explicitMods.ChangeHeavyModifications(new[] { explicitMods.HeavyModifications[0].ChangeModification(modV) }); var doc13V = docStudy7.ChangePeptideMods(path, explicitMods, listStaticMods, listHeavyMods); modSettings = doc13V.Settings.PeptideSettings.Modifications; Assert.AreEqual(4, modSettings.AllHeavyModifications.Count()); Assert.AreEqual(3, modSettings.AllHeavyModifications.Count(mod => mod.Formula != null)); Assert.AreEqual(1, modSettings.AllHeavyModifications.Count(mod => mod.Label13C)); Assert.AreEqual(3, doc13V.Peptides.Count(peptide => peptide.HasExplicitMods)); Assert.AreEqual(2, doc13V.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'V' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C)); // No change to the peptide, but change an orthoganal modification path = docStudy7.GetPathTo((int)SrmDocument.Level.Molecules, docStudy7.Peptides.Count() - 1); peptideMod = (PeptideDocNode)docStudy7.FindNode(path); doc13V = docStudy7.ChangePeptideMods(path, peptideMod.ExplicitMods, listStaticMods, listHeavyMods); modSettings = doc13V.Settings.PeptideSettings.Modifications; Assert.AreEqual(4, modSettings.AllHeavyModifications.Count()); Assert.AreEqual(3, modSettings.AllHeavyModifications.Count(mod => mod.Formula != null)); Assert.AreEqual(1, modSettings.AllHeavyModifications.Count(mod => mod.Label13C)); Assert.AreEqual(3, doc13V.Peptides.Count(peptide => peptide.HasExplicitMods)); Assert.AreEqual(2, doc13V.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications[0].Modification.AAs[0] == 'V' && peptide.ExplicitMods.HeavyModifications[0].Modification.Label13C)); // No change to the peptide, but remove all other modifications from global lists var docClear = docStudy7.ChangePeptideMods(path, peptideMod.ExplicitMods, new StaticMod[0], new[] { listHeavyMods[3] }); Assert.AreSame(docClear, docStudy7); // Remove explicit modifications from the global lists listHeavyMods.RemoveRange(2, 2); // Mimic the way PeptideSettingsUI would change the settings var docRemoveExplicit = docStudy7.ChangeSettings(docStudy7.Settings.ChangePeptideModifications( mods => mods.ChangeModifications(IsotopeLabelType.heavy, listHeavyMods) .DeclareExplicitMods(docStudy7, listStaticMods, listHeavyMods))); // Test expected changes modSettings = docRemoveExplicit.Settings.PeptideSettings.Modifications; Assert.AreEqual(2, modSettings.AllHeavyModifications.Count()); Assert.AreEqual(3, docRemoveExplicit.Peptides.Count(peptide => peptide.HasExplicitMods)); // Should leave no heavy modifications on the explicitly modified peptides Assert.AreEqual(0, docRemoveExplicit.Peptides.Count(peptide => peptide.HasExplicitMods && peptide.ExplicitMods.HeavyModifications.Count > 0)); }
public void MultiLabelExplicitSerialTest() { // Create a simple document and add two peptides SrmDocument document = new SrmDocument(SrmSettingsList.GetDefault()); const string pepSequence1 = "QFVLSCVILR"; const string pepSequence2 = "DIEVYCDGAITTK"; var reader = new StringReader(string.Join("\n", new[] {">peptides1", pepSequence1, pepSequence2})); IdentityPath path; document = document.ImportFasta(reader, true, IdentityPath.ROOT, out path); Assert.AreEqual(2, document.PeptideCount); // Add some modifications in two new label types var modCarb = new StaticMod("Carbamidomethyl Cysteine", "C", null, "C2H3ON"); var modOther = new StaticMod("Another Cysteine", "C", null, "CO8N2"); var staticMods = new[] {modCarb, modOther}; var mod15N = new StaticMod("All 15N", null, null, null, LabelAtoms.N15, null, null); var modK13C = new StaticMod("13C K", "K", ModTerminus.C, null, LabelAtoms.C13, null, null); var modR13C = new StaticMod("13C R", "R", ModTerminus.C, null, LabelAtoms.C13, null, null); var modV13C = new StaticMod("Heavy V", "V", null, null, LabelAtoms.C13 | LabelAtoms.N15, null, null); var heavyMods = new[] { mod15N, modK13C, modR13C, modV13C }; var labelTypeAA = new IsotopeLabelType("heavy AA", IsotopeLabelType.FirstHeavy); var labelTypeAll = new IsotopeLabelType("heavy All", IsotopeLabelType.FirstHeavy + 1); var settings = document.Settings; settings = settings.ChangePeptideModifications(mods => new PeptideModifications(mods.StaticModifications, new[] { new TypedModifications(labelTypeAA, new[] {modK13C, modR13C}), new TypedModifications(labelTypeAll, new[] {mod15N}) })); document = document.ChangeSettings(settings); Assert.AreEqual(6, document.PeptideTransitionGroupCount); // Add modifications to light and heavy AA in the first peptide path = document.GetPathTo((int) SrmDocument.Level.Molecules, 0); var nodePepMod = (PeptideDocNode) document.FindNode(path); var explicitMod = new ExplicitMods(nodePepMod.Peptide, new[] {new ExplicitMod(pepSequence1.IndexOf('C'), modOther)}, new[] {new TypedExplicitModifications(nodePepMod.Peptide, labelTypeAA, new ExplicitMod[0])}); document = document.ChangePeptideMods(path, explicitMod, staticMods, heavyMods); Assert.AreEqual(5, document.PeptideTransitionGroupCount); // Add a modification to heavy All in the second peptide path = document.GetPathTo((int)SrmDocument.Level.Molecules, 1); nodePepMod = (PeptideDocNode)document.FindNode(path); explicitMod = new ExplicitMods(nodePepMod.Peptide, null, new[] { new TypedExplicitModifications(nodePepMod.Peptide, labelTypeAll, new[] {new ExplicitMod(pepSequence2.IndexOf('V'), modV13C)}) }); document = document.ChangePeptideMods(path, explicitMod, staticMods, heavyMods); Assert.AreEqual(5, document.PeptideTransitionGroupCount); AssertEx.Serializable(document, 3, AssertEx.DocumentCloned); }