<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_surf(self, surf, color=SKIN_COLOR, vertex_colors=None, values=None, limits_c=None, colormap=COLORMAP, alpha=1, colorbar=False):
 """Add surfaces to the visualization. Parameters surf : instance of wonambi.attr.anat.Surf surface to be plotted color : tuple or ndarray, optional 4-element tuple, representing RGB and alpha, between 0 and 1 vertex_colors : ndarray ndarray with n vertices x 4 to specify color of each vertex values : ndarray, optional vector with values for each vertex limits_c : tuple of 2 floats, optional min and max values to normalize the color colormap : str one of the colormaps in vispy alpha : float transparency (1 = opaque) colorbar : bool add a colorbar at the back of the surface """

        colors, limits = _prepare_colors(color=color, values=values,
                                         limits_c=limits_c, colormap=colormap,
                                         alpha=alpha)

        # meshdata uses numpy array, in the correct dimension
        vertex_colors = colors.rgba
        if vertex_colors.shape[0] == 1:
            vertex_colors = tile(vertex_colors, (surf.n_vert, 1))

        meshdata = MeshData(vertices=surf.vert, faces=surf.tri,
                            vertex_colors=vertex_colors)
        mesh = SurfaceMesh(meshdata)

        self._add_mesh(mesh)

        # adjust camera
        surf_center = mean(surf.vert, axis=0)
        if surf_center[0] < 0:
            azimuth = 270
        else:
            azimuth = 90
        self._view.camera.azimuth = azimuth
        self._view.camera.center = surf_center

        self._surf.append(mesh)

        if colorbar:
            self._view.add(_colorbar_for_surf(colormap, limits))