annotate hmcan_wrapper.py @ 0:c7901290c849 draft

Uploaded
author jbrayet
date Wed, 13 Jan 2016 10:19:39 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
1 #!/usr/bin/env python
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
2
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
3 import sys, subprocess, tempfile, os, shutil, glob
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
4
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
5 # samtools is added to PATH here
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
6
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
7 def calculate_window_size ( chr_len_file, input_file, format ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
8 ''' this function calculates the window size used to evaluate copy number variation.
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
9
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
10 W = L/(T*CV*CV)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
11
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
12 L=genome length
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
13 T=total read count (mapped) present in the input file (bed, bam, sam)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
14 CV=coefficient of variation (0.05)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
15 W=window size '''
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
16
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
17 cv=0.05
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
18 #float b/c calculs is done in 'virgule flottante'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
19 proc1=subprocess.Popen ("awk '{sum=sum+$2} END {print sum}' %s" % chr_len_file, shell=True, stdout=subprocess.PIPE)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
20 genome_len = float (proc1.communicate()[0])
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
21 if (proc1.returncode !=0):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
22 raise Exception ("In calculate_window_size(), returncode of proc1 (genome_len) = i%" % proc1.returncode)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
23
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
24 if format == "bed" :
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
25
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
26 #proc_RC_bed=subprocess.Popen ("wc -l < %s > lines;read nbr_reads < lines;echo $nbr_reads" % input_file, shell=True, stdout=subprocess.PIPE)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
27 proc_RC_bed=subprocess.Popen ("grep -c 'chr' < %s" % input_file, shell=True, stdout=subprocess.PIPE)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
28 read_count = int (proc_RC_bed.communicate()[0] )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
29
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
30 #print ("read_count = %i\n" % read_count)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
31 if (proc_RC_bed.returncode !=0):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
32 raise Exception ("In calculate_window_size(), returncode of proc_RC_bed (read_count) = i%" % proc_RC_bed.returncode)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
33
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
34 elif format == "bam":
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
35 # get index, get read count (can't pipe into index)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
36 proc_index=subprocess.Popen ("samtools index %s" % input_file, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
37 #print "samtools index "+str(input_file)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
38 proc_index.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
39 proc_RC_bam=subprocess.Popen ("samtools idxstats %s | awk '{s=s+$3} END {print s}'" % input_file, shell=True, stdout=subprocess.PIPE )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
40 read_count=int(proc_RC_bam.communicate()[0])
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
41
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
42 else :
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
43 # format = sam : convert to bam, get index, get read count
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
44 proc_SamToBam=subprocess.Popen ("samtools view -bSh %s > %s.bam" % (input_file,input_file), shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
45 proc_SamToBam.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
46 proc_index=subprocess.Popen ("samtools index %s.bam" % input_file, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
47 proc_index.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
48 # get read count
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
49 proc_RC_bam=subprocess.Popen ("samtools idxstats %s.bam | awk '{s+=$3} END {print s}'" % input_file, shell=True, stdout=subprocess.PIPE )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
50 read_count=int(proc_RC_bam.communicate()[0])
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
51
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
52
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
53 # w's type is float, & round returns float.0
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
54 return int(round(genome_len/(read_count *cv*cv )))
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
55
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
56
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
57 def correct_hg19 (hg19Len,corrected_hg19Len ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
58 ''' this function corrects hg19.len file format : adds tab between the columns instead of space '''
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
59
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
60 i=open(hg19Len)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
61 o=open(corrected_hg19Len, "w")
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
62 for line in i.readlines():
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
63 col=line.split(" ")
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
64 col.insert(1, "\t")
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
65 o.write("".join(col))
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
66
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
67 i.close()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
68 o.close()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
69
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
70 return
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
71
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
72
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
73 def main():
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
74
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
75 input_chip_file = sys.argv[1]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
76 input_control_file = sys.argv[2]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
77 hmcan_config_file = sys.argv[3]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
78 gccount_config_file = sys.argv[4]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
79 project_name = sys.argv[5]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
80 output_peaks_file = sys.argv[6]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
81 output_regions_file = sys.argv[7]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
82 output_density_file = sys.argv[8]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
83 output_posterior_proba_file = sys.argv[9]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
84 hmcan_log_report = sys.argv[10]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
85 chr_len_file = sys.argv[11]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
86 format = sys.argv[12]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
87 genome = sys.argv[13]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
88 root_dir = sys.argv[14]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
89
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
90 #binary files
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
91 GCCOUNT="/usr/bin/HMCan/HMCanV1.20/Utils/GCCount/gccount"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
92 HMCAN="/usr/bin/HMCan/HMCanV1.20/src/HMCan"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
93
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
94 ###### CREATE ANNOTATION FILES #########
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
95 databasePath = root_dir+"/database/files"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
96
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
97 subprocess.Popen('mkdir -p '+databasePath+'/nebulaAnnotations', shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
98 subprocess.Popen('mkdir -p '+databasePath+'/nebulaAnnotations/'+genome, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
99
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
100 nebulaGenomePath=databasePath+"/nebulaAnnotations/"+genome
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
101
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
102 FAIFILE='n'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
103 LENFILE='n'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
104 DICTFILE='n'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
105 CHROFILE='n'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
106 MAPFILE='n'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
107
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
108 if not os.path.isdir(nebulaGenomePath+"/chromosomes"):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
109 subprocess.Popen('mkdir -p '+nebulaGenomePath+'/chromosomes', shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
110 CHROFILE='y'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
111
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
112 if not os.path.isfile(nebulaGenomePath+"/"+genome+".len"):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
113 FAIFILE='y'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
114 LENFILE='y'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
115
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
116 if not os.path.isfile(nebulaGenomePath+"/out50m2_"+genome+".gem.mappability"):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
117 MAPFILE='y'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
118
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
119 FILEPATH=databasePath.replace("database/files","tool-data")
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
120
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
121 cmd='bash /usr/bin/create_annotation_files.sh '+FAIFILE+" "+LENFILE+" "+DICTFILE+" "+CHROFILE+" "+FILEPATH+" "+genome+" "+MAPFILE+" "+nebulaGenomePath
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
122 process=subprocess.Popen(cmd, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
123 process.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
124 ############### END ##############
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
125
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
126 # create tmp dir.Returns absolute path to a created tmp_dir
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
127 tmp_dir=tempfile.mkdtemp()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
128 #tmp_dir="/data/tmp/HMcanTest"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
129
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
130 try:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
131
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
132 ## GCCOUNT
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
133
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
134 os.chdir(tmp_dir)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
135
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
136 #add 'window size' and 'step' to gccount config file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
137 window_size=calculate_window_size (nebulaGenomePath+"/"+genome+".len", input_control_file, format)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
138
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
139 #window_size=10000
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
140 #print ("window_size= %i\n" % window_size)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
141
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
142
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
143 #************** EDIT config files (improved)*****************
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
144
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
145 chr_len_file=nebulaGenomePath+"/"+genome+".len"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
146
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
147 #Frist, correct hg19.len file, in case HMCan is run for hg19 (because hg19.len is not tabular on the server, better change it here)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
148 hg19="hg19"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
149 if (hg19 in genome):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
150 correct_hg19 (chr_len_file,nebulaGenomePath+"/corrected_hg19Len_file.len")
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
151 param_len=nebulaGenomePath+"/corrected_hg19Len_file.len"
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
152
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
153 else:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
154 #to make my life easier..
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
155 param_len= chr_len_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
156
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
157 #Edit gc count config file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
158 cmd_step ="sed -i \"/step/c\step = %s\" %s" % ( window_size , gccount_config_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
159 cmd_window ="sed -i \"/window/c\window = %s\" %s" % ( window_size , gccount_config_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
160 cmd_chrLen = "sed -i \"s~chrLenFile =.*~chrLenFile = "+param_len+"~g\" "+gccount_config_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
161 cmd_chrFiles = "sed -i \"s~chrFiles =.*~chrFiles = "+nebulaGenomePath+"/chromosomes~g\" "+gccount_config_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
162 cmd_gemMappabilityFile = "sed -i \"s~gemMappabilityFile =.*~gemMappabilityFile = "+nebulaGenomePath+"/out50m2_"+genome+".gem.mappability~g\" "+gccount_config_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
163
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
164
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
165 s=subprocess.Popen(args=cmd_step, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
166 s.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
167
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
168 w=subprocess.Popen(args=cmd_window, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
169 w.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
170
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
171 cL=subprocess.Popen(args=cmd_chrLen, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
172 cL.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
173
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
174 cF=subprocess.Popen(args=cmd_chrFiles, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
175 cF.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
176
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
177 cM=subprocess.Popen(args=cmd_gemMappabilityFile, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
178 cM.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
179
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
180 #*********** END edit config files ****************************
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
181
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
182
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
183 ##call gccount /dev/null
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
184 gc_proc=subprocess.Popen(args= "%s %s >> %s 2>&1" % (GCCOUNT, " ".join(['-conf', gccount_config_file]), hmcan_log_report), shell=True, stderr=subprocess.PIPE)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
185 gc_stderr_data = gc_proc.communicate()[1] # waits for process to terminate, returns (stdoutdata, stderrdata)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
186 #if (gc_proc.returncode !=0):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
187 # raise Exception("GCcount returncode = %i\n GCcount stderr : %s\n" % (gc_proc.returncode,gc_stderr_data ))
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
188
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
189 # Find outputs: .cnp files
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
190 # glob returns list of absolute paths of files.cnp in tmp_dir
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
191 cnp_list=glob.glob('*.cnp')
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
192 if (len(cnp_list) == 0):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
193 raise Exception("Error while running Gccount : program did not generate outputs for HMCan (file.cnp) !\n GCCOUNT stderr : %s\n" % gc_stderr_data)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
194 cnp_file=cnp_list[0]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
195 #print "GC PROFIL file :%s\n" % cnp_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
196
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
197 ## HMCAN
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
198 # EDIT hmcan config file : add 'GCIndex' and 'largeBinLength'
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
199 cmd_gc="sed -i \"/GCIndex/c\GCIndex %s\" %s" % ( cnp_file , hmcan_config_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
200 cmd_bin="sed -i \"/largeBinLength/c\largeBinLength %s\" %s" % ( window_size , hmcan_config_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
201 cmd_chrFiles = "sed -i \"s~genomePath.*~genomePath "+nebulaGenomePath+"/chromosomes~g\" "+hmcan_config_file
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
202
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
203 g=subprocess.Popen(args=cmd_gc, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
204 g.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
205
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
206 b=subprocess.Popen(args=cmd_bin, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
207 b.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
208
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
209 cF=subprocess.Popen(args=cmd_chrFiles, shell=True)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
210 cF.wait()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
211
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
212 #call HMCan , hmcan_log_report
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
213 hmcan_proc= subprocess.Popen(args= "%s %s >> %s 2>&1" % (HMCAN, " ".join([input_chip_file, input_control_file, hmcan_config_file , project_name]), hmcan_log_report ), shell=True, stderr=subprocess.PIPE)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
214 hmcan_stderr_data=hmcan_proc.communicate()[1]
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
215 if (hmcan_proc.returncode !=0):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
216 raise Exception ("Error occured, HMCan returncode = %i\n HMCan stderr : %s\n" % ( hmcan_proc.returncode, hmcan_stderr_data ) )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
217
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
218 #deal with outputs : copy outputs from tmp_dir to dataset_XXX :
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
219
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
220 #shutil.move( os.path.join (tmp_dir,"%s_peaks.bed" % project_name ), output_peaks_file)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
221 shutil.move( os.path.join (tmp_dir,"%s_peaks.narrowPeak" % project_name ), output_peaks_file)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
222 shutil.move( os.path.join( tmp_dir, "%s_regions.bed" % project_name ) ,output_regions_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
223 if (output_posterior_proba_file !='None') :
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
224 shutil.move( os.path.join( tmp_dir, "%s_posterior.wig" % project_name ) ,output_posterior_proba_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
225 if (output_density_file != 'None'):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
226 shutil.move( os.path.join( tmp_dir, "%s.wig" % project_name ) ,output_density_file )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
227
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
228 #Handle exceptions
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
229 except OSError:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
230 sys.stderr.write ( "Error occured while runing HMCan : trying to execute a non existing file.\n" )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
231 #remove tmp_dir created:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
232 if os.path.exists( tmp_dir ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
233 shutil.rmtree(tmp_dir)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
234 raise
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
235
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
236 except ValueError:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
237 sys.stderr.write ( "Error occured while runing HMCan : Popen is called with invalid arguments.\n" )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
238 if os.path.exists( tmp_dir ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
239 shutil.rmtree(tmp_dir)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
240 raise
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
241
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
242 #Handle other
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
243 except Exception:
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
244 sys.stderr.write ( "Error occured while runing HMCan\n" )
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
245 if os.path.exists( tmp_dir ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
246 shutil.rmtree(tmp_dir)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
247 raise
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
248
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
249 #clean up my mess
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
250 if os.path.exists( tmp_dir ):
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
251 shutil.rmtree(tmp_dir)
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
252
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
253
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
254 #main
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
255
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
256 if __name__=='__main__':
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
257 main()
c7901290c849 Uploaded
jbrayet
parents:
diff changeset
258