docs: def realign(self, cut_off, chains_to_skip = set()):
          ''' Alter the cut-off and run alignment again. This is much quicker than creating a new PDBUniParcSequenceAligner
              object as the UniParcEntry creation etc. in the constructor does not need to be repeated.
  
              The chains_to_skip argument (a Set) allows us to skip chains that were already matched which speeds up the alignment even more.
          '''
          if cut_off != self.cut_off:
              self.cut_off = cut_off
  
              # Wipe any existing information for chains not in chains_to_skip
              for c in self.chains:
                  if c not in chains_to_skip:
                      self.clustal_matches[c] = None
                      self.substring_matches[c] = None
                      if self.alignment.get(c):
                          del self.alignment[c]
                      if self.seqres_to_uniparc_sequence_maps.get(c):
                          del self.seqres_to_uniparc_sequence_maps[c]
  
              # Run alignment for the remaining chains
              self._align_with_clustal(chains_to_skip = chains_to_skip)
              self._align_with_substrings(chains_to_skip = chains_to_skip)
              self._check_alignments(chains_to_skip = chains_to_skip)
              self._get_residue_mapping(chains_to_skip = chains_to_skip)