changeset 9:1cedf1262a02 draft

planemo upload for repository https://github.com/peterjc/pico_galaxy/tree/master/tools/coverage_stats commit c8728da7af624e34a57c9524af63caa0227a446c-dirty
author peterjc
date Fri, 11 Aug 2017 13:37:38 -0400
parents 86455d19abb8
children 1032277292f0
files tools/coverage_stats/README.rst tools/coverage_stats/coverage_stats.py tools/coverage_stats/coverage_stats.xml
diffstat 3 files changed, 50 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/tools/coverage_stats/README.rst	Tue Jun 06 10:18:36 2017 -0400
+++ b/tools/coverage_stats/README.rst	Fri Aug 11 13:37:38 2017 -0400
@@ -66,6 +66,7 @@
         - Use ``<command detect_errors="aggressive">`` (internal change only).
         - Single quote command line arguments (internal change only).
 v0.0.6  - Python 3 compatibility fix.
+v0.1.0  - Provide proper command line API for the Python script.
 ======= ======================================================================
 
 
--- a/tools/coverage_stats/coverage_stats.py	Tue Jun 06 10:18:36 2017 -0400
+++ b/tools/coverage_stats/coverage_stats.py	Fri Aug 11 13:37:38 2017 -0400
@@ -22,25 +22,51 @@
 import sys
 import tempfile
 
-if "-v" in sys.argv or "--version" in sys.argv:
+from optparse import OptionParser
+
+usage = """Example usage:
+
+$ python coverage_stats.py -b mapped.bam -i mapped.bai -o summary.tsv -d 10000
+"""
+
+parser = OptionParser(usage=usage)
+parser.add_option('-b', '--bam', dest='input_bam', default=None,
+                  help='Input BAM file',
+                  metavar='FILE')
+parser.add_option('-i', '--bai', dest='input_bai', default="-",
+                  help='Input BAI file (BAM index, optional, default or - infer from BAM filename)',
+                  metavar='FILE')
+parser.add_option('-o', dest='output_tabular', default="-",
+                  help='Output tabular file (optional, default stdout)',
+                  metavar='FILE')
+parser.add_option('-d', '--maxdepth', dest='max_depth', default=8000,
+                  help='Max coverage depth (integer, default 8000)',
+                  type='int')
+parser.add_option('-v', '--version', dest='version',
+                  default=False, action='store_true',
+                  help='Show version and quit')
+
+options, args = parser.parse_args()
+
+if options.version:
     # Galaxy seems to invert the order of the two lines
-    print("BAM coverage statistics v0.0.6")
+    print("BAM coverage statistics v0.1.0")
     cmd = "samtools 2>&1 | grep -i ^Version"
     sys.exit(os.system(cmd))
 
-# TODO - Proper command line API
-if len(sys.argv) == 4:
-    bam_filename, bai_filename, tabular_filename = sys.argv[1:]
-    max_depth = "8000"
-elif len(sys.argv) == 5:
-    bam_filename, bai_filename, tabular_filename, max_depth = sys.argv[1:]
-else:
-    sys.exit("Require 3 or 4 arguments: BAM, BAI, tabular filename, [max depth]")
+bam_filename = options.input_bam
+bai_filename = options.input_bai
+tabular_filename = options.output_tabular
+max_depth = options.max_depth
 
+if args:
+    sys.exit("Sorry, the legacy API has been dropped.")
+
+if not bam_filename:
+    sys.exit("Input BAM filename is required.")
 if not os.path.isfile(bam_filename):
     sys.exit("Input BAM file not found: %s" % bam_filename)
 if bai_filename == "-":
-    # Make this optional for ease of use at the command line by hand:
     if os.path.isfile(bam_filename + ".bai"):
         bai_filename = bam_filename + ".bai"
 if not os.path.isfile(bai_filename):
@@ -198,7 +224,10 @@
 
 
 # Parse and combine the output
-out_handle = open(tabular_filename, "w")
+if tabular_filename == "-":
+    out_handle = sys.stdout
+else:
+    out_handle = open(tabular_filename, "w")
 out_handle.write("#identifer\tlength\tmapped\tplaced\tmin_cov\tmax_cov\tmean_cov\n")
 
 idxstats_handle = open(idxstats_filename)
@@ -241,7 +270,8 @@
 
 idxstats_handle.close()
 depth_handle.close()
-out_handle.close()
+if tabular_filename != "-":
+    out_handle.close()
 
 print("Total reference length %i with overall mean coverage %0.2f" %
       (global_length, float(global_bases) / global_length))
--- a/tools/coverage_stats/coverage_stats.xml	Tue Jun 06 10:18:36 2017 -0400
+++ b/tools/coverage_stats/coverage_stats.xml	Fri Aug 11 13:37:38 2017 -0400
@@ -1,4 +1,4 @@
-<tool id="coverage_stats" name="BAM coverage statistics" version="0.0.6">
+<tool id="coverage_stats" name="BAM coverage statistics" version="0.1.0">
     <description>using samtools idxstats and depth</description>
     <requirements>
         <requirement type="package" version="1.4.1">samtools</requirement>
@@ -7,7 +7,11 @@
 python $__tool_directory__/coverage_stats.py --version
     </version_command>
     <command detect_errors="aggressive">
-python $__tool_directory__/coverage_stats.py '$input_bam' '${input_bam.metadata.bam_index}' '$out_tabular' '$max_depth'
+python $__tool_directory__/coverage_stats.py
+-b '$input_bam'
+-i '${input_bam.metadata.bam_index}'
+-o '$out_tabular'
+-d '$max_depth'
     </command>
     <inputs>
         <param name="input_bam" type="data" format="bam" label="Input BAM file" />