<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def GetRGB(self, scheme='infrared', names=None):
 """Get an RGB color scheme based on predefined presets or specify your own band names to use. A given set of names always overrides a scheme. Note: Available schemes are defined in ``RGB_SCHEMES`` and include: - ``true`` - ``infrared`` - ``false_a`` - ``false_b`` - ``false_c`` """

        if names is not None:
            if not isinstance(names, (list, tuple)) or len(names) != 3:
                raise RuntimeError('RGB band names improperly defined.')
        else:
            lookup = self.RGB_SCHEMES[scheme]
            names = lookup[self.global_metadata.satellite]

        # Now check that all bands are available:
        for nm in names:
            if nm not in self.bands.keys():
                raise RuntimeError('Band (%s) unavailable.' % nm)

        # Get the RGB bands
        r = self.bands[names[0]].data
        g = self.bands[names[1]].data
        b = self.bands[names[2]].data
        # Note that the bands dhould already be masked from read.
        # If casted then there are np.nans present
        r = ((r - np.nanmin(r)) * (1/(np.nanmax(r) - np.nanmin(r)) * 255)).astype('uint8')
        g = ((g - np.nanmin(g)) * (1/(np.nanmax(g) - np.nanmin(g)) * 255)).astype('uint8')
        b = ((b - np.nanmin(b)) * (1/(np.nanmax(b) - np.nanmin(b)) * 255)).astype('uint8')
        return np.dstack([r, g, b])