biotite 1.1.0__cp313-cp313-win_amd64.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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  61. biotite/sequence/align/kmeralphabet.pyx +595 -0
  62. biotite/sequence/align/kmersimilarity.cp313-win_amd64.pyd +0 -0
  63. biotite/sequence/align/kmersimilarity.pyx +233 -0
  64. biotite/sequence/align/kmertable.cp313-win_amd64.pyd +0 -0
  65. biotite/sequence/align/kmertable.pyx +3411 -0
  66. biotite/sequence/align/localgapped.cp313-win_amd64.pyd +0 -0
  67. biotite/sequence/align/localgapped.pyx +892 -0
  68. biotite/sequence/align/localungapped.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  164. biotite/sequence/align/multiple.pyx +620 -0
  165. biotite/sequence/align/pairwise.cp313-win_amd64.pyd +0 -0
  166. biotite/sequence/align/pairwise.pyx +587 -0
  167. biotite/sequence/align/permutation.cp313-win_amd64.pyd +0 -0
  168. biotite/sequence/align/permutation.pyx +313 -0
  169. biotite/sequence/align/primes.txt +821 -0
  170. biotite/sequence/align/selector.cp313-win_amd64.pyd +0 -0
  171. biotite/sequence/align/selector.pyx +954 -0
  172. biotite/sequence/align/statistics.py +264 -0
  173. biotite/sequence/align/tracetable.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  227. biotite/sequence/phylo/nj.pyx +221 -0
  228. biotite/sequence/phylo/tree.cp313-win_amd64.pyd +0 -0
  229. biotite/sequence/phylo/tree.pyx +1169 -0
  230. biotite/sequence/phylo/upgma.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  249. biotite/structure/bonds.pyx +1972 -0
  250. biotite/structure/box.py +588 -0
  251. biotite/structure/celllist.cp313-win_amd64.pyd +0 -0
  252. biotite/structure/celllist.pyx +849 -0
  253. biotite/structure/chains.py +314 -0
  254. biotite/structure/charges.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +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 +4 -0
  332. biotite-1.1.0.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,572 @@
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
+ import numpy as np
25
+ from biotite.structure.segments import (
26
+ apply_segment_wise,
27
+ get_segment_masks,
28
+ get_segment_positions,
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):
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, 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
+
52
+ Returns
53
+ -------
54
+ starts : ndarray, dtype=int
55
+ The start indices of residues in `array`.
56
+
57
+ Notes
58
+ -----
59
+ This method is internally used by all other residue-related
60
+ functions.
61
+
62
+ Examples
63
+ --------
64
+
65
+ >>> print(get_residue_starts(atom_array))
66
+ [ 0 16 35 56 75 92 116 135 157 169 176 183 197 208 219 226 250 264
67
+ 278 292]
68
+ >>> print(get_residue_starts(atom_array, add_exclusive_stop=True))
69
+ [ 0 16 35 56 75 92 116 135 157 169 176 183 197 208 219 226 250 264
70
+ 278 292 304]
71
+ """
72
+ # These mask are 'true' at indices where the value changes
73
+ chain_id_changes = array.chain_id[1:] != array.chain_id[:-1]
74
+ res_id_changes = array.res_id[1:] != array.res_id[:-1]
75
+ ins_code_changes = array.ins_code[1:] != array.ins_code[:-1]
76
+ res_name_changes = array.res_name[1:] != array.res_name[:-1]
77
+
78
+ # If any of these annotation arrays change, a new residue starts
79
+ residue_change_mask = (
80
+ chain_id_changes | res_id_changes | ins_code_changes | res_name_changes
81
+ )
82
+
83
+ # Convert mask to indices
84
+ # Add 1, to shift the indices from the end of a residue
85
+ # to the start of a new residue
86
+ residue_starts = np.where(residue_change_mask)[0] + 1
87
+
88
+ # The first residue is not included yet -> Insert '[0]'
89
+ if add_exclusive_stop:
90
+ return np.concatenate(([0], residue_starts, [array.array_length()]))
91
+ else:
92
+ return np.concatenate(([0], residue_starts))
93
+
94
+
95
+ def apply_residue_wise(array, data, function, axis=None):
96
+ """
97
+ Apply a function to intervals of data, where each interval
98
+ corresponds to one residue.
99
+
100
+ The function takes an atom array (stack) and an data array
101
+ (`ndarray`) of the same length. The function iterates through the
102
+ residue IDs of the atom array (stack) and identifies intervals of
103
+ the same ID. Then the data is
104
+ partitioned into the same intervals, and each interval (also an
105
+ :class:`ndarray`) is put as parameter into `function`. Each return value is
106
+ stored as element in the resulting :class:`ndarray`, therefore each element
107
+ corresponds to one residue.
108
+
109
+ Parameters
110
+ ----------
111
+ array : AtomArray or AtomArrayStack
112
+ The atom array (stack) to determine the residues from.
113
+ data : ndarray
114
+ The data, whose intervals are the parameter for `function`. Must
115
+ have same length as `array`.
116
+ function : function
117
+ The `function` must have either the form *f(data)* or
118
+ *f(data, axis)* in case `axis` is given. Every `function` call
119
+ must return a value with the same shape and data type.
120
+ axis : int, optional
121
+ This value is given to the `axis` parameter of `function`.
122
+
123
+ Returns
124
+ -------
125
+ processed_data : ndarray
126
+ Residue-wise evaluation of `data` by `function`. The size of the
127
+ first dimension of this array is equal to the amount of
128
+ residues.
129
+
130
+ Examples
131
+ --------
132
+ Calculate residue-wise SASA from atom-wise SASA of a 20 residue
133
+ peptide.
134
+
135
+ >>> sasa_per_atom = sasa(atom_array)
136
+ >>> print(len(sasa_per_atom))
137
+ 304
138
+ >>> sasa_per_residue = apply_residue_wise(atom_array, sasa_per_atom, np.nansum)
139
+ >>> print(len(sasa_per_residue))
140
+ 20
141
+ >>> print(sasa_per_residue)
142
+ [157.979 117.136 94.983 115.485 113.583 23.471 93.013 144.173 61.561
143
+ 38.885 0.792 114.053 108.568 27.888 83.583 113.016 114.318 74.281
144
+ 47.811 172.035]
145
+
146
+ Calculate the centroids of each residue for the same peptide.
147
+
148
+ >>> print(len(atom_array))
149
+ 304
150
+ >>> centroids = apply_residue_wise(atom_array, atom_array.coord,
151
+ ... np.average, axis=0)
152
+ >>> print(len(centroids))
153
+ 20
154
+ >>> print(centroids)
155
+ [[-9.582 3.378 -2.073]
156
+ [-4.670 5.816 -1.860]
157
+ [-2.461 3.060 3.076]
158
+ [-7.211 -0.396 1.013]
159
+ [-4.698 -1.080 -4.284]
160
+ [ 1.172 0.206 1.038]
161
+ [-2.160 -2.245 3.541]
162
+ [-3.682 -5.540 -2.895]
163
+ [ 0.711 -5.409 -2.549]
164
+ [ 2.002 -6.322 1.695]
165
+ [ 2.799 -3.140 2.327]
166
+ [ 5.901 -2.489 4.845]
167
+ [ 6.754 -6.712 3.094]
168
+ [ 5.699 -5.101 -1.209]
169
+ [ 9.295 -2.970 -1.835]
170
+ [ 5.518 -1.521 -3.473]
171
+ [ 7.219 3.673 -0.684]
172
+ [ 4.007 4.364 2.674]
173
+ [ 0.341 5.575 -0.254]
174
+ [ 1.194 10.416 1.130]]
175
+ """
176
+ starts = get_residue_starts(array, add_exclusive_stop=True)
177
+ return apply_segment_wise(starts, data, function, axis)
178
+
179
+
180
+ def spread_residue_wise(array, input_data):
181
+ """
182
+ Expand residue-wise data to atom-wise data.
183
+
184
+ Each value in the residue-wise input is assigned to all atoms of
185
+ this residue:
186
+
187
+ ``output_data[i] = input_data[j]``,
188
+ *i* is incremented from atom to atom,
189
+ *j* is incremented every residue change.
190
+
191
+ Parameters
192
+ ----------
193
+ array : AtomArray or AtomArrayStack
194
+ The atom array (stack) to determine the residues from.
195
+ input_data : ndarray
196
+ The data to be spread. The length of axis=0 must be equal to
197
+ the amount of different residue IDs in `array`.
198
+
199
+ Returns
200
+ -------
201
+ output_data : ndarray
202
+ Residue-wise spread `input_data`. Length is the same as
203
+ `array_length()` of `array`.
204
+
205
+ Examples
206
+ --------
207
+ Spread secondary structure annotation to every atom of a 20 residue
208
+ peptide (with 304 atoms).
209
+
210
+ >>> sse = annotate_sse(atom_array)
211
+ >>> print(len(sse))
212
+ 20
213
+ >>> print(sse)
214
+ ['c' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
215
+ 'c' 'c']
216
+ >>> atom_wise_sse = spread_residue_wise(atom_array, sse)
217
+ >>> print(len(atom_wise_sse))
218
+ 304
219
+ >>> print(atom_wise_sse)
220
+ ['c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'a' 'a'
221
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
222
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
223
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
224
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
225
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
226
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
227
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
228
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'a'
229
+ 'a' 'a' 'a' 'a' 'a' 'a' 'a' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
230
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
231
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
232
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
233
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
234
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
235
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c'
236
+ 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c' 'c']
237
+ """
238
+ starts = get_residue_starts(array, add_exclusive_stop=True)
239
+ return spread_segment_wise(starts, input_data)
240
+
241
+
242
+ def get_residue_masks(array, indices):
243
+ """
244
+ Get boolean masks indicating the residues to which the given atom
245
+ indices belong.
246
+
247
+ Parameters
248
+ ----------
249
+ array : AtomArray, shape=(n,) or AtomArrayStack, shape=(m,n)
250
+ The atom array (stack) to determine the residues from.
251
+ indices : ndarray, dtype=int, shape=(k,)
252
+ These indices indicate the atoms to get the corresponding
253
+ residues for.
254
+ Negative indices are not allowed.
255
+
256
+ Returns
257
+ -------
258
+ residues_masks : ndarray, dtype=bool, shape=(k,n)
259
+ Multiple boolean masks, one for each given index in `indices`.
260
+ Each array masks the atoms that belong to the same residue as
261
+ the atom at the given index.
262
+
263
+ See also
264
+ --------
265
+ get_residue_starts_for
266
+ get_residue_positions
267
+
268
+ Examples
269
+ --------
270
+
271
+ >>> indices = [5, 42]
272
+ >>> residue_masks = get_residue_masks(atom_array, indices)
273
+ >>> print(atom_array[indices[0]])
274
+ A 1 ASN CG C -10.915 3.130 -2.611
275
+ >>> print(atom_array[residue_masks[0]])
276
+ A 1 ASN N N -8.901 4.127 -0.555
277
+ A 1 ASN CA C -8.608 3.135 -1.618
278
+ A 1 ASN C C -7.117 2.964 -1.897
279
+ A 1 ASN O O -6.634 1.849 -1.758
280
+ A 1 ASN CB C -9.437 3.396 -2.889
281
+ A 1 ASN CG C -10.915 3.130 -2.611
282
+ A 1 ASN OD1 O -11.269 2.700 -1.524
283
+ A 1 ASN ND2 N -11.806 3.406 -3.543
284
+ A 1 ASN H1 H -8.330 3.957 0.261
285
+ A 1 ASN H2 H -8.740 5.068 -0.889
286
+ A 1 ASN H3 H -9.877 4.041 -0.293
287
+ A 1 ASN HA H -8.930 2.162 -1.239
288
+ A 1 ASN HB2 H -9.310 4.417 -3.193
289
+ A 1 ASN HB3 H -9.108 2.719 -3.679
290
+ A 1 ASN HD21 H -11.572 3.791 -4.444
291
+ A 1 ASN HD22 H -12.757 3.183 -3.294
292
+ >>> print(atom_array[indices[1]])
293
+ A 3 TYR CD2 C -1.820 4.326 3.332
294
+ >>> print(atom_array[residue_masks[1]])
295
+ A 3 TYR N N -4.354 3.455 -0.111
296
+ A 3 TYR CA C -3.690 2.738 0.981
297
+ A 3 TYR C C -4.102 1.256 1.074
298
+ A 3 TYR O O -3.291 0.409 1.442
299
+ A 3 TYR CB C -3.964 3.472 2.302
300
+ A 3 TYR CG C -2.824 3.339 3.290
301
+ A 3 TYR CD1 C -2.746 2.217 4.138
302
+ A 3 TYR CD2 C -1.820 4.326 3.332
303
+ A 3 TYR CE1 C -1.657 2.076 5.018
304
+ A 3 TYR CE2 C -0.725 4.185 4.205
305
+ A 3 TYR CZ C -0.639 3.053 5.043
306
+ A 3 TYR OH O 0.433 2.881 5.861
307
+ A 3 TYR H H -4.934 4.245 0.120
308
+ A 3 TYR HA H -2.615 2.768 0.796
309
+ A 3 TYR HB2 H -4.117 4.513 2.091
310
+ A 3 TYR HB3 H -4.886 3.096 2.750
311
+ A 3 TYR HD1 H -3.513 1.456 4.101
312
+ A 3 TYR HD2 H -1.877 5.200 2.695
313
+ A 3 TYR HE1 H -1.576 1.221 5.669
314
+ A 3 TYR HE2 H 0.033 4.952 4.233
315
+ A 3 TYR HH H 1.187 3.395 5.567
316
+ """
317
+ starts = get_residue_starts(array, add_exclusive_stop=True)
318
+ return get_segment_masks(starts, indices)
319
+
320
+
321
+ def get_residue_starts_for(array, indices):
322
+ """
323
+ For each given atom index, get the index that points to the
324
+ start of the residue that atom belongs to.
325
+
326
+ Parameters
327
+ ----------
328
+ array : AtomArray or AtomArrayStack
329
+ The atom array (stack) to determine the residues from.
330
+ indices : ndarray, dtype=int, shape=(k,)
331
+ These indices point to the atoms to get the corresponding
332
+ residue starts for.
333
+ Negative indices are not allowed.
334
+
335
+ Returns
336
+ -------
337
+ start_indices : ndarray, dtype=int, shape=(k,)
338
+ The indices that point to the residue starts for the input
339
+ `indices`.
340
+
341
+ See also
342
+ --------
343
+ get_residue_masks
344
+ get_residue_positions
345
+
346
+ Examples
347
+ --------
348
+
349
+ >>> indices = [5, 42]
350
+ >>> residue_starts = get_residue_starts_for(atom_array, indices)
351
+ >>> print(residue_starts)
352
+ [ 0 35]
353
+ >>> print(atom_array[indices[0]])
354
+ A 1 ASN CG C -10.915 3.130 -2.611
355
+ >>> print(atom_array[residue_starts[0]])
356
+ A 1 ASN N N -8.901 4.127 -0.555
357
+ >>> print(atom_array[indices[1]])
358
+ A 3 TYR CD2 C -1.820 4.326 3.332
359
+ >>> print(atom_array[residue_starts[1]])
360
+ A 3 TYR N N -4.354 3.455 -0.111
361
+ """
362
+ starts = get_residue_starts(array, add_exclusive_stop=True)
363
+ return get_segment_starts_for(starts, indices)
364
+
365
+
366
+ def get_residue_positions(array, indices):
367
+ """
368
+ For each given atom index, obtain the position of the residue
369
+ corresponding to this index in the input `array`.
370
+
371
+ For example, the position of the first residue in the atom array is
372
+ ``0``, the the position of the second residue is ``1``, etc.
373
+
374
+ Parameters
375
+ ----------
376
+ array : AtomArray or AtomArrayStack
377
+ The atom array (stack) to determine the residues from.
378
+ indices : ndarray, dtype=int, shape=(k,)
379
+ These indices point to the atoms to get the corresponding
380
+ residue positions for.
381
+ Negative indices are not allowed.
382
+
383
+ Returns
384
+ -------
385
+ start_indices : ndarray, dtype=int, shape=(k,)
386
+ The indices that point to the position of the residues.
387
+
388
+ See also
389
+ --------
390
+ get_residue_masks
391
+ get_residue_starts_for
392
+
393
+ Examples
394
+ --------
395
+ >>> atom_index = [5, 42]
396
+ >>> print(atom_array.res_name[atom_index])
397
+ ['ASN' 'TYR']
398
+ >>> _, residues = get_residues(atom_array)
399
+ >>> print(residues)
400
+ ['ASN' 'LEU' 'TYR' 'ILE' 'GLN' 'TRP' 'LEU' 'LYS' 'ASP' 'GLY' 'GLY' 'PRO'
401
+ 'SER' 'SER' 'GLY' 'ARG' 'PRO' 'PRO' 'PRO' 'SER']
402
+ >>> residue_index = get_residue_positions(atom_array, atom_index)
403
+ >>> print(residue_index)
404
+ [0 2]
405
+ >>> print(residues[residue_index])
406
+ ['ASN' 'TYR']
407
+ """
408
+ starts = get_residue_starts(array, add_exclusive_stop=True)
409
+ return get_segment_positions(starts, indices)
410
+
411
+
412
+ def get_residues(array):
413
+ """
414
+ Get the residue IDs and names of an atom array (stack).
415
+
416
+ The residues are listed in the same order they occur in the array
417
+ (stack).
418
+
419
+ Parameters
420
+ ----------
421
+ array : AtomArray or AtomArrayStack
422
+ The atom array (stack) to determine the residues from.
423
+
424
+ Returns
425
+ -------
426
+ ids : ndarray, dtype=int
427
+ List of residue IDs.
428
+ names : ndarray, dtype="U5"
429
+ List of residue names.
430
+
431
+ Examples
432
+ --------
433
+ Get the residue names of a 20 residue peptide.
434
+
435
+ >>> print(atom_array.res_name)
436
+ ['ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN' 'ASN'
437
+ 'ASN' 'ASN' 'ASN' 'ASN' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU'
438
+ 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'TYR'
439
+ 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR'
440
+ 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'TYR' 'ILE' 'ILE' 'ILE' 'ILE'
441
+ 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE' 'ILE'
442
+ 'ILE' 'ILE' 'ILE' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN'
443
+ 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'GLN' 'TRP' 'TRP' 'TRP' 'TRP'
444
+ 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP'
445
+ 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'TRP' 'LEU' 'LEU' 'LEU' 'LEU'
446
+ 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU' 'LEU'
447
+ 'LEU' 'LEU' 'LEU' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS'
448
+ 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS' 'LYS'
449
+ 'LYS' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP' 'ASP'
450
+ 'ASP' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY'
451
+ 'GLY' 'GLY' 'GLY' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
452
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
453
+ 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
454
+ 'SER' 'SER' 'SER' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'GLY' 'ARG' 'ARG'
455
+ 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG'
456
+ 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'ARG' 'PRO' 'PRO'
457
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
458
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
459
+ 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO' 'PRO'
460
+ 'PRO' 'PRO' 'PRO' 'PRO' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER' 'SER'
461
+ 'SER' 'SER' 'SER' 'SER']
462
+ >>> ids, names = get_residues(atom_array)
463
+ >>> print(names)
464
+ ['ASN' 'LEU' 'TYR' 'ILE' 'GLN' 'TRP' 'LEU' 'LYS' 'ASP' 'GLY' 'GLY' 'PRO'
465
+ 'SER' 'SER' 'GLY' 'ARG' 'PRO' 'PRO' 'PRO' 'SER']
466
+ """
467
+ starts = get_residue_starts(array)
468
+ return array.res_id[starts], array.res_name[starts]
469
+
470
+
471
+ def get_residue_count(array):
472
+ """
473
+ Get the amount of residues in an atom array (stack).
474
+
475
+ The count is determined from the `res_id` and `chain_id` annotation.
476
+ Each time the residue ID or chain ID changes,
477
+ the count is incremented. Special rules apply to hetero residues.
478
+
479
+ Parameters
480
+ ----------
481
+ array : AtomArray or AtomArrayStack
482
+ The atom array (stack) to determine the residues from.
483
+
484
+ Returns
485
+ -------
486
+ count : int
487
+ Amount of residues.
488
+ """
489
+ return len(get_residue_starts(array))
490
+
491
+
492
+ def residue_iter(array):
493
+ """
494
+ Iterate over all residues in an atom array (stack).
495
+
496
+ Parameters
497
+ ----------
498
+ array : AtomArray or AtomArrayStack
499
+ The atom array (stack) to iterate over.
500
+
501
+ Yields
502
+ ------
503
+ residue : AtomArray or AtomArrayStack
504
+ A single residue of the input `array`.
505
+
506
+ Examples
507
+ --------
508
+
509
+ >>> for res in residue_iter(atom_array[:50]):
510
+ ... print("New residue")
511
+ ... print(res)
512
+ ... print()
513
+ New residue
514
+ A 1 ASN N N -8.901 4.127 -0.555
515
+ A 1 ASN CA C -8.608 3.135 -1.618
516
+ A 1 ASN C C -7.117 2.964 -1.897
517
+ A 1 ASN O O -6.634 1.849 -1.758
518
+ A 1 ASN CB C -9.437 3.396 -2.889
519
+ A 1 ASN CG C -10.915 3.130 -2.611
520
+ A 1 ASN OD1 O -11.269 2.700 -1.524
521
+ A 1 ASN ND2 N -11.806 3.406 -3.543
522
+ A 1 ASN H1 H -8.330 3.957 0.261
523
+ A 1 ASN H2 H -8.740 5.068 -0.889
524
+ A 1 ASN H3 H -9.877 4.041 -0.293
525
+ A 1 ASN HA H -8.930 2.162 -1.239
526
+ A 1 ASN HB2 H -9.310 4.417 -3.193
527
+ A 1 ASN HB3 H -9.108 2.719 -3.679
528
+ A 1 ASN HD21 H -11.572 3.791 -4.444
529
+ A 1 ASN HD22 H -12.757 3.183 -3.294
530
+ <BLANKLINE>
531
+ New residue
532
+ A 2 LEU N N -6.379 4.031 -2.228
533
+ A 2 LEU CA C -4.923 4.002 -2.452
534
+ A 2 LEU C C -4.136 3.187 -1.404
535
+ A 2 LEU O O -3.391 2.274 -1.760
536
+ A 2 LEU CB C -4.411 5.450 -2.619
537
+ A 2 LEU CG C -4.795 6.450 -1.495
538
+ A 2 LEU CD1 C -3.612 6.803 -0.599
539
+ A 2 LEU CD2 C -5.351 7.748 -2.084
540
+ A 2 LEU H H -6.821 4.923 -2.394
541
+ A 2 LEU HA H -4.750 3.494 -3.403
542
+ A 2 LEU HB2 H -3.340 5.414 -2.672
543
+ A 2 LEU HB3 H -4.813 5.817 -3.564
544
+ A 2 LEU HG H -5.568 6.022 -0.858
545
+ A 2 LEU HD11 H -3.207 5.905 -0.146
546
+ A 2 LEU HD12 H -2.841 7.304 -1.183
547
+ A 2 LEU HD13 H -3.929 7.477 0.197
548
+ A 2 LEU HD21 H -4.607 8.209 -2.736
549
+ A 2 LEU HD22 H -6.255 7.544 -2.657
550
+ A 2 LEU HD23 H -5.592 8.445 -1.281
551
+ <BLANKLINE>
552
+ New residue
553
+ A 3 TYR N N -4.354 3.455 -0.111
554
+ A 3 TYR CA C -3.690 2.738 0.981
555
+ A 3 TYR C C -4.102 1.256 1.074
556
+ A 3 TYR O O -3.291 0.409 1.442
557
+ A 3 TYR CB C -3.964 3.472 2.302
558
+ A 3 TYR CG C -2.824 3.339 3.290
559
+ A 3 TYR CD1 C -2.746 2.217 4.138
560
+ A 3 TYR CD2 C -1.820 4.326 3.332
561
+ A 3 TYR CE1 C -1.657 2.076 5.018
562
+ A 3 TYR CE2 C -0.725 4.185 4.205
563
+ A 3 TYR CZ C -0.639 3.053 5.043
564
+ A 3 TYR OH O 0.433 2.881 5.861
565
+ A 3 TYR H H -4.934 4.245 0.120
566
+ A 3 TYR HA H -2.615 2.768 0.796
567
+ A 3 TYR HB2 H -4.117 4.513 2.091
568
+ <BLANKLINE>
569
+ """
570
+ # The exclusive stop is appended to the residue starts
571
+ starts = get_residue_starts(array, add_exclusive_stop=True)
572
+ return segment_iter(array, starts)