Clip a sequence from the end of this sequence -- we assume the sequence
      to be clipped will always begin somewhere in this sequence, but may not
      be fully contained. If found, replaced with Ns.

      :param seq: sequence to be clipped
      :param mm_score: the number of matching bases needed to consider a hit,
                       mm_score = len(seq) would be 100% match

def clip_end(self, seq, mm_score):
    """
      Clip a sequence from the end of this sequence -- we assume the sequence
      to be clipped will always begin somewhere in this sequence, but may not
      be fully contained. If found, replaced with Ns.

      :param seq: sequence to be clipped
      :param mm_score: the number of matching bases needed to consider a hit,
                       mm_score = len(seq) would be 100% match
    """
    lim = mm_score - 1
    other_end = len(seq) - 1
    other_start = 0

    for i in range(len(self.sequenceData) - 1, lim - 1, -1):
      self_end = i
      self_start = i - (len(seq) - 1)

      if self_start < 0:
        self_start = 0
        other_start = other_end - self_end

      score = self.similarity(self_start, self_end, other_start,
                              other_end, seq)
      if (score >= mm_score):
        self.nsRight(len(seq) + (len(self) - i) - 1)
        break