From fdc216005a05ed4bb56db021a432c2bf93046ca6 Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Tue, 28 Aug 2018 12:59:34 -0500
Subject: [PATCH] Added dnarbd binary to repository for command line invocation

---
 bin/dnarbd | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 setup.py   |  1 +
 2 files changed, 68 insertions(+)
 create mode 100644 bin/dnarbd

diff --git a/bin/dnarbd b/bin/dnarbd
new file mode 100644
index 0000000..703c3d8
--- /dev/null
+++ b/bin/dnarbd
@@ -0,0 +1,67 @@
+#! /usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import argparse
+import re
+from dnarbd.simulate import multiresolution_simulation as simulate
+
+parser = argparse.ArgumentParser(prog="dnarbd",
+				 description="""Easy multiresolution simulations of DNA nanotechnology objects using ARBD""")
+
+parser.add_argument('-o','--output-prefix', type=str, default=None,
+                    help="Name for your job's output")
+parser.add_argument('-d','--directory', type=str,  default=None,
+                    help='Directory for simulation; does not need to exist yet')
+parser.add_argument('-g','--gpu', type=int, default=0,
+                    help='GPU for simulation; check nvidia-smi for availability')
+parser.add_argument('--coarse-steps', type=int, default=1e7,
+                    help='Simulation steps for coarse model (200 fs/step)')
+parser.add_argument('--fine-steps', type=int, default=1e7,
+                    help='Simulation steps for fine model (50 fs/step)')
+parser.add_argument('--backbone-scale', type=float, default=1.0,
+                    help='Factor to scale DNA backbone in atomic model; try 0.25 to avoid clashes for atomistic simulations')
+
+parser.add_argument('input_file', type=str,
+                    help="""Any of the following:
+                    (1) a cadnano JSON file;
+                    (2) a vHelix Maya (.ma) file;
+                    (3) an atomic PDB file""")
+
+args = parser.parse_args()
+
+if __name__ == '__main__':
+    
+    infile = args.input_file
+    try:
+        re_result = re.match("(.*)\.([^.]+)",infile) 
+        prefix = re_result.group(1)
+        extension = re_result.group(2).lower()
+    except:
+        raise Exception("Unrecognized input file '{}'".format(infile))
+        
+    if extension == 'json':
+        from dnarbd.readers import read_cadnano as read_model
+    elif extension == 'ma':
+        from dnarbd.readers import read_vhelix as read_model
+    elif extension == 'pdb':
+        from dnarbd.readers import read_atomic_pdb as read_model
+    else:
+        raise Exception("Unrecognized input file '{}'".format(infile))
+                    
+    model = read_model( infile )
+
+    run_args = dict(
+        model = model,
+        output_name = args.output_prefix,
+        job_id = "job-"+args.output_prefix,
+        directory = args.directory,
+        gpu = args.gpu,
+        coarse_steps = args.coarse_steps,
+        fine_steps = args.fine_steps,
+        backbone_scale = args.backbone_scale
+    )
+
+    if args.output_prefix == None:
+        run_args['output_name'] = prefix
+
+    simulate( **run_args )
diff --git a/setup.py b/setup.py
index af491de..9cf1532 100644
--- a/setup.py
+++ b/setup.py
@@ -19,6 +19,7 @@ setuptools.setup(
     url="https://gitlab.engr.illinois.edu/tbgl/tools/dnarbd",
     packages=setuptools.find_packages(),
     include_package_data=True,
+    scripts=['bin/dnarbd'],
     install_requires=(
         'numpy>=1.14',
         'scipy>=1.1',
-- 
GitLab