annotate jammwrapper.py @ 1:243f75d0ed6e draft default tip

Uploaded. Includes new release 1.0.7 with fixed optional controls.
author messersc
date Thu, 19 Feb 2015 05:39:45 -0500
parents d42f4d78c85e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
1 # This is a wrapper for JAMM to use it in Galaxy
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
2 # It will be accompanied with a jamm.xml file, which specifies the interface that Galaxy is showing to the user
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
3 # as well as the JAMM software including JAMM.sh, the bash script that is actually called.
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
4
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
5 # This wrapper does the following things:
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
6 # map the files (from Galaxy history) to a directory
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
7 # pass the parameters from the GUI to JAMM.sh
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
8 # call JAMM.sh
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
9 # map the resulting tabular files back to history items
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
10
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
11 #import optparse
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
12 import argparse, os, shutil, subprocess, sys, tempfile
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
13 import shlex
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
14 # importing some of the modules used, especially for symlinking, dir manipulation and tool calling.
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
15 # since python2.7, argparse is preferred over optparse.
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
16
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
17 # for reference wrappers, see
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
18 # https://bitbucket.org/fubar/rossdev/src/4a91f99b5e1953270c9b35d2ca70c325a10fcfcb/rgdev/bwa_wrapper.py?at=default
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
19 # https://www.e-biogenouest.org/wiki/WrapperpythonforGalaxy:Asyntaxexample
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
20
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
21 def main():
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
22
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
23 #Read command line arguments
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
24 parser = argparse.ArgumentParser()
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
25 parser.add_argument('-i', dest = 'input', nargs='+') # + allows for 1 or more arguments
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
26 # parser.add_argument('-c', dest = 'control', nargs='*', default=None) # allow for not supplying -c
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
27 parser.add_argument('-c', dest = 'control', action='append') # allow for not supplying -c
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
28 parser.add_argument('-g', dest = 'gsize')
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
29 parser.add_argument('-o', dest = 'peakfile')
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
30 parser.add_argument('-of', dest = 'filteredpeakfile')
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
31
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
32 parser.add_argument('-m', dest = 'mode')
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
33 parser.add_argument('-r', dest = 'resolution')
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
34 parser.add_argument('-p', dest = 'processes')
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
35 parser.add_argument('-t', dest = 'type')
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
36 parser.add_argument('-f', dest = 'fraglen')
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
37 parser.add_argument('-b', dest = 'binsize')
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
38
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
39 args = parser.parse_args()
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
40
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
41 print "################################################"
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
42 print "Wrapper debugging"
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
43 print "################################################"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
44 print "Sample files:"
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
45 for j in args.input:
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
46 print j
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
47 if args.control is not None:
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
48 print "Control files:"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
49 for j in args.control:
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
50 print j
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
51
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
52 print "output files:"
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
53 print args.peakfile
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
54 print args.filteredpeakfile
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
55 print "current working dir:"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
56 print os.getcwd()
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
57 print "dir with jammwrapper in it:"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
58 path = os.path.abspath(os.path.dirname(sys.argv[0]))
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
59 print path
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
60
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
61 # optparse was depracted, can still be found in may of the example wrappers
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
62 #parser = optparse.OptionParser()
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
63 #parser.add_option( '-i', dest='input', help='input bed files' )
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
64 #parser.add_option( '-c', dest='csize', help='chr sizes' )
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
65 #(options, args) = parser.parse_args()
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
66
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
67 # create temp dir
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
68 tmp_dir = tempfile.mkdtemp()
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
69 os.mkdir(tmp_dir + "/sample")
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
70 # symlink creation
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
71 for file in args.input:
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
72 filen = tmp_dir + "/sample/" + os.path.basename(os.path.splitext(file)[0])+".bed"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
73 print "input files mapped: %s" % filen
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
74 os.symlink(file, filen)
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
75
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
76 # Here comes some unnecessary repetition
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
77 # if control files are supplied, we make another tmp subdir and put those files there.
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
78 # JAMM.sh is then called with one additional switch -c
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
79 if args.control is not None:
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
80 # symlink creation
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
81 os.mkdir(tmp_dir + "/control")
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
82 for file in args.control:
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
83 filen = tmp_dir + "/control/" + os.path.basename(os.path.splitext(file)[0])+".bed"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
84 print "input files mapped: %s" % filen
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
85 os.symlink(file, filen)
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
86 command = ( "bash %s/JAMM.sh -s %s/sample -c %s/control -g %s -o results -m %s -r %s -p %s -t %s -f %s -b %s"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
87 % ( path, tmp_dir, tmp_dir, args.gsize, args.mode, args.resolution, args.processes, \
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
88 args.type, args.fraglen, args.binsize ) )
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
89 else:
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
90 command = ( "bash %s/JAMM.sh -s %s/sample -g %s -o results -m %s -r %s -p %s -t %s -f %s -b %s"
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
91 % ( path, tmp_dir, args.gsize, args.mode, args.resolution, args.processes, \
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
92 args.type, args.fraglen, args.binsize ) )
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
93
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
94
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
95 print "Command called by bash:"
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
96 print command
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
97 # depending on how your programm is called, it may be necessary to use shlex.split on the command string before
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
98 # in this case, this was actually harmful. idk why
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
99 # command = shlex.split(command)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
100 # Please read the docs for subprocess.Popen. You can't just pass as string as variables need to be extended
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
101 # Note that shell = True can be a security hazard.
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
102 # proc = subprocess.Popen( command, executable = '/bin/bash', shell=True )
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
103 proc = subprocess.Popen( command, shell=True)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
104 returncode = proc.wait()
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
105
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
106 #mv files to a place where galaxy wrapper can find them
1
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
107 # mvcommand = "mv %s/results/peaks/all.peaks.narrowPeak %s" % ( tmp_dir, args.peakfile )
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
108 mvcommand = "mv results/peaks/all.peaks.narrowPeak %s" % args.peakfile
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
109 os.system(mvcommand)
243f75d0ed6e Uploaded.
messersc
parents: 0
diff changeset
110 mvcommand = "mv results/peaks/filtered.peaks.narrowPeak %s" % args.filteredpeakfile
0
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
111 os.system(mvcommand)
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
112
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
113 # clean up temp dir
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
114 if os.path.exists( tmp_dir ):
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
115 shutil.rmtree( tmp_dir )
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
116
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
117 if __name__ == "__main__":
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
118 main()
d42f4d78c85e Uploaded
messersc
parents:
diff changeset
119