Cython bindings and Python interface to JESS, a 3D template matching software.
Project description
🐍🔍 PyJess
Cython bindings and Python interface to Jess, a 3D template matching software.
🗺️ Overview
Jess is an algorithm for constraint-based structural template matching proposed by Jonathan Barker et al.[1]. It can be used to identify catalytic residues from a known template inside a protein structure. Jess is an evolution of TESS, a geometric hashing algorithm developed by Andrew Wallace et al.[2], removing some pre-computation and structural requirements from the original algorithm. Jess was further updated and maintained by Ioannis Riziotis during his PhD in the Thornton group.
PyJess is a Python module that provides bindings to Jess using Cython. It allows creating templates, querying them with protein structures, and retrieving the hits using a Python API without performing any external I/O.
🔧 Installing
PyJess is available for all modern Python versions (3.6+).
It can be installed directly from PyPI, which hosts some pre-built x86-64 wheels for Linux, MacOS, and Windows, as well as the code required to compile from source with Cython:
$ pip install pyjess
Check the install page of the documentation for other ways to install PyJess on your machine.
💡 Example
Load templates to be used as references from different template files:
import glob
import pyjess
templates = []
for path in sorted(glob.iglob("vendor/jess/examples/template_*.qry")):
templates.append(Template.load(path, id=os.path.basename(path)))
Create a Jess
instance and use it to query a molecule (a PDB structure)
against the stored templates:
jess = Jess(templates)
mol = Molecule("vendor/jess/examples/test_pdbs/pdb1a0p.ent")
query = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)
The hits are computed iteratively, and the different output statistics are computed on-the-fly when requested:
for hit in query:
print(hit.molecule.id, hit.template.id, hit.rmsd, hit.log_evalue)
for atom in hit.atoms():
print(atom.name, atom.x, atom.y, atom.z)
🧶 Thread-safety
Once a Jess
instance has been created, the templates cannot be edited anymore,
making the Jess.query
method re-entrant. This allows querying several
molecules against the same templates in parallel using a thread pool:
molecules = []
for path in glob.glob("vendor/jess/examples/test_pdbs/*.ent"):
molecules.append(Molecule.load(path))
with multiprocessing.ThreadPool() as pool:
hits = pool.map(jess.query, molecules)
⚠️ Prior to PyJess v0.2.1
, the Jess code was running some thread-unsafe operations which have now been patched.
If running Jess in parallel, make sure to use v0.2.1
or later to use the code patched with re-entrant functions.
💭 Feedback
⚠️ Issue Tracker
Found a bug ? Have an enhancement request ? Head over to the GitHub issue tracker if you need to report or ask something. If you are filing in on a bug, please include as much information as you can about the issue, and try to recreate the same bug in a simple, easily reproducible situation.
🏗️ Contributing
Contributions are more than welcome! See
CONTRIBUTING.md
for more details.
📋 Changelog
This project adheres to Semantic Versioning and provides a changelog in the Keep a Changelog format.
⚖️ License
This library is provided under the MIT License. The JESS code is distributed under the MIT License as well.
This project is in no way not affiliated, sponsored, or otherwise endorsed by the JESS authors. It was developed by Martin Larralde during his PhD project at the European Molecular Biology Laboratory in the Zeller team.
📚 References
- [1] Barker, J. A., & Thornton, J. M. (2003). An algorithm for constraint-based structural template matching: application to 3D templates with statistical analysis. Bioinformatics (Oxford, England), 19(13), 1644–1649. doi:10.1093/bioinformatics/btg226.
- [2] Wallace, A. C., Borkakoti, N., & Thornton, J. M. (1997). TESS: a geometric hashing algorithm for deriving 3D coordinate templates for searching structural databases. Application to enzyme active sites. Protein science : a publication of the Protein Society, 6(11), 2308–2323. doi:10.1002/pro.5560061104.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pyjess-0.3.1-pp310-pypy310_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bb9c69ddd3c394dce3957f2fd7f23c7c785a2f3dbf319209f2fe4912b39d818 |
|
MD5 | 47177fa96235e2ef3dbd56ce642771a4 |
|
BLAKE2b-256 | 3fc5b2024d231903060a304e467c557ca69dc6aeb848cb569b6bdcc637477bdf |
Hashes for pyjess-0.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | adc38be4e2ce2de4ccfa6df94bb99118ad918675f5e6e4abe98122ea1285fa72 |
|
MD5 | 3a59d7a10bde11d6da865b8f941a332f |
|
BLAKE2b-256 | d853310add12d8920d9c468f0a663d5d57a113f7b1fd9739410869ddc48955c7 |
Hashes for pyjess-0.3.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c0f20b037763acada13fd9b820e61e4bb3dcd98bacbb2563c6266c02acea419 |
|
MD5 | c9f86a7d910e1d197495e100cbc23814 |
|
BLAKE2b-256 | f17d4f9a78c840d84c1947fd36ca94521d603a579e61e821a2f2b01f6e7d45df |
Hashes for pyjess-0.3.1-pp39-pypy39_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84ec3ca9287fd5bf689756c6f31e305f0ea4194b730a5c83c26f4ac4d83c7dea |
|
MD5 | 1787d12d070ad9a0105d699c8711d101 |
|
BLAKE2b-256 | 0afd8e270d139faa93e674cbeeddaf7c0aeea9f1bc371e4ce0f53fe08678134c |
Hashes for pyjess-0.3.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 19eb02484e21f64c76c5e854e3fb0adea57ad523737216aff0bb74eacac49ced |
|
MD5 | b7a1407c1818f823a842a78a65a9d54d |
|
BLAKE2b-256 | dd74c787297dc64ea98b5505cfea7ce4fd650cf4903758acbefdd2510efb4316 |
Hashes for pyjess-0.3.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64641a075732160278a696611a070fc789e0e55fa32f316cf7c0098bae61026e |
|
MD5 | b92c42551f23ddea9bc13f82b3e33087 |
|
BLAKE2b-256 | 7eb4c12ef192fa0c9104f31738367d27c6d521142a3593bb120bf5d59bf92f36 |
Hashes for pyjess-0.3.1-pp38-pypy38_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 63e5de58f67b792be6f1aeaef121f395a34450886b51deaf164ccb71fcac3b3e |
|
MD5 | f31da21af7912d9dae7797384153d4ab |
|
BLAKE2b-256 | 5149b274050ef8cf72f18b986c1c507cc5b0ed87ab98cd5e2d697e5e41237e8f |
Hashes for pyjess-0.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc2666197b848a1e6a78d6cdcd4a209c1ce8f75dc33e1dd82d85b64a3ad86e33 |
|
MD5 | bc01d9c3b19d41ddc6bdfbae63f38daa |
|
BLAKE2b-256 | 73b66d09299a2c238b94f6de67e8f419f3e0ec1271c070fe41ecb5cdbee89cf5 |
Hashes for pyjess-0.3.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb41f02641477d7732b64e07faa4740ad291f2d787560450deb58b43642d98e1 |
|
MD5 | 47cc7c894b9857a249e07a324e0ffce3 |
|
BLAKE2b-256 | 01b3f2c8ef98b7b6e14a1e8cf63bf0d7e567fb7b943128ae57a06034366c8d8f |
Hashes for pyjess-0.3.1-pp37-pypy37_pp73-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b088ef04baa78d5a097a2867133917963eb51bc9f850e840ca08011c96008c46 |
|
MD5 | 86f4e62ad166c44b56905e97517afac5 |
|
BLAKE2b-256 | 28ea9c9ecfad5940238de95143a9ce1edf4ba63f4952a59e11a2d2e51feac563 |
Hashes for pyjess-0.3.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c463aae9a3b0fab30844eda018f9fd2c6aee8c7e327e1aa11c17ef27e1364ff |
|
MD5 | be9841e7f96a73b88a2a46ab6153726a |
|
BLAKE2b-256 | 14222f133aca5e4856c8aca509ad0513b900a68482a801bbb83e1f12b4deaf3f |
Hashes for pyjess-0.3.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bbf07fc841a74898accf5f397240ed798d8e492cc623ccf7e111e0e59ed8ebc0 |
|
MD5 | 59bb05dc93dedac3873738ccb0ee1ce3 |
|
BLAKE2b-256 | 1fa4a1af1d366cd6e278e24659740c8abfaf74a5f4b624cfb1769a59d2d55e6f |
Hashes for pyjess-0.3.1-cp312-cp312-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 23704e62c4dc466652d167c13cb8b982b18101f861a467504a632d41e57c5358 |
|
MD5 | bc6801086cc6dfb7fdee212beb796641 |
|
BLAKE2b-256 | 66c140de9440e2836bfbd7971fbc356bb444e62cf50ec898a8dbe00b1b52bb33 |
Hashes for pyjess-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 173fbea1384e6e61c1bc070541348cc533d18bfd7ea7a5177549d47b28f8fe1f |
|
MD5 | 5ff9a2d4bd9be1b258c34ce10f9f36eb |
|
BLAKE2b-256 | a21821ada70247c4b028a429ed079694b7329d1ec9997bbeb1c0e3e78d55b4dc |
Hashes for pyjess-0.3.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e30ec8d57377987a333aee618afc2c880ff294484c153941a1d7405476843f41 |
|
MD5 | 939652598bed5ebf8813d5359d8721c2 |
|
BLAKE2b-256 | cab8ebdf648da65a70b175c6ef058f5ed0d0e83b4898b11a1b42151b41884f82 |
Hashes for pyjess-0.3.1-cp311-cp311-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffcf1338c7a620224ae5ea5991f9d3e83a54c49e86aea3ee3199b49fc5e5d999 |
|
MD5 | f97b95753bdc8dd7733ad2deb3069059 |
|
BLAKE2b-256 | 649a213a0df7ce8d0a1e3859d9e6e4059faa8bbad2addb5b03e714623949da33 |
Hashes for pyjess-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e446d50f7ddb77a7772681f2f7ef2b82eb1bb4905e4057d8f25a66f4b9aa6585 |
|
MD5 | 1278fabb0a00dbc7eeb01f2acb254e15 |
|
BLAKE2b-256 | 3b8cb5dc66cb0d38ce9517adc7da8476531c699b2355e6a155b3367b98260a6d |
Hashes for pyjess-0.3.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea93ce40c3ee85938b547b65686ff9e3939ff2923f8796e5dcf706ddad7a393a |
|
MD5 | e61a280c51a5c5b0c1058cd7106fdac3 |
|
BLAKE2b-256 | b4e371d15df582c66cdb1944d6948580423a70374b0712f5efb6c757dfe6fecc |
Hashes for pyjess-0.3.1-cp310-cp310-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a8a9bde13af59afa1d01e194b0544506513f5830cc2bf6392e4c482e39187da6 |
|
MD5 | 4b4a3103cd088ae3d029500a5e28ae42 |
|
BLAKE2b-256 | 22b216d769ace4cca6d250fa5c4fc368303255367c4c0c55c25638e63f0eeff7 |
Hashes for pyjess-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1e61821b49712e66ced8c204260846c447a5f460d4f70c4136b4dd93df72bf5 |
|
MD5 | 7bea6b23fbfe4294f228dc8283f7b237 |
|
BLAKE2b-256 | feeda09e83d03e68c6f45b2503b52dbac798c24bc74b829c0da11a935b1f77e2 |
Hashes for pyjess-0.3.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6519990ae6b5f74e898baecadd688c840fd7e33c404c044ad7b4202ec238a601 |
|
MD5 | 2a744b19dc86ee54a955b580920c3aef |
|
BLAKE2b-256 | 038219a4ad10f899ef0c7327a379e8e5454698b52de8ae7b97516d197c5f3183 |
Hashes for pyjess-0.3.1-cp39-cp39-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d70cedea5a5dd0f305220451e48a627c1134c5bb1c00adf176f94e558ab2644a |
|
MD5 | ce24ce69b3cdabba649c61dd21255222 |
|
BLAKE2b-256 | 97e07313f96fe23d9f2b69fc01b9b16da01ba0328a3edc3561989bf9360d4187 |
Hashes for pyjess-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9a91248484633bfa19acd3162355c1d22c3d92b4a1b922ba9248204185faea6a |
|
MD5 | 8563e453ed0bbe80b67c856dca30a119 |
|
BLAKE2b-256 | d147108cc08475e29df23ebd144634118e3f0966cf359d284ef162952d30e8e5 |
Hashes for pyjess-0.3.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d19b412230693fdb9eb0fee31ac1465cef2cc83119090444a4b14029ecf5b0a |
|
MD5 | cefdf7d041cf9e54142ac96214a4f82a |
|
BLAKE2b-256 | 5cb9fb5d3feb9fc38a4e5630e7e77b4c9939b6368027c3bfc60a58f8a14eac1d |
Hashes for pyjess-0.3.1-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26a6e1745b43cf3b6d942eee6782501cd7c2e66409e0b6c71496f010714be082 |
|
MD5 | a9369838b99e497a50cc7ec8eb5da216 |
|
BLAKE2b-256 | 8e3c5a2482da5d72506991f2a6bdddbce8a9ce5bce9328ec8d63a91df0f4346b |
Hashes for pyjess-0.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc092ad5ae7103351e32ed94c5a8548cf0b010c81e310153c1a18b33532aa854 |
|
MD5 | ef89c7f3ceabd3af224251fc2386ee29 |
|
BLAKE2b-256 | 1c817c9e4f559378dc7f9e2391c3069c8de527fd99430df4fafe1977d817ac79 |
Hashes for pyjess-0.3.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d4735b8d7f401a690e9270e000f79b7ad38ca2f2d306924f5900f7a7adffd3a |
|
MD5 | 73e6ac8059ee5bd478670b0780b0a84e |
|
BLAKE2b-256 | e70963bb5883f24b3d8c5e828e4273721cd99225c7a1de03bea2a7fcf6225763 |
Hashes for pyjess-0.3.1-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4466cfb663c3251236f91026b3bfdb7e3422f4b7e5d5d78a4a850a5dfa4d1097 |
|
MD5 | 8523431ab407bc9b604d7b2a46f17cbc |
|
BLAKE2b-256 | 27ff807e2fc5d26fd55cd981eb7639ebf459c1a7ed4768917eed6af48e8b7835 |
Hashes for pyjess-0.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 69d482d2603277ddab3b44a378edb9b10527464c8ed9238d7c3946245d7a9b17 |
|
MD5 | 31a560765e56d1291288acebb38edab7 |
|
BLAKE2b-256 | ab4de5d7d469b85c91c71c3580ee9c7a40459d2021e3f87d50b3c76f7c4e5246 |
Hashes for pyjess-0.3.1-cp37-cp37m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9f6c0658debcdd8d94c4d4c4e17a9fd8ede66371d9e095482addb486c393b4c7 |
|
MD5 | 092c663da00d752d3822ff84c22d46fe |
|
BLAKE2b-256 | 20a822337435919dc3fb64c51385fa54844c63debbee862cfcd4d390f8dac2df |
Hashes for pyjess-0.3.1-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6c896f813f5135661a2e1ae44bb7098cc9f48007660e20d72a387d1456ab32c3 |
|
MD5 | d51683b22ce2c88d00866afb4c38e781 |
|
BLAKE2b-256 | 7c1a8bff74ca4c57306e89a0d98c351cf597c7dff82ca01a7dd8cd288bf493ea |
Hashes for pyjess-0.3.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5cab90a35e0c5b6fda27373088562adfe23e9cfbeddaf58be672ea7e966dd35c |
|
MD5 | b3e09e611d1f2a77da5477278d8e9fc0 |
|
BLAKE2b-256 | 794970d6da483b94d336fa2feea7b45ebb4a86dc3aecb14cbe9c2a85740e2a48 |
Hashes for pyjess-0.3.1-cp36-cp36m-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0b1814fbee0e60501cfb17f4eb9f24355d4c4a4c3cadc3bdf6e7c5d58d3acb08 |
|
MD5 | e33b2233006c0c1e1d23388bdd892876 |
|
BLAKE2b-256 | 36b178fa1abf1cb505f4f290f2782074eecc7fd85fdc48b85289b56e728611e9 |