def thinPlateSpline(actor, sourcePts, targetPts, userFunctions=(None, None)):
    """
    `Thin Plate Spline` transformations describe a nonlinear warp transform defined by a set
    of source and target landmarks. Any point on the mesh close to a source landmark will
    be moved to a place close to the corresponding target landmark.
    The points in between are interpolated smoothly using Bookstein's Thin Plate Spline algorithm.

    Transformation object is saved in ``actor.info['transform']``.

    :param userFunctions: You must supply both the function
        and its derivative with respect to r.

    .. hint:: |thinplate| |thinplate.py|_

        |thinplate_grid| |thinplate_grid.py|_

        |thinplate_morphing| |thinplate_morphing.py|_

        |interpolateField| |interpolateField.py|_
    """
    ns = len(sourcePts)
    ptsou = vtk.vtkPoints()
    ptsou.SetNumberOfPoints(ns)
    for i in range(ns):
        ptsou.SetPoint(i, sourcePts[i])

    nt = len(sourcePts)
    if ns != nt:
        vc.printc("~times thinPlateSpline Error: #source != #target points", ns, nt, c=1)
        exit()

    pttar = vtk.vtkPoints()
    pttar.SetNumberOfPoints(nt)
    for i in range(ns):
        pttar.SetPoint(i, targetPts[i])

    transform = vtk.vtkThinPlateSplineTransform()
    transform.SetBasisToR()
    if userFunctions[0]:
        transform.SetBasisFunction(userFunctions[0])
        transform.SetBasisDerivative(userFunctions[1])
    transform.SetSigma(1)
    transform.SetSourceLandmarks(ptsou)
    transform.SetTargetLandmarks(pttar)

    tfa = transformFilter(actor.polydata(), transform)
    tfa.info["transform"] = transform
    return tfa
`Thin Plate Spline` transformations describe a nonlinear warp transform defined by a set
    of source and target landmarks. Any point on the mesh close to a source landmark will
    be moved to a place close to the corresponding target landmark.
    The points in between are interpolated smoothly using Bookstein's Thin Plate Spline algorithm.

    Transformation object is saved in ``actor.info['transform']``.

    :param userFunctions: You must supply both the function
        and its derivative with respect to r.

    .. hint:: |thinplate| |thinplate.py|_

        |thinplate_grid| |thinplate_grid.py|_

        |thinplate_morphing| |thinplate_morphing.py|_

        |interpolateField| |interpolateField.py|_