code: def filter_reads(self, input_bam, output_bam, metrics_file, paired=False, cpus=16, Q=30):
          
          nodups = re.sub("\.bam$", "", output_bam) + ".nodups.nofilter.bam"
          cmd1 = self.tools.sambamba + " markdup -t {0} -r --compression-level=0 {1} {2} 2> {3}".format(cpus, input_bam, nodups, metrics_file)
          cmd2 = self.tools.sambamba + ' view -t {0} -f bam --valid'.format(cpus)
          if paired:
              cmd2 += ' -F "not (unmapped or mate_is_unmapped) and proper_pair'
          else:
              cmd2 += ' -F "not unmapped'
          cmd2 += ' and not (secondary_alignment or supplementary) and mapping_quality >= {0}"'.format(Q)
          cmd2 += ' {0} |'.format(nodups)
          cmd2 += self.tools.sambamba + " sort -t {0} /dev/stdin -o {1}".format(cpus, output_bam)
          cmd3 = "if [[ -s {0} ]]; then rm {0}; fi".format(nodups)
          cmd4 = "if [[ -s {0} ]]; then rm {0}; fi".format(nodups + ".bai")
          return [cmd1, cmd2, cmd3, cmd4]
docs: Remove duplicates, filter for >Q, remove multiple mapping reads.
          For paired-end reads, keep only proper pairs.