From 47b578f2b307f9cefaece81891a9a32662068838 Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Thu, 12 Dec 2019 17:22:30 -0600
Subject: [PATCH] Set origin of arbd box using structure in mrdna script

---
 bin/mrdna                |  6 ++++--
 mrdna/model/arbdmodel.py | 12 ++++++++++--
 mrdna/segmentmodel.py    |  1 +
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/bin/mrdna b/bin/mrdna
index 4e603d7..f539741 100755
--- a/bin/mrdna
+++ b/bin/mrdna
@@ -9,6 +9,7 @@ import re
 import pathlib
 from mrdna import __version__ as __version__
 from mrdna.simulate import multiresolution_simulation as simulate
+import numpy as np
 
 """Easy multiresolution simulations of DNA nanotechnology objects using ARBD"""
 
@@ -107,8 +108,9 @@ def main():
     model = read_model( str(infile), debye_length=args.debye_length, temperature=args.temperature )
 
     if args.dimensions is None:
-        model.dimensions = [max(f,2500)
-                            for f in model.dimensions_from_structure( padding_factor=2.5 )]
+        dim = model.dimensions_from_structure( padding_factor=2.5 )
+        model.dimensions = dim
+        model.origin = model.get_center()-0.5*np.array(model.dimensions)
     else:
         model.dimensions = args.dimensions
 
diff --git a/mrdna/model/arbdmodel.py b/mrdna/model/arbdmodel.py
index 197bddb..dd173d2 100644
--- a/mrdna/model/arbdmodel.py
+++ b/mrdna/model/arbdmodel.py
@@ -628,10 +628,11 @@ class PdbModel(Transformable, Parent):
 
 
 class ArbdModel(PdbModel):
-    def __init__(self, children, dimensions=(1000,1000,1000), temperature=291, timestep=50e-6, cutoff=50, decompPeriod=10000, pairlistDistance=None, nonbondedResolution=0.1, remove_duplicate_bonded_terms=True, extra_bd_file_lines=""):
+    def __init__(self, children, dimensions=(1000,1000,1000), origin=None, temperature=291, timestep=50e-6, cutoff=50, decompPeriod=10000, pairlistDistance=None, nonbondedResolution=0.1, remove_duplicate_bonded_terms=True, extra_bd_file_lines=""):
         PdbModel.__init__(self, children, dimensions, remove_duplicate_bonded_terms)
         self.temperature = temperature
 
+        self.origin = origin
         self.timestep = timestep
         self.cutoff  =  cutoff
 
@@ -837,8 +838,15 @@ class ArbdModel(PdbModel):
         params['outputPeriod'] = outputPeriod
 
         for k,v in zip('XYZ', self.dimensions):
-            params['origin'+k] = -v*0.5
             params['dim'+k] = v
+
+        if self.origin is None:
+            for k,v in zip('XYZ', self.dimensions):
+                params['origin'+k] = -v*0.5
+        else:
+            for k,v in zip('XYZ', self.origin):
+                params['origin'+k] = v
+
         
         params['pairlistDistance'] -= params['cutoff'] 
 
diff --git a/mrdna/segmentmodel.py b/mrdna/segmentmodel.py
index 0273c5d..bebf3c7 100644
--- a/mrdna/segmentmodel.py
+++ b/mrdna/segmentmodel.py
@@ -1541,6 +1541,7 @@ class SegmentModel(ArbdModel):
     def __init__(self, segments=[], local_twist=True, escapable_twist=True,
                  max_basepairs_per_bead=7,
                  max_nucleotides_per_bead=4,
+                 origin = None,
                  dimensions=(5000,5000,5000), temperature=291,
                  timestep=50e-6, cutoff=50, 
                  decompPeriod=10000, pairlistDistance=None, 
-- 
GitLab