<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def pdb_downloader_and_metadata(self, outdir=None, pdb_file_type=None, force_rerun=False):
 """Download ALL mapped experimental structures to each protein's structures directory. Args: outdir (str):
 Path to output directory, if GEM-PRO directories were not set or other output directory is desired pdb_file_type (str):
 Type of PDB file to download, if not already set or other format is desired force_rerun (bool):
 If files should be re-downloaded if they already exist """


        if not pdb_file_type:
            pdb_file_type = self.pdb_file_type

        counter = 0
        for g in tqdm(self.genes):
            pdbs = g.protein.pdb_downloader_and_metadata(outdir=outdir, pdb_file_type=pdb_file_type, force_rerun=force_rerun)

            if pdbs:
                counter += len(pdbs)

        log.info('Updated PDB metadata dataframe. See the "df_pdb_metadata" attribute for a summary dataframe.')
        log.info('Saved {} structures total'.format(counter))