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
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)))
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)))
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)
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))
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)
def query(self, region): return iter(variant for variant in self.variants if ranges.ranges_overlap( variant_utils.variant_range(variant), region))
def query(self, region): return iter( variant for variant in self.variants if ranges.ranges_overlap(variant_utils.variant_range(variant), region) )