docs: def get_indels( self, one_based=True ):
          """Return a data structure containing all indels in the read.
          Returns the tuple (insertions, deletions)
          insertions = [(pos1,ins1), (pos2,ins2)]
          posN = start position (preceding base, VCF-style)
          insN = length of inserted sequence (not including preceding base)
          deletions = [(pos1,del1), (pos2,del2)]
          posN = start position (preceding base, VCF-style)
          delN = length of deleted sequence (not including preceding base)
          """
          cigar = self.get_cigar() #CIGAR_OP = list( 'MIDNSHP=X' )
          insertions = []
          deletions = []
          position_offset = 0
          position_start = self.get_position( one_based=one_based )
          while cigar:
              cigar_size, cigar_op = cigar.pop( 0 )
              if cigar_op in [ 0, 7, 8 ]: #M alignment match (can be a sequence match or mismatch); = sequence match; x sequence mismatch
                  position_offset += cigar_size
              elif cigar_op == 1: #I insertion
                  insertions.append((position_start + position_offset - 1, cigar_size))
              elif cigar_op == 2: #D deletion from the reference
                  deletions.append((position_start + position_offset - 1, cigar_size))
                  position_offset += cigar_size
              elif cigar_op == 3: #N skipped region from the reference
                  position_offset += cigar_size
              elif cigar_op == 4: #S soft clipping (clipped sequences present in SEQ)
                  pass
              elif cigar_op == 5: #H hard clipping (clipped sequences NOT present in SEQ)
                  position_offset += cigar_size
              elif cigar_op == 6: #P padding (silent deletion from padded reference)
                  pass
              else: #unknown cigar_op
                  print >>sys.stderr, 'unknown cigar_op', cigar_op, cigar_size
          return (insertions, deletions)