docs: def _get_residue_mapping(self, chains_to_skip = set()):
          '''Creates a mapping between the residues of the chains and the associated UniParc entries.'''
          for c in self.representative_chains:
              # Skip specified chains
              if c not in chains_to_skip:
                  if self.alignment.get(c):
                      uniparc_entry = self.get_uniparc_object(c)
                      sa = SequenceAligner()
                      sa.add_sequence(c, self.fasta[c])
                      sa.add_sequence(uniparc_entry.UniParcID, uniparc_entry.sequence)
                      sa.align()
                      residue_mapping, residue_match_mapping = sa.get_residue_mapping()
  
                      # Create a SequenceMap
                      s = PDBUniParcSequenceMap()
                      assert(sorted(residue_mapping.keys()) == sorted(residue_match_mapping.keys()))
                      for k, v in residue_mapping.iteritems():
                          s.add(k, (uniparc_entry.UniParcID, v), residue_match_mapping[k])
                      self.seqres_to_uniparc_sequence_maps[c] = s
  
                  else:
                      self.seqres_to_uniparc_sequence_maps[c] = PDBUniParcSequenceMap()
  
          # Use the representatives' alignments for their respective equivalent classes. This saves memory as the same SequenceMap is used.
          for c_1, related_chains in self.equivalence_fiber.iteritems():
              for c_2 in related_chains:
                  if self.seqres_to_uniparc_sequence_maps.get(c_1):
                      self.seqres_to_uniparc_sequence_maps[c_2] = self.seqres_to_uniparc_sequence_maps[c_1]