biotite 1.5.0__cp314-cp314-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.
- 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.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/kmeralphabet.pyx +595 -0
- biotite/sequence/align/kmersimilarity.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/kmersimilarity.pyx +233 -0
- biotite/sequence/align/kmertable.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/kmertable.pyx +3411 -0
- biotite/sequence/align/localgapped.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/localgapped.pyx +892 -0
- biotite/sequence/align/localungapped.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/multiple.pyx +619 -0
- biotite/sequence/align/pairwise.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/pairwise.pyx +585 -0
- biotite/sequence/align/permutation.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/permutation.pyx +313 -0
- biotite/sequence/align/primes.txt +821 -0
- biotite/sequence/align/selector.cp314-win_amd64.pyd +0 -0
- biotite/sequence/align/selector.pyx +954 -0
- biotite/sequence/align/statistics.py +264 -0
- biotite/sequence/align/tracetable.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- biotite/sequence/phylo/nj.pyx +221 -0
- biotite/sequence/phylo/tree.cp314-win_amd64.pyd +0 -0
- biotite/sequence/phylo/tree.pyx +1169 -0
- biotite/sequence/phylo/upgma.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +0 -0
- biotite/structure/bonds.pyx +2036 -0
- biotite/structure/box.py +724 -0
- biotite/structure/celllist.cp314-win_amd64.pyd +0 -0
- biotite/structure/celllist.pyx +864 -0
- biotite/structure/chains.py +310 -0
- biotite/structure/charges.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +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.cp314-win_amd64.pyd +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 +4 -0
- biotite-1.5.0.dist-info/licenses/LICENSE.rst +30 -0
|
Binary file
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
# This source code is part of the Biotite package and is distributed
|
|
2
|
+
# under the 3-Clause BSD License. Please see 'LICENSE.rst' for further
|
|
3
|
+
# information.
|
|
4
|
+
|
|
5
|
+
__name__ = "biotite.structure.io.pdb"
|
|
6
|
+
__author__ = "Patrick Kunzmann"
|
|
7
|
+
__all__ = ["encode_hybrid36", "decode_hybrid36", "max_hybrid36_number"]
|
|
8
|
+
|
|
9
|
+
cimport cython
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
cdef int _ASCII_FIRST_NUMBER = 48
|
|
13
|
+
cdef int _ASCII_FIRST_LETTER_UPPER = 65
|
|
14
|
+
cdef int _ASCII_FIRST_LETTER_LOWER = 97
|
|
15
|
+
cdef int _ASCII_LAST_NUMBER = 57
|
|
16
|
+
cdef int _ASCII_LAST_LETTER_UPPER = 90
|
|
17
|
+
cdef int _ASCII_LAST_LETTER_LOWER = 122
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@cython.cpow(True)
|
|
21
|
+
def encode_hybrid36(int number, unsigned int length):
|
|
22
|
+
"""
|
|
23
|
+
Encode an integer value into a hyrbid-36 string representation.
|
|
24
|
+
|
|
25
|
+
Parameters
|
|
26
|
+
----------
|
|
27
|
+
number : int
|
|
28
|
+
A positive integer to be converted into a string.
|
|
29
|
+
length : int
|
|
30
|
+
The desired length of the string representation.
|
|
31
|
+
The resulting hybrid-36 string depends on the length the string
|
|
32
|
+
should have.
|
|
33
|
+
|
|
34
|
+
Returns
|
|
35
|
+
-------
|
|
36
|
+
hybrid36 : str
|
|
37
|
+
The hybrid-36 string representation.
|
|
38
|
+
"""
|
|
39
|
+
if number < 0:
|
|
40
|
+
raise ValueError(
|
|
41
|
+
"Only positive integers can be converted into hybrid-36 notation"
|
|
42
|
+
)
|
|
43
|
+
if length < 1:
|
|
44
|
+
raise ValueError(
|
|
45
|
+
"String length must be at least 1"
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
cdef int num = number
|
|
49
|
+
if num < 10**length:
|
|
50
|
+
# Normal decimal representation
|
|
51
|
+
return str(num)
|
|
52
|
+
# Subtract the amount of values
|
|
53
|
+
# represented by decimal representation
|
|
54
|
+
num -= 10**length
|
|
55
|
+
if num < 26 * 36**(length-1):
|
|
56
|
+
# Upper case hybrid-36 representation
|
|
57
|
+
# Transform value into base-36 value
|
|
58
|
+
# Ex.: number = 10000, length = 4
|
|
59
|
+
# 10**4 have been suubtracted previously -> num = 0
|
|
60
|
+
# But first hybrid-36 string is 'A000'
|
|
61
|
+
# 'A000' in base-36 is 10 * 36**3
|
|
62
|
+
# Hence 10 * 36**3 is added to the num
|
|
63
|
+
# to transform 10000 to 'A000'
|
|
64
|
+
num += 10 * 36**(length-1)
|
|
65
|
+
return _encode_base36(num, length, _ASCII_FIRST_LETTER_UPPER)
|
|
66
|
+
# Subtract the amount of values
|
|
67
|
+
# represented by upper case hybrid-36 representation
|
|
68
|
+
num -= 26 * 36**(length-1)
|
|
69
|
+
if num < 26 * 36**(length-1):
|
|
70
|
+
# Lower case hybrid-36 representation
|
|
71
|
+
num += 10 * 36**(length-1)
|
|
72
|
+
return _encode_base36(num, length, _ASCII_FIRST_LETTER_LOWER)
|
|
73
|
+
raise ValueError(
|
|
74
|
+
f"Value {number} is too large for hybrid-36 encoding "
|
|
75
|
+
f"at a string length of {length}"
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@cython.boundscheck(False)
|
|
80
|
+
@cython.wraparound(False)
|
|
81
|
+
@cython.cpow(True)
|
|
82
|
+
cdef str _encode_base36(int number, unsigned int length,
|
|
83
|
+
unsigned int ascii_letter_offset):
|
|
84
|
+
"""
|
|
85
|
+
Encode an integer value into a base-36 string representation.
|
|
86
|
+
|
|
87
|
+
Parameters
|
|
88
|
+
----------
|
|
89
|
+
number : int
|
|
90
|
+
A positive integer to be converted into a string.
|
|
91
|
+
length : int
|
|
92
|
+
The desired length of the string representation.
|
|
93
|
+
ascii_letter_offset : int
|
|
94
|
+
The ASCII value of the first letter.
|
|
95
|
+
This parameter determines whether upper or lower case letters
|
|
96
|
+
should be used.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
hybrid36 : str
|
|
101
|
+
The base-36 string representation.
|
|
102
|
+
"""
|
|
103
|
+
cdef unsigned char ascii_char
|
|
104
|
+
cdef int remaining
|
|
105
|
+
cdef int last
|
|
106
|
+
cdef bytearray char_array = bytearray(length)
|
|
107
|
+
cdef unsigned char[:] char_array_v = char_array
|
|
108
|
+
# Set start index to end of character array and iterate in reverse
|
|
109
|
+
cdef int i = char_array_v.shape[0] - 1
|
|
110
|
+
while i >= 0:
|
|
111
|
+
# Remove the last base-36 'digit' from the value...
|
|
112
|
+
remaining = number // 36
|
|
113
|
+
# ...and obtain the removed base-36 'digit'
|
|
114
|
+
last = number - remaining * 36
|
|
115
|
+
# Convert the last base-36 'digit' into ASCII value
|
|
116
|
+
# of corresponding base-36 character
|
|
117
|
+
if last < 10:
|
|
118
|
+
# 'Digit' gets numeric character if representable as decimal
|
|
119
|
+
char_array_v[i] = last + _ASCII_FIRST_NUMBER
|
|
120
|
+
else:
|
|
121
|
+
# Else 'digit' is converted into a letter
|
|
122
|
+
char_array_v[i] = last + ascii_letter_offset - 10
|
|
123
|
+
# The new number is the original number without last 'digit'
|
|
124
|
+
number = remaining
|
|
125
|
+
i -= 1
|
|
126
|
+
# Repeat until all digits are removed
|
|
127
|
+
return char_array.decode("ascii")
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@cython.cpow(True)
|
|
131
|
+
def decode_hybrid36(str string):
|
|
132
|
+
"""
|
|
133
|
+
Convert a hybrid-36 string into a integer value.
|
|
134
|
+
|
|
135
|
+
Parameters
|
|
136
|
+
----------
|
|
137
|
+
string : str
|
|
138
|
+
A hybrid-36 string representing a positive integer.
|
|
139
|
+
|
|
140
|
+
Returns
|
|
141
|
+
-------
|
|
142
|
+
number : int
|
|
143
|
+
The integer value represented by the hybrid-36 string.
|
|
144
|
+
"""
|
|
145
|
+
cdef int base_value
|
|
146
|
+
cdef unsigned int length
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
return int(string)
|
|
150
|
+
except ValueError:
|
|
151
|
+
pass
|
|
152
|
+
|
|
153
|
+
# String is not parseable -> expect base36 string
|
|
154
|
+
cdef bytes char_array = string.strip().encode("ascii")
|
|
155
|
+
cdef const unsigned char[:] char_array_v = char_array
|
|
156
|
+
length = char_array_v.shape[0]
|
|
157
|
+
if length == 0:
|
|
158
|
+
raise ValueError("Cannot parse empty string into integer")
|
|
159
|
+
if char_array_v[0] >= _ASCII_FIRST_LETTER_UPPER \
|
|
160
|
+
and char_array_v[0] <= _ASCII_LAST_LETTER_UPPER:
|
|
161
|
+
# String uses upper case letters
|
|
162
|
+
base_value = _decode_base36(
|
|
163
|
+
char_array_v, _ASCII_FIRST_LETTER_UPPER
|
|
164
|
+
)
|
|
165
|
+
# Transform e.g. base-36 'A000' into 10000
|
|
166
|
+
# (For more information see 'encode_hybrid36()')
|
|
167
|
+
return base_value - 10 * 36**(length-1) + 10**length
|
|
168
|
+
elif char_array_v[0] >= _ASCII_FIRST_LETTER_LOWER \
|
|
169
|
+
and char_array_v[0] <= _ASCII_LAST_LETTER_LOWER:
|
|
170
|
+
# String uses lower case letters
|
|
171
|
+
base_value = _decode_base36(
|
|
172
|
+
char_array_v, _ASCII_FIRST_LETTER_LOWER
|
|
173
|
+
)
|
|
174
|
+
# Transform and add the value range represented
|
|
175
|
+
# by upper case hybrid-36:
|
|
176
|
+
#
|
|
177
|
+
# |----- e.g. A000 to 10000 -----| |---- upper hy36 ---|
|
|
178
|
+
# - 10 * 36**(length-1) + 10**length + 26 * 36**(length-1)
|
|
179
|
+
#
|
|
180
|
+
# The following formula results from factoring out
|
|
181
|
+
return base_value + (26-10) * 36**(length-1) + 10**length
|
|
182
|
+
else:
|
|
183
|
+
raise ValueError(
|
|
184
|
+
f"Illegal hybrid-36 string '{string.strip()}'"
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
@cython.boundscheck(False)
|
|
189
|
+
@cython.wraparound(False)
|
|
190
|
+
cdef int _decode_base36(const unsigned char[:] char_array_v,
|
|
191
|
+
unsigned int ascii_letter_offset):
|
|
192
|
+
"""
|
|
193
|
+
Convert a base-36 string into a integer value.
|
|
194
|
+
|
|
195
|
+
Parameters
|
|
196
|
+
----------
|
|
197
|
+
char_array_v : bytes
|
|
198
|
+
A hybrid-36 string representing a positive integer.
|
|
199
|
+
ascii_letter_offset : int
|
|
200
|
+
The ASCII value of the first letter.
|
|
201
|
+
This parameter determines whether teh string uses upper or
|
|
202
|
+
lower case letters.
|
|
203
|
+
|
|
204
|
+
Returns
|
|
205
|
+
-------
|
|
206
|
+
number : int
|
|
207
|
+
The integer value represented by the base-36 string.
|
|
208
|
+
"""
|
|
209
|
+
cdef int i
|
|
210
|
+
cdef int number = 0
|
|
211
|
+
cdef unsigned char ascii_code
|
|
212
|
+
for i in range(char_array_v.shape[0]):
|
|
213
|
+
# Multiply existing value by base
|
|
214
|
+
# -> Shifting number one 'digit' to the left
|
|
215
|
+
number *= 36
|
|
216
|
+
# Get ASCII get of next base-36 'digit'
|
|
217
|
+
ascii_code = char_array_v[i]
|
|
218
|
+
# Get the numerical value of the 'digit' and add to number
|
|
219
|
+
if ascii_code <= _ASCII_LAST_NUMBER:
|
|
220
|
+
number += ascii_code - _ASCII_FIRST_NUMBER
|
|
221
|
+
else:
|
|
222
|
+
number += ascii_code - ascii_letter_offset + 10
|
|
223
|
+
return number
|
|
224
|
+
|
|
225
|
+
def max_hybrid36_number(length):
|
|
226
|
+
"""
|
|
227
|
+
Give the maximum integer value that can be represented by a
|
|
228
|
+
hybrid-36 string of the given length.
|
|
229
|
+
|
|
230
|
+
Parameters
|
|
231
|
+
----------
|
|
232
|
+
length : int
|
|
233
|
+
The length of a hybrid-36 string.
|
|
234
|
+
|
|
235
|
+
Returns
|
|
236
|
+
-------
|
|
237
|
+
max_number : int
|
|
238
|
+
The maximum integer value that can be represented by a hybrid-36
|
|
239
|
+
string of the given `length`.
|
|
240
|
+
"""
|
|
241
|
+
# |-- Decimal -| |--- lo + up base-36 ---|
|
|
242
|
+
return 10**length - 1 + 2 * (26 * 36**(length-1))
|
|
@@ -0,0 +1,15 @@
|
|
|
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 subpackage is used for reading and writing an :class:`AtomArray` or
|
|
7
|
+
:class:`AtomArrayStack` using the PDBQT format used by the *AutoDock*
|
|
8
|
+
software series.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
__name__ = "biotite.structure.io.pdbqt"
|
|
12
|
+
__author__ = "Patrick Kunzmann"
|
|
13
|
+
|
|
14
|
+
from .convert import *
|
|
15
|
+
from .file import *
|
|
@@ -0,0 +1,113 @@
|
|
|
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
|
+
Some convenience functions for consistency with other ``structure.io``
|
|
7
|
+
subpackages.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
__name__ = "biotite.structure.io.pdbqt"
|
|
11
|
+
__author__ = "Patrick Kunzmann"
|
|
12
|
+
__all__ = ["get_structure", "set_structure"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_structure(pdbqt_file, model=None):
|
|
16
|
+
"""
|
|
17
|
+
Get an :class:`AtomArray` or :class:`AtomArrayStack` from the
|
|
18
|
+
PDBQT file.
|
|
19
|
+
|
|
20
|
+
EXPERIMENTAL: Future API changes are probable.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
pdbqt_file : PDBQTFile
|
|
25
|
+
The PDBQT file.
|
|
26
|
+
model : int, optional
|
|
27
|
+
If this parameter is given, the function will return an
|
|
28
|
+
:class:`AtomArray` from the atoms corresponding to the given
|
|
29
|
+
model number (starting at 1).
|
|
30
|
+
Negative values are used to index models starting from the
|
|
31
|
+
last model insted of the first model.
|
|
32
|
+
If this parameter is omitted, an :class:`AtomArrayStack`
|
|
33
|
+
containing all models will be returned, even if the
|
|
34
|
+
structure contains only one model.
|
|
35
|
+
|
|
36
|
+
Returns
|
|
37
|
+
-------
|
|
38
|
+
array : AtomArray or AtomArrayStack
|
|
39
|
+
The return type depends on the `model` parameter.
|
|
40
|
+
"""
|
|
41
|
+
return pdbqt_file.get_structure(model)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def set_structure(
|
|
45
|
+
pdbqt_file,
|
|
46
|
+
atoms,
|
|
47
|
+
charges=None,
|
|
48
|
+
atom_types=None,
|
|
49
|
+
rotatable_bonds=None,
|
|
50
|
+
root=None,
|
|
51
|
+
include_torsdof=True,
|
|
52
|
+
):
|
|
53
|
+
"""
|
|
54
|
+
Write an :class:`AtomArray` into a PDBQT file.
|
|
55
|
+
|
|
56
|
+
EXPERIMENTAL: Future API changes are probable.
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
pdbqt_file : PDBQTFile
|
|
61
|
+
The PDBQT file.
|
|
62
|
+
atoms : AtomArray, shape=(n,)
|
|
63
|
+
The atoms to be written into this file.
|
|
64
|
+
Must have an associated :class:`BondList`.
|
|
65
|
+
charges : ndarray, shape=(n,), dtype=float, optional
|
|
66
|
+
Partial charges for each atom in `atoms`.
|
|
67
|
+
By default, the charges are calculated using the PEOE method
|
|
68
|
+
(:func:`partial_charges()`).
|
|
69
|
+
atom_types : ndarray, shape=(n,), dtype="U1", optional
|
|
70
|
+
Custom *AutoDock* atom types for each atom in `atoms`.
|
|
71
|
+
rotatable_bonds : None or 'rigid' or 'all' or BondList, optional
|
|
72
|
+
This parameter describes, how rotatable bonds are handled,
|
|
73
|
+
with respect to ``ROOT``, ``BRANCH`` and ``ENDBRANCH``
|
|
74
|
+
lines.
|
|
75
|
+
|
|
76
|
+
- ``None`` - The molecule is handled as rigid receptor:
|
|
77
|
+
No ``ROOT``, ``BRANCH`` and ``ENDBRANCH`` lines will
|
|
78
|
+
be written.
|
|
79
|
+
- ``'rigid'`` - The molecule is handled as rigid ligand:
|
|
80
|
+
Only a ``ROOT`` line will be written.
|
|
81
|
+
- ``'all'`` - The molecule is handled as flexible
|
|
82
|
+
ligand:
|
|
83
|
+
A ``ROOT`` line will be written and all rotatable
|
|
84
|
+
bonds are included using ``BRANCH`` and ``ENDBRANCH``
|
|
85
|
+
lines.
|
|
86
|
+
- :class:`BondList` - The molecule is handled as
|
|
87
|
+
flexible ligand:
|
|
88
|
+
A ``ROOT`` line will be written and all bonds in the
|
|
89
|
+
given :class:`BondList` are considered flexible via
|
|
90
|
+
``BRANCH`` and ``ENDBRANCH`` lines.
|
|
91
|
+
|
|
92
|
+
root : int, optional
|
|
93
|
+
Specifies the index of the atom following the ``ROOT`` line.
|
|
94
|
+
Setting the root atom is useful for specifying the *anchor*
|
|
95
|
+
in flexible side chains.
|
|
96
|
+
This parameter has no effect, if `rotatable_bonds` is
|
|
97
|
+
``None``.
|
|
98
|
+
By default, the first atom is also the root atom.
|
|
99
|
+
include_torsdof : bool, optional
|
|
100
|
+
By default, a ``TORSDOF`` (torsional degrees of freedom)
|
|
101
|
+
record is written at the end of the file.
|
|
102
|
+
By setting this parameter to false, the record is omitted.
|
|
103
|
+
|
|
104
|
+
Returns
|
|
105
|
+
-------
|
|
106
|
+
mask : ndarray, shape=(n,), dtype=bool
|
|
107
|
+
A boolean mask, that is ``False`` for each atom of the input
|
|
108
|
+
``atoms``, that was removed due to being a nonpolar
|
|
109
|
+
hydrogen.
|
|
110
|
+
"""
|
|
111
|
+
return pdbqt_file.set_structure(
|
|
112
|
+
atoms, charges, atom_types, rotatable_bonds, root, include_torsdof
|
|
113
|
+
)
|