code: def _read_bam(bam_fn, precursors):
      
      mode = "r" if bam_fn.endswith("sam") else "rb"
      handle = pysam.Samfile(bam_fn, mode)
      reads = defaultdict(realign)
      for line in handle:
          chrom = handle.getrname(line.reference_id)
          # print("%s %s %s %s" % (line.query_name, line.reference_start, line.query_sequence, chrom))
          query_name = line.query_name
          if query_name not in reads:
              reads[query_name].sequence = line.query_sequence
          iso = isomir()
          iso.align = line
          iso.start = line.reference_start
          iso.subs, iso.add = _realign(reads[query_name].sequence, precursors[chrom], line.reference_start)
          reads[query_name].set_precursor(chrom, iso)
  
      reads = _clean_hits(reads)
      return reads
docs: read bam file and perform realignment of hits