Ejemplo n.º 1
0
  def call_debruijn_graph(self, windows, reads):
    """Helper function to call debruijn_graph module."""
    windows_haplotypes = []
    # Build and process de-Bruijn graph for each window.
    for window in windows:
      if window.end - window.start > self.config.ws_config.max_window_size:
        continue
      if not self.ref_reader.is_valid(window):
        continue
      ref = self.ref_reader.query(window)
      # redacted
      dbg_reads = [
          read for read in reads
          if ranges.ranges_overlap(window, utils.read_range(read))
      ]

      with timer.Timer() as t:
        graph = debruijn_graph.build(ref, dbg_reads, self.config.dbg_config)
      graph_building_time = t.GetDuration()

      if not graph:
        candidate_haplotypes = [ref]
      else:
        candidate_haplotypes = graph.candidate_haplotypes()
      if candidate_haplotypes and candidate_haplotypes != [ref]:
        candidate_haplotypes_info = realigner_pb2.CandidateHaplotypes(
            span=window, haplotypes=candidate_haplotypes)
        windows_haplotypes.append(candidate_haplotypes_info)

      self.diagnostic_logger.log_graph_metrics(
          window, graph, candidate_haplotypes, graph_building_time)

    return windows_haplotypes
Ejemplo n.º 2
0
    def query(self, region):
        """Returns an iterator for going through the reads in the region.

    Args:
      region: nucleus.genomics.v1.Range. The query region.

    Returns:
      An iterator over nucleus.genomics.v1.Read protos.
    """
        # redacted
        return (read for read in self.reads
                if ranges.ranges_overlap(region, utils.read_range(read)))
Ejemplo n.º 3
0
    def query(self, region):
        """Iterate over records overlapping a query region.

    Args:
      region: third_party.nucleus.protos.Range, query region.

    Returns:
      An iterator over third_party.nucleus.protos.Read
    """
        # redacted
        return (read for read in self.reads
                if ranges.ranges_overlap(region, utils.read_range(read)))
Ejemplo n.º 4
0
  def query(self, region):
    """Iterate over records overlapping a query region.

    Args:
      region: third_party.nucleus.protos.Range, query region.

    Returns:
      An iterator over third_party.nucleus.protos.Read
    """
    # redacted
    return (read for read in self.reads
            if ranges.ranges_overlap(region, utils.read_range(read)))
Ejemplo n.º 5
0
 def check_overlaps(chr1, start1, end1, chr2, start2, end2, expected):
     nbp = end1 - start1
     read = test_utils.make_read('A' * nbp,
                                 chrom=chr1,
                                 start=start1,
                                 cigar='{}M'.format(nbp))
     region = ranges.make_range(chr2, start2, end2)
     self.assertEqual(utils.read_overlaps_region(read, region),
                      expected)
     # This check ensures we get the same result calling ranges.ranges_overlap.
     self.assertEqual(
         ranges.ranges_overlap(region, utils.read_range(read)),
         expected)
Ejemplo n.º 6
0
def variants_overlap(variant1, variant2):
  """Returns True if the range of variant1 and variant2 overlap.

  This is equivalent to:

    ranges_overlap(variant_range(variant1), variant_range(variant2))

  Args:
    variant1: third_party.nucleus.protos.Variant we want to compare for overlap.
    variant2: third_party.nucleus.protos.Variant we want to compare for overlap.

  Returns:
    True if the variants overlap, False otherwise.
  """
  return ranges.ranges_overlap(variant_range(variant1), variant_range(variant2))
Ejemplo n.º 7
0
 def check_overlaps(chr1, start1, end1, chr2, start2, end2, expected):
   i1 = ranges.make_range(chr1, start1, end1)
   i2 = ranges.make_range(chr2, start2, end2)
   self.assertEquals(ranges.ranges_overlap(i1, i2), expected)
   self.assertEquals(ranges.ranges_overlap(i2, i1), expected)
Ejemplo n.º 8
0
 def query(self, region):
     return iter(variant for variant in self.variants
                 if ranges.ranges_overlap(
                     variant_utils.variant_range(variant), region))
Ejemplo n.º 9
0
 def query(self, region):
   return iter(
       variant for variant in self.variants
       if ranges.ranges_overlap(variant_utils.variant_range(variant), region)
   )