def __singleIntersect(self, e):
if e.chrom != self.chrom or e.end < self.start or e.start > self.end:<EOL><INDENT>return [copy.copy(self)]<EOL><DEDENT>if e.start <= self.start and e.end >= self.end:<EOL><INDENT>return []<EOL><DEDENT>if e.start > self.start and e.end < self.end:<EOL><INDENT>r1 = copy.copy(self)<EOL>r2 = copy.copy(self)<EOL>r1.end = e.start<EOL>r2.start = e.end<EOL>return [r1, r2]<EOL><DEDENT>if e.start <= self.start:<EOL><INDENT>r = copy.copy(self)<EOL>r.start = e.end<EOL>return [r]<EOL><DEDENT>if e.end >= self.end:<EOL><INDENT>r = copy.copy(self)<EOL>r.end = e.start<EOL>return [r]<EOL><DEDENT>raise GenomicIntervalError("<STR_LIT>" +<EOL>str(e) + "<STR_LIT>" + str(self))<EOL>
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.