Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[proforma] Unimod modificatons cannot be resolved by ID through psims #132

Closed
RalfG opened this issue Nov 30, 2023 · 0 comments · Fixed by #133
Closed

[proforma] Unimod modificatons cannot be resolved by ID through psims #132

RalfG opened this issue Nov 30, 2023 · 0 comments · Fixed by #133

Comments

@RalfG
Copy link
Contributor

RalfG commented Nov 30, 2023

Hi @mobiusklein,

I think this issue is related to the changes made in #129 (thanks btw to implement this!).

Resolving a Unimod modification with its accession number if the psims back-end is used results in an error:

>>> from pyteomics import proforma
>>> proforma._has_psims
True
>>> mod = proforma.process_tag_tokens("U:4")
>>> mod.mass
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Untitled-2.ipynb Cell 14 line 1
----> [1](vscode-notebook-cell:Untitled-2.ipynb?jupyter-notebook#X11sdW50aXRsZWQ%3D?line=0) mod.name

File [c:\Users\ralfg\git\ms2rescore\.venv\lib\site-packages\pyteomics\proforma.py:735](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:735), in ModificationBase.name(self)
    [727](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:727) @property
    [728](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:728) def name(self):
    [729](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:729)     '''The primary name of this modification from its provider.
    [730](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:730) 
    [731](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:731)     Returns
    [732](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:732)     -------
    [733](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:733)     str
    [734](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:734)     '''
--> [735](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:735)     return self.definition.get('name')

File [c:\Users\ralfg\git\ms2rescore\.venv\lib\site-packages\pyteomics\proforma.py:700](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:700), in ModificationBase.definition(self)
    [691](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:691) '''A :class:`dict` of properties describing this modification, given
    [692](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:692) by the providing controlled vocabulary. This value is cached, and
    [693](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:693) should not be modified.
   (...)
    [697](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:697) dict
    [698](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:698) '''
    [699](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:699) if self._definition is None:
--> [700](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:700)     self._definition = self.resolve()
    [701](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:701) return self._definition

File [c:\Users\ralfg\git\ms2rescore\.venv\lib\site-packages\pyteomics\proforma.py:758](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:758), in ModificationBase.resolve(self)
    [755](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:755) '''Find the term and return it's properties
    [756](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:756) '''
    [757](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:757) keys = self.resolver.parse_identifier(self.value)
--> [758](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:758) return self.resolver(*keys)

File [c:\Users\ralfg\git\ms2rescore\.venv\lib\site-packages\pyteomics\proforma.py:344](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:344), in ModificationResolver.__call__(self, name, id, **kwargs)
    [343](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:343) def __call__(self, name=None, id=None, **kwargs):
--> [344](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:344)     return self.resolve(name, id, **kwargs)

File [c:\Users\ralfg\git\ms2rescore\.venv\lib\site-packages\pyteomics\proforma.py:386](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:386), in UnimodResolver.resolve(self, name, id, **kwargs)
    [384](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:384)         raise KeyError(name)
    [385](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:385) elif id is not None:
--> [386](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:386)     defn = self.database.by_id(id)
    [387](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:387)     if not defn:
    [388](file:///C:/Users/ralfg/git/ms2rescore/.venv/lib/site-packages/pyteomics/proforma.py:388)         raise KeyError(id)

AttributeError: 'Unimod' object has no attribute 'by_id'

Without the psims backend, it works as expected:

>>> from pyteomics import proforma
>>> proforma._has_psims
False
>>> mod = proforma.process_tag_tokens("U:4")
>>> mod.mass
57.021464

Best,
Ralf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant