Mercurial > repos > messersc > jamm
diff jammwrapper.py @ 0:d42f4d78c85e draft
Uploaded
author | messersc |
---|---|
date | Wed, 17 Dec 2014 10:40:23 -0500 |
parents | |
children | 243f75d0ed6e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jammwrapper.py Wed Dec 17 10:40:23 2014 -0500 @@ -0,0 +1,88 @@ +# This is a wrapper for JAMM to use it in Galaxy +# It will be accompanied with a jamm.xml file, which specifies the interface that Galaxy is showing to the user +# as well as the JAMM software including JAMM.sh, the bash script that is actually called. + +# This wrapper does the following things: +# map the files (from Galaxy history) to a directory +# pass the parameters from the GUI to JAMM.sh +# call JAMM.sh +# maybe map the resulting tabular files back to history items, the XML could take care of that if output is fixed + +#import optparse +import argparse, os, shutil, subprocess, sys, tempfile +import shlex +# importing some of the modules used, especially for symlinking, dir manipulation and tool calling. +# since python2.7, argparse is preferred over optparse. + +# for reference wrappers, see +# https://bitbucket.org/fubar/rossdev/src/4a91f99b5e1953270c9b35d2ca70c325a10fcfcb/rgdev/bwa_wrapper.py?at=default +# https://www.e-biogenouest.org/wiki/WrapperpythonforGalaxy:Asyntaxexample + +def main(): + + #Read command line arguments + parser = argparse.ArgumentParser() + parser.add_argument('-i', dest = 'input', nargs='+') + parser.add_argument('-g', dest = 'gsize') + parser.add_argument('-z', dest = 'peakfile') + + parser.add_argument('-m', dest = 'mode') + parser.add_argument('-r', dest = 'resolution') + parser.add_argument('-p', dest = 'processes') + #parser.add_argument('-b', dest = 'binSize') + + args = parser.parse_args() + + print "\n" + print "Wrapper debugging" + print "Files to be used:" + for j in args.input: + print j + + print "output file:" + print args.peakfile + + # depracted, can still be found in may of the example wrappers + #parser = optparse.OptionParser() + #parser.add_option( '-i', dest='input', help='input bed files' ) + #parser.add_option( '-c', dest='csize', help='chr sizes' ) + #(options, args) = parser.parse_args() + + # create temp dir + tmp_dir = tempfile.mkdtemp() + os.chdir(tmp_dir) + # symlink creation + for file in args.input: + filen = tmp_dir + "/" + os.path.basename(os.path.splitext(file)[0])+".bed" + os.symlink(file, filen) + + # in case temp files should have random names + # ref_file = tempfile.NamedTemporaryFile( dir=tmp_dir ) + # ref_file_name = ref_file.name + # ref_file.close() + # os.symlink( file, ref_file_name ) + + command = ( "/home/cmesser/galaxy/tools/jamm/JAMM.sh -s %s -g %s -o results -m %s -r %s -p %s" + % ( tmp_dir, args.gsize, args.mode, args.resolution, args.processes ) ) + print command + # depending on how your programm is called, it may be necessary to use shlex.split on the command string before + # in this case, this was actually harmful. idk why +# command = shlex.split(command) + # Please read the docs for subprocess.Popen. You can't just pass as string as variables need to be extended + # Note that shell = True can be a security hazard. +# proc = subprocess.Popen( command, executable = '/bin/bash', shell=True ) + proc = subprocess.Popen( command, shell=True) + returncode = proc.wait() + + #mv files to a place where galaxy wrapper can find them + mvcommand = "mv %s/results/peaks/all.peaks.narrowPeak %s" % ( tmp_dir, args.peakfile ) + os.system(mvcommand) + +# clean up temp dir + if os.path.exists( tmp_dir ): + shutil.rmtree( tmp_dir ) + + +if __name__ == "__main__": + main() +