Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence coordinates using just the coordinates (not the full)
    alignment, when they have the same length. This is an internal helper
    method. The above length constraint must be true, otherwise an assertion
    is failed.

    :param intersect_region: a region that intersects this occurrence.
    :return: GenomicInterval representing the region after lifting to consensus
    :note: no checks are made for whether the interval really intersects!!

def __liftover_coordinates_size_match(self, intersecting_region):
    """
    Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence coordinates using just the coordinates (not the full)
    alignment, when they have the same length. This is an internal helper
    method. The above length constraint must be true, otherwise an assertion
    is failed.

    :param intersect_region: a region that intersects this occurrence.
    :return: GenomicInterval representing the region after lifting to consensus
    :note: no checks are made for whether the interval really intersects!!
    """
    # should always pass, but check anyway...
    consensus_match_length = self.consensus_end - self.consensus_start
    assert(consensus_match_length - len(self) == 0)

    if self.consensus_match_strand is '+':
      s = max(intersecting_region.start - self.start, 0) +\
          self.consensus_start
      e = min(max(intersecting_region.end - self.start, 0) +
              self.consensus_start, self.consensus_len)
      g = GenomicInterval(self.repeat_name(), s, e, intersecting_region.name,
                          intersecting_region.score, self.strand)
      return g
    elif self.consensus_match_strand is '-':
      e = (self.consensus_end -
           max(intersecting_region.start - self.start, 0))
      s = (self.consensus_end -
           min(max(intersecting_region.end - self.start, 0), len(self)))
      g = GenomicInterval(self.repeat_name(), s, e, intersecting_region.name,
                          intersecting_region.score, self.strand)
      return g
    else:
      raise RetrotransposonError("couldn't determine strand of " +
                                 "retrotransposon occurrance " + str(self))