Example #1
0
 def polishSegment(self, seg, als):
     # type: (Segment, List[AlignmentPiece]) -> AlignmentPiece
     sys.stdout.trace("Polishing segment", seg)
     w = max(900, params.k)
     r = 50
     first = seg.left / w
     last = min(seg.right + w - 1, len(seg.contig)) / w
     segs = []
     for i in range(first, last + 1):
         segs.append(
             Segment(seg.contig, max(0, i * w - r),
                     min(len(seg.contig), (i + 1) * w + r)))
     als_by_segment = [[] for i in range(last - first + 1)]
     for al in als:
         l = al.seg_to.left / w
         r = al.seg_to.right / w + 1
         for i in range(max(0, l - first - 1),
                        min(last - first + 1, r - first + 2)):
             if al.seg_to.inter(segs[i]):
                 als_by_segment[i].append(al)
     res_als = []
     for seg1, seg_als in zip(segs, als_by_segment):
         if seg1.inter(seg):
             res_als.append(self.polishSmallSegment(seg1, seg_als))
     res = AlignmentPiece.GlueOverlappingAlignments(res_als)
     return res.reduce(target=seg)
Example #2
0
 def testManual(self):
     contig1 = Contig("ACGTACGTA", "from")
     contig2 = Contig("ACTACGTACGTACAT", "to")
     al1 = AlignmentPiece(contig1.asSegment(), contig2.segment(0, 8),
                          "2M1I6M")
     al2 = AlignmentPiece(contig1.segment(0, 8), contig2.segment(7, 15),
                          "8M")
     glued = AlignmentPiece.GlueOverlappingAlignments([al1, al2])
     assert glued.cigar == "2M1I5M8M", str(glued) + " " + glued.cigar
     assert glued.seg_from.Seq(
     ) == "ACGTACGTACGTACGT", str(glued) + " " + glued.cigar
     assert al1.reduce(query=contig1.segment(0, 2)).cigar == "2M"
     assert al1.reduce(query=contig1.segment(0, 3)).cigar == "2M"
     assert al1.reduce(query=contig1.segment(0, 4)).cigar == "2M1I1M"