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