biotite 1.1.0__cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

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.

Potentially problematic release.


This version of biotite might be problematic. Click here for more details.

Files changed (332) hide show
  1. biotite/__init__.py +18 -0
  2. biotite/application/__init__.py +69 -0
  3. biotite/application/application.py +276 -0
  4. biotite/application/autodock/__init__.py +12 -0
  5. biotite/application/autodock/app.py +500 -0
  6. biotite/application/blast/__init__.py +14 -0
  7. biotite/application/blast/alignment.py +92 -0
  8. biotite/application/blast/webapp.py +428 -0
  9. biotite/application/clustalo/__init__.py +12 -0
  10. biotite/application/clustalo/app.py +223 -0
  11. biotite/application/dssp/__init__.py +12 -0
  12. biotite/application/dssp/app.py +159 -0
  13. biotite/application/localapp.py +342 -0
  14. biotite/application/mafft/__init__.py +12 -0
  15. biotite/application/mafft/app.py +116 -0
  16. biotite/application/msaapp.py +363 -0
  17. biotite/application/muscle/__init__.py +13 -0
  18. biotite/application/muscle/app3.py +227 -0
  19. biotite/application/muscle/app5.py +163 -0
  20. biotite/application/sra/__init__.py +18 -0
  21. biotite/application/sra/app.py +452 -0
  22. biotite/application/tantan/__init__.py +12 -0
  23. biotite/application/tantan/app.py +199 -0
  24. biotite/application/util.py +57 -0
  25. biotite/application/viennarna/__init__.py +18 -0
  26. biotite/application/viennarna/rnaalifold.py +310 -0
  27. biotite/application/viennarna/rnafold.py +254 -0
  28. biotite/application/viennarna/rnaplot.py +206 -0
  29. biotite/application/viennarna/util.py +77 -0
  30. biotite/application/webapp.py +76 -0
  31. biotite/copyable.py +71 -0
  32. biotite/database/__init__.py +23 -0
  33. biotite/database/entrez/__init__.py +15 -0
  34. biotite/database/entrez/check.py +60 -0
  35. biotite/database/entrez/dbnames.py +91 -0
  36. biotite/database/entrez/download.py +229 -0
  37. biotite/database/entrez/key.py +44 -0
  38. biotite/database/entrez/query.py +262 -0
  39. biotite/database/error.py +16 -0
  40. biotite/database/pubchem/__init__.py +21 -0
  41. biotite/database/pubchem/download.py +258 -0
  42. biotite/database/pubchem/error.py +20 -0
  43. biotite/database/pubchem/query.py +830 -0
  44. biotite/database/pubchem/throttle.py +98 -0
  45. biotite/database/rcsb/__init__.py +13 -0
  46. biotite/database/rcsb/download.py +159 -0
  47. biotite/database/rcsb/query.py +964 -0
  48. biotite/database/uniprot/__init__.py +13 -0
  49. biotite/database/uniprot/check.py +40 -0
  50. biotite/database/uniprot/download.py +129 -0
  51. biotite/database/uniprot/query.py +293 -0
  52. biotite/file.py +232 -0
  53. biotite/sequence/__init__.py +84 -0
  54. biotite/sequence/align/__init__.py +203 -0
  55. biotite/sequence/align/alignment.py +680 -0
  56. biotite/sequence/align/banded.cpython-313-x86_64-linux-gnu.so +0 -0
  57. biotite/sequence/align/banded.pyx +652 -0
  58. biotite/sequence/align/buckets.py +71 -0
  59. biotite/sequence/align/cigar.py +425 -0
  60. biotite/sequence/align/kmeralphabet.cpython-313-x86_64-linux-gnu.so +0 -0
  61. biotite/sequence/align/kmeralphabet.pyx +595 -0
  62. biotite/sequence/align/kmersimilarity.cpython-313-x86_64-linux-gnu.so +0 -0
  63. biotite/sequence/align/kmersimilarity.pyx +233 -0
  64. biotite/sequence/align/kmertable.cpython-313-x86_64-linux-gnu.so +0 -0
  65. biotite/sequence/align/kmertable.pyx +3411 -0
  66. biotite/sequence/align/localgapped.cpython-313-x86_64-linux-gnu.so +0 -0
  67. biotite/sequence/align/localgapped.pyx +892 -0
  68. biotite/sequence/align/localungapped.cpython-313-x86_64-linux-gnu.so +0 -0
  69. biotite/sequence/align/localungapped.pyx +279 -0
  70. biotite/sequence/align/matrix.py +622 -0
  71. biotite/sequence/align/matrix_data/3Di.mat +24 -0
  72. biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
  73. biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
  74. biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
  75. biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
  76. biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
  77. biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
  78. biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
  79. biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
  80. biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
  81. biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
  82. biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
  83. biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
  84. biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
  85. biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
  86. biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
  87. biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
  88. biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
  89. biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
  90. biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
  91. biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
  92. biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
  93. biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
  94. biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
  95. biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
  96. biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
  97. biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
  98. biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
  99. biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
  100. biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
  101. biotite/sequence/align/matrix_data/GONNET.mat +26 -0
  102. biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
  103. biotite/sequence/align/matrix_data/MATCH.mat +25 -0
  104. biotite/sequence/align/matrix_data/NUC.mat +25 -0
  105. biotite/sequence/align/matrix_data/PAM10.mat +34 -0
  106. biotite/sequence/align/matrix_data/PAM100.mat +34 -0
  107. biotite/sequence/align/matrix_data/PAM110.mat +34 -0
  108. biotite/sequence/align/matrix_data/PAM120.mat +34 -0
  109. biotite/sequence/align/matrix_data/PAM130.mat +34 -0
  110. biotite/sequence/align/matrix_data/PAM140.mat +34 -0
  111. biotite/sequence/align/matrix_data/PAM150.mat +34 -0
  112. biotite/sequence/align/matrix_data/PAM160.mat +34 -0
  113. biotite/sequence/align/matrix_data/PAM170.mat +34 -0
  114. biotite/sequence/align/matrix_data/PAM180.mat +34 -0
  115. biotite/sequence/align/matrix_data/PAM190.mat +34 -0
  116. biotite/sequence/align/matrix_data/PAM20.mat +34 -0
  117. biotite/sequence/align/matrix_data/PAM200.mat +34 -0
  118. biotite/sequence/align/matrix_data/PAM210.mat +34 -0
  119. biotite/sequence/align/matrix_data/PAM220.mat +34 -0
  120. biotite/sequence/align/matrix_data/PAM230.mat +34 -0
  121. biotite/sequence/align/matrix_data/PAM240.mat +34 -0
  122. biotite/sequence/align/matrix_data/PAM250.mat +34 -0
  123. biotite/sequence/align/matrix_data/PAM260.mat +34 -0
  124. biotite/sequence/align/matrix_data/PAM270.mat +34 -0
  125. biotite/sequence/align/matrix_data/PAM280.mat +34 -0
  126. biotite/sequence/align/matrix_data/PAM290.mat +34 -0
  127. biotite/sequence/align/matrix_data/PAM30.mat +34 -0
  128. biotite/sequence/align/matrix_data/PAM300.mat +34 -0
  129. biotite/sequence/align/matrix_data/PAM310.mat +34 -0
  130. biotite/sequence/align/matrix_data/PAM320.mat +34 -0
  131. biotite/sequence/align/matrix_data/PAM330.mat +34 -0
  132. biotite/sequence/align/matrix_data/PAM340.mat +34 -0
  133. biotite/sequence/align/matrix_data/PAM350.mat +34 -0
  134. biotite/sequence/align/matrix_data/PAM360.mat +34 -0
  135. biotite/sequence/align/matrix_data/PAM370.mat +34 -0
  136. biotite/sequence/align/matrix_data/PAM380.mat +34 -0
  137. biotite/sequence/align/matrix_data/PAM390.mat +34 -0
  138. biotite/sequence/align/matrix_data/PAM40.mat +34 -0
  139. biotite/sequence/align/matrix_data/PAM400.mat +34 -0
  140. biotite/sequence/align/matrix_data/PAM410.mat +34 -0
  141. biotite/sequence/align/matrix_data/PAM420.mat +34 -0
  142. biotite/sequence/align/matrix_data/PAM430.mat +34 -0
  143. biotite/sequence/align/matrix_data/PAM440.mat +34 -0
  144. biotite/sequence/align/matrix_data/PAM450.mat +34 -0
  145. biotite/sequence/align/matrix_data/PAM460.mat +34 -0
  146. biotite/sequence/align/matrix_data/PAM470.mat +34 -0
  147. biotite/sequence/align/matrix_data/PAM480.mat +34 -0
  148. biotite/sequence/align/matrix_data/PAM490.mat +34 -0
  149. biotite/sequence/align/matrix_data/PAM50.mat +34 -0
  150. biotite/sequence/align/matrix_data/PAM500.mat +34 -0
  151. biotite/sequence/align/matrix_data/PAM60.mat +34 -0
  152. biotite/sequence/align/matrix_data/PAM70.mat +34 -0
  153. biotite/sequence/align/matrix_data/PAM80.mat +34 -0
  154. biotite/sequence/align/matrix_data/PAM90.mat +34 -0
  155. biotite/sequence/align/matrix_data/PB.license +21 -0
  156. biotite/sequence/align/matrix_data/PB.mat +18 -0
  157. biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
  158. biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
  159. biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
  160. biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
  161. biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
  162. biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
  163. biotite/sequence/align/multiple.cpython-313-x86_64-linux-gnu.so +0 -0
  164. biotite/sequence/align/multiple.pyx +620 -0
  165. biotite/sequence/align/pairwise.cpython-313-x86_64-linux-gnu.so +0 -0
  166. biotite/sequence/align/pairwise.pyx +587 -0
  167. biotite/sequence/align/permutation.cpython-313-x86_64-linux-gnu.so +0 -0
  168. biotite/sequence/align/permutation.pyx +313 -0
  169. biotite/sequence/align/primes.txt +821 -0
  170. biotite/sequence/align/selector.cpython-313-x86_64-linux-gnu.so +0 -0
  171. biotite/sequence/align/selector.pyx +954 -0
  172. biotite/sequence/align/statistics.py +264 -0
  173. biotite/sequence/align/tracetable.cpython-313-x86_64-linux-gnu.so +0 -0
  174. biotite/sequence/align/tracetable.pxd +64 -0
  175. biotite/sequence/align/tracetable.pyx +370 -0
  176. biotite/sequence/alphabet.py +555 -0
  177. biotite/sequence/annotation.py +830 -0
  178. biotite/sequence/codec.cpython-313-x86_64-linux-gnu.so +0 -0
  179. biotite/sequence/codec.pyx +155 -0
  180. biotite/sequence/codon.py +477 -0
  181. biotite/sequence/codon_tables.txt +202 -0
  182. biotite/sequence/graphics/__init__.py +33 -0
  183. biotite/sequence/graphics/alignment.py +1115 -0
  184. biotite/sequence/graphics/color_schemes/3di_flower.json +48 -0
  185. biotite/sequence/graphics/color_schemes/autumn.json +51 -0
  186. biotite/sequence/graphics/color_schemes/blossom.json +51 -0
  187. biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
  188. biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
  189. biotite/sequence/graphics/color_schemes/flower.json +51 -0
  190. biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
  191. biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
  192. biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
  193. biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
  194. biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
  195. biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
  196. biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
  197. biotite/sequence/graphics/color_schemes/ocean.json +51 -0
  198. biotite/sequence/graphics/color_schemes/pb_flower.json +40 -0
  199. biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
  200. biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
  201. biotite/sequence/graphics/color_schemes/spring.json +51 -0
  202. biotite/sequence/graphics/color_schemes/sunset.json +51 -0
  203. biotite/sequence/graphics/color_schemes/wither.json +51 -0
  204. biotite/sequence/graphics/colorschemes.py +170 -0
  205. biotite/sequence/graphics/dendrogram.py +229 -0
  206. biotite/sequence/graphics/features.py +544 -0
  207. biotite/sequence/graphics/logo.py +104 -0
  208. biotite/sequence/graphics/plasmid.py +712 -0
  209. biotite/sequence/io/__init__.py +12 -0
  210. biotite/sequence/io/fasta/__init__.py +22 -0
  211. biotite/sequence/io/fasta/convert.py +284 -0
  212. biotite/sequence/io/fasta/file.py +265 -0
  213. biotite/sequence/io/fastq/__init__.py +19 -0
  214. biotite/sequence/io/fastq/convert.py +117 -0
  215. biotite/sequence/io/fastq/file.py +507 -0
  216. biotite/sequence/io/genbank/__init__.py +17 -0
  217. biotite/sequence/io/genbank/annotation.py +269 -0
  218. biotite/sequence/io/genbank/file.py +573 -0
  219. biotite/sequence/io/genbank/metadata.py +336 -0
  220. biotite/sequence/io/genbank/sequence.py +171 -0
  221. biotite/sequence/io/general.py +201 -0
  222. biotite/sequence/io/gff/__init__.py +26 -0
  223. biotite/sequence/io/gff/convert.py +128 -0
  224. biotite/sequence/io/gff/file.py +450 -0
  225. biotite/sequence/phylo/__init__.py +36 -0
  226. biotite/sequence/phylo/nj.cpython-313-x86_64-linux-gnu.so +0 -0
  227. biotite/sequence/phylo/nj.pyx +221 -0
  228. biotite/sequence/phylo/tree.cpython-313-x86_64-linux-gnu.so +0 -0
  229. biotite/sequence/phylo/tree.pyx +1169 -0
  230. biotite/sequence/phylo/upgma.cpython-313-x86_64-linux-gnu.so +0 -0
  231. biotite/sequence/phylo/upgma.pyx +164 -0
  232. biotite/sequence/profile.py +567 -0
  233. biotite/sequence/search.py +118 -0
  234. biotite/sequence/seqtypes.py +713 -0
  235. biotite/sequence/sequence.py +374 -0
  236. biotite/setup_ccd.py +197 -0
  237. biotite/structure/__init__.py +133 -0
  238. biotite/structure/alphabet/__init__.py +25 -0
  239. biotite/structure/alphabet/encoder.py +332 -0
  240. biotite/structure/alphabet/encoder_weights_3di.kerasify +0 -0
  241. biotite/structure/alphabet/i3d.py +110 -0
  242. biotite/structure/alphabet/layers.py +86 -0
  243. biotite/structure/alphabet/pb.license +21 -0
  244. biotite/structure/alphabet/pb.py +171 -0
  245. biotite/structure/alphabet/unkerasify.py +122 -0
  246. biotite/structure/atoms.py +1554 -0
  247. biotite/structure/basepairs.py +1404 -0
  248. biotite/structure/bonds.cpython-313-x86_64-linux-gnu.so +0 -0
  249. biotite/structure/bonds.pyx +1972 -0
  250. biotite/structure/box.py +588 -0
  251. biotite/structure/celllist.cpython-313-x86_64-linux-gnu.so +0 -0
  252. biotite/structure/celllist.pyx +849 -0
  253. biotite/structure/chains.py +314 -0
  254. biotite/structure/charges.cpython-313-x86_64-linux-gnu.so +0 -0
  255. biotite/structure/charges.pyx +520 -0
  256. biotite/structure/compare.py +274 -0
  257. biotite/structure/density.py +109 -0
  258. biotite/structure/dotbracket.py +214 -0
  259. biotite/structure/error.py +39 -0
  260. biotite/structure/filter.py +590 -0
  261. biotite/structure/geometry.py +655 -0
  262. biotite/structure/graphics/__init__.py +13 -0
  263. biotite/structure/graphics/atoms.py +243 -0
  264. biotite/structure/graphics/rna.py +295 -0
  265. biotite/structure/hbond.py +428 -0
  266. biotite/structure/info/__init__.py +24 -0
  267. biotite/structure/info/atom_masses.json +121 -0
  268. biotite/structure/info/atoms.py +81 -0
  269. biotite/structure/info/bonds.py +149 -0
  270. biotite/structure/info/ccd.py +202 -0
  271. biotite/structure/info/components.bcif +0 -0
  272. biotite/structure/info/groups.py +131 -0
  273. biotite/structure/info/masses.py +121 -0
  274. biotite/structure/info/misc.py +138 -0
  275. biotite/structure/info/radii.py +197 -0
  276. biotite/structure/info/standardize.py +186 -0
  277. biotite/structure/integrity.py +215 -0
  278. biotite/structure/io/__init__.py +29 -0
  279. biotite/structure/io/dcd/__init__.py +13 -0
  280. biotite/structure/io/dcd/file.py +67 -0
  281. biotite/structure/io/general.py +243 -0
  282. biotite/structure/io/gro/__init__.py +14 -0
  283. biotite/structure/io/gro/file.py +344 -0
  284. biotite/structure/io/mol/__init__.py +20 -0
  285. biotite/structure/io/mol/convert.py +112 -0
  286. biotite/structure/io/mol/ctab.py +415 -0
  287. biotite/structure/io/mol/header.py +120 -0
  288. biotite/structure/io/mol/mol.py +149 -0
  289. biotite/structure/io/mol/sdf.py +914 -0
  290. biotite/structure/io/netcdf/__init__.py +13 -0
  291. biotite/structure/io/netcdf/file.py +64 -0
  292. biotite/structure/io/pdb/__init__.py +20 -0
  293. biotite/structure/io/pdb/convert.py +307 -0
  294. biotite/structure/io/pdb/file.py +1290 -0
  295. biotite/structure/io/pdb/hybrid36.cpython-313-x86_64-linux-gnu.so +0 -0
  296. biotite/structure/io/pdb/hybrid36.pyx +242 -0
  297. biotite/structure/io/pdbqt/__init__.py +15 -0
  298. biotite/structure/io/pdbqt/convert.py +113 -0
  299. biotite/structure/io/pdbqt/file.py +688 -0
  300. biotite/structure/io/pdbx/__init__.py +23 -0
  301. biotite/structure/io/pdbx/bcif.py +656 -0
  302. biotite/structure/io/pdbx/cif.py +1075 -0
  303. biotite/structure/io/pdbx/component.py +245 -0
  304. biotite/structure/io/pdbx/compress.py +321 -0
  305. biotite/structure/io/pdbx/convert.py +1745 -0
  306. biotite/structure/io/pdbx/encoding.cpython-313-x86_64-linux-gnu.so +0 -0
  307. biotite/structure/io/pdbx/encoding.pyx +1031 -0
  308. biotite/structure/io/trajfile.py +693 -0
  309. biotite/structure/io/trr/__init__.py +13 -0
  310. biotite/structure/io/trr/file.py +43 -0
  311. biotite/structure/io/xtc/__init__.py +13 -0
  312. biotite/structure/io/xtc/file.py +43 -0
  313. biotite/structure/mechanics.py +73 -0
  314. biotite/structure/molecules.py +352 -0
  315. biotite/structure/pseudoknots.py +628 -0
  316. biotite/structure/rdf.py +245 -0
  317. biotite/structure/repair.py +304 -0
  318. biotite/structure/residues.py +572 -0
  319. biotite/structure/sasa.cpython-313-x86_64-linux-gnu.so +0 -0
  320. biotite/structure/sasa.pyx +322 -0
  321. biotite/structure/segments.py +178 -0
  322. biotite/structure/sequence.py +111 -0
  323. biotite/structure/sse.py +308 -0
  324. biotite/structure/superimpose.py +689 -0
  325. biotite/structure/transform.py +530 -0
  326. biotite/structure/util.py +168 -0
  327. biotite/version.py +16 -0
  328. biotite/visualize.py +265 -0
  329. biotite-1.1.0.dist-info/METADATA +190 -0
  330. biotite-1.1.0.dist-info/RECORD +332 -0
  331. biotite-1.1.0.dist-info/WHEEL +6 -0
  332. biotite-1.1.0.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,138 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.structure.info"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["all_residues", "full_name", "link_type", "one_letter_code"]
8
+
9
+ from biotite.structure.info.ccd import get_ccd, get_from_ccd
10
+
11
+
12
+ def all_residues():
13
+ """
14
+ Get a list of all residues/compound names in the PDB
15
+ *Chemical Component Dictionary* (CCD).
16
+
17
+ Returns
18
+ -------
19
+ residues : list of str
20
+ A list of all available residue names.
21
+ """
22
+ return get_ccd()["chem_comp"]["id"].as_array().tolist()
23
+
24
+
25
+ def full_name(res_name):
26
+ """
27
+ Get the full name of a residue/compound from the up to 3-letter
28
+ residue name, based on the PDB chemical components dictionary.
29
+
30
+ Parameters
31
+ ----------
32
+ res_name : str
33
+ The up to 3-letter residue name.
34
+
35
+ Returns
36
+ -------
37
+ name : str or None
38
+ The full name of the residue.
39
+ If the residue is unknown to the chemical components dictionary,
40
+ ``None`` is returned.
41
+
42
+ Examples
43
+ --------
44
+
45
+ >>> print(full_name("MAN"))
46
+ alpha-D-mannopyranose
47
+ """
48
+ column = get_from_ccd("chem_comp", res_name.upper(), "name")
49
+ if column is None:
50
+ return None
51
+ return column.as_item()
52
+
53
+
54
+ def link_type(res_name):
55
+ """
56
+ Get the linking type of a residue/compound,
57
+ based on the PDB chemical components dictionary.
58
+
59
+ Parameters
60
+ ----------
61
+ res_name : str
62
+ The up to 3-letter residue name.
63
+
64
+ Returns
65
+ -------
66
+ link_type : str or None
67
+ The link type.
68
+ If the residue is unknown to the chemical components dictionary,
69
+ ``None`` is returned.
70
+
71
+ Examples
72
+ --------
73
+
74
+ >>> print(link_type("MAN"))
75
+ D-saccharide, alpha linking
76
+ >>> print(link_type("TRP"))
77
+ L-PEPTIDE LINKING
78
+ >>> print(link_type("HOH"))
79
+ NON-POLYMER
80
+ """
81
+ column = get_from_ccd("chem_comp", res_name.upper(), "type")
82
+ if column is None:
83
+ return None
84
+ return column.as_item()
85
+
86
+
87
+ def one_letter_code(res_name):
88
+ """
89
+ Get the one-letter code of a residue/compound,
90
+ based on the PDB chemical components dictionary.
91
+
92
+ The one-letter code is only defined for amino acids and nucleotides
93
+ and for compounds that are structurally similar to them.
94
+
95
+ Parameters
96
+ ----------
97
+ res_name : str
98
+ The up to 3-letter residue name.
99
+
100
+ Returns
101
+ -------
102
+ one_letter_code : str or None
103
+ The one-letter code.
104
+ ``None`` if the compound is not present in the CCD or if no
105
+ one-letter code is defined for this compound.
106
+
107
+ Examples
108
+ --------
109
+
110
+ Get the one letter code for an amino acid (or a nucleotide).
111
+
112
+ >>> print(full_name("ALA"))
113
+ ALANINE
114
+ >>> print(one_letter_code("ALA"))
115
+ A
116
+
117
+ For similar compounds, the one-letter code is also defined.
118
+
119
+ >>> print(full_name("DAL"))
120
+ D-ALANINE
121
+ >>> print(one_letter_code("DAL"))
122
+ A
123
+
124
+ For other compounds, the one-letter code is not defined.
125
+
126
+ >>> print(full_name("MAN"))
127
+ alpha-D-mannopyranose
128
+ >>> print(one_letter_code("MAN"))
129
+ None
130
+
131
+ """
132
+ column = get_from_ccd("chem_comp", res_name.upper(), "one_letter_code")
133
+ if column is None:
134
+ return None
135
+ if column.mask is not None:
136
+ # Value is masked, i.e. inapplicable or missing
137
+ return None
138
+ return column.as_item()
@@ -0,0 +1,197 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.structure.info"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["vdw_radius_protor", "vdw_radius_single"]
8
+
9
+ from biotite.structure.info.bonds import bonds_in_residue
10
+
11
+ # fmt: off
12
+ # Contains tuples for the different ProtOr groups:
13
+ # Tuple contains: element, valency, H count
14
+ _PROTOR_RADII = {
15
+ ("C", 3, 0) : 1.61,
16
+ ("C", 3, 1) : 1.76,
17
+ ("C", 4, 1) : 1.88,
18
+ ("C", 4, 2) : 1.88,
19
+ ("C", 4, 3) : 1.88,
20
+ ("N", 3, 0) : 1.64,
21
+ ("N", 3, 1) : 1.64,
22
+ ("N", 3, 2) : 1.64,
23
+ ("N", 4, 3) : 1.64,
24
+ ("O", 1, 0) : 1.42,
25
+ ("O", 2, 1) : 1.46,
26
+ ("S", 1, 0) : 1.77,
27
+ ("S", 2, 0) : 1.77, # Not official, added for completeness (MET)
28
+ ("S", 2, 1) : 1.77,
29
+ ("F", 1, 0) : 1.47, # Taken from _SINGLE_RADII
30
+ ("CL", 1, 0) : 1.75, # Taken from _SINGLE_RADII
31
+ ("BR", 1, 0) : 1.85, # Taken from _SINGLE_RADII
32
+ ("I", 1, 0) : 1.98, # Taken from _SINGLE_RADII
33
+ }
34
+
35
+ _SINGLE_RADII = {
36
+ "H": 1.20,
37
+ "HE": 1.40,
38
+
39
+ "C": 1.70,
40
+ "N": 1.55,
41
+ "O": 1.52,
42
+ "F": 1.47,
43
+ "NE": 1.54,
44
+
45
+ "SI": 2.10,
46
+ "P": 1.80,
47
+ "S": 1.80,
48
+ "CL": 1.75,
49
+ "AR": 1.88,
50
+
51
+ "AS": 1.85,
52
+ "SE": 1.90,
53
+ "BR": 1.85,
54
+ "KR": 2.02,
55
+
56
+ "TE": 2.06,
57
+ "I": 1.98,
58
+ "XE": 2.16,
59
+ }
60
+ # fmt: on
61
+
62
+ # A dictionary that caches radii for each residue
63
+ _protor_radii = {}
64
+
65
+
66
+ def vdw_radius_protor(res_name, atom_name):
67
+ """
68
+ Estimate the Van-der-Waals radius of an non-hydrogen atom,
69
+ that includes the radius added by potential bonded hydrogen atoms.
70
+ The respective radii are taken from the ProtOr dataset.
71
+ :footcite:`Tsai1999`
72
+
73
+ This is especially useful for macromolecular structures where no
74
+ hydrogen atoms are resolved, e.g. crystal structures.
75
+ The valency of the non-hydrogen atom and the amount of normally
76
+ bonded hydrogen atoms is taken from the chemical compound dictionary
77
+ dataset.
78
+
79
+ Parameters
80
+ ----------
81
+ res_name : str
82
+ The up to 3-letter residue name the non-hydrogen atom belongs
83
+ to.
84
+ atom_name : str
85
+ The name of the non-hydrogen atom.
86
+
87
+ Returns
88
+ -------
89
+ The Van-der-Waals radius of the given atom.
90
+ If the radius cannot be estimated for the atom, `None` is returned.
91
+
92
+ See also
93
+ --------
94
+ vdw_radius_single
95
+
96
+ References
97
+ ----------
98
+
99
+ .. footbibliography::
100
+
101
+ Examples
102
+ --------
103
+
104
+ >>> print(vdw_radius_protor("GLY", "CA"))
105
+ 1.88
106
+ """
107
+ res_name = res_name.upper()
108
+ if atom_name[0] == "H":
109
+ raise ValueError(
110
+ f"Calculating the ProtOr radius for the hydrogen atom "
111
+ f"'{atom_name}' is not meaningful"
112
+ )
113
+ if res_name in _protor_radii:
114
+ # Use cached radii for the residue, if already calculated
115
+ if atom_name not in _protor_radii[res_name]:
116
+ raise KeyError(
117
+ f"Residue '{res_name}' does not contain an atom named " f"'{atom_name}'"
118
+ )
119
+ return _protor_radii[res_name].get(atom_name)
120
+ else:
121
+ # Otherwise calculate radii for the given residue and cache
122
+ _protor_radii[res_name] = _calculate_protor_radii(res_name)
123
+ # Recursive call, but this time the radii for the given residue
124
+ # are cached
125
+ return vdw_radius_protor(res_name, atom_name)
126
+
127
+
128
+ def _calculate_protor_radii(res_name):
129
+ """
130
+ Calculate the ProtOr VdW radii for all atoms (atom names) in
131
+ a residue.
132
+ """
133
+ bonds = bonds_in_residue(res_name)
134
+ # Maps atom names to a ProtOr group
135
+ # -> tuple(element, valency, H count)
136
+ # Based on the group the radius is chosen from _PROTOR_RADII
137
+ groups = {}
138
+ for atom1, atom2 in bonds:
139
+ # Process each bond two times:
140
+ # One time the first atom is the one to get valency and H count
141
+ # for and the other time vice versa
142
+ for main_atom, bound_atom in ((atom1, atom2), (atom2, atom1)):
143
+ element = main_atom[0]
144
+ # Calculating ProtOr radii for hydrogens in not meaningful
145
+ if element == "H":
146
+ continue
147
+ # Only for these elements ProtOr groups exist
148
+ # Calculation of group for all other elements would be
149
+ # pointless
150
+ if element not in ["C", "N", "O", "S"]:
151
+ # Empty tuple to indicate nonexistent entry
152
+ groups[main_atom] = ()
153
+ continue
154
+ # Update existing entry if already existing
155
+ group = groups.get(main_atom, [element, 0, 0])
156
+ # Increase valency by one, since the bond entry exists
157
+ group[1] += 1
158
+ # If the atom is bonded to hydrogen, increase H count
159
+ if bound_atom[0] == "H":
160
+ group[2] += 1
161
+ groups[main_atom] = group
162
+ # Get radii based on ProtOr groups
163
+ radii = {atom: _PROTOR_RADII.get(tuple(group)) for atom, group in groups.items()}
164
+ return radii
165
+
166
+
167
+ def vdw_radius_single(element):
168
+ """
169
+ Get the Van-der-Waals radius of an atom from the given element.
170
+ :footcite:`Bondi1964`
171
+
172
+ Parameters
173
+ ----------
174
+ element : str
175
+ The chemical element of the atoms.
176
+
177
+ Returns
178
+ -------
179
+ The Van-der-Waals radius of the atom.
180
+ If the radius is unknown for the element, `None` is returned.
181
+
182
+ See also
183
+ --------
184
+ vdw_radius_protor
185
+
186
+ References
187
+ ----------
188
+
189
+ .. footbibliography::
190
+
191
+ Examples
192
+ --------
193
+
194
+ >>> print(vdw_radius_single("C"))
195
+ 1.7
196
+ """
197
+ return _SINGLE_RADII.get(element.upper())
@@ -0,0 +1,186 @@
1
+ # This source code is part of the Biotite package and is distributed
2
+ # under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
3
+ # information.
4
+
5
+ __name__ = "biotite.structure.info"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["standardize_order"]
8
+
9
+ import warnings
10
+ import numpy as np
11
+ from biotite.structure.error import BadStructureError
12
+ from biotite.structure.info.ccd import get_from_ccd
13
+ from biotite.structure.residues import get_residue_starts
14
+
15
+
16
+ def standardize_order(atoms):
17
+ """
18
+ Get an index array for an input :class:`AtomArray` or
19
+ :class:`AtomArrayStack` that reorders the atoms for each residue
20
+ to obtain the standard *RCSB PDB* atom order.
21
+
22
+ The standard atom order is determined from the reference residues in
23
+ the official *Chemical Component Dictionary*.
24
+ If a residue of the input structure contains additional atoms that
25
+ are not present in the reference residue, these indices to these
26
+ atoms are appended to the end of the respective residue.
27
+ A example for this are optional hydrogen atoms, that appear due to
28
+ protonation.
29
+
30
+ Parameters
31
+ ----------
32
+ atoms : AtomArray, shape=(n,) or AtomArrayStack, shape=(m,n)
33
+ Input structure with atoms that are potentially not in the
34
+ *standard* order.
35
+
36
+ Returns
37
+ -------
38
+ indices : ndarray, dtype=int, shape=(n,)
39
+ When this index array is applied on the input `atoms`,
40
+ the atoms for each residue are reordered to obtain the
41
+ standard *RCSB PDB* atom order.
42
+
43
+ Raises
44
+ ------
45
+ BadStructureError
46
+ If the input `atoms` have duplicate atoms (same atom name)
47
+ within a residue.
48
+
49
+ Examples
50
+ --------
51
+
52
+ Use as single residue as example.
53
+
54
+ >>> residue = atom_array[atom_array.res_id == 1]
55
+ >>> print(residue)
56
+ A 1 ASN N N -8.901 4.127 -0.555
57
+ A 1 ASN CA C -8.608 3.135 -1.618
58
+ A 1 ASN C C -7.117 2.964 -1.897
59
+ A 1 ASN O O -6.634 1.849 -1.758
60
+ A 1 ASN CB C -9.437 3.396 -2.889
61
+ A 1 ASN CG C -10.915 3.130 -2.611
62
+ A 1 ASN OD1 O -11.269 2.700 -1.524
63
+ A 1 ASN ND2 N -11.806 3.406 -3.543
64
+ A 1 ASN H1 H -8.330 3.957 0.261
65
+ A 1 ASN H2 H -8.740 5.068 -0.889
66
+ A 1 ASN H3 H -9.877 4.041 -0.293
67
+ A 1 ASN HA H -8.930 2.162 -1.239
68
+ A 1 ASN HB2 H -9.310 4.417 -3.193
69
+ A 1 ASN HB3 H -9.108 2.719 -3.679
70
+ A 1 ASN HD21 H -11.572 3.791 -4.444
71
+ A 1 ASN HD22 H -12.757 3.183 -3.294
72
+
73
+ Reverse the atom array.
74
+ Consequently, this also changes the atom order within the residue.
75
+
76
+ >>> reordered = residue[np.arange(len(residue))[::-1]]
77
+ >>> print(reordered)
78
+ A 1 ASN HD22 H -12.757 3.183 -3.294
79
+ A 1 ASN HD21 H -11.572 3.791 -4.444
80
+ A 1 ASN HB3 H -9.108 2.719 -3.679
81
+ A 1 ASN HB2 H -9.310 4.417 -3.193
82
+ A 1 ASN HA H -8.930 2.162 -1.239
83
+ A 1 ASN H3 H -9.877 4.041 -0.293
84
+ A 1 ASN H2 H -8.740 5.068 -0.889
85
+ A 1 ASN H1 H -8.330 3.957 0.261
86
+ A 1 ASN ND2 N -11.806 3.406 -3.543
87
+ A 1 ASN OD1 O -11.269 2.700 -1.524
88
+ A 1 ASN CG C -10.915 3.130 -2.611
89
+ A 1 ASN CB C -9.437 3.396 -2.889
90
+ A 1 ASN O O -6.634 1.849 -1.758
91
+ A 1 ASN C C -7.117 2.964 -1.897
92
+ A 1 ASN CA C -8.608 3.135 -1.618
93
+ A 1 ASN N N -8.901 4.127 -0.555
94
+
95
+ The order is restored with the exception of the N-terminus protonation.
96
+
97
+ >>> restored = reordered[info.standardize_order(reordered)]
98
+ >>> print(restored)
99
+ A 1 ASN N N -8.901 4.127 -0.555
100
+ A 1 ASN CA C -8.608 3.135 -1.618
101
+ A 1 ASN C C -7.117 2.964 -1.897
102
+ A 1 ASN O O -6.634 1.849 -1.758
103
+ A 1 ASN CB C -9.437 3.396 -2.889
104
+ A 1 ASN CG C -10.915 3.130 -2.611
105
+ A 1 ASN OD1 O -11.269 2.700 -1.524
106
+ A 1 ASN ND2 N -11.806 3.406 -3.543
107
+ A 1 ASN H2 H -8.740 5.068 -0.889
108
+ A 1 ASN HA H -8.930 2.162 -1.239
109
+ A 1 ASN HB2 H -9.310 4.417 -3.193
110
+ A 1 ASN HB3 H -9.108 2.719 -3.679
111
+ A 1 ASN HD21 H -11.572 3.791 -4.444
112
+ A 1 ASN HD22 H -12.757 3.183 -3.294
113
+ A 1 ASN H3 H -9.877 4.041 -0.293
114
+ A 1 ASN H1 H -8.330 3.957 0.261
115
+ """
116
+ reordered_indices = np.zeros(atoms.array_length(), dtype=int)
117
+
118
+ starts = get_residue_starts(atoms, add_exclusive_stop=True)
119
+ for i in range(len(starts) - 1):
120
+ start = starts[i]
121
+ stop = starts[i + 1]
122
+
123
+ res_name = atoms.res_name[start]
124
+ chem_comp_atom = get_from_ccd("chem_comp_atom", res_name, "atom_id")
125
+ if chem_comp_atom is None:
126
+ # If the residue is not in the CCD, keep the current order
127
+ warnings.warn(
128
+ f"Residue '{res_name}' is not in the CCD, "
129
+ f"keeping current atom order"
130
+ )
131
+ reordered_indices[start:stop] = np.arange(start, stop)
132
+ continue
133
+
134
+ standard_atom_names = chem_comp_atom.as_array()
135
+ reordered_indices[start:stop] = (
136
+ _reorder(atoms.atom_name[start:stop], standard_atom_names) + start
137
+ )
138
+
139
+ return reordered_indices
140
+
141
+
142
+ def _reorder(origin, target):
143
+ """
144
+ Create indices to `origin`, that changes the order of `origin`,
145
+ so that the order is the same as in `target`.
146
+
147
+ Indices for elements of `target` that are not in `origin`
148
+ are ignored.
149
+ Indices for elements of `origin` that are not in `target`
150
+ are appended to the end of the returned array.
151
+
152
+
153
+ Parameters
154
+ ----------
155
+ origin : ndarray, dtype=str
156
+ The atom names to reorder.
157
+ target : ndarray, dtype=str
158
+ The atom names in target order.
159
+
160
+ Returns
161
+ -------
162
+ indices : ndarray, dtype=int
163
+ Indices for `origin` that that changes the order of `origin`
164
+ to the order of `target`.
165
+ """
166
+ target_hits, origin_hits = np.where(target[:, np.newaxis] == origin[np.newaxis, :])
167
+
168
+ counts = np.bincount(target_hits, minlength=len(target))
169
+ if (counts > 1).any():
170
+ counts = np.bincount(target_hits, minlength=len(target))
171
+ # Identify which atom is duplicate
172
+ duplicate_i = np.where(counts > 1)[0][0]
173
+ duplicate_name = target[duplicate_i]
174
+ raise BadStructureError(
175
+ f"Input structure has duplicate atom '{duplicate_name}'"
176
+ )
177
+
178
+ if len(origin_hits) < len(origin):
179
+ # The origin structure has additional atoms
180
+ # to the target structure
181
+ # -> Identify which atoms are missing in the target structure
182
+ # and append these to the end of the residue
183
+ missing_atom_mask = np.bincount(origin_hits, minlength=len(origin)).astype(bool)
184
+ return np.concatenate([origin_hits, np.where(~missing_atom_mask)[0]])
185
+ else:
186
+ return origin_hits