From a9358ea9ba53ceb3f7bcf180e472bfa6a3161011 Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Fri, 21 Mar 2025 15:59:44 -0500 Subject: [PATCH] Fixed error in list reader that would create intrahelical connections between double- and single-stranded segments; now using sscrossover connections --- mrdna/RELEASE-VERSION | 2 +- mrdna/readers/segmentmodel_from_lists.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/mrdna/RELEASE-VERSION b/mrdna/RELEASE-VERSION index 2b38856..a7c2726 100644 --- a/mrdna/RELEASE-VERSION +++ b/mrdna/RELEASE-VERSION @@ -1 +1 @@ -1.0a.dev180 +1.0a.dev187 diff --git a/mrdna/readers/segmentmodel_from_lists.py b/mrdna/readers/segmentmodel_from_lists.py index c07306c..9c279e1 100644 --- a/mrdna/readers/segmentmodel_from_lists.py +++ b/mrdna/readers/segmentmodel_from_lists.py @@ -332,7 +332,7 @@ def model_from_basepair_stack_3prime(coordinate, basepair, stack, three_prime, _has_bp = (bps >= 0) _has_stack = (stack >= 0) _stack_has_basepair = (bps[stack] >= 0) * _has_stack - stack = np.where( (stack[bps[stack]] == bps) * _has_bp * _has_stack * _has_bp, + stack = np.where( (stack[bps[stack]] == bps) * _has_bp * _has_stack * _stack_has_basepair, stack, -np.ones(len(stack),dtype=int) ) five_prime = _three_prime_list_to_five_prime(three_prime) @@ -421,7 +421,7 @@ def model_from_basepair_stack_3prime(coordinate, basepair, stack, three_prime, is_terminal1 = (nt1,f1) in ((0,0),(seg1.num_nt-1,1)) is_terminal2 = (nt2,f2) in ((0,1),(seg2.num_nt-1,0)) - # devlogger.info(seg1,seg2, r1, r2, is_terminal1, is_terminal2) + # devlogger.info(f'{(hmap[r1],hmap[r2], r1, r2, is_terminal1, is_terminal2)}') if is_terminal1 or is_terminal2: """ Ensure that we don't have three-way dsDNA junctions """ if is_terminal1 and (bps[r1] >= 0) and (five_prime[bps[r1]] >= 0) and (three_prime[r1] >= 0): @@ -437,7 +437,8 @@ def model_from_basepair_stack_3prime(coordinate, basepair, stack, three_prime, if is_terminal1 and is_terminal2 and (r1 not in explicitly_unstacked) and (r2 not in explicitly_unstacked): end1 = seg1.end3 if f1 else seg1.start3 end2 = seg2.start5 if f2 else seg2.end5 - seg1._connect_ends( end1, end2, type_='intrahelical') + _type = 'intrahelical' if type(seg1) == type(seg2) else 'sscrossover' + seg1._connect_ends( end1, end2, type_=_type) else: seg1.add_crossover(nt1,seg2,nt2,[f1,f2],type_="terminal_crossover") else: -- GitLab