hbat 2.2.9.dev27__tar.gz → 2.2.10.dev28__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.
Files changed (152) hide show
  1. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/.github/workflows/test.yml +8 -4
  2. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/CODE_OF_CONDUCT.md +1 -2
  3. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/Makefile +1 -1
  4. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/PKG-INFO +4 -1
  5. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/README.md +3 -0
  6. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/pdb_constants.rst +9 -0
  7. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/cli.rst +23 -10
  8. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/index.rst +9 -2
  9. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/quickstart.rst +1 -1
  10. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/_version.py +2 -2
  11. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/misc.py +5 -5
  12. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/pdb_constants.py +5 -1
  13. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/atom_classifier.py +4 -1
  14. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/interactions.py +146 -29
  15. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/np_analyzer.py +12 -1
  16. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/structure.py +12 -0
  17. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/chain_visualization.py +1 -1
  18. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/export_manager.py +6 -0
  19. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/graphviz_preferences_dialog.py +1 -1
  20. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/graphviz_renderer.py +30 -2
  21. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/main_window.py +406 -32
  22. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/results_panel.py +11 -3
  23. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/conftest.py +3 -3
  24. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/e2e/test_complete_workflows.py +1 -1
  25. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/e2e/test_graphviz_workflows.py +39 -23
  26. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/test_analyzer_components.py +1 -1
  27. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/test_graphviz_renderer.py +3 -0
  28. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_graphviz_utils.py +14 -8
  29. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_interactions.py +6 -6
  30. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_scrollable_canvas.py +2 -0
  31. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/.github/workflows/cleanup-prereleases.yml +0 -0
  32. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/.github/workflows/release.yml +0 -0
  33. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/CITATION.cff +0 -0
  34. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/CONTRIBUTING.md +0 -0
  35. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/LICENSE +0 -0
  36. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/MANIFEST.in +0 -0
  37. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/build_standalone.py +0 -0
  38. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/build_standalone_linux.py +0 -0
  39. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/build_standalone_windows.py +0 -0
  40. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/conda/meta.yaml +0 -0
  41. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/Makefile +0 -0
  42. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/requirements.txt +0 -0
  43. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/_static/custom.css +0 -0
  44. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/_static/light-theme.css +0 -0
  45. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/ccd/ccd_analyzer.rst +0 -0
  46. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/ccd/constants_generator.rst +0 -0
  47. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/ccd/generate_ccd_constants.rst +0 -0
  48. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/ccd/index.rst +0 -0
  49. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/cli/index.rst +0 -0
  50. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/app.rst +0 -0
  51. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/atomic_data.rst +0 -0
  52. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/index.rst +0 -0
  53. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/misc.rst +0 -0
  54. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/constants/parameters.rst +0 -0
  55. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/index.rst +0 -0
  56. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/interactions.rst +0 -0
  57. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/np_analyzer.rst +0 -0
  58. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/np_vector.rst +0 -0
  59. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/pdb_fixer.rst +0 -0
  60. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/pdb_parser.rst +0 -0
  61. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/core/structure.rst +0 -0
  62. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/examples/index.rst +0 -0
  63. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/gui/index.rst +0 -0
  64. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/index.rst +0 -0
  65. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/utilities/atom_utils.rst +0 -0
  66. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/utilities/graphviz_utils.rst +0 -0
  67. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/api/utilities/index.rst +0 -0
  68. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/conf.py +0 -0
  69. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/development.rst +0 -0
  70. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/installation.rst +0 -0
  71. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/license.rst +0 -0
  72. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/logic.rst +0 -0
  73. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/parameters.rst +0 -0
  74. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/docs/source/pdbfixing.rst +0 -0
  75. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/1bhl.pdb +0 -0
  76. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/1gai.pdb +0 -0
  77. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/1ubi.pdb +0 -0
  78. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/2izf.pdb +0 -0
  79. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/4jsv.pdb +0 -0
  80. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/4laz.pdb +0 -0
  81. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/4ub7.pdb +0 -0
  82. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/4x21.pdb +0 -0
  83. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_pdb_files/6rsa.pdb +0 -0
  84. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/drug_design_strict.hbat +0 -0
  85. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/high_resolution.hbat +0 -0
  86. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/low_resolution.hbat +0 -0
  87. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/membrane_proteins.hbat +0 -0
  88. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/nmr_structures.hbat +0 -0
  89. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/standard_resolution.hbat +0 -0
  90. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/strong_interactions_only.hbat +0 -0
  91. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/example_presets/weak_interactions_permissive.hbat +0 -0
  92. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/__init__.py +0 -0
  93. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/ccd/__init__.py +0 -0
  94. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/ccd/ccd_analyzer.py +0 -0
  95. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/ccd/constants_generator.py +0 -0
  96. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/ccd/generate_ccd_constants.py +0 -0
  97. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/cli/__init__.py +0 -0
  98. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/cli/main.py +0 -0
  99. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/__init__.py +0 -0
  100. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/app.py +0 -0
  101. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/atomic_data.py +0 -0
  102. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/parameters.py +0 -0
  103. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/constants/residue_bonds.py +0 -0
  104. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/__init__.py +0 -0
  105. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/analysis.py +0 -0
  106. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/analyzer.py +0 -0
  107. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/app_config.py +0 -0
  108. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/np_vector.py +0 -0
  109. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/pdb_fixer.py +0 -0
  110. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/core/pdb_parser.py +0 -0
  111. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/__init__.py +0 -0
  112. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/matplotlib_renderer.py +0 -0
  113. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/parameter_panel.py +0 -0
  114. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/gui/visualization_renderer.py +0 -0
  115. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/utilities/__init__.py +0 -0
  116. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/utilities/atom_utils.py +0 -0
  117. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat/utilities/graphviz_utils.py +0 -0
  118. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat.egg-info/SOURCES.txt +0 -0
  119. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat.icns +0 -0
  120. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat.ico +0 -0
  121. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat.png +0 -0
  122. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat.svg +0 -0
  123. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat_cli.py +0 -0
  124. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/hbat_gui.py +0 -0
  125. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/pyproject.toml +0 -0
  126. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/pytest.ini +0 -0
  127. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/requirements-dev.txt +0 -0
  128. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/requirements.txt +0 -0
  129. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/setup.cfg +0 -0
  130. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/README.md +0 -0
  131. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/__init__.py +0 -0
  132. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/cli/__init__.py +0 -0
  133. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/cli/test_cli_main.py +0 -0
  134. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/e2e/__init__.py +0 -0
  135. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/e2e/test_cli_workflows.py +0 -0
  136. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/e2e/test_gui_workflows.py +0 -0
  137. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/gui/__init__.py +0 -0
  138. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/gui/test_gui_components.py +0 -0
  139. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/__init__.py +0 -0
  140. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/test_cli_integration.py +0 -0
  141. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/test_molecular_validation.py +0 -0
  142. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/integration/test_pdb_parsing.py +0 -0
  143. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/performance/__init__.py +0 -0
  144. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/performance/test_ccd_performance.py +0 -0
  145. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/performance/test_performance_workflows.py +0 -0
  146. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/run_tests.py +0 -0
  147. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/__init__.py +0 -0
  148. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_cli_parsing.py +0 -0
  149. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_gui_components.py +0 -0
  150. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_parameters.py +0 -0
  151. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_structures.py +0 -0
  152. {hbat-2.2.9.dev27 → hbat-2.2.10.dev28}/tests/unit/test_vector_math.py +0 -0
@@ -21,10 +21,10 @@ jobs:
21
21
  with:
22
22
  python-version: ${{ matrix.python-version }}
23
23
 
24
- - name: Install GraphViz
24
+ - name: Install system dependencies
25
25
  run: |
26
26
  sudo apt-get update
27
- sudo apt-get install -y graphviz
27
+ sudo apt-get install -y graphviz xvfb
28
28
 
29
29
  - name: Install dependencies
30
30
  run: |
@@ -39,11 +39,15 @@ jobs:
39
39
  run: make type-check
40
40
 
41
41
  - name: Run tests
42
- run: make test
42
+ run: xvfb-run -a make test
43
+ env:
44
+ DISPLAY: :99
43
45
 
44
46
  - name: Run coverage
45
- run: make test-coverage
47
+ run: xvfb-run -a make test-coverage
46
48
  if: matrix.python-version == '3.10'
49
+ env:
50
+ DISPLAY: :99
47
51
 
48
52
  - name: Upload coverage to Codecov
49
53
  uses: codecov/codecov-action@v5
@@ -60,8 +60,7 @@ representative at an online or offline event.
60
60
 
61
61
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
62
  reported to the community leaders responsible for enforcement at
63
- ``pwessel at hawaii dot edu``, ``leouieda at gmail dot com``, or
64
- ``meghanj at hawaii dot edu``. All complaints will be reviewed and investigated
63
+ ``hbat at abhishek-tiwari dot com``. All complaints will be reviewed and investigated
65
64
  promptly and fairly.
66
65
 
67
66
  All community leaders are obligated to respect the privacy and security of the
@@ -76,7 +76,7 @@ test-coverage:
76
76
 
77
77
  test-gui:
78
78
  @echo "Running GUI tests..."
79
- pytest tests/gui/ -v -m "gui"
79
+ pytest tests/ -v -m "gui"
80
80
 
81
81
  test-unit:
82
82
  @echo "Running unit tests..."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hbat
3
- Version: 2.2.9.dev27
3
+ Version: 2.2.10.dev28
4
4
  Summary: Hydrogen Bond Analysis Tool for PDB structures
5
5
  Author-email: Abhishek Tiwari <hbat@abhishek-tiwari.com>
6
6
  License-Expression: MIT
@@ -93,6 +93,7 @@ A Python package to automate the analysis of potential hydrogen bonds and simila
93
93
 
94
94
  HBAT v2 is a modern Python re-implementation of the original Perl-based tool developed by [Abhishek Tiwari](https://www.abhishek-tiwari.com) and Sunil Kumar Panigrahi.
95
95
 
96
+ ![HBAT GUI](https://static.abhishek-tiwari.com/hbat/hbat-window-v1.png)
96
97
 
97
98
  ## Features
98
99
 
@@ -109,6 +110,8 @@ HBAT v2 is a modern Python re-implementation of the original Perl-based tool de
109
110
 
110
111
  Please review [HBAT documentation](https://hbat.abhishek-tiwari.com/) for more details.
111
112
 
113
+ ![Cooperativity chain visualization](https://static.abhishek-tiwari.com/hbat/6rsa-pdb-chain-6.png)
114
+
112
115
  ### Supported Interactions
113
116
 
114
117
  1. **Hydrogen Bonds**: O-H...O, N-H...O, N-H...N, and other X-H...Y interactions
@@ -25,6 +25,7 @@ A Python package to automate the analysis of potential hydrogen bonds and simila
25
25
 
26
26
  HBAT v2 is a modern Python re-implementation of the original Perl-based tool developed by [Abhishek Tiwari](https://www.abhishek-tiwari.com) and Sunil Kumar Panigrahi.
27
27
 
28
+ ![HBAT GUI](https://static.abhishek-tiwari.com/hbat/hbat-window-v1.png)
28
29
 
29
30
  ## Features
30
31
 
@@ -41,6 +42,8 @@ HBAT v2 is a modern Python re-implementation of the original Perl-based tool de
41
42
 
42
43
  Please review [HBAT documentation](https://hbat.abhishek-tiwari.com/) for more details.
43
44
 
45
+ ![Cooperativity chain visualization](https://static.abhishek-tiwari.com/hbat/6rsa-pdb-chain-6.png)
46
+
44
47
  ### Supported Interactions
45
48
 
46
49
  1. **Hydrogen Bonds**: O-H...O, N-H...O, N-H...N, and other X-H...Y interactions
@@ -63,6 +63,15 @@ Water molecule recognition patterns.
63
63
 
64
64
  .. autodata:: hbat.constants.pdb_constants.WATER_MOLECULES
65
65
 
66
+ Classification Codes
67
+ ~~~~~~~~~~~~~~~~~~~~
68
+
69
+ Single letter codes for molecular classification systems.
70
+
71
+ .. autodata:: hbat.constants.pdb_constants.RESIDUE_TYPE_CODES
72
+ .. autodata:: hbat.constants.pdb_constants.BACKBONE_SIDECHAIN_CODES
73
+ .. autodata:: hbat.constants.pdb_constants.AROMATIC_CODES
74
+
66
75
  Atom Name Mapping
67
76
  ~~~~~~~~~~~~~~~~~
68
77
 
@@ -166,11 +166,11 @@ Basic analysis with default parameters:
166
166
 
167
167
  hbat protein.pdb
168
168
 
169
- Save results to a text file:
169
+ Save results to a CSV file (default format):
170
170
 
171
171
  .. code-block:: bash
172
172
 
173
- hbat protein.pdb -o results.txt
173
+ hbat protein.pdb -o results.csv
174
174
 
175
175
  Use custom hydrogen bond criteria:
176
176
 
@@ -182,7 +182,7 @@ Export results in multiple formats:
182
182
 
183
183
  .. code-block:: bash
184
184
 
185
- hbat protein.pdb -o results.txt --json results.json --csv results.csv
185
+ hbat protein.pdb -o results.csv --json results.json
186
186
 
187
187
  Use a high-resolution preset:
188
188
 
@@ -236,23 +236,36 @@ The default text output includes:
236
236
  JSON Output
237
237
  ~~~~~~~~~~~
238
238
 
239
- The JSON format provides structured data with:
239
+ The JSON format automatically generates separate files for each interaction type with structured data:
240
240
 
241
241
  - Metadata section with version and file information
242
- - Complete statistics
242
+ - Complete statistics for each interaction type
243
243
  - Arrays of interactions with all geometric parameters
244
- - Atom coordinates for further processing
244
+ - Atom coordinates and structural properties for further processing
245
+
246
+ When using ``--json results.json``, HBAT creates:
247
+ - ``results_h_bonds.json``
248
+ - ``results_halogen_bonds.json``
249
+ - ``results_pi_interactions.json``
250
+ - ``results_cooperativity_chains.json``
245
251
 
246
252
  CSV Output
247
253
  ~~~~~~~~~~
248
254
 
249
- The CSV format includes separate sections for:
255
+ The CSV format automatically generates separate files for each interaction type:
250
256
 
251
- - Hydrogen bonds with all parameters
252
- - Halogen bonds with geometric data
257
+ - Hydrogen bonds with donor-acceptor properties and backbone/sidechain classification
258
+ - Halogen bonds with geometric data and structural properties
253
259
  - π interactions with distance and angle information
260
+ - Cooperativity chains showing interaction networks
261
+
262
+ When using ``--csv results.csv``, HBAT creates:
263
+ - ``results_h_bonds.csv``
264
+ - ``results_halogen_bonds.csv``
265
+ - ``results_pi_interactions.csv``
266
+ - ``results_cooperativity_chains.csv``
254
267
 
255
- Each section has appropriate column headers for easy import into spreadsheet applications.
268
+ Each file includes comprehensive data with appropriate column headers for easy import into spreadsheet applications.
256
269
 
257
270
  Exit Codes
258
271
  ----------
@@ -73,6 +73,10 @@ Welcome to HBAT (Hydrogen Bond Analysis Tool) documentation!
73
73
 
74
74
  A Python package to automate the analysis of potential hydrogen bonds and similar type of weak interactions like halogen bonds and non-canonical interactions in macromolecular structures, available in Brookhaven Protein Database (PDB) file format. HBAT uses a geometric approach to identify potential hydrogen bonds by analyzing distance and angular criteria between donor-hydrogen-acceptor triplets.
75
75
 
76
+ .. image:: https://static.abhishek-tiwari.com/hbat/hbat-window-v1.png
77
+ :alt: HBAT GUI
78
+ :align: center
79
+
76
80
  .. toctree::
77
81
  :maxdepth: 1
78
82
  :caption: User Guide
@@ -126,7 +130,7 @@ Basic usage
126
130
  .. code-block:: bash
127
131
 
128
132
  hbat input.pdb # Basic analysis
129
- hbat input.pdb -o results.txt # Save results to file
133
+ hbat input.pdb -o results.csv # Save results to CSV file (default)
130
134
 
131
135
  See full CLI options :doc:`cli`.
132
136
 
@@ -137,10 +141,13 @@ Features
137
141
  - **Cooperativity Detection**: Identifies chains of cooperative molecular interactions
138
142
  - **Structure Enhancement**: Automated PDB fixing with OpenBabel and PDBFixer integration
139
143
  - **Flexible Parameters**: Customizable analysis parameters for different research needs
140
- - **Multiple Output Formats**: Support for CSV, JSON, and formatted text output
144
+ - **Multiple Output Formats**: Support for CSV (default), JSON, and formatted text output with automated file generation for each interaction type
141
145
  - **GUI Interface**: User-friendly graphical interface for interactive analysis
142
146
  - **Command Line Tool**: Scriptable CLI for batch processing and automation
143
147
 
148
+ .. image:: https://static.abhishek-tiwari.com/hbat/6rsa-pdb-chain-6.png
149
+ :alt: Cooperativity chain visualization
150
+ :align: center
144
151
 
145
152
  Cite HBAT
146
153
  ---------
@@ -14,7 +14,7 @@ See full CLI options :doc:`cli`.
14
14
  .. code-block:: bash
15
15
 
16
16
  hbat input.pdb # Basic analysis
17
- hbat input.pdb -o results.txt # Save results to file
17
+ hbat input.pdb -o results.csv # Save results to CSV file (default)
18
18
  hbat input.pdb --hb-distance 3.0 # Custom H-bond distance cutoff
19
19
  hbat input.pdb --mode local # Local interactions only
20
20
  hbat input.pdb --json results.json # Export to JSON format
@@ -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.9.dev27'
21
- __version_tuple__ = version_tuple = (2, 2, 9, 'dev27')
20
+ __version__ = version = '2.2.10.dev28'
21
+ __version_tuple__ = version_tuple = (2, 2, 10, 'dev28')
@@ -9,11 +9,11 @@ from .app import APP_VERSION
9
9
  class GUIDefaults:
10
10
  """Default values for GUI interface."""
11
11
 
12
- # Window settings
13
- WINDOW_WIDTH = 1800
14
- WINDOW_HEIGHT = 900
15
- MIN_WINDOW_WIDTH = 1200
16
- MIN_WINDOW_HEIGHT = 800
12
+ # Window settings - optimized for standard displays (1366x768, 1920x1080)
13
+ WINDOW_WIDTH = 1280
14
+ WINDOW_HEIGHT = 720
15
+ MIN_WINDOW_WIDTH = 1024
16
+ MIN_WINDOW_HEIGHT = 680
17
17
 
18
18
  # Layout settings
19
19
  LEFT_PANEL_WIDTH = 400 # Initial pane position
@@ -792,7 +792,7 @@ Used for:
792
792
  - Ion binding site analysis
793
793
  """
794
794
 
795
- RESIDUE_TYPES: List[str] = ["DNA", "RNA", "PROTEIN", "LIGAND"]
795
+ RESIDUE_TYPES: List[str] = ["DNA", "RNA", "PROTEIN", "LIGAND", "WATER"]
796
796
  """List[str]: Standard residue type classifications for molecular analysis.
797
797
 
798
798
  Classification categories for different types of molecular residues:
@@ -800,6 +800,8 @@ Classification categories for different types of molecular residues:
800
800
  - RNA: Ribonucleotide residues (A, G, C, U, I)
801
801
  - PROTEIN: Amino acid residues (20 standard amino acids and variants)
802
802
  - LIGAND: Ligands, cofactors, metals, and other heteroatom residues
803
+ - WATER: Water molecules and solvent
804
+
803
805
 
804
806
  Used for:
805
807
  - Residue type identification and classification
@@ -813,6 +815,7 @@ RESIDUE_TYPE_CODES: Dict[str, str] = {
813
815
  "DNA": "D",
814
816
  "RNA": "R",
815
817
  "PROTEIN": "P",
818
+ "WATER": "W",
816
819
  "LIGAND": "L",
817
820
  }
818
821
  """Dict[str, str]: Single letter codes for residue types.
@@ -821,6 +824,7 @@ Mapping of full residue type names to compact single letter codes:
821
824
  - "DNA" → "D": Deoxyribonucleotide residues
822
825
  - "RNA" → "R": Ribonucleotide residues
823
826
  - "PROTEIN" → "P": Amino acid residues
827
+ - "WATER" → "W": Water molecules and solvent
824
828
  - "LIGAND" → "L": Ligands, cofactors, metals, and other heteroatom residues
825
829
 
826
830
  Used for compact representation in hydrogen bond descriptions and atom records.
@@ -19,6 +19,7 @@ from ..constants.pdb_constants import (
19
19
  RESIDUES_WITH_AROMATIC_RINGS,
20
20
  RING_ATOMS_FOR_RESIDUES_WITH_AROMATIC_RINGS,
21
21
  RNA_RESIDUES,
22
+ WATER_MOLECULES,
22
23
  )
23
24
 
24
25
 
@@ -27,7 +28,7 @@ def classify_residue_type(res_name: str) -> str:
27
28
 
28
29
  :param res_name: Three-letter residue name (e.g., 'ALA', 'DA', 'HOH')
29
30
  :type res_name: str
30
- :returns: Single letter code for residue type ('P', 'D', 'R', 'L')
31
+ :returns: Single letter code for residue type ('P', 'D', 'R', 'W', 'L')
31
32
  :rtype: str
32
33
  """
33
34
  res_name = res_name.strip().upper()
@@ -38,6 +39,8 @@ def classify_residue_type(res_name: str) -> str:
38
39
  return RESIDUE_TYPE_CODES["DNA"] # "D"
39
40
  elif res_name in RNA_RESIDUES:
40
41
  return RESIDUE_TYPE_CODES["RNA"] # "R"
42
+ elif res_name in WATER_MOLECULES:
43
+ return RESIDUE_TYPE_CODES["WATER"] # "W"
41
44
  else:
42
45
  return RESIDUE_TYPE_CODES["LIGAND"] # "L"
43
46
 
@@ -220,24 +220,24 @@ class HydrogenBond(MolecularInteraction):
220
220
  including the participating atoms, geometric parameters, and
221
221
  classification information.
222
222
 
223
- :param donor: The hydrogen bond donor atom
224
- :type donor: Atom
223
+ :param _donor: The hydrogen bond donor atom
224
+ :type _donor: Atom
225
225
  :param hydrogen: The hydrogen atom in the bond
226
226
  :type hydrogen: Atom
227
- :param acceptor: The hydrogen bond acceptor atom
228
- :type acceptor: Atom
227
+ :param _acceptor: The hydrogen bond acceptor atom
228
+ :type _acceptor: Atom
229
229
  :param distance: H...A distance in Angstroms
230
230
  :type distance: float
231
231
  :param angle: D-H...A angle in radians
232
232
  :type angle: float
233
- :param donor_acceptor_distance: D...A distance in Angstroms
234
- :type donor_acceptor_distance: float
233
+ :param _donor_acceptor_distance: D...A distance in Angstroms
234
+ :type _donor_acceptor_distance: float
235
235
  :param bond_type: Classification of the hydrogen bond type
236
236
  :type bond_type: str
237
- :param donor_residue: Identifier for donor residue
238
- :type donor_residue: str
239
- :param acceptor_residue: Identifier for acceptor residue
240
- :type acceptor_residue: str
237
+ :param _donor_residue: Identifier for donor residue
238
+ :type _donor_residue: str
239
+ :param _acceptor_residue: Identifier for acceptor residue
240
+ :type _acceptor_residue: str
241
241
  """
242
242
 
243
243
  def __init__(
@@ -252,6 +252,27 @@ class HydrogenBond(MolecularInteraction):
252
252
  _donor_residue: str,
253
253
  _acceptor_residue: str,
254
254
  ):
255
+ """Initialize a HydrogenBond object.
256
+
257
+ :param _donor: The hydrogen bond donor atom
258
+ :type _donor: Atom
259
+ :param hydrogen: The hydrogen atom in the bond
260
+ :type hydrogen: Atom
261
+ :param _acceptor: The hydrogen bond acceptor atom
262
+ :type _acceptor: Atom
263
+ :param distance: H...A distance in Angstroms
264
+ :type distance: float
265
+ :param angle: D-H...A angle in radians
266
+ :type angle: float
267
+ :param _donor_acceptor_distance: D...A distance in Angstroms
268
+ :type _donor_acceptor_distance: float
269
+ :param bond_type: Classification of the hydrogen bond type
270
+ :type bond_type: str
271
+ :param _donor_residue: Identifier for donor residue
272
+ :type _donor_residue: str
273
+ :param _acceptor_residue: Identifier for acceptor residue
274
+ :type _acceptor_residue: str
275
+ """
255
276
  self._donor = _donor
256
277
  self.hydrogen = hydrogen
257
278
  self._acceptor = _acceptor
@@ -301,7 +322,7 @@ class HydrogenBond(MolecularInteraction):
301
322
  return self._acceptor_residue
302
323
 
303
324
  def get_interaction_type(self) -> str:
304
- return "hydrogen_bond"
325
+ return "H-Bond"
305
326
 
306
327
  def get_donor_interaction_distance(self) -> float:
307
328
  """Distance from donor to hydrogen."""
@@ -394,18 +415,18 @@ class HalogenBond(MolecularInteraction):
394
415
 
395
416
  :param halogen: The halogen atom (F, Cl, Br, I)
396
417
  :type halogen: Atom
397
- :param acceptor: The electron donor/acceptor atom
398
- :type acceptor: Atom
418
+ :param _acceptor: The electron donor/acceptor atom
419
+ :type _acceptor: Atom
399
420
  :param distance: X...A distance in Angstroms
400
421
  :type distance: float
401
422
  :param angle: C-X...A angle in radians
402
423
  :type angle: float
403
424
  :param bond_type: Classification of the halogen bond type
404
425
  :type bond_type: str
405
- :param halogen_residue: Identifier for halogen-containing residue
406
- :type halogen_residue: str
407
- :param acceptor_residue: Identifier for acceptor residue
408
- :type acceptor_residue: str
426
+ :param _halogen_residue: Identifier for halogen-containing residue
427
+ :type _halogen_residue: str
428
+ :param _acceptor_residue: Identifier for acceptor residue
429
+ :type _acceptor_residue: str
409
430
  """
410
431
 
411
432
  def __init__(
@@ -418,6 +439,23 @@ class HalogenBond(MolecularInteraction):
418
439
  _halogen_residue: str,
419
440
  _acceptor_residue: str,
420
441
  ):
442
+ """Initialize a HalogenBond object.
443
+
444
+ :param halogen: The halogen atom (F, Cl, Br, I)
445
+ :type halogen: Atom
446
+ :param _acceptor: The electron donor/acceptor atom
447
+ :type _acceptor: Atom
448
+ :param distance: X...A distance in Angstroms
449
+ :type distance: float
450
+ :param angle: C-X...A angle in radians
451
+ :type angle: float
452
+ :param bond_type: Classification of the halogen bond type
453
+ :type bond_type: str
454
+ :param _halogen_residue: Identifier for halogen-containing residue
455
+ :type _halogen_residue: str
456
+ :param _acceptor_residue: Identifier for acceptor residue
457
+ :type _acceptor_residue: str
458
+ """
421
459
  self.halogen = halogen
422
460
  self._acceptor = _acceptor
423
461
  self._distance = distance
@@ -426,6 +464,9 @@ class HalogenBond(MolecularInteraction):
426
464
  self._halogen_residue = _halogen_residue
427
465
  self._acceptor_residue = _acceptor_residue
428
466
 
467
+ # Generate donor-acceptor property description
468
+ self._donor_acceptor_properties = self._generate_donor_acceptor_description()
469
+
429
470
  # Backward compatibility properties
430
471
  @property
431
472
  def distance(self) -> float:
@@ -467,7 +508,7 @@ class HalogenBond(MolecularInteraction):
467
508
  return self._acceptor_residue
468
509
 
469
510
  def get_interaction_type(self) -> str:
470
- return "halogen_bond"
511
+ return "X-Bond"
471
512
 
472
513
  def get_donor_interaction_distance(self) -> float:
473
514
  """Distance from donor to interaction point (0 for halogen bonds)."""
@@ -494,11 +535,61 @@ class HalogenBond(MolecularInteraction):
494
535
  # by ensuring the halogen is bonded to carbon
495
536
  return True # Assuming validation was done during creation
496
537
 
538
+ def _generate_donor_acceptor_description(self) -> str:
539
+ """Generate donor-acceptor property description string.
540
+
541
+ Describes the halogen bond in terms of:
542
+ - Donor properties: residue type, backbone/sidechain, aromatic (halogen donor)
543
+ - Acceptor properties: residue type, backbone/sidechain, aromatic
544
+
545
+ Format: "donor_props-acceptor_props" (e.g., "PSN-LBN", "LSN-PSA")
546
+
547
+ :returns: Property description string
548
+ :rtype: str
549
+ """
550
+ # Get halogen (donor) properties
551
+ donor_residue_type = getattr(self.halogen, "residue_type", "L")
552
+ donor_backbone_sidechain = getattr(self.halogen, "backbone_sidechain", "S")
553
+ donor_aromatic = getattr(self.halogen, "aromatic", "N")
554
+
555
+ # Get acceptor properties
556
+ acceptor_residue_type = getattr(self._acceptor, "residue_type", "L")
557
+ acceptor_backbone_sidechain = getattr(self._acceptor, "backbone_sidechain", "S")
558
+ acceptor_aromatic = getattr(self._acceptor, "aromatic", "N")
559
+
560
+ # Build property strings
561
+ donor_props = f"{donor_residue_type}{donor_backbone_sidechain}{donor_aromatic}"
562
+ acceptor_props = (
563
+ f"{acceptor_residue_type}{acceptor_backbone_sidechain}{acceptor_aromatic}"
564
+ )
565
+
566
+ return f"{donor_props}-{acceptor_props}"
567
+
568
+ @property
569
+ def donor_acceptor_properties(self) -> str:
570
+ """Get the donor-acceptor property description.
571
+
572
+ :returns: Property description string
573
+ :rtype: str
574
+ """
575
+ return self._donor_acceptor_properties
576
+
577
+ def get_backbone_sidechain_interaction(self) -> str:
578
+ """Get simplified backbone/sidechain interaction description.
579
+
580
+ :returns: Interaction type (B-B, B-S, S-B, S-S)
581
+ :rtype: str
582
+ """
583
+ donor_bs = getattr(self.halogen, "backbone_sidechain", "S")
584
+ acceptor_bs = getattr(self._acceptor, "backbone_sidechain", "S")
585
+ return f"{donor_bs}-{acceptor_bs}"
586
+
497
587
  def __str__(self) -> str:
498
588
  return (
499
589
  f"X-Bond: {self._halogen_residue}({self.halogen.name}) - "
500
590
  f"{self._acceptor_residue}({self._acceptor.name}) "
501
- f"[{self.distance:.2f}Å, {math.degrees(self.angle):.1f}°]"
591
+ f"[{self.distance:.2f}Å, {math.degrees(self.angle):.1f}°] "
592
+ f"[{self.get_backbone_sidechain_interaction()}] [{self.donor_acceptor_properties}]"
502
593
  )
503
594
 
504
595
 
@@ -508,8 +599,8 @@ class PiInteraction(MolecularInteraction):
508
599
  This class stores information about a detected X-H...π interaction,
509
600
  where a hydrogen bond donor interacts with an aromatic π system.
510
601
 
511
- :param donor: The hydrogen bond donor atom
512
- :type donor: Atom
602
+ :param _donor: The hydrogen bond donor atom
603
+ :type _donor: Atom
513
604
  :param hydrogen: The hydrogen atom
514
605
  :type hydrogen: Atom
515
606
  :param pi_center: Center of the aromatic π system
@@ -518,10 +609,10 @@ class PiInteraction(MolecularInteraction):
518
609
  :type distance: float
519
610
  :param angle: D-H...π angle in radians
520
611
  :type angle: float
521
- :param donor_residue: Identifier for donor residue
522
- :type donor_residue: str
523
- :param pi_residue: Identifier for π-containing residue
524
- :type pi_residue: str
612
+ :param _donor_residue: Identifier for donor residue
613
+ :type _donor_residue: str
614
+ :param _pi_residue: Identifier for π-containing residue
615
+ :type _pi_residue: str
525
616
  """
526
617
 
527
618
  def __init__(
@@ -534,6 +625,23 @@ class PiInteraction(MolecularInteraction):
534
625
  _donor_residue: str,
535
626
  _pi_residue: str,
536
627
  ):
628
+ """Initialize a PiInteraction object.
629
+
630
+ :param _donor: The hydrogen bond donor atom
631
+ :type _donor: Atom
632
+ :param hydrogen: The hydrogen atom
633
+ :type hydrogen: Atom
634
+ :param pi_center: Center of the aromatic π system
635
+ :type pi_center: NPVec3D
636
+ :param distance: H...π distance in Angstroms
637
+ :type distance: float
638
+ :param angle: D-H...π angle in radians
639
+ :type angle: float
640
+ :param _donor_residue: Identifier for donor residue
641
+ :type _donor_residue: str
642
+ :param _pi_residue: Identifier for π-containing residue
643
+ :type _pi_residue: str
644
+ """
537
645
  self._donor = _donor
538
646
  self.hydrogen = hydrogen
539
647
  self.pi_center = pi_center
@@ -581,7 +689,7 @@ class PiInteraction(MolecularInteraction):
581
689
  return self._pi_residue
582
690
 
583
691
  def get_interaction_type(self) -> str:
584
- return "pi_interaction"
692
+ return "π–Inter"
585
693
 
586
694
  def get_donor_interaction_distance(self) -> float:
587
695
  """Distance from donor to hydrogen."""
@@ -716,6 +824,15 @@ class CooperativityChain(MolecularInteraction):
716
824
  chain_length: int,
717
825
  chain_type: str,
718
826
  ):
827
+ """Initialize a CooperativityChain object.
828
+
829
+ :param interactions: List of interactions in the chain
830
+ :type interactions: List[Union[HydrogenBond, HalogenBond, PiInteraction]]
831
+ :param chain_length: Number of interactions in the chain
832
+ :type chain_length: int
833
+ :param chain_type: Description of the interaction types in the chain
834
+ :type chain_type: str
835
+ """
719
836
  self.interactions = interactions
720
837
  self.chain_length = chain_length
721
838
  self.chain_type = chain_type # e.g., "H-Bond -> X-Bond -> π-Int"
@@ -887,8 +1004,8 @@ class CooperativityChain(MolecularInteraction):
887
1004
  def _get_interaction_symbol(self, interaction_type: str) -> str:
888
1005
  """Get display symbol for interaction type."""
889
1006
  symbols = {
890
- "hydrogen_bond": "->",
891
- "halogen_bond": "=X=>",
892
- "pi_interaction": "~π~>",
1007
+ "H-Bond": "->",
1008
+ "X-Bond": "=X=>",
1009
+ "π–Inter": "~π~>",
893
1010
  }
894
1011
  return symbols.get(interaction_type, "->")
@@ -77,7 +77,18 @@ class NPMolecularInteractionAnalyzer:
77
77
  self.progress_callback: Optional[Callable[[str], None]] = None
78
78
 
79
79
  def analyze_file(self, pdb_file: str) -> bool:
80
- """Analyze a PDB file for molecular interactions."""
80
+ """Analyze a PDB file for molecular interactions.
81
+
82
+ Performs comprehensive analysis of hydrogen bonds, halogen bonds, π interactions,
83
+ and cooperativity chains in the provided PDB structure. Optionally applies PDB
84
+ fixing to add missing atoms if enabled in parameters.
85
+
86
+ :param pdb_file: Path to PDB file to analyze
87
+ :type pdb_file: str
88
+ :returns: True if analysis completed successfully, False if parsing failed
89
+ :rtype: bool
90
+ :raises Exception: If PDB fixing fails when enabled
91
+ """
81
92
  self._analysis_start_time = time.time()
82
93
  self._pdb_fixing_info = {}
83
94
 
@@ -176,6 +176,12 @@ class Atom:
176
176
  :type charge: str
177
177
  :param record_type: PDB record type (ATOM or HETATM)
178
178
  :type record_type: str
179
+ :param residue_type: Residue type classification (P=Protein, D=DNA, R=RNA, L=Ligand)
180
+ :type residue_type: str
181
+ :param backbone_sidechain: Backbone/sidechain classification (B=Backbone, S=Sidechain)
182
+ :type backbone_sidechain: str
183
+ :param aromatic: Aromatic classification (A=Aromatic, N=Non-aromatic)
184
+ :type aromatic: str
179
185
  """
180
186
 
181
187
  def __init__(
@@ -225,6 +231,12 @@ class Atom:
225
231
  :type charge: str
226
232
  :param record_type: PDB record type (ATOM or HETATM)
227
233
  :type record_type: str
234
+ :param residue_type: Residue type classification (P=Protein, D=DNA, R=RNA, L=Ligand)
235
+ :type residue_type: str
236
+ :param backbone_sidechain: Backbone/sidechain classification (B=Backbone, S=Sidechain)
237
+ :type backbone_sidechain: str
238
+ :param aromatic: Aromatic classification (A=Aromatic, N=Non-aromatic)
239
+ :type aromatic: str
228
240
  """
229
241
  self.serial = serial
230
242
  self.name = name
@@ -77,7 +77,7 @@ class ChainVisualizationWindow:
77
77
  """Create the visualization window."""
78
78
  self.viz_window = tk.Toplevel(self.parent)
79
79
  self.viz_window.title(f"Cooperativity Chain Visualization - {self.chain_id}")
80
- self.viz_window.geometry("1000x1000")
80
+ self.viz_window.geometry("900x700")
81
81
 
82
82
  # Create main container frames
83
83
  main_frame = ttk.Frame(self.viz_window)
@@ -45,6 +45,12 @@ EXPORT_FORMATS = {
45
45
  "description": "Encapsulated PostScript",
46
46
  "filetypes": [("EPS files", "*.eps")],
47
47
  },
48
+ "dot": {
49
+ "name": "DOT Source",
50
+ "extension": ".dot",
51
+ "description": "GraphViz DOT language source file",
52
+ "filetypes": [("DOT files", "*.dot")],
53
+ },
48
54
  }
49
55
 
50
56