biotite 1.3.0__cp313-cp313-macosx_10_13_x86_64.whl → 1.4.0__cp313-cp313-macosx_10_13_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of biotite might be problematic. Click here for more details.
- biotite/interface/pymol/object.py +3 -1
- biotite/interface/rdkit/mol.py +5 -5
- biotite/sequence/align/banded.cpython-313-darwin.so +0 -0
- biotite/sequence/align/kmeralphabet.cpython-313-darwin.so +0 -0
- biotite/sequence/align/kmersimilarity.cpython-313-darwin.so +0 -0
- biotite/sequence/align/kmertable.cpython-313-darwin.so +0 -0
- biotite/sequence/align/localgapped.cpython-313-darwin.so +0 -0
- biotite/sequence/align/localungapped.cpython-313-darwin.so +0 -0
- biotite/sequence/align/multiple.cpython-313-darwin.so +0 -0
- biotite/sequence/align/pairwise.cpython-313-darwin.so +0 -0
- biotite/sequence/align/permutation.cpython-313-darwin.so +0 -0
- biotite/sequence/align/selector.cpython-313-darwin.so +0 -0
- biotite/sequence/align/tracetable.cpython-313-darwin.so +0 -0
- biotite/sequence/codec.cpython-313-darwin.so +0 -0
- biotite/sequence/phylo/nj.cpython-313-darwin.so +0 -0
- biotite/sequence/phylo/tree.cpython-313-darwin.so +0 -0
- biotite/sequence/phylo/upgma.cpython-313-darwin.so +0 -0
- biotite/structure/bonds.cpython-313-darwin.so +0 -0
- biotite/structure/bonds.pyx +67 -6
- biotite/structure/box.py +1 -1
- biotite/structure/celllist.cpython-313-darwin.so +0 -0
- biotite/structure/charges.cpython-313-darwin.so +0 -0
- biotite/structure/compare.py +2 -0
- biotite/structure/info/components.bcif +0 -0
- biotite/structure/io/pdb/file.py +15 -5
- biotite/structure/io/pdb/hybrid36.cpython-313-darwin.so +0 -0
- biotite/structure/io/pdbx/bcif.py +6 -3
- biotite/structure/io/pdbx/cif.py +5 -2
- biotite/structure/io/pdbx/compress.py +2 -2
- biotite/structure/io/pdbx/convert.py +25 -20
- biotite/structure/io/pdbx/encoding.cpython-313-darwin.so +0 -0
- biotite/structure/rings.py +117 -1
- biotite/structure/sasa.cpython-313-darwin.so +0 -0
- biotite/version.py +2 -2
- {biotite-1.3.0.dist-info → biotite-1.4.0.dist-info}/METADATA +1 -1
- {biotite-1.3.0.dist-info → biotite-1.4.0.dist-info}/RECORD +38 -38
- {biotite-1.3.0.dist-info → biotite-1.4.0.dist-info}/WHEEL +0 -0
- {biotite-1.3.0.dist-info → biotite-1.4.0.dist-info}/licenses/LICENSE.rst +0 -0
|
@@ -388,7 +388,9 @@ class PyMOLObject:
|
|
|
388
388
|
elif isinstance(selection, str):
|
|
389
389
|
return f"%{self._name} and ({selection})"
|
|
390
390
|
else:
|
|
391
|
-
|
|
391
|
+
if not isinstance(selection, slice):
|
|
392
|
+
selection = np.asarray(selection)
|
|
393
|
+
sel = self.where(selection)
|
|
392
394
|
if sel == "none" and not_none:
|
|
393
395
|
raise ValueError("Selection contains no atoms")
|
|
394
396
|
return sel
|
biotite/interface/rdkit/mol.py
CHANGED
|
@@ -59,7 +59,7 @@ _STANDARD_ANNOTATIONS = frozenset(
|
|
|
59
59
|
"charge",
|
|
60
60
|
"b_factor",
|
|
61
61
|
"occupancy",
|
|
62
|
-
"
|
|
62
|
+
"altloc_id",
|
|
63
63
|
}
|
|
64
64
|
)
|
|
65
65
|
|
|
@@ -202,8 +202,8 @@ def to_mol(
|
|
|
202
202
|
rdkit_atom_res_info.SetOccupancy(atoms.occupancy[i].item())
|
|
203
203
|
if "b_factor" in has_annot:
|
|
204
204
|
rdkit_atom_res_info.SetTempFactor(atoms.b_factor[i].item())
|
|
205
|
-
if "
|
|
206
|
-
rdkit_atom_res_info.SetAltLoc(atoms.
|
|
205
|
+
if "altloc_id" in has_annot:
|
|
206
|
+
rdkit_atom_res_info.SetAltLoc(atoms.altloc_id[i].item())
|
|
207
207
|
rdkit_atom.SetPDBResidueInfo(rdkit_atom_res_info)
|
|
208
208
|
|
|
209
209
|
# add extra annotations
|
|
@@ -361,7 +361,7 @@ def from_mol(mol, conformer_id=None, add_hydrogen=None):
|
|
|
361
361
|
atoms.add_annotation("charge", int)
|
|
362
362
|
atoms.add_annotation("b_factor", float)
|
|
363
363
|
atoms.add_annotation("occupancy", float)
|
|
364
|
-
atoms.add_annotation("
|
|
364
|
+
atoms.add_annotation("altloc_id", str)
|
|
365
365
|
|
|
366
366
|
for rdkit_atom in rdkit_atoms:
|
|
367
367
|
_atom_idx = rdkit_atom.GetIdx()
|
|
@@ -406,7 +406,7 @@ def from_mol(mol, conformer_id=None, add_hydrogen=None):
|
|
|
406
406
|
atoms.res_id[_atom_idx] = residue_info.GetResidueNumber()
|
|
407
407
|
atoms.ins_code[_atom_idx] = residue_info.GetInsertionCode()
|
|
408
408
|
atoms.res_name[_atom_idx] = residue_info.GetResidueName()
|
|
409
|
-
atoms.
|
|
409
|
+
atoms.altloc_id[_atom_idx] = residue_info.GetAltLoc()
|
|
410
410
|
atoms.hetero[_atom_idx] = residue_info.GetIsHeteroAtom()
|
|
411
411
|
atoms.b_factor[_atom_idx] = residue_info.GetTempFactor()
|
|
412
412
|
atoms.occupancy[_atom_idx] = residue_info.GetOccupancy()
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
biotite/structure/bonds.pyx
CHANGED
|
@@ -517,14 +517,41 @@ class BondList(Copyable):
|
|
|
517
517
|
0 1 SINGLE
|
|
518
518
|
1 2 DOUBLE
|
|
519
519
|
"""
|
|
520
|
-
bond_types = self._bonds[:,2]
|
|
521
520
|
for aromatic_type, non_aromatic_type in [
|
|
522
521
|
(BondType.AROMATIC_SINGLE, BondType.SINGLE),
|
|
523
522
|
(BondType.AROMATIC_DOUBLE, BondType.DOUBLE),
|
|
524
523
|
(BondType.AROMATIC_TRIPLE, BondType.TRIPLE),
|
|
525
524
|
(BondType.AROMATIC, BondType.ANY),
|
|
526
525
|
]:
|
|
527
|
-
|
|
526
|
+
mask = self._bonds[:, 2] == aromatic_type
|
|
527
|
+
self._bonds[mask, 2] = non_aromatic_type
|
|
528
|
+
|
|
529
|
+
def remove_kekulization(self):
|
|
530
|
+
"""
|
|
531
|
+
Remove the bond order information from aromatic bonds, i.e. convert all
|
|
532
|
+
aromatic bonds to :attr:`BondType.ANY`.
|
|
533
|
+
|
|
534
|
+
Examples
|
|
535
|
+
--------
|
|
536
|
+
|
|
537
|
+
>>> bond_list = BondList(3)
|
|
538
|
+
>>> bond_list.add_bond(0, 1, BondType.AROMATIC_SINGLE)
|
|
539
|
+
>>> bond_list.add_bond(1, 2, BondType.AROMATIC_DOUBLE)
|
|
540
|
+
>>> bond_list.remove_kekulization()
|
|
541
|
+
>>> for i, j, bond_type in bond_list.as_array():
|
|
542
|
+
... print(i, j, BondType(bond_type).name)
|
|
543
|
+
0 1 AROMATIC
|
|
544
|
+
1 2 AROMATIC
|
|
545
|
+
"""
|
|
546
|
+
kekulized_mask = np.isin(
|
|
547
|
+
self._bonds[:, 2],
|
|
548
|
+
(
|
|
549
|
+
BondType.AROMATIC_SINGLE,
|
|
550
|
+
BondType.AROMATIC_DOUBLE,
|
|
551
|
+
BondType.AROMATIC_TRIPLE,
|
|
552
|
+
),
|
|
553
|
+
)
|
|
554
|
+
self._bonds[kekulized_mask, 2] = BondType.AROMATIC
|
|
528
555
|
|
|
529
556
|
def remove_bond_order(self):
|
|
530
557
|
"""
|
|
@@ -532,6 +559,41 @@ class BondList(Copyable):
|
|
|
532
559
|
"""
|
|
533
560
|
self._bonds[:,2] = BondType.ANY
|
|
534
561
|
|
|
562
|
+
def convert_bond_type(self, original_bond_type, new_bond_type):
|
|
563
|
+
"""
|
|
564
|
+
convert_bond_type(original_bond_type, new_bond_type)
|
|
565
|
+
|
|
566
|
+
Convert all occurences of a given bond type into another bond type.
|
|
567
|
+
|
|
568
|
+
Parameters
|
|
569
|
+
----------
|
|
570
|
+
original_bond_type : BondType or int
|
|
571
|
+
The bond type to convert.
|
|
572
|
+
new_bond_type : BondType or int
|
|
573
|
+
The new bond type.
|
|
574
|
+
|
|
575
|
+
Examples
|
|
576
|
+
--------
|
|
577
|
+
|
|
578
|
+
>>> bond_list = BondList(4)
|
|
579
|
+
>>> bond_list.add_bond(0, 1, BondType.DOUBLE)
|
|
580
|
+
>>> bond_list.add_bond(1, 2, BondType.COORDINATION)
|
|
581
|
+
>>> bond_list.add_bond(2, 3, BondType.COORDINATION)
|
|
582
|
+
>>> for i, j, bond_type in bond_list.as_array():
|
|
583
|
+
... print(i, j, BondType(bond_type).name)
|
|
584
|
+
0 1 DOUBLE
|
|
585
|
+
1 2 COORDINATION
|
|
586
|
+
2 3 COORDINATION
|
|
587
|
+
>>> bond_list.convert_bond_type(BondType.COORDINATION, BondType.SINGLE)
|
|
588
|
+
>>> for i, j, bond_type in bond_list.as_array():
|
|
589
|
+
... print(i, j, BondType(bond_type).name)
|
|
590
|
+
0 1 DOUBLE
|
|
591
|
+
1 2 SINGLE
|
|
592
|
+
2 3 SINGLE
|
|
593
|
+
"""
|
|
594
|
+
mask = self._bonds[:, 2] == original_bond_type
|
|
595
|
+
self._bonds[mask, 2] = new_bond_type
|
|
596
|
+
|
|
535
597
|
def get_atom_count(self):
|
|
536
598
|
"""
|
|
537
599
|
get_atom_count()
|
|
@@ -1437,9 +1499,8 @@ _DEFAULT_DISTANCE_RANGE = {
|
|
|
1437
1499
|
def connect_via_distances(atoms, dict distance_range=None, bint inter_residue=True,
|
|
1438
1500
|
default_bond_type=BondType.ANY, bint periodic=False):
|
|
1439
1501
|
"""
|
|
1440
|
-
connect_via_distances(atoms, distance_range=None,
|
|
1441
|
-
|
|
1442
|
-
periodic=False)
|
|
1502
|
+
connect_via_distances(atoms, distance_range=None, inter_residue=True,
|
|
1503
|
+
default_bond_type=BondType.ANY, periodic=False)
|
|
1443
1504
|
|
|
1444
1505
|
Create a :class:`BondList` for a given atom array, based on
|
|
1445
1506
|
pairwise atom distances.
|
|
@@ -1589,7 +1650,7 @@ def connect_via_distances(atoms, dict distance_range=None, bint inter_residue=Tr
|
|
|
1589
1650
|
def connect_via_residue_names(atoms, bint inter_residue=True,
|
|
1590
1651
|
dict custom_bond_dict=None):
|
|
1591
1652
|
"""
|
|
1592
|
-
connect_via_residue_names(atoms,
|
|
1653
|
+
connect_via_residue_names(atoms, inter_residue=True, custom_bond_dict=None)
|
|
1593
1654
|
|
|
1594
1655
|
Create a :class:`BondList` for a given atom array (stack), based on
|
|
1595
1656
|
the deposited bonds for each residue in the RCSB ``components.cif``
|
biotite/structure/box.py
CHANGED
|
@@ -361,7 +361,7 @@ def repeat_box(atoms, amount=1):
|
|
|
361
361
|
if atoms.box is None:
|
|
362
362
|
raise BadStructureError("Structure has no box")
|
|
363
363
|
|
|
364
|
-
repeat_coord, indices = repeat_box_coord(atoms.coord, atoms.box)
|
|
364
|
+
repeat_coord, indices = repeat_box_coord(atoms.coord, atoms.box, amount)
|
|
365
365
|
# Unroll repeated coordinates for input to 'repeat()'
|
|
366
366
|
if repeat_coord.ndim == 2:
|
|
367
367
|
repeat_coord = repeat_coord.reshape(-1, atoms.array_length(), 3)
|
|
Binary file
|
|
Binary file
|
biotite/structure/compare.py
CHANGED
|
@@ -449,6 +449,8 @@ def lddt(
|
|
|
449
449
|
# Aggregate the fractions over the desired level
|
|
450
450
|
if isinstance(aggregation, str) and aggregation == "all":
|
|
451
451
|
# Average over all contacts
|
|
452
|
+
if len(fraction_preserved_bins) == 0:
|
|
453
|
+
return np.float32(np.nan)
|
|
452
454
|
return np.mean(fraction_preserved_bins, axis=-1)
|
|
453
455
|
else:
|
|
454
456
|
# A string is also a 'Sequence'
|
|
Binary file
|
biotite/structure/io/pdb/file.py
CHANGED
|
@@ -936,7 +936,11 @@ class PDBFile(TextFile):
|
|
|
936
936
|
if transform_start is None:
|
|
937
937
|
raise InvalidFileError("No 'BIOMT' records found for chosen assembly")
|
|
938
938
|
rotations, translations = _parse_transformations(
|
|
939
|
-
|
|
939
|
+
[
|
|
940
|
+
line
|
|
941
|
+
for line in assembly_lines[transform_start:stop]
|
|
942
|
+
if len(line.strip()) > 0
|
|
943
|
+
]
|
|
940
944
|
)
|
|
941
945
|
# Filter affected chains
|
|
942
946
|
sub_structure = structure[
|
|
@@ -1193,7 +1197,7 @@ class PDBFile(TextFile):
|
|
|
1193
1197
|
conect_lines = [line for line in self.lines if line.startswith("CONECT")]
|
|
1194
1198
|
|
|
1195
1199
|
# Mapping from atom ids to indices in an AtomArray
|
|
1196
|
-
atom_id_to_index = np.
|
|
1200
|
+
atom_id_to_index = np.full(atom_ids[-1] + 1, -1, dtype=int)
|
|
1197
1201
|
try:
|
|
1198
1202
|
for i, id in enumerate(atom_ids):
|
|
1199
1203
|
atom_id_to_index[id] = i
|
|
@@ -1202,15 +1206,21 @@ class PDBFile(TextFile):
|
|
|
1202
1206
|
|
|
1203
1207
|
bonds = []
|
|
1204
1208
|
for line in conect_lines:
|
|
1205
|
-
|
|
1209
|
+
center_index = atom_id_to_index[decode_hybrid36(line[6:11])]
|
|
1210
|
+
if center_index == -1:
|
|
1211
|
+
# Atom ID is not in the AtomArray (probably removed altloc)
|
|
1212
|
+
continue
|
|
1206
1213
|
for i in range(11, 31, 5):
|
|
1207
1214
|
id_string = line[i : i + 5]
|
|
1208
1215
|
try:
|
|
1209
|
-
|
|
1216
|
+
contact_index = atom_id_to_index[decode_hybrid36(id_string)]
|
|
1217
|
+
if contact_index == -1:
|
|
1218
|
+
# Atom ID is not in the AtomArray (probably removed altloc)
|
|
1219
|
+
continue
|
|
1210
1220
|
except ValueError:
|
|
1211
1221
|
# String is empty -> no further IDs
|
|
1212
1222
|
break
|
|
1213
|
-
bonds.append((
|
|
1223
|
+
bonds.append((center_index, contact_index))
|
|
1214
1224
|
|
|
1215
1225
|
# The length of the 'atom_ids' array
|
|
1216
1226
|
# is equal to the length of the AtomArray
|
|
Binary file
|
|
@@ -511,7 +511,7 @@ class BinaryCIFBlock(_HierarchicalContainer):
|
|
|
511
511
|
|
|
512
512
|
def __delitem__(self, key):
|
|
513
513
|
try:
|
|
514
|
-
return super().
|
|
514
|
+
return super().__delitem__("_" + key)
|
|
515
515
|
except KeyError:
|
|
516
516
|
raise KeyError(key)
|
|
517
517
|
|
|
@@ -581,9 +581,12 @@ class BinaryCIFFile(File, _HierarchicalContainer):
|
|
|
581
581
|
|
|
582
582
|
@property
|
|
583
583
|
def block(self):
|
|
584
|
-
if len(self)
|
|
584
|
+
if len(self) == 0:
|
|
585
|
+
raise ValueError("There are no blocks in the file")
|
|
586
|
+
elif len(self) > 1:
|
|
585
587
|
raise ValueError("There are multiple blocks in the file")
|
|
586
|
-
|
|
588
|
+
else:
|
|
589
|
+
return self[next(iter(self))]
|
|
587
590
|
|
|
588
591
|
@staticmethod
|
|
589
592
|
def subcomponent_class():
|
biotite/structure/io/pdbx/cif.py
CHANGED
|
@@ -799,9 +799,12 @@ class CIFFile(_Component, File, MutableMapping):
|
|
|
799
799
|
|
|
800
800
|
@property
|
|
801
801
|
def block(self):
|
|
802
|
-
if len(self)
|
|
802
|
+
if len(self) == 0:
|
|
803
|
+
raise ValueError("There are no blocks in the file")
|
|
804
|
+
elif len(self) > 1:
|
|
803
805
|
raise ValueError("There are multiple blocks in the file")
|
|
804
|
-
|
|
806
|
+
else:
|
|
807
|
+
return self[next(iter(self))]
|
|
805
808
|
|
|
806
809
|
@staticmethod
|
|
807
810
|
def subcomponent_class():
|
|
@@ -56,14 +56,14 @@ def compress(data, float_tolerance=None, rtol=1e-6, atol=1e-4):
|
|
|
56
56
|
>>> pdbx_file.write(uncompressed_file)
|
|
57
57
|
>>> _ = uncompressed_file.seek(0)
|
|
58
58
|
>>> print(f"{len(uncompressed_file.read()) // 1000} KB")
|
|
59
|
-
|
|
59
|
+
937 KB
|
|
60
60
|
>>> # Write compressed file
|
|
61
61
|
>>> pdbx_file = compress(pdbx_file)
|
|
62
62
|
>>> compressed_file = BytesIO()
|
|
63
63
|
>>> pdbx_file.write(compressed_file)
|
|
64
64
|
>>> _ = compressed_file.seek(0)
|
|
65
65
|
>>> print(f"{len(compressed_file.read()) // 1000} KB")
|
|
66
|
-
|
|
66
|
+
114 KB
|
|
67
67
|
"""
|
|
68
68
|
if float_tolerance is not None:
|
|
69
69
|
warnings.warn(
|
|
@@ -775,7 +775,10 @@ def _filter_altloc(array, atom_site, altloc):
|
|
|
775
775
|
if altloc == "all":
|
|
776
776
|
array.set_annotation("altloc_id", altloc_ids.as_array(str))
|
|
777
777
|
return array, atom_site
|
|
778
|
-
elif altloc_ids is None or (
|
|
778
|
+
elif altloc_ids is None or (
|
|
779
|
+
altloc_ids.mask is not None
|
|
780
|
+
and (altloc_ids.mask.array != MaskValue.PRESENT).all()
|
|
781
|
+
):
|
|
779
782
|
# No altlocs in atom_site category
|
|
780
783
|
return array, atom_site
|
|
781
784
|
elif altloc == "occupancy" and occupancy is not None:
|
|
@@ -873,11 +876,7 @@ def set_structure(
|
|
|
873
876
|
this parameter is ignored.
|
|
874
877
|
If the file is empty, a new data block will be created.
|
|
875
878
|
include_bonds : bool, optional
|
|
876
|
-
|
|
877
|
-
intra-residue bonds will be written into the ``chem_comp_bond``
|
|
878
|
-
category.
|
|
879
|
-
Inter-residue bonds will be written into the ``struct_conn``
|
|
880
|
-
independent of this parameter.
|
|
879
|
+
DEPRECATED: Has no effect anymore.
|
|
881
880
|
extra_fields : list of str, optional
|
|
882
881
|
List of additional fields from the ``atom_site`` category
|
|
883
882
|
that should be written into the file.
|
|
@@ -898,6 +897,13 @@ def set_structure(
|
|
|
898
897
|
>>> set_structure(file, atom_array)
|
|
899
898
|
>>> file.write(os.path.join(path_to_directory, "structure.cif"))
|
|
900
899
|
"""
|
|
900
|
+
if include_bonds:
|
|
901
|
+
warnings.warn(
|
|
902
|
+
"`include_bonds` parameter is deprecated, "
|
|
903
|
+
"intra-residue are always written, if available",
|
|
904
|
+
DeprecationWarning,
|
|
905
|
+
)
|
|
906
|
+
|
|
901
907
|
_check_non_empty(array)
|
|
902
908
|
|
|
903
909
|
block = _get_or_create_block(pdbx_file, data_block)
|
|
@@ -975,10 +981,9 @@ def set_structure(
|
|
|
975
981
|
struct_conn = _set_inter_residue_bonds(array, atom_site)
|
|
976
982
|
if struct_conn is not None:
|
|
977
983
|
block["struct_conn"] = struct_conn
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
block["chem_comp_bond"] = chem_comp_bond
|
|
984
|
+
chem_comp_bond = _set_intra_residue_bonds(array, atom_site)
|
|
985
|
+
if chem_comp_bond is not None:
|
|
986
|
+
block["chem_comp_bond"] = chem_comp_bond
|
|
982
987
|
|
|
983
988
|
# In case of a single model handle each coordinate
|
|
984
989
|
# simply like a flattened array
|
|
@@ -1652,11 +1657,11 @@ def get_assembly(
|
|
|
1652
1657
|
If set to true, a :class:`BondList` will be created for the
|
|
1653
1658
|
resulting :class:`AtomArray` containing the bond information
|
|
1654
1659
|
from the file.
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
+
Inter-residue bonds, will be read from the ``struct_conn``
|
|
1661
|
+
category.
|
|
1662
|
+
Intra-residue bonds will be read from the ``chem_comp_bond``, if
|
|
1663
|
+
available, otherwise they will be derived from the Chemical
|
|
1664
|
+
Component Dictionary.
|
|
1660
1665
|
|
|
1661
1666
|
Returns
|
|
1662
1667
|
-------
|
|
@@ -1926,11 +1931,11 @@ def get_unit_cell(
|
|
|
1926
1931
|
If set to true, a :class:`BondList` will be created for the
|
|
1927
1932
|
resulting :class:`AtomArray` containing the bond information
|
|
1928
1933
|
from the file.
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
+
Inter-residue bonds, will be read from the ``struct_conn``
|
|
1935
|
+
category.
|
|
1936
|
+
Intra-residue bonds will be read from the ``chem_comp_bond``, if
|
|
1937
|
+
available, otherwise they will be derived from the Chemical
|
|
1938
|
+
Component Dictionary.
|
|
1934
1939
|
|
|
1935
1940
|
Returns
|
|
1936
1941
|
-------
|
|
Binary file
|
biotite/structure/rings.py
CHANGED
|
@@ -8,7 +8,12 @@ This module provides functions related to aromatic rings.
|
|
|
8
8
|
|
|
9
9
|
__name__ = "biotite.structure"
|
|
10
10
|
__author__ = "Patrick Kunzmann"
|
|
11
|
-
__all__ = [
|
|
11
|
+
__all__ = [
|
|
12
|
+
"find_aromatic_rings",
|
|
13
|
+
"find_stacking_interactions",
|
|
14
|
+
"find_pi_cation_interactions",
|
|
15
|
+
"PiStacking",
|
|
16
|
+
]
|
|
12
17
|
|
|
13
18
|
|
|
14
19
|
from enum import IntEnum
|
|
@@ -268,6 +273,117 @@ def find_stacking_interactions(
|
|
|
268
273
|
]
|
|
269
274
|
|
|
270
275
|
|
|
276
|
+
def find_pi_cation_interactions(
|
|
277
|
+
atoms,
|
|
278
|
+
distance_cutoff=5.0,
|
|
279
|
+
angle_tol=np.deg2rad(30.0),
|
|
280
|
+
):
|
|
281
|
+
"""
|
|
282
|
+
Find pi-cation interactions between aromatic rings and cations.
|
|
283
|
+
|
|
284
|
+
Parameters
|
|
285
|
+
----------
|
|
286
|
+
atoms : AtomArray
|
|
287
|
+
The atoms to be searched for pi-cation interactions.
|
|
288
|
+
Requires an associated :class:`BondList` and ``charge`` annotation.
|
|
289
|
+
distance_cutoff : float, optional
|
|
290
|
+
The cutoff distance between ring centroid and cation.
|
|
291
|
+
angle_tol : float, optional
|
|
292
|
+
The tolerance for the angle between the ring plane normal
|
|
293
|
+
and the centroid-cation vector. Perfect pi-cation interaction
|
|
294
|
+
has 0° angle (perpendicular to ring plane).
|
|
295
|
+
Given in radians.
|
|
296
|
+
|
|
297
|
+
Returns
|
|
298
|
+
-------
|
|
299
|
+
interactions : list of tuple(ndarray, int)
|
|
300
|
+
The pi-cation interactions between aromatic rings and cations.
|
|
301
|
+
Each element in the list represents one pi-cation interaction.
|
|
302
|
+
The first element of each tuple represents atom indices of the
|
|
303
|
+
aromatic ring, the second element is the atom index of the cation.
|
|
304
|
+
|
|
305
|
+
See Also
|
|
306
|
+
--------
|
|
307
|
+
find_aromatic_rings : Used for finding the aromatic rings in this function.
|
|
308
|
+
find_stacking_interactions : Find pi-stacking interactions between rings.
|
|
309
|
+
|
|
310
|
+
Notes
|
|
311
|
+
-----
|
|
312
|
+
The conditions for pi-cation interactions are:
|
|
313
|
+
- The distance between ring centroid and cation must be within
|
|
314
|
+
`distance_cutoff`. :footcite:`Wojcikowski2015` uses 5.0 Å,
|
|
315
|
+
whereas :footcite:`Bouysset2021` uses 4.5 Å.
|
|
316
|
+
- The angle between the ring plane normal and the centroid-cation
|
|
317
|
+
vector must be within `angle_tol` of 0° (perpendicular to plane).
|
|
318
|
+
|
|
319
|
+
Examples
|
|
320
|
+
--------
|
|
321
|
+
>>> from os.path import join
|
|
322
|
+
>>> structure = load_structure(join(path_to_structures, "3wip.cif"), include_bonds=True, extra_fields=["charge"])
|
|
323
|
+
>>> interactions = find_pi_cation_interactions(structure)
|
|
324
|
+
>>> for ring_indices, cation_index in interactions:
|
|
325
|
+
... print(
|
|
326
|
+
... structure.res_name[ring_indices[0]],
|
|
327
|
+
... structure.res_name[cation_index]
|
|
328
|
+
... )
|
|
329
|
+
TYR ACH
|
|
330
|
+
TRP ACH
|
|
331
|
+
"""
|
|
332
|
+
if atoms.bonds is None:
|
|
333
|
+
raise BadStructureError("Structure must have an associated BondList")
|
|
334
|
+
|
|
335
|
+
if atoms.charge is None:
|
|
336
|
+
raise BadStructureError(
|
|
337
|
+
"Structure must have a 'charge' annotation to identify cations."
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
rings = find_aromatic_rings(atoms)
|
|
341
|
+
if len(rings) == 0:
|
|
342
|
+
return []
|
|
343
|
+
|
|
344
|
+
cation_mask = atoms.charge > 0
|
|
345
|
+
cation_indices = np.where(cation_mask)[0]
|
|
346
|
+
|
|
347
|
+
if len(cation_indices) == 0:
|
|
348
|
+
return []
|
|
349
|
+
|
|
350
|
+
# Calculate ring centroids and normals
|
|
351
|
+
ring_centroids = np.array(
|
|
352
|
+
[atoms.coord[atom_indices].mean(axis=0) for atom_indices in rings]
|
|
353
|
+
)
|
|
354
|
+
ring_normals = np.array(
|
|
355
|
+
[_get_ring_normal(atoms.coord[atom_indices]) for atom_indices in rings]
|
|
356
|
+
)
|
|
357
|
+
|
|
358
|
+
cation_coords = atoms.coord[cation_indices]
|
|
359
|
+
|
|
360
|
+
# Create an index array that contains the Cartesian product of all rings and cations
|
|
361
|
+
indices = np.stack(
|
|
362
|
+
[
|
|
363
|
+
np.repeat(np.arange(len(rings)), len(cation_indices)),
|
|
364
|
+
np.tile(np.arange(len(cation_indices)), len(rings)),
|
|
365
|
+
],
|
|
366
|
+
axis=-1,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
## Condition 1: Ring centroids and cations are close enough to each other
|
|
370
|
+
diff = displacement(ring_centroids[indices[:, 0]], cation_coords[indices[:, 1]])
|
|
371
|
+
# Use squared distance to avoid time consuming sqrt computation
|
|
372
|
+
sq_distance = vector_dot(diff, diff)
|
|
373
|
+
is_interacting = sq_distance < distance_cutoff**2
|
|
374
|
+
indices = indices[is_interacting]
|
|
375
|
+
|
|
376
|
+
## Condition 2: Angle between ring normal and centroid-cation vector
|
|
377
|
+
diff = displacement(ring_centroids[indices[:, 0]], cation_coords[indices[:, 1]])
|
|
378
|
+
norm_vector(diff)
|
|
379
|
+
angles = _minimum_angle(ring_normals[indices[:, 0]], diff)
|
|
380
|
+
is_interacting = _is_within_tolerance(angles, 0, angle_tol)
|
|
381
|
+
indices = indices[is_interacting]
|
|
382
|
+
|
|
383
|
+
# Only return pairs where all conditions were fulfilled
|
|
384
|
+
return [(rings[ring_i], cation_indices[cation_j]) for ring_i, cation_j in indices]
|
|
385
|
+
|
|
386
|
+
|
|
271
387
|
def _get_ring_normal(ring_coord):
|
|
272
388
|
"""
|
|
273
389
|
Get the normal vector perpendicular to the ring plane.
|
|
Binary file
|
biotite/version.py
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
biotite/
|
|
1
|
+
biotite-1.4.0.dist-info/RECORD,,
|
|
2
|
+
biotite-1.4.0.dist-info/WHEEL,sha256=BVsDEH7tf1mza0RCeG3-Fhfp0YBvB6GMTrxwTXvM0HI,135
|
|
3
|
+
biotite-1.4.0.dist-info/METADATA,sha256=NZDvKedU4WJkuZIOpWAI3GXJIdbfP5jDh_CbaLSLfgU,5525
|
|
4
|
+
biotite-1.4.0.dist-info/licenses/LICENSE.rst,sha256=ZuNQuB65Dxf0rDB_5LxvA4SVQJBWxRZyvbjbvE-APWY,1534
|
|
5
|
+
biotite/version.py,sha256=rcWNYDlh913lujUvTfOu9iOIPdrTXg64R9wl7ENLjFU,511
|
|
2
6
|
biotite/copyable.py,sha256=C7ycTQxqanxT0SmXhzy5OLp7NpZdNWHyokozdoVDGNA,1897
|
|
3
7
|
biotite/__init__.py,sha256=rL8ZyaCUjOrECEvRxyHj8MOMp4FHMJ8n6KKgrYf5OAQ,545
|
|
4
8
|
biotite/visualize.py,sha256=GSxIL8PLXMDlaULG-ckSghRifQnBnkseZ-OWsnuno4M,13955
|
|
@@ -31,13 +35,13 @@ biotite/interface/__init__.py,sha256=CEbr_8h6pt3za2ybSeePcNKMsA2vkNUbzYhzP62g2Lg
|
|
|
31
35
|
biotite/interface/warning.py,sha256=rU1F-b1MeIj1OWaK6wMeuM_YE-WKNGqo2TehjTr10KM,577
|
|
32
36
|
biotite/interface/pymol/startup.py,sha256=8W0wIx13MGqGNvwTTT7ogmgypXCO48PI5w-DVPdS9jw,4619
|
|
33
37
|
biotite/interface/pymol/shapes.py,sha256=Q34C5H5PkH4XbnyymwbJYp9iFD2Idj2a_qzDRA8tohQ,6066
|
|
34
|
-
biotite/interface/pymol/object.py,sha256=
|
|
38
|
+
biotite/interface/pymol/object.py,sha256=c0BxeD2rxyPNonXBTA1iLINSRA4_Ljn1_Tzpf4_rLYg,44280
|
|
35
39
|
biotite/interface/pymol/convert.py,sha256=ldLXSiFdwhEkoZkTtLFOMvymIh9oLniChve54SbHJLA,6044
|
|
36
40
|
biotite/interface/pymol/__init__.py,sha256=bOX95ek4eKSgZFYynrfcuZFRgjADYvhbrVWCR6ok7yc,6648
|
|
37
41
|
biotite/interface/pymol/display.py,sha256=KJfCM9-hzvFdC5KFxvG5-oEXd0MIaf3Ocr3dMQVoipY,8458
|
|
38
42
|
biotite/interface/pymol/cgo.py,sha256=wlG1GkbHAGYVdzaOUPQ5KzI-29lrDkutt0NRw7PIq-8,9859
|
|
39
43
|
biotite/interface/rdkit/__init__.py,sha256=K2gVw_wrbIU0v-I3RgRvrihdtcpFfL9_t-IlObLuCMk,532
|
|
40
|
-
biotite/interface/rdkit/mol.py,sha256=
|
|
44
|
+
biotite/interface/rdkit/mol.py,sha256=iMPR8U5girjnCa2-xLHQG1duw-tR3bUruVQRa1O27fc,19629
|
|
41
45
|
biotite/interface/openmm/system.py,sha256=V-SDc1YDa6nKHcREXz1cGAN7jZJ2X1cPf0gazz_Gv6s,7018
|
|
42
46
|
biotite/interface/openmm/__init__.py,sha256=ZcLsA9PPsrFDtY7rTMspizpCCQ_Fnm7vqwY-E5xTw6k,587
|
|
43
47
|
biotite/interface/openmm/state.py,sha256=jmdLw1xc7TQbgeOnZGgSgdmD_rR9VEnMqhX0Wnw_1Jo,2723
|
|
@@ -76,7 +80,7 @@ biotite/sequence/sequence.py,sha256=eIZ7Ugz9IwXlWXs_HC2NGyAtDDcP-Vf1z82jynT_PPE,
|
|
|
76
80
|
biotite/sequence/profile.py,sha256=f-KYMVtSB83O5J0Jy87Nzetd4axZDVsUcMSES2J7MJY,19249
|
|
77
81
|
biotite/sequence/codon_tables.txt,sha256=zZLT642H4qEkwUk5g-hWh-6ZWP_bgaz70fWcxwJDWJ0,10209
|
|
78
82
|
biotite/sequence/__init__.py,sha256=fSWhobaPGRMJI6-8UYFpjguxVtP4O4cAHmiRxNAGzYI,3423
|
|
79
|
-
biotite/sequence/codec.cpython-313-darwin.so,sha256=
|
|
83
|
+
biotite/sequence/codec.cpython-313-darwin.so,sha256=ia4zBupKnlf7FJxDzl7gAadBS91SyxcELn4mCYOTFK0,275864
|
|
80
84
|
biotite/sequence/seqtypes.py,sha256=I5OaC9IOJoA9G610Tod67cgCWDQqTAgYpK1FHF8Ofok,23246
|
|
81
85
|
biotite/sequence/codon.py,sha256=Scua9XHD-TnWfCaKHRegKQGSP3XK3wW3zLgxen45ux0,16346
|
|
82
86
|
biotite/sequence/search.py,sha256=G__T-GHMJODWmgh87z5wxs_g9-t1DtvEOd-USp-Qizg,3088
|
|
@@ -97,36 +101,36 @@ biotite/sequence/io/genbank/file.py,sha256=5XvuJCd_FuI2zh03_bLbLSAuORNw4tXr7p9sG
|
|
|
97
101
|
biotite/sequence/io/fastq/convert.py,sha256=x4rWn7WHdKxW1u7mwDgM8Z3qaML4lAO7r-JiMTQbvaI,3632
|
|
98
102
|
biotite/sequence/io/fastq/__init__.py,sha256=lhw9bxWS0eKPXzF1lg8fvrNmgAmJPLBzIB6jEP5GOVI,588
|
|
99
103
|
biotite/sequence/io/fastq/file.py,sha256=Q5jrBN21Fi0hp6rU5cc68kQPYc1jWdZfMwhx0Ze6oGw,17817
|
|
100
|
-
biotite/sequence/align/multiple.cpython-313-darwin.so,sha256=
|
|
101
|
-
biotite/sequence/align/permutation.cpython-313-darwin.so,sha256=
|
|
104
|
+
biotite/sequence/align/multiple.cpython-313-darwin.so,sha256=YicVQR5UgrWXKKNvSGigmNgLqAaZ7lKBNCL2FVEuqwI,504544
|
|
105
|
+
biotite/sequence/align/permutation.cpython-313-darwin.so,sha256=FB8tOFhxKrgS1Qou7BNN9QcjOEN8gBoIvZBJg9D9p4Y,209592
|
|
102
106
|
biotite/sequence/align/matrix.py,sha256=A1PUA43ltUnvYqB_RO6WPbvAtCzZI3zSfeKHP3aVSNQ,22360
|
|
103
107
|
biotite/sequence/align/permutation.pyx,sha256=xbbw5DJ7c5SXnuSUl2hJUMxzvinKP1Khc7CSdH5cEE0,10028
|
|
104
108
|
biotite/sequence/align/selector.pyx,sha256=BstkOkz-nB2dPtkZIZbU5QlCT-h3QHxdsGg1pGUh-Qo,33471
|
|
105
109
|
biotite/sequence/align/primes.txt,sha256=7pKfLGN1vjYl_KJ3y5uuo8np_5DDUH52UAkhb3fJfWE,10140
|
|
106
110
|
biotite/sequence/align/kmeralphabet.pyx,sha256=t4MKs3uIXGn_2AB8NRKQxY73RoBLDa-IlKVnSdANkCU,18636
|
|
107
111
|
biotite/sequence/align/alignment.py,sha256=vf6Ldh0nevFkQ3dHJJRZw6_ZsqoWHHv-6M1Hy_DQgEs,22380
|
|
108
|
-
biotite/sequence/align/pairwise.cpython-313-darwin.so,sha256=
|
|
112
|
+
biotite/sequence/align/pairwise.cpython-313-darwin.so,sha256=TevP7Ui47WbrIMWvjHLz3ixqRMBJFPOstYbNyt2o9bI,606048
|
|
109
113
|
biotite/sequence/align/tracetable.pyx,sha256=1gsT3OV7VkE6i_UpNiYOLVvD2_tfJgbNZb1yv9F4XR8,15455
|
|
110
114
|
biotite/sequence/align/pairwise.pyx,sha256=Le9RWShVTDSUMpubq9-nxXSFNZp8CgYjhDsLUBE6yoY,22598
|
|
111
|
-
biotite/sequence/align/localgapped.cpython-313-darwin.so,sha256=
|
|
112
|
-
biotite/sequence/align/banded.cpython-313-darwin.so,sha256=
|
|
115
|
+
biotite/sequence/align/localgapped.cpython-313-darwin.so,sha256=6OaN8nyQVHl5Ztp2PK9gOCiC_x2FDYokV5--mR6n2hc,1032800
|
|
116
|
+
biotite/sequence/align/banded.cpython-313-darwin.so,sha256=2VBtxSOwg-xKxedfRX02lt7AS7kV0siEbbQdr_EN0Rk,568000
|
|
113
117
|
biotite/sequence/align/__init__.py,sha256=NyYyB9PmYWCBQB_MaI-L54vYR64JraUvP9uobGJN54w,4711
|
|
114
|
-
biotite/sequence/align/localungapped.cpython-313-darwin.so,sha256=
|
|
118
|
+
biotite/sequence/align/localungapped.cpython-313-darwin.so,sha256=Yept-U4buIy1ve-iqjkEiqiVo-5Fc2iZ_MDknht_3Ks,294800
|
|
115
119
|
biotite/sequence/align/localungapped.pyx,sha256=h9wgrY85_t0_wOGDW56uJ9N4bo7GciYpeJZpNIBlp4g,9660
|
|
116
120
|
biotite/sequence/align/buckets.py,sha256=k8H5RBS5Y7DrMoIOd5Ifrxp-nYWosJuqOYgLd1y-DWs,2464
|
|
117
|
-
biotite/sequence/align/selector.cpython-313-darwin.so,sha256=
|
|
121
|
+
biotite/sequence/align/selector.cpython-313-darwin.so,sha256=h2FUJ2TniT6jQmvkMi_ktwIzeZtrEKpGHbu9uqLy6zs,293080
|
|
118
122
|
biotite/sequence/align/localgapped.pyx,sha256=1uoooliEMravtH1fQJSth0a6FEM4La_v32wGP2C0RIQ,33106
|
|
119
123
|
biotite/sequence/align/cigar.py,sha256=ZhxnWSURuKMwOshbeNIK8mtt6r-xcFWXLzoLtluEo88,14335
|
|
120
|
-
biotite/sequence/align/kmeralphabet.cpython-313-darwin.so,sha256=
|
|
124
|
+
biotite/sequence/align/kmeralphabet.cpython-313-darwin.so,sha256=p6IaXZsSI2IqnJkxJcCT1pr9MpyoxlHIqVHGZfk_Fqw,393144
|
|
121
125
|
biotite/sequence/align/tracetable.pxd,sha256=_VP1ayP6FZL1Tzn1pCCbt6xPZDzFtE9bH0Gvop2lxyQ,2825
|
|
122
|
-
biotite/sequence/align/kmertable.cpython-313-darwin.so,sha256=
|
|
126
|
+
biotite/sequence/align/kmertable.cpython-313-darwin.so,sha256=eZiMWfvzCHlTbT0LWZzGMam-ghZdi9l2mRj0NEpVTsw,699120
|
|
123
127
|
biotite/sequence/align/kmertable.pyx,sha256=EqLVngPURKux5tsrv5PauuN5hLKAJbDDVZWnVGWZufo,121697
|
|
124
128
|
biotite/sequence/align/multiple.pyx,sha256=ny6BbmXApxQAYMrUT7MPXqfFiEfrhfxvQApiSPoZ7iQ,21924
|
|
125
129
|
biotite/sequence/align/statistics.py,sha256=mtscAgqIZIdTjtsvjg4s2A6gzFex0QxyHxmcAxpBQww,9652
|
|
126
130
|
biotite/sequence/align/banded.pyx,sha256=n9-nBkEryjaA-_rQxjT90ZHKIh7Ep1cjFPjWPlHUC9I,25283
|
|
127
|
-
biotite/sequence/align/kmersimilarity.cpython-313-darwin.so,sha256=
|
|
131
|
+
biotite/sequence/align/kmersimilarity.cpython-313-darwin.so,sha256=5Ki30TWpZsPIYzZwtA6p2XoPJKUfBw4pqKCmfpCRB6Y,199392
|
|
128
132
|
biotite/sequence/align/kmersimilarity.pyx,sha256=EBpz8R_fofRd4gsmBJLuH2qZgMWKlzQkCJ54w_-K7gQ,8433
|
|
129
|
-
biotite/sequence/align/tracetable.cpython-313-darwin.so,sha256=
|
|
133
|
+
biotite/sequence/align/tracetable.cpython-313-darwin.so,sha256=RSixpWJZxXfrukJS2a5EuiUFghHk_SjxxDIJSzxzrbs,164120
|
|
130
134
|
biotite/sequence/align/matrix_data/PAM370.mat,sha256=ZD8BpkVrVK22_oLSXZb9d_kzNDfic_i0eVT1fUNkyBk,2068
|
|
131
135
|
biotite/sequence/align/matrix_data/PAM210.mat,sha256=UfUmaJ09ID11GUzuNeK7aUzgZTW1iJLizADnD0qT2BI,2067
|
|
132
136
|
biotite/sequence/align/matrix_data/BLOSUM30.mat,sha256=j6FWyeTXvfpSR0ZGecI18MCATcjM_FTJ2XGoEjWg3Qg,2122
|
|
@@ -247,17 +251,17 @@ biotite/sequence/graphics/color_schemes/jalview_zappo.json,sha256=V0IJ-GsT8G8-J9
|
|
|
247
251
|
biotite/sequence/graphics/color_schemes/clustalx_dna.json,sha256=xkNRgGj_ersYNx8eSDAnI1HQalGiAWHw97tO_pmfyNE,249
|
|
248
252
|
biotite/sequence/graphics/color_schemes/3di_flower.json,sha256=wuo5hCVuc_wR9a5AviU9BXRQC8XUb90VqJCsKcpq8pc,917
|
|
249
253
|
biotite/sequence/phylo/nj.pyx,sha256=s6hoo_7s3VFy-7Hgq9lKtUVXTZ-To8Dxwytk-ohfWYI,7281
|
|
250
|
-
biotite/sequence/phylo/tree.cpython-313-darwin.so,sha256=
|
|
251
|
-
biotite/sequence/phylo/upgma.cpython-313-darwin.so,sha256=
|
|
254
|
+
biotite/sequence/phylo/tree.cpython-313-darwin.so,sha256=zJ_XV8fzk6sWt3njwQaxUOaI9ZbQebCzldmrPps0ou4,252848
|
|
255
|
+
biotite/sequence/phylo/upgma.cpython-313-darwin.so,sha256=xZqVtipCZ0VkprLDKMizNc0GJtoVUfKRPJEA7t43H3A,188368
|
|
252
256
|
biotite/sequence/phylo/__init__.py,sha256=TW1CQqOa3JZYqidRy5XE8gA0HuzA8zo2Iouit3wSsBM,1261
|
|
253
257
|
biotite/sequence/phylo/upgma.pyx,sha256=86QxGjj8fcGRhze7vZfqw8JLjLAZUevhkWDmzTy357E,5213
|
|
254
258
|
biotite/sequence/phylo/tree.pyx,sha256=4e4Bhlm1qWY0Wvj6JqDE9jVwP6lEUmE8lIHEUmRNLwU,39206
|
|
255
|
-
biotite/sequence/phylo/nj.cpython-313-darwin.so,sha256=
|
|
259
|
+
biotite/sequence/phylo/nj.cpython-313-darwin.so,sha256=t6y7tejw6wtByFFGpcyN4BF5MbhLb2NOid8wozGrdZ8,197504
|
|
256
260
|
biotite/structure/repair.py,sha256=EUvsV7EkJt-j7ruOnhZxhqdxfl7FMSKVzuQr7_xJE5g,6996
|
|
257
261
|
biotite/structure/superimpose.py,sha256=gdn6be9KOf24qphK3mFRkxFDK4ejrtTm8C_tcpzSFHs,19562
|
|
258
262
|
biotite/structure/chains.py,sha256=_E4oEhXRg2AxsyZVy623fRkylzAFonDTDSLGSbh3-M8,8324
|
|
259
|
-
biotite/structure/bonds.cpython-313-darwin.so,sha256=
|
|
260
|
-
biotite/structure/box.py,sha256=
|
|
263
|
+
biotite/structure/bonds.cpython-313-darwin.so,sha256=VUO-su6yKaGOzrw4zqvOy5IZjjJS2Iqb96D0Xdhnbgs,569216
|
|
264
|
+
biotite/structure/box.py,sha256=0GFndCBJKBha8bMlX_9oIs0Y52a0S6Y0g1Qszh83_Sg,23396
|
|
261
265
|
biotite/structure/error.py,sha256=NI8oZfhO7oYWlcEIi025QZFD3Wjvwn6SvOn_RanrFT0,783
|
|
262
266
|
biotite/structure/spacegroups.license,sha256=v4W5iaPxCZa2djh8J_KaHZCPX254AQjYjqaMIXI1wPI,1297
|
|
263
267
|
biotite/structure/util.py,sha256=PvmoUJbB_PpqnTX0osuAs6e5V8AmeKjAVy3mFFZH288,4959
|
|
@@ -265,27 +269,27 @@ biotite/structure/segments.py,sha256=1Z094xZWFsLTx_d5w67I-oHlEPCj2sbtLvZWaZfbgF4
|
|
|
265
269
|
biotite/structure/sequence.py,sha256=TlJiSH1AC9XETl3G24UkKl1FHfpWh1aPKsdxj4ZdiEs,4245
|
|
266
270
|
biotite/structure/sasa.pyx,sha256=lditLNluxg3LsxV1o3B69QOK0Lu1zeuRJXrEQ2SVIKk,12918
|
|
267
271
|
biotite/structure/tm.py,sha256=HtG56CZI9fk3zjML5f5XJXcE7oKVtYS1r-HGm2ugawo,20967
|
|
268
|
-
biotite/structure/charges.cpython-313-darwin.so,sha256=
|
|
272
|
+
biotite/structure/charges.cpython-313-darwin.so,sha256=kOhqwj825v6Eb3nLFTtz4ruwrrT_vy3O0s-9jMtaO18,247280
|
|
269
273
|
biotite/structure/__init__.py,sha256=dqOp3qC1UU3AP7cxNus2wmtHLB9vB_D17Lhmd9cRxAM,5488
|
|
270
274
|
biotite/structure/mechanics.py,sha256=A7590nMLbsfp_pHvLukca_YV0Q6VcrfDRW_p58D8ZNY,2587
|
|
271
275
|
biotite/structure/sse.py,sha256=OHXohnYi4ipBcSas9XTi9Pm8oNasM49Oxr7DBvYbe1U,11404
|
|
272
276
|
biotite/structure/charges.pyx,sha256=RpCz4sVOiwmZeVTcMAapiWJFVBPAK0gAAiNoNZuxZWA,18822
|
|
273
|
-
biotite/structure/sasa.cpython-313-darwin.so,sha256=
|
|
277
|
+
biotite/structure/sasa.cpython-313-darwin.so,sha256=17oS4LialaBJrW-rw_3-NfzQ5Dk8e2BwNLgno4qvoAg,238080
|
|
274
278
|
biotite/structure/density.py,sha256=wGZFgqkK6Kdv0OzmmWz8eXPEVxPSFShxINWOOdehaIg,4197
|
|
275
279
|
biotite/structure/rdf.py,sha256=Yf9PoWqSpNK3QsWqnCnOUBGL8WwKGOakgZ0pxj5UOiA,8104
|
|
276
280
|
biotite/structure/transform.py,sha256=i8xwMKfpHlN4hHFZBm7-U_nP5bLx_n1WgX8BQZ541_k,26975
|
|
277
281
|
biotite/structure/geometry.py,sha256=7FtPNJtTUn691xw6kbVk90s8a9rAd98zC-rKD23ikdU,23676
|
|
278
282
|
biotite/structure/molecules.py,sha256=Ar4NF3r3VQwirFprTMItIdHeluMSlpKOpRanZ0EEsWI,15291
|
|
279
283
|
biotite/structure/filter.py,sha256=cXeTVhK2lbbHq9KA-lvu2-TKENtHWoI1Qc2hpFxR71Q,17995
|
|
280
|
-
biotite/structure/bonds.pyx,sha256=
|
|
281
|
-
biotite/structure/rings.py,sha256=
|
|
284
|
+
biotite/structure/bonds.pyx,sha256=Bjjc5bTxFmbMUWeYNf1FMfHJ8DB4V02_DRFwrsqtdno,71791
|
|
285
|
+
biotite/structure/rings.py,sha256=pdxrBNtuvOE1hi9sxtI1EamUFtGnqprpkjzZpUi7jgs,15584
|
|
282
286
|
biotite/structure/atoms.py,sha256=aavGBW5xIQlzpX_dgY-1jD7Z4LRIuSLRZBhMiZt6iq0,50844
|
|
283
287
|
biotite/structure/pseudoknots.py,sha256=X3LrVSJuV1EGXuKMstkzrJQ86otbC_6-vX215fKygiU,22094
|
|
284
288
|
biotite/structure/basepairs.py,sha256=BT3_LHmerkRfzuQSU86MVTvDs0QZ0UjNJpopJm5VXBI,49908
|
|
285
289
|
biotite/structure/integrity.py,sha256=-HaFg2ckyVgSyHEyHqqNQ8fOwnhVzieYsMgyTCdzCFo,6763
|
|
286
|
-
biotite/structure/compare.py,sha256=
|
|
290
|
+
biotite/structure/compare.py,sha256=JFIE2Ve8JRTxsAK9eTODgWNPi6AuiFMe9rRIOohe6OU,27437
|
|
287
291
|
biotite/structure/hbond.py,sha256=DhVGCm9s_nNHnHhvfNUl81ph77Y-SIeFY1GGf1kPeL4,15192
|
|
288
|
-
biotite/structure/celllist.cpython-313-darwin.so,sha256=
|
|
292
|
+
biotite/structure/celllist.cpython-313-darwin.so,sha256=ShcJJJBmhuQhfRmQ_uvMbPFnuSBCGOL4NrNx8I1Y9pY,290160
|
|
289
293
|
biotite/structure/dotbracket.py,sha256=jl_Zqp0IINBwFPtZ0XK8rvmGmwebncbYpF26vJldIZY,7198
|
|
290
294
|
biotite/structure/residues.py,sha256=Fbng2Pxib4dgkijP6zREguDYwm8L0RxbbJxpuU-cv0U,21834
|
|
291
295
|
biotite/structure/spacegroups.json,sha256=SxP_900pi9iQruI_cgE1CTxl4k5kqOppv-nDyx64d3k,51558
|
|
@@ -298,13 +302,13 @@ biotite/structure/io/dcd/__init__.py,sha256=tYiiTSmqDrsSgg_sZaoQgx2D8N9OeqlooxH4
|
|
|
298
302
|
biotite/structure/io/dcd/file.py,sha256=jaU81fvGl4WG0zXB1dBKTOtSvFF3fS0kxeNR-wwpXlY,2224
|
|
299
303
|
biotite/structure/io/trr/__init__.py,sha256=5WNHMGiHNNzYdoiybE6Cs0bYAcznS5D3ABu7gHDJ__A,359
|
|
300
304
|
biotite/structure/io/trr/file.py,sha256=2LjaLoKYfNgyQGSEfQ1TdZQqaPyrBh3irbJdmEKFTMI,1235
|
|
301
|
-
biotite/structure/io/pdbx/bcif.py,sha256=
|
|
302
|
-
biotite/structure/io/pdbx/convert.py,sha256=
|
|
303
|
-
biotite/structure/io/pdbx/encoding.cpython-313-darwin.so,sha256=
|
|
305
|
+
biotite/structure/io/pdbx/bcif.py,sha256=y5ueesX3G-5JSVj0chX6LiJ71IYdjgaF5x0nR6stiD0,21247
|
|
306
|
+
biotite/structure/io/pdbx/convert.py,sha256=hEBw0QeRNGRX70z3W0i7cDjVgIOD7RFrOnZGrUMa_gM,79916
|
|
307
|
+
biotite/structure/io/pdbx/encoding.cpython-313-darwin.so,sha256=3wdUthLsM-tzZDgfxnqLDh3r-3uiUPpfcZLD7HvS4vs,1113536
|
|
304
308
|
biotite/structure/io/pdbx/encoding.pyx,sha256=D8jUdfLXkXxFmut3Eu6V5ZUxQlBGgCS-eIWD0hasPxw,32128
|
|
305
309
|
biotite/structure/io/pdbx/__init__.py,sha256=DlVXhrcuAF9A6Gim_JMccz-j8jDZuF2liDDA5cZxzx8,717
|
|
306
|
-
biotite/structure/io/pdbx/compress.py,sha256=
|
|
307
|
-
biotite/structure/io/pdbx/cif.py,sha256=
|
|
310
|
+
biotite/structure/io/pdbx/compress.py,sha256=GyGpDm8h7Trmaj1iq1RCGaYwYvxgtVnGFGvCBLnFvxM,13310
|
|
311
|
+
biotite/structure/io/pdbx/cif.py,sha256=1gyMDANR51yNXsV0aFIAK4VSUYl32nBIC94RwQf57PE,34978
|
|
308
312
|
biotite/structure/io/pdbx/component.py,sha256=xnVVqpbBAj8ED4SCYx1tF6jHXCRVK8NWHcoG-fH7QVg,8398
|
|
309
313
|
biotite/structure/io/xtc/__init__.py,sha256=ipZjsWBil-h2ujdlEobyI2jGy5xsfRVOPAyCsYAJ7G4,357
|
|
310
314
|
biotite/structure/io/xtc/file.py,sha256=PknO2-xzLgKTBW5Gig5Hv1HUZ4BIHRf2con2MLxEwNU,1235
|
|
@@ -322,9 +326,9 @@ biotite/structure/io/mol/ctab.py,sha256=yWhR81XMuWKrO3DVFG6hRgnvjOYQ7ituGTW7EnfD
|
|
|
322
326
|
biotite/structure/io/mol/mol.py,sha256=qp_yQ6tUIMmJNjzCqtle92mw_VJm4hkS0TRRJxAegS0,5461
|
|
323
327
|
biotite/structure/io/mol/sdf.py,sha256=09GRt6OGdsWH-ccgR8tXVvDM6pCUhnsZdPRv9Dx_QQU,32975
|
|
324
328
|
biotite/structure/io/pdb/convert.py,sha256=ECG8KFmduPN2xd7HWqJweYabn-IFdnhxVNtO3AkzLaQ,13800
|
|
325
|
-
biotite/structure/io/pdb/hybrid36.cpython-313-darwin.so,sha256=
|
|
329
|
+
biotite/structure/io/pdb/hybrid36.cpython-313-darwin.so,sha256=Rvb9fxjMKrchyvu_kbnLfpYCJP_dQj6TIse7fn0IJcU,179976
|
|
326
330
|
biotite/structure/io/pdb/__init__.py,sha256=5NbUMDRKIe7jJ2ByRHpMhJzY_vIasjSgO63Zxrpq8BM,733
|
|
327
|
-
biotite/structure/io/pdb/file.py,sha256=
|
|
331
|
+
biotite/structure/io/pdb/file.py,sha256=Ppb0bFqmp8xi-L-_dA3JzEuMBjLdUUJKZEDB4DUeblw,54085
|
|
328
332
|
biotite/structure/io/pdb/hybrid36.pyx,sha256=BKV7oh0xrrjqVrkhTn7KEolon57fUhlG4Yf0Tf22wuU,8036
|
|
329
333
|
biotite/structure/alphabet/pb.py,sha256=ksJKkYj4y3jzfvgFUF7g99W981RvH46RXKe3RW5fkR8,5994
|
|
330
334
|
biotite/structure/alphabet/unkerasify.py,sha256=P-EY9gbWglJHPF9xp_SivF67bIQE73403htyJMu4-nE,3301
|
|
@@ -334,7 +338,7 @@ biotite/structure/alphabet/encoder.py,sha256=2BWLMdGBr2bHw09vMhbzPztMKSnVt8UhUf8
|
|
|
334
338
|
biotite/structure/alphabet/i3d.py,sha256=SLJkVWiKl-EXMcsv8gcKF4zujoR5L8sQRyo9fnrETPM,3009
|
|
335
339
|
biotite/structure/alphabet/pb.license,sha256=OkDCfXO06BfooLXYC3iF7LXXB_Uqqex1B2gjUEFdUZI,1091
|
|
336
340
|
biotite/structure/alphabet/layers.py,sha256=Y1Y8G2LqqzC7M0kNUv8k-EXTVVKGLnPDJKdRrVEf3H4,2087
|
|
337
|
-
biotite/structure/info/components.bcif,sha256=
|
|
341
|
+
biotite/structure/info/components.bcif,sha256=y9ysqudHo8BQmtqI5JEMnEFXQtG1yt1X9WBtyw8yD2Y,60736935
|
|
338
342
|
biotite/structure/info/misc.py,sha256=hAvTh8KdkPGsh9Y2mGxDRRt9ZDPgCoAGLHr1smCANlg,3428
|
|
339
343
|
biotite/structure/info/atom_masses.json,sha256=WME4ezDPy-HrEIhxkOGxcmIMdgxf1x7e_xwBkFRdTsY,2383
|
|
340
344
|
biotite/structure/info/__init__.py,sha256=k08kdsKlrxaVQ9x8MjEXoVFaXl1J8OcpLf6iG7dUgOY,698
|
|
@@ -348,7 +352,3 @@ biotite/structure/info/ccd.py,sha256=A3-YomYJS3bbAfntLpvwLkmCgQFjR2suMwFnGQsgPXg
|
|
|
348
352
|
biotite/structure/graphics/__init__.py,sha256=YwMT8-c2DjrkcwyK6jPeDtAKxQda0OhElnwk8J0y3Hc,353
|
|
349
353
|
biotite/structure/graphics/rna.py,sha256=1fa-_ROxHIdCQu4nFEmDWqWnQlXA6iZDZDprKST_h_g,11842
|
|
350
354
|
biotite/structure/graphics/atoms.py,sha256=988_URX4hfTE3oBOYgAvZruOrzogMPcFKiTT5RJL01E,8116
|
|
351
|
-
biotite-1.3.0.dist-info/RECORD,,
|
|
352
|
-
biotite-1.3.0.dist-info/WHEEL,sha256=BVsDEH7tf1mza0RCeG3-Fhfp0YBvB6GMTrxwTXvM0HI,135
|
|
353
|
-
biotite-1.3.0.dist-info/METADATA,sha256=gcnHDjnEHlvw3vQKLx2ZpW64zoh-snCRfNU0n0erVEw,5525
|
|
354
|
-
biotite-1.3.0.dist-info/licenses/LICENSE.rst,sha256=ZuNQuB65Dxf0rDB_5LxvA4SVQJBWxRZyvbjbvE-APWY,1534
|
|
File without changes
|
|
File without changes
|