code: def __singleIntersect(self, e):
      
      if e.chrom != self.chrom or e.end < self.start or e.start > self.end:
        # no intersection
        return [copy.copy(self)]
      if e.start <= self.start and e.end >= self.end:
        # whole self is removed.
        return []
      if e.start > self.start and e.end < self.end:
        # splits self in two
        r1 = copy.copy(self)
        r2 = copy.copy(self)
        r1.end = e.start
        r2.start = e.end
        return [r1, r2]
      if e.start <= self.start:
        # cuts off start of self
        r = copy.copy(self)
        r.start = e.end
        return [r]
      if e.end >= self.end:
        # cuts off end of self
        r = copy.copy(self)
        r.end = e.start
        return [r]
      # oops, we screwed up if we got to here..
      raise GenomicIntervalError("fatal error - failed BED subtraction of " +
                                 str(e) + " from " + str(self))
docs: Get a list of GenomicRegions produced by subtracting e from self.
  
      :return: a list of regions that represent the result of subtracting e from
               self. The list might be empty if self is totally contained in e,
               or may contain two elements if e is totally contained in self.
               otherwise there'll be one element.