From afe2d1f1a8d2087f29aec68e780e3ec28609706f Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Thu, 12 Dec 2024 12:08:23 -0600
Subject: [PATCH] Avoid bonded potential duplication after multiple simulate
 commands

---
 mrdna/arbdmodel/__init__.py     | 17 +++++++++--------
 mrdna/arbdmodel/interactions.py |  4 ++--
 mrdna/arbdmodel/nonbonded.py    |  2 +-
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/mrdna/arbdmodel/__init__.py b/mrdna/arbdmodel/__init__.py
index 9e6f86a..cc1ad4d 100644
--- a/mrdna/arbdmodel/__init__.py
+++ b/mrdna/arbdmodel/__init__.py
@@ -181,7 +181,7 @@ class Parent():
         return ret
 
     def get_bonds(self):
-        ret = self.bonds
+        ret = list(self.bonds)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_bonds() )
         if self.remove_duplicate_bonded_terms:
@@ -191,7 +191,7 @@ class Parent():
 
 
     def get_angles(self):
-        ret = self.angles
+        ret = list(self.angles)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_angles() )
         if self.remove_duplicate_bonded_terms:
@@ -200,7 +200,7 @@ class Parent():
             return ret
 
     def get_dihedrals(self):
-        ret = self.dihedrals
+        ret = list(self.dihedrals)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_dihedrals() )
         if self.remove_duplicate_bonded_terms:
@@ -209,7 +209,7 @@ class Parent():
             return ret
 
     def get_impropers(self):
-        ret = self.impropers
+        ret = list(self.impropers)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_impropers() )
         if self.remove_duplicate_bonded_terms:
@@ -218,7 +218,7 @@ class Parent():
             return ret
 
     def get_exclusions(self):
-        ret = self.exclusions
+        ret = list(self.exclusions)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_exclusions() )
         if self.remove_duplicate_bonded_terms:
@@ -227,7 +227,7 @@ class Parent():
             return ret
 
     def get_bond_angles(self):
-        ret = self.bond_angles
+        ret = list(self.bond_angles)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_bond_angles() )
         if self.remove_duplicate_bonded_terms:
@@ -236,7 +236,7 @@ class Parent():
             return ret
 
     def get_product_potentials(self):
-        ret = self.product_potentials
+        ret = list(self.product_potentials)
         for c in self.children:
             if isinstance(c,Parent): ret.extend( c.get_product_potentials() )
         if self.remove_duplicate_bonded_terms:
@@ -853,7 +853,7 @@ class ArbdModel(PdbModel):
     def __init__(self, children, origin=None, dimensions=(1000,1000,1000), temperature=291, timestep=50e-6,
                  particle_integrator = 'Brown',
                  cutoff=50, decomp_period=1000, pairlist_distance=None, nonbonded_resolution=0.1,
-                 remove_duplicate_bonded_terms=True, extra_bd_file_lines=""):
+                 remove_duplicate_bonded_terms=False, extra_bd_file_lines=""):
 
         PdbModel.__init__(self, children, dimensions, remove_duplicate_bonded_terms)
         self.origin = origin
@@ -1328,6 +1328,7 @@ component "data" value 3
                 
     def _writeNonbondedParameterFiles(self, prefix):
         x = np.arange(0, self.cutoff, self.nbResolution)
+        self._nbParamFiles = []
         for i,j,t1,t2 in self._particleTypePairIter():
             f = "%s.%s-%s.dat" % (prefix, t1.name, t2.name)
             scheme = self._getNbScheme(t1,t2)
diff --git a/mrdna/arbdmodel/interactions.py b/mrdna/arbdmodel/interactions.py
index 1c4b9b6..1fb7669 100644
--- a/mrdna/arbdmodel/interactions.py
+++ b/mrdna/arbdmodel/interactions.py
@@ -59,8 +59,8 @@ class TabulatedPotential(NonbondedScheme):
 ## Bonded potentials
 class HarmonicPotential():
     def __init__(self, k, r0, rRange=(0,50), resolution=0.1, maxForce=None, max_potential=None, prefix="potentials/"):
-        self.k = k
-        self.r0 = r0
+        self.k = round(k,8)
+        self.r0 = round(r0,6)
         self.rRange = rRange
         self.resolution = 0.1
         self.maxForce = maxForce
diff --git a/mrdna/arbdmodel/nonbonded.py b/mrdna/arbdmodel/nonbonded.py
index 834ed49..776f088 100644
--- a/mrdna/arbdmodel/nonbonded.py
+++ b/mrdna/arbdmodel/nonbonded.py
@@ -180,7 +180,7 @@ class WLCSKBond(BasePotential):
     def __init__(self, d, lp, kT, rRange=(0,50), resolution=0.02, maxForce=100, max_potential=None, zero="min", prefix="potentials/"):
         BasePotential.__init__(self, 0, rRange, resolution, maxForce, max_potential, zero, prefix)
         self.type_ = "wlcbond"
-        self.d = d          # separation
+        self.d = round(d,6)          # separation
         self.lp = lp            # persistence length
         self.kT = kT
 
-- 
GitLab