code: def find_splice(cigar):
      '''Takes a cigar string and finds the first splice position as
      an offset from the start. To find the 5' end (read coords) of
      the junction for a reverse read, pass in the reversed cigar tuple'''
  
      offset = 0
      # a soft clip at the end of the read is taken as splicing
      # where as a soft clip at the start is not.
      if cigar[0][0] == 4:
          offset = cigar[0][1]
          cigar = cigar[1:]
  
      for op, bases in cigar:
          if op in (3, 4):
              # N or S: found the splice
              return offset
          elif op in (0, 2, 7, 8):
              # M, D, = or X: reference consuming
              offset += bases
          elif op in (1, 5, 6):
              # I, H, P: non-reference consuming
              continue
          else:
              raise ValueError("Bad Cigar operation: %i" % op)
  
      return Falsf find_splice(cigar):
      '''Takes a cigar string and finds the first splice position as
      an offset from the start. To find the 5' end (read coords) of
      the junction for a reverse read, pass in the reversed cigar tuple'''
  
      offset = 0
      # a soft clip at the end of the read is taken as splicing
      # where as a soft clip at the start is not.
      if cigar[0][0] == 4:
          offset = cigar[0][1]
          cigar = cigar[1:]
  
      for op, bases in cigar:
          if op in (3, 4):
              # N or S: found the splice
              return offset
          elif op in (0, 2, 7, 8):
              # M, D, = or X: reference consuming
              offset += bases
          elif op in (1, 5, 6):
              # I, H, P: non-reference consuming
              continue
          else:
              raise ValueError("Bad Cigar operation: %i" % op)
  
      return False
docs: Takes a cigar string and finds the first splice position as
      an offset from the start. To find the 5' end (read coords) of
      the junction for a reverse read, pass in the reversed cigar tuple