<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_Wp(self, Wp, Epmin=None, Epmax=None, amplitude_name=None):
 """ Normalize particle distribution so that the total energy in protons between Epmin and Epmax is Wp Parameters Wp : :class:`~astropy.units.Quantity` float Desired energy in protons. Epmin : :class:`~astropy.units.Quantity` float, optional Minimum proton energy for energy content calculation. Epmax : :class:`~astropy.units.Quantity` float, optional Maximum proton energy for energy content calculation. amplitude_name : str, optional Name of the amplitude parameter of the particle distribution. It must be accesible as an attribute of the distribution function. Defaults to ``amplitude``. """


        Wp = validate_scalar("Wp", Wp, physical_type="energy")
        oldWp = self.compute_Wp(Epmin=Epmin, Epmax=Epmax)

        if amplitude_name is None:
            try:
                self.particle_distribution.amplitude *= (
                    Wp / oldWp
                ).decompose()
            except AttributeError:
                log.error(
                    "The particle distribution does not have an attribute"
                    " called amplitude to modify its normalization: you can"
                    " set the name with the amplitude_name parameter of set_Wp"
                )
        else:
            oldampl = getattr(self.particle_distribution, amplitude_name)
            setattr(
                self.particle_distribution,
                amplitude_name,
                oldampl * (Wp / oldWp).decompose(),
            )