Пример #1
0
        public static void TestDigestIndices()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            Modification mod = new ModificationWithMass(null, null, motif, TerminusLocalization.Any, double.NaN);
            IDictionary <int, List <Modification> > modDict = new Dictionary <int, List <Modification> >
            {
                { 2, new List <Modification> {
                      mod
                  } },
                { 8, new List <Modification> {
                      mod
                  } }
            };
            var prot     = new Protein("MNNNNKRRRRR", null, null, null, modDict);
            var protease = new Protease("Custom Protease", new List <string> {
                "K"
            }, new List <string>(), TerminusType.C, CleavageSpecificity.Full, null, null, null);
            DigestionParams digestionParams = new DigestionParams
            {
                Protease = protease,
                InitiatorMethionineBehavior = InitiatorMethionineBehavior.Retain,
                MaxMissedCleavages          = 0,
            };
            var digestList = prot.Digest(digestionParams, new List <ModificationWithMass>(), new List <ModificationWithMass>()).ToList();
            var ok1        = digestList[1];
            var ok2        = digestList[3];

            Assert.AreEqual(1, ok1.NumMods);
            Assert.IsTrue(ok1.allModsOneIsNterminus.ContainsKey(3));
            Assert.AreEqual(1, ok2.NumMods);
            Assert.IsTrue(ok2.allModsOneIsNterminus.ContainsKey(3));
        }
Пример #2
0
        //TO THINK: Is it reasonable to transfer Glycan to Modification the first time Glycan is read in? Which could save time.
        //Use glycan index and modification index to reduce space.
        public static Modification NGlycanToModification(Glycan glycan)
        {
            Dictionary <DissociationType, List <double> > neutralLosses = new Dictionary <DissociationType, List <double> >();

            if (glycan.Ions != null)
            {
                List <double> lossMasses = glycan.Ions.Where(p => p.IonMass < 57000000).Select(p => (double)p.LossIonMass / 1E5).OrderBy(p => p).ToList(); //570 is a cutoff for glycan ion size 2N1H, which will generate fragment ions.
                neutralLosses.Add(DissociationType.HCD, lossMasses);
                neutralLosses.Add(DissociationType.CID, lossMasses);
                neutralLosses.Add(DissociationType.EThcD, lossMasses);
            }

            Dictionary <DissociationType, List <double> > diagnosticIons = new Dictionary <DissociationType, List <double> >();

            diagnosticIons.Add(DissociationType.HCD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            diagnosticIons.Add(DissociationType.CID, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            diagnosticIons.Add(DissociationType.EThcD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            ModificationMotif.TryGetMotif("N", out ModificationMotif finalMotif); //TO DO: only one motif can be write here.
            var          id           = Glycan.GetKindString(glycan.Kind);
            Modification modification = new Modification(
                _originalId: id,
                _modificationType: "N-Glycosylation",
                _monoisotopicMass: (double)glycan.Mass / 1E5,
                _locationRestriction: "Anywhere.",
                _target: finalMotif,
                _neutralLosses: neutralLosses,
                _diagnosticIons: diagnosticIons
                );

            return(modification);
        }
Пример #3
0
        public void DoNotWriteSameModTwiceButWriteInHeaderSinceDifferent()
        {
            Loaders.LoadElements(Path.Combine(TestContext.CurrentContext.TestDirectory, "elements2.dat"));
            var     sampleModList = PtmListLoader.ReadModsFromFile(Path.Combine(TestContext.CurrentContext.TestDirectory, "z.txt")).ToList();
            Protein protein       = new Protein("MCSSSSSSSSSS", "accession", "organism", new List <Tuple <string, string> >(), new Dictionary <int, List <Modification> > {
                { 2, sampleModList.OfType <Modification>().ToList() }
            }, null, "name", "full_name", false, false, new List <DatabaseReference>(), new List <SequenceVariation>(), new List <DisulfideBond>());

            Assert.AreEqual(1, protein.OneBasedPossibleLocalizedModifications[2].OfType <ModificationWithMass>().Count());

            Dictionary <string, HashSet <Tuple <int, Modification> > > dictWithThisMod = new Dictionary <string, HashSet <Tuple <int, Modification> > >();

            HashSet <Tuple <int, Modification> > value = new HashSet <Tuple <int, Modification> >();

            ModificationMotif.TryGetMotif("C", out ModificationMotif motif);
            ModificationWithMass newMod = new ModificationWithMass("Palmitoylation of C", "mt", motif, TerminusLocalization.Any, double.NaN, null, null);

            Assert.AreNotEqual(newMod, sampleModList.First());

            value.Add(new Tuple <int, Modification>(2, newMod));

            dictWithThisMod.Add("accession", value);

            var newModResEntries = ProteinDbWriter.WriteXmlDatabase(dictWithThisMod, new List <Protein> {
                protein
            }, Path.Combine(TestContext.CurrentContext.TestDirectory, "test_modifications_with_proteins2.xml"));

            Assert.AreEqual(0, newModResEntries.Count);
            List <Protein> new_proteins = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, "test_modifications_with_proteins2.xml"), true, DecoyType.None, new List <Modification>(), false, new List <string>(), out Dictionary <string, Modification> um);

            Assert.AreEqual(1, new_proteins.Count);
            Assert.AreEqual(1, new_proteins[0].OneBasedPossibleLocalizedModifications.Count);
            Assert.AreEqual(2, new_proteins[0].OneBasedPossibleLocalizedModifications.SelectMany(kv => kv.Value).Count());
        }
Пример #4
0
        public static void TestVeryCloseExperimentalsModern()
        {
            IDictionary <int, List <Modification> > mods = new Dictionary <int, List <Modification> >();

            ModificationMotif.TryGetMotif("M", out ModificationMotif motif);
            var             prot            = new Protein("MMMM", null, null, null, mods);
            DigestionParams digestionParams = new DigestionParams(minPeptideLength: 1);
            var             thePep          = prot.Digest(digestionParams, new List <Modification>(), new List <Modification>()).First();

            var frags = new List <Product>();

            thePep.Fragment(DissociationType.HCD, FragmentationTerminus.Both, frags);
            var massArray = frags.Select(p => p.NeutralMass).ToArray();

            Array.Sort(massArray);
            double[]   intensities  = new double[] { 1, 1, 1, 1 };
            double[]   mz           = new double[] { 1, 2, massArray[4].ToMz(1), massArray[4].ToMz(1) + 1e-9 };
            MzSpectrum massSpectrum = new MzSpectrum(mz, intensities, false);
            MsDataScan scan         = new MsDataScan(massSpectrum, 1, 1, true, Polarity.Positive, 1, new MzRange(300, 2000), "", MZAnalyzerType.Unknown, massSpectrum.SumOfAllY, null, null, "scan=1", 0, null, null, 0, null, DissociationType.Unknown, 1, null);

            PeptideSpectralMatch[]    globalPsms            = new PeptideSpectralMatch[1];
            Ms2ScanWithSpecificMass[] arrayOfSortedMS2Scans = { new Ms2ScanWithSpecificMass(scan, 600, 1, null, new CommonParameters()) };
            CommonParameters          CommonParameters      = new CommonParameters(productMassTolerance: new PpmTolerance(5), scoreCutoff: 1, digestionParams: new DigestionParams(maxMissedCleavages: 0, minPeptideLength: 1, maxModificationIsoforms: int.MaxValue, initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain));

            var indexEngine = new IndexingEngine(new List <Protein> {
                prot
            }, new List <Modification>(), new List <Modification>(), null, null, null, 1, DecoyType.Reverse,
                                                 CommonParameters, null, 30000, false, new List <FileInfo>(), TargetContaminantAmbiguity.RemoveContaminant, new List <string>());
            var indexResults = (IndexingResults)indexEngine.Run();
            var cse          = new ModernSearchEngine(globalPsms, arrayOfSortedMS2Scans, indexResults.PeptideIndex, indexResults.FragmentIndex, 0, CommonParameters, null, new OpenSearchMode(), 0, new List <string>());

            cse.Run();
            Assert.Less(globalPsms[0].Score, 2);
            Assert.Greater(globalPsms[0].Score, 1);
        }
        public void Test_read_xml_write_read_fasta()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            var nice = new List <Modification>
            {
                new Modification("fayk", null, "mt", null, motif, "Anywhere.", null, null, null, null, null, null, null, null)
            };

            List <Protein> ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, "DatabaseTests", @"xml2.xml"), true, DecoyType.None, nice, false, null,
                                                               out Dictionary <string, Modification> un);

            ProteinDbWriter.WriteFastaDatabase(ok, Path.Combine(TestContext.CurrentContext.TestDirectory, "DatabaseTests", @"rewrite_xml_test.fasta"), "|");
            List <Protein> ok2 = ProteinDbLoader.LoadProteinFasta(Path.Combine(TestContext.CurrentContext.TestDirectory, "DatabaseTests", @"rewrite_xml_test.fasta"), true, DecoyType.None, false,
                                                                  ProteinDbLoader.UniprotAccessionRegex, ProteinDbLoader.UniprotFullNameRegex, ProteinDbLoader.UniprotNameRegex, ProteinDbLoader.UniprotGeneNameRegex, ProteinDbLoader.UniprotOrganismRegex, out var b);

            Assert.AreEqual(ok.Count, ok2.Count);
            Assert.True(Enumerable.Range(0, ok.Count).All(i => ok[i].BaseSequence == ok2[i].BaseSequence));
            Assert.True(Enumerable.Range(0, ok.Count).All(i => ok[i].Name == ok2[i].Name));
            Assert.True(Enumerable.Range(0, ok.Count).All(i => ok[i].Organism == ok2[i].Organism));
            Assert.True(Enumerable.Range(0, ok.Count).All(i => ok[i].GeneNames.First().Item2 == ok2[i].GeneNames.First().Item2));

            Assert.True(ok.All(p => p.ProteolysisProducts.All(prod => prod.OneBasedBeginPosition == null || prod.OneBasedBeginPosition > 0 && prod.OneBasedBeginPosition <= p.Length)));
            Assert.True(ok.All(p => p.ProteolysisProducts.All(prod => prod.OneBasedEndPosition == null || prod.OneBasedEndPosition > 0 && prod.OneBasedEndPosition <= p.Length)));
            Assert.True(ok2.All(p => p.ProteolysisProducts.All(prod => prod.OneBasedBeginPosition == null || prod.OneBasedBeginPosition > 0 && prod.OneBasedBeginPosition <= p.Length)));
            Assert.True(ok2.All(p => p.ProteolysisProducts.All(prod => prod.OneBasedEndPosition == null || prod.OneBasedEndPosition > 0 && prod.OneBasedEndPosition <= p.Length)));
        }
Пример #6
0
        public static void Test_ProteinDigest()
        {
            DigestionParams d = new DigestionParams(
                maxMissedCleavages: 0,
                minPeptideLength: 5,
                initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain);

            ModificationMotif.TryGetMotif("D", out ModificationMotif motif);
            Modification mod = new Modification(_originalId: "mod1", _modificationType: "mt", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 10);

            IDictionary <int, List <Modification> > oneBasedModification = new Dictionary <int, List <Modification> >
            {
                { 3, new List <Modification> {
                      mod
                  } }
            };

            Protein prot1 = new Protein("MEDEEK", "prot1", oneBasedModifications: oneBasedModification);

            var pep1 = prot1.Digest(d, new List <Modification>(), new List <Modification>()).First();
            var pep2 = prot1.Digest(d, new List <Modification>(), new List <Modification>()).Last();

            Assert.AreEqual("MEDEEK", pep1.FullSequence);
            Assert.AreEqual("MED[mt:mod1 on D]EEK", pep2.FullSequence);
        }
        public static TheoreticalProteoform make_a_theoretical(string a, double mass, int lysine_count)
        {
            ModificationMotif motif;

            ModificationMotif.TryGetMotif("X", out motif);
            Modification       unmodification = new Modification("Unmodified", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 0);
            ProteinWithGoTerms p1             = new ProteinWithGoTerms("MSSSSSSSSSSS", "T1", new List <Tuple <string, string> > {
                new Tuple <string, string>("", "")
            }, new Dictionary <int, List <Modification> > {
                { 0, new List <Modification> {
                      unmodification
                  } }
            }, new List <ProteolysisProduct> {
                new ProteolysisProduct(1, 12, "")
            }, "T2", "T3", true, false, new List <DatabaseReference> {
                new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                })
            }, new List <GoTerm> {
                new GoTerm(new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                }))
            });
            PtmSet set = new PtmSet(new List <Ptm> {
                new Ptm()
            });
            var t = new TheoreticalProteoform(a, "", p1.BaseSequence, new List <ProteinWithGoTerms> {
                p1
            }, mass, lysine_count, set, true, false, new Dictionary <InputFile, Protein[]>());

            t.modified_mass = mass;
            return(t);
        }
Пример #8
0
        public static void TestCompactPeptideMasses_cTerminalModifiedPeptide()
        {
            Protein p = new Protein("PET", "accession");

            ModificationMotif.TryGetMotif("T", out ModificationMotif motif);
            Modification    phosphorylation = new Modification(_originalId: "phospho", _modificationType: "CommonBiological", _target: motif, _locationRestriction: "Anywhere.", _chemicalFormula: ChemicalFormula.ParseFormula("H1O3P1"));
            DigestionParams digestionParams = new DigestionParams(minPeptideLength: 2);
            var             aPeptideWithSetModifications = p.Digest(digestionParams, new List <Modification> {
                phosphorylation
            }, new List <Modification>()).First();

            var aCompactPeptide = aPeptideWithSetModifications.CompactPeptide(FragmentationTerminus.Both);

            //evaluate N-terminal masses
            var           nTerminalMasses         = aCompactPeptide.TerminalMasses.Where(v => v.Terminus == FragmentationTerminus.N);
            HashSet <int> expectedNTerminalMasses = new HashSet <int> {
                97, 226
            };

            Assert.That(expectedNTerminalMasses.SetEquals(nTerminalMasses.Select(v => (int)Math.Round(v.NeutralMass, 1))));

            //evaluate C-terminal masses
            var           cTerminalMasses         = aCompactPeptide.TerminalMasses.Where(v => v.Terminus == FragmentationTerminus.C);
            HashSet <int> expectedCTerminalMasses = new HashSet <int> {
                181, 310, 407
            };

            Assert.That(expectedCTerminalMasses.SetEquals(cTerminalMasses.Select(v => (int)Math.Round(v.NeutralMass, 1))));
        }
Пример #9
0
        public void Test_modification3_hash_set() // numerical tolerance is 1e-9 so these two mods need to evaluate as identical
        {
            ModificationMotif.TryGetMotif("K", out ModificationMotif motif);
            Modification m1 = new Modification(_originalId: "id1", _modificationType: "modificationType", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 1.11111d, _databaseReference: new Dictionary <string, IList <string> >(), _neutralLosses: new Dictionary <DissociationType, List <double> > {
                { DissociationType.AnyActivationType, new List <double> {
                      2.222222
                  } }
            }, _diagnosticIons: new Dictionary <DissociationType, List <double> > {
                { DissociationType.AnyActivationType, new List <double> {
                      1.2233
                  } }
            });
            Modification m2 = new Modification(_originalId: "id1", _modificationType: "modificationType", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 1.11111d - 1e-10, _databaseReference: new Dictionary <string, IList <string> >(), _neutralLosses: new Dictionary <DissociationType, List <double> > {
                { DissociationType.AnyActivationType, new List <double> {
                      2.222222 + 1e-10
                  } }
            }, _diagnosticIons: new Dictionary <DissociationType, List <double> > {
                { DissociationType.AnyActivationType, new List <double> {
                      1.2233
                  } }
            });

            m1.DatabaseReference.Add("key", new List <string> {
                "value"
            });
            m2.DatabaseReference.Add("key", new List <string> {
                "value"
            });

            HashSet <Modification> mods = new HashSet <Modification>(new Modification[] { m1, m2 });

            Assert.AreEqual(1, mods.Count);
            Assert.IsTrue(m1.Equals(m2));
        }
Пример #10
0
        public static void TestCompactPeptideMasses_internallyModifiedPeptide_NeutralLoss()
        {
            Protein p = new Protein("PET", "accession");

            ModificationMotif.TryGetMotif("E", out ModificationMotif motif);
            Modification phosphorylation = new Modification(_originalId: "phospho", _modificationType: "CommonBiological", _target: motif, _locationRestriction: "Anywhere.", _chemicalFormula: ChemicalFormula.ParseFormula("H1O3P1"), _neutralLosses: new Dictionary <DissociationType, List <double> > {
                { MassSpectrometry.DissociationType.HCD, new List <double> {
                      0, ChemicalFormula.ParseFormula("H3O4P1").MonoisotopicMass
                  } }
            });
            DigestionParams digestionParams = new DigestionParams(minPeptideLength: 2);
            var             aPeptideWithSetModifications = p.Digest(digestionParams, new List <Modification> {
                phosphorylation
            }, new List <Modification>()).First();

            var aCompactPeptide = aPeptideWithSetModifications.CompactPeptide(FragmentationTerminus.Both);

            var allFragmentNeutralMasses = aPeptideWithSetModifications.Fragment(DissociationType.HCD, FragmentationTerminus.Both);

            //evaluate N-terminal masses
            var           n = allFragmentNeutralMasses.Where(f => f.TerminusFragment.Terminus == FragmentationTerminus.N).ToList();
            HashSet <int> expectedNTerminalMasses = new HashSet <int> {
                97, 306, 208
            };

            Assert.That(expectedNTerminalMasses.SetEquals(n.Select(v => (int)Math.Round(v.NeutralMass, 1))));

            //evaluate C-terminal masses
            var           c = allFragmentNeutralMasses.Where(f => f.TerminusFragment.Terminus == FragmentationTerminus.C).ToList();
            HashSet <int> expectedCTerminalMasses = new HashSet <int> {
                119, 328, 230
            };

            Assert.That(expectedCTerminalMasses.SetEquals(c.Select(v => (int)Math.Round(v.NeutralMass, 1))));
        }
Пример #11
0
        public static void TestCompactPeptideMasses_nTerminalModifiedPeptide_NeutralLoss_DissociationTypes_CID_and_HCD()//there should be no added neutral losses in this case becuase the allowed dissociation type doesn't match the dissociation type used in the experiment
        {
            Protein p = new Protein("PET", "accession");

            ModificationMotif.TryGetMotif("P", out ModificationMotif motif);
            Modification phosphorylation = new Modification(_originalId: "phospho", _modificationType: "CommonBiological", _target: motif, _locationRestriction: "Anywhere.", _chemicalFormula: ChemicalFormula.ParseFormula("H1O3P1"), _neutralLosses: new Dictionary <DissociationType, List <double> > {
                { MassSpectrometry.DissociationType.CID, new List <double> {
                      0, ChemicalFormula.ParseFormula("H3O4P1").MonoisotopicMass
                  } }
            });
            DigestionParams digestionParams = new DigestionParams(minPeptideLength: 2);
            var             aPeptideWithSetModifications = p.Digest(digestionParams, new List <Modification> {
                phosphorylation
            }, new List <Modification>()).First();

            var aCompactPeptide = aPeptideWithSetModifications.CompactPeptide(FragmentationTerminus.Both);

            //evaluate N-terminal masses
            var           nTerminalMasses         = aCompactPeptide.TerminalMasses.Where(v => v.Terminus == FragmentationTerminus.N);
            HashSet <int> expectedNTerminalMasses = new HashSet <int> {
                177, 306
            };

            Assert.That(expectedNTerminalMasses.SetEquals(nTerminalMasses.Select(v => (int)Math.Round(v.NeutralMass, 1))));

            //evaluate C-terminal masses
            var           cTerminalMasses         = aCompactPeptide.TerminalMasses.Where(v => v.Terminus == FragmentationTerminus.C);
            HashSet <int> expectedCTerminalMasses = new HashSet <int> {
                101, 230, 407
            };

            Assert.That(expectedCTerminalMasses.SetEquals(cTerminalMasses.Select(v => (int)Math.Round(v.NeutralMass, 1))));
        }
Пример #12
0
        //Motif should be writen with required form
        public static List <int> GetPossibleModSites(PeptideWithSetModifications peptide, string[] motifs)
        {
            List <int> possibleModSites = new List <int>();

            List <Modification> modifications = new List <Modification>();

            foreach (var mtf in motifs)
            {
                if (ModificationMotif.TryGetMotif(mtf, out ModificationMotif aMotif))
                {
                    Modification modWithMotif = new Modification(_target: aMotif, _locationRestriction: "Anywhere.");
                    modifications.Add(modWithMotif);
                }
            }

            foreach (var modWithMotif in modifications)
            {
                for (int r = 0; r < peptide.Length; r++)
                {
                    if (peptide.AllModsOneIsNterminus.Keys.Contains(r + 2))
                    {
                        continue;
                    }

                    //FullSequence is used here to avoid duplicated modification on same sites?
                    if (ModificationLocalization.ModFits(modWithMotif, peptide.BaseSequence, r + 1, peptide.Length, r + 1))
                    {
                        possibleModSites.Add(r + 2);
                    }
                }
            }

            return(possibleModSites);
        }
Пример #13
0
        public static bool MotifExist(string baseSeq, string[] motifs)
        {
            List <Modification> modifications = new List <Modification>();

            foreach (var mtf in motifs)
            {
                if (ModificationMotif.TryGetMotif(mtf, out ModificationMotif aMotif))
                {
                    Modification modWithMotif = new Modification(_target: aMotif, _locationRestriction: "Anywhere.");
                    modifications.Add(modWithMotif);
                }
            }

            foreach (var modWithMotif in modifications)
            {
                for (int r = 0; r < baseSeq.Length; r++)
                {
                    //Modification is not considered.
                    if (ModificationLocalization.ModFits(modWithMotif, baseSeq, r + 1, baseSeq.Length, r + 1))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Пример #14
0
        public void Test_FragmentationModNeutralLoss()
        {
            // Now we'll check the mass of modified peptide with no neutral losses
            ModificationMotif.TryGetMotif("T", out ModificationMotif motif);
            Modification mod = new Modification(_originalId: "phospho", _modificationType: "testModType", _target: motif, _chemicalFormula: ChemicalFormula.ParseFormula("H1 O3 P1"), _neutralLosses: new Dictionary <DissociationType, List <double> > {
                { DissociationType.HCD, new List <double> {
                      ChemicalFormula.ParseFormula("H3 O4 P1").MonoisotopicMass
                  } }
            }, _locationRestriction: "Anywhere.");
            List <Modification> modlist = new List <Modification> {
                mod
            };
            DigestionParams digestionParams = new DigestionParams(
                protease: "trypsin",
                maxMissedCleavages: 0,
                minPeptideLength: 1,
                initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain);

            var prot = new Protein("PEPTIDE", null, oneBasedModifications: new Dictionary <int, List <Modification> > {
                { 4, modlist }
            });
            var ye = prot.Digest(digestionParams, new List <Modification>(), new List <Modification>()).ToList();

            var peptideWithNeutralMassMod = ye.Where(v => v.AllModsOneIsNterminus.Count > 0).First();

            var           myModFragments = peptideWithNeutralMassMod.Fragment(DissociationType.HCD, FragmentationTerminus.Both).ToList();
            HashSet <int> neutralMasses  = new HashSet <int>(myModFragments.Select(m => (int)m.NeutralMass.ToMz(1)).ToList());
            HashSet <int> expectedMasses = new HashSet <int> {
                98, 227, 324, 407, 520, 635, 505, 618, 733,  //b-ions with and without neutral loss
                148, 263, 376, 459, 556, 685, 557, 654, 783, //y-ions with and without neutral loss
                782
            };                                               //molecular ion with neutral loss

            Assert.That(neutralMasses.SetEquals(expectedMasses));
        }
Пример #15
0
        public static void TestPeptideWithSetModifications()
        {
            var                 prot                  = new Protein("M", null);
            DigestionParams     digestionParams       = new DigestionParams(maxMissedCleavages: 0, minPeptideLength: 1, maxModsForPeptides: 3); // if you pass Custom Protease7 this test gets really flakey.
            List <Modification> variableModifications = new List <Modification>();

            ModificationMotif.TryGetMotif("M", out ModificationMotif motif);

            variableModifications.Add(new Modification(_originalId: "ProtNmod", _target: motif, _locationRestriction: "N-terminal.", _chemicalFormula: ChemicalFormula.ParseFormula("H"), _monoisotopicMass: GetElement(1).PrincipalIsotope.AtomicMass));
            variableModifications.Add(new Modification(_originalId: "pepNmod", _target: motif, _locationRestriction: "Peptide N-terminal.", _chemicalFormula: ChemicalFormula.ParseFormula("H"), _monoisotopicMass: GetElement(1).PrincipalIsotope.AtomicMass));
            variableModifications.Add(new Modification(_originalId: "resMod", _target: motif, _locationRestriction: "Anywhere.", _chemicalFormula: ChemicalFormula.ParseFormula("H"), _monoisotopicMass: GetElement(1).PrincipalIsotope.AtomicMass));
            variableModifications.Add(new Modification(_originalId: "PepCmod", _target: motif, _locationRestriction: "Peptide C-terminal.", _chemicalFormula: ChemicalFormula.ParseFormula("H"), _monoisotopicMass: GetElement(1).PrincipalIsotope.AtomicMass));
            variableModifications.Add(new Modification(_originalId: "ProtCmod", _target: motif, _locationRestriction: "C-terminal.", _chemicalFormula: ChemicalFormula.ParseFormula("H"), _monoisotopicMass: GetElement(1).PrincipalIsotope.AtomicMass));

            var ye = prot.Digest(digestionParams, new List <Modification>(), variableModifications).ToList();

            Assert.AreEqual(3 * 2 * 3, ye.Count);
            Assert.AreEqual("[H]M[H][H]", ye.Last().SequenceWithChemicalFormulas);

            double m1 = 5 * GetElement("H").PrincipalIsotope.AtomicMass + Residue.ResidueMonoisotopicMass['M'] + GetElement("O").PrincipalIsotope.AtomicMass;

            m1 = Math.Round(m1, 9, MidpointRounding.AwayFromZero);

            double m2 = ye.Last().MonoisotopicMass;
            double m3 = m1 - m2;

            Assert.IsTrue(m3 < 1e-9);
        }
Пример #16
0
        public void TestInvalidModificationHash()
        {
            ModificationMotif.TryGetMotif("K", out ModificationMotif motif);
            Modification           m1   = new Modification(_originalId: "id1", _modificationType: "modificationType", _target: motif, _locationRestriction: "Anywhere.");
            Modification           m2   = new Modification(_originalId: "id1", _modificationType: "modificationType", _target: motif, _locationRestriction: "Anywhere.");
            HashSet <Modification> mods = new HashSet <Modification>(new Modification[] { m1, m2 });

            Assert.IsFalse(m1.ValidModification);
            Assert.IsFalse(m2.ValidModification);
            Assert.True(m1.Equals(m2));
            Assert.AreEqual(1, mods.Count);

            // test comparing invalid mods with null vs not-null MMs
            m1   = new Modification(_originalId: "id1", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 1);
            m2   = new Modification(_originalId: "id1", _target: motif, _locationRestriction: "Anywhere.");
            mods = new HashSet <Modification>(new Modification[] { m1, m2 });
            Assert.IsFalse(m1.ValidModification);
            Assert.IsFalse(m2.ValidModification);
            Assert.False(m1.Equals(m2));
            Assert.AreEqual(2, mods.Count);

            // test comparing invalid mods with null vs not-null IDs
            m1   = new Modification(_originalId: "id1", _target: motif, _locationRestriction: "Anywhere.");
            m2   = new Modification(_target: motif, _locationRestriction: "Anywhere.");
            mods = new HashSet <Modification>(new Modification[] { m1, m2 });
            Assert.IsFalse(m1.ValidModification);
            Assert.IsFalse(m2.ValidModification);
            Assert.False(m1.Equals(m2));
            Assert.AreEqual(2, mods.Count);
        }
Пример #17
0
        public static void TestDigestIndices()
        {
            ModificationMotif.TryGetMotif("N", out ModificationMotif motifN);
            ModificationMotif.TryGetMotif("R", out ModificationMotif motifR);
            Modification modN = new Modification("myMod", null, "myModType", null, motifN, "Anywhere.", null, 10, null, null, null, null, null, null);
            Modification modR = new Modification("myMod", null, "myModType", null, motifR, "Anywhere.", null, 10, null, null, null, null, null, null);
            IDictionary <int, List <Modification> > modDict = new Dictionary <int, List <Modification> >
            {
                { 2, new List <Modification> {
                      modN
                  } },
                { 8, new List <Modification> {
                      modR
                  } }
            };
            var prot = new Protein("MNNNNKRRRRR", null, null, null, modDict, isDecoy: true);

            DigestionParams digestionParams = new DigestionParams(minPeptideLength: 5, initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain);

            var digestedList = prot.Digest(digestionParams, new List <Modification>(), new List <Modification>()).ToList();
            var ok1          = digestedList[1];
            var ok2          = digestedList[3];

            Assert.AreEqual(1, ok1.NumMods);
            Assert.IsTrue(ok1.AllModsOneIsNterminus.ContainsKey(3));
            Assert.AreEqual(1, ok2.NumMods);
            Assert.IsTrue(ok2.AllModsOneIsNterminus.ContainsKey(3));
        }
        public static TheoreticalProteoform make_a_theoretical(string a, string d, double mass, ProteinWithGoTerms p, Dictionary <InputFile, Protein[]> dict)
        {
            ModificationMotif motif;

            ModificationMotif.TryGetMotif("K", out motif);
            string mod_title        = "oxidation";
            ModificationWithMass m  = new ModificationWithMass(mod_title, new Tuple <string, string>("", mod_title), motif, ModificationSites.K, 1, new Dictionary <string, IList <string> >(), new List <double>(), new List <double>(), "");
            ProteinWithGoTerms   p1 = new ProteinWithGoTerms("MSSSSSSSSSSS", "T1", new List <Tuple <string, string> > {
                new Tuple <string, string>("ordered locus", "GENE")
            }, new Dictionary <int, List <Modification> > {
                { 1, new List <Modification> {
                      m
                  } }
            }, new int?[] { 0 }, new int?[] { 0 }, new string[] { "" }, "T2", "T3", true, false, new List <DatabaseReference> {
                new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                })
            }, new List <GoTerm> {
                new GoTerm(new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                }))
            });
            PtmSet set = new PtmSet(new List <Ptm> {
                new Ptm(0, m)
            });

            return(new TheoreticalProteoform(a, d, new List <ProteinWithGoTerms> {
                p
            }, mass, 0, set, true, false, dict));
        }
Пример #19
0
        /// <summary>
        /// Tests that a PeptideWithSetModifications object can be parsed correctly from a string, with mod info
        /// </summary>
        public static void TestReadPeptideFromString()
        {
            // set up the test

            ModificationMotif.TryGetMotif("T", out ModificationMotif target);

            Modification carbamidomethylOnC = new Modification(_originalId: "Carbamidomethyl on C", _modificationType: "Common Fixed", _target: target, _chemicalFormula: ChemicalFormula.ParseFormula("C2H3NO"));
            string       sequence           = "HQVC[Common Fixed:Carbamidomethyl on C]TPGGTTIAGLC[Common Fixed:Carbamidomethyl on C]VMEEK";

            // parse the peptide from the string
            PeptideWithSetModifications peptide = new PeptideWithSetModifications(sequence, new Dictionary <string, Modification> {
                { carbamidomethylOnC.IdWithMotif, carbamidomethylOnC }
            });

            // test base sequence and full sequence
            Assert.That(peptide.BaseSequence == "HQVCTPGGTTIAGLCVMEEK");
            Assert.That(peptide.FullSequence == sequence);

            // test peptide mass
            Assert.That(Math.Round(peptide.MonoisotopicMass, 5) == 2187.01225);

            // test mods (correct id, correct number of mods, correct location of mods)
            Assert.That(peptide.AllModsOneIsNterminus.First().Value.IdWithMotif == "Carbamidomethyl on C");
            Assert.That(peptide.AllModsOneIsNterminus.Count == 2);
            Assert.That(new HashSet <int>(peptide.AllModsOneIsNterminus.Keys).SetEquals(new HashSet <int>()
            {
                5, 16
            }));

            // calculate fragments. just check that they exist and it doesn't crash
            List <Product> theoreticalFragments = new List <Product>();

            peptide.Fragment(DissociationType.HCD, FragmentationTerminus.Both, theoreticalFragments);
            Assert.That(theoreticalFragments.Count > 0);
        }
Пример #20
0
        public static void XmlTest()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            var nice = new List <Modification>
            {
                new ModificationWithLocation("fayk", "mt", motif, TerminusLocalization.Any, null)
            };

            var ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"xml.xml"), true, DecoyType.Reverse, nice, false, null, out Dictionary <string, Modification> un);

            Assert.AreEqual('M', ok[0][0]);
            Assert.AreEqual('M', ok[1][0]);

            Assert.AreEqual("P62805|H4_HUMAN|Histone H4", ok[0].FullDescription);
            Assert.AreEqual("DECOY_P62805|H4_HUMAN|Histone H4", ok[1].FullDescription);
            Assert.AreEqual("ENST00000244537", ok[0].DatabaseReferences.First(dbRef => dbRef.Type == "Ensembl").Id);
            Assert.AreEqual("protein sequence ID", ok[0].DatabaseReferences.First(dbRef => dbRef.Type == "Ensembl").Properties.First().Item1);
            Assert.AreEqual("ENSP00000244537", ok[0].DatabaseReferences.First(dbRef => dbRef.Type == "Ensembl").Properties.First().Item2);
            Assert.AreEqual(42, ok[0].GeneNames.Count());
            Assert.AreEqual(14, ok[0].GeneNames.Where(t => t.Item1 == "primary").Count());
            Assert.AreEqual("HIST1H4A", ok[0].GeneNames.Where(t => t.Item1 == "primary").First().Item2);
            Assert.AreEqual(23, ok[0].DatabaseReferences.Count(dbRef => dbRef.Type == "Ensembl"));
            Assert.AreEqual(0, ok[0].DisulfideBonds.Count());
            Assert.AreEqual(1, ok[0].SequenceVariations.Count());
            Assert.AreEqual(1, ok[1].SequenceVariations.Count()); // decoys get the same sequence variations
            Assert.AreEqual(64, ok[0].SequenceVariations.First().OneBasedBeginPosition);
            Assert.AreEqual(64, ok[0].SequenceVariations.First().OneBasedEndPosition);
            Assert.AreEqual(103 - 64 + 2, ok[1].SequenceVariations.First().OneBasedBeginPosition);
            Assert.AreEqual(103 - 64 + 2, ok[1].SequenceVariations.First().OneBasedEndPosition);
            Assert.AreNotEqual(ok[0].SequenceVariations.First().Description, ok[1].SequenceVariations.First().Description); //decoys and target variations don't have the same desc.
        }
        public static TheoreticalProteoform make_a_theoretical(string a, string d, double mass, ProteinWithGoTerms p, Dictionary <InputFile, Protein[]> dict)
        {
            ModificationMotif motif;

            ModificationMotif.TryGetMotif("X", out motif);
            string             mod_title = "oxidation";
            Modification       m         = new Modification(mod_title, _modificationType: "modtype", _target: motif, _locationRestriction: "Anywhere.", _monoisotopicMass: 1);
            ProteinWithGoTerms p1        = new ProteinWithGoTerms("MSSSSSSSSSSS", "T1", new List <Tuple <string, string> > {
                new Tuple <string, string>("ordered locus", "GENE")
            }, new Dictionary <int, List <Modification> > {
                { 1, new List <Modification> {
                      m
                  } }
            }, new List <ProteolysisProduct> {
                new ProteolysisProduct(1, 12, "")
            }, "T2", "T3", true, false, new List <DatabaseReference> {
                new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                })
            }, new List <GoTerm> {
                new GoTerm(new DatabaseReference("GO", ":", new List <Tuple <string, string> > {
                    new Tuple <string, string>("term", "P:")
                }))
            });
            PtmSet set = new PtmSet(new List <Ptm> {
                new Ptm(0, m)
            });

            return(new TheoreticalProteoform(a, d, p1.BaseSequence, new List <ProteinWithGoTerms> {
                p
            }, mass, 0, set, true, false, dict));
        }
Пример #22
0
        public static void SeqVarXmlTest()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            var nice = new List <Modification>
            {
                new ModificationWithLocation("fayk", "mt", motif, TerminusLocalization.Any, null)
            };

            var ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"seqvartests.xml"), true, DecoyType.Reverse, nice, false, null, out Dictionary <string, Modification> un);

            Assert.AreEqual('M', ok[0][0]);
            Assert.AreEqual('M', ok[1][0]);
            List <SequenceVariation> seqvar0 = ok[0].SequenceVariations.ToList();
            List <SequenceVariation> seqvar1 = ok[1].SequenceVariations.ToList();

            Assert.AreEqual(seqvar0.Count + 1, seqvar1.Count);
            Assert.AreEqual('M', ok[0].SequenceVariations.First().OriginalSequence[0]);
            Assert.AreEqual('M', ok[0].SequenceVariations.First().VariantSequence[0]);
            Assert.AreEqual('A', ok[1].SequenceVariations.First().OriginalSequence[0]);
            Assert.AreEqual('P', ok[1].SequenceVariations.First().VariantSequence[0]);
            Assert.AreEqual('M', seqvar0[1].OriginalSequence[0]);
            Assert.AreEqual("", seqvar1[1].VariantSequence);
            foreach (SequenceVariation s in seqvar0)
            {
                Assert.AreEqual(s.OriginalSequence, ok[0].BaseSequence.Substring(s.OneBasedBeginPosition - 1, s.OneBasedEndPosition - s.OneBasedBeginPosition + 1));
            }
            foreach (SequenceVariation s in seqvar1)
            {
                Assert.AreEqual(s.OriginalSequence, ok[1].BaseSequence.Substring(s.OneBasedBeginPosition - 1, s.OneBasedEndPosition - s.OneBasedBeginPosition + 1));
            }
            Assert.AreNotEqual(ok[0].SequenceVariations.First().Description, ok[1].SequenceVariations.First().Description); //decoys and target variations don't have the same desc.
        }
Пример #23
0
        public void Test_write_with_custom_mods()
        {
            var nice = new List <Modification>
            {
                new ModificationWithLocation("fayk", null, null, ModificationSites.A, null, null)
            };

            ModificationMotif.TryGetMotif("K", out ModificationMotif motif);
            ModificationWithMass m = new ModificationWithMass("mod", new Tuple <string, string>("", ""), motif, ModificationSites.Any, 1, new Dictionary <string, IList <string> >(), new List <double> {
                -1
            }, new List <double>(), "");

            Dictionary <string, HashSet <Tuple <int, ModificationWithMass> > > new_mods = new Dictionary <string, HashSet <Tuple <int, ModificationWithMass> > >
            {
                { "P53863", new HashSet <Tuple <int, ModificationWithMass> > {
                      new Tuple <int, ModificationWithMass>(2, m)
                  } }
            };

            List <Protein> ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"xml2.xml"), false, nice, false, null, out Dictionary <string, Modification> un);
            var            newModResEntries = ProteinDbWriter.WriteXmlDatabase(new_mods, ok, Path.Combine(TestContext.CurrentContext.TestDirectory, @"rewrite_xml2.xml"));

            Assert.AreEqual(1, newModResEntries.Count);
            List <Protein> ok2 = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"rewrite_xml2.xml"), false, nice, false, null, out un);

            Assert.AreEqual(ok.Count, ok2.Count);
            Assert.True(Enumerable.Range(0, ok.Count).All(i => ok[i].BaseSequence == ok2[i].BaseSequence));
            Assert.AreEqual(2, ok[0].OneBasedPossibleLocalizedModifications.Count);
            Assert.AreEqual(3, ok2[0].OneBasedPossibleLocalizedModifications.Count);
        }
Пример #24
0
        public static void DisulfideXmlTest()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            var nice = new List <Modification>
            {
                new ModificationWithLocation("fayk", "mt", motif, TerminusLocalization.Any, null)
            };

            var ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"disulfidetests.xml"), true, DecoyType.Reverse, nice, false, null, out Dictionary <string, Modification> un);

            Assert.AreEqual('M', ok[0][0]);
            Assert.AreEqual('M', ok[1][0]);

            Assert.AreEqual(3, ok[0].DisulfideBonds.Count());
            Assert.AreEqual(31, ok[0].DisulfideBonds.First().OneBasedBeginPosition);
            Assert.AreEqual(94, ok[0].DisulfideBonds.First().OneBasedEndPosition);
            Assert.AreEqual(93, ok[0].DisulfideBonds.ElementAt(2).OneBasedBeginPosition);
            Assert.AreEqual(93, ok[0].DisulfideBonds.ElementAt(2).OneBasedEndPosition);

            Assert.AreEqual(3, ok[1].DisulfideBonds.Count());
            Assert.AreEqual(79, ok[1].DisulfideBonds.First().OneBasedBeginPosition);
            Assert.AreEqual(16, ok[1].DisulfideBonds.First().OneBasedEndPosition);
            Assert.AreEqual(17, ok[1].DisulfideBonds.ElementAt(2).OneBasedBeginPosition);
            Assert.AreEqual(17, ok[1].DisulfideBonds.ElementAt(2).OneBasedEndPosition);
            Assert.AreNotEqual(ok[0].DisulfideBonds.First().Description, ok[1].DisulfideBonds.First().Description); //decoys and target disulfide bonds don't have the same desc.
        }
Пример #25
0
        public void Test_modification4_hash_set()
        {
            ModificationMotif.TryGetMotif("K", out ModificationMotif motif);
            ModificationWithMassAndCf m1 = new ModificationWithMassAndCf(null, new Tuple <string, string>("item1", "item2"), motif, ModificationSites.K, new ChemicalFormula(), 1.11111d, new Dictionary <string, IList <string> >(), new List <double> {
                2.222222
            }, new List <double> {
                5.55555
            }, "modificationType");
            ModificationWithMassAndCf m2 = new ModificationWithMassAndCf(null, new Tuple <string, string>("item1", "item2"), motif, ModificationSites.K, new ChemicalFormula(), 1.11111d, new Dictionary <string, IList <string> >(), new List <double> {
                2.222222
            }, new List <double> {
                5.55555
            }, "modificationType");

            m1.linksToOtherDbs.Add("key", new List <string> {
                "value"
            });
            m2.linksToOtherDbs.Add("key", new List <string> {
                "value"
            });
            HashSet <Modification> mods = new HashSet <Modification>(new Modification[] { m1, m2 });

            Assert.AreEqual(1, mods.Count);
            Assert.True(m1.Equals(m2));
        }
Пример #26
0
        public static void XmlTest_2entry()
        {
            ModificationMotif.TryGetMotif("X", out ModificationMotif motif);
            var nice = new List <Modification>
            {
                new ModificationWithLocation("fayk", "mt", motif, TerminusLocalization.Any, null)
            };

            var ok = ProteinDbLoader.LoadProteinXML(Path.Combine(TestContext.CurrentContext.TestDirectory, @"xml2.xml"), true, DecoyType.Reverse, nice, false, null, out Dictionary <string, Modification> un);

            Assert.True(ok.All(p => p.ProteolysisProducts.All(d => d.OneBasedBeginPosition == null || d.OneBasedBeginPosition > 0)));

            Assert.True(ok.All(p => p.ProteolysisProducts.All(d => d.OneBasedEndPosition == null || d.OneBasedEndPosition <= p.Length)));

            Assert.False(ok.All(p => p.BaseSequence.Contains(" ")));
            Assert.False(ok.All(p => p.BaseSequence.Contains("\t")));
            Assert.False(ok.All(p => p.BaseSequence.Contains("\n")));

            //GoTerm checks
            List <Protein> targets = ok.Where(p => !p.IsDecoy).ToList();

            Assert.AreEqual(2, targets.Count);
            Assert.AreEqual(1, targets[0].DatabaseReferences.Count(dbRef => dbRef.Type == "EnsemblFungi"));
            Assert.AreEqual(1, targets[1].DatabaseReferences.Count(dbRef => dbRef.Type == "EnsemblFungi"));
        }
Пример #27
0
        public static Modification OGlycanToModification(Glycan glycan)
        {
            //TO THINK: what the neutralLoss for O-Glyco?
            Dictionary <DissociationType, List <double> > neutralLosses = new Dictionary <DissociationType, List <double> >();

            if (glycan.Ions != null)
            {
                List <double> lossMasses = glycan.Ions.Select(p => (double)p.LossIonMass / 1E5).OrderBy(p => p).ToList();
                neutralLosses.Add(DissociationType.HCD, lossMasses);
                neutralLosses.Add(DissociationType.CID, lossMasses);
                neutralLosses.Add(DissociationType.EThcD, lossMasses);
            }

            Dictionary <DissociationType, List <double> > diagnosticIons = new Dictionary <DissociationType, List <double> >();

            diagnosticIons.Add(DissociationType.HCD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            diagnosticIons.Add(DissociationType.CID, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            diagnosticIons.Add(DissociationType.EThcD, glycan.DiagnosticIons.Select(p => (double)p / 1E5).ToList());
            ModificationMotif.TryGetMotif("X", out ModificationMotif finalMotif); //TO DO: only one motif can be write here.

            var          id           = Glycan.GetKindString(glycan.Kind);
            Modification modification = new Modification(
                _originalId: id,
                _modificationType: "O-Glycosylation",
                _monoisotopicMass: (double)glycan.Mass / 1E5,
                _locationRestriction: "Anywhere.",
                _target: finalMotif,
                _neutralLosses: neutralLosses,
                _diagnosticIons: diagnosticIons
                );

            return(modification);
        }
Пример #28
0
        public static void TestLastPeaks()
        {
            IDictionary <int, List <Modification> > mods = new Dictionary <int, List <Modification> >();

            ModificationMotif.TryGetMotif("M", out ModificationMotif motif);
            var                         prot            = new Protein("MMMM", null, null, null, mods);
            DigestionParams             digestionParams = new DigestionParams(minPeptideLength: 1);
            PeptideWithSetModifications thePep          = prot.Digest(digestionParams, new List <Modification>(), new List <Modification>()).First();

            var massArray = thePep.Fragment(DissociationType.HCD, FragmentationTerminus.Both).Select(p => p.NeutralMass).ToArray();

            Array.Sort(massArray);
            double[]   intensities  = new double[] { 1, 1, 1 };
            double[]   mz           = new double[] { 1, 2, massArray[4].ToMz(1) };
            MzSpectrum massSpectrum = new MzSpectrum(mz, intensities, false);
            MsDataScan scan         = new MsDataScan(massSpectrum, 1, 1, true, Polarity.Positive, 1, new MzRange(300, 2000), "", MZAnalyzerType.Unknown, massSpectrum.SumOfAllY, null, null, "scan=1", 0, null, null, 0, null, DissociationType.Unknown, 1, null);

            PeptideSpectralMatch[]    globalPsms            = new PeptideSpectralMatch[1];
            Ms2ScanWithSpecificMass[] arrayOfSortedMS2Scans = { new Ms2ScanWithSpecificMass(scan, 0, 1, null, new CommonParameters()) };
            CommonParameters          CommonParameters      = new CommonParameters(
                scoreCutoff: 1,
                productMassTolerance: new PpmTolerance(5),
                digestionParams: new DigestionParams(
                    maxMissedCleavages: 0,
                    minPeptideLength: 1,
                    maxModificationIsoforms: int.MaxValue,
                    initiatorMethionineBehavior: InitiatorMethionineBehavior.Retain));
            ClassicSearchEngine cse = new ClassicSearchEngine(globalPsms, arrayOfSortedMS2Scans, new List <Modification>(), new List <Modification>(), null, new List <Protein> {
                prot
            }, new OpenSearchMode(), CommonParameters, new List <string>());

            cse.Run();
            Assert.Less(globalPsms[0].Score, 2);
            Assert.Greater(globalPsms[0].Score, 1);
        }
Пример #29
0
        public static void GlyTest_ModificationSites()
        {
            PeptideWithSetModifications pep = new PeptideWithSetModifications("ELNPTPNVEVNVECR", null);

            string[] motifs = new string[] { "Nxs", "Nxt" };
            var      sites  = GlycoSpectralMatch.GetPossibleModSites(pep, motifs);

            Assert.That(sites.Count() == 1 && sites[0] == 4);

            ModificationMotif.TryGetMotif("C", out ModificationMotif motif1);
            Modification mod1 = new Modification(_originalId: "Carbamidomethyl of C", _modificationType: "Common Fixed", _target: motif1, _locationRestriction: "Anywhere.", _monoisotopicMass: 57.02146372068994);

            ModificationMotif.TryGetMotif("N", out ModificationMotif motif2);
            Modification mod2  = new Modification(_originalId: "Test of N", _modificationType: "Common Fixed", _target: motif2, _locationRestriction: "Anywhere.");
            var          testN = new PeptideWithSetModifications("C[Common Fixed:Carbamidomethyl of C]N[Common Fixed:Test of N]SSDQPKL[Common Fixed:Carbamidomethyl of C]NLSGIETP", new Dictionary <string, Modification> {
                { "Carbamidomethyl of C", mod1 }, { "Test of N", mod2 }
            });
            var testSites = GlycoSpectralMatch.GetPossibleModSites(testN, motifs);

            Assert.That(testSites.Count() == 1 && testSites[0] == 11);


            var testC = new PeptideWithSetModifications("TELAAYLSC[Common Fixed:Carbamidomethyl of C]NATK", new Dictionary <string, Modification> {
                { "Carbamidomethyl of C", mod1 }
            });
            var testCSites = GlycoSpectralMatch.GetPossibleModSites(testC, motifs);

            Assert.That(testCSites.Count() == 1 && testSites[0] == 11);
        }
Пример #30
0
        public static void TestPeptideWithFixedModifications()
        {
            var prot     = new Protein("M", null);
            var protease = new Protease("Custom Protease", new List <string> {
                "K"
            }, new List <string>(), TerminusType.C, CleavageSpecificity.Full, null, null, null);
            List <ModificationWithMass> fixedMods = new List <ModificationWithMass>();

            ModificationMotif.TryGetMotif("M", out ModificationMotif motif);
            fixedMods.Add(new ModificationWithMassAndCf("ProtNmod", null, motif, TerminusLocalization.NProt, Chemistry.ChemicalFormula.ParseFormula("H"), GetElement(1).PrincipalIsotope.AtomicMass));
            fixedMods.Add(new ModificationWithMassAndCf("PepNmod", null, motif, TerminusLocalization.NPep, Chemistry.ChemicalFormula.ParseFormula("H"), GetElement(1).PrincipalIsotope.AtomicMass));
            fixedMods.Add(new ModificationWithMassAndCf("resMod", null, motif, TerminusLocalization.Any, Chemistry.ChemicalFormula.ParseFormula("H"), GetElement(1).PrincipalIsotope.AtomicMass));
            fixedMods.Add(new ModificationWithMassAndCf("PepCmod", null, motif, TerminusLocalization.PepC, Chemistry.ChemicalFormula.ParseFormula("H"), GetElement(1).PrincipalIsotope.AtomicMass));
            fixedMods.Add(new ModificationWithMassAndCf("ProtCmod", null, motif, TerminusLocalization.ProtC, Chemistry.ChemicalFormula.ParseFormula("H"), GetElement(1).PrincipalIsotope.AtomicMass));

            DigestionParams digestionParams = new DigestionParams
            {
                MinPeptideLength = 1,
            };
            var ok = prot.Digest(digestionParams, fixedMods, new List <ModificationWithMass>()).ToList();

            Assert.AreEqual(1, ok.Count);

            Assert.AreEqual("[:PepNmod]M[:resMod][:ProtCmod]", ok.Last().Sequence);
            Assert.AreEqual("[H]M[H][H]", ok.Last().SequenceWithChemicalFormulas);
            Assert.AreEqual(5 * GetElement("H").PrincipalIsotope.AtomicMass + Residue.ResidueMonoisotopicMass['M'] + GetElement("O").PrincipalIsotope.AtomicMass, ok.Last().MonoisotopicMass, 1e-9);
        }