code: def map_uniprot_to_pdb(self, seq_ident_cutoff=0.0, outdir=None, force_rerun=False):
          all_representative_uniprots = []
          for g in self.genes_with_a_representative_sequence:
              uniprot_id = g.protein.representative_sequence.uniprot
              if uniprot_id:
                  if '-' in uniprot_id:
                      uniprot_id = uniprot_id.split('-')[0]
                  all_representative_uniprots.append(uniprot_id)
          log.info('Mapping UniProt IDs --> PDB IDs...')
          uniprots_to_pdbs = bs_unip.mapping(fr='ACC', to='PDB_ID', query=all_representative_uniprots)
          counter = 0
          for g in tqdm(self.genes_with_a_representative_sequence):
              uniprot_id = g.protein.representative_sequence.uniprot
              if uniprot_id:
                  if '-' in uniprot_id:
                      uniprot_id = uniprot_id.split('-')[0]
                  if uniprot_id in uniprots_to_pdbs:
                      best_structures = g.protein.map_uniprot_to_pdb(seq_ident_cutoff=seq_ident_cutoff, outdir=outdir, force_rerun=force_rerun)
                      if best_structures:
                          counter += 1
                          log.debug('{}: {} PDBs mapped'.format(g.id, len(best_structures)))
                  else:
                      log.debug('{}, {}: no PDBs available'.format(g.id, uniprot_id))
          log.info('{}/{}: number of genes with at least one experimental structure'.format(len(self.genes_with_experimental_structures),
                                                                                            len(self.genes)))
          log.info('Completed UniProt --> best PDB mapping. See the "df_pdb_ranking" attribute for a summary dataframe.')