def pilot_points_to_tpl(pp_file,tpl_file=None,name_prefix=None):
    """write a template file for a pilot points file

    Parameters
    ----------
    pp_file : str
        pilot points file
    tpl_file : str
        template file name to write.  If None, append ".tpl" to
        the pp_file arg. Default is None
    name_prefix : str
        name to prepend to parameter names for each pilot point.  For example,
        if ``name_prefix = "hk_"``, then each pilot point parameter will be named
        "hk_0001","hk_0002", etc.  If None, parameter names from pp_df.name
        are used.  Default is None.

    Returns
    -------
        pp_df : pandas.DataFrame
            a dataframe with pilot point information (name,x,y,zone,parval1)
             with the parameter information (parnme,tpl_str)
    """

    if isinstance(pp_file,pd.DataFrame):
        pp_df = pp_file
        assert tpl_file is not None
    else:
        assert os.path.exists(pp_file)
        pp_df = pd.read_csv(pp_file, delim_whitespace=True,
                            header=None, names=PP_NAMES)

    if tpl_file is None:
        tpl_file = pp_file + ".tpl"

    if name_prefix is not None:
        digits = str(len(str(pp_df.shape[0])))
        fmt = "{0:0"+digits+"d}"
        names = [name_prefix+fmt.format(i) for i in range(pp_df.shape[0])]
    else:
        names = pp_df.name.copy()

    too_long = []
    for name in names:
        if len(name) > 12:
            too_long.append(name)
    if len(too_long) > 0:
        raise Exception("the following parameter names are too long:" +\
                        ",".join(too_long))

    tpl_entries = ["~    {0}    ~".format(name) for name in names]
    pp_df.loc[:,"tpl"] = tpl_entries
    pp_df.loc[:,"parnme"] = names


    f_tpl = open(tpl_file,'w')
    f_tpl.write("ptf ~\n")
    f_tpl.write(pp_df.to_string(col_space=0,
                              columns=["name","x","y","zone","tpl"],
                              formatters=PP_FMT,
                              justify="left",
                              header=False,
                              index=False) + '\n')

    return pp_df
write a template file for a pilot points file

    Parameters
    ----------
    pp_file : str
        pilot points file
    tpl_file : str
        template file name to write.  If None, append ".tpl" to
        the pp_file arg. Default is None
    name_prefix : str
        name to prepend to parameter names for each pilot point.  For example,
        if ``name_prefix = "hk_"``, then each pilot point parameter will be named
        "hk_0001","hk_0002", etc.  If None, parameter names from pp_df.name
        are used.  Default is None.

    Returns
    -------
        pp_df : pandas.DataFrame
            a dataframe with pilot point information (name,x,y,zone,parval1)
             with the parameter information (parnme,tpl_str)