def add(self, read): if self.tag in ['LENGTH', 'LEN']: val = len(read.seq) elif self.tag == 'MAPQ': val = read.mapq elif self.tag == 'MISMATCH': val = read_calc_mismatches(read) else: try: val = read.opt(self.tag) except KeyError: self.missing += 1 return if not val in self.bins: self.bins[val] = 0 self._keys.append(val) self.bins[val] += 1 if not self._min or self._min > val: self._min = val if not self._max or self._max < val: self._max = val
def filter(self, bam, read): if read.is_unmapped: return False if read_calc_mismatches(read) <= self.num: return True chrom = bam.getrname(read.tid) mm = 0 snps = 0 for op, pos, seq in read_calc_variations(read): if not self.dbsnp.is_valid_variation(chrom, op, pos, seq, self.verbose): mm += 1 else: snps += 1 if mm > self.num: return False if snps: read.tags = read.tags + [('ZS', snps)] return True
def filter(self, bam, read): if read.is_unmapped: return False if read_calc_mismatches(read) > self.num: return False return True
def filter(self, bam, read): return read_calc_mismatches(read) <= self.ratio * len(read.seq)