Mercurial > repos > pjbriggs > macs21
annotate macs21_wrapper.py @ 12:69d143b8f19a draft
Uploaded
| author | pjbriggs | 
|---|---|
| date | Mon, 15 Jun 2015 08:12:15 -0400 | 
| parents | 78c15c0a96ae | 
| children | 4e85d68a2347 | 
| rev | line source | 
|---|---|
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 1 #!/bin/env python | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 2 # | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 3 # Galaxy wrapper to run MACS 2.1 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 4 # | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 5 # Completely rewritten from the original macs2 wrapped by Ziru Zhou | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 6 # taken from http://toolshed.g2.bx.psu.edu/view/modencode-dcc/macs2 | 
| 0 | 7 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 8 import sys | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 9 import os | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 10 import subprocess | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 11 import tempfile | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 12 import shutil | 
| 0 | 13 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 14 def move_file(working_dir,name,destination): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 15 """Move a file 'name' from 'working_dir' to 'destination' | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 16 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 17 """ | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 18 if destination is None: | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 19 # Nothing to do | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 20 return | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 21 source = os.path.join(working_dir,name) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 22 if os.path.exists(source): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 23 shutil.move(source,destination) | 
| 0 | 24 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 25 def convert_xls_to_interval(xls_file,interval_file,header=None): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 26 """Convert MACS XLS file to interval | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 27 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 28 From the MACS readme: "Coordinates in XLS is 1-based which is different with | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 29 BED format." | 
| 0 | 30 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 31 However this function no longer performs any coordinate conversions, it | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 32 simply ensures that any blank or non-data lines are commented out | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 33 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 34 """ | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 35 fp = open(interval_file,'wb') | 
| 0 | 36 if header: | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 37 fp.write('#%s\n' % header) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 38 for line in open(xls_file): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 39 # Keep all existing comment lines | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 40 if line.startswith('#'): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 41 fp.write(line) | 
| 0 | 42 else: | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 43 # Split line into fields and test to see if | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 44 # the 'start' field is actually an integer | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 45 fields = line.split('\t') | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 46 if len(fields) > 1: | 
| 0 | 47 try: | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 48 int(fields[1]) | 
| 0 | 49 except ValueError: | 
| 50 # Integer conversion failed so comment out | |
| 51 # "bad" line instead | |
| 52 fields[0] = "#%s" % fields[0] | |
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 53 fp.write( '\t'.join( fields ) ) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 54 fp.close() | 
| 0 | 55 | 
| 2 | 56 def make_bigwig_from_bedgraph(bedgraph_file,bigwig_file, | 
| 57 chrom_sizes,working_dir=None): | |
| 58 """Make bigWig file from a bedGraph | |
| 59 | |
| 60 The protocol is: | |
| 61 | |
| 62 $ fetchChromSizes.sh mm9 > mm9.chrom.sizes | |
| 63 $ bedClip treat.bedgraph mm9.chrom.sizes treat.clipped | |
| 64 $ bedGraphToBigWig treat.clipped mm9.chrom.sizes treat.bw | |
| 65 | |
| 66 Get the binaries from | |
| 67 http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/ | |
| 68 | |
| 69 We skip the fetchChromSizes step if the 'chrom_sizes' | |
| 70 argument supplied a valid file with the chromosome sizes | |
| 71 for the genome build in question. | |
| 72 | |
| 73 """ | |
| 74 print "Generating bigWig from bedGraph..." | |
| 75 # Check for chromosome sizes | |
| 76 if not os.path.exists(chrom_sizes): | |
| 77 # Determine genome build | |
| 78 chrom_sizes = os.path.basename(chrom_sizes) | |
| 79 genome_build = chrom_sizes.split('.')[0] | |
| 7 
0c6b14f3fefc
Attempt to fix installation of tool dependencies for UCSC/bigwig generation, and trap for undefined genome build.
 pjbriggs parents: 
2diff
changeset | 80 if genome_build == '?': | 
| 
0c6b14f3fefc
Attempt to fix installation of tool dependencies for UCSC/bigwig generation, and trap for undefined genome build.
 pjbriggs parents: 
2diff
changeset | 81 # No genome build set | 
| 
0c6b14f3fefc
Attempt to fix installation of tool dependencies for UCSC/bigwig generation, and trap for undefined genome build.
 pjbriggs parents: 
2diff
changeset | 82 sys.stderr.write("ERROR genome build not set, cannot get sizes for '?'\n") | 
| 8 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 83 sys.stderr.write("Assign a genome build to your input dataset and rerun\n") | 
| 7 
0c6b14f3fefc
Attempt to fix installation of tool dependencies for UCSC/bigwig generation, and trap for undefined genome build.
 pjbriggs parents: 
2diff
changeset | 84 sys.exit(1) | 
| 2 | 85 print "Missing chrom sizes file, attempting to fetch for '%s'" % genome_build | 
| 86 # Run fetchChromSizes | |
| 87 chrom_sizes = os.path.join(working_dir,chrom_sizes) | |
| 88 stderr_file = os.path.join(working_dir,"fetchChromSizes.stderr") | |
| 89 cmd = "fetchChromSizes %s" % genome_build | |
| 90 print "Running %s" % cmd | |
| 91 proc = subprocess.Popen(args=cmd,shell=True,cwd=working_dir, | |
| 92 stdout=open(chrom_sizes,'wb'), | |
| 93 stderr=open(stderr_file,'wb')) | |
| 94 proc.wait() | |
| 95 # Copy stderr from fetchChromSizes for information only | |
| 96 for line in open(stderr_file,'r'): | |
| 97 print line.strip() | |
| 8 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 98 os.remove(stderr_file) | 
| 2 | 99 # Check that the sizes file was downloaded | 
| 100 if not os.path.exists(chrom_sizes): | |
| 8 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 101 sys.stderr.write("Failed to download chrom sizes for '%s'\n" % genome_build) | 
| 2 | 102 sys.exit(1) | 
| 103 # Run bedClip | |
| 104 treat_clipped = "%s.clipped" % os.path.basename(bedgraph_file) | |
| 105 cmd = "bedClip %s %s %s" % (bedgraph_file,chrom_sizes,treat_clipped) | |
| 106 print "Running %s" % cmd | |
| 107 proc = subprocess.Popen(args=cmd,shell=True,cwd=working_dir) | |
| 108 proc.wait() | |
| 109 # Check that clipped file exists | |
| 110 treat_clipped = os.path.join(working_dir,treat_clipped) | |
| 111 if not os.path.exists(treat_clipped): | |
| 8 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 112 sys.stderr.write("Failed to create clipped bed file\n") | 
| 2 | 113 sys.exit(1) | 
| 114 # Run bedGraphToBigWig | |
| 115 cmd = "bedGraphToBigWig %s %s %s" % (treat_clipped,chrom_sizes, | |
| 116 bigwig_file) | |
| 117 print "Running %s" % cmd | |
| 118 proc = subprocess.Popen(args=cmd,shell=True,cwd=working_dir) | |
| 119 proc.wait() | |
| 8 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 120 # Clean up temporary chrom length file | 
| 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 121 if os.path.dirname(chrom_sizes) == working_dir: | 
| 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 122 print "Removing temporary chrom sizes file" | 
| 
78c15c0a96ae
Uploaded new version with minor fixes and updates to help text.
 pjbriggs parents: 
7diff
changeset | 123 os.remove(chrom_sizes) | 
| 2 | 124 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 125 if __name__ == "__main__": | 
| 0 | 126 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 127 # Echo the command line | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 128 print ' '.join(sys.argv) | 
| 0 | 129 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 130 # Initialise output files - values are set by reading from | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 131 # the command line supplied by the Galaxy wrapper | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 132 output_extra_html = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 133 output_extra_path = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 134 output_broadpeaks = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 135 output_gappedpeaks = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 136 output_narrowpeaks = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 137 output_treat_pileup = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 138 output_lambda_bedgraph = None | 
| 2 | 139 output_bigwig = None | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 140 output_xls_to_interval_peaks_file = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 141 output_peaks = None | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 142 output_bdgcmp = None | 
| 0 | 143 | 
| 2 | 144 # Other initialisations | 
| 145 chrom_sizes_file = None | |
| 146 | |
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 147 # Build the MACS 2.1 command line | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 148 # Initial arguments are always the same: command & input ChIP-seq file name | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 149 cmdline = ["macs2 %s -t %s" % (sys.argv[1],sys.argv[2])] | 
| 0 | 150 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 151 # Process remaining args | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 152 for arg in sys.argv[3:]: | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 153 if arg.startswith('--format='): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 154 # Convert format to uppercase | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 155 format_ = arg.split('=')[1].upper() | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 156 cmdline.append("--format=%s" % format_) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 157 elif arg.startswith('--name='): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 158 # Replace whitespace in name with underscores | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 159 experiment_name = '_'.join(arg.split('=')[1].split()) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 160 cmdline.append("--name=%s" % experiment_name) | 
| 2 | 161 elif arg.startswith('--length='): | 
| 162 # Extract chromosome size file | |
| 163 chrom_sizes_file = arg.split('=')[1] | |
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 164 elif arg.startswith('--output-'): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 165 # Handle destinations for output files | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 166 arg0,filen = arg.split('=') | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 167 if arg0 == '--output-summits': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 168 output_summits = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 169 elif arg0 == '--output-extra-files': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 170 output_extra_html = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 171 elif arg0 == '--output-extra-files-path': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 172 output_extra_path = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 173 elif arg0 == '--output-broadpeaks': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 174 output_broadpeaks = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 175 elif arg0 == '--output-gappedpeaks': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 176 output_gappedpeaks = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 177 elif arg0 == '--output-narrowpeaks': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 178 output_narrowpeaks = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 179 elif arg0 == '--output-pileup': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 180 output_treat_pileup = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 181 elif arg0 == '--output-lambda-bedgraph': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 182 output_lambda_bedgraph = filen | 
| 2 | 183 elif arg0 == '--output-bigwig': | 
| 184 output_bigwig = filen | |
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 185 elif arg0 == '--output-xls-to-interval': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 186 output_xls_to_interval_peaks_file = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 187 elif arg0 == '--output-peaks': | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 188 output_peaks = filen | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 189 else: | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 190 # Pass remaining args directly to MACS | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 191 # command line | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 192 cmdline.append(arg) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 193 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 194 cmdline = ' '.join(cmdline) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 195 print "Generated command line:\n%s" % cmdline | 
| 0 | 196 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 197 # Execute MACS2 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 198 # | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 199 # Make a working directory | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 200 working_dir = tempfile.mkdtemp() | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 201 # | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 202 # Collect stderr in a file for reporting later | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 203 stderr_filen = tempfile.NamedTemporaryFile().name | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 204 # | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 205 # Run MACS2 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 206 proc = subprocess.Popen(args=cmdline,shell=True,cwd=working_dir, | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 207 stderr=open(stderr_filen,'wb')) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 208 proc.wait() | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 209 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 210 # Run R script to create PDF from model script | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 211 if os.path.exists(os.path.join(working_dir,"%s_model.r" % experiment_name)): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 212 cmdline = 'R --vanilla --slave < "%s_model.r" > "%s_model.r.log"' % \ | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 213 (experiment_name, experiment_name) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 214 proc = subprocess.Popen(args=cmdline,shell=True,cwd=working_dir) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 215 proc.wait() | 
| 0 | 216 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 217 # Convert XLS to interval, if requested | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 218 if output_xls_to_interval_peaks_file is not None: | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 219 peaks_xls_file = os.path.join(working_dir,'%s_peaks.xls' % experiment_name ) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 220 if os.path.exists(peaks_xls_file): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 221 convert_xls_to_interval(peaks_xls_file,output_xls_to_interval_peaks_file, | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 222 header='peaks file') | 
| 2 | 223 | 
| 224 # Create bigWig from bedGraph, if requested | |
| 225 if output_bigwig is not None: | |
| 226 treat_bedgraph_file = os.path.join(working_dir,'%s_treat_pileup.bdg' % experiment_name) | |
| 227 if os.path.exists(treat_bedgraph_file): | |
| 228 make_bigwig_from_bedgraph(treat_bedgraph_file,output_bigwig, | |
| 229 chrom_sizes_file,working_dir) | |
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 230 | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 231 # Move MACS2 output files from working dir to their final destinations | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 232 move_file(working_dir,"%s_summits.bed" % experiment_name,output_summits) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 233 move_file(working_dir,"%s_peaks.xls" % experiment_name,output_peaks) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 234 move_file(working_dir,"%s_peaks.narrowPeak" % experiment_name,output_narrowpeaks) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 235 move_file(working_dir,"%s_peaks.broadPeak" % experiment_name,output_broadpeaks) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 236 move_file(working_dir,"%s_peaks.gappedPeak" % experiment_name,output_gappedpeaks) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 237 move_file(working_dir,"%s_treat_pileup.bdg" % experiment_name,output_treat_pileup) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 238 move_file(working_dir,"%s_control_lambda.bdg" % experiment_name,output_lambda_bedgraph) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 239 move_file(working_dir,"bdgcmp_out.bdg",output_bdgcmp) | 
| 0 | 240 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 241 # Move remaining file to the 'extra files' path and link from the HTML | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 242 # file to allow user to access them from within Galaxy | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 243 html_file = open(output_extra_html,'wb') | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 244 html_file.write('<html><head><title>Additional output created by MACS (%s)</title></head><body><h3>Additional Files:</h3><p><ul>\n' % experiment_name) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 245 # Make the 'extra files' directory | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 246 os.mkdir(output_extra_path) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 247 # Move the files | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 248 for filen in sorted(os.listdir(working_dir)): | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 249 shutil.move(os.path.join(working_dir,filen), | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 250 os.path.join(output_extra_path,filen)) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 251 html_file.write( '<li><a href="%s">%s</a></li>\n' % (filen,filen)) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 252 # All files moved, close out HTML | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 253 html_file.write( '</ul></p>\n' ) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 254 # Append any stderr output | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 255 html_file.write('<h3>Messages from MACS:</h3>\n<p><pre>%s</pre></p>\n' % | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 256 open(stderr_filen,'rb').read()) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 257 html_file.write('</body></html>\n') | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 258 html_file.close() | 
| 0 | 259 | 
| 1 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 260 # Clean up the working directory and files | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 261 os.unlink(stderr_filen) | 
| 
d0986d2be693
Substantial reimplementation of internals, also renamed id and version.
 pjbriggs parents: 
0diff
changeset | 262 os.rmdir(working_dir) | 
