Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence co-ordinates. This method will behave differently
    depending on whether this retrotransposon occurrance contains a full
    alignment or not. If it does, the alignment is used to do the liftover and
    an exact result is provided. If it does not, the coordinates are used to
    do the liftover, padding either the genomic region or consensus sequence
    (whichever is shorter) with equally spaced gaps to make the size of both
    match.

    :param intersecting_region: a region that intersects this occurrence.
    :return: list of GenomicInterval objects. This is a list because a genomic
             deletion of part of the retrotransposon can fragment the
             intersecting region and result in more than one returned interval.

def liftover(self, intersecting_region):
    """
    Lift a region that overlaps the genomic occurrence of the retrotransposon
    to consensus sequence co-ordinates. This method will behave differently
    depending on whether this retrotransposon occurrance contains a full
    alignment or not. If it does, the alignment is used to do the liftover and
    an exact result is provided. If it does not, the coordinates are used to
    do the liftover, padding either the genomic region or consensus sequence
    (whichever is shorter) with equally spaced gaps to make the size of both
    match.

    :param intersecting_region: a region that intersects this occurrence.
    :return: list of GenomicInterval objects. This is a list because a genomic
             deletion of part of the retrotransposon can fragment the
             intersecting region and result in more than one returned interval.
    """

    # a little sanity check here to make sure intersecting_region really does..
    if not self.intersects(intersecting_region):
      raise RetrotransposonError("trying to lift " + str(intersecting_region) +
                                 " from genomic to transposon coordinates " +
                                 "in " + str(self) + ", but it doesn't " +
                                 "intersect!")

    if self.pairwise_alignment is not None:
      return self.pairwise_alignment.liftover(self.chrom, self.repeat_name(),
                                              intersecting_region.start,
                                              intersecting_region.end,
                                              trim=True)
    return self.liftover_coordinates(intersecting_region)