prepare KL based parameterizations

        Parameters
        ----------
        mlt_df : pandas.DataFrame
            a dataframe with multiplier array information

        Note
        ----
        calls pyemu.helpers.setup_kl()

def kl_prep(self,mlt_df):
        """ prepare KL based parameterizations

        Parameters
        ----------
        mlt_df : pandas.DataFrame
            a dataframe with multiplier array information

        Note
        ----
        calls pyemu.helpers.setup_kl()


        """
        if len(self.kl_props) == 0:
            return

        if self.kl_geostruct is None:
            self.logger.warn("kl_geostruct is None,"\
                  " using ExpVario with contribution=1 and a=(10.0*max(delr,delc))")
            kl_dist = 10.0 * float(max(self.m.dis.delr.array.max(),
                                           self.m.dis.delc.array.max()))
            v = pyemu.geostats.ExpVario(contribution=1.0,a=kl_dist)
            self.kl_geostruct = pyemu.geostats.GeoStruct(variograms=v)

        kl_df = mlt_df.loc[mlt_df.suffix==self.kl_suffix,:]
        layers = kl_df.layer.unique()
        #kl_dict = {l:list(kl_df.loc[kl_df.layer==l,"prefix"].unique()) for l in layers}
        # big assumption here - if prefix is listed more than once, use the lowest layer index
        #for i,l in enumerate(layers):
        #    p = set(kl_dict[l])
        #    for ll in layers[i+1:]:
        #        pp = set(kl_dict[ll])
        #        d = pp - p
        #        kl_dict[ll] = list(d)
        kl_prefix = list(kl_df.loc[:,"prefix"])

        kl_array_file = {p:m for p,m in zip(kl_df.prefix,kl_df.mlt_file)}
        self.logger.statement("kl_prefix: {0}".format(str(kl_prefix)))

        fac_file = os.path.join(self.m.model_ws, "kl.fac")

        self.log("calling kl_setup() with factors file {0}".format(fac_file))

        kl_df = kl_setup(self.kl_num_eig,self.m.sr,self.kl_geostruct,kl_prefix,
                         factors_file=fac_file,basis_file=fac_file+".basis.jcb",
                         tpl_dir=self.m.model_ws)
        self.logger.statement("{0} kl parameters created".
                              format(kl_df.shape[0]))
        self.logger.statement("kl 'pargp':{0}".
                              format(','.join(kl_df.pargp.unique())))

        self.log("calling kl_setup() with factors file {0}".format(fac_file))
        kl_mlt_df = mlt_df.loc[mlt_df.suffix==self.kl_suffix]
        for prefix in kl_df.prefix.unique():
            prefix_df = kl_df.loc[kl_df.prefix==prefix,:]
            in_file = os.path.split(prefix_df.loc[:,"in_file"].iloc[0])[-1]
            assert prefix in mlt_df.prefix.values,"{0}:{1}".format(prefix,mlt_df.prefix)
            mlt_df.loc[mlt_df.prefix==prefix,"pp_file"] = in_file
            mlt_df.loc[mlt_df.prefix==prefix,"fac_file"] = os.path.split(fac_file)[-1]

        print(kl_mlt_df)
        mlt_df.loc[mlt_df.suffix == self.kl_suffix, "tpl_file"] = np.NaN
        self.par_dfs[self.kl_suffix] = kl_df