def run_searchlight(self, voxel_fn, pool_size=None):
        """Perform a function at each voxel which is set to True in the
        user-provided mask. The mask passed to the searchlight function will be
        further masked by the user-provided searchlight shape.

        Parameters
        ----------

        voxel_fn: function to apply at each voxel

            Must be `serializeable using pickle
            <https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled>`_.

                Parameters

                subj: list of 4D arrays containing subset of subject data

                mask: 3D array containing subset of mask data

                sl_rad: radius, in voxels, of the sphere inscribed in the
                cube

                bcast_var: shared data which is broadcast to all processes


                Returns

                Value of any pickle-able type

        Returns
        -------

        A volume which is the same size as the mask, however a number of voxels
        equal to the searchlight radius has been removed from each border of
        the volume. This volume contains the values returned from the
        searchlight function at each voxel which was set to True in the mask,
        and None elsewhere.

        """

        extra_block_fn_params = (voxel_fn, self.shape,
                                 self.min_active_voxels_proportion)
        block_fn_result = self.run_block_function(_singlenode_searchlight,
                                                  extra_block_fn_params,
                                                  pool_size)
        return block_fn_result