docs: def download_structure_file(self, outdir, file_type=None, load_header_metadata=True, force_rerun=False):
          """Download a structure file from the PDB, specifying an output directory and a file type. Optionally download
          the mmCIF header file and parse data from it to store within this object.
  
          Args:
              outdir (str): Path to output directory
              file_type (str): ``pdb``, ``mmCif``, ``xml``, ``mmtf`` - file type for files downloaded from the PDB
              load_header_metadata (bool): If header metadata should be loaded into this object, fastest with mmtf files
              force_rerun (bool): If structure file should be downloaded even if it already exists
  
          """
          ssbio.utils.double_check_attribute(object=self, setter=file_type, backup_attribute='file_type',
                                             custom_error_text='Please set file type to be downloaded from the PDB: '
                                                               'pdb, mmCif, xml, or mmtf')
  
          # XTODO: check if outfile exists using ssbio.utils.force_rerun, pdblist seems to take long if it exists
          # I know why - it's because we're renaming the ent to pdb. need to have mapping from file type to final extension
          # Then check if file exists, if not then download again
          p = PDBList()
          with ssbio.utils.suppress_stdout():
              structure_file = p.retrieve_pdb_file(pdb_code=self.id, pdir=outdir, file_format=file_type, overwrite=force_rerun)
          if not op.exists(structure_file):
              log.debug('{}: {} file not available'.format(self.id, file_type))
              raise URLError('{}.{}: file not available to download'.format(self.id, file_type))
          else:
              log.debug('{}: {} file saved'.format(self.id, file_type))
  
              # Rename .ent files to .pdb
              if file_type == 'pdb':
                  new_name = structure_file.replace('pdb', '').replace('ent', 'pdb')
                  os.rename(structure_file, new_name)
                  structure_file = new_name
  
              self.load_structure_path(structure_file, file_type)
              if load_header_metadata and file_type == 'mmtf':
                  self.update(parse_mmtf_header(structure_file))
              if load_header_metadata and file_type != 'mmtf':
                  self.update(parse_mmcif_header(download_mmcif_header(pdb_id=self.id, outdir=outdir, force_rerun=force_rerun)))