changeset 24:8f42eba7e2eb draft

planemo upload commit 2414e76bee8adbe48fee12b14b13a743a03b9748-dirty
author pablocarb
date Fri, 05 Jul 2019 17:18:26 -0400
parents 635b76a9bd7a
children 2f8af738e139
files optbiodes2.xml toolOptBioDes.py
diffstat 2 files changed, 70 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/optbiodes2.xml	Fri Jul 05 17:18:26 2019 -0400
@@ -0,0 +1,38 @@
+<tool id="optbiodes" name="OptBioDes" version="0.1.0">
+    <description>Optimal synbio design: from genetic parts to SBOL-compliant constructs description</description>
+    <requirements>
+        <requirement type="package" version="2">requests</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+        python $__tool_directory__/toolOptBioDes.py $input1 -partsfile $input2 -genesfile $input3 $output1 $output2 -sbolOut $output3 -server $server
+    ]]></command>
+    <inputs>
+        <param type="integer" name="input1" value="48" label="Library size" help="Library size" />
+        <param type="data" name="input2" format="csv" />
+        <param type="data" name="input3" format="csv" />
+    	<param name="server" type="text" label="OptBioDes RES server" value="http://optbiodes.synbiochem.co.uk/REST" help="OptBioDes REST server" />
+    </inputs>
+    <outputs>
+        <data name="output1" format="csv" from_work_dir="out1.csv" />
+        <data name="output2" format="csv" from_work_dir="out2.csv" />
+        <data name="output3" format="csv" from_work_dir="out3.csv" />
+    </outputs>
+    <help><![CDATA[
+        usage: toolOptBioDes.py [-h] [-server SERVER] infile outfile diagfile
+
+toolOptBioDes: Optimal SynBio Design. Pablo Carbonell, SYNBIOCHEM, 2019
+
+arguments:
+  size            Library size
+  partsfile       Input genetic parts csv file.
+  genesfile       Input gene list csv file.
+  outfile         Output csv design file.
+  diagfile        Output csv diagnostics file.
+  sbolfile        Output SBOL combinatorial genetic library
+
+optional arguments:
+  -h, --help      show this help message and exit
+  -server SERVER  OptBioDes server.
+
+    ]]></help>
+</tool>
--- a/toolOptBioDes.py	Fri Jul 05 06:26:22 2019 -0400
+++ b/toolOptBioDes.py	Fri Jul 05 17:18:26 2019 -0400
@@ -15,14 +15,20 @@
 
 def arguments():
     parser = argparse.ArgumentParser(description='toolOptBioDes: Optimal SynBio Design. Pablo Carbonell, SYNBIOCHEM, 2019')
-    parser.add_argument('infile', 
-                        help='Input csv file (DoE specificiations).')
     parser.add_argument('size', 
                         help='Library size.')
     parser.add_argument('outfile', 
                         help='Output csv design file.')
     parser.add_argument('diagfile', 
                         help='Output csv diagnostics file.')
+    parser.add_argument('-infile', default=None,
+                        help='Input csv file (DoE specifications sheet).')
+    parser.add_argument('-partsfile', default=None,
+                        help='Input csv file (Regulartory parts).')
+    parser.add_argument('-genesfile', default=None,
+                        help='Input csv file (Genetic parts).')
+    parser.add_argument('-sbolOut', default=None,
+                        help='Output design in SBOL format.')
     parser.add_argument('-server', default='http://optbiodes.synbiochem.co.uk/REST',
                         help='OptBioDes server.')
     return parser
@@ -49,10 +55,33 @@
         cw.writerow( [res['data']['libsize'], res['data']['J']] )
     print( 'Size:', res['data']['libsize'], 'Efficiency:', res['data']['J'] )
 
+def partsUploadSbol( partsfile, genesfile, size, outfile, diagfile, sbolOut, server ):
+    files = { 
+        'parts': open(partsfile, 'rb' ),
+        'genes': open(genesfile, 'rb')
+    }
+    values = {'size': size}
+    r = requests.post( os.path.join(url, 'Parts' ), files=files, data=values )
+    res = json.loads( r.content.decode('utf-8') )
+    M = res['data']['M']
+    with open(outfile, 'w') as h:
+        cw = csv.writer(h)      
+        cw.writerow( res['data']['names'] )
+        for row in M:
+            cw.writerow( row )
+    with open(diagfile, 'w') as h:
+        cw = csv.writer(h)
+        cw.writerow( ['Size', 'Efficiency'] )
+        cw.writerow( [res['data']['libsize'], res['data']['J']] )
+    open(sbolOut, 'w').write(res['data']['sbol'])
+    print( 'Size:', res['data']['libsize'], 'Efficiency:', res['data']['J'] )
 
 
 if __name__ == "__main__":
     parser = arguments()
     arg = parser.parse_args()
     assert os.path.exists(arg.infile)
-    sheetUpload( arg.infile, arg.size, arg.outfile, arg.diagfile, arg.server )
+    if arg.sbolOut is None:
+        sheetUpload( arg.infile, arg.size, arg.outfile, arg.diagfile, arg.server )
+    else:
+        partsUploadSbol(  arg.partsfile, arg.genesfile, arg.size, arg.outfile, arg.diagfile, arg.sbolOut, arg.server )