{"id":16916996,"url":"https://github.com/althonos/pyjess","last_synced_at":"2025-04-11T16:24:48.110Z","repository":{"id":233638141,"uuid":"768710150","full_name":"althonos/pyjess","owner":"althonos","description":"Cython bindings and Python interface to Jess, a 3D template matching software for protein structures.","archived":false,"fork":false,"pushed_at":"2025-04-09T14:54:29.000Z","size":341,"stargazers_count":8,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-11T16:24:41.391Z","etag":null,"topics":["bioinformatics","catalytic-site","cython-wrapper","enzyme","pdb","protein-structure","python","python-interface","python-library"],"latest_commit_sha":null,"homepage":"","language":"Cython","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/althonos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-07T15:36:44.000Z","updated_at":"2025-04-09T14:54:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"4294ec7e-e917-4646-abf3-8a7511abdf74","html_url":"https://github.com/althonos/pyjess","commit_stats":{"total_commits":131,"total_committers":2,"mean_commits":65.5,"dds":0.007633587786259555,"last_synced_commit":"01747ecdaf3f9a189c7edb09436db2a26ecfe96a"},"previous_names":["althonos/pyjess"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyjess","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyjess/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyjess/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyjess/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/althonos","download_url":"https://codeload.github.com/althonos/pyjess/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248439057,"owners_count":21103532,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","catalytic-site","cython-wrapper","enzyme","pdb","protein-structure","python","python-interface","python-library"],"created_at":"2024-10-13T19:31:57.392Z","updated_at":"2025-04-11T16:24:48.100Z","avatar_url":"https://github.com/althonos.png","language":"Cython","readme":"# 🐍🔍 PyJess [![Stars](https://img.shields.io/github/stars/althonos/pyjess.svg?style=social\u0026maxAge=3600\u0026label=Star)](https://github.com/althonos/pyjess/stargazers)\n\n*[Cython](https://cython.org/) bindings and Python interface to [Jess](https://github.com/iriziotis/jess), a 3D template matching software.*\n\n[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pyjess/test.yml?branch=main\u0026logo=github\u0026style=flat-square\u0026maxAge=300)](https://github.com/althonos/pyjess/actions)\n[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pyjess?style=flat-square\u0026maxAge=3600\u0026logo=codecov)](https://codecov.io/gh/althonos/pyjess/)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\u0026maxAge=2678400)](https://choosealicense.com/licenses/mit/)\n[![PyPI](https://img.shields.io/pypi/v/pyjess.svg?style=flat-square\u0026maxAge=3600\u0026logo=PyPI)](https://pypi.org/project/pyjess)\n[![Bioconda](https://img.shields.io/conda/vn/bioconda/pyjess?style=flat-square\u0026maxAge=3600\u0026logo=anaconda)](https://anaconda.org/bioconda/pyjess)\n[![AUR](https://img.shields.io/aur/version/python-pyjess?logo=archlinux\u0026style=flat-square\u0026maxAge=3600)](https://aur.archlinux.org/packages/python-pyjess)\n[![Wheel](https://img.shields.io/pypi/wheel/pyjess.svg?style=flat-square\u0026maxAge=3600)](https://pypi.org/project/pyjess/#files)\n[![Python Versions](https://img.shields.io/pypi/pyversions/pyjess.svg?style=flat-square\u0026maxAge=600\u0026logo=python)](https://pypi.org/project/pyjess/#files)\n[![Python Implementations](https://img.shields.io/pypi/implementation/pyjess.svg?style=flat-square\u0026maxAge=600\u0026label=impl)](https://pypi.org/project/pyjess/#files)\n[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400\u0026style=flat-square)](https://github.com/althonos/pyjess/)\n[![Mirror](https://img.shields.io/badge/mirror-LUMC-003EAA.svg?maxAge=2678400\u0026style=flat-square)](https://git.lumc.nl/mflarralde/pyjess/)\n[![Issues](https://img.shields.io/github/issues/althonos/pyjess.svg?style=flat-square\u0026maxAge=600)](https://github.com/althonos/pyjess/issues)\n[![Docs](https://img.shields.io/readthedocs/pyjess/latest?style=flat-square\u0026maxAge=600)](https://pyjess.readthedocs.io)\n[![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400\u0026style=flat-square)](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)\n[![Downloads](https://img.shields.io/pypi/dm/pyjess?style=flat-square\u0026color=303f9f\u0026maxAge=86400\u0026label=downloads)](https://pepy.tech/project/pyjess)\n\n\n## 🗺️ Overview\n\nJess is an algorithm for constraint-based structural template matching\nproposed by Jonathan Barker *et al.*[\\[1\\]](#ref1). It can be used to identify\ncatalytic residues from a known template inside a protein structure. Jess\nis an evolution of TESS, a geometric hashing algorithm developed by\nAndrew Wallace *et al.*[\\[2\\]](#ref2), removing some pre-computation and\nstructural requirements from the original algorithm. Jess was further\nupdated and maintained by [Ioannis Riziotis](https://github.com/iriziotis)\nduring his PhD in the [Thornton group](https://www.ebi.ac.uk/research/thornton/).\n\nPyJess is a Python module that provides bindings to Jess using\n[Cython](https://cython.org/). It allows creating templates, querying them\nwith protein structures, and retrieving the hits using a Python API without\nperforming any external I/O.\n\n\n## 🔧 Installing\n\nPyJess is available for all modern Python versions (3.7+).\n\nIt can be installed directly from [PyPI](https://pypi.org/project/pyjess/),\nwhich hosts some pre-built x86-64 wheels for Linux, MacOS, and Windows,\nas well as the code required to compile from source with Cython:\n```console\n$ pip install pyjess\n```\n\nOtherwise, PyJess is also available as a [Bioconda](https://bioconda.github.io/)\npackage:\n```console\n$ conda install -c bioconda pyjess\n```\n\nCheck the [*install* page](https://pyjess.readthedocs.io/en/stable/install.html)\nof the documentation for other ways to install PyJess on your machine.\n\n\n## 🔖 Citation\n\nPyJess is scientific software, and builds on top of Jess. Please cite\nJess if you are using it in an academic work, for instance as:\n\n\u003e PyJess, a Python library binding to Jess (Barker *et al.*, 2003).\n\n\n## 💡 Example\n\nLoad templates to be used as references from different template files:\n\n```python\nimport pathlib\nimport pyjess\n\ntemplates = []\nfor path in sorted(pathlib.Path(\"vendor/jess/examples\").glob(\"template_*.qry\")):\n    with path.open() as file:\n        templates.append(pyjess.Template.load(file, id=path.stem))\n```\n\nCreate a `Jess` instance and use it to query a molecule (a PDB structure)\nagainst the stored templates:\n\n```python\njess = pyjess.Jess(templates)\nmol = pyjess.Molecule.load(\"vendor/jess/examples/test_pdbs/pdb1a0p.ent\")\nquery = jess.query(mol, rmsd_threshold=2.0, distance_cutoff=3.0, max_dynamic_distance=3.0)\n```\n\nThe hits are computed iteratively, and the different output statistics are\ncomputed on-the-fly when requested:\n\n```python\nfor hit in query:\n    print(hit.molecule.id, hit.template.id, hit.rmsd, hit.log_evalue)\n    for atom in hit.atoms():\n        print(atom.name, atom.x, atom.y, atom.z)\n```\n\n\n## 🧶 Thread-safety\n\nOnce a `Jess` instance has been created, the templates cannot be edited anymore,\nmaking the `Jess.query` method re-entrant. This allows querying several\nmolecules against the same templates in parallel using a thread pool:\n\n```python\nmolecules = []\nfor path in glob.glob(\"vendor/jess/examples/test_pdbs/*.ent\"):\n    molecules.append(Molecule.load(path))\n\nwith multiprocessing.ThreadPool() as pool:\n    hits = pool.map(jess.query, molecules)\n```\n\n*⚠️ Prior to PyJess `v0.2.1`, the Jess code was running some thread-unsafe operations which have now been patched.\nIf running Jess in parallel, make sure to use `v0.2.1` or later to use the code patched with re-entrant functions*.\n\n\u003c!-- ## ⏱️ Benchmarks --\u003e\n\n\n## 💭 Feedback\n\n### ⚠️ Issue Tracker\n\nFound a bug ? Have an enhancement request ? Head over to the [GitHub issue tracker](https://github.com/althonos/[pyjess]/issues)\nif you need to report or ask something. If you are filing in on a bug,\nplease include as much information as you can about the issue, and try to\nrecreate the same bug in a simple, easily reproducible situation.\n\n\n### 🏗️ Contributing\n\nContributions are more than welcome! See\n[`CONTRIBUTING.md`](https://github.com/althonos/pyjess/blob/main/CONTRIBUTING.md)\nfor more details.\n\n\n## 📋 Changelog\n\nThis project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)\nand provides a [changelog](https://github.com/althonos/pyjess/blob/main/CHANGELOG.md)\nin the [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) format.\n\n\n## ⚖️ License\n\nThis library is provided under the [MIT License](https://choosealicense.com/licenses/mit/). The JESS code is distributed under the [MIT License](https://choosealicense.com/licenses/mit/) as well.\n\n*This project is in no way not affiliated, sponsored, or otherwise endorsed\nby the JESS authors. It was developed\nby [Martin Larralde](https://github.com/althonos/) during his PhD project\nat the [European Molecular Biology Laboratory](https://www.embl.de/) in\nthe [Zeller team](https://github.com/zellerlab).*\n\n\n## 📚 References\n\n- \u003ca id=\"ref1\"\u003e\\[1\\]\u003c/a\u003e Barker, J. A., \u0026 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](https://doi.org/10.1093/bioinformatics/btg226).\n- \u003ca id=\"ref2\"\u003e\\[2\\]\u003c/a\u003e Wallace, A. C., Borkakoti, N., \u0026 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](https://doi.org/10.1002/pro.5560061104).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falthonos%2Fpyjess","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falthonos%2Fpyjess","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falthonos%2Fpyjess/lists"}