annotate ranger_wrapper.py @ 1:6f65c802833e draft

Uploaded
author zzhou
date Tue, 27 Nov 2012 12:37:13 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
6f65c802833e Uploaded
zzhou
parents:
diff changeset
1 #purpose: python wrapper to run peak ranger
6f65c802833e Uploaded
zzhou
parents:
diff changeset
2 #author: Ziru Zhou
6f65c802833e Uploaded
zzhou
parents:
diff changeset
3 #Date: November 2012
6f65c802833e Uploaded
zzhou
parents:
diff changeset
4
6f65c802833e Uploaded
zzhou
parents:
diff changeset
5 import sys, subprocess, tempfile, shutil, glob, os, os.path, gzip
6f65c802833e Uploaded
zzhou
parents:
diff changeset
6 from galaxy import eggs
6f65c802833e Uploaded
zzhou
parents:
diff changeset
7 import pkg_resources
6f65c802833e Uploaded
zzhou
parents:
diff changeset
8 pkg_resources.require( "simplejson" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
9 import simplejson
6f65c802833e Uploaded
zzhou
parents:
diff changeset
10 import glob
6f65c802833e Uploaded
zzhou
parents:
diff changeset
11 import datetime
6f65c802833e Uploaded
zzhou
parents:
diff changeset
12
6f65c802833e Uploaded
zzhou
parents:
diff changeset
13 CHUNK_SIZE = 1024
6f65c802833e Uploaded
zzhou
parents:
diff changeset
14
6f65c802833e Uploaded
zzhou
parents:
diff changeset
15 def main():
6f65c802833e Uploaded
zzhou
parents:
diff changeset
16 options = simplejson.load( open( sys.argv[1] ) )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
17 outputs = simplejson.load( open( sys.argv[2] ) )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
18 script_path = sys.argv[3]
6f65c802833e Uploaded
zzhou
parents:
diff changeset
19
6f65c802833e Uploaded
zzhou
parents:
diff changeset
20 #sets experiment name and sets the chip/input files
6f65c802833e Uploaded
zzhou
parents:
diff changeset
21 #========================================================================================
6f65c802833e Uploaded
zzhou
parents:
diff changeset
22 experiment_name = '_'.join( options['experiment_name'].split() ) #save experiment name
6f65c802833e Uploaded
zzhou
parents:
diff changeset
23
6f65c802833e Uploaded
zzhou
parents:
diff changeset
24 cmdline = "peakranger %s -d %s" % ( options['action'], options['chip_file'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
25 if 'input_file' in options:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
26 cmdline = "%s -c %s" % ( cmdline, options['input_file'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
27
6f65c802833e Uploaded
zzhou
parents:
diff changeset
28 #set additional options
6f65c802833e Uploaded
zzhou
parents:
diff changeset
29 #========================================================================================
6f65c802833e Uploaded
zzhou
parents:
diff changeset
30 if (options['action'] == "nr"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
31 output_ranger_file = outputs['output_ranger_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
32
6f65c802833e Uploaded
zzhou
parents:
diff changeset
33 cmdline = "%s --format bam -l %s --verbose > default_output.txt" % ( cmdline, options['extension'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
34 elif (options['action'] == "lc"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
35 output_ranger_file = outputs['output_ranger_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
36
6f65c802833e Uploaded
zzhou
parents:
diff changeset
37 cmdline = "%s --verbose > default_output.txt" % ( cmdline )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
38 elif (options['action'] == "wig"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
39 output_wigzip_file = outputs['output_wigzip_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
40
6f65c802833e Uploaded
zzhou
parents:
diff changeset
41 cmdline = "%s --format bam -l %s %s %s %s -o ranger_wig" % ( cmdline, options['extension'], options['split'], options['strand'], options['gzip'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
42 elif (options['action'] == "wigpe"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
43 output_wigzip_file = outputs['output_wigzip_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
44
6f65c802833e Uploaded
zzhou
parents:
diff changeset
45 cmdline = "%s -l %s %s %s %s -o ranger_wig" % ( cmdline, options['extension'], options['split'], options['strand'], options['gzip'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
46 elif (options['action'] == "ranger"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
47 output_summit_file = outputs['output_summit_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
48 output_region_file = outputs['output_region_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
49 output_details_file = outputs['output_details_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
50 output_report_file = outputs['output_report_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
51
6f65c802833e Uploaded
zzhou
parents:
diff changeset
52 if (options['gene_annotate_file'] != "None"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
53 gene_annotate_file = "--gene_annot_file %s/gene_annotation_files/%s" % ( script_path, options['gene_annotate_file'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
54 report = "--report"
6f65c802833e Uploaded
zzhou
parents:
diff changeset
55 elif (options['gene_annotate_file'] == "Upload"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
56 gene_annotate_file = options['usr_annot_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
57 report = "--report"
6f65c802833e Uploaded
zzhou
parents:
diff changeset
58 else:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
59 gene_annotate_file = ""
6f65c802833e Uploaded
zzhou
parents:
diff changeset
60 report = ""
6f65c802833e Uploaded
zzhou
parents:
diff changeset
61
6f65c802833e Uploaded
zzhou
parents:
diff changeset
62 cmdline = "%s -t %s --format bam %s --plot_region %s -l %s -p %s -q %s -r %s -b %s %s %s -o ranger_peak" % ( cmdline, options['threads'], gene_annotate_file, options['plot_region'], options['extension'], options['pvalue'], options['fdr'], options['delta'], options['bandwith'], options['pad'], report )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
63 elif (options['action'] == "ccat"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
64 output_summit_file = outputs['output_summit_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
65 output_region_file = outputs['output_region_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
66 output_details_file = outputs['output_details_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
67 output_report_file = outputs['output_report_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
68 output_ranger_file = outputs['output_ranger_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
69
6f65c802833e Uploaded
zzhou
parents:
diff changeset
70 if (options['gene_annotate_file'] != "None"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
71 gene_annotate_file = "--gene_annot_file %s/gene_annotation_files/%s" % ( script_path, options['gene_annotate_file'] )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
72 report = "--report"
6f65c802833e Uploaded
zzhou
parents:
diff changeset
73 elif (options['gene_annotate_file'] == "Upload"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
74 gene_annotate_file = options['usr_annot_file']
6f65c802833e Uploaded
zzhou
parents:
diff changeset
75 report = "--report"
6f65c802833e Uploaded
zzhou
parents:
diff changeset
76 else:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
77 gene_annotate_file = ""
6f65c802833e Uploaded
zzhou
parents:
diff changeset
78 report = ""
6f65c802833e Uploaded
zzhou
parents:
diff changeset
79
6f65c802833e Uploaded
zzhou
parents:
diff changeset
80 cmdline = "%s --format bam %s --plot_region %s -l %s -q %s --win_size %s --win_step %s --min_count %s --min_score %s %s -o ranger_peak > default_output.txt" % ( cmdline, gene_annotate_file, options['plot_region'], options['extension'], options['fdr'], options['winsize'], options['winstep'], options['mincount'], options['minscore'], report )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
81
6f65c802833e Uploaded
zzhou
parents:
diff changeset
82 #run cmdline
6f65c802833e Uploaded
zzhou
parents:
diff changeset
83 #========================================================================================
6f65c802833e Uploaded
zzhou
parents:
diff changeset
84 tmp_dir = tempfile.mkdtemp()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
85 stderr_name = tempfile.NamedTemporaryFile().name
6f65c802833e Uploaded
zzhou
parents:
diff changeset
86 proc = subprocess.Popen( args=cmdline, shell=True, cwd=tmp_dir, stderr=open( stderr_name, 'wb' ) )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
87 proc.wait()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
88
6f65c802833e Uploaded
zzhou
parents:
diff changeset
89 #Do not terminate if error code, allow dataset (e.g. log) creation and cleanup
6f65c802833e Uploaded
zzhou
parents:
diff changeset
90 #========================================================================================
6f65c802833e Uploaded
zzhou
parents:
diff changeset
91 if proc.returncode:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
92 stderr_f = open( stderr_name )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
93 while True:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
94 chunk = stderr_f.read( CHUNK_SIZE )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
95 if not chunk:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
96 stderr_f.close()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
97 break
6f65c802833e Uploaded
zzhou
parents:
diff changeset
98 sys.stderr.write( chunk )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
99
6f65c802833e Uploaded
zzhou
parents:
diff changeset
100
6f65c802833e Uploaded
zzhou
parents:
diff changeset
101 #determine if the outputs are there, copy them to the appropriate dir and filename
6f65c802833e Uploaded
zzhou
parents:
diff changeset
102 #========================================================================================
6f65c802833e Uploaded
zzhou
parents:
diff changeset
103 if(options['action'] == "nr" or options['action'] == "lc" or options['action'] == "ccat"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
104 created_ranger_file = os.path.join( tmp_dir, "default_output.txt" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
105 if os.path.exists( created_ranger_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
106 shutil.move( created_ranger_file, output_ranger_file )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
107
6f65c802833e Uploaded
zzhou
parents:
diff changeset
108 if(options['action'] == "wig" or options['action'] == "wigpe"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
109 if(options['split'] == "-s" or options['strand'] == "-x"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
110 if(options['gzip'] == "-z"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
111 files = str( glob.glob('%s/*.wig.gz' % tmp_dir) )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
112 files = files.replace("[", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
113 files = files.replace("]", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
114 files = files.replace(",", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
115 files = files.replace("'", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
116 cmd = "zip -j %s/ranger_wig.zip %s > /dev/null" % (tmp_dir, files)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
117 #cmd = "tar -czvf %s/ranger_wig.tar %s > /dev/null" % (tmp_dir, files)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
118 os.system(cmd)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
119 created_wigzip_file = os.path.join( tmp_dir, "ranger_wig.zip" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
120 else:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
121 files = str( glob.glob('%s/*.wig' % tmp_dir) )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
122 files = files.replace("[", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
123 files = files.replace("]", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
124 files = files.replace(",", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
125 files = files.replace("'", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
126 cmd = "zip -j %s/ranger_wig.zip %s > /dev/null" % (tmp_dir, files)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
127 #cmd = "tar -czvf %s/ranger_wig.tar %s > /dev/null" % (tmp_dir, files)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
128 os.system(cmd)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
129 created_wigzip_file = os.path.join( tmp_dir, "ranger_wig.zip" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
130 else:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
131 if(options['gzip'] == "-z"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
132 created_wigzip_file = os.path.join( tmp_dir, "ranger_wig.wig.gz" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
133 else:
6f65c802833e Uploaded
zzhou
parents:
diff changeset
134 created_wigzip_file = os.path.join( tmp_dir, "ranger_wig.wig" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
135
6f65c802833e Uploaded
zzhou
parents:
diff changeset
136 if os.path.exists( created_wigzip_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
137 shutil.move( created_wigzip_file, output_wigzip_file )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
138
6f65c802833e Uploaded
zzhou
parents:
diff changeset
139 if(options['action'] == "ranger" or options['action'] == "ccat"):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
140 created_summit_file = os.path.join( tmp_dir, "ranger_peak_summit.bed" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
141 if os.path.exists( created_summit_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
142 shutil.move( created_summit_file, output_summit_file )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
143
6f65c802833e Uploaded
zzhou
parents:
diff changeset
144 created_region_file = os.path.join( tmp_dir, "ranger_peak_region.bed" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
145 if os.path.exists( created_region_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
146 shutil.move( created_region_file, output_region_file )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
147
6f65c802833e Uploaded
zzhou
parents:
diff changeset
148 created_details_file = os.path.join( tmp_dir, "ranger_peak_details" )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
149 if os.path.exists( created_details_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
150 shutil.move( created_details_file, output_details_file )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
151
6f65c802833e Uploaded
zzhou
parents:
diff changeset
152 #zips the html report and puts it in history, whole report is too big and display in galaxy is very unformatted
6f65c802833e Uploaded
zzhou
parents:
diff changeset
153 filename = os.path.splitext(os.path.basename(options['chip_file']))[0]
6f65c802833e Uploaded
zzhou
parents:
diff changeset
154 filename = filename.upper()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
155 extension = os.path.splitext(options['chip_file'])[1]
6f65c802833e Uploaded
zzhou
parents:
diff changeset
156 extension = extension.replace(".", "")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
157 extension = extension.upper()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
158 now = datetime.datetime.now()
6f65c802833e Uploaded
zzhou
parents:
diff changeset
159 date = now.strftime("%Y-%m-%d")
6f65c802833e Uploaded
zzhou
parents:
diff changeset
160 foldername = "%s_%s_REPORT_%s" % (filename, extension, date)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
161
6f65c802833e Uploaded
zzhou
parents:
diff changeset
162 created_report_file = os.path.join( tmp_dir, foldername )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
163 if os.path.exists ( created_report_file ):
6f65c802833e Uploaded
zzhou
parents:
diff changeset
164 #os.system("cp -rf %s %s" % (created_report_file, "/mnt/galaxyData/files/000/"))
6f65c802833e Uploaded
zzhou
parents:
diff changeset
165 os.system("cp -rf %s ." % created_report_file)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
166 os.system("zip -r created_report.zip %s > /dev/null" % foldername)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
167 #os.system("zip -r created_report.zip /mnt/galaxyData/files/000/%s > /dev/null" % foldername)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
168 shutil.move( "created_report.zip", output_report_file)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
169
6f65c802833e Uploaded
zzhou
parents:
diff changeset
170
6f65c802833e Uploaded
zzhou
parents:
diff changeset
171 #os.system("ln -fs %s/index.html %s" %( foldername, output_report_file ))
6f65c802833e Uploaded
zzhou
parents:
diff changeset
172 #datafoldername = os.path.splitext(os.path.basename(output_report_file))
6f65c802833e Uploaded
zzhou
parents:
diff changeset
173 #datafolder = os.path.join ("/mnt/galaxyData/files/000/" datafoldername)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
174 #print "datafolder %s" % datafolder
6f65c802833e Uploaded
zzhou
parents:
diff changeset
175 #if os.path.exists( datafolder )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
176 # os.system("rm -rf %s" % datafolder)
6f65c802833e Uploaded
zzhou
parents:
diff changeset
177 # os.system("cp -rf %s/%s/imgs /mnt/galaxyData/files/000/%s" % (tmp_dir, foldername, datafolder))
6f65c802833e Uploaded
zzhou
parents:
diff changeset
178 # os.system("cp -rf %s/%s/scripts /mnt/galaxyData/files/000/%s" % (tmp_dir, foldername, datafolder))
6f65c802833e Uploaded
zzhou
parents:
diff changeset
179
6f65c802833e Uploaded
zzhou
parents:
diff changeset
180 os.unlink( stderr_name )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
181 shutil.rmtree( tmp_dir )
6f65c802833e Uploaded
zzhou
parents:
diff changeset
182
6f65c802833e Uploaded
zzhou
parents:
diff changeset
183 if __name__ == "__main__": main()