def METHOD_NAME(image, chan, shape, voxelsize, origin, shiftField=None, ignoreZ=True, order=3):
    """apply a vectorial correction for chromatic shift to an image - this
    is a generic vectorial shift compensation, rather than the secial case
    correction used with the splitter.
    """
    from scipy import ndimage
    #data = image.data[:, :, :, chan]
    X, Y, Z = np.mgrid[0:shape[0], 0:shape[1], 0:shape[2]]
    vx, vy, vz = image.voxelsize
    vxm, vym, vzm = voxelsize
    if vz == 0:
        vz = 1
    if vzm == 0:
        vzm = 1
    x0, y0, z0 = image.origin
    xm0, ym0, zm0 = origin
    if ignoreZ:
        z0 = 0
        zm0 = 0
    #desired coordinates in nm from camera origin
    Xnm = X * vxm + xm0
    Ynm = Y * vym + ym0
    Znm = Z * vzm + zm0
    if shiftField and os.path.exists(shiftField):
        spx, spy, dz = np.load(shiftField, allow_pickle=True)
        dx = spx.ev(Xnm, Ynm)
        dy = spy.ev(Xnm, Ynm)
        if ignoreZ:
            dz = 0
        Xnm += dx
        Ynm += dy
        Znm += dz
    print((vx, vy, vz, image.data_xyztc.shape))
    return [ndimage.map_coordinates(np.atleast_3d(image.data_xyztc[:,:,:,t,chan]), [(Xnm - x0) / vx, (Ynm - y0) / vy, (Znm - z0) / vz],
                                   mode='nearest', order=order) for t in range(image.data_xyztc.shape[3])]