示例#1
0
 def intervals(self):
     if self.bed_file is None:
         return {}
     if not self.bed_file.exists:
         raise ValueError(f"can not find the bed file: {self.bed_file}")
     intervals = defaultdict(list)
     with open(self.bed_file) as fp:
         for line in fp:
             chrom, start, end, *_ = line.strip().split('\t')
             intervals[chrom].append(
                 Interval(int(start), int(end), chrom=chrom))
     return {chrom: Interval.merge(intervals[chrom]) for chrom in intervals}
示例#2
0
 def within_interval(self, segment):
     if not self.intervals:
         return True
     if segment.reference_name not in self.intervals:
         return False
     current_position = Interval(
         segment.reference_start or 0,
         segment.reference_end
         or segment.reference_start + segment.query_length,
         chrom=segment.reference_name)
     for interval in self.intervals[segment.reference_name]:
         if interval.distance(current_position) < self.flank_size:
             return True
     return False