diff --git a/mrdna/readers/segmentmodel_from_lists.py b/mrdna/readers/segmentmodel_from_lists.py index aa12c75f3315aeaf5e29b4970667457ef5b5364b..d44825edd39e926aed6591f16dfd84953ec652ad 100644 --- a/mrdna/readers/segmentmodel_from_lists.py +++ b/mrdna/readers/segmentmodel_from_lists.py @@ -84,10 +84,11 @@ def basepairs_and_stacks_to_helixmap(basepairs,stacks_above): assert(helixmap[nt] == -1) assert(helixmap[bp] == -1) - all_nts.append(nt) if nt == nt0: break + all_nts.append(nt) + if counter > 1e6: raise Exception("DNA is apparently too long; probably there is something wrong with the structure") counter += 1 @@ -98,7 +99,6 @@ def basepairs_and_stacks_to_helixmap(basepairs,stacks_above): for nt in group: bp = basepairs[nt] is_fwd[bp] = 0 - rank +=1 helixmap[nt] = helixmap[bp] = hid helixrank[nt] = helixrank[bp] = rank processed.add(nt) @@ -263,7 +263,19 @@ def model_from_basepair_stack_3prime(coordinates, basepair, stack, three_prime, f1,f2 = [fwd[i] for i in (r1,r2)] if nt1 in (0,seg1.num_nt-1) or nt2 in (0,seg2.num_nt-1): - seg1.add_crossover(nt1,seg2,nt2,[f1,f2],type_="terminal_crossover") + if nt1 in (0,seg1.num_nt-1) and nt2 in (0,seg2.num_nt-1): + if nt1 == 0: + end1 = seg1.start5 if f1 else seg1.start3 + else: + end1 = seg1.end3 if f1 else seg1.end5 + if nt2 == 0: + end2 = seg2.start5 if f2 else seg2.start3 + else: + end2 = seg2.end3 if f2 else seg2.end5 + seg1._connect_ends( end1, end2, type_='intrahelical') + + else: + seg1.add_crossover(nt1,seg2,nt2,[f1,f2],type_="terminal_crossover") else: seg1.add_crossover(nt1,seg2,nt2,[f1,f2])