biotite 1.5.0__cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_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.
- biotite/__init__.py +18 -0
- biotite/application/__init__.py +69 -0
- biotite/application/application.py +276 -0
- biotite/application/autodock/__init__.py +12 -0
- biotite/application/autodock/app.py +500 -0
- biotite/application/blast/__init__.py +14 -0
- biotite/application/blast/alignment.py +92 -0
- biotite/application/blast/webapp.py +428 -0
- biotite/application/clustalo/__init__.py +12 -0
- biotite/application/clustalo/app.py +223 -0
- biotite/application/dssp/__init__.py +12 -0
- biotite/application/dssp/app.py +216 -0
- biotite/application/localapp.py +342 -0
- biotite/application/mafft/__init__.py +12 -0
- biotite/application/mafft/app.py +116 -0
- biotite/application/msaapp.py +363 -0
- biotite/application/muscle/__init__.py +13 -0
- biotite/application/muscle/app3.py +227 -0
- biotite/application/muscle/app5.py +163 -0
- biotite/application/sra/__init__.py +18 -0
- biotite/application/sra/app.py +447 -0
- biotite/application/tantan/__init__.py +12 -0
- biotite/application/tantan/app.py +199 -0
- biotite/application/util.py +77 -0
- biotite/application/viennarna/__init__.py +18 -0
- biotite/application/viennarna/rnaalifold.py +310 -0
- biotite/application/viennarna/rnafold.py +254 -0
- biotite/application/viennarna/rnaplot.py +208 -0
- biotite/application/viennarna/util.py +77 -0
- biotite/application/webapp.py +76 -0
- biotite/copyable.py +71 -0
- biotite/database/__init__.py +23 -0
- biotite/database/afdb/__init__.py +12 -0
- biotite/database/afdb/download.py +197 -0
- biotite/database/entrez/__init__.py +15 -0
- biotite/database/entrez/check.py +60 -0
- biotite/database/entrez/dbnames.py +101 -0
- biotite/database/entrez/download.py +228 -0
- biotite/database/entrez/key.py +44 -0
- biotite/database/entrez/query.py +263 -0
- biotite/database/error.py +16 -0
- biotite/database/pubchem/__init__.py +21 -0
- biotite/database/pubchem/download.py +258 -0
- biotite/database/pubchem/error.py +30 -0
- biotite/database/pubchem/query.py +819 -0
- biotite/database/pubchem/throttle.py +98 -0
- biotite/database/rcsb/__init__.py +13 -0
- biotite/database/rcsb/download.py +161 -0
- biotite/database/rcsb/query.py +963 -0
- biotite/database/uniprot/__init__.py +13 -0
- biotite/database/uniprot/check.py +40 -0
- biotite/database/uniprot/download.py +126 -0
- biotite/database/uniprot/query.py +292 -0
- biotite/file.py +244 -0
- biotite/interface/__init__.py +19 -0
- biotite/interface/openmm/__init__.py +20 -0
- biotite/interface/openmm/state.py +93 -0
- biotite/interface/openmm/system.py +227 -0
- biotite/interface/pymol/__init__.py +201 -0
- biotite/interface/pymol/cgo.py +346 -0
- biotite/interface/pymol/convert.py +185 -0
- biotite/interface/pymol/display.py +267 -0
- biotite/interface/pymol/object.py +1228 -0
- biotite/interface/pymol/shapes.py +178 -0
- biotite/interface/pymol/startup.py +169 -0
- biotite/interface/rdkit/__init__.py +19 -0
- biotite/interface/rdkit/mol.py +490 -0
- biotite/interface/version.py +94 -0
- biotite/interface/warning.py +19 -0
- biotite/sequence/__init__.py +84 -0
- biotite/sequence/align/__init__.py +199 -0
- biotite/sequence/align/alignment.py +702 -0
- biotite/sequence/align/banded.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/banded.pyx +652 -0
- biotite/sequence/align/buckets.py +71 -0
- biotite/sequence/align/cigar.py +425 -0
- biotite/sequence/align/kmeralphabet.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/kmeralphabet.pyx +595 -0
- biotite/sequence/align/kmersimilarity.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/kmersimilarity.pyx +233 -0
- biotite/sequence/align/kmertable.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/kmertable.pyx +3411 -0
- biotite/sequence/align/localgapped.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/localgapped.pyx +892 -0
- biotite/sequence/align/localungapped.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/localungapped.pyx +279 -0
- biotite/sequence/align/matrix.py +631 -0
- biotite/sequence/align/matrix_data/3Di.mat +24 -0
- biotite/sequence/align/matrix_data/BLOSUM100.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM30.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM35.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM40.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM45.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM50.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM50_13p.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM50_14.3.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM50_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM55.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM60.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM62.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM62_13p.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM62_14.3.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM62_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/BLOSUM65.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM70.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM75.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM80.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM85.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUM90.mat +31 -0
- biotite/sequence/align/matrix_data/BLOSUMN.mat +31 -0
- biotite/sequence/align/matrix_data/CorBLOSUM49_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/CorBLOSUM57_13p.mat +25 -0
- biotite/sequence/align/matrix_data/CorBLOSUM57_14.3.mat +25 -0
- biotite/sequence/align/matrix_data/CorBLOSUM61_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/CorBLOSUM66_13p.mat +25 -0
- biotite/sequence/align/matrix_data/CorBLOSUM67_14.3.mat +25 -0
- biotite/sequence/align/matrix_data/DAYHOFF.mat +32 -0
- biotite/sequence/align/matrix_data/GONNET.mat +26 -0
- biotite/sequence/align/matrix_data/IDENTITY.mat +25 -0
- biotite/sequence/align/matrix_data/MATCH.mat +25 -0
- biotite/sequence/align/matrix_data/NUC.mat +25 -0
- biotite/sequence/align/matrix_data/PAM10.mat +34 -0
- biotite/sequence/align/matrix_data/PAM100.mat +34 -0
- biotite/sequence/align/matrix_data/PAM110.mat +34 -0
- biotite/sequence/align/matrix_data/PAM120.mat +34 -0
- biotite/sequence/align/matrix_data/PAM130.mat +34 -0
- biotite/sequence/align/matrix_data/PAM140.mat +34 -0
- biotite/sequence/align/matrix_data/PAM150.mat +34 -0
- biotite/sequence/align/matrix_data/PAM160.mat +34 -0
- biotite/sequence/align/matrix_data/PAM170.mat +34 -0
- biotite/sequence/align/matrix_data/PAM180.mat +34 -0
- biotite/sequence/align/matrix_data/PAM190.mat +34 -0
- biotite/sequence/align/matrix_data/PAM20.mat +34 -0
- biotite/sequence/align/matrix_data/PAM200.mat +34 -0
- biotite/sequence/align/matrix_data/PAM210.mat +34 -0
- biotite/sequence/align/matrix_data/PAM220.mat +34 -0
- biotite/sequence/align/matrix_data/PAM230.mat +34 -0
- biotite/sequence/align/matrix_data/PAM240.mat +34 -0
- biotite/sequence/align/matrix_data/PAM250.mat +34 -0
- biotite/sequence/align/matrix_data/PAM260.mat +34 -0
- biotite/sequence/align/matrix_data/PAM270.mat +34 -0
- biotite/sequence/align/matrix_data/PAM280.mat +34 -0
- biotite/sequence/align/matrix_data/PAM290.mat +34 -0
- biotite/sequence/align/matrix_data/PAM30.mat +34 -0
- biotite/sequence/align/matrix_data/PAM300.mat +34 -0
- biotite/sequence/align/matrix_data/PAM310.mat +34 -0
- biotite/sequence/align/matrix_data/PAM320.mat +34 -0
- biotite/sequence/align/matrix_data/PAM330.mat +34 -0
- biotite/sequence/align/matrix_data/PAM340.mat +34 -0
- biotite/sequence/align/matrix_data/PAM350.mat +34 -0
- biotite/sequence/align/matrix_data/PAM360.mat +34 -0
- biotite/sequence/align/matrix_data/PAM370.mat +34 -0
- biotite/sequence/align/matrix_data/PAM380.mat +34 -0
- biotite/sequence/align/matrix_data/PAM390.mat +34 -0
- biotite/sequence/align/matrix_data/PAM40.mat +34 -0
- biotite/sequence/align/matrix_data/PAM400.mat +34 -0
- biotite/sequence/align/matrix_data/PAM410.mat +34 -0
- biotite/sequence/align/matrix_data/PAM420.mat +34 -0
- biotite/sequence/align/matrix_data/PAM430.mat +34 -0
- biotite/sequence/align/matrix_data/PAM440.mat +34 -0
- biotite/sequence/align/matrix_data/PAM450.mat +34 -0
- biotite/sequence/align/matrix_data/PAM460.mat +34 -0
- biotite/sequence/align/matrix_data/PAM470.mat +34 -0
- biotite/sequence/align/matrix_data/PAM480.mat +34 -0
- biotite/sequence/align/matrix_data/PAM490.mat +34 -0
- biotite/sequence/align/matrix_data/PAM50.mat +34 -0
- biotite/sequence/align/matrix_data/PAM500.mat +34 -0
- biotite/sequence/align/matrix_data/PAM60.mat +34 -0
- biotite/sequence/align/matrix_data/PAM70.mat +34 -0
- biotite/sequence/align/matrix_data/PAM80.mat +34 -0
- biotite/sequence/align/matrix_data/PAM90.mat +34 -0
- biotite/sequence/align/matrix_data/PB.license +21 -0
- biotite/sequence/align/matrix_data/PB.mat +18 -0
- biotite/sequence/align/matrix_data/RBLOSUM52_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/RBLOSUM59_13p.mat +25 -0
- biotite/sequence/align/matrix_data/RBLOSUM59_14.3.mat +25 -0
- biotite/sequence/align/matrix_data/RBLOSUM64_5.0.mat +25 -0
- biotite/sequence/align/matrix_data/RBLOSUM69_13p.mat +25 -0
- biotite/sequence/align/matrix_data/RBLOSUM69_14.3.mat +25 -0
- biotite/sequence/align/multiple.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/multiple.pyx +619 -0
- biotite/sequence/align/pairwise.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/pairwise.pyx +585 -0
- biotite/sequence/align/permutation.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/permutation.pyx +313 -0
- biotite/sequence/align/primes.txt +821 -0
- biotite/sequence/align/selector.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/selector.pyx +954 -0
- biotite/sequence/align/statistics.py +264 -0
- biotite/sequence/align/tracetable.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/align/tracetable.pxd +64 -0
- biotite/sequence/align/tracetable.pyx +370 -0
- biotite/sequence/alphabet.py +555 -0
- biotite/sequence/annotation.py +836 -0
- biotite/sequence/codec.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/codec.pyx +155 -0
- biotite/sequence/codon.py +476 -0
- biotite/sequence/codon_tables.txt +202 -0
- biotite/sequence/graphics/__init__.py +33 -0
- biotite/sequence/graphics/alignment.py +1101 -0
- biotite/sequence/graphics/color_schemes/3di_flower.json +48 -0
- biotite/sequence/graphics/color_schemes/autumn.json +51 -0
- biotite/sequence/graphics/color_schemes/blossom.json +51 -0
- biotite/sequence/graphics/color_schemes/clustalx_dna.json +11 -0
- biotite/sequence/graphics/color_schemes/clustalx_protein.json +28 -0
- biotite/sequence/graphics/color_schemes/flower.json +51 -0
- biotite/sequence/graphics/color_schemes/jalview_buried.json +31 -0
- biotite/sequence/graphics/color_schemes/jalview_hydrophobicity.json +31 -0
- biotite/sequence/graphics/color_schemes/jalview_prop_helix.json +31 -0
- biotite/sequence/graphics/color_schemes/jalview_prop_strand.json +31 -0
- biotite/sequence/graphics/color_schemes/jalview_prop_turn.json +31 -0
- biotite/sequence/graphics/color_schemes/jalview_taylor.json +28 -0
- biotite/sequence/graphics/color_schemes/jalview_zappo.json +28 -0
- biotite/sequence/graphics/color_schemes/ocean.json +51 -0
- biotite/sequence/graphics/color_schemes/pb_flower.json +40 -0
- biotite/sequence/graphics/color_schemes/rainbow_dna.json +11 -0
- biotite/sequence/graphics/color_schemes/rainbow_protein.json +30 -0
- biotite/sequence/graphics/color_schemes/spring.json +51 -0
- biotite/sequence/graphics/color_schemes/sunset.json +51 -0
- biotite/sequence/graphics/color_schemes/wither.json +51 -0
- biotite/sequence/graphics/colorschemes.py +170 -0
- biotite/sequence/graphics/dendrogram.py +231 -0
- biotite/sequence/graphics/features.py +544 -0
- biotite/sequence/graphics/logo.py +102 -0
- biotite/sequence/graphics/plasmid.py +712 -0
- biotite/sequence/io/__init__.py +12 -0
- biotite/sequence/io/fasta/__init__.py +22 -0
- biotite/sequence/io/fasta/convert.py +283 -0
- biotite/sequence/io/fasta/file.py +265 -0
- biotite/sequence/io/fastq/__init__.py +19 -0
- biotite/sequence/io/fastq/convert.py +117 -0
- biotite/sequence/io/fastq/file.py +507 -0
- biotite/sequence/io/genbank/__init__.py +17 -0
- biotite/sequence/io/genbank/annotation.py +269 -0
- biotite/sequence/io/genbank/file.py +573 -0
- biotite/sequence/io/genbank/metadata.py +336 -0
- biotite/sequence/io/genbank/sequence.py +173 -0
- biotite/sequence/io/general.py +201 -0
- biotite/sequence/io/gff/__init__.py +26 -0
- biotite/sequence/io/gff/convert.py +128 -0
- biotite/sequence/io/gff/file.py +449 -0
- biotite/sequence/phylo/__init__.py +36 -0
- biotite/sequence/phylo/nj.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/phylo/nj.pyx +221 -0
- biotite/sequence/phylo/tree.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/phylo/tree.pyx +1169 -0
- biotite/sequence/phylo/upgma.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/sequence/phylo/upgma.pyx +164 -0
- biotite/sequence/profile.py +561 -0
- biotite/sequence/search.py +117 -0
- biotite/sequence/seqtypes.py +720 -0
- biotite/sequence/sequence.py +373 -0
- biotite/setup_ccd.py +197 -0
- biotite/structure/__init__.py +135 -0
- biotite/structure/alphabet/__init__.py +25 -0
- biotite/structure/alphabet/encoder.py +332 -0
- biotite/structure/alphabet/encoder_weights_3di.kerasify +0 -0
- biotite/structure/alphabet/i3d.py +109 -0
- biotite/structure/alphabet/layers.py +86 -0
- biotite/structure/alphabet/pb.license +21 -0
- biotite/structure/alphabet/pb.py +170 -0
- biotite/structure/alphabet/unkerasify.py +128 -0
- biotite/structure/atoms.py +1562 -0
- biotite/structure/basepairs.py +1403 -0
- biotite/structure/bonds.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/bonds.pyx +2036 -0
- biotite/structure/box.py +724 -0
- biotite/structure/celllist.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/celllist.pyx +864 -0
- biotite/structure/chains.py +310 -0
- biotite/structure/charges.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/charges.pyx +520 -0
- biotite/structure/compare.py +683 -0
- biotite/structure/density.py +109 -0
- biotite/structure/dotbracket.py +213 -0
- biotite/structure/error.py +39 -0
- biotite/structure/filter.py +591 -0
- biotite/structure/geometry.py +817 -0
- biotite/structure/graphics/__init__.py +13 -0
- biotite/structure/graphics/atoms.py +243 -0
- biotite/structure/graphics/rna.py +298 -0
- biotite/structure/hbond.py +425 -0
- biotite/structure/info/__init__.py +24 -0
- biotite/structure/info/atom_masses.json +121 -0
- biotite/structure/info/atoms.py +98 -0
- biotite/structure/info/bonds.py +149 -0
- biotite/structure/info/ccd.py +200 -0
- biotite/structure/info/components.bcif +0 -0
- biotite/structure/info/groups.py +128 -0
- biotite/structure/info/masses.py +121 -0
- biotite/structure/info/misc.py +137 -0
- biotite/structure/info/radii.py +267 -0
- biotite/structure/info/standardize.py +185 -0
- biotite/structure/integrity.py +213 -0
- biotite/structure/io/__init__.py +29 -0
- biotite/structure/io/dcd/__init__.py +13 -0
- biotite/structure/io/dcd/file.py +67 -0
- biotite/structure/io/general.py +243 -0
- biotite/structure/io/gro/__init__.py +14 -0
- biotite/structure/io/gro/file.py +343 -0
- biotite/structure/io/mol/__init__.py +20 -0
- biotite/structure/io/mol/convert.py +112 -0
- biotite/structure/io/mol/ctab.py +420 -0
- biotite/structure/io/mol/header.py +120 -0
- biotite/structure/io/mol/mol.py +149 -0
- biotite/structure/io/mol/sdf.py +940 -0
- biotite/structure/io/netcdf/__init__.py +13 -0
- biotite/structure/io/netcdf/file.py +64 -0
- biotite/structure/io/pdb/__init__.py +20 -0
- biotite/structure/io/pdb/convert.py +389 -0
- biotite/structure/io/pdb/file.py +1380 -0
- biotite/structure/io/pdb/hybrid36.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/io/pdb/hybrid36.pyx +242 -0
- biotite/structure/io/pdbqt/__init__.py +15 -0
- biotite/structure/io/pdbqt/convert.py +113 -0
- biotite/structure/io/pdbqt/file.py +688 -0
- biotite/structure/io/pdbx/__init__.py +23 -0
- biotite/structure/io/pdbx/bcif.py +674 -0
- biotite/structure/io/pdbx/cif.py +1091 -0
- biotite/structure/io/pdbx/component.py +251 -0
- biotite/structure/io/pdbx/compress.py +362 -0
- biotite/structure/io/pdbx/convert.py +2113 -0
- biotite/structure/io/pdbx/encoding.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/io/pdbx/encoding.pyx +1078 -0
- biotite/structure/io/trajfile.py +696 -0
- biotite/structure/io/trr/__init__.py +13 -0
- biotite/structure/io/trr/file.py +43 -0
- biotite/structure/io/util.py +38 -0
- biotite/structure/io/xtc/__init__.py +13 -0
- biotite/structure/io/xtc/file.py +43 -0
- biotite/structure/mechanics.py +72 -0
- biotite/structure/molecules.py +337 -0
- biotite/structure/pseudoknots.py +622 -0
- biotite/structure/rdf.py +245 -0
- biotite/structure/repair.py +302 -0
- biotite/structure/residues.py +716 -0
- biotite/structure/rings.py +451 -0
- biotite/structure/sasa.cpython-313-x86_64-linux-gnu.so +0 -0
- biotite/structure/sasa.pyx +322 -0
- biotite/structure/segments.py +328 -0
- biotite/structure/sequence.py +110 -0
- biotite/structure/spacegroups.json +1567 -0
- biotite/structure/spacegroups.license +26 -0
- biotite/structure/sse.py +306 -0
- biotite/structure/superimpose.py +511 -0
- biotite/structure/tm.py +581 -0
- biotite/structure/transform.py +736 -0
- biotite/structure/util.py +160 -0
- biotite/version.py +34 -0
- biotite/visualize.py +375 -0
- biotite-1.5.0.dist-info/METADATA +162 -0
- biotite-1.5.0.dist-info/RECORD +354 -0
- biotite-1.5.0.dist-info/WHEEL +6 -0
- biotite-1.5.0.dist-info/licenses/LICENSE.rst +30 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sunset",
|
|
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": "#fea0fd",
|
|
31
|
+
"C": "#fc0cfe",
|
|
32
|
+
"D": "#2e7bbe",
|
|
33
|
+
"E": "#677892",
|
|
34
|
+
"F": "#ff385d",
|
|
35
|
+
"G": "#2799ff",
|
|
36
|
+
"H": "#dbc58e",
|
|
37
|
+
"I": "#fa21a1",
|
|
38
|
+
"K": "#debecc",
|
|
39
|
+
"L": "#e01e82",
|
|
40
|
+
"M": "#d13e7b",
|
|
41
|
+
"N": "#abc8f5",
|
|
42
|
+
"P": "#5766f9",
|
|
43
|
+
"Q": "#8c6e81",
|
|
44
|
+
"R": "#85746a",
|
|
45
|
+
"S": "#e7b4fd",
|
|
46
|
+
"T": "#a658b7",
|
|
47
|
+
"V": "#fe51b8",
|
|
48
|
+
"W": "#ff3701",
|
|
49
|
+
"Y": "#cb5339"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -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,170 @@
|
|
|
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 glob
|
|
10
|
+
import json
|
|
11
|
+
import os
|
|
12
|
+
from os.path import dirname, join, realpath
|
|
13
|
+
from biotite.sequence.alphabet import Alphabet
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def load_color_scheme(file_name):
|
|
17
|
+
"""
|
|
18
|
+
Load a color scheme from a JSON file.
|
|
19
|
+
|
|
20
|
+
A color scheme is a list of colors that correspond to symbols of an
|
|
21
|
+
alphabet. The color for a symbol is list of colors indexed by the
|
|
22
|
+
corresponding symbol code.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
file_name : str
|
|
27
|
+
The file name of the JSON file containing the scheme.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
scheme : dict
|
|
32
|
+
A dictionary representing the color scheme, It contains the
|
|
33
|
+
following keys, if the input file is proper:
|
|
34
|
+
|
|
35
|
+
- **name** - Name of the scheme.
|
|
36
|
+
- **alphabet** - :class:`Alphabet` instance describing the
|
|
37
|
+
type of sequence the scheme can be used for.
|
|
38
|
+
- **colors** - List of *Matplotlib* compatible colors
|
|
39
|
+
"""
|
|
40
|
+
with open(file_name, "r") as file:
|
|
41
|
+
scheme = json.load(file)
|
|
42
|
+
alphabet = Alphabet(scheme["alphabet"])
|
|
43
|
+
# Store alphabet as 'Alphabet' object
|
|
44
|
+
scheme["alphabet"] = alphabet
|
|
45
|
+
colors = [None] * len(alphabet)
|
|
46
|
+
for key, value in scheme["colors"].items():
|
|
47
|
+
index = alphabet.encode(key)
|
|
48
|
+
colors[index] = value
|
|
49
|
+
# Store colors as symbol code ordered list of colors,
|
|
50
|
+
# rather than dictionary
|
|
51
|
+
scheme["colors"] = colors
|
|
52
|
+
return scheme
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def get_color_scheme(name, alphabet, default="#FFFFFF"):
|
|
56
|
+
"""
|
|
57
|
+
Get a color scheme by name and alphabet.
|
|
58
|
+
|
|
59
|
+
A color scheme is a list of colors that correspond to symbols of an
|
|
60
|
+
alphabet. The color for a symbol is list of colors indexed by the
|
|
61
|
+
corresponding symbol code.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
name : str
|
|
66
|
+
The name of the color scheme.
|
|
67
|
+
alphabet : Alphabet
|
|
68
|
+
The alphabet to obtain the scheme for. The alphabet of the
|
|
69
|
+
scheme must equal or extend this parameter.
|
|
70
|
+
default : str or tuple, optional
|
|
71
|
+
A *Matplotlib* compatible color that is used for symbols that
|
|
72
|
+
have no defined color in the scheme.
|
|
73
|
+
|
|
74
|
+
Returns
|
|
75
|
+
-------
|
|
76
|
+
colors : list
|
|
77
|
+
A list of *Matplotlib* compatible colors. The colors in the list
|
|
78
|
+
have the same order as the symbols in the given `alphabet`.
|
|
79
|
+
Since the alphabet of the color scheme may extend the given
|
|
80
|
+
`alphabet`, the list of colors can be longer than the
|
|
81
|
+
`alphabet`.
|
|
82
|
+
|
|
83
|
+
Notes
|
|
84
|
+
-----
|
|
85
|
+
There can be multiple color schemes with the same name but for
|
|
86
|
+
different alphabets (e.g. one for dna and one for protein
|
|
87
|
+
sequences).
|
|
88
|
+
|
|
89
|
+
Examples
|
|
90
|
+
--------
|
|
91
|
+
|
|
92
|
+
>>> alphabet = NucleotideSequence.alphabet_unamb
|
|
93
|
+
>>> color_scheme = get_color_scheme("rainbow", alphabet)
|
|
94
|
+
>>> print(color_scheme)
|
|
95
|
+
['#3737f5', '#37f537', '#f5f537', '#f53737']
|
|
96
|
+
"""
|
|
97
|
+
# Try exact alphabet match first
|
|
98
|
+
for scheme in _color_schemes:
|
|
99
|
+
if scheme["name"] == name and scheme["alphabet"] == alphabet:
|
|
100
|
+
return _fit_color_scheme(alphabet, scheme, default)
|
|
101
|
+
# If no exact match was found, try to find a scheme for an alphabet
|
|
102
|
+
# that extends the given alphabet
|
|
103
|
+
for scheme in _color_schemes:
|
|
104
|
+
if scheme["name"] == name and scheme["alphabet"].extends(alphabet):
|
|
105
|
+
return _fit_color_scheme(alphabet, scheme, default)
|
|
106
|
+
|
|
107
|
+
raise ValueError(f"Unkown scheme '{name}' for given alphabet")
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def list_color_scheme_names(alphabet, strict=False):
|
|
111
|
+
"""
|
|
112
|
+
Get a list of available color scheme names for a given alphabet.
|
|
113
|
+
|
|
114
|
+
Parameters
|
|
115
|
+
----------
|
|
116
|
+
alphabet : Alphabet
|
|
117
|
+
The alphabet to get the color scheme names for.
|
|
118
|
+
strict : bool, optional
|
|
119
|
+
If set to true, only schemes with an exact match to the given
|
|
120
|
+
alphabet are included in the list.
|
|
121
|
+
If set to false, schemes with an alphabet that extends the given
|
|
122
|
+
alphabet are also included.
|
|
123
|
+
|
|
124
|
+
Returns
|
|
125
|
+
-------
|
|
126
|
+
schemes : list of str
|
|
127
|
+
A list of available color schemes.
|
|
128
|
+
"""
|
|
129
|
+
scheme_list = []
|
|
130
|
+
for scheme in _color_schemes:
|
|
131
|
+
if strict and scheme["alphabet"] == alphabet:
|
|
132
|
+
scheme_list.append(scheme["name"])
|
|
133
|
+
if not strict and scheme["alphabet"].extends(alphabet):
|
|
134
|
+
scheme_list.append(scheme["name"])
|
|
135
|
+
return scheme_list
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
_scheme_dir = join(dirname(realpath(__file__)), "color_schemes")
|
|
139
|
+
|
|
140
|
+
_color_schemes = []
|
|
141
|
+
|
|
142
|
+
for file_name in glob.glob(_scheme_dir + os.sep + "*.json"):
|
|
143
|
+
scheme = load_color_scheme(file_name)
|
|
144
|
+
_color_schemes.append(scheme)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _fit_color_scheme(alphabet, color_scheme, default_color):
|
|
148
|
+
"""
|
|
149
|
+
Fit a color scheme to the given alphabet.
|
|
150
|
+
|
|
151
|
+
Parameters
|
|
152
|
+
----------
|
|
153
|
+
alphabet : Alphabet
|
|
154
|
+
The alphabet to get the color scheme for.
|
|
155
|
+
color_scheme : dict
|
|
156
|
+
The color scheme.
|
|
157
|
+
default_color : str or tuple
|
|
158
|
+
The default color.
|
|
159
|
+
|
|
160
|
+
Returns
|
|
161
|
+
-------
|
|
162
|
+
scheme : list of str
|
|
163
|
+
The colors from the scheme.
|
|
164
|
+
"""
|
|
165
|
+
colors = color_scheme["colors"]
|
|
166
|
+
# Replace None values with default color
|
|
167
|
+
colors = [color if color is not None else default_color for color in colors]
|
|
168
|
+
# Only return colors that are in scope of this alphabet
|
|
169
|
+
# and not the extended alphabet
|
|
170
|
+
return colors[: len(alphabet)]
|
|
@@ -0,0 +1,231 @@
|
|
|
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
|
+
|
|
12
|
+
def plot_dendrogram(
|
|
13
|
+
axes,
|
|
14
|
+
tree,
|
|
15
|
+
orientation="left",
|
|
16
|
+
use_distances=True,
|
|
17
|
+
labels=None,
|
|
18
|
+
label_size=None,
|
|
19
|
+
color="black",
|
|
20
|
+
show_distance=True,
|
|
21
|
+
**kwargs,
|
|
22
|
+
):
|
|
23
|
+
"""
|
|
24
|
+
Plot a dendrogram from a (phylogenetic) tree.
|
|
25
|
+
|
|
26
|
+
Parameters
|
|
27
|
+
----------
|
|
28
|
+
axes : Axes
|
|
29
|
+
A *Matplotlib* axes, that is used as plotting area.
|
|
30
|
+
tree : Tree
|
|
31
|
+
The tree to be visualized.
|
|
32
|
+
orientation : {'left', 'right', 'bottom', 'top'}, optional
|
|
33
|
+
The position of the root node in the plot
|
|
34
|
+
use_distances : bool, optional
|
|
35
|
+
If true, the `distance` attribute of the :class:`TreeNode`
|
|
36
|
+
objects are used as distance measure.
|
|
37
|
+
Otherwise the topological distance is used.
|
|
38
|
+
labels : list of str, optional
|
|
39
|
+
The leaf node labels.
|
|
40
|
+
The label of a leaf node is the entry at the position of its
|
|
41
|
+
`index` attribute.
|
|
42
|
+
label_size : float, optional
|
|
43
|
+
The font size of the labels.
|
|
44
|
+
color : tuple or str, optional
|
|
45
|
+
A *Matplotlib* compatible color, that is used to draw the lines
|
|
46
|
+
of the dendrogram.
|
|
47
|
+
show_distance : bool, optional
|
|
48
|
+
If true, the distance from the root is shown on the
|
|
49
|
+
corresponding axis.
|
|
50
|
+
**kwargs
|
|
51
|
+
Additional parameters that are used to draw the dendrogram
|
|
52
|
+
lines.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
indices = tree.root.get_indices()
|
|
56
|
+
leaf_dict = {indices[i]: i for i in indices}
|
|
57
|
+
|
|
58
|
+
# Required for setting the plot limits
|
|
59
|
+
max_distance = 0
|
|
60
|
+
|
|
61
|
+
def _plot_node(node, distance):
|
|
62
|
+
"""
|
|
63
|
+
Draw the lines from the given node to its children.
|
|
64
|
+
|
|
65
|
+
Parameters
|
|
66
|
+
----------
|
|
67
|
+
dist : float
|
|
68
|
+
the distance of the node from root
|
|
69
|
+
|
|
70
|
+
Returns
|
|
71
|
+
-------
|
|
72
|
+
pos : float
|
|
73
|
+
the postion of the node on the 'label' axis
|
|
74
|
+
"""
|
|
75
|
+
# The term 'distance'
|
|
76
|
+
# refers to positions along the 'distance' axis
|
|
77
|
+
# the term 'pos'
|
|
78
|
+
# refers to positions along the other axis
|
|
79
|
+
nonlocal max_distance
|
|
80
|
+
if max_distance < distance:
|
|
81
|
+
max_distance = distance
|
|
82
|
+
if node.is_leaf():
|
|
83
|
+
# No children -> no line can be drawn
|
|
84
|
+
return leaf_dict[node.index]
|
|
85
|
+
else:
|
|
86
|
+
children = node.children
|
|
87
|
+
if use_distances:
|
|
88
|
+
child_distances = [distance + c.distance for c in children]
|
|
89
|
+
else:
|
|
90
|
+
# Use topologic distance of children to this node,
|
|
91
|
+
# which is always 1
|
|
92
|
+
child_distances = [distance + 1 for c in children]
|
|
93
|
+
child_pos = [
|
|
94
|
+
_plot_node(child, child_distance)
|
|
95
|
+
for child, child_distance in zip(children, child_distances)
|
|
96
|
+
]
|
|
97
|
+
# Position of this node is in the center of the child nodes
|
|
98
|
+
center_pos = sum(child_pos) / len(child_pos)
|
|
99
|
+
if orientation in ["left", "right"]:
|
|
100
|
+
# Line connecting the childs
|
|
101
|
+
axes.plot(
|
|
102
|
+
[distance, distance],
|
|
103
|
+
[child_pos[0], child_pos[-1]],
|
|
104
|
+
color=color,
|
|
105
|
+
marker="None",
|
|
106
|
+
**kwargs,
|
|
107
|
+
)
|
|
108
|
+
# Lines depicting the distances of the childs
|
|
109
|
+
for child_dist, pos in zip(child_distances, child_pos):
|
|
110
|
+
axes.plot(
|
|
111
|
+
[distance, child_dist],
|
|
112
|
+
[pos, pos],
|
|
113
|
+
color=color,
|
|
114
|
+
marker="None",
|
|
115
|
+
**kwargs,
|
|
116
|
+
)
|
|
117
|
+
elif orientation in ["bottom", "top"]:
|
|
118
|
+
# Line connecting the childs
|
|
119
|
+
axes.plot(
|
|
120
|
+
[child_pos[0], child_pos[-1]],
|
|
121
|
+
[distance, distance],
|
|
122
|
+
color=color,
|
|
123
|
+
marker="None",
|
|
124
|
+
**kwargs,
|
|
125
|
+
)
|
|
126
|
+
# Lines depicting the distances of the childs
|
|
127
|
+
for child_dist, pos in zip(child_distances, child_pos):
|
|
128
|
+
axes.plot(
|
|
129
|
+
[pos, pos],
|
|
130
|
+
[distance, child_dist],
|
|
131
|
+
color=color,
|
|
132
|
+
marker="None",
|
|
133
|
+
**kwargs,
|
|
134
|
+
)
|
|
135
|
+
else:
|
|
136
|
+
raise ValueError(f"'{orientation}' is not a valid orientation")
|
|
137
|
+
return center_pos
|
|
138
|
+
|
|
139
|
+
_plot_node(tree.root, 0)
|
|
140
|
+
|
|
141
|
+
if labels is not None:
|
|
142
|
+
# Sort labels using the order of indices in the tree
|
|
143
|
+
# A list cannot be directly indexed with a list,
|
|
144
|
+
# hence the conversion to a ndarray
|
|
145
|
+
labels = np.array(labels)[indices].tolist()
|
|
146
|
+
else:
|
|
147
|
+
labels = [str(i) for i in indices]
|
|
148
|
+
# The distance axis does not start at 0,
|
|
149
|
+
# since the root line would not properly rendered
|
|
150
|
+
# Hence the limit is set a to small fraction of the entire axis
|
|
151
|
+
# beyond 0
|
|
152
|
+
zero_limit = -0.01 * max_distance
|
|
153
|
+
if orientation == "left":
|
|
154
|
+
axes.set_xlim(zero_limit, max_distance)
|
|
155
|
+
axes.set_ylim(-1, len(indices))
|
|
156
|
+
axes.set_yticks(np.arange(0, len(indices)))
|
|
157
|
+
axes.set_yticklabels(labels)
|
|
158
|
+
axes.yaxis.set_tick_params(
|
|
159
|
+
left=False,
|
|
160
|
+
right=False,
|
|
161
|
+
labelleft=False,
|
|
162
|
+
labelright=True,
|
|
163
|
+
labelsize=label_size,
|
|
164
|
+
)
|
|
165
|
+
axes.xaxis.set_tick_params(
|
|
166
|
+
bottom=True,
|
|
167
|
+
top=False,
|
|
168
|
+
labelbottom=show_distance,
|
|
169
|
+
labeltop=False,
|
|
170
|
+
labelsize=label_size,
|
|
171
|
+
)
|
|
172
|
+
elif orientation == "right":
|
|
173
|
+
axes.set_xlim(max_distance, zero_limit)
|
|
174
|
+
axes.set_ylim(-1, len(indices))
|
|
175
|
+
axes.set_yticks(np.arange(0, len(indices)))
|
|
176
|
+
axes.set_yticklabels(labels)
|
|
177
|
+
axes.yaxis.set_tick_params(
|
|
178
|
+
left=False,
|
|
179
|
+
right=False,
|
|
180
|
+
labelleft=True,
|
|
181
|
+
labelright=False,
|
|
182
|
+
labelsize=label_size,
|
|
183
|
+
)
|
|
184
|
+
axes.xaxis.set_tick_params(
|
|
185
|
+
bottom=True,
|
|
186
|
+
top=False,
|
|
187
|
+
labelbottom=show_distance,
|
|
188
|
+
labeltop=False,
|
|
189
|
+
labelsize=label_size,
|
|
190
|
+
)
|
|
191
|
+
elif orientation == "bottom":
|
|
192
|
+
axes.set_ylim(zero_limit, max_distance)
|
|
193
|
+
axes.set_xlim(-1, len(indices))
|
|
194
|
+
axes.set_xticks(np.arange(0, len(indices)))
|
|
195
|
+
axes.set_xticklabels(labels)
|
|
196
|
+
axes.xaxis.set_tick_params(
|
|
197
|
+
bottom=False,
|
|
198
|
+
top=False,
|
|
199
|
+
labelbottom=False,
|
|
200
|
+
labeltop=True,
|
|
201
|
+
labelsize=label_size,
|
|
202
|
+
)
|
|
203
|
+
axes.yaxis.set_tick_params(
|
|
204
|
+
left=True,
|
|
205
|
+
right=False,
|
|
206
|
+
labelleft=show_distance,
|
|
207
|
+
labelright=False,
|
|
208
|
+
labelsize=label_size,
|
|
209
|
+
)
|
|
210
|
+
elif orientation == "top":
|
|
211
|
+
axes.set_ylim(max_distance, zero_limit)
|
|
212
|
+
axes.set_xlim(-1, len(indices))
|
|
213
|
+
axes.set_xticks(np.arange(0, len(indices)))
|
|
214
|
+
axes.set_xticklabels(labels)
|
|
215
|
+
axes.xaxis.set_tick_params(
|
|
216
|
+
bottom=False,
|
|
217
|
+
top=False,
|
|
218
|
+
labelbottom=True,
|
|
219
|
+
labeltop=False,
|
|
220
|
+
labelsize=label_size,
|
|
221
|
+
)
|
|
222
|
+
axes.yaxis.set_tick_params(
|
|
223
|
+
left=True,
|
|
224
|
+
right=False,
|
|
225
|
+
labelleft=show_distance,
|
|
226
|
+
labelright=False,
|
|
227
|
+
labelsize=label_size,
|
|
228
|
+
)
|
|
229
|
+
else:
|
|
230
|
+
raise ValueError(f"'{orientation}' is not a valid orientation")
|
|
231
|
+
axes.set_frame_on(False)
|