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}
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