예제 #1
0
  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)
예제 #2
0
 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)