<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _vectorize_single_raster(self, raster, data_transform, crs, timestamp=None):
 """ Vectorizes a data slice of a single time component :param raster: Numpy array or shape (height, width, channels) :type raster: numpy.ndarray :param data_transform: Object holding a transform vector (i.e. geographical location vector) of the raster :type data_transform: affine.Affine :param crs: Coordinate reference system :type crs: sentinelhub.CRS :param timestamp: Time of the data slice :type timestamp: datetime.datetime :return: Vectorized data :rtype: geopandas.GeoDataFrame """

        mask = None
        if self.values:
            mask = np.zeros(raster.shape, dtype=np.bool)
            for value in self.values:
                mask[raster == value] = True

        geo_list = []
        value_list = []
        for idx in range(raster.shape[-1]):
            for geojson, value in rasterio.features.shapes(raster[..., idx],
                                                           mask=None if mask is None else mask[..., idx],
                                                           transform=data_transform):
                geo_list.append(shapely.geometry.shape(geojson))
                value_list.append(value)

        geo_series = GeoSeries(geo_list)
        value_series = GeoSeries(value_list)

        series_dict = dict(VALUE=value_series, geometry=geo_series) if timestamp is None else \
            dict(VALUE=value_series, TIMESTAMP=GeoSeries([timestamp] * len(geo_list)), geometry=geo_series)

        return GeoDataFrame(series_dict, crs={'init': 'epsg:{}'.format(crs.value)})