biotite 0.41.1__cp312-cp312-macosx_10_16_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 (340) hide show
  1. biotite/__init__.py +19 -0
  2. biotite/application/__init__.py +43 -0
  3. biotite/application/application.py +265 -0
  4. biotite/application/autodock/__init__.py +12 -0
  5. biotite/application/autodock/app.py +505 -0
  6. biotite/application/blast/__init__.py +14 -0
  7. biotite/application/blast/alignment.py +83 -0
  8. biotite/application/blast/webapp.py +421 -0
  9. biotite/application/clustalo/__init__.py +12 -0
  10. biotite/application/clustalo/app.py +238 -0
  11. biotite/application/dssp/__init__.py +12 -0
  12. biotite/application/dssp/app.py +152 -0
  13. biotite/application/localapp.py +306 -0
  14. biotite/application/mafft/__init__.py +12 -0
  15. biotite/application/mafft/app.py +122 -0
  16. biotite/application/msaapp.py +374 -0
  17. biotite/application/muscle/__init__.py +13 -0
  18. biotite/application/muscle/app3.py +254 -0
  19. biotite/application/muscle/app5.py +171 -0
  20. biotite/application/sra/__init__.py +18 -0
  21. biotite/application/sra/app.py +456 -0
  22. biotite/application/tantan/__init__.py +12 -0
  23. biotite/application/tantan/app.py +222 -0
  24. biotite/application/util.py +59 -0
  25. biotite/application/viennarna/__init__.py +18 -0
  26. biotite/application/viennarna/rnaalifold.py +304 -0
  27. biotite/application/viennarna/rnafold.py +269 -0
  28. biotite/application/viennarna/rnaplot.py +187 -0
  29. biotite/application/viennarna/util.py +72 -0
  30. biotite/application/webapp.py +77 -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 +61 -0
  35. biotite/database/entrez/dbnames.py +89 -0
  36. biotite/database/entrez/download.py +223 -0
  37. biotite/database/entrez/key.py +44 -0
  38. biotite/database/entrez/query.py +223 -0
  39. biotite/database/error.py +15 -0
  40. biotite/database/pubchem/__init__.py +21 -0
  41. biotite/database/pubchem/download.py +260 -0
  42. biotite/database/pubchem/error.py +20 -0
  43. biotite/database/pubchem/query.py +827 -0
  44. biotite/database/pubchem/throttle.py +99 -0
  45. biotite/database/rcsb/__init__.py +13 -0
  46. biotite/database/rcsb/download.py +167 -0
  47. biotite/database/rcsb/query.py +959 -0
  48. biotite/database/uniprot/__init__.py +13 -0
  49. biotite/database/uniprot/check.py +32 -0
  50. biotite/database/uniprot/download.py +134 -0
  51. biotite/database/uniprot/query.py +209 -0
  52. biotite/file.py +251 -0
  53. biotite/sequence/__init__.py +73 -0
  54. biotite/sequence/align/__init__.py +49 -0
  55. biotite/sequence/align/alignment.py +658 -0
  56. biotite/sequence/align/banded.cpython-312-darwin.so +0 -0
  57. biotite/sequence/align/banded.pyx +652 -0
  58. biotite/sequence/align/buckets.py +69 -0
  59. biotite/sequence/align/cigar.py +434 -0
  60. biotite/sequence/align/kmeralphabet.cpython-312-darwin.so +0 -0
  61. biotite/sequence/align/kmeralphabet.pyx +574 -0
  62. biotite/sequence/align/kmersimilarity.cpython-312-darwin.so +0 -0
  63. biotite/sequence/align/kmersimilarity.pyx +233 -0
  64. biotite/sequence/align/kmertable.cpython-312-darwin.so +0 -0
  65. biotite/sequence/align/kmertable.pyx +3400 -0
  66. biotite/sequence/align/localgapped.cpython-312-darwin.so +0 -0
  67. biotite/sequence/align/localgapped.pyx +892 -0
  68. biotite/sequence/align/localungapped.cpython-312-darwin.so +0 -0
  69. biotite/sequence/align/localungapped.pyx +279 -0
  70. biotite/sequence/align/matrix.py +405 -0
  71. biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
  72. biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
  73. biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
  74. biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
  75. biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
  76. biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
  77. biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
  78. biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
  79. biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
  80. biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
  81. biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
  82. biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
  83. biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
  84. biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
  85. biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
  86. biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
  87. biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
  88. biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
  89. biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
  90. biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
  91. biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
  92. biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
  93. biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
  94. biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
  95. biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
  96. biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
  97. biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
  98. biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
  99. biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
  100. biotite/sequence/align/matrix_data/GONNET.mat +26 -0
  101. biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
  102. biotite/sequence/align/matrix_data/MATCH.mat +25 -0
  103. biotite/sequence/align/matrix_data/NUC.mat +25 -0
  104. biotite/sequence/align/matrix_data/PAM10.mat +34 -0
  105. biotite/sequence/align/matrix_data/PAM100.mat +34 -0
  106. biotite/sequence/align/matrix_data/PAM110.mat +34 -0
  107. biotite/sequence/align/matrix_data/PAM120.mat +34 -0
  108. biotite/sequence/align/matrix_data/PAM130.mat +34 -0
  109. biotite/sequence/align/matrix_data/PAM140.mat +34 -0
  110. biotite/sequence/align/matrix_data/PAM150.mat +34 -0
  111. biotite/sequence/align/matrix_data/PAM160.mat +34 -0
  112. biotite/sequence/align/matrix_data/PAM170.mat +34 -0
  113. biotite/sequence/align/matrix_data/PAM180.mat +34 -0
  114. biotite/sequence/align/matrix_data/PAM190.mat +34 -0
  115. biotite/sequence/align/matrix_data/PAM20.mat +34 -0
  116. biotite/sequence/align/matrix_data/PAM200.mat +34 -0
  117. biotite/sequence/align/matrix_data/PAM210.mat +34 -0
  118. biotite/sequence/align/matrix_data/PAM220.mat +34 -0
  119. biotite/sequence/align/matrix_data/PAM230.mat +34 -0
  120. biotite/sequence/align/matrix_data/PAM240.mat +34 -0
  121. biotite/sequence/align/matrix_data/PAM250.mat +34 -0
  122. biotite/sequence/align/matrix_data/PAM260.mat +34 -0
  123. biotite/sequence/align/matrix_data/PAM270.mat +34 -0
  124. biotite/sequence/align/matrix_data/PAM280.mat +34 -0
  125. biotite/sequence/align/matrix_data/PAM290.mat +34 -0
  126. biotite/sequence/align/matrix_data/PAM30.mat +34 -0
  127. biotite/sequence/align/matrix_data/PAM300.mat +34 -0
  128. biotite/sequence/align/matrix_data/PAM310.mat +34 -0
  129. biotite/sequence/align/matrix_data/PAM320.mat +34 -0
  130. biotite/sequence/align/matrix_data/PAM330.mat +34 -0
  131. biotite/sequence/align/matrix_data/PAM340.mat +34 -0
  132. biotite/sequence/align/matrix_data/PAM350.mat +34 -0
  133. biotite/sequence/align/matrix_data/PAM360.mat +34 -0
  134. biotite/sequence/align/matrix_data/PAM370.mat +34 -0
  135. biotite/sequence/align/matrix_data/PAM380.mat +34 -0
  136. biotite/sequence/align/matrix_data/PAM390.mat +34 -0
  137. biotite/sequence/align/matrix_data/PAM40.mat +34 -0
  138. biotite/sequence/align/matrix_data/PAM400.mat +34 -0
  139. biotite/sequence/align/matrix_data/PAM410.mat +34 -0
  140. biotite/sequence/align/matrix_data/PAM420.mat +34 -0
  141. biotite/sequence/align/matrix_data/PAM430.mat +34 -0
  142. biotite/sequence/align/matrix_data/PAM440.mat +34 -0
  143. biotite/sequence/align/matrix_data/PAM450.mat +34 -0
  144. biotite/sequence/align/matrix_data/PAM460.mat +34 -0
  145. biotite/sequence/align/matrix_data/PAM470.mat +34 -0
  146. biotite/sequence/align/matrix_data/PAM480.mat +34 -0
  147. biotite/sequence/align/matrix_data/PAM490.mat +34 -0
  148. biotite/sequence/align/matrix_data/PAM50.mat +34 -0
  149. biotite/sequence/align/matrix_data/PAM500.mat +34 -0
  150. biotite/sequence/align/matrix_data/PAM60.mat +34 -0
  151. biotite/sequence/align/matrix_data/PAM70.mat +34 -0
  152. biotite/sequence/align/matrix_data/PAM80.mat +34 -0
  153. biotite/sequence/align/matrix_data/PAM90.mat +34 -0
  154. biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
  155. biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
  156. biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
  157. biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
  158. biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
  159. biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
  160. biotite/sequence/align/multiple.cpython-312-darwin.so +0 -0
  161. biotite/sequence/align/multiple.pyx +620 -0
  162. biotite/sequence/align/pairwise.cpython-312-darwin.so +0 -0
  163. biotite/sequence/align/pairwise.pyx +587 -0
  164. biotite/sequence/align/permutation.cpython-312-darwin.so +0 -0
  165. biotite/sequence/align/permutation.pyx +305 -0
  166. biotite/sequence/align/primes.txt +821 -0
  167. biotite/sequence/align/selector.cpython-312-darwin.so +0 -0
  168. biotite/sequence/align/selector.pyx +956 -0
  169. biotite/sequence/align/statistics.py +265 -0
  170. biotite/sequence/align/tracetable.cpython-312-darwin.so +0 -0
  171. biotite/sequence/align/tracetable.pxd +64 -0
  172. biotite/sequence/align/tracetable.pyx +370 -0
  173. biotite/sequence/alphabet.py +566 -0
  174. biotite/sequence/annotation.py +829 -0
  175. biotite/sequence/codec.cpython-312-darwin.so +0 -0
  176. biotite/sequence/codec.pyx +155 -0
  177. biotite/sequence/codon.py +466 -0
  178. biotite/sequence/codon_tables.txt +202 -0
  179. biotite/sequence/graphics/__init__.py +33 -0
  180. biotite/sequence/graphics/alignment.py +1034 -0
  181. biotite/sequence/graphics/color_schemes/autumn.json +51 -0
  182. biotite/sequence/graphics/color_schemes/blossom.json +51 -0
  183. biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
  184. biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
  185. biotite/sequence/graphics/color_schemes/flower.json +51 -0
  186. biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
  187. biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
  188. biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
  189. biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
  190. biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
  191. biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
  192. biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
  193. biotite/sequence/graphics/color_schemes/ocean.json +51 -0
  194. biotite/sequence/graphics/color_schemes/pb_flower.json +39 -0
  195. biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
  196. biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
  197. biotite/sequence/graphics/color_schemes/spring.json +51 -0
  198. biotite/sequence/graphics/color_schemes/sunset.json +51 -0
  199. biotite/sequence/graphics/color_schemes/wither.json +51 -0
  200. biotite/sequence/graphics/colorschemes.py +139 -0
  201. biotite/sequence/graphics/dendrogram.py +184 -0
  202. biotite/sequence/graphics/features.py +510 -0
  203. biotite/sequence/graphics/logo.py +110 -0
  204. biotite/sequence/graphics/plasmid.py +661 -0
  205. biotite/sequence/io/__init__.py +12 -0
  206. biotite/sequence/io/fasta/__init__.py +22 -0
  207. biotite/sequence/io/fasta/convert.py +273 -0
  208. biotite/sequence/io/fasta/file.py +278 -0
  209. biotite/sequence/io/fastq/__init__.py +19 -0
  210. biotite/sequence/io/fastq/convert.py +120 -0
  211. biotite/sequence/io/fastq/file.py +551 -0
  212. biotite/sequence/io/genbank/__init__.py +17 -0
  213. biotite/sequence/io/genbank/annotation.py +277 -0
  214. biotite/sequence/io/genbank/file.py +575 -0
  215. biotite/sequence/io/genbank/metadata.py +324 -0
  216. biotite/sequence/io/genbank/sequence.py +172 -0
  217. biotite/sequence/io/general.py +192 -0
  218. biotite/sequence/io/gff/__init__.py +26 -0
  219. biotite/sequence/io/gff/convert.py +133 -0
  220. biotite/sequence/io/gff/file.py +434 -0
  221. biotite/sequence/phylo/__init__.py +36 -0
  222. biotite/sequence/phylo/nj.cpython-312-darwin.so +0 -0
  223. biotite/sequence/phylo/nj.pyx +221 -0
  224. biotite/sequence/phylo/tree.cpython-312-darwin.so +0 -0
  225. biotite/sequence/phylo/tree.pyx +1169 -0
  226. biotite/sequence/phylo/upgma.cpython-312-darwin.so +0 -0
  227. biotite/sequence/phylo/upgma.pyx +164 -0
  228. biotite/sequence/profile.py +456 -0
  229. biotite/sequence/search.py +116 -0
  230. biotite/sequence/seqtypes.py +556 -0
  231. biotite/sequence/sequence.py +374 -0
  232. biotite/structure/__init__.py +132 -0
  233. biotite/structure/atoms.py +1455 -0
  234. biotite/structure/basepairs.py +1415 -0
  235. biotite/structure/bonds.cpython-312-darwin.so +0 -0
  236. biotite/structure/bonds.pyx +1933 -0
  237. biotite/structure/box.py +592 -0
  238. biotite/structure/celllist.cpython-312-darwin.so +0 -0
  239. biotite/structure/celllist.pyx +849 -0
  240. biotite/structure/chains.py +298 -0
  241. biotite/structure/charges.cpython-312-darwin.so +0 -0
  242. biotite/structure/charges.pyx +520 -0
  243. biotite/structure/compare.py +274 -0
  244. biotite/structure/density.py +114 -0
  245. biotite/structure/dotbracket.py +216 -0
  246. biotite/structure/error.py +31 -0
  247. biotite/structure/filter.py +585 -0
  248. biotite/structure/geometry.py +697 -0
  249. biotite/structure/graphics/__init__.py +13 -0
  250. biotite/structure/graphics/atoms.py +226 -0
  251. biotite/structure/graphics/rna.py +282 -0
  252. biotite/structure/hbond.py +409 -0
  253. biotite/structure/info/__init__.py +25 -0
  254. biotite/structure/info/atom_masses.json +121 -0
  255. biotite/structure/info/atoms.py +82 -0
  256. biotite/structure/info/bonds.py +145 -0
  257. biotite/structure/info/ccd/README.rst +8 -0
  258. biotite/structure/info/ccd/amino_acids.txt +1663 -0
  259. biotite/structure/info/ccd/carbohydrates.txt +1135 -0
  260. biotite/structure/info/ccd/components.bcif +0 -0
  261. biotite/structure/info/ccd/nucleotides.txt +798 -0
  262. biotite/structure/info/ccd.py +95 -0
  263. biotite/structure/info/groups.py +90 -0
  264. biotite/structure/info/masses.py +123 -0
  265. biotite/structure/info/misc.py +144 -0
  266. biotite/structure/info/radii.py +197 -0
  267. biotite/structure/info/standardize.py +196 -0
  268. biotite/structure/integrity.py +268 -0
  269. biotite/structure/io/__init__.py +30 -0
  270. biotite/structure/io/ctab.py +72 -0
  271. biotite/structure/io/dcd/__init__.py +13 -0
  272. biotite/structure/io/dcd/file.py +65 -0
  273. biotite/structure/io/general.py +257 -0
  274. biotite/structure/io/gro/__init__.py +14 -0
  275. biotite/structure/io/gro/file.py +343 -0
  276. biotite/structure/io/mmtf/__init__.py +21 -0
  277. biotite/structure/io/mmtf/assembly.py +214 -0
  278. biotite/structure/io/mmtf/convertarray.cpython-312-darwin.so +0 -0
  279. biotite/structure/io/mmtf/convertarray.pyx +341 -0
  280. biotite/structure/io/mmtf/convertfile.cpython-312-darwin.so +0 -0
  281. biotite/structure/io/mmtf/convertfile.pyx +501 -0
  282. biotite/structure/io/mmtf/decode.cpython-312-darwin.so +0 -0
  283. biotite/structure/io/mmtf/decode.pyx +152 -0
  284. biotite/structure/io/mmtf/encode.cpython-312-darwin.so +0 -0
  285. biotite/structure/io/mmtf/encode.pyx +183 -0
  286. biotite/structure/io/mmtf/file.py +233 -0
  287. biotite/structure/io/mol/__init__.py +20 -0
  288. biotite/structure/io/mol/convert.py +115 -0
  289. biotite/structure/io/mol/ctab.py +414 -0
  290. biotite/structure/io/mol/header.py +116 -0
  291. biotite/structure/io/mol/mol.py +193 -0
  292. biotite/structure/io/mol/sdf.py +916 -0
  293. biotite/structure/io/netcdf/__init__.py +13 -0
  294. biotite/structure/io/netcdf/file.py +63 -0
  295. biotite/structure/io/npz/__init__.py +20 -0
  296. biotite/structure/io/npz/file.py +152 -0
  297. biotite/structure/io/pdb/__init__.py +20 -0
  298. biotite/structure/io/pdb/convert.py +293 -0
  299. biotite/structure/io/pdb/file.py +1240 -0
  300. biotite/structure/io/pdb/hybrid36.cpython-312-darwin.so +0 -0
  301. biotite/structure/io/pdb/hybrid36.pyx +242 -0
  302. biotite/structure/io/pdbqt/__init__.py +15 -0
  303. biotite/structure/io/pdbqt/convert.py +107 -0
  304. biotite/structure/io/pdbqt/file.py +640 -0
  305. biotite/structure/io/pdbx/__init__.py +23 -0
  306. biotite/structure/io/pdbx/bcif.py +648 -0
  307. biotite/structure/io/pdbx/cif.py +1032 -0
  308. biotite/structure/io/pdbx/component.py +246 -0
  309. biotite/structure/io/pdbx/convert.py +1597 -0
  310. biotite/structure/io/pdbx/encoding.cpython-312-darwin.so +0 -0
  311. biotite/structure/io/pdbx/encoding.pyx +950 -0
  312. biotite/structure/io/pdbx/legacy.py +267 -0
  313. biotite/structure/io/tng/__init__.py +13 -0
  314. biotite/structure/io/tng/file.py +46 -0
  315. biotite/structure/io/trajfile.py +710 -0
  316. biotite/structure/io/trr/__init__.py +13 -0
  317. biotite/structure/io/trr/file.py +46 -0
  318. biotite/structure/io/xtc/__init__.py +13 -0
  319. biotite/structure/io/xtc/file.py +46 -0
  320. biotite/structure/mechanics.py +75 -0
  321. biotite/structure/molecules.py +353 -0
  322. biotite/structure/pseudoknots.py +642 -0
  323. biotite/structure/rdf.py +243 -0
  324. biotite/structure/repair.py +253 -0
  325. biotite/structure/residues.py +562 -0
  326. biotite/structure/resutil.py +178 -0
  327. biotite/structure/sasa.cpython-312-darwin.so +0 -0
  328. biotite/structure/sasa.pyx +322 -0
  329. biotite/structure/sequence.py +112 -0
  330. biotite/structure/sse.py +327 -0
  331. biotite/structure/superimpose.py +727 -0
  332. biotite/structure/transform.py +504 -0
  333. biotite/structure/util.py +98 -0
  334. biotite/temp.py +86 -0
  335. biotite/version.py +16 -0
  336. biotite/visualize.py +251 -0
  337. biotite-0.41.1.dist-info/METADATA +187 -0
  338. biotite-0.41.1.dist-info/RECORD +340 -0
  339. biotite-0.41.1.dist-info/WHEEL +4 -0
  340. biotite-0.41.1.dist-info/licenses/LICENSE.rst +30 -0
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "wither",
3
+ "alphabet": [
4
+ "A",
5
+ "C",
6
+ "D",
7
+ "E",
8
+ "F",
9
+ "G",
10
+ "H",
11
+ "I",
12
+ "K",
13
+ "L",
14
+ "M",
15
+ "N",
16
+ "P",
17
+ "Q",
18
+ "R",
19
+ "S",
20
+ "T",
21
+ "V",
22
+ "W",
23
+ "Y",
24
+ "B",
25
+ "Z",
26
+ "X",
27
+ "*"
28
+ ],
29
+ "colors": {
30
+ "A": "#b36139",
31
+ "C": "#ef0300",
32
+ "D": "#068855",
33
+ "E": "#028489",
34
+ "F": "#da06b6",
35
+ "G": "#797c00",
36
+ "H": "#0f73ee",
37
+ "I": "#ea0063",
38
+ "K": "#0a81a2",
39
+ "L": "#de1a76",
40
+ "M": "#a10c56",
41
+ "N": "#0f5e46",
42
+ "P": "#1c8701",
43
+ "Q": "#19577b",
44
+ "R": "#0a7dbc",
45
+ "S": "#6e5842",
46
+ "T": "#843f07",
47
+ "V": "#da3952",
48
+ "W": "#4600ff",
49
+ "Y": "#8607b4"
50
+ }
51
+ }
@@ -0,0 +1,139 @@
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.sequence.graphics"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["get_color_scheme", "list_color_scheme_names", "load_color_scheme"]
8
+
9
+ import numpy as np
10
+ import json
11
+ from os.path import join, dirname, realpath
12
+ import glob
13
+ import os
14
+ from ..alphabet import Alphabet
15
+
16
+
17
+ def load_color_scheme(file_name):
18
+ """
19
+ Load a color scheme from a JSON file.
20
+
21
+ A color scheme is a list of colors that correspond to symbols of an
22
+ alphabet. The color for a symbol is list of colors indexed by the
23
+ corresponding symbol code.
24
+
25
+ Parameters
26
+ ----------
27
+ file_name : str
28
+ The file name of the JSON file containing the scheme.
29
+
30
+ Returns
31
+ -------
32
+ scheme : dict
33
+ A dictionary representing the color scheme, It contains the
34
+ following keys, if the input file is proper:
35
+
36
+ - **name** - Name of the scheme.
37
+ - **alphabet** - :class:`Alphabet` instance describing the
38
+ type of sequence the scheme can be used for.
39
+ - **colors** - List of *Matplotlib* compatible colors
40
+ """
41
+ with open(file_name, "r") as file:
42
+ scheme = json.load(file)
43
+ alphabet = Alphabet(scheme["alphabet"])
44
+ # Store alphabet as 'Alphabet' object
45
+ scheme["alphabet"] = alphabet
46
+ colors = [None] * len(alphabet)
47
+ for key, value in scheme["colors"].items():
48
+ index = alphabet.encode(key)
49
+ colors[index] = value
50
+ # Store colors as symbol code ordered list of colors,
51
+ # rather than dictionary
52
+ scheme["colors"] = colors
53
+ return scheme
54
+
55
+
56
+ def get_color_scheme(name, alphabet, default="#FFFFFF"):
57
+ """
58
+ Get a color scheme by name and alphabet.
59
+
60
+ A color scheme is a list of colors that correspond to symbols of an
61
+ alphabet. The color for a symbol is list of colors indexed by the
62
+ corresponding symbol code.
63
+
64
+ Parameters
65
+ ----------
66
+ name : str
67
+ The name of the color scheme.
68
+ alphabet : Alphabet
69
+ The alphabet to obtain the scheme for. The alphabet of the
70
+ scheme must equal or extend this parameter.
71
+ default : str or tuple, optional
72
+ A *Matplotlib* compatible color that is used for symbols that
73
+ have no defined color in the scheme.
74
+
75
+ Returns
76
+ -------
77
+ colors : list
78
+ A list of *Matplotlib* compatible colors. The colors in the list
79
+ have the same order as the symbols in the given `alphabet`.
80
+ Since the alphabet of the color scheme may extend the given
81
+ `alphabet`, the list of colors can be longer than the
82
+ `alphabet`.
83
+
84
+ Notes
85
+ -----
86
+ There can be multiple color schemes with the same name but for
87
+ different alphabets (e.g. one for dna and one for protein
88
+ sequences).
89
+
90
+ Examples
91
+ --------
92
+
93
+ >>> alphabet = NucleotideSequence.alphabet_unamb
94
+ >>> color_scheme = get_color_scheme("rainbow", alphabet)
95
+ >>> print(color_scheme)
96
+ ['#3737f5', '#37f537', '#f5f537', '#f53737']
97
+ """
98
+ for scheme in _color_schemes:
99
+ if scheme["name"] == name and scheme["alphabet"].extends(alphabet):
100
+ colors = scheme["colors"]
101
+ # Replace None values with default color
102
+ colors = [color if color is not None else default
103
+ for color in colors]
104
+ # Only return colors that are in scope of this alphabet
105
+ # and not the extended alphabet
106
+ return colors[:len(alphabet)]
107
+ raise ValueError(f"Unkown scheme '{name}' for given alphabet")
108
+
109
+
110
+ def list_color_scheme_names(alphabet):
111
+ """
112
+ Get a list of available color scheme names for a given alphabet.
113
+
114
+ Parameters
115
+ ----------
116
+ alphabet : Alphabet
117
+ The alphbet to get the color scheme names for.
118
+ The alphabet of the scheme must equal or extend this parameter,
119
+ to be included in the list.
120
+
121
+ Returns
122
+ -------
123
+ schemes : list of str
124
+ A list of available color schemes.
125
+ """
126
+ scheme_list = []
127
+ for scheme in _color_schemes:
128
+ if scheme["alphabet"].extends(alphabet):
129
+ scheme_list.append(scheme["name"])
130
+ return scheme_list
131
+
132
+
133
+ _scheme_dir = join(dirname(realpath(__file__)), "color_schemes")
134
+
135
+ _color_schemes = []
136
+
137
+ for file_name in glob.glob(_scheme_dir + os.sep + "*.json"):
138
+ scheme = load_color_scheme(file_name)
139
+ _color_schemes.append(scheme)
@@ -0,0 +1,184 @@
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.sequence.graphics"
6
+ __author__ = "Patrick Kunzmann"
7
+ __all__ = ["plot_dendrogram"]
8
+
9
+ import numpy as np
10
+
11
+ def plot_dendrogram(axes, tree, orientation="left", use_distances=True,
12
+ labels=None, label_size=None, color="black",
13
+ show_distance=True, **kwargs):
14
+ """
15
+ Plot a dendrogram from a (phylogenetic) tree.
16
+
17
+ Parameters
18
+ ----------
19
+ tree : Tree
20
+ The tree to be visualized
21
+ orientation : {'left', 'right', 'bottom', 'top'}, optional
22
+ The position of the root node in the plot
23
+ use_distances : bool, optional
24
+ If true, the `distance` attribute of the :class:`TreeNode`
25
+ objects are used as distance measure.
26
+ Otherwise the topological distance is used.
27
+ labels : list of str, optional
28
+ The leaf node labels.
29
+ The label of a leaf node is the entry at the position of its
30
+ `index` attribute.
31
+ label_size : float, optional
32
+ The font size of the labels
33
+ color : tuple or str, optional
34
+ A *Matplotlib* compatible color, that is used to draw the lines
35
+ of the dendrogram.
36
+ show_distance : bool, optional
37
+ If true, the distance from the root is shown on the
38
+ corresponding axis.
39
+ **kwargs
40
+ Additional parameters that are used to draw the dendrogram
41
+ lines.
42
+ """
43
+
44
+ indices = tree.root.get_indices()
45
+ leaf_dict = {indices[i] : i for i in indices}
46
+
47
+ # Required for setting the plot limits
48
+ max_distance = 0
49
+
50
+ def _plot_node(node, distance):
51
+ """
52
+ Draw the lines from the given node to its children.
53
+
54
+ Parameters
55
+ ----------
56
+ dist : float
57
+ the distance of the node from root
58
+
59
+ Returns
60
+ -------
61
+ pos : float
62
+ the postion of the node on the 'label' axis
63
+ """
64
+ # The term 'distance'
65
+ # refers to positions along the 'distance' axis
66
+ # the term 'pos'
67
+ # refers to positions along the other axis
68
+ nonlocal max_distance
69
+ if max_distance < distance:
70
+ max_distance = distance
71
+ if node.is_leaf():
72
+ # No children -> no line can be drawn
73
+ return leaf_dict[node.index]
74
+ else:
75
+ children = node.children
76
+ if use_distances:
77
+ child_distances = [distance + c.distance for c in children]
78
+ else:
79
+ # Use topologic distance of children to this node,
80
+ # which is always 1
81
+ child_distances = [distance + 1 for c in children]
82
+ child_pos = [
83
+ _plot_node(child, child_distance)
84
+ for child, child_distance in zip(children, child_distances)
85
+ ]
86
+ # Position of this node is in the center of the child nodes
87
+ center_pos = sum(child_pos) / len(child_pos)
88
+ if orientation in ["left", "right"]:
89
+ # Line connecting the childs
90
+ axes.plot(
91
+ [distance, distance], [child_pos[0], child_pos[-1]],
92
+ color=color, marker="None", **kwargs
93
+ )
94
+ # Lines depicting the distances of the childs
95
+ for child_dist, pos in zip(child_distances, child_pos):
96
+ axes.plot(
97
+ [distance, child_dist], [pos, pos],
98
+ color=color, marker="None", **kwargs
99
+ )
100
+ elif orientation in ["bottom", "top"]:
101
+ # Line connecting the childs
102
+ axes.plot(
103
+ [child_pos[0], child_pos[-1]], [distance, distance],
104
+ color=color, marker="None", **kwargs
105
+ )
106
+ # Lines depicting the distances of the childs
107
+ for child_dist, pos in zip(child_distances, child_pos):
108
+ axes.plot(
109
+ [pos, pos], [distance, child_dist],
110
+ color=color, marker="None", **kwargs
111
+ )
112
+ else:
113
+ raise ValueError(f"'{orientation}' is not a valid orientation")
114
+ return center_pos
115
+
116
+ _plot_node(tree.root, 0)
117
+
118
+ if labels is not None:
119
+ # Sort labels using the order of indices in the tree
120
+ # A list cannot be directly indexed with a list,
121
+ # hence the conversion to a ndarray
122
+ labels = np.array(labels)[indices].tolist()
123
+ else:
124
+ labels = [str(i) for i in indices]
125
+ # The distance axis does not start at 0,
126
+ # since the root line would not properly rendered
127
+ # Hence the limit is set a to small fraction of the entire axis
128
+ # beyond 0
129
+ zero_limit = -0.01 * max_distance
130
+ if orientation == "left":
131
+ axes.set_xlim(zero_limit, max_distance)
132
+ axes.set_ylim(-1, len(indices))
133
+ axes.set_yticks(np.arange(0, len(indices)))
134
+ axes.set_yticklabels(labels)
135
+ axes.yaxis.set_tick_params(
136
+ left=False, right=False, labelleft=False, labelright=True,
137
+ labelsize=label_size
138
+ )
139
+ axes.xaxis.set_tick_params(
140
+ bottom=True, top=False, labelbottom=show_distance, labeltop=False,
141
+ labelsize=label_size
142
+ )
143
+ elif orientation == "right":
144
+ axes.set_xlim(max_distance, zero_limit)
145
+ axes.set_ylim(-1, len(indices))
146
+ axes.set_yticks(np.arange(0, len(indices)))
147
+ axes.set_yticklabels(labels)
148
+ axes.yaxis.set_tick_params(
149
+ left=False, right=False, labelleft=True, labelright=False,
150
+ labelsize=label_size
151
+ )
152
+ axes.xaxis.set_tick_params(
153
+ bottom=True, top=False, labelbottom=show_distance, labeltop=False,
154
+ labelsize=label_size
155
+ )
156
+ elif orientation == "bottom":
157
+ axes.set_ylim(zero_limit, max_distance)
158
+ axes.set_xlim(-1, len(indices))
159
+ axes.set_xticks(np.arange(0, len(indices)))
160
+ axes.set_xticklabels(labels)
161
+ axes.xaxis.set_tick_params(
162
+ bottom=False, top=False, labelbottom=False, labeltop=True,
163
+ labelsize=label_size
164
+ )
165
+ axes.yaxis.set_tick_params(
166
+ left=True, right=False, labelleft=show_distance, labelright=False,
167
+ labelsize=label_size
168
+ )
169
+ elif orientation == "top":
170
+ axes.set_ylim(max_distance, zero_limit)
171
+ axes.set_xlim(-1, len(indices))
172
+ axes.set_xticks(np.arange(0, len(indices)))
173
+ axes.set_xticklabels(labels)
174
+ axes.xaxis.set_tick_params(
175
+ bottom=False, top=False, labelbottom=True, labeltop=False,
176
+ labelsize=label_size
177
+ )
178
+ axes.yaxis.set_tick_params(
179
+ left=True, right=False, labelleft=show_distance, labelright=False,
180
+ labelsize=label_size
181
+ )
182
+ else:
183
+ raise ValueError(f"'{orientation}' is not a valid orientation")
184
+ axes.set_frame_on(False)