@@ -247,40 +247,11 @@ def get_overlapping_restriction_fragment(resFrag, chrom, read):
247
247
return None
248
248
249
249
250
- def are_contiguous_fragments (frag1 , frag2 , chr1 , chr2 ):
251
- '''
252
- Compare fragment positions to check if they are contiguous
253
- '''
254
- ret = False
255
- if chr1 == chr2 :
256
- if int (frag1 .start ) < int (frag2 .start ):
257
- d = int (frag2 .start ) - int (frag1 .end )
258
- else :
259
- d = int (frag1 .start ) - int (frag2 .end )
260
-
261
- if d == 0 :
262
- ret = True
263
-
264
- return ret
265
-
266
- def is_religation (read1 , read2 , frag1 , frag2 ):
267
- """
268
- Reads are expected to map adjacent fragments
269
- Check the orientation of reads -><-
270
-
271
- """
272
- ret = False
273
- if are_contiguous_fragments (frag1 , frag2 , read1 .tid , read2 .tid ):
274
- if get_read_strand (r1 ) == "+" and get_read_strand (r2 ) == "-" :
275
- ret = True
276
- return ret
277
-
278
-
279
250
def is_self_circle (read1 , read2 ):
280
251
"""
281
252
Both reads are expected to be on the same restriction fragments
282
- Check the orientation of reads <-->
283
253
254
+ Check the orientation of reads <-->
284
255
read1 : [AlignedRead]
285
256
read2 : [AlignedRead]
286
257
"""
@@ -313,6 +284,7 @@ def is_dangling_end(read1, read2):
313
284
def get_valid_orientation (read1 , read2 ):
314
285
"""
315
286
Both reads are expected to be on the different restriction fragments
287
+
316
288
Check the orientation of reads ->-> / <-<- / -><- / <-->
317
289
318
290
read1 : [AlignedRead]
@@ -346,7 +318,6 @@ def get_PE_fragment_size(read1, read2, resFrag1, resFrag2, interactionType):
346
318
interactionType : Type of interaction from get_interaction_type() [str]
347
319
348
320
"""
349
-
350
321
fragmentsize = None
351
322
352
323
# Get oriented reads
@@ -359,11 +330,11 @@ def get_PE_fragment_size(read1, read2, resFrag1, resFrag2, interactionType):
359
330
rfrag1 = resFrag1
360
331
rfrag2 = resFrag2
361
332
362
- ## In this case use the read 3' end !
333
+ ## In this case used the read 3' end !
363
334
r1pos = get_read_start (r1 )
364
335
r2pos = get_read_start (r2 )
365
336
366
- if interactionType == "DE" or interactionType == "RE" :
337
+ if interactionType == "DE" :
367
338
fragmentsize = r2pos - r1pos
368
339
elif interactionType == "SC" :
369
340
fragmentsize = (r1pos - rfrag1 .start ) + (rfrag2 .end - r2pos )
@@ -392,7 +363,6 @@ def get_interaction_type(read1, read1_chrom, resfrag1, read2,
392
363
- Interaction
393
364
- Self circle
394
365
- Dangling end
395
- - Religation
396
366
- Unknown
397
367
398
368
##
@@ -405,7 +375,6 @@ def get_interaction_type(read1, read1_chrom, resfrag1, read2,
405
375
verbose = verbose mode [logical]
406
376
407
377
"""
408
-
409
378
# If returned InteractionType=None -> Same restriction fragment
410
379
# and same strand = Dump
411
380
interactionType = None
@@ -419,8 +388,6 @@ def get_interaction_type(read1, read1_chrom, resfrag1, read2,
419
388
# Dangling_end -> <-
420
389
elif is_dangling_end (read1 , read2 ):
421
390
interactionType = "DE"
422
- elif is_religation (read1 , read2 , resfrag1 , resfrag2 ):
423
- interactionType = "RE"
424
391
else :
425
392
interactionType = "VI"
426
393
elif r1 .is_unmapped or r2 .is_unmapped :
@@ -501,7 +468,6 @@ def get_read_tag(read, tag):
501
468
# Initialize variables
502
469
reads_counter = 0
503
470
de_counter = 0
504
- re_counter = 0
505
471
sc_counter = 0
506
472
valid_counter = 0
507
473
valid_counter_FF = 0
@@ -531,7 +497,6 @@ def get_read_tag(read, tag):
531
497
532
498
if allOutput :
533
499
handle_de = open (outputDir + '/' + baseReadsFile + '.DEPairs' , 'w' )
534
- handle_re = open (outputDir + '/' + baseReadsFile + '.REPairs' , 'w' )
535
500
handle_sc = open (outputDir + '/' + baseReadsFile + '.SCPairs' , 'w' )
536
501
handle_dump = open (outputDir + '/' + baseReadsFile + '.DumpPairs' , 'w' )
537
502
handle_single = open (outputDir + '/' + baseReadsFile + '.SinglePairs' , 'w' )
@@ -580,7 +545,9 @@ def get_read_tag(read, tag):
580
545
r2_resfrag = None
581
546
r2_chrom = None
582
547
548
+
583
549
if r1_resfrag is not None or r2_resfrag is not None :
550
+
584
551
interactionType = get_interaction_type (r1 , r1_chrom , r1_resfrag , r2 , r2_chrom , r2_resfrag , verbose )
585
552
dist = get_PE_fragment_size (r1 , r2 , r1_resfrag , r2_resfrag , interactionType )
586
553
cdist = get_cis_dist (r1 , r2 )
@@ -641,10 +608,6 @@ def get_read_tag(read, tag):
641
608
de_counter += 1
642
609
cur_handler = handle_de if allOutput else None
643
610
644
- elif interactionType == "RE" :
645
- re_counter += 1
646
- cur_handler = handle_re if allOutput else None
647
-
648
611
elif interactionType == "SC" :
649
612
sc_counter += 1
650
613
cur_handler = handle_sc if allOutput else None
@@ -729,13 +692,13 @@ def get_read_tag(read, tag):
729
692
or2_fragname + "\t " +
730
693
str (or1 .mapping_quality ) + "\t " +
731
694
str (or2 .mapping_quality ) + "\n " )
732
-
733
695
## Keep initial order
734
696
if samOut :
735
697
r1 .tags = r1 .tags + [('CT' , str (interactionType ))]
736
698
r2 .tags = r2 .tags + [('CT' , str (interactionType ))]
737
699
handle_sam .write (r1 )
738
700
handle_sam .write (r2 )
701
+
739
702
740
703
if (reads_counter % 100000 == 0 and verbose ):
741
704
print "##" , reads_counter
@@ -744,7 +707,6 @@ def get_read_tag(read, tag):
744
707
handle_valid .close ()
745
708
if allOutput :
746
709
handle_de .close ()
747
- handle_re .close ()
748
710
handle_sc .close ()
749
711
handle_dump .close ()
750
712
handle_single .close ()
@@ -762,7 +724,6 @@ def get_read_tag(read, tag):
762
724
handle_stat .write (
763
725
"Valid_interaction_pairs_FR\t " + str (valid_counter_FR ) + "\n " )
764
726
handle_stat .write ("Dangling_end_pairs\t " + str (de_counter ) + "\n " )
765
- handle_stat .write ("Religation_pairs\t " + str (re_counter ) + "\n " )
766
727
handle_stat .write ("Self_Cycle_pairs\t " + str (sc_counter ) + "\n " )
767
728
handle_stat .write ("Single-end_pairs\t " + str (single_counter ) + "\n " )
768
729
handle_stat .write ("Dumped_pairs\t " + str (dump_counter ) + "\n " )
0 commit comments