@@ -438,7 +438,7 @@ def getScores(self, or_path_id, path_storage, type):
438
438
continue
439
439
next_nor_path = gf .nor_path_id (next_or_path )
440
440
#TODO: optimize homology counting, once per all paths
441
- if next_nor_path in homologous_paths :
441
+ if next_nor_path in homologous_paths or next_nor_path == nor_path_id :
442
442
continue
443
443
else :
444
444
if not precounted :
@@ -562,6 +562,8 @@ def generateScaffolds(self):
562
562
cur_scaffold = [or_from_path_id ]
563
563
cur_path_id = or_from_path_id
564
564
nor_used_path_ids .add (or_from_path_id .strip ('-+' ))
565
+ #lets add bidirectional expansion
566
+ tried_reverse = False
565
567
while True :
566
568
next_path_id = self .findNextPath (cur_path_id , nor_used_path_ids , "weight" )
567
569
if next_path_id == "NONE" :
@@ -570,10 +572,29 @@ def generateScaffolds(self):
570
572
571
573
if next_path_id == "DONE" :
572
574
self .logger .info ("All done, stopped at telomere" )
573
- break
575
+ if tried_reverse :
576
+ break
577
+ else :
578
+ self .logger .info (f"Reversing { cur_scaffold } " )
579
+ cur_scaffold = [gf .rc_path_id (x ) for x in cur_scaffold ]
580
+ cur_scaffold .reverse ()
581
+ self .logger .info (f"Reversed { cur_scaffold } " )
582
+ cur_path_id = cur_scaffold [- 1 ]
583
+ tried_reverse = True
584
+ continue
574
585
elif next_path_id == "NONE" :
575
586
self .logger .info ("Failed to find extension, stopping" )
576
- break
587
+ if tried_reverse :
588
+ break
589
+ else :
590
+ self .logger .info (f"Reversing { cur_scaffold } " )
591
+ cur_scaffold = [gf .rc_path_id (x ) for x in cur_scaffold ]
592
+ cur_scaffold .reverse ()
593
+ self .logger .info (f"Reversed { cur_scaffold } " )
594
+ cur_path_id = cur_scaffold [- 1 ]
595
+ tried_reverse = True
596
+ continue
597
+
577
598
else :
578
599
hom_before = False
579
600
nor_new_path_id = gf .nor_path_id (next_path_id )
@@ -587,13 +608,23 @@ def generateScaffolds(self):
587
608
hom_before = True
588
609
if hom_before :
589
610
self .logger .info (f"Homologous paths before in scaffold, not extending { cur_path_id } with { next_path_id } " )
590
- break
611
+ if tried_reverse :
612
+ break
613
+ else :
614
+ cur_scaffold = [gf .rc_path_id (x ) for x in cur_scaffold ]
615
+ cur_scaffold .reverse ()
616
+ cur_path_id = cur_scaffold [- 1 ]
617
+ tried_reverse = True
618
+ continue
591
619
self .logger .info (f"Extending { cur_path_id } with { next_path_id } " )
592
620
593
621
#possibly not do so with paths of length one? They can be more successful in other direction
594
622
cur_scaffold .append (next_path_id )
595
623
nor_used_path_ids .add (next_path_id .strip ('-+' ))
596
624
cur_path_id = next_path_id
625
+ #Reversing for comparison with previous runs only
626
+ cur_scaffold = [gf .rc_path_id (x ) for x in cur_scaffold ]
627
+ cur_scaffold .reverse ()
597
628
self .logger .info (f"scaffold { cur_scaffold } \n " )
598
629
if len (cur_scaffold ) > 1 :
599
630
res .append (cur_scaffold )
0 commit comments