code: def overlap(self, max_hang=100):
          
          aL, aR = 1, self.reflen
          bL, bR = 1, self.querylen
          aLhang, aRhang = self.start1 - aL, aR - self.end1
          bLhang, bRhang = self.start2 - bL, bR - self.end2
          if self.orientation == '-':
              bLhang, bRhang = bRhang, bLhang
  
          s1 = aLhang + bRhang
          s2 = aRhang + bLhang
          s3 = aLhang + aRhang
          s4 = bLhang + bRhang
  
          # Dovetail (terminal) overlap
          if s1 < max_hang:
              type = 2  # b ~ a
          elif s2 < max_hang:
              type = 1  # a ~ b
          # Containment overlap
          elif s3 < max_hang:
              type = 3  # a in b
          elif s4 < max_hang:
              type = 4  # b in a
          else:
              type = 0
  
          return type
docs: Determine the type of overlap given query, ref alignment coordinates
          Consider the following alignment between sequence a and b:
  
          aLhang \              / aRhang
                  \------------/
                  /------------\
          bLhang /              \ bRhang
  
          Terminal overlap: a before b, b before a
          Contain overlap: a in b, b in a