n_qoi = 3
    prior_pf_samples = elliptic_pde.load_data()
    prior_pf_samples_hf = prior_pf_samples[-1][:, 0:n_qoi]
    prior_pf_samples_mf = prior_pf_samples[1][:, 0:n_qoi] ** 1.1
    prior_pf_samples_lf = prior_pf_samples[0][:, 0:n_qoi] ** 1.2
    prior_samples = np.reshape(range(n_mc_ref), (n_mc_ref, 1))  # we only need some id here

    # Create the MC reference samples
    ref_prior_pf_samples = prior_pf_samples_hf[:n_mc_ref]

    # Prior
    p_prior = Distribution(prior_samples, rv_name='$\lambda$', label='Prior', kde=False)

    # Prior push-forward
    ref_p_prior_pf = Distribution(ref_prior_pf_samples, rv_name='$Q$', label='Prior-PF')
    ref_p_prior_pf.eval_kernel_density()

    l1_prior_pf_1hf_avg = np.zeros((n_grid,))
    l1_prior_pf_1hf_1lf_avg = np.zeros((n_grid,))
    l1_prior_pf_1hf_2lf_avg = np.zeros((n_grid,))
    for k in range(n_avg):
        print('\nRun %d / %d' % (k + 1, n_avg))

        # -------------- 1 HF

        l1_prior_pf_1hf = []
        for idx, n_evals in enumerate(n_evals_mc):
            indices = np.random.choice(range(prior_pf_samples_hf.shape[0]), size=n_evals, replace=False)

            # Monte Carlo model
            prior_pf_samples = prior_pf_samples_hf[indices]