hbat 2.2.12__tar.gz → 2.2.12.dev30__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hbat-2.2.12.dev30/.github/workflows/joss-paper.yml +43 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/PKG-INFO +1 -1
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/examples/index.rst +19 -17
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/_version.py +2 -2
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat.egg-info/SOURCES.txt +3 -0
- hbat-2.2.12.dev30/paper/paper.bib +95 -0
- hbat-2.2.12.dev30/paper/paper.md +88 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/.github/workflows/cleanup-prereleases.yml +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/.github/workflows/release.yml +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/.github/workflows/test.yml +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/CITATION.cff +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/CODE_OF_CONDUCT.md +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/CONTRIBUTING.md +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/LICENSE +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/MANIFEST.in +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/Makefile +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/README.md +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/build_standalone.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/build_standalone_linux.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/build_standalone_windows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/conda/meta.yaml +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/Makefile +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/requirements.txt +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/_static/custom.css +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/_static/light-theme.css +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/ccd/ccd_analyzer.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/ccd/constants_generator.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/ccd/generate_ccd_constants.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/ccd/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/cli/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/app.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/atomic_data.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/misc.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/parameters.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/constants/pdb_constants.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/interactions.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/np_analyzer.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/np_vector.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/pdb_fixer.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/pdb_parser.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/core/structure.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/gui/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/utilities/atom_utils.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/utilities/graphviz_utils.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/api/utilities/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/cli.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/conf.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/development.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/index.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/installation.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/license.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/logic.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/parameters.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/pdbfixing.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/docs/source/quickstart.rst +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/1bhl.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/1gai.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/1ubi.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/2izf.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/4jsv.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/4laz.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/4ub7.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/4x21.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_pdb_files/6rsa.pdb +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/drug_design_strict.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/high_resolution.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/low_resolution.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/membrane_proteins.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/nmr_structures.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/standard_resolution.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/strong_interactions_only.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/example_presets/weak_interactions_permissive.hbat +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/ccd/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/ccd/ccd_analyzer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/ccd/constants_generator.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/ccd/generate_ccd_constants.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/cli/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/cli/main.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/app.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/atomic_data.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/misc.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/parameters.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/pdb_constants.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/constants/residue_bonds.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/analysis.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/analyzer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/app_config.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/atom_classifier.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/interactions.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/np_analyzer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/np_vector.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/pdb_fixer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/pdb_parser.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/core/structure.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/chain_visualization.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/export_manager.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/graphviz_preferences_dialog.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/graphviz_renderer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/main_window.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/matplotlib_renderer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/parameter_panel.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/results_panel.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/gui/visualization_renderer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/utilities/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/utilities/atom_utils.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat/utilities/graphviz_utils.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat.icns +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat.ico +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat.png +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat.svg +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat_cli.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/hbat_gui.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/pyproject.toml +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/pytest.ini +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/requirements-dev.txt +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/requirements.txt +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/setup.cfg +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/README.md +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/cli/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/cli/test_cli_main.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/cli/test_cli_output_formats.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/conftest.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/e2e/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/e2e/test_cli_workflows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/e2e/test_complete_workflows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/e2e/test_graphviz_workflows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/e2e/test_gui_workflows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/gui/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/gui/test_gui_components.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/test_analyzer_components.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/test_cli_integration.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/test_graphviz_renderer.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/test_molecular_validation.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/integration/test_pdb_parsing.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/performance/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/performance/test_ccd_performance.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/performance/test_performance_workflows.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/run_tests.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/__init__.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_cli_parsing.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_graphviz_utils.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_gui_components.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_interactions.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_parameters.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_scrollable_canvas.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_structures.py +0 -0
- {hbat-2.2.12 → hbat-2.2.12.dev30}/tests/unit/test_vector_math.py +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Build JOSS Paper
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- 'paper/**'
|
|
7
|
+
pull_request:
|
|
8
|
+
paths:
|
|
9
|
+
- 'paper/**'
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build-paper:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
name: Build JOSS Paper PDF
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Build paper PDF
|
|
22
|
+
uses: docker://openjournals/inara:latest
|
|
23
|
+
with:
|
|
24
|
+
args: paper/paper.md
|
|
25
|
+
|
|
26
|
+
- name: Upload paper artifacts
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: joss-paper
|
|
30
|
+
path: |
|
|
31
|
+
paper/paper.pdf
|
|
32
|
+
paper/paper.crossref
|
|
33
|
+
retention-days: 30
|
|
34
|
+
|
|
35
|
+
- name: Check if paper PDF was generated
|
|
36
|
+
run: |
|
|
37
|
+
if [ -f paper/paper.pdf ]; then
|
|
38
|
+
echo "✅ Paper PDF generated successfully"
|
|
39
|
+
ls -la paper/paper.pdf
|
|
40
|
+
else
|
|
41
|
+
echo "❌ Paper PDF generation failed"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
@@ -20,10 +20,10 @@ Simple Hydrogen Bond Analysis
|
|
|
20
20
|
|
|
21
21
|
.. code-block:: python
|
|
22
22
|
|
|
23
|
-
from hbat.core.analysis import
|
|
23
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
24
24
|
|
|
25
25
|
# Initialize analyzer
|
|
26
|
-
analyzer =
|
|
26
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
27
27
|
|
|
28
28
|
# Analyze PDB file
|
|
29
29
|
analyzer.analyze_file("1abc.pdb")
|
|
@@ -42,7 +42,8 @@ Advanced Parameter Customization
|
|
|
42
42
|
|
|
43
43
|
.. code-block:: python
|
|
44
44
|
|
|
45
|
-
from hbat.core.analysis import
|
|
45
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
46
|
+
from hbat.constants.parameters import AnalysisParameters
|
|
46
47
|
|
|
47
48
|
# Create custom parameters for drug design
|
|
48
49
|
drug_params = AnalysisParameters(
|
|
@@ -52,7 +53,7 @@ Advanced Parameter Customization
|
|
|
52
53
|
analysis_mode="global" # Include all interactions
|
|
53
54
|
)
|
|
54
55
|
|
|
55
|
-
analyzer =
|
|
56
|
+
analyzer = MolecularInteractionAnalyzer(parameters=drug_params)
|
|
56
57
|
analyzer.analyze_file("drug_target_complex.pdb")
|
|
57
58
|
|
|
58
59
|
# Focus on strong interactions only
|
|
@@ -67,7 +68,7 @@ Multi-Type Interaction Analysis
|
|
|
67
68
|
.. code-block:: python
|
|
68
69
|
|
|
69
70
|
# Analyze all interaction types
|
|
70
|
-
analyzer =
|
|
71
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
71
72
|
analyzer.analyze_file("membrane_protein.pdb")
|
|
72
73
|
|
|
73
74
|
print("=== Interaction Summary ===")
|
|
@@ -94,14 +95,14 @@ Processing Multiple Structures
|
|
|
94
95
|
|
|
95
96
|
import glob
|
|
96
97
|
import csv
|
|
97
|
-
from hbat.core.analysis import
|
|
98
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
98
99
|
|
|
99
100
|
# Process all PDB files in directory
|
|
100
101
|
pdb_files = glob.glob("structures/*.pdb")
|
|
101
102
|
results = []
|
|
102
103
|
|
|
103
104
|
for pdb_file in pdb_files:
|
|
104
|
-
analyzer =
|
|
105
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
105
106
|
if analyzer.analyze_file(pdb_file):
|
|
106
107
|
stats = analyzer.get_statistics()
|
|
107
108
|
results.append({
|
|
@@ -134,7 +135,7 @@ Comparative Analysis
|
|
|
134
135
|
results = {}
|
|
135
136
|
|
|
136
137
|
for name, pdb_file in structures.items():
|
|
137
|
-
analyzer =
|
|
138
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
138
139
|
analyzer.analyze_file(pdb_file)
|
|
139
140
|
|
|
140
141
|
results[name] = {
|
|
@@ -161,9 +162,9 @@ Detailed CSV Export
|
|
|
161
162
|
.. code-block:: python
|
|
162
163
|
|
|
163
164
|
import csv
|
|
164
|
-
from hbat.core.analysis import
|
|
165
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
165
166
|
|
|
166
|
-
analyzer =
|
|
167
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
167
168
|
analyzer.analyze_file("protein.pdb")
|
|
168
169
|
|
|
169
170
|
# Export hydrogen bonds to CSV
|
|
@@ -193,9 +194,9 @@ JSON Export with Metadata
|
|
|
193
194
|
|
|
194
195
|
import json
|
|
195
196
|
from datetime import datetime
|
|
196
|
-
from hbat.core.analysis import
|
|
197
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
197
198
|
|
|
198
|
-
analyzer =
|
|
199
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
199
200
|
analyzer.analyze_file("complex.pdb")
|
|
200
201
|
|
|
201
202
|
# Create comprehensive results dictionary
|
|
@@ -244,7 +245,8 @@ Drug-Target Interaction Analysis
|
|
|
244
245
|
|
|
245
246
|
.. code-block:: python
|
|
246
247
|
|
|
247
|
-
from hbat.core.analysis import
|
|
248
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
249
|
+
from hbat.constants.parameters import AnalysisParameters
|
|
248
250
|
|
|
249
251
|
# Custom parameters for drug analysis
|
|
250
252
|
drug_params = AnalysisParameters(
|
|
@@ -253,7 +255,7 @@ Drug-Target Interaction Analysis
|
|
|
253
255
|
analysis_mode="global"
|
|
254
256
|
)
|
|
255
257
|
|
|
256
|
-
analyzer =
|
|
258
|
+
analyzer = MolecularInteractionAnalyzer(parameters=drug_params)
|
|
257
259
|
analyzer.analyze_file("drug_target.pdb")
|
|
258
260
|
|
|
259
261
|
# Filter interactions involving the drug (assuming it's a HET residue)
|
|
@@ -275,7 +277,7 @@ Membrane Protein Analysis
|
|
|
275
277
|
.. code-block:: python
|
|
276
278
|
|
|
277
279
|
# Analyze interactions in membrane proteins
|
|
278
|
-
analyzer =
|
|
280
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
279
281
|
analyzer.analyze_file("membrane_protein.pdb")
|
|
280
282
|
|
|
281
283
|
# Categorize interactions by region (transmembrane vs extracellular)
|
|
@@ -307,9 +309,9 @@ Using with Pandas for Analysis
|
|
|
307
309
|
.. code-block:: python
|
|
308
310
|
|
|
309
311
|
import pandas as pd
|
|
310
|
-
from hbat.core.analysis import
|
|
312
|
+
from hbat.core.analysis import MolecularInteractionAnalyzer
|
|
311
313
|
|
|
312
|
-
analyzer =
|
|
314
|
+
analyzer = MolecularInteractionAnalyzer()
|
|
313
315
|
analyzer.analyze_file("protein.pdb")
|
|
314
316
|
|
|
315
317
|
# Convert results to pandas DataFrame
|
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '2.2.12'
|
|
21
|
-
__version_tuple__ = version_tuple = (2, 2, 12)
|
|
20
|
+
__version__ = version = '2.2.12.dev30'
|
|
21
|
+
__version_tuple__ = version_tuple = (2, 2, 12, 'dev30')
|
|
@@ -19,6 +19,7 @@ pytest.ini
|
|
|
19
19
|
requirements-dev.txt
|
|
20
20
|
requirements.txt
|
|
21
21
|
.github/workflows/cleanup-prereleases.yml
|
|
22
|
+
.github/workflows/joss-paper.yml
|
|
22
23
|
.github/workflows/release.yml
|
|
23
24
|
.github/workflows/test.yml
|
|
24
25
|
conda/meta.yaml
|
|
@@ -116,6 +117,8 @@ hbat/gui/visualization_renderer.py
|
|
|
116
117
|
hbat/utilities/__init__.py
|
|
117
118
|
hbat/utilities/atom_utils.py
|
|
118
119
|
hbat/utilities/graphviz_utils.py
|
|
120
|
+
paper/paper.bib
|
|
121
|
+
paper/paper.md
|
|
119
122
|
tests/README.md
|
|
120
123
|
tests/__init__.py
|
|
121
124
|
tests/conftest.py
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
@article{tiwari2007hbat,
|
|
2
|
+
title={HBAT: A Complete Package for Analysing Strong and Weak Hydrogen Bonds in Macromolecular Crystal Structures},
|
|
3
|
+
author={Tiwari, Abhishek and Panigrahi, Sunil Kumar},
|
|
4
|
+
journal={In Silico Biology},
|
|
5
|
+
volume={7},
|
|
6
|
+
number={6},
|
|
7
|
+
pages={651--661},
|
|
8
|
+
year={2007},
|
|
9
|
+
doi={10.3233/ISI-2007-00337},
|
|
10
|
+
publisher={IOS Press}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@article{berman2000protein,
|
|
14
|
+
title={The protein data bank},
|
|
15
|
+
author={Berman, Helen M and Westbrook, John and Feng, Zukang and Gilliland, Gary and Bhat, T N and Weissig, Helge and Shindyalov, Ilya N and Bourne, Philip E},
|
|
16
|
+
journal={Nucleic acids research},
|
|
17
|
+
volume={28},
|
|
18
|
+
number={1},
|
|
19
|
+
pages={235--242},
|
|
20
|
+
year={2000},
|
|
21
|
+
publisher={Oxford University Press}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@article{mcdonald1994satisfying,
|
|
25
|
+
title={Satisfying hydrogen bonding potential in proteins},
|
|
26
|
+
author={McDonald, Iain K and Thornton, Janet M},
|
|
27
|
+
journal={Journal of molecular biology},
|
|
28
|
+
volume={238},
|
|
29
|
+
number={5},
|
|
30
|
+
pages={777--793},
|
|
31
|
+
year={1994},
|
|
32
|
+
publisher={Elsevier}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@article{lindauer1996hbexplore,
|
|
36
|
+
title={HBexplore--a new tool for identifying and analysing hydrogen bonding patterns in biological macromolecules},
|
|
37
|
+
author={Lindauer, Klaus and Bendic, Cvetko and S{\"u}hnel, J{\"u}rgen},
|
|
38
|
+
journal={Computer applications in the biosciences: CABIOS},
|
|
39
|
+
volume={12},
|
|
40
|
+
number={4},
|
|
41
|
+
pages={281--289},
|
|
42
|
+
year={1996},
|
|
43
|
+
publisher={Oxford University Press}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@article{harris2020numpy,
|
|
47
|
+
title={Array programming with NumPy},
|
|
48
|
+
author={Harris, Charles R and Millman, K Jarrod and Van Der Walt, St{\'e}fan J and Gommers, Ralf and Virtanen, Pauli and Cournapeau, David and Wieser, Eric and Taylor, Julian and Berg, Sebastian and Smith, Nathaniel J and others},
|
|
49
|
+
journal={Nature},
|
|
50
|
+
volume={585},
|
|
51
|
+
number={7825},
|
|
52
|
+
pages={357--362},
|
|
53
|
+
year={2020},
|
|
54
|
+
publisher={Nature Publishing Group},
|
|
55
|
+
doi={10.1038/s41586-020-2649-2}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@article{hunter2007matplotlib,
|
|
59
|
+
title={Matplotlib: A 2D graphics environment},
|
|
60
|
+
author={Hunter, John D},
|
|
61
|
+
journal={Computing in science \& engineering},
|
|
62
|
+
volume={9},
|
|
63
|
+
number={3},
|
|
64
|
+
pages={90--95},
|
|
65
|
+
year={2007},
|
|
66
|
+
publisher={IEEE Computer Society},
|
|
67
|
+
doi={10.1109/MCSE.2007.55}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@inproceedings{hagberg2008networkx,
|
|
71
|
+
title={Exploring network structure, dynamics, and function using NetworkX},
|
|
72
|
+
author={Hagberg, Aric and Swart, Pieter and Chult, Daniel S},
|
|
73
|
+
booktitle={Proceedings of the 7th Python in Science Conference},
|
|
74
|
+
volume={11},
|
|
75
|
+
pages={11--15},
|
|
76
|
+
year={2008},
|
|
77
|
+
organization={Pasadena, CA USA}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@misc{graphviz2024,
|
|
81
|
+
title={Graphviz - Graph Visualization Software},
|
|
82
|
+
author={{Graphviz Contributors}},
|
|
83
|
+
year={2024},
|
|
84
|
+
howpublished={\url{https://graphviz.org/}},
|
|
85
|
+
note={Accessed: 2024-08-03}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@manual{tkinter2024,
|
|
89
|
+
title={tkinter --- Python interface to Tcl/Tk},
|
|
90
|
+
author={{Python Software Foundation}},
|
|
91
|
+
year={2024},
|
|
92
|
+
organization={Python Software Foundation},
|
|
93
|
+
howpublished={\url{https://docs.python.org/3/library/tkinter.html}},
|
|
94
|
+
note={Python Standard Library Documentation}
|
|
95
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 'HBAT: An updated with Python Reimplementation for Hydrogen Bond Analysis in
|
|
3
|
+
Macromolecular Structures'
|
|
4
|
+
tags:
|
|
5
|
+
- Python
|
|
6
|
+
- structural biology
|
|
7
|
+
- hydrogen bonds
|
|
8
|
+
- molecular interactions
|
|
9
|
+
- protein structures
|
|
10
|
+
- bioinformatics
|
|
11
|
+
authors:
|
|
12
|
+
- name: Abhishek Tiwari
|
|
13
|
+
orcid: 0000-0003-2222-2395
|
|
14
|
+
affiliation: 1
|
|
15
|
+
affiliations:
|
|
16
|
+
- name: Independent Researcher
|
|
17
|
+
index: 1
|
|
18
|
+
date: 3 August 2025
|
|
19
|
+
bibliography: paper.bib
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Summary
|
|
23
|
+
|
|
24
|
+
The Hydrogen Bond Analysis Tool (HBAT) is a comprehensive Python package for automated analysis of non-covalent interactions in macromolecular structures. Originally developed in Perl/Tk and published in 2007 [@tiwari2007hbat], latest version of HBAT has been completely rewritten in Python with enhanced functionality. The software identifies and analyzes hydrogen bonds, halogen bonds, and X-H...$\pi$ interactions using geometric criteria, providing detailed statistical analysis and advanced visualization capabilities for cooperativity chains. Latest version of HBAT offers improved graphical interface (tkinter), a simple command-line interfaces, and a developer-friendly API interface making it accessible to users with different computational backgrounds and workflow requirements.
|
|
25
|
+
|
|
26
|
+
# Statement of need
|
|
27
|
+
|
|
28
|
+
Hydrogen bonds and other weak interactions are fundamental to protein structure, stability, and function. With over 200,000 structures in the Protein Data Bank [@berman2000protein], there is an increasing need for automated tools to analyze these interactions systematically. While several tools exist for hydrogen bond analysis [@mcdonald1994satisfying; @lindauer1996hbexplore], they often lack comprehensive coverage of interaction types, modern interfaces, or advanced visualization capabilities.
|
|
29
|
+
|
|
30
|
+
The original HBAT [@tiwari2007hbat] was developed in Perl/Tk with a Windows-only GUI, limiting its adoption in modern computational environments. The software needed modernization to address current research needs including: (1) cross-platform compatibility, (2) support for modern Python scientific computing ecosystems and extensibility, (3) enhanced visualization capabilities, (4) improved performance for large structures, and (5) flexible output formats for downstream analysis.
|
|
31
|
+
|
|
32
|
+
HBAT addresses these limitations by providing a modern, cross-platform Python implementation that integrates seamlessly with contemporary structural biology workflows. The software is particularly valuable for researchers in structural biology, computational chemistry, and drug design who need detailed analysis of molecular interactions.
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
# Key Enhancements
|
|
37
|
+
|
|
38
|
+
Latest HBAT update introduces several major improvements over the original 2007 version:
|
|
39
|
+
|
|
40
|
+
**Reimplementation in Python**: Complete rewrite from Perl/Tk to Python, enabling integration with the scientific Python ecosystem including NumPy [@harris2020numpy], Matplotlib [@hunter2007matplotlib], and NetworkX [@hagberg2008networkx].
|
|
41
|
+
|
|
42
|
+
**Cross-Platform Compatibility**: Unlike the original Windows-only version, HBAT now runs on Windows, macOS, and Linux systems.
|
|
43
|
+
|
|
44
|
+
**Enhanced Interaction Analysis**: Expanded coverage includes hydrogen bonds (O-H...O, N-H...O, N-H...N, C-H...O), halogen bonds (C-X...Y where X=F,Cl,Br,I), and X-H...$\pi$ interactions with aromatic systems.
|
|
45
|
+
|
|
46
|
+
**Cooperativity chain Visualization**: Two rendering engines for cooperativity chain visualization: NetworkX [@hagberg2008networkx]/matplotlib [@hunter2007matplotlib] for basic networks and GraphViz [@graphviz2024] for publication-quality graphics with customizable layouts and high-resolution export (PNG, SVG, PDF).
|
|
47
|
+
|
|
48
|
+
**Dual Interface Design**: Both graphical interface (tkinter [@tkinter2024]-based) and command-line interface with extensive parameter customization and preset configurations for different structure types (high-resolution, NMR, membrane proteins). In addition, users can use HBAT's API interfaces to build custom scientific workflows and perform analysis using scientific notebooks.
|
|
49
|
+
|
|
50
|
+
**Flexible Output Formats**: Multiple export options including text, CSV, and JSON formats for integration with downstream analysis pipelines and statistical software.
|
|
51
|
+
|
|
52
|
+
**Parameter Presets**: Built-in parameter sets optimized for different experimental conditions and structure types, addressing the challenge of parameter selection for different research contexts.
|
|
53
|
+
|
|
54
|
+
**PDB Fixing Integration**: Optional integration with PDBFixer for automated correction of missing hydrogen atoms, addressing a common preprocessing requirement.
|
|
55
|
+
|
|
56
|
+

|
|
57
|
+
|
|
58
|
+
# Implementation
|
|
59
|
+
|
|
60
|
+
HBAT employs a modular architecture with separate components for PDB parsing, geometric analysis, statistical computation, and visualization. The core analysis engine uses efficient nearest-neighbor searching with configurable distance cutoffs, followed by geometric filtering based on distance and angular criteria.
|
|
61
|
+
|
|
62
|
+
The software implements the same fundamental geometric approach as the original version [@tiwari2007hbat] but with optimized algorithms and improved numerical precision.
|
|
63
|
+
|
|
64
|
+
Statistical analysis includes frequency distributions, geometric parameter distributions, and furcation analysis (bifurcated, trifurcated interactions). The cooperativity analysis uses graph theory to identify hydrogen bond networks and chains, with visualization support for understanding complex interaction patterns.
|
|
65
|
+
|
|
66
|
+
# Impact and Applications
|
|
67
|
+
|
|
68
|
+
Since its original publication, HBAT has been cited in numerous studies of protein structure and molecular recognition [@tiwari2007hbat]. Latest update, however, extends this impact by providing modern tools for:
|
|
69
|
+
|
|
70
|
+
- **Structure-based drug design**: Analysis of protein-ligand interactions and binding site characterization
|
|
71
|
+
- **Protein engineering**: Understanding stabilization mechanisms and rational design strategies
|
|
72
|
+
- **Molecular dynamics analysis**: Post-simulation analysis of interaction networks and stability
|
|
73
|
+
- **Crystallographic studies**: Validation and interpretation of high-resolution structures
|
|
74
|
+
- **Comparative structural analysis**: Systematic comparison of interaction patterns across protein families
|
|
75
|
+
|
|
76
|
+
The software's preset configurations and flexible parameter system make it accessible to both computational experts and experimental structural biologists, broadening its potential user base compared to the original version.
|
|
77
|
+
|
|
78
|
+
# Availability and Future Development
|
|
79
|
+
|
|
80
|
+
HBAT is freely available under the MIT license at https://github.com/abhishektiwari/hbat with comprehensive documentation at https://hbat.abhishek-tiwari.com/. The software can be installed via PyPI (`pip install hbat`) or `conda`, with optional GraphViz integration for advanced visualization features.
|
|
81
|
+
|
|
82
|
+
Future development plans include support for trajectory analysis from molecular dynamics simulations, enhanced machine learning-based interaction classification, and integration with structural biology workflows through plugins for popular molecular visualization software.
|
|
83
|
+
|
|
84
|
+
# Acknowledgements
|
|
85
|
+
|
|
86
|
+
The author thanks the original co-developer Sunil K. Panigrahi and acknowledges the structural biology community for feedback that guided the modernization of HBAT.
|
|
87
|
+
|
|
88
|
+
# References
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|