From 62826908b842321bf779c21ce5016cf8ef9f6529 Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Fri, 7 Feb 2020 13:23:09 -0600 Subject: [PATCH] Improved potentials around crossovers 1) Proper accounting for a single bond representing a double crossover 2) Parallel-helix dihedral angle spring constant is now computed from three "springs" placed in series that represent: a) the flexibility of the bond on one side of the crossover b) the intrinsic flexibility of the crossover c) the flexibility of the bond on the other side of the crossover --- mrdna/segmentmodel.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py index c4f125c..e679a45 100644 --- a/mrdna/segmentmodel.py +++ b/mrdna/segmentmodel.py @@ -2461,6 +2461,15 @@ class SegmentModel(ArbdModel): parent.add_dihedral(o1,b1,b2,o2, pot) + def count_crossovers(beads): + count = 0 + for b in beads: + for l in b.locations: + if l.connection is not None: + if l.connection.type_ == "crossover": + count += 1 + return count + def add_local_crossover_strand_orientation_potential(b1,b2, b1_on_fwd_strand): """ Adds a dihedral angle potential so bead b2 at opposite @@ -2559,7 +2568,13 @@ class SegmentModel(ArbdModel): ## TODO?: Check length-dependence of this potential if a is not None: - k = k_xover_angle( dists[b][a]+dists[c][d] ) + k_intrinsic = 0.00086 + k = [1/k for k in (4*k_xover_angle( dists[b][a] ), + k_intrinsic, + 4*k_xover_angle( dists[c][d] ))] + k = sum(k)**-1 + k = k * count_crossovers((b1,b2))/4 + pot = self.get_dihedral_potential(k,t0) self.add_dihedral( a,b,c,d, pot ) ... @@ -2612,7 +2627,8 @@ class SegmentModel(ArbdModel): return """ Add bond potential """ - pot = self.get_bond_potential(4,18.5) + k = 1.0 * count_crossovers((b1,b2)) + pot = self.get_bond_potential(k,18.5) self.add_bond(b1,b2, pot) """ Add parallel helices potential, possibly """ -- GitLab