<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def tag_residue_solvent_accessibility(self, tag_type=False, tag_total=False, force=False, include_hetatms=False):
 """Tags `Residues` wirh relative residue solvent accessibility. Notes ----- THIS FUNCTIONALITY REQUIRES NACESS. This function tags the Monomer with the *relative* RSA of the *whole side chain*, i.e. column 2 of the .rsa file that NACCESS writes. References .. [1] Hubbard,S.J. & Thornton, J.M. (1993), 'NACCESS', Computer Program, Department of Biochemistry and Molecular Biology, University College London. Parameters force : bool, optional If `True`, the ta will be run even if `Residues` are already tagged. tag_type : str, optional Specifies the name of the tag. Defaults to 'residue_solvent_accessibility'. Useful for specifying more than one tag, e.g. if the Polymer is part of an Assembly. tag_total : bool, optional If True then the total rsa of the Polymer will be tagged in the 'total accessibility' tag. include_hetatms:bool, optional If true then NACCESS will run with the -h flag and will include heteroatom solvent accessibility where it can. Helpful if your file has MSE residues that you don't convert to MET, but best check if they are there before using the flag. """

        if tag_type:
            tag_type = tag_type
        else:
            tag_type = 'residue_solvent_accessibility'
        tagged = [tag_type in x.tags.keys() for x in self._monomers]
        if (not all(tagged)) or force:
            naccess_rsa_list, total = extract_residue_accessibility(run_naccess(
                self.pdb, mode='rsa', path=False,
                include_hetatms=include_hetatms), path=False, get_total=tag_total)
            for monomer, naccess_rsa in zip(self._monomers, naccess_rsa_list):
                monomer.tags[tag_type] = naccess_rsa
            if tag_total:
                self.tags['total_polymer_accessibility'] = total
        return