annotate predict/predict_RNAs.py @ 119:7bb98e9296e9 draft default tip

Uploaded
author tyty
date Tue, 14 Apr 2015 14:18:40 -0400
parents 75e3711e23c4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
117
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
1 #RNA structure prediction & Output and illustrate reactivities
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
2
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
3 import sys
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
4 import shlex
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
5 import subprocess
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
6 import tarfile
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
7 from parse_dis_pac import *
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
8 from read_file import *
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
9 from Bio import SeqIO
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
10 import os
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
11 from rtts_plot import *
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
12 import random
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
13 import string
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
14
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
15
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
16 id_file = sys.argv[1]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
17 seq_file = sys.argv[2]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
18 predict_type = sys.argv[3]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
19 temperature = sys.argv[4]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
20 predict_program = sys.argv[5]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
21 output_html = sys.argv[6]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
22 output_directory = sys.argv[7]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
23
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
24
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
25
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
26 flag = False
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
27 if predict_type!='silico': #input reactivity file if provided
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
28 if predict_program == 'rs':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
29 react_file = sys.argv[8]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
30 slope = sys.argv[9]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
31 intercept = sys.argv[10]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
32 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
33 react_file = sys.argv[8]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
34 thres_h = sys.argv[9]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
35 thres_h = float(thres_h)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
36 thres_l = sys.argv[10]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
37 thres_l = float(thres_l)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
38 gqs = sys.argv[11]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
39 gqs = int(gqs)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
40
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
41 react = parse_dist(react_file)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
42 react = react[1]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
43 flag = True
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
44 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
45 if predict_program!='rs':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
46 gqs = sys.argv[8]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
47 gqs = int(gqs)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
48
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
49
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
50 ospath = os.path.realpath(sys.argv[0])
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
51 ost = ospath.split('/')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
52 syspathpt = ""
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
53 for i in range(len(ost)-1):
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
54 syspathpt = syspathpt+ost[i].strip()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
55 syspathpt = syspathpt+'/'
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
56
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
57
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
58 syspath = os.getcwd()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
59
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
60 ids = read_t_file(id_file)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
61 sequences = SeqIO.parse(seq_file, 'fasta')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
62
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
63
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
64 seqs = {}
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
65 for seq in sequences:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
66 seqs[seq.id] = seq.seq.tostring()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
67
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
68 if len(ids)>100: #setup a limit of the number of sequence to be predicted
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
69 print("Number of sequences exceeds limitation!")
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
70 sys.exit(0)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
71
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
72
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
73 #predict RNA structures
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
74
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
75 os.mkdir(output_directory)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
76 flag3 = 0
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
77
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
78 id_predicted = set()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
79 for i in range(len(ids)):
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
80 flag2 = 0
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
81 id_s = ids[i][0]
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
82 #print(id_s)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
83 #Put RNA sequence and reactivities into files
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
84 if id_s in seqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
85 fh = file(os.path.join(syspath,"temp.txt"), 'w')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
86 fh.write('>'+id_s)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
87 fh.write('\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
88 fh.write(seqs[id_s])
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
89 fh.close()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
90 if not flag:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
91 if predict_program == 'rs':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
92 command = shlex.split('Fold %s -T %s %s' % (os.path.join(syspath, 'temp.txt'), temperature, os.path.join(output_directory, '%s.ct' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
93 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
94 command = shlex.split('python %s %s %s %s %s' % (os.path.join(syspathpt, 'ct_to_dot.py'), os.path.join(output_directory, '%s.ct' % id_s), output_directory, id_s, os.path.join(output_directory, '%s.dbn' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
95 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
96 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
97 if gqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
98 os.system('RNAfold < '+syspath+'/temp.txt -T '+str(float(temperature)-273.15)+' --noconv -g > '+output_directory+'/'+id_s+'.dbnb')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
99
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
100 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
101 os.system('RNAfold < '+syspath+'/temp.txt -T '+str(float(temperature)-273.15)+' --noconv --noPS > '+output_directory+'/'+id_s+'.dbnb')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
102 command = shlex.split('python %s %s %s' % (os.path.join(syspathpt, 'dot_convert.py'), os.path.join(output_directory, '%s.dbnb' % id_s), os.path.join(output_directory, '%s.dbn' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
103 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
104 if not gqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
105 command = shlex.split('dot2ct %s %s' % (os.path.join(output_directory, '%s.dbn' % id_s), os.path.join(output_directory, '%s.ct' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
106 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
107 command = shlex.split('mv -f %s %s' % (os.path.join(syspath, '%s_ss.ps' % id_s), os.path.join(output_directory, '%s.ps' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
108 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
109 command = shlex.split('rm %s' % (os.path.join(output_directory, '%s.dbnb' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
110 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
111 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
112 if id_s in react:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
113 fh = file(os.path.join(syspath, "constraint.txt"), 'w')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
114 make_plot(react[id_s], id_s, output_directory) #make a plot of the distribution of the reactivites of the input RNA
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
115 if predict_program == 'rs':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
116 for j in range(0, (len(react[id_s]))):
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
117 if react[id_s][j]!='NA':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
118 fh.write(str(j+1))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
119 fh.write('\t')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
120 fh.write(str(react[id_s][j]))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
121 fh.write('\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
122 fh.close()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
123 command = shlex.split("Fold %s -sh %s -si %s -sm %s -T %s %s" % (os.path.join(syspath, "temp.txt"),
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
124 os.path.join(syspath, "constraint.txt"), intercept, slope, temperature,
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
125 os.path.join(output_directory, "%s.ct" % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
126 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
127 command = shlex.split('python %s %s %s %s %s' % (os.path.join(syspathpt, 'ct_to_dot.py'), os.path.join(output_directory, '%s.ct' % id_s), output_directory, id_s, os.path.join(output_directory, '%s.dbn' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
128 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
129 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
130 fh.write('>'+id_s)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
131 fh.write('\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
132 fh.write(seqs[id_s])
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
133 fh.write('\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
134 for j in range(0, (len(react[id_s]))):
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
135 if react[id_s][j]!='NA':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
136 re = float(react[id_s][j])
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
137 if re>thres_h:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
138 fh.write('x')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
139 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
140 if re<thres_l:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
141 fh.write('|')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
142 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
143 fh.write('.')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
144 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
145 fh.write('.')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
146 fh.write('.')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
147 fh.close()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
148 if gqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
149 os.system('RNAfold < '+syspath+'/constraint.txt -T '+str(float(temperature)-273.15)+' -C --noconv -g > '+output_directory+'/'+id_s+'.dbnb')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
150
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
151 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
152 os.system('RNAfold < '+syspath+'/constraint.txt -T '+str(float(temperature)-273.15)+' -C --noconv --noPS > '+output_directory+'/'+id_s+'.dbnb')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
153 command = shlex.split('python %s %s %s' % (os.path.join(syspathpt, 'dot_convert.py'), os.path.join(output_directory, '%s.dbnb' % id_s), os.path.join(output_directory, '%s.dbn' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
154 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
155 if not gqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
156 command = shlex.split('dot2ct %s %s' % (os.path.join(output_directory, '%s.dbn' % id_s), os.path.join(output_directory, '%s.ct' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
157 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
158 command = shlex.split('mv -f %s %s' % (os.path.join(syspath, '%s_ss.ps' % id_s), os.path.join(output_directory, '%s.ps' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
159 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
160 command = shlex.split('rm %s' % (os.path.join(output_directory, '%s.dbnb' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
161 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
162
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
163 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
164 print(id_s+" not in the data of react!")
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
165 flag2 = 1
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
166 if flag2 == 0:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
167 if predict_program == 'rs':
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
168 command = shlex.split('draw %s.ct %s.ps' % (os.path.join(output_directory, id_s), os.path.join(output_directory, id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
169 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
170 command = shlex.split('rm %s' % (os.path.join(output_directory, '%s.ct' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
171 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
172 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
173 if not gqs:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
174 command = shlex.split('draw %s.ct %s.ps' % (os.path.join(output_directory, id_s), os.path.join(output_directory, id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
175 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
176 command = shlex.split('rm %s' % (os.path.join(output_directory, '%s.ct' % id_s)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
177 subprocess.call(command)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
178 flag3 = 1
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
179 id_predicted.add(id_s)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
180 else:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
181 print(id_s+" not in the data of sequences!")
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
182
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
183 #Remove the unnecessary files
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
184 if flag3 == 1:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
185
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
186 tarball = tarfile.open(os.path.join(output_directory,'prediction_results.tar'), 'w:')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
187 for filename in os.listdir(output_directory):
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
188 filepath = os.path.join(output_directory, filename)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
189 print filepath
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
190 tarball.add(filepath, arcname=filename)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
191 #print os.listdir(syspath)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
192 #print os.listdir(output_directory)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
193 # tarball.add('%s.tif' % os.path.join(syspath, id_s), arcname='%s.tif' % id_s)
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
194 tarball.close()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
195
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
196 h = open(output_html, 'wb' )
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
197 h.write('<html><head><title><h1>Results of RNA structure prediction</h1></title></head><body>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
198
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
199 h.write('<p>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
200 h.write('Click <a href="%s">here</a> to download the compressed file containing all prediction results.\n' % (('prediction_results.tar')))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
201 #h.write('<\p>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
202 h.write('<hr>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
203
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
204
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
205 for id_p in id_predicted:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
206 h.write('<h4>'+id_p+'</h4><p><ul>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
207 h.write('<li><a href="%s">%s</a></li>\n' % (('%s.dbn' % id_p), ('%s.dbn' % id_p)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
208 h.write('<li><a href="%s">%s</a></li>\n' % (('%s.ps' % id_p), ('%s.ps' % id_p)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
209 if flag:
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
210 h.write('<li><a href="%s">%s</a></li>\n' % (('%s.tif' % id_p), ('%s.tif' % id_p)))
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
211 h.write( '</ul></p>\n' )
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
212 h.write('<hr>\n')
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
213 h.write( '</body></html>\n' )
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
214 h.close()
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
215
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
216
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
217
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
218
75e3711e23c4 Uploaded
tyty
parents:
diff changeset
219