def _determine_representative_chains(self):
        ''' Quotient the chains to get equivalence classes of chains. These will be used for the actual mapping.'''
        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))
                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()