<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _map_agent_mod(self, agent, mod_condition):
 """Map a single modification condition on an agent. Parameters agent : :py:class:`indra.statements.Agent` Agent to check for invalid modification sites. mod_condition : :py:class:`indra.statements.ModCondition` Modification to check for validity and map. Returns ------- protmapper.MappedSite or None A MappedSite object is returned if a UniProt ID was found for the agent, and if both the position and residue for the modification condition were available. Otherwise None is returned. """

        # Get the UniProt ID of the agent, if not found, return
        up_id = _get_uniprot_id(agent)
        if not up_id:
            logger.debug("No uniprot ID for %s" % agent.name)
            return None
        # If no site information for this residue, skip
        if mod_condition.position is None or mod_condition.residue is None:
            return None
        # Otherwise, try to map it and return the mapped site
        mapped_site = \
            self.map_to_human_ref(up_id, 'uniprot',
                mod_condition.residue,
                mod_condition.position,
                do_methionine_offset=self.do_methionine_offset,
                do_orthology_mapping=self.do_orthology_mapping,
                do_isoform_mapping=self.do_isoform_mapping)
        return mapped_site