Esempio n. 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChemicalProteoformHashGenerator" /> class.
 /// </summary>
 /// <param name="proFormaParser">The proForma parser.</param>
 /// <param name="proteoformGroupFactory">The proteoform group factory.</param>
 /// <param name="proteoformModificationLookup">The proteoform modification lookup.</param>
 /// <param name="mapper">The mapper.</param>
 public ChemicalProteoformHashGenerator(ProFormaParser proFormaParser, ProteoformGroupFactory proteoformGroupFactory,
                                        IProteoformModificationLookup proteoformModificationLookup, IAccessionMapper mapper)
 {
     _proFormaParser               = proFormaParser;
     _proteoformGroupFactory       = proteoformGroupFactory;
     _proteoformModificationLookup = proteoformModificationLookup;
     _mapper = mapper;
 }
Esempio n. 2
0
        private void SetupXlMod()
        {
            var parser = new XlmodOboParser();

            XlmodTerm[] modifications = parser.Parse(XlmodOboParserTest.GetFilePath()).ToArray();

            _xlmodLookup = XlModModificationLookup.CreateFromModifications(modifications,
                                                                           _elementProvider);
        }
Esempio n. 3
0
        public void Setup()
        {
            _elementProvider = new MockElementProvider();
            _residueProvider = new IupacAminoAcidProvider(_elementProvider);
            _factory         = new ProteoformGroupFactory(_elementProvider, _residueProvider);

            var parser        = new ResidXmlParser();
            var modifications = parser.Parse(ResidXmlParserTest.GetResidFilePath()).ToArray();

            _residLookup = ResidModificationLookup.CreateFromModifications(modifications.Where(x => x.Id == "AA0038" || x.Id == "AA0074"),
                                                                           _elementProvider);
        }
Esempio n. 4
0
        private void SetupResid()
        {
            var parser = new ResidXmlParser();

            ResidModification[] modifications = parser.Parse(ResidXmlParserTest.GetResidFilePath()).ToArray();

            _resid38 = modifications.Single(x => x.Id == "AA0038");
            //_residLookup = ResidModificationLookup.CreateFromModifications(new[] { _resid38 },
            //    _elementProvider);
            _residLookup = ResidModificationLookup.CreateFromModifications(modifications,
                                                                           _elementProvider);
        }
Esempio n. 5
0
        private void SetupPsiMod()
        {
            var parser = new PsiModOboParser();

            PsiModTerm[] modifications = parser.Parse(PsiModOboParserTest.GetFilePath()).ToArray();

            _psiMod38 = modifications.Single(x => x.Id == "MOD:00038");
            //_psiModLookup = PsiModModificationLookup.CreateFromModifications(new[] { _psiMod38 },
            //    _elementProvider);
            _psiModLookup = PsiModModificationLookup.CreateFromModifications(modifications,
                                                                             _elementProvider);
        }
Esempio n. 6
0
        private void SetupUniProt()
        {
            var parser = new UniProtPtmListParser();

            UniprotModification[] modifications = parser.Parse(File.ReadAllText(UniProtTests.GetPtmListPath())).ToArray();

            _uniProtMod312 = modifications.Single(x => x.Id == "PTM-0312");
            //_uniProtModLookup = UniProtModificationLookup.CreateFromModifications(new[] { _uniProtMod312 },
            //    _elementProvider);
            _uniProtModLookup = UniProtModificationLookup.CreateFromModifications(modifications,
                                                                                  _elementProvider);
        }
Esempio n. 7
0
        private void SetupUnimod()
        {
            var atomProvider = new UnimodHardCodedAtomProvider(_elementProvider);

            var parser = new UnimodOboParser();

            UnimodModification[] modifications = parser.Parse(UnimodTest.GetUnimodFilePath()).ToArray();

            _unimod37 = modifications.Single(x => x.Id == "UNIMOD:37");
            //_unimodLookup = UnimodModificationLookup.CreateFromModifications(new[] { _unimod37 },
            //    atomProvider);
            _unimodLookup = UnimodModificationLookup.CreateFromModifications(modifications, atomProvider);
        }
Esempio n. 8
0
        private void FindById(IProteoformModificationLookup lookup, ProFormaKey key, ProFormaEvidenceType evidenceType,
                              int correctId, string extraPrefix)
        {
            Assert.IsNotNull(lookup.GetModification(new ProFormaDescriptor(key, evidenceType, $"{extraPrefix}{correctId}")));
            Assert.IsNotNull(lookup.GetModification(new ProFormaDescriptor(key, evidenceType, $"{correctId}")));

            Assert.Throws <ProteoformModificationLookupException>(
                () => lookup.GetModification(new ProFormaDescriptor(key, evidenceType, "-1")));
            Assert.Throws <ProteoformModificationLookupException>(
                () => lookup.GetModification(new ProFormaDescriptor(key, evidenceType, $"{extraPrefix}0")));
            Assert.Throws <ProteoformModificationLookupException>(
                () => lookup.GetModification(new ProFormaDescriptor(key, evidenceType, $"{extraPrefix}2200")));
        }
Esempio n. 9
0
        private void FindByName(IProteoformModificationLookup lookup, ProFormaEvidenceType evidenceType,
                                bool isDefault, string correctName)
        {
            if (isDefault)
            {
                Assert.IsNotNull(lookup.GetModification(new ProFormaDescriptor(ProFormaKey.Name, ProFormaEvidenceType.None, correctName)));
            }

            Assert.IsNotNull(lookup.GetModification(new ProFormaDescriptor(ProFormaKey.Name, evidenceType, correctName)));

            Assert.Throws <ProteoformModificationLookupException>(
                () => lookup.GetModification(new ProFormaDescriptor(ProFormaKey.Name, ProFormaEvidenceType.None, "Something")));
            Assert.Throws <ProteoformModificationLookupException>(
                () => lookup.GetModification(new ProFormaDescriptor(ProFormaKey.Name, evidenceType, "Something")));
        }
Esempio n. 10
0
        private void DescriptorHandling(IProteoformModificationLookup lookup, ProFormaEvidenceType key, bool isDefault)
        {
            // If the key is a specific mod type, always handle
            Assert.IsTrue(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, key, "Anything")));
            Assert.IsTrue(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, key, "")));
            Assert.IsTrue(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, key, null)));

            // If using modification name, must have no ending or end in proper ending
            Assert.IsTrue(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, key, "Something")));
            Assert.IsFalse(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, "Something")));
            Assert.IsFalse(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, ProFormaEvidenceType.Brno, "Something")));

            // This is malformed and must be interpreted as a mod "name" ... will fail when looking up modification
            //Assert.AreEqual(lookup.CanHandleDescriptor(new ProFormaDescriptor(ProFormaKey.Name, $"Something [{key}]")), isDefault);
        }
Esempio n. 11
0
        private IProteoformMassDelta?GetModification(IProFormaDescriptor?descriptor, IProteoformModificationLookup modificationLookup)
        {
            IProteoformMassDelta?modification = null;

            if (descriptor != null)
            {
                if (modificationLookup == null)
                {
                    throw new ProteoformGroupCreateException("Cannot lookup tag because lookup wasn't provided.");
                }

                if (modificationLookup.CanHandleDescriptor(descriptor))
                {
                    return(modificationLookup.GetModification(descriptor));
                }

                throw new ProteoformGroupCreateException($"Couldn't handle descriptor {descriptor}.");
            }

            return(modification);
        }
Esempio n. 12
0
        public void Setup()
        {
            var unimodOboParser = new UnimodOboParser();

            UnimodModification[] modifications = unimodOboParser.Parse(UnimodTest.GetUnimodFilePath()).ToArray();

            NistElementParser nistParser = new NistElementParser();

            IElement[] elements = nistParser.ParseFile(Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData", "elements.dat")).ToArray();
            _elementProvider = new InMemoryElementProvider(elements);

            _residueProvider = new IupacAminoAcidProvider(_elementProvider);
            var atomProvider = new UnimodHardCodedAtomProvider(_elementProvider);

            _lookup = new CompositeModificationLookup(new IProteoformModificationLookup[]
            {
                UnimodModificationLookup.CreateFromModifications(modifications, atomProvider),
                new FormulaLookup(_elementProvider),
                new MassLookup(),
                new BrnoModificationLookup(_elementProvider),
                new IgnoreKeyModificationLookup(ProFormaKey.Info),
            });

            ProFormaParser         proFormaParser         = new ProFormaParser();
            ProteoformGroupFactory proteoformGroupFactory = new ProteoformGroupFactory(_elementProvider, _residueProvider);

            var mapper = new RelayAccessionMapper(d =>
            {
                if (d == "B:ac")
                {
                    return(Tuple.Create(ProFormaEvidenceType.PsiMod, "MOD:00394")); // acetylated residue
                }
                return(Tuple.Create(ProFormaEvidenceType.None, d));
            });

            var parser  = new UniProtPtmListParser();
            var entries = parser.Parse(File.ReadAllText(UniProtTests.GetPtmListPath())).ToList();

            _chemicalProteoformHashGenerator = new ChemicalProteoformHashGenerator(proFormaParser, proteoformGroupFactory, _lookup, mapper);
        }
Esempio n. 13
0
        public void PsiModIsotope()
        {
            var parser = new PsiModOboParser();

            PsiModTerm[] modifications = parser.Parse(PsiModOboParserTest.GetFilePath()).ToArray();

            PsiModTerm psiMod402 = modifications.Single(x => x.Id == "MOD:00402");
            IProteoformModificationLookup psiModLookup = PsiModModificationLookup.CreateFromModifications(new[] { psiMod402 },
                                                                                                          _elementProvider);

            this.FindById(psiModLookup, ProFormaKey.Identifier, ProFormaEvidenceType.PsiMod, 402, "MOD:");

            var mod = psiModLookup.GetModification(new ProFormaDescriptor(ProFormaKey.Identifier,
                                                                          ProFormaEvidenceType.PsiMod, "MOD:00402"));

            ChemicalFormula chemicalFormula = new ChemicalFormula(
                new IEntityCardinality <IElement>[]
            {
                new EntityCardinality <IElement>(_elementProvider.GetElement("C"), 22),
                new EntityCardinality <IElement>(_elementProvider.GetElement("H", 1), 30),
                new EntityCardinality <IElement>(_elementProvider.GetElement("H", 2), 8),
                new EntityCardinality <IElement>(_elementProvider.GetElement("N"), 4),
                new EntityCardinality <IElement>(_elementProvider.GetElement("O"), 6),
                new EntityCardinality <IElement>(_elementProvider.GetElement("S"), 1),
            });

            Assert.IsInstanceOf(typeof(IHasChemicalFormula), mod);
            var formulaMod = (IHasChemicalFormula)mod;

            Assert.IsTrue(chemicalFormula.Equals(formulaMod.GetChemicalFormula()));

            Assert.IsInstanceOf(typeof(IIdentifiable), mod);
            var idMod = (IIdentifiable)mod;

            Assert.AreEqual("MOD:00402", idMod.Id);
            Assert.AreEqual("Gygi ICAT(TM) d8 modified cysteine", idMod.Name);
        }
Esempio n. 14
0
        /// <summary>
        /// Creates the proteoform group.
        /// </summary>
        /// <param name="term">The term.</param>
        /// <param name="modificationLookup">The modification lookup.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">term</exception>
        /// <exception cref="ProteoformGroupCreateException">
        /// Cannot lookup tag because lookup wasn't provided.
        /// or
        /// </exception>
        public IProteoformGroup CreateProteoformGroup(ProFormaTerm term, IProteoformModificationLookup modificationLookup)
        {
            if (term == null)
            {
                throw new ArgumentNullException(nameof(term));
            }

            var residues = term.Sequence.Select(x => _residueProvider.GetResidue(x)).ToArray();

            List <IProteoformLocalizedModification>?  localizedModifications   = null;
            List <IProteoformUnlocalizedModification>?unlocalizedModifications = null;
            List <IProteoformModificationGroup>?      modificationGroups       = null;
            List <IProteoformGlobalModification>?     globalModifications      = null;
            IProteoformMassDelta?nTerminalModification = this.GetModification(term.NTerminalDescriptors, modificationLookup, "Multiple N Terminal Modifications");
            IProteoformMassDelta?cTerminalModification = this.GetModification(term.CTerminalDescriptors, modificationLookup, "Multiple C Terminal Modifications");

            if (term.Tags?.Count > 0)
            {
                foreach (var tag in term.Tags)
                {
                    IProteoformMassDelta?delta = this.GetModification(tag.Descriptors, modificationLookup,
                                                                      $"Multiple modifications at index: {tag.ZeroBasedStartIndex}");

                    if (delta != null)
                    {
                        localizedModifications ??= new List <IProteoformLocalizedModification>();
                        localizedModifications.Add(new LocalizedModification(delta, tag.ZeroBasedStartIndex, tag.ZeroBasedEndIndex));
                    }
                }
            }

            if (term.LabileDescriptors?.Count > 0)
            {
                foreach (var item in term.LabileDescriptors)
                {
                    IProteoformMassDelta?delta = this.GetModification(item, modificationLookup);

                    if (delta != null)
                    {
                        unlocalizedModifications ??= new List <IProteoformUnlocalizedModification>();
                        unlocalizedModifications.Add(new UnlocalizedModification(delta, 1, true));
                    }
                }
            }

            if (term.UnlocalizedTags?.Count > 0)
            {
                foreach (var item in term.UnlocalizedTags)
                {
                    IProteoformMassDelta?delta = this.GetModification(item.Descriptors, modificationLookup,
                                                                      "Multiple unlocalized descriptors on same tag.");

                    if (delta != null)
                    {
                        unlocalizedModifications ??= new List <IProteoformUnlocalizedModification>();
                        unlocalizedModifications.Add(new UnlocalizedModification(delta, item.Count, false));
                    }
                }
            }

            if (term.TagGroups?.Count > 0)
            {
                foreach (var item in term.TagGroups)
                {
                    IProteoformMassDelta?delta = this.GetModification(item, modificationLookup);

                    if (delta != null)
                    {
                        modificationGroups ??= new List <IProteoformModificationGroup>();
                        modificationGroups.Add(new TagGroupModification(delta, item.Name,
                                                                        item.Members.Select(x => new TagGroupModificationMember(x.ZeroBasedStartIndex, x.ZeroBasedEndIndex, x.Weight))));
                    }
                }
            }

            // Debating about doing this as a decorators around Residues. Starting with just keeping this as another mod type.
            if (term.GlobalModifications?.Count > 0)
            {
                foreach (var item in term.GlobalModifications)
                {
                    IProteoformMassDelta?delta = this.GetModification(item.Descriptors, modificationLookup,
                                                                      "Multiple global modification descriptors on same tag.");

                    if (delta != null)
                    {
                        globalModifications ??= new List <IProteoformGlobalModification>();
                        globalModifications.Add(new GlobalModification(delta, item.TargetAminoAcids));
                    }
                }
            }

            return(new ProteoformGroup(residues, nTerminalModification, cTerminalModification, localizedModifications, unlocalizedModifications,
                                       modificationGroups, globalModifications, _water));
        }
Esempio n. 15
0
        private IProteoformMassDelta?GetModification(IList <ProFormaDescriptor>?descriptors, IProteoformModificationLookup modificationLookup,
                                                     string multipleModsErrorMessage)
        {
            IProteoformMassDelta?modification = null;

            if (descriptors != null && descriptors.Count > 0)
            {
                if (modificationLookup == null)
                {
                    throw new ProteoformGroupCreateException("Cannot lookup tag because lookup wasn't provided.");
                }

                foreach (var descriptor in descriptors)
                {
                    IProteoformMassDelta?mod = null;

                    if (modificationLookup.CanHandleDescriptor(descriptor))
                    {
                        mod = modificationLookup.GetModification(descriptor);
                    }
                    else
                    {
                        throw new ProteoformGroupCreateException($"Couldn't handle descriptor {descriptor}.");
                    }

                    if (modification == null)
                    {
                        modification = mod;
                    }
                    else if (mod != null)
                    {
                        if (mod is IHasChemicalFormula form1 &&
                            modification is IHasChemicalFormula form2 &&
                            !form1.GetChemicalFormula().Equals(form2.GetChemicalFormula()))
                        {
                            throw new ProteoformGroupCreateException(multipleModsErrorMessage);
                        }
                    }
                }
            }

            return(modification);
        }
Esempio n. 16
0
 private void SetupFormula()
 {
     _formulaLookup = new FormulaLookup(_elementProvider);
 }
Esempio n. 17
0
 private void InvalidIdHandling(string id, IProteoformModificationLookup lookup, ProFormaKey key,
                                ProFormaEvidenceType evidenceType = ProFormaEvidenceType.None)
 {
     Assert.Throws <ProteoformModificationLookupException>(
         () => lookup.GetModification(new ProFormaDescriptor(key, evidenceType, id)));
 }