diff span_wrapper.py @ 2:5b99943c4627 draft

Span version https://github.com/JetBrains-Research/galaxy-applications/commit/cbbba255d66a4775cc35caf5cb85665396fdcd2a
author jetbrains
date Sun, 18 Nov 2018 08:20:27 -0500
parents 1f0c4f0a9c3b
children 4130e95bd6c8
line wrap: on
line diff
--- a/span_wrapper.py	Thu Nov 15 11:30:01 2018 -0500
+++ b/span_wrapper.py	Sun Nov 18 08:20:27 2018 -0500
@@ -1,67 +1,135 @@
 #!/usr/bin/env python
 
 import os
+import shutil
+import subprocess
 import sys
-import subprocess
+
 argv = sys.argv[1:]
 print 'Arguments {0}'.format(argv)
 
 SPAN_JAR = os.environ.get("SPAN_JAR")
-# span.jar from Docker container
-# SPAN_JAR = "/root/span.jar"
 print 'Using SPAN Peak Analyzer distributive file {0}'.format(SPAN_JAR)
 
-# #if $action.action_selector
-#     #if str($control.control_selector) == "with_control"
-#         span_wrapper.py model with_control "${genome}" "${treatment_file}" "${bin}" "${action.model_file}" "${control.control_file}"
+# #if str($action.action_selector) == "model"
+#     #if $control.control_selector
+#         span_wrapper.py model with_control
+#             "${genome_identifier}" "${genome_file}"
+#             "${treatment_identifier}" "${treatment_file}"
+#             "${bin}" "${action.model_file}"
+#             "${control_identifier}" "${control.control_file}"
 #     #else
-#         span_wrapper.py model without_control "${genome}" "${treatment_file}" "${bin}" "${action.model_file}"
+#         span_wrapper.py model without_control
+#             "${genome_identifier}" "${genome_file}"
+#             "${treatment_identifier}" "${treatment_file}"
+#             "${bin}" "${action.model_file}"
 #     #end if
 # #else
 #     #if $control.control_selector
-#         span_wrapper.py peaks with_control "${genome}" "${treatment_file}" "${bin}" "${action.model_file}" "${control.control_file}" "${fdr}" "${gap}" "${action.peaks_file}"
+#         span_wrapper.py peaks with_control
+#             "${genome_identifier}" "${genome_file}"
+#             "${treatment_identifier}" "${treatment_file}"
+#             "${bin}" "${action.model_file}"
+#             "${control_identifier}" "${control.control_file}"
+#             "${fdr}" "${gap}" "${action.peaks_file}"
 #     #else
-#         span_wrapper.py peaks without_control "${genome}" "${treatment_file}" "${bin}" "${action.model_file}" "${fdr}" "${gap}" "${action.peaks_file}"
+#         span_wrapper.py peaks with_control
+#             "${genome_identifier}" "${genome_file}"
+#             "${treatment_identifier}" "${treatment_file}"
+#             "${bin}" "${action.model_file}"
+#             "${fdr}" "${gap}" "${action.peaks_file}"
 #     #end if
 # #end if
 
-# See http://artyomovlab.wustl.edu/aging/span.html for command line options
+# See https://research.jetbrains.org/groups/biolabs/tools/span-peak-analyzer for command line options
 action = argv[0]
 control = argv[1]
+
+working_dir = os.path.abspath('.')
+print 'WORKING DIRECTORY: {}'.format(working_dir)
+
+
+def link(name, f):
+    """ SPAN uses file extension to detect input type, so original names are necessary, instead of Galaxy .dat files"""
+    result = os.path.join(working_dir, name)
+    os.symlink(f, result)
+    return result
+
+
 if action == 'model':
     if control == 'with_control':
-        (chrom_sizes, treatment_file, bin, model_file, control_file) = argv[2:]
+        (chrom_sizes, chrom_sizes_file,
+         treatment, treatment_file,
+         bin, model_file,
+         control, control_file) = argv[2:]
         cmd = 'java -jar {} analyze --chrom.sizes {} --treatment {} --control {} --bin {}'.format(
-            SPAN_JAR, chrom_sizes, treatment_file, control_file, bin
+            SPAN_JAR,
+            link(chrom_sizes, chrom_sizes_file),
+            link(treatment, treatment_file),
+            link(control, control_file),
+            bin
         )
-        print "MODEL FILE" + model_file
     elif control == 'without_control':
-        (chrom_sizes, treatment_file, bin, model_file) = argv[2:]
+        (chrom_sizes, chrom_sizes_file,
+         treatment, treatment_file,
+         bin, model_file) = argv[2:]
         cmd = 'java -jar {} analyze --chrom.sizes {} --treatment {} --bin {}'.format(
-            SPAN_JAR, argv[2], argv[3], argv[4]
+            SPAN_JAR,
+            link(chrom_sizes, chrom_sizes_file),
+            link(treatment, treatment_file),
+            bin
         )
-        print "MODEL FILE" + model_file
     else:
         raise Exception("Unknown control option {}".format(control))
 
 elif action == "peaks":
     if control == 'with_control':
-        (chrom_sizes, treatment_file, bin, model_file, control_file, fdr, gap, peaks_file) = argv[2:]
+        (chrom_sizes, chrom_sizes_file,
+         treatment, treatment_file,
+         bin, model_file,
+         control, control_file,
+         fdr, gap, peaks_file) = argv[2:]
         cmd = 'java -jar {} analyze --chrom.sizes {} --treatment {} --control {} --bin {} --fdr {} --gap {} --peaks {}'.format(
-            SPAN_JAR, chrom_sizes, treatment_file, control_file, bin, fdr, gap, peaks_file
+            SPAN_JAR,
+            link(chrom_sizes, chrom_sizes_file),
+            link(treatment, treatment_file),
+            link(control, control_file),
+            bin, fdr, gap,
+            os.path.join(working_dir, peaks_file)
         )
-        print "MODEL FILE" + model_file
     elif control == 'without_control':
-        (chrom_sizes, treatment_file, bin, model_file, fdr, gap, peaks_file) = argv[2:]
+        (chrom_sizes, chrom_sizes_file,
+         treatment, treatment_file,
+         bin, model_file,
+         fdr, gap, peaks_file) = argv[2:]
         cmd = 'java -jar {} analyze --chrom.sizes {} --treatment {} --bin {} --fdr {} --gap {} --peaks {}'.format(
-            SPAN_JAR, chrom_sizes, treatment_file, bin, fdr, gap, peaks_file
+            SPAN_JAR,
+            link(chrom_sizes, chrom_sizes_file),
+            link(treatment, treatment_file),
+            bin, fdr, gap,
+            os.path.join(working_dir, peaks_file)
         )
-        print "MODEL FILE" + model_file
     else:
         raise Exception("Unknown control option {}".format(control))
 else:
     raise Exception("Unknown action command {}".format(action))
 
 
-print 'Launching SPAN: {0}'.format(cmd)
+print 'Launching SPAN: {}'.format(cmd)
+print 'Model file: {}'.format(model_file)
+try:
+    print 'Peaks file: {}'.format(peaks_file)
+except NameError:
+    pass
+
 subprocess.check_call(cmd, cwd=None, shell=True)
+
+# Move model to the the working dir with given name
+fit_dir = os.path.join(working_dir, 'fit')
+model_original = os.path.join(fit_dir, os.listdir(fit_dir)[0])
+shutil.move(model_original, os.path.join(working_dir, model_file))
+
+# Move log file
+logs_dir = os.path.join(working_dir, 'logs')
+log_original = os.path.join(logs_dir, os.listdir(logs_dir)[0])
+shutil.move(log_original, os.path.join(working_dir, "span.log"))