RNApolis 0.4.2__py3-none-any.whl → 0.4.4__py3-none-any.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.
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/METADATA +1 -1
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/RECORD +7 -7
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/WHEEL +1 -1
- rnapolis/tertiary.py +60 -21
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/LICENSE +0 -0
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/entry_points.txt +0 -0
- {RNApolis-0.4.2.dist-info → RNApolis-0.4.4.dist-info}/top_level.txt +0 -0
@@ -6,12 +6,12 @@ rnapolis/molecule_filter.py,sha256=hB6-nXgjmw7FAsQ3bj0cZ2FvuW2I1PXunEfcdwEUB1o,7
|
|
6
6
|
rnapolis/motif_extractor.py,sha256=duHvpi9Ulcny9K60E6VBpz5RpJZw-KdTB4_Ph0iP478,774
|
7
7
|
rnapolis/parser.py,sha256=wCA9rXqt51iLECgeBqOShFpuT8JwanNkHYD5uXYvLzU,13988
|
8
8
|
rnapolis/rfam_folder.py,sha256=SjiiyML_T1__saruFwSMJEoQ7Y55GIU8ktS8ZUn5-fw,11111
|
9
|
-
rnapolis/tertiary.py,sha256=
|
9
|
+
rnapolis/tertiary.py,sha256=SQyiYWA0RJhAK70f88CKZvS4EzGKHQ2RoL1s4MueEDQ,21657
|
10
10
|
rnapolis/transformer.py,sha256=V9nOQvdq4-p7yUWo0vQg0CDQMpmyxz9t4TMSRVEKHnw,1817
|
11
11
|
rnapolis/util.py,sha256=IdquFO3PV1_KDqodjupzm0Rqvgy0CeSzxGHaGEHYXVU,543
|
12
|
-
RNApolis-0.4.
|
13
|
-
RNApolis-0.4.
|
14
|
-
RNApolis-0.4.
|
15
|
-
RNApolis-0.4.
|
16
|
-
RNApolis-0.4.
|
17
|
-
RNApolis-0.4.
|
12
|
+
RNApolis-0.4.4.dist-info/LICENSE,sha256=ZGRu12MzCgbYA-Lt8MyBlmjvPZh7xfiD5u5wBx0enq4,1066
|
13
|
+
RNApolis-0.4.4.dist-info/METADATA,sha256=irtWJbeg1LWun2r3WtnsnDDSHlLvru0hO9wz1e67cIE,54322
|
14
|
+
RNApolis-0.4.4.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
|
15
|
+
RNApolis-0.4.4.dist-info/entry_points.txt,sha256=foN2Pn5e-OzEz0fFmNoX6PnFSZFQntOlY8LbognP5F0,308
|
16
|
+
RNApolis-0.4.4.dist-info/top_level.txt,sha256=LcO18koxZcWoJ21KDRRRo_tyIbmXL5z61dPitZpy8yc,9
|
17
|
+
RNApolis-0.4.4.dist-info/RECORD,,
|
rnapolis/tertiary.py
CHANGED
@@ -7,6 +7,7 @@ from typing import Dict, List, Optional, Set, Tuple, Union
|
|
7
7
|
|
8
8
|
import numpy
|
9
9
|
import numpy.typing
|
10
|
+
|
10
11
|
from rnapolis.common import (
|
11
12
|
BasePair,
|
12
13
|
BpSeq,
|
@@ -16,6 +17,7 @@ from rnapolis.common import (
|
|
16
17
|
Residue,
|
17
18
|
ResidueAuth,
|
18
19
|
ResidueLabel,
|
20
|
+
Saenger,
|
19
21
|
Stacking,
|
20
22
|
)
|
21
23
|
|
@@ -497,34 +499,71 @@ class Mapping2D3D:
|
|
497
499
|
|
498
500
|
@cached_property
|
499
501
|
def strands_sequences(self) -> List[Tuple[str, str]]:
|
500
|
-
|
502
|
+
nucleotides = list(filter(lambda r: r.is_nucleotide, self.structure3d.residues))
|
501
503
|
|
502
|
-
|
503
|
-
|
504
|
-
):
|
505
|
-
if i > 0 and self.find_gaps:
|
506
|
-
previous = self.structure3d.residues[i - 1]
|
504
|
+
if not nucleotides:
|
505
|
+
return []
|
507
506
|
|
508
|
-
|
509
|
-
not previous.is_connected(residue)
|
510
|
-
and previous.chain == residue.chain
|
511
|
-
):
|
512
|
-
for k in range(residue.number - previous.number - 1):
|
513
|
-
result[residue.chain].append("?")
|
507
|
+
result = [(nucleotides[0].chain, [nucleotides[0].one_letter_name])]
|
514
508
|
|
515
|
-
|
509
|
+
for i in range(1, len(nucleotides)):
|
510
|
+
previous = nucleotides[i - 1]
|
511
|
+
residue = nucleotides[i]
|
516
512
|
|
517
|
-
|
513
|
+
if residue.chain != previous.chain:
|
514
|
+
result.append((residue.chain, [residue.one_letter_name]))
|
515
|
+
else:
|
516
|
+
if self.find_gaps:
|
517
|
+
if not previous.is_connected(residue):
|
518
|
+
for k in range(residue.number - previous.number - 1):
|
519
|
+
result[-1][1].append("?")
|
520
|
+
result[-1][1].append(residue.one_letter_name)
|
521
|
+
|
522
|
+
return [(chain, "".join(sequence)) for chain, sequence in result]
|
518
523
|
|
519
524
|
@cached_property
|
520
525
|
def bpseq(self) -> BpSeq:
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
526
|
+
def pair_scoring_function(pair: BasePair3D) -> int:
|
527
|
+
if pair.saenger is not None:
|
528
|
+
if pair.saenger in (Saenger.XIX, Saenger.XX):
|
529
|
+
return 0, pair.nt1, pair.nt2
|
530
|
+
else:
|
531
|
+
return 1, pair.nt1, pair.nt2
|
532
|
+
|
533
|
+
sequence = "".join(
|
534
|
+
sorted(
|
535
|
+
[
|
536
|
+
pair.nt1_3d.one_letter_name.upper(),
|
537
|
+
pair.nt2_3d.one_letter_name.upper(),
|
538
|
+
]
|
539
|
+
)
|
540
|
+
)
|
541
|
+
if sequence in ("AU", "AT", "CG"):
|
542
|
+
return 0, pair.nt1, pair.nt2
|
543
|
+
return 1, pair.nt1, pair.nt2
|
544
|
+
|
545
|
+
canonical = [
|
546
|
+
base_pair
|
547
|
+
for base_pair in self.base_pairs
|
548
|
+
if base_pair.is_canonical and base_pair.nt1 < base_pair.nt2
|
549
|
+
]
|
550
|
+
|
551
|
+
while True:
|
552
|
+
matches = defaultdict(set)
|
553
|
+
|
554
|
+
for base_pair in canonical:
|
555
|
+
matches[base_pair.nt1_3d].add(base_pair)
|
556
|
+
matches[base_pair.nt2_3d].add(base_pair)
|
557
|
+
|
558
|
+
for pairs in matches.values():
|
559
|
+
if len(pairs) > 1:
|
560
|
+
pairs = sorted(pairs, key=pair_scoring_function)
|
561
|
+
canonical.remove(pairs[-1])
|
562
|
+
break
|
563
|
+
else:
|
564
|
+
break
|
565
|
+
|
566
|
+
return self.__generate_bpseq(canonical)
|
528
567
|
|
529
568
|
def __generate_bpseq(self, base_pairs):
|
530
569
|
result: Dict[int, List] = {}
|
File without changes
|
File without changes
|
File without changes
|