@@ -33,8 +33,7 @@ def float01(x):
3333 return x
3434
3535 parser .add_argument (
36- '-M' ,
37- '--major' ,
36+ '--threshold' ,
3837 help = 'Threshold to include variant at position' ,
3938 type = float01 ,
4039 metavar = 'FLOAT' ,
@@ -100,7 +99,7 @@ def float01(x):
10099
101100 parser .add_argument (
102101 '-g' ,
103- '--gap ' ,
102+ '--gaps ' ,
104103 help = 'Gap position and size' ,
105104 type = str ,
106105 metavar = 'INT,INT[,INT,INT[,INT,INT,...]]' ,
@@ -131,12 +130,10 @@ def float01(x):
131130 )
132131
133132 parser .add_argument (
134- '-d' ,
135- '--depth' ,
136- help = 'Depth of position to report variant' ,
137- type = int ,
138- metavar = 'INT' ,
139- default = 20 ,
133+ 'depth_file' ,
134+ help = 'Depth file from samtools' ,
135+ type = str ,
136+ metavar = 'depth-file' ,
140137 )
141138
142139 args = parser .parse_args ()
@@ -176,9 +173,9 @@ def float01(x):
176173 parser .error ('Size must be integer' )
177174
178175 # Check gap
179- if args .gap :
176+ if args .gaps :
180177 try :
181- gap = args .gap
178+ gap = args .gaps
182179 gap = gap .split (',' )
183180 gap = [float (x ) for x in gap ]
184181 gap_decimal = [x % 1 for x in gap ]
@@ -188,14 +185,10 @@ def float01(x):
188185 parser .error ('Gap size missing' )
189186 gap = [int (x ) for x in gap ]
190187 gap = [[gap [x ], gap [x + 1 ]] for x in range (0 , len (gap ), 2 )]
191- args .gap = gap
188+ args .gaps = gap
192189 except ValueError :
193190 parser .error ('Gap must be integer' )
194191
195- # Check depth
196- if args .depth < 0 :
197- parser .error ('Depth argument must not be negative' )
198-
199192 return args
200193
201194
@@ -216,9 +209,9 @@ def parse_vcf(vcf_file, threshold):
216209 ref = line [3 ]
217210 alt = line [4 ]
218211 info = dict ([
219- j
220- if len (j )== 2
221- else j + ["" ]
212+ j
213+ if len (j )== 2
214+ else j + ["" ]
222215 for j in map (
223216 lambda i : str .split (i , "=" ), line [7 ].split (";" )
224217 )
@@ -277,10 +270,11 @@ def add_extension(depth_df, ex_len=4):
277270 ex_len Number of position to extend upstream and downstream
278271 """
279272 var_df = depth_df [depth_df [list ("ATCG" )].any (axis = 1 )][["pos" ]+ list ("ATCG" )]
273+ extended_depth_df = depth_df .copy ()
280274 for i in var_df ["pos" ]:
281275 stamp = depth_df .loc [depth_df ["pos" ] == i , list ("ATCG" )]
282- depth_df .loc [(depth_df ["pos" ] >= i - ex_len ) & (depth_df ["pos" ] <= i + ex_len ), list ("ATCG" )] = list (stamp .iloc [0 ])
283- return depth_df
276+ extended_depth_df .loc [(depth_df ["pos" ] >= i - ex_len ) & (depth_df ["pos" ] <= i + ex_len ), list ("ATCG" )] = list (stamp .iloc [0 ])
277+ return extended_depth_df
284278
285279
286280def main ():
@@ -296,28 +290,29 @@ def main():
296290 depth_df = depth_df .merge (vcf_df , how = "left" )
297291 if args .gaps :
298292 depth_df = add_gaps (depth_df , args .gaps )
299- depth_df = add_extension (depth_df , args .extend )
293+ extended_depth_df = add_extension (depth_df , args .extend )
300294 # variant_df, extended_variant_df = make_variant_df(depth_df, args.extend)
301295 if args .figure :
302296 colors = ['#5772B2' , '#3A9276' , '#F0430F' , '#B615D6' ,] # '#DEE0E3']
303297 # fig = plt.figure(figsize=args.size)
304298 plt .rcParams ["figure.dpi" ] = args .dpi
305- ax = depth_df .plot .bar (
299+ ax = extended_depth_df .plot .bar (
306300 x = 'pos' ,
301+ y = list ("ATCG" ),
307302 stacked = True ,
308303 color = colors ,
309304 figsize = args .size , #(10.5,0.75),
310305 rot = 30 ,
311306 width = 1 ,
312- ylim = [0 , 100 ],
313- yticks = [0 , 50 , 100 ],
307+ ylim = [0.0 , 1.0 ],
308+ yticks = [0.0 , 0. 50 , 1.00 ],
314309 xticks = list (range (0 , len (depth_df ), args .x_tick )),
315- # legend=False,
310+ legend = False ,
316311 )
317312 ax2 = ax .twinx ()
318- depth_df .plot .line (
313+ extended_depth_df .plot .line (
319314 x = 'pos' ,
320- y = 'sum_depth ' ,
315+ y = 'depth ' ,
321316 lw = 0.5 ,
322317 secondary_y = True ,
323318 # ylim=[1, max(list(depth_df['sum_depth']).remove(np.inf))],
@@ -332,30 +327,18 @@ def main():
332327 ax .figure .savefig (args .figure , bbox_inches = 'tight' )
333328
334329 if args .table_relative :
335- relative_variant_df = variant_df [
336- (variant_df ['A' ] > 0 ) | # or
337- (variant_df ['T' ] > 0 ) | # or
338- (variant_df ['C' ] > 0 ) | # or
339- (variant_df ['G' ] > 0 )
340- ]
341- relative_variant_df .to_csv (
342- args .table_relative ,
343- columns = ['pos' , 'A' , 'T' , 'C' , 'G' ],
344- index = False ,
345- )
346-
347- if args .table_absolute :
348- absolute_variant_df = depth_df [
330+ relative_variant_df = depth_df [
349331 (depth_df ['A' ] > 0 ) |
350332 (depth_df ['T' ] > 0 ) |
351333 (depth_df ['C' ] > 0 ) |
352334 (depth_df ['G' ] > 0 )
353335 ]
354- absolute_variant_df .to_csv (
355- args .table_absolute ,
336+ relative_variant_df .to_csv (
337+ args .table_relative ,
356338 columns = ['pos' , 'A' , 'T' , 'C' , 'G' ],
357339 index = False ,
358340 )
359341
342+
360343if __name__ == "__main__" :
361344 main ()
0 commit comments