From 0a7989b3a9bae2d0c5a46e7230e310ecfbcdbbbf Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Fri, 21 Sep 2018 19:14:47 -0500 Subject: [PATCH] Protect intrahelical beads from merging with crossovers --- mrdna/segmentmodel.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py index 1fa1be2..4101d4b 100644 --- a/mrdna/segmentmodel.py +++ b/mrdna/segmentmodel.py @@ -1875,6 +1875,7 @@ class SegmentModel(ArbdModel): else: b = s1._generate_one_bead(a1,0) A.particle = B.particle = b + b.is_intrahelical = True b.locations.extend([A,B]) # pdb.set_trace() @@ -1892,20 +1893,26 @@ class SegmentModel(ArbdModel): if A.particle is None: b = s1.get_nearest_bead(a1) - if b is not None and s1.contour_to_nt_pos(np.abs(b.contour_position-a1)) < min(max_basepairs_per_bead, max_nucleotides_per_bead)*0.5: + try: + bead_is_far = s1.contour_to_nt_pos(np.abs(b.contour_position-a1)) >= min(max_basepairs_per_bead, max_nucleotides_per_bead)*0.5 + if bead_is_far or "is_intrahelical" in b.__dict__: + raise Exception("not close") ## combine beads b.update_position( 0.5*(b.contour_position + a1) ) # avg position - else: + except: b = s1._generate_one_bead(a1,0) A.particle = b b.locations.append(A) if B.particle is None: b = s2.get_nearest_bead(a2) - if b is not None and s2.contour_to_nt_pos(np.abs(b.contour_position-a2)) < min(max_basepairs_per_bead, max_nucleotides_per_bead)*0.5: + try: + bead_is_far = s2.contour_to_nt_pos(np.abs(b.contour_position-a2)) >= min(max_basepairs_per_bead, max_nucleotides_per_bead)*0.5 + if bead_is_far or "is_intrahelical" in b.__dict__: + raise Exception("not close") ## combine beads b.update_position( 0.5*(b.contour_position + a2) ) # avg position - else: + except: b = s2._generate_one_bead(a2,0) B.particle = b b.locations.append(B) -- GitLab