def METHOD_NAME(
    img_ker_shape, mps_ker, coord=None, weights=None, grd_shape=None, comm=None
):
    """Convolution linear operator with sensitivity maps kernel in k-space.
    Args:
        img_ker_shape (tuple of ints): image kernel shape.
        mps_ker (array): sensitivity maps kernel.
        coord (array): coordinates.
        grd_shape (None or list): Shape of grid.
    """
    ndim = len(img_ker_shape)
    num_coils = mps_ker.shape[0]
    mps_ker = mps_ker.reshape((num_coils, 1) + mps_ker.shape[1:])
    R = sp.linop.Reshape((1,) + tuple(img_ker_shape), img_ker_shape)
    C = sp.linop.ConvolveData(
        R.oshape, mps_ker, mode="valid", multi_channel=True
    )
    A = C * R
    if coord is not None:
        if grd_shape is None:
            grd_shape = sp.estimate_shape(coord)
        else:
            grd_shape = list(grd_shape)
        grd_shape = [num_coils] + grd_shape
        iF = sp.linop.IFFT(grd_shape, axes=range(-ndim, 0))
        N = sp.linop.NUFFT(grd_shape, coord)
        A = N * iF * A
    if weights is not None:
        with sp.get_device(weights):
            P = sp.linop.Multiply(A.oshape, weights**0.5)
        A = P * A
    if comm is not None:
        C = sp.linop.AllReduceAdjoint(img_ker_shape, comm, in_place=True)
        A = A * C
    return A