Json's Metabolite Services (JMS)
A Python library for
- mapping identifiers between genome scale metabolic models and metabolite databases
- reusable data structures for peaks, compounds and indexed data stores
- efficient mass and empirical compound search functions
As the name suggests, JSON or similar Python dictionaries are used widely in this library. The definition of these data structures was a result of patterning our scientific work, and we encourage reuse and community contributions. A few examples:
// A LC-MS peak:
{
'id_number': 555,
'mz': 133.0970,
'rtime': 654,
'height': 14388.0,
'left_base': 648,
'right_base': 662,
}
// A compound (i.e. metabolite):
{
'primary_id': HMDB0000195,
'primary_db': 'HMDB',
'name': 'Inosine',
"neutral_formula": C10H12N4O5,
"neutral_formula_mass": 268.08077,
'SMILES': 'OC[C@H]1O[C@H]([C@H](O)[C@@H]1O)N1C=NC2=C(O)N=CN=C12',
'inchikey': 'UGQMRVRMYYASKQ-KQYNXXCUSA-N',
'LogP': -2.10,
'other_ids': {'PubChem': '6021',
'KEGG': 'C00294',
'ChEBI': '17596',
'MetaNetX': 'MNXM1103335',
},
}
// An empirical compound:
{
"neutral_formula_mass": 268.08077,
"neutral_formula": C10H12N4O5,
"alternative_formulas": [],
"interim_id": C10H12N4O5_268.08077,
"identity": [
{'compounds': ['HMDB0000195'], 'names': ['Inosine'],
'score': 0.6, 'probability': null},
{'compounds': ['HMDB0000195', 'HMDB0000481'], 'names': ['Inosine', 'Allopurinol riboside'],
'score': 0.1, 'probability': null},
{'compounds': ['HMDB0000481'], 'names': ['Allopurinol riboside'],
'score': 0.1, 'probability': null},
{'compounds': ['HMDB0003040''], 'names': ['Arabinosylhypoxanthine'],
'score': 0.05, 'probability': null},
],
"MS1_pseudo_Spectra": [
{'feature_id': 'FT1705', 'mz': 269.0878, 'rtime': 99.90,
'isotope': 'M0', 'modification': '+H', 'charged_formula': '', 'ion_relation': 'M+H[1+]'},
{'feature_id': 'FT1876', 'mz': 291.0697, 'rtime': 99.53,
'isotope': 'M0', 'modification': '+Na', 'charged_formula': '', 'ion_relation': 'M+Na[1+]'},
{'feature_id': 'FT1721', 'mz': 270.0912, 'rtime': 99.91,
'isotope': '13C', 'modification': '+H', 'charged_formula': '', 'ion_relation': 'M(C13)+H[1+]'},
{'feature_id': 'FT1993', 'mz': 307.0436, 'rtime': 99.79,
'isotope': 'M0', 'modification': '+K', 'charged_formula': '', 'ion_relation': 'M+K[1+]'},
],
"MS2_Spectra": [
'AZ0000711', 'AZ0002101'
],
"Database_referred": ["Azimuth", "HMDB", "MONA"],
}
These examples show a core set of attributes. Users can extend to include other attributes that meet their own project needs. With consistent core concepts, some simple mapping dictionaries will produce interoperability between projects.
In empirical compound, MS1_pseudo_Spectra are for adduction ions (A-ions); the biological_ion is usually different (B-ions).
Install
pip install jms-metabolite-services
How to use
See notebooks under docs/ for demonstration.
Run test:
# decompress the HMDB4 data if needed
➜ JMS✗ xz -d jms/data/compounds/list_compounds_HMDB4.json.xz
# run test from top dir
➜ JMS✗ python3 -m jms.test
Example code of annotating a feature table against HMDB as in test.py:
import json
from jms.dbStructures import annotate_peaks_against_kcds
from jms.io import read_table_to_peaks
list_compounds = json.load(open('jms/data/compounds/list_compounds_HMDB4.json'))
mydata = read_table_to_peaks('testdata/full_Feature_table.tsv', '\t')
annotate_peaks_against_kcds(mydata, list_compounds,
export_file_name_prefix='jms_annotated_',
mode='pos', mz_tolerance_ppm=5)
Links
Source code: https://github.com/shuzhao-li/JMS
Package Repository: https://pypi.org/project/jms-metabolite-services/
Related projects:
metDataModel: data models for metabolomics
mass2chem: common utilities in interpreting mass spectrometry data, annotation
khipu: a Python library for generalized, low-level annotation of MS metabolomics
Asari: trackable and scalable LC-MS data preprocessing
mummichog: metabolomics pathway/network analysis
Dev notes
The PyPi package excludes subdirectories in /data.
The App Engine web tool will be in a different repository.
Citation
To come.
Metadata
Release files for jms-metabolite-services 0.5.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jms_metabolite_services-0.5.8.tar.gz | 3.1 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jms_metabolite_services-0.5.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.3 MB
Release files / jms_metabolite_services-0.5.8.tar.gz
| Download URL | jms_metabolite_services-0.5.8.tar.gz |
|---|---|
| Size | 3.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0067d4804ebf10aed93556be6e2f7113173b9f5a50c36ea81ef6a2d0254772e7
|
|
BLAKE2b-256 checksum How to use checksums |
3a0b65b514616aa58d624db7b2c890039cd008129477b62d60f98a98a38845c8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Release files / jms_metabolite_services-0.5.8-py3-none-any.whl
| Download URL | jms_metabolite_services-0.5.8-py3-none-any.whl |
|---|---|
| Size | 3.2 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6e40c1a6dbe42fafc3b6346fd81f89aa78bd24943d8a3c6e55f37028880e8793
|
|
BLAKE2b-256 checksum How to use checksums |
d3d2c0a9022ff7a8272dc4317bc4694f2d48d1d9b21f34eec5e8328ed944adf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.4
|
Security for jms-metabolite-services 0.5.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.