<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def clean_pdb(pdb_file, out_suffix='_clean', outdir=None, force_rerun=False, remove_atom_alt=True, keep_atom_alt_id='A', remove_atom_hydrogen=True, add_atom_occ=True, remove_res_hetero=True, keep_chemicals=None, keep_res_only=None, add_chain_id_if_empty='X', keep_chains=None):
 """Clean a PDB file. Args: pdb_file (str):
 Path to input PDB file out_suffix (str):
 Suffix to append to original filename outdir (str):
 Path to output directory force_rerun (bool):
 If structure should be re-cleaned if a clean file exists already remove_atom_alt (bool):
 Remove alternate positions keep_atom_alt_id (str):
 If removing alternate positions, which alternate ID to keep remove_atom_hydrogen (bool):
 Remove hydrogen atoms add_atom_occ (bool):
 Add atom occupancy fields if not present remove_res_hetero (bool):
 Remove all HETATMs keep_chemicals (str, list):
 If removing HETATMs, keep specified chemical names keep_res_only (str, list):
 Keep ONLY specified resnames, deletes everything else! add_chain_id_if_empty (str):
 Add a chain ID if not present keep_chains (str, list):
 Keep only these chains Returns: str: Path to cleaned PDB file """

    outfile = ssbio.utils.outfile_maker(inname=pdb_file,
                                        append_to_name=out_suffix,
                                        outdir=outdir,
                                        outext='.pdb')

    if ssbio.utils.force_rerun(flag=force_rerun, outfile=outfile):
        my_pdb = StructureIO(pdb_file)
        my_cleaner = CleanPDB(remove_atom_alt=remove_atom_alt,
                              remove_atom_hydrogen=remove_atom_hydrogen,
                              keep_atom_alt_id=keep_atom_alt_id,
                              add_atom_occ=add_atom_occ,
                              remove_res_hetero=remove_res_hetero,
                              keep_res_only=keep_res_only,
                              add_chain_id_if_empty=add_chain_id_if_empty,
                              keep_chains=keep_chains,
                              keep_chemicals=keep_chemicals)

        my_clean_pdb = my_pdb.write_pdb(out_suffix=out_suffix,
                                        out_dir=outdir,
                                        custom_selection=my_cleaner,
                                        force_rerun=force_rerun)

        return my_clean_pdb
    else:
        return outfile