def call_aligner(self, assembled_region): """Helper function to call aligner module.""" if not assembled_region.reads: return [] contig = assembled_region.region.reference_name ref_start = max( 0, min(assembled_region.read_span.start, assembled_region.region.start) - _REF_ALIGN_MARGIN) ref_end = min( self.ref_reader.contig(contig).n_bases, max(assembled_region.read_span.end, assembled_region.region.end) + _REF_ALIGN_MARGIN) ref_prefix = self.ref_reader.query( ranges.make_range(contig, ref_start, assembled_region.region.start)) ref = self.ref_reader.query(assembled_region.region) # If we can't create the ref suffix then return the original alignments. if ref_end <= assembled_region.region.end: return assembled_region.reads else: ref_suffix = self.ref_reader.query( ranges.make_range(contig, assembled_region.region.end, ref_end)) ref_region = ranges.make_range(contig, ref_start, ref_end) ref_seq = ref_prefix + ref + ref_suffix reads_aligner = aligner.Aligner(self.config.aln_config, ref_region, ref_seq) return reads_aligner.align_reads([ ref_prefix + target + ref_suffix for target in assembled_region.haplotypes ], assembled_region.reads)
def make_test_aligner(self, ref_seq=None, region=None): config = realigner_pb2.RealignerOptions.AlignerOptions(match=1, mismatch=1, gap_open=2, gap_extend=1, k=3, error_rate=.02) ref_seq = ref_seq or 'AAAAAAA' region = region or ranges.make_range('ref', 10, 10 + len(ref_seq)) return aligner.Aligner(config, region, ref_seq)