biotite 1.3.0__cp312-cp312-macosx_10_13_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 (354) 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 +447 -0
  22. biotite/application/tantan/__init__.py +12 -0
  23. biotite/application/tantan/app.py +199 -0
  24. biotite/application/util.py +77 -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 +208 -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/afdb/__init__.py +12 -0
  34. biotite/database/afdb/download.py +191 -0
  35. biotite/database/entrez/__init__.py +15 -0
  36. biotite/database/entrez/check.py +60 -0
  37. biotite/database/entrez/dbnames.py +101 -0
  38. biotite/database/entrez/download.py +228 -0
  39. biotite/database/entrez/key.py +44 -0
  40. biotite/database/entrez/query.py +263 -0
  41. biotite/database/error.py +16 -0
  42. biotite/database/pubchem/__init__.py +21 -0
  43. biotite/database/pubchem/download.py +258 -0
  44. biotite/database/pubchem/error.py +30 -0
  45. biotite/database/pubchem/query.py +819 -0
  46. biotite/database/pubchem/throttle.py +98 -0
  47. biotite/database/rcsb/__init__.py +13 -0
  48. biotite/database/rcsb/download.py +160 -0
  49. biotite/database/rcsb/query.py +963 -0
  50. biotite/database/uniprot/__init__.py +13 -0
  51. biotite/database/uniprot/check.py +40 -0
  52. biotite/database/uniprot/download.py +126 -0
  53. biotite/database/uniprot/query.py +292 -0
  54. biotite/file.py +244 -0
  55. biotite/interface/__init__.py +19 -0
  56. biotite/interface/openmm/__init__.py +20 -0
  57. biotite/interface/openmm/state.py +93 -0
  58. biotite/interface/openmm/system.py +227 -0
  59. biotite/interface/pymol/__init__.py +201 -0
  60. biotite/interface/pymol/cgo.py +346 -0
  61. biotite/interface/pymol/convert.py +185 -0
  62. biotite/interface/pymol/display.py +267 -0
  63. biotite/interface/pymol/object.py +1226 -0
  64. biotite/interface/pymol/shapes.py +178 -0
  65. biotite/interface/pymol/startup.py +169 -0
  66. biotite/interface/rdkit/__init__.py +19 -0
  67. biotite/interface/rdkit/mol.py +490 -0
  68. biotite/interface/version.py +94 -0
  69. biotite/interface/warning.py +19 -0
  70. biotite/sequence/__init__.py +84 -0
  71. biotite/sequence/align/__init__.py +199 -0
  72. biotite/sequence/align/alignment.py +702 -0
  73. biotite/sequence/align/banded.cpython-312-darwin.so +0 -0
  74. biotite/sequence/align/banded.pyx +652 -0
  75. biotite/sequence/align/buckets.py +71 -0
  76. biotite/sequence/align/cigar.py +425 -0
  77. biotite/sequence/align/kmeralphabet.cpython-312-darwin.so +0 -0
  78. biotite/sequence/align/kmeralphabet.pyx +595 -0
  79. biotite/sequence/align/kmersimilarity.cpython-312-darwin.so +0 -0
  80. biotite/sequence/align/kmersimilarity.pyx +233 -0
  81. biotite/sequence/align/kmertable.cpython-312-darwin.so +0 -0
  82. biotite/sequence/align/kmertable.pyx +3411 -0
  83. biotite/sequence/align/localgapped.cpython-312-darwin.so +0 -0
  84. biotite/sequence/align/localgapped.pyx +892 -0
  85. biotite/sequence/align/localungapped.cpython-312-darwin.so +0 -0
  86. biotite/sequence/align/localungapped.pyx +279 -0
  87. biotite/sequence/align/matrix.py +631 -0
  88. biotite/sequence/align/matrix_data/3Di.mat +24 -0
  89. biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
  90. biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
  91. biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
  92. biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
  93. biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
  94. biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
  95. biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
  96. biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
  97. biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
  98. biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
  99. biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
  100. biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
  101. biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
  102. biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
  103. biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
  104. biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
  105. biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
  106. biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
  107. biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
  108. biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
  109. biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
  110. biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
  111. biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
  112. biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
  113. biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
  114. biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
  115. biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
  116. biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
  117. biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
  118. biotite/sequence/align/matrix_data/GONNET.mat +26 -0
  119. biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
  120. biotite/sequence/align/matrix_data/MATCH.mat +25 -0
  121. biotite/sequence/align/matrix_data/NUC.mat +25 -0
  122. biotite/sequence/align/matrix_data/PAM10.mat +34 -0
  123. biotite/sequence/align/matrix_data/PAM100.mat +34 -0
  124. biotite/sequence/align/matrix_data/PAM110.mat +34 -0
  125. biotite/sequence/align/matrix_data/PAM120.mat +34 -0
  126. biotite/sequence/align/matrix_data/PAM130.mat +34 -0
  127. biotite/sequence/align/matrix_data/PAM140.mat +34 -0
  128. biotite/sequence/align/matrix_data/PAM150.mat +34 -0
  129. biotite/sequence/align/matrix_data/PAM160.mat +34 -0
  130. biotite/sequence/align/matrix_data/PAM170.mat +34 -0
  131. biotite/sequence/align/matrix_data/PAM180.mat +34 -0
  132. biotite/sequence/align/matrix_data/PAM190.mat +34 -0
  133. biotite/sequence/align/matrix_data/PAM20.mat +34 -0
  134. biotite/sequence/align/matrix_data/PAM200.mat +34 -0
  135. biotite/sequence/align/matrix_data/PAM210.mat +34 -0
  136. biotite/sequence/align/matrix_data/PAM220.mat +34 -0
  137. biotite/sequence/align/matrix_data/PAM230.mat +34 -0
  138. biotite/sequence/align/matrix_data/PAM240.mat +34 -0
  139. biotite/sequence/align/matrix_data/PAM250.mat +34 -0
  140. biotite/sequence/align/matrix_data/PAM260.mat +34 -0
  141. biotite/sequence/align/matrix_data/PAM270.mat +34 -0
  142. biotite/sequence/align/matrix_data/PAM280.mat +34 -0
  143. biotite/sequence/align/matrix_data/PAM290.mat +34 -0
  144. biotite/sequence/align/matrix_data/PAM30.mat +34 -0
  145. biotite/sequence/align/matrix_data/PAM300.mat +34 -0
  146. biotite/sequence/align/matrix_data/PAM310.mat +34 -0
  147. biotite/sequence/align/matrix_data/PAM320.mat +34 -0
  148. biotite/sequence/align/matrix_data/PAM330.mat +34 -0
  149. biotite/sequence/align/matrix_data/PAM340.mat +34 -0
  150. biotite/sequence/align/matrix_data/PAM350.mat +34 -0
  151. biotite/sequence/align/matrix_data/PAM360.mat +34 -0
  152. biotite/sequence/align/matrix_data/PAM370.mat +34 -0
  153. biotite/sequence/align/matrix_data/PAM380.mat +34 -0
  154. biotite/sequence/align/matrix_data/PAM390.mat +34 -0
  155. biotite/sequence/align/matrix_data/PAM40.mat +34 -0
  156. biotite/sequence/align/matrix_data/PAM400.mat +34 -0
  157. biotite/sequence/align/matrix_data/PAM410.mat +34 -0
  158. biotite/sequence/align/matrix_data/PAM420.mat +34 -0
  159. biotite/sequence/align/matrix_data/PAM430.mat +34 -0
  160. biotite/sequence/align/matrix_data/PAM440.mat +34 -0
  161. biotite/sequence/align/matrix_data/PAM450.mat +34 -0
  162. biotite/sequence/align/matrix_data/PAM460.mat +34 -0
  163. biotite/sequence/align/matrix_data/PAM470.mat +34 -0
  164. biotite/sequence/align/matrix_data/PAM480.mat +34 -0
  165. biotite/sequence/align/matrix_data/PAM490.mat +34 -0
  166. biotite/sequence/align/matrix_data/PAM50.mat +34 -0
  167. biotite/sequence/align/matrix_data/PAM500.mat +34 -0
  168. biotite/sequence/align/matrix_data/PAM60.mat +34 -0
  169. biotite/sequence/align/matrix_data/PAM70.mat +34 -0
  170. biotite/sequence/align/matrix_data/PAM80.mat +34 -0
  171. biotite/sequence/align/matrix_data/PAM90.mat +34 -0
  172. biotite/sequence/align/matrix_data/PB.license +21 -0
  173. biotite/sequence/align/matrix_data/PB.mat +18 -0
  174. biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
  175. biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
  176. biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
  177. biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
  178. biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
  179. biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
  180. biotite/sequence/align/multiple.cpython-312-darwin.so +0 -0
  181. biotite/sequence/align/multiple.pyx +619 -0
  182. biotite/sequence/align/pairwise.cpython-312-darwin.so +0 -0
  183. biotite/sequence/align/pairwise.pyx +585 -0
  184. biotite/sequence/align/permutation.cpython-312-darwin.so +0 -0
  185. biotite/sequence/align/permutation.pyx +313 -0
  186. biotite/sequence/align/primes.txt +821 -0
  187. biotite/sequence/align/selector.cpython-312-darwin.so +0 -0
  188. biotite/sequence/align/selector.pyx +954 -0
  189. biotite/sequence/align/statistics.py +264 -0
  190. biotite/sequence/align/tracetable.cpython-312-darwin.so +0 -0
  191. biotite/sequence/align/tracetable.pxd +64 -0
  192. biotite/sequence/align/tracetable.pyx +370 -0
  193. biotite/sequence/alphabet.py +555 -0
  194. biotite/sequence/annotation.py +836 -0
  195. biotite/sequence/codec.cpython-312-darwin.so +0 -0
  196. biotite/sequence/codec.pyx +155 -0
  197. biotite/sequence/codon.py +476 -0
  198. biotite/sequence/codon_tables.txt +202 -0
  199. biotite/sequence/graphics/__init__.py +33 -0
  200. biotite/sequence/graphics/alignment.py +1101 -0
  201. biotite/sequence/graphics/color_schemes/3di_flower.json +48 -0
  202. biotite/sequence/graphics/color_schemes/autumn.json +51 -0
  203. biotite/sequence/graphics/color_schemes/blossom.json +51 -0
  204. biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
  205. biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
  206. biotite/sequence/graphics/color_schemes/flower.json +51 -0
  207. biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
  208. biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
  209. biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
  210. biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
  211. biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
  212. biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
  213. biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
  214. biotite/sequence/graphics/color_schemes/ocean.json +51 -0
  215. biotite/sequence/graphics/color_schemes/pb_flower.json +40 -0
  216. biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
  217. biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
  218. biotite/sequence/graphics/color_schemes/spring.json +51 -0
  219. biotite/sequence/graphics/color_schemes/sunset.json +51 -0
  220. biotite/sequence/graphics/color_schemes/wither.json +51 -0
  221. biotite/sequence/graphics/colorschemes.py +170 -0
  222. biotite/sequence/graphics/dendrogram.py +231 -0
  223. biotite/sequence/graphics/features.py +544 -0
  224. biotite/sequence/graphics/logo.py +102 -0
  225. biotite/sequence/graphics/plasmid.py +712 -0
  226. biotite/sequence/io/__init__.py +12 -0
  227. biotite/sequence/io/fasta/__init__.py +22 -0
  228. biotite/sequence/io/fasta/convert.py +283 -0
  229. biotite/sequence/io/fasta/file.py +265 -0
  230. biotite/sequence/io/fastq/__init__.py +19 -0
  231. biotite/sequence/io/fastq/convert.py +117 -0
  232. biotite/sequence/io/fastq/file.py +507 -0
  233. biotite/sequence/io/genbank/__init__.py +17 -0
  234. biotite/sequence/io/genbank/annotation.py +269 -0
  235. biotite/sequence/io/genbank/file.py +573 -0
  236. biotite/sequence/io/genbank/metadata.py +336 -0
  237. biotite/sequence/io/genbank/sequence.py +173 -0
  238. biotite/sequence/io/general.py +201 -0
  239. biotite/sequence/io/gff/__init__.py +26 -0
  240. biotite/sequence/io/gff/convert.py +128 -0
  241. biotite/sequence/io/gff/file.py +449 -0
  242. biotite/sequence/phylo/__init__.py +36 -0
  243. biotite/sequence/phylo/nj.cpython-312-darwin.so +0 -0
  244. biotite/sequence/phylo/nj.pyx +221 -0
  245. biotite/sequence/phylo/tree.cpython-312-darwin.so +0 -0
  246. biotite/sequence/phylo/tree.pyx +1169 -0
  247. biotite/sequence/phylo/upgma.cpython-312-darwin.so +0 -0
  248. biotite/sequence/phylo/upgma.pyx +164 -0
  249. biotite/sequence/profile.py +561 -0
  250. biotite/sequence/search.py +117 -0
  251. biotite/sequence/seqtypes.py +720 -0
  252. biotite/sequence/sequence.py +373 -0
  253. biotite/setup_ccd.py +197 -0
  254. biotite/structure/__init__.py +135 -0
  255. biotite/structure/alphabet/__init__.py +25 -0
  256. biotite/structure/alphabet/encoder.py +332 -0
  257. biotite/structure/alphabet/encoder_weights_3di.kerasify +0 -0
  258. biotite/structure/alphabet/i3d.py +109 -0
  259. biotite/structure/alphabet/layers.py +86 -0
  260. biotite/structure/alphabet/pb.license +21 -0
  261. biotite/structure/alphabet/pb.py +170 -0
  262. biotite/structure/alphabet/unkerasify.py +128 -0
  263. biotite/structure/atoms.py +1562 -0
  264. biotite/structure/basepairs.py +1403 -0
  265. biotite/structure/bonds.cpython-312-darwin.so +0 -0
  266. biotite/structure/bonds.pyx +1975 -0
  267. biotite/structure/box.py +724 -0
  268. biotite/structure/celllist.cpython-312-darwin.so +0 -0
  269. biotite/structure/celllist.pyx +864 -0
  270. biotite/structure/chains.py +276 -0
  271. biotite/structure/charges.cpython-312-darwin.so +0 -0
  272. biotite/structure/charges.pyx +520 -0
  273. biotite/structure/compare.py +681 -0
  274. biotite/structure/density.py +109 -0
  275. biotite/structure/dotbracket.py +213 -0
  276. biotite/structure/error.py +39 -0
  277. biotite/structure/filter.py +590 -0
  278. biotite/structure/geometry.py +655 -0
  279. biotite/structure/graphics/__init__.py +13 -0
  280. biotite/structure/graphics/atoms.py +243 -0
  281. biotite/structure/graphics/rna.py +298 -0
  282. biotite/structure/hbond.py +425 -0
  283. biotite/structure/info/__init__.py +24 -0
  284. biotite/structure/info/atom_masses.json +121 -0
  285. biotite/structure/info/atoms.py +90 -0
  286. biotite/structure/info/bonds.py +149 -0
  287. biotite/structure/info/ccd.py +200 -0
  288. biotite/structure/info/components.bcif +0 -0
  289. biotite/structure/info/groups.py +128 -0
  290. biotite/structure/info/masses.py +121 -0
  291. biotite/structure/info/misc.py +137 -0
  292. biotite/structure/info/radii.py +267 -0
  293. biotite/structure/info/standardize.py +185 -0
  294. biotite/structure/integrity.py +213 -0
  295. biotite/structure/io/__init__.py +29 -0
  296. biotite/structure/io/dcd/__init__.py +13 -0
  297. biotite/structure/io/dcd/file.py +67 -0
  298. biotite/structure/io/general.py +243 -0
  299. biotite/structure/io/gro/__init__.py +14 -0
  300. biotite/structure/io/gro/file.py +343 -0
  301. biotite/structure/io/mol/__init__.py +20 -0
  302. biotite/structure/io/mol/convert.py +112 -0
  303. biotite/structure/io/mol/ctab.py +420 -0
  304. biotite/structure/io/mol/header.py +120 -0
  305. biotite/structure/io/mol/mol.py +149 -0
  306. biotite/structure/io/mol/sdf.py +940 -0
  307. biotite/structure/io/netcdf/__init__.py +13 -0
  308. biotite/structure/io/netcdf/file.py +64 -0
  309. biotite/structure/io/pdb/__init__.py +20 -0
  310. biotite/structure/io/pdb/convert.py +388 -0
  311. biotite/structure/io/pdb/file.py +1356 -0
  312. biotite/structure/io/pdb/hybrid36.cpython-312-darwin.so +0 -0
  313. biotite/structure/io/pdb/hybrid36.pyx +242 -0
  314. biotite/structure/io/pdbqt/__init__.py +15 -0
  315. biotite/structure/io/pdbqt/convert.py +113 -0
  316. biotite/structure/io/pdbqt/file.py +688 -0
  317. biotite/structure/io/pdbx/__init__.py +23 -0
  318. biotite/structure/io/pdbx/bcif.py +671 -0
  319. biotite/structure/io/pdbx/cif.py +1088 -0
  320. biotite/structure/io/pdbx/component.py +251 -0
  321. biotite/structure/io/pdbx/compress.py +358 -0
  322. biotite/structure/io/pdbx/convert.py +2097 -0
  323. biotite/structure/io/pdbx/encoding.cpython-312-darwin.so +0 -0
  324. biotite/structure/io/pdbx/encoding.pyx +1047 -0
  325. biotite/structure/io/trajfile.py +696 -0
  326. biotite/structure/io/trr/__init__.py +13 -0
  327. biotite/structure/io/trr/file.py +43 -0
  328. biotite/structure/io/util.py +38 -0
  329. biotite/structure/io/xtc/__init__.py +13 -0
  330. biotite/structure/io/xtc/file.py +43 -0
  331. biotite/structure/mechanics.py +72 -0
  332. biotite/structure/molecules.py +337 -0
  333. biotite/structure/pseudoknots.py +622 -0
  334. biotite/structure/rdf.py +245 -0
  335. biotite/structure/repair.py +302 -0
  336. biotite/structure/residues.py +544 -0
  337. biotite/structure/rings.py +335 -0
  338. biotite/structure/sasa.cpython-312-darwin.so +0 -0
  339. biotite/structure/sasa.pyx +322 -0
  340. biotite/structure/segments.py +292 -0
  341. biotite/structure/sequence.py +110 -0
  342. biotite/structure/spacegroups.json +1567 -0
  343. biotite/structure/spacegroups.license +26 -0
  344. biotite/structure/sse.py +306 -0
  345. biotite/structure/superimpose.py +511 -0
  346. biotite/structure/tm.py +581 -0
  347. biotite/structure/transform.py +736 -0
  348. biotite/structure/util.py +168 -0
  349. biotite/version.py +21 -0
  350. biotite/visualize.py +375 -0
  351. biotite-1.3.0.dist-info/METADATA +162 -0
  352. biotite-1.3.0.dist-info/RECORD +354 -0
  353. biotite-1.3.0.dist-info/WHEEL +6 -0
  354. biotite-1.3.0.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,544 @@
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
+ """
6
+ This module provides utility for handling data on residue level, rather than
7
+ atom level.
8
+ """
9
+
10
+ __name__ = "biotite.structure"
11
+ __author__ = "Patrick Kunzmann"
12
+ __all__ = [
13
+ "get_residue_starts",
14
+ "apply_residue_wise",
15
+ "spread_residue_wise",
16
+ "get_residue_masks",
17
+ "get_residue_starts_for",
18
+ "get_residue_positions",
19
+ "get_residues",
20
+ "get_residue_count",
21
+ "residue_iter",
22
+ ]
23
+
24
+ from biotite.structure.segments import (
25
+ apply_segment_wise,
26
+ get_segment_masks,
27
+ get_segment_positions,
28
+ get_segment_starts,
29
+ get_segment_starts_for,
30
+ segment_iter,
31
+ spread_segment_wise,
32
+ )
33
+
34
+
35
+ def get_residue_starts(array, add_exclusive_stop=False, extra_categories=()):
36
+ """
37
+ Get indices for an atom array, each indicating the beginning of
38
+ a residue.
39
+
40
+ A new residue starts, either when the chain ID, sym ID, residue ID,
41
+ insertion code or residue name changes from one to the next atom.
42
+
43
+ Parameters
44
+ ----------
45
+ array : AtomArray or AtomArrayStack
46
+ The atom array (stack) to get the residue starts from.
47
+ add_exclusive_stop : bool, optional
48
+ If true, the exclusive stop of the input atom array, i.e.
49
+ ``array.array_length()``, is added to the returned array of
50
+ start indices as last element.
51
+ extra_categories : tuple of str, optional
52
+ Additional annotation categories that induce the start of a new residue,
53
+ when their value change from one atom to the next.
54
+
55
+ Returns
56
+ -------
57
+ starts : ndarray, dtype=int
58
+ The start indices of residues in `array`.
59
+
60
+ Notes
61
+ -----
62
+ This method is internally used by all other residue-related
63
+ functions.
64
+
65
+ Examples
66
+ --------
67
+
68
+ >>> print(get_residue_starts(atom_array))
69
+ [ 0 16 35 56 75 92 116 135 157 169 176 183 197 208 219 226 250 264
70
+ 278 292]
71
+ >>> print(get_residue_starts(atom_array, add_exclusive_stop=True))
72
+ [ 0 16 35 56 75 92 116 135 157 169 176 183 197 208 219 226 250 264
73
+ 278 292 304]
74
+ """
75
+ categories = ["chain_id", "res_id", "ins_code", "res_name"] + list(extra_categories)
76
+ if "sym_id" in array.get_annotation_categories():
77
+ categories.append("sym_id")
78
+ return get_segment_starts(array, add_exclusive_stop, equal_categories=categories)
79
+
80
+
81
+ def apply_residue_wise(array, data, function, axis=None):
82
+ """
83
+ Apply a function to intervals of data, where each interval
84
+ corresponds to one residue.
85
+
86
+ The function takes an atom array (stack) and an data array
87
+ (`ndarray`) of the same length. The function iterates through the
88
+ residue IDs of the atom array (stack) and identifies intervals of
89
+ the same ID. Then the data is
90
+ partitioned into the same intervals, and each interval (also an
91
+ :class:`ndarray`) is put as parameter into `function`. Each return value is
92
+ stored as element in the resulting :class:`ndarray`, therefore each element
93
+ corresponds to one residue.
94
+
95
+ Parameters
96
+ ----------
97
+ array : AtomArray or AtomArrayStack
98
+ The atom array (stack) to determine the residues from.
99
+ data : ndarray
100
+ The data, whose intervals are the parameter for `function`. Must
101
+ have same length as `array`.
102
+ function : function
103
+ The `function` must have either the form *f(data)* or
104
+ *f(data, axis)* in case `axis` is given. Every `function` call
105
+ must return a value with the same shape and data type.
106
+ axis : int, optional
107
+ This value is given to the `axis` parameter of `function`.
108
+
109
+ Returns
110
+ -------
111
+ processed_data : ndarray
112
+ Residue-wise evaluation of `data` by `function`. The size of the first dimension
113
+ of this array is equal to the amount of residues.
114
+
115
+ Examples
116
+ --------
117
+ Calculate residue-wise SASA from atom-wise SASA of a 20 residue
118
+ peptide.
119
+
120
+ >>> sasa_per_atom = sasa(atom_array)
121
+ >>> print(len(sasa_per_atom))
122
+ 304
123
+ >>> sasa_per_residue = apply_residue_wise(atom_array, sasa_per_atom, np.nansum)
124
+ >>> print(len(sasa_per_residue))
125
+ 20
126
+ >>> print(sasa_per_residue)
127
+ [157.979 117.136 94.983 115.485 113.583 23.471 93.013 144.173 61.561
128
+ 38.885 0.792 114.053 108.568 27.888 83.583 113.016 114.318 74.281
129
+ 47.811 172.035]
130
+
131
+ Calculate the centroids of each residue for the same peptide.
132
+
133
+ >>> print(len(atom_array))
134
+ 304
135
+ >>> centroids = apply_residue_wise(atom_array, atom_array.coord,
136
+ ... np.average, axis=0)
137
+ >>> print(len(centroids))
138
+ 20
139
+ >>> print(centroids)
140
+ [[-9.582 3.378 -2.073]
141
+ [-4.670 5.816 -1.860]
142
+ [-2.461 3.060 3.076]
143
+ [-7.211 -0.396 1.013]
144
+ [-4.698 -1.080 -4.284]
145
+ [ 1.172 0.206 1.038]
146
+ [-2.160 -2.245 3.541]
147
+ [-3.682 -5.540 -2.895]
148
+ [ 0.711 -5.409 -2.549]
149
+ [ 2.002 -6.322 1.695]
150
+ [ 2.799 -3.140 2.327]
151
+ [ 5.901 -2.489 4.845]
152
+ [ 6.754 -6.712 3.094]
153
+ [ 5.699 -5.101 -1.209]
154
+ [ 9.295 -2.970 -1.835]
155
+ [ 5.518 -1.521 -3.473]
156
+ [ 7.219 3.673 -0.684]
157
+ [ 4.007 4.364 2.674]
158
+ [ 0.341 5.575 -0.254]
159
+ [ 1.194 10.416 1.130]]
160
+ """
161
+ starts = get_residue_starts(array, add_exclusive_stop=True)
162
+ return apply_segment_wise(starts, data, function, axis)
163
+
164
+
165
+ def spread_residue_wise(array, input_data):
166
+ """
167
+ Expand residue-wise data to atom-wise data.
168
+
169
+ Each value in the residue-wise input is assigned to all atoms of
170
+ this residue:
171
+
172
+ ``output_data[i] = input_data[j]``,
173
+ *i* is incremented from atom to atom,
174
+ *j* is incremented every residue change.
175
+
176
+ Parameters
177
+ ----------
178
+ array : AtomArray or AtomArrayStack
179
+ The atom array (stack) to determine the residues from.
180
+ input_data : ndarray
181
+ The data to be spread.
182
+ The length of the 0-th axis must be equal to the amount of different residue IDs
183
+ in `array`.
184
+
185
+ Returns
186
+ -------
187
+ output_data : ndarray
188
+ Residue-wise spread `input_data`.
189
+ Length is the same as `array_length()` of `array`.
190
+
191
+ Examples
192
+ --------
193
+ Spread secondary structure annotation to every atom of a 20 residue
194
+ peptide (with 304 atoms).
195
+
196
+ >>> sse = annotate_sse(atom_array)
197
+ >>> print(len(sse))
198
+ 20
199
+ >>> print(sse)
200
+ ['c' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
201
+ 'c' 'c']
202
+ >>> atom_wise_sse = spread_residue_wise(atom_array, sse)
203
+ >>> print(len(atom_wise_sse))
204
+ 304
205
+ >>> print(atom_wise_sse)
206
+ ['c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'a' 'a'
207
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
208
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
209
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
210
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
211
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
212
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
213
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
214
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
215
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
216
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
217
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
218
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
219
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
220
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
221
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
222
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c']
223
+ """
224
+ starts = get_residue_starts(array, add_exclusive_stop=True)
225
+ return spread_segment_wise(starts, input_data)
226
+
227
+
228
+ def get_residue_masks(array, indices):
229
+ """
230
+ Get boolean masks indicating the residues to which the given atom
231
+ indices belong.
232
+
233
+ Parameters
234
+ ----------
235
+ array : AtomArray, shape=(n,) or AtomArrayStack, shape=(m,n)
236
+ The atom array (stack) to determine the residues from.
237
+ indices : ndarray, dtype=int, shape=(k,)
238
+ These indices indicate the atoms to get the corresponding
239
+ residues for.
240
+ Negative indices are not allowed.
241
+
242
+ Returns
243
+ -------
244
+ residues_masks : ndarray, dtype=bool, shape=(k,n)
245
+ Multiple boolean masks, one for each given index in `indices`.
246
+ Each array masks the atoms that belong to the same residue as
247
+ the atom at the given index.
248
+
249
+ Examples
250
+ --------
251
+
252
+ >>> indices = [5, 42]
253
+ >>> residue_masks = get_residue_masks(atom_array, indices)
254
+ >>> print(atom_array[indices[0]])
255
+ A 1 ASN CG C -10.915 3.130 -2.611
256
+ >>> print(atom_array[residue_masks[0]])
257
+ A 1 ASN N N -8.901 4.127 -0.555
258
+ A 1 ASN CA C -8.608 3.135 -1.618
259
+ A 1 ASN C C -7.117 2.964 -1.897
260
+ A 1 ASN O O -6.634 1.849 -1.758
261
+ A 1 ASN CB C -9.437 3.396 -2.889
262
+ A 1 ASN CG C -10.915 3.130 -2.611
263
+ A 1 ASN OD1 O -11.269 2.700 -1.524
264
+ A 1 ASN ND2 N -11.806 3.406 -3.543
265
+ A 1 ASN H1 H -8.330 3.957 0.261
266
+ A 1 ASN H2 H -8.740 5.068 -0.889
267
+ A 1 ASN H3 H -9.877 4.041 -0.293
268
+ A 1 ASN HA H -8.930 2.162 -1.239
269
+ A 1 ASN HB2 H -9.310 4.417 -3.193
270
+ A 1 ASN HB3 H -9.108 2.719 -3.679
271
+ A 1 ASN HD21 H -11.572 3.791 -4.444
272
+ A 1 ASN HD22 H -12.757 3.183 -3.294
273
+ >>> print(atom_array[indices[1]])
274
+ A 3 TYR CD2 C -1.820 4.326 3.332
275
+ >>> print(atom_array[residue_masks[1]])
276
+ A 3 TYR N N -4.354 3.455 -0.111
277
+ A 3 TYR CA C -3.690 2.738 0.981
278
+ A 3 TYR C C -4.102 1.256 1.074
279
+ A 3 TYR O O -3.291 0.409 1.442
280
+ A 3 TYR CB C -3.964 3.472 2.302
281
+ A 3 TYR CG C -2.824 3.339 3.290
282
+ A 3 TYR CD1 C -2.746 2.217 4.138
283
+ A 3 TYR CD2 C -1.820 4.326 3.332
284
+ A 3 TYR CE1 C -1.657 2.076 5.018
285
+ A 3 TYR CE2 C -0.725 4.185 4.205
286
+ A 3 TYR CZ C -0.639 3.053 5.043
287
+ A 3 TYR OH O 0.433 2.881 5.861
288
+ A 3 TYR H H -4.934 4.245 0.120
289
+ A 3 TYR HA H -2.615 2.768 0.796
290
+ A 3 TYR HB2 H -4.117 4.513 2.091
291
+ A 3 TYR HB3 H -4.886 3.096 2.750
292
+ A 3 TYR HD1 H -3.513 1.456 4.101
293
+ A 3 TYR HD2 H -1.877 5.200 2.695
294
+ A 3 TYR HE1 H -1.576 1.221 5.669
295
+ A 3 TYR HE2 H 0.033 4.952 4.233
296
+ A 3 TYR HH H 1.187 3.395 5.567
297
+ """
298
+ starts = get_residue_starts(array, add_exclusive_stop=True)
299
+ return get_segment_masks(starts, indices)
300
+
301
+
302
+ def get_residue_starts_for(array, indices):
303
+ """
304
+ For each given atom index, get the index that points to the
305
+ start of the residue that atom belongs to.
306
+
307
+ Parameters
308
+ ----------
309
+ array : AtomArray or AtomArrayStack
310
+ The atom array (stack) to determine the residues from.
311
+ indices : ndarray, dtype=int, shape=(k,)
312
+ These indices point to the atoms to get the corresponding
313
+ residue starts for.
314
+ Negative indices are not allowed.
315
+
316
+ Returns
317
+ -------
318
+ start_indices : ndarray, dtype=int, shape=(k,)
319
+ The indices that point to the residue starts for the input
320
+ `indices`.
321
+
322
+ Examples
323
+ --------
324
+
325
+ >>> indices = [5, 42]
326
+ >>> residue_starts = get_residue_starts_for(atom_array, indices)
327
+ >>> print(residue_starts)
328
+ [ 0 35]
329
+ >>> print(atom_array[indices[0]])
330
+ A 1 ASN CG C -10.915 3.130 -2.611
331
+ >>> print(atom_array[residue_starts[0]])
332
+ A 1 ASN N N -8.901 4.127 -0.555
333
+ >>> print(atom_array[indices[1]])
334
+ A 3 TYR CD2 C -1.820 4.326 3.332
335
+ >>> print(atom_array[residue_starts[1]])
336
+ A 3 TYR N N -4.354 3.455 -0.111
337
+ """
338
+ starts = get_residue_starts(array, add_exclusive_stop=True)
339
+ return get_segment_starts_for(starts, indices)
340
+
341
+
342
+ def get_residue_positions(array, indices):
343
+ """
344
+ For each given atom index, obtain the position of the residue
345
+ corresponding to this index in the input `array`.
346
+
347
+ For example, the position of the first residue in the atom array is
348
+ ``0``, the the position of the second residue is ``1``, etc.
349
+
350
+ Parameters
351
+ ----------
352
+ array : AtomArray or AtomArrayStack
353
+ The atom array (stack) to determine the residues from.
354
+ indices : ndarray, dtype=int, shape=(k,)
355
+ These indices point to the atoms to get the corresponding
356
+ residue positions for.
357
+ Negative indices are not allowed.
358
+
359
+ Returns
360
+ -------
361
+ residue_indices : ndarray, dtype=int, shape=(k,)
362
+ The indices that point to the position of the residues.
363
+
364
+ Examples
365
+ --------
366
+ >>> atom_index = [5, 42]
367
+ >>> print(atom_array.res_name[atom_index])
368
+ ['ASN' 'TYR']
369
+ >>> _, residues = get_residues(atom_array)
370
+ >>> print(residues)
371
+ ['ASN' 'LEU' 'TYR' 'ILE' 'GLN' 'TRP' 'LEU' 'LYS' 'ASP' 'GLY' 'GLY' 'PRO'
372
+ 'SER' 'SER' 'GLY' 'ARG' 'PRO' 'PRO' 'PRO' 'SER']
373
+ >>> residue_index = get_residue_positions(atom_array, atom_index)
374
+ >>> print(residue_index)
375
+ [0 2]
376
+ >>> print(residues[residue_index])
377
+ ['ASN' 'TYR']
378
+ """
379
+ starts = get_residue_starts(array, add_exclusive_stop=True)
380
+ return get_segment_positions(starts, indices)
381
+
382
+
383
+ def get_residues(array):
384
+ """
385
+ Get the residue IDs and names of an atom array (stack).
386
+
387
+ The residues are listed in the same order they occur in the array
388
+ (stack).
389
+
390
+ Parameters
391
+ ----------
392
+ array : AtomArray or AtomArrayStack
393
+ The atom array (stack) to determine the residues from.
394
+
395
+ Returns
396
+ -------
397
+ ids : ndarray, dtype=int
398
+ List of residue IDs.
399
+ names : ndarray, dtype="U5"
400
+ List of residue names.
401
+
402
+ Examples
403
+ --------
404
+ Get the residue names of a 20 residue peptide.
405
+
406
+ >>> print(atom_array.res_name)
407
+ ['ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN'
408
+ 'ASN' 'ASN' 'ASN' 'ASN' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU'
409
+ 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'TYR'
410
+ 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR'
411
+ 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'ILE' 'ILE' 'ILE' 'ILE'
412
+ 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE'
413
+ 'ILE' 'ILE' 'ILE' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN'
414
+ 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'TRP' 'TRP' 'TRP' 'TRP'
415
+ 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP'
416
+ 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'LEU' 'LEU' 'LEU' 'LEU'
417
+ 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU'
418
+ 'LEU' 'LEU' 'LEU' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS'
419
+ 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS'
420
+ 'LYS' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP'
421
+ 'ASP' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY'
422
+ 'GLY' 'GLY' 'GLY' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
423
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
424
+ 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
425
+ 'SER' 'SER' 'SER' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'ARG' 'ARG'
426
+ 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG'
427
+ 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'PRO' 'PRO'
428
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
429
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
430
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
431
+ 'PRO' 'PRO' 'PRO' 'PRO' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
432
+ 'SER' 'SER' 'SER' 'SER']
433
+ >>> ids, names = get_residues(atom_array)
434
+ >>> print(names)
435
+ ['ASN' 'LEU' 'TYR' 'ILE' 'GLN' 'TRP' 'LEU' 'LYS' 'ASP' 'GLY' 'GLY' 'PRO'
436
+ 'SER' 'SER' 'GLY' 'ARG' 'PRO' 'PRO' 'PRO' 'SER']
437
+ """
438
+ starts = get_residue_starts(array)
439
+ return array.res_id[starts], array.res_name[starts]
440
+
441
+
442
+ def get_residue_count(array):
443
+ """
444
+ Get the amount of residues in an atom array (stack).
445
+
446
+ The count is determined from the `res_id` and `chain_id` annotation.
447
+ Each time the residue ID or chain ID changes,
448
+ the count is incremented. Special rules apply to hetero residues.
449
+
450
+ Parameters
451
+ ----------
452
+ array : AtomArray or AtomArrayStack
453
+ The atom array (stack) to determine the residues from.
454
+
455
+ Returns
456
+ -------
457
+ count : int
458
+ Amount of residues.
459
+ """
460
+ return len(get_residue_starts(array))
461
+
462
+
463
+ def residue_iter(array):
464
+ """
465
+ Iterate over all residues in an atom array (stack).
466
+
467
+ Parameters
468
+ ----------
469
+ array : AtomArray or AtomArrayStack
470
+ The atom array (stack) to iterate over.
471
+
472
+ Yields
473
+ ------
474
+ residue : AtomArray or AtomArrayStack
475
+ A single residue of the input `array`.
476
+
477
+ Examples
478
+ --------
479
+
480
+ >>> for res in residue_iter(atom_array[:50]):
481
+ ... print("New residue")
482
+ ... print(res)
483
+ ... print()
484
+ New residue
485
+ A 1 ASN N N -8.901 4.127 -0.555
486
+ A 1 ASN CA C -8.608 3.135 -1.618
487
+ A 1 ASN C C -7.117 2.964 -1.897
488
+ A 1 ASN O O -6.634 1.849 -1.758
489
+ A 1 ASN CB C -9.437 3.396 -2.889
490
+ A 1 ASN CG C -10.915 3.130 -2.611
491
+ A 1 ASN OD1 O -11.269 2.700 -1.524
492
+ A 1 ASN ND2 N -11.806 3.406 -3.543
493
+ A 1 ASN H1 H -8.330 3.957 0.261
494
+ A 1 ASN H2 H -8.740 5.068 -0.889
495
+ A 1 ASN H3 H -9.877 4.041 -0.293
496
+ A 1 ASN HA H -8.930 2.162 -1.239
497
+ A 1 ASN HB2 H -9.310 4.417 -3.193
498
+ A 1 ASN HB3 H -9.108 2.719 -3.679
499
+ A 1 ASN HD21 H -11.572 3.791 -4.444
500
+ A 1 ASN HD22 H -12.757 3.183 -3.294
501
+ <BLANKLINE>
502
+ New residue
503
+ A 2 LEU N N -6.379 4.031 -2.228
504
+ A 2 LEU CA C -4.923 4.002 -2.452
505
+ A 2 LEU C C -4.136 3.187 -1.404
506
+ A 2 LEU O O -3.391 2.274 -1.760
507
+ A 2 LEU CB C -4.411 5.450 -2.619
508
+ A 2 LEU CG C -4.795 6.450 -1.495
509
+ A 2 LEU CD1 C -3.612 6.803 -0.599
510
+ A 2 LEU CD2 C -5.351 7.748 -2.084
511
+ A 2 LEU H H -6.821 4.923 -2.394
512
+ A 2 LEU HA H -4.750 3.494 -3.403
513
+ A 2 LEU HB2 H -3.340 5.414 -2.672
514
+ A 2 LEU HB3 H -4.813 5.817 -3.564
515
+ A 2 LEU HG H -5.568 6.022 -0.858
516
+ A 2 LEU HD11 H -3.207 5.905 -0.146
517
+ A 2 LEU HD12 H -2.841 7.304 -1.183
518
+ A 2 LEU HD13 H -3.929 7.477 0.197
519
+ A 2 LEU HD21 H -4.607 8.209 -2.736
520
+ A 2 LEU HD22 H -6.255 7.544 -2.657
521
+ A 2 LEU HD23 H -5.592 8.445 -1.281
522
+ <BLANKLINE>
523
+ New residue
524
+ A 3 TYR N N -4.354 3.455 -0.111
525
+ A 3 TYR CA C -3.690 2.738 0.981
526
+ A 3 TYR C C -4.102 1.256 1.074
527
+ A 3 TYR O O -3.291 0.409 1.442
528
+ A 3 TYR CB C -3.964 3.472 2.302
529
+ A 3 TYR CG C -2.824 3.339 3.290
530
+ A 3 TYR CD1 C -2.746 2.217 4.138
531
+ A 3 TYR CD2 C -1.820 4.326 3.332
532
+ A 3 TYR CE1 C -1.657 2.076 5.018
533
+ A 3 TYR CE2 C -0.725 4.185 4.205
534
+ A 3 TYR CZ C -0.639 3.053 5.043
535
+ A 3 TYR OH O 0.433 2.881 5.861
536
+ A 3 TYR H H -4.934 4.245 0.120
537
+ A 3 TYR HA H -2.615 2.768 0.796
538
+ A 3 TYR HB2 H -4.117 4.513 2.091
539
+ <BLANKLINE>
540
+ """
541
+ # The exclusive stop is appended to the residue starts
542
+ starts = get_residue_starts(array, add_exclusive_stop=True)
543
+ for residue in segment_iter(array, starts):
544
+ yield residue