annotate deseq/differential_expression_analysis_pipeline_for_rnaseq_data-a03838a6eb54/DiffExpAnal/compareOverlapping_parallel.py @ 10:6e573fd3c41b draft

Uploaded
author yufei-luo
date Mon, 13 May 2013 10:06:30 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
1 #! /usr/bin/env python
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
2 """
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
3 Yufei LUO
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
4 """
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
5
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
6 #This program is a wrapp for CompareOverlapping.py.
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
7 import optparse, os, sys, subprocess, tempfile, shutil, tarfile, glob
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
8 import os, struct, time, random
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
9 from optparse import OptionParser
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
10 from commons.core.parsing.ParserChooser import ParserChooser
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
11 from commons.core.writer.Gff3Writer import Gff3Writer
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
12 from SMART.Java.Python.CompareOverlapping import CompareOverlapping
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
13 from SMART.Java.Python.structure.Transcript import Transcript
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
14 from SMART.Java.Python.structure.Interval import Interval
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
15 from SMART.Java.Python.ncList.NCList import NCList
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
16 from SMART.Java.Python.ncList.NCListCursor import NCListCursor
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
17 from SMART.Java.Python.ncList.NCListFilePickle import NCListFilePickle, NCListFileUnpickle
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
18 from SMART.Java.Python.ncList.FileSorter import FileSorter
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
19 from SMART.Java.Python.misc.Progress import Progress
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
20 from SMART.Java.Python.misc.UnlimitedProgress import UnlimitedProgress
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
21 from SMART.Java.Python.misc import Utils
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
22
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
23
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
24
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
25 def stop_err( msg ):
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
26 sys.stderr.write( "%s\n" % msg )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
27 sys.exit()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
28
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
29 def toTar(tarFileName, overlapOutputNames):
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
30 dir = os.path.dirname(tarFileName)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
31 tfile = tarfile.open(tarFileName + ".tmp.tar", "w")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
32 currentPath = os.getcwd()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
33 os.chdir(dir)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
34 for file in overlapOutputNames:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
35 relativeFileName = os.path.basename(file)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
36 tfile.add(relativeFileName)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
37 os.system("mv %s %s" % (tarFileName + ".tmp.tar", tarFileName))
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
38 tfile.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
39 os.chdir(currentPath)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
40
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
41 def __main__():
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
42 description = "Compare Overlapping wrapp script: Get the a list of data which overlap with a reference set. [Category: Data Comparison]"
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
43 parser = OptionParser(description = description)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
44 parser.add_option("-i", "--input1", dest="inputFileName1", action="store", type="string", help="input file 1 (for annotation) [compulsory] [format: file in transcript format given by -f]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
45 parser.add_option("-f", "--format1", dest="format1", action="store", type="string", help="format of file 1 [compulsory] [format: transcript file format]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
46 parser.add_option("", "--inputTxt", dest="inputTxt", action="store", type="string", help="input, a txt file for a list of input reads files. Should identify all reads files format, given by -g [compulsory]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
47 #parser.add_option("-j", "--input2", dest="inputFileName2", action="store", default="inputRead", type="string", help="input file 2 [compulsory] [format: file in transcript format given by -g]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
48 parser.add_option("-g", "--format2", dest="format2", action="store", type="string", help="format of file 2 [compulsory] [format: transcript file format]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
49 #parser.add_option("-o", "--output", dest="output", action="store", default=None, type="string", help="output file [compulsory] [format: output file in GFF3 format]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
50 parser.add_option("-S", "--start1", dest="start1", action="store", default=None, type="int", help="only consider the n first nucleotides of the transcripts in file 1 (do not use it with -U) [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
51 parser.add_option("-s", "--start2", dest="start2", action="store", default=None, type="int", help="only consider the n first nucleotides of the transcripts in file 2 (do not use it with -u) [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
52 parser.add_option("-U", "--end1", dest="end1", action="store", default=None, type="int", help="only consider the n last nucleotides of the transcripts in file 1 (do not use it with -S) [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
53 parser.add_option("-u", "--end2", dest="end2", action="store", default=None, type="int", help="only consider the n last nucleotides of the transcripts in file 2 (do not use it with -s) [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
54 parser.add_option("-t", "--intron", dest="introns", action="store_true", default=False, help="also report introns [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
55 parser.add_option("-E", "--5primeExtension1", dest="fivePrime1", action="store", default=None, type="int", help="extension towards 5' in file 1 [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
56 parser.add_option("-e", "--5primeExtension2", dest="fivePrime2", action="store", default=None, type="int", help="extension towards 5' in file 2 [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
57 parser.add_option("-N", "--3primeExtension1", dest="threePrime1", action="store", default=None, type="int", help="extension towards 3' in file 1 [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
58 parser.add_option("-n", "--3primeExtension2", dest="threePrime2", action="store", default=None, type="int", help="extension towards 3' in file 2 [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
59 parser.add_option("-c", "--colinear", dest="colinear", action="store_true", default=False, help="colinear only [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
60 parser.add_option("-a", "--antisense", dest="antisense", action="store_true", default=False, help="antisense only [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
61 parser.add_option("-d", "--distance", dest="distance", action="store", default=None, type="int", help="accept some distance between query and reference [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
62 parser.add_option("-k", "--included", dest="included", action="store_true", default=False, help="keep only elements from file 1 which are included in an element of file 2 [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
63 parser.add_option("-K", "--including", dest="including", action="store_true", default=False, help="keep only elements from file 2 which are included in an element of file 1 [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
64 parser.add_option("-m", "--minOverlap", dest="minOverlap", action="store", default=None, type="int", help="minimum number of nucleotides overlapping to declare an overlap [format: int] [default: 1]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
65 parser.add_option("-p", "--pcOverlap", dest="pcOverlap", action="store", default=None, type="int", help="minimum percentage of nucleotides to overlap to declare an overlap [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
66 parser.add_option("-O", "--notOverlapping", dest="notOverlapping", action="store_true", default=False, help="also output not overlapping data [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
67 parser.add_option("-x", "--exclude", dest="exclude", action="store_true", default=False, help="invert the match [format: bool] [default: false]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
68 parser.add_option("-v", "--verbosity", dest="verbosity", action="store", default=1, type="int", help="trace level [format: int]")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
69 parser.add_option('', '--tar', dest='outputTar', default=None, help='output all SAM results in a tar file.' )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
70 parser.add_option( '', '--outTxt', dest='outTxtFile', help='The output list of results files on txt format.[compulsory]' )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
71 (options, args) = parser.parse_args()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
72
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
73
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
74 #Parse the input txt file and read a list of BAM files.
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
75 file = open(options.inputTxt, "r")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
76 lines = file.readlines()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
77 inputFileNames = []
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
78 overlapOutputNames = []
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
79 outputName = options.outTxtFile
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
80 resDirName = os.path.dirname(outputName) + "/"
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
81 #Write output txt file and define all output sam file names.
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
82 out = open(outputName, "w")
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
83 for line in lines:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
84 tab = line.split()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
85 inputFileNames.append(tab[1])
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
86 overlapOutName = resDirName + tab[0] + '_overlapOut_%s.gff3' % random.randrange(0, 10000)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
87 overlapOutputNames.append(overlapOutName)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
88 out.write(tab[0] + '\t' + overlapOutName + '\n')
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
89 file.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
90 out.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
91
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
92 #construction the commandes for each input file
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
93 cmds = []
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
94 for i in range(len(inputFileNames)):
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
95 absFile = sys.argv[0]
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
96 absDir = os.path.dirname(absFile)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
97 parentDir = os.path.abspath(os.path.join(absDir, os.path.pardir))
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
98 cmd = "python %s/Java/Python/CompareOverlappingSmallQuery.py " % parentDir
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
99 opts = "-i %s -f %s -j %s -g %s -o %s " % (options.inputFileName1, options.format1, inputFileNames[i], options.format2, overlapOutputNames[i])
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
100 #if options.start1 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
101 # opts += "-S %s " % options.start1
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
102 #if options.start2 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
103 # opts += "-s %s " % options.start2
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
104 #if options.end1 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
105 # opts += "-U %s " % options.end1
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
106 #if options.end2 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
107 # opts += "-u %s " % options.end2
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
108 #if options.fivePrime1 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
109 # opts += "-E %s " % options.fivePrime1
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
110 #if options.fivePrime2 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
111 # opts += "-e %s " % options.fivePrime2
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
112 #if options.threePrime1 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
113 # opts += "-N %s " % options.threePrime1
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
114 #if options.threePrime2 != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
115 # opts += "-n %s " % options.threePrime2
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
116 #if options.colinear:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
117 # opts += "-c "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
118 #if options.antisense:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
119 # opts +="-a "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
120 #if options.included:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
121 # opts += "-k "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
122 #if options.including:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
123 # opts += "-K "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
124 #if options.pcOverlap != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
125 # opts += "-p %s " % options.pcOverlap
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
126 if options.notOverlapping:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
127 opts += "-O "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
128 if options.exclude:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
129 opts += "-x "
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
130 if options.distance != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
131 opts += "-d %s " % options.distance
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
132 #if options.minOverlap != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
133 # opts += "-m %s " % options.minOverlap
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
134 cmd += opts
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
135 cmds.append(cmd)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
136
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
137
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
138 print "les commandes sont %s \n" % cmds
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
139
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
140 tmp_files = []
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
141 for i in range(len(cmds)):
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
142 try:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
143 tmp_out = tempfile.NamedTemporaryFile().name
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
144 tmp_files.append(tmp_out)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
145 tmp_stdout = open( tmp_out, 'wb' )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
146 tmp_err = tempfile.NamedTemporaryFile().name
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
147 tmp_files.append(tmp_err)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
148 tmp_stderr = open( tmp_err, 'wb' )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
149 proc = subprocess.Popen( args=cmds[i], shell=True, cwd=".", stdout=tmp_stdout, stderr=tmp_stderr )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
150 returncode = proc.wait()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
151 tmp_stderr.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
152 # get stderr, allowing for case where it's very large
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
153 tmp_stderr = open( tmp_err, 'rb' )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
154 stderr = ''
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
155 buffsize = 1048576
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
156 try:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
157 while True:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
158 stderr += tmp_stderr.read( buffsize )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
159 if not stderr or len( stderr ) % buffsize != 0:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
160 break
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
161 except OverflowError:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
162 pass
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
163 tmp_stdout.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
164 tmp_stderr.close()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
165 if returncode != 0:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
166 raise Exception, stderr
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
167 except Exception, e:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
168 stop_err( 'Error in :\n' + str( e ) )
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
169
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
170 if options.outputTar != None:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
171 toTar(options.outputTar, overlapOutputNames)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
172
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
173 for tmp_file in tmp_files:
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
174 os.remove(tmp_file)
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
175
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
176
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
177 if __name__=="__main__": __main__()
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
178
6e573fd3c41b Uploaded
yufei-luo
parents:
diff changeset
179