code: def _parse_cigar(self, cigar):
          
          ces = [m.groupdict() for m in cigar_re.finditer(cigar)]
          ref_pos = [None] * len(ces)
          tgt_pos = [None] * len(ces)
          cigar_op = [None] * len(ces)
          ref_cur = tgt_cur = 0
          for i, ce in enumerate(ces):
              ref_pos[i] = ref_cur
              tgt_pos[i] = tgt_cur
              cigar_op[i] = ce["op"]
              step = int(ce["len"])
              if ce["op"] in "=MINX":
                  ref_cur += step
              if ce["op"] in "=MDX":
                  tgt_cur += step
          ref_pos.append(ref_cur)
          tgt_pos.append(tgt_cur)
          return ref_pos, tgt_pos, cigar_op
docs: For a given CIGAR string, return the start positions of
          each aligned segment in ref and tgt, and a list of CIGAR operators.