docs: def _determine_representative_chains(self):
          ''' Quotient the chains to get equivalence classes of chains. These will be used for the actual mapping.'''
          # todo: This logic should be moved into the FASTA class or a more general module (maybe a fast exists which uses a C/C++ library?) but at present it is easier to write here since we do not need to worry about other PDB IDs.
  
          equivalence_fiber = {}
          matched_chains = set()
          for chain_id, equivalent_chains in self.identical_sequences.iteritems():
              matched_chains.add(chain_id)
              equivalent_chain_ids = set()
              for equivalent_chain in equivalent_chains:
                  assert(len(equivalent_chain) == 6)
                  assert((equivalent_chain[:5] == '%s_' % self.pdb_id) or (equivalent_chain[:5] == '%s:' % self.pdb_id)) # ClustalW changes e.g. 1KI1:A to 1KI1_A in its output
                  equivalent_chain_ids.add(equivalent_chain[5])
              found = False
              for equivalent_chain_id in equivalent_chain_ids:
                  if equivalence_fiber.get(equivalent_chain_id):
                      found = True
                      assert(equivalence_fiber[equivalent_chain_id] == equivalent_chain_ids.union(set([chain_id])))
                      break
              if not found:
                  equivalence_fiber[chain_id] = set(equivalent_chain_ids)
                  equivalence_fiber[chain_id].add(chain_id)
  
          for c in self.chains:
              if c not in matched_chains:
                  equivalence_fiber[c] = set([c])
  
          self.equivalence_fiber = equivalence_fiber
          self.representative_chains = equivalence_fiber.keys()