diff --git a/bin/mrdna b/bin/mrdna index 4e603d799b228d7aeab86bcf6ce8fec9685981ce..f5397417fdb9f6670017225ccebd28e23a21996e 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 197bddbce8755f8e09fe87ec8beecd9988a8d1c6..dd173d2ee5c7d3f9a34fcbd572cfb1a27ab79872 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 0273c5dbe183390f5b80110569f6b8cd97c54834..bebf3c72a2500bdaf2f174279c89889951b46ec1 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,