Ejemplo n.º 1
0
def east_west_joint_run(xb, f_name):
    de = dc.DalecData(
        2015,
        2016,
        'nee_day_east, c_roo_east, c_woo_east, clma, lai_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc')
    de.ob_err_dict['clma'] = (1. / 3.) * de.ob_err_dict['clma']
    de.ob_err_dict['lai'] = (1. / 3.) * de.ob_err_dict['lai']
    B = pickle.load(open('b_edc.p', 'r'))
    B = np.delete(B, 10, axis=0)
    B = 0.8 * np.delete(B, 10, axis=1)
    de.B = B
    #de.B = np.concatenate((de.edinburgh_std[:10], de.edinburgh_std[11:]))**2*np.eye(22)
    #A = pickle.load(open('A_D.p', 'r'))
    #A = np.delete(A, (10), axis=0)
    #A = np.delete(A, (10), axis=1)
    #de.B = 1.2*A
    dw = dc.DalecData(
        2015,
        2016,
        'nee_day_west, c_roo_west, c_woo_west, clma, lai_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc')
    dw.ob_err_dict['clma'] = (1. / 3.) * dw.ob_err_dict['clma']
    dw.ob_err_dict['lai'] = (1. / 3.) * dw.ob_err_dict['lai']
    dw.B = B
    #dw.B = np.concatenate((de.edinburgh_std[:10], de.edinburgh_std[11:]))**2*np.eye(22)
    #dw.B = A
    me = mc_p.DalecModel(de)
    mw = mc_p.DalecModel(dw)
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    xbb = np.array(
        me.create_ordered_lst(np.array(xb.tolist()[0], dtype=np.float)))
    save_plots(f_name, xbb, xa_e[2], xa_w[2], de, dw)
    return 'done'
Ejemplo n.º 2
0
def east_west_joint_run_nee_err_no_r(xb,
                                     f_name,
                                     nee_scale=0,
                                     clma_er=1.,
                                     lai_er=1.,
                                     need_er=1.,
                                     neen_er=1.,
                                     cr_er=1.,
                                     cw_er=1.):
    f_name += 'clmaer%r_laier%r_needer%r_neener%r_crer%r_cwer%r' % (
        clma_er, lai_er, need_er, neen_er, cr_er, cw_er)
    # Construct B
    b_cor = pickle.load(open('b_edc_cor.p', 'r'))
    b_std = np.sqrt(np.diag(pickle.load(open('b_edc.p', 'r'))))
    b_std[10] = 0.25 * b_std[10]
    b_std[1] = 0.25 * b_std[1]
    b_std[0:17] = 0.5 * b_std[0:17]
    D = np.zeros_like(b_cor)
    np.fill_diagonal(D, b_std)
    b = 0.6 * np.dot(np.dot(D, b_cor), D)
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'nee_day_east, nee_night_east, c_roo_east, c_woo_east, clma, lai_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=nee_scale)
    de.B = b
    # obs err scaling
    de.ob_err_dict['clma'] = clma_er * de.ob_err_dict['clma']
    de.ob_err_dict['lai'] = lai_er * de.ob_err_dict['lai']
    de.ob_err_dict['nee_day'] = need_er * de.ob_err_dict['nee_day']
    de.ob_err_dict['nee_night'] = neen_er * de.ob_err_dict['nee_night']
    de.ob_err_dict['c_roo'] = cr_er * de.ob_err_dict['c_roo']
    de.ob_err_dict['c_woo'] = cw_er * de.ob_err_dict['c_woo']

    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'nee_day_west, nee_night_west, c_roo_west, c_woo_west, clma, lai_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=nee_scale)
    dw.B = b
    # obs err scaling
    dw.ob_err_dict['clma'] = clma_er * dw.ob_err_dict['clma']
    dw.ob_err_dict['lai'] = lai_er * dw.ob_err_dict['lai']
    dw.ob_err_dict['nee_day'] = need_er * dw.ob_err_dict['nee_day']
    dw.ob_err_dict['nee_night'] = neen_er * dw.ob_err_dict['nee_night']
    dw.ob_err_dict['c_roo'] = cr_er * dw.ob_err_dict['c_roo']
    dw.ob_err_dict['c_woo'] = cw_er * dw.ob_err_dict['c_woo']
    # setup model
    me = mc.DalecModel(de)
    mw = mc.DalecModel(dw)
    # run DA scheme
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    # save plots
    save_plots(f_name, xb, xa_e[1], xa_w[1], de, dw, me, mw)
    return 'done'
Ejemplo n.º 3
0
def east_west_joint_run_prior(xb,
                              f_name,
                              obs_str,
                              b_mat,
                              rm='None',
                              end_yr=2014,
                              start_yr=2012):
    if not os.path.exists(f_name):
        os.makedirs(f_name)
    # east data
    obs_east = ob_str_east_west(obs_str, 'east', rm_obs=rm)
    de = dc.DalecData(
        start_yr,
        end_yr,
        obs_east,
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=0)
    de.B = b_mat
    # obs err scaling
    # west data
    obs_west = ob_str_east_west(obs_str, 'west', rm_obs=rm)
    dw = dc.DalecData(
        start_yr,
        end_yr,
        obs_west,
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=0)
    dw.B = b_mat
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # run DA scheme
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    # save plots
    save_plots(f_name, xb, xa_e[1], xa_w[1], de, dw, me, mw)
    return 'done'
Ejemplo n.º 4
0
def calc_exp_vals(exp_name):
    east = pickle.load(open(exp_name + 'east_assim', 'r'))
    west = pickle.load(open(exp_name + 'west_assim', 'r'))
    b = 1.5 * east['b_mat']
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    de.B = b
    de.ob_dict = east['obs']
    de.ob_err_dict = east['obs_err']
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    dw.B = b
    dw.ob_dict = west['obs']
    dw.ob_err_dict = west['obs_err']
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # a_east = pickle.load(open('a_east.p', 'r'))
    # a_west = pickle.load(open('a_west.p', 'r'))
    a_east = me.acovmat(east['xa'])
    a_west = mw.acovmat(west['xa'])
    e_ens = p.create_ensemble(de, a_east, east['xa'])
    w_ens = p.create_ensemble(de, a_west, west['xa'])
    p_e_ens = p.plist_ens(de, e_ens)
    p_w_ens = p.plist_ens(dw, w_ens)
    return east, west, de, dw, p_e_ens, p_w_ens
Ejemplo n.º 5
0
def east_west_joint_run_nee_err_r_errs(xb, f_name):
    # Construct B
    b_cor = pickle.load(open('b_edc_cor.p', 'r'))
    b_std = np.sqrt(np.diag(pickle.load(open('b_edc.p', 'r'))))
    b_std[10] = 0.25 * b_std[10]
    b_std[1] = 0.25 * b_std[1]
    #b_std[2] = 0.1*b_std[2]
    b_std[0:17] = b_std[0:17] * 0.5
    D = np.zeros_like(b_cor)
    np.fill_diagonal(D, b_std)
    b = 0.6 * np.dot(np.dot(D, b_cor), D)  #*0.6
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'nee_east, nee_night_east, c_roo_east, c_woo_east, clma, lai_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    de.B = b
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'nee_west, nee_night_west, c_roo_west, c_woo_west, clma, lai_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    dw.B = b
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # run DA scheme
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    # save plots
    save_plots(f_name, xb, xa_e[1], xa_w[1], de, dw, me, mw)
    return 'done'
Ejemplo n.º 6
0
def east_west_joint_run_ceff_a(xb, f_name):
    de = dc.DalecData(
        2015,
        2016,
        'nee_day_east, nee_night_east, c_roo_east, c_woo_east, clma, lai_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=1)
    de.ob_err_dict['clma'] = 0.33 * de.ob_err_dict['clma']
    de.ob_err_dict['lai'] = 0.33 * de.ob_err_dict['lai']
    B = pickle.load(open('a_cov.p', 'r'))
    B = np.delete(B, 10, axis=0)
    B = np.delete(B, 10, axis=1)
    #de.B = np.concatenate((de.edinburgh_std[:10], de.edinburgh_std[11:]))**2*np.eye(22)
    #A = pickle.load(open('A_D.p', 'r'))
    #A = np.delete(A, (10), axis=0)
    #A = np.delete(A, (10), axis=1)
    de.B = B
    dw = dc.DalecData(
        2015,
        2016,
        'nee_day_west, nee_night_west, c_roo_west, c_woo_west, clma, lai_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=1)
    dw.ob_err_dict['clma'] = 0.33 * dw.ob_err_dict['clma']
    dw.ob_err_dict['lai'] = 0.33 * dw.ob_err_dict['lai']
    dw.B = B
    #dw.B = np.concatenate((de.edinburgh_std[:10], de.edinburgh_std[11:]))**2*np.eye(22)
    #dw.B = A
    me = mc_p.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc_p.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    xbb = np.array(
        me.create_ordered_lst(np.array(xb.tolist()[0], dtype=np.float)))
    save_plots(f_name, xbb, xa_e[2], xa_w[2], de, dw, me, mw)
    return 'done'
Ejemplo n.º 7
0
def test_costfn(alph=1e-9):
    """Test for cost and gradcost functions.
    """
    d = dC.DalecData(50, 'nee')
    m = mc.DalecModel(d)
    gradj = m.gradcost(d.pvals)
    h = gradj * (np.linalg.norm(gradj))**(-1)
    j = m.cost(d.pvals)
    jalph = m.cost(d.pvals + alph * h)
    print(jalph - j) / (np.dot(alph * h, gradj))
    assert (jalph - j) / (np.dot(alph * h, gradj)) < 1.0001
Ejemplo n.º 8
0
def run_4dvar_desroziers(pvals, east_west):
    d = dc.DalecData(2015, 2016, 'nee_day_'+east_west+', nee_night_'+east_west+', c_roo_'+east_west+','
                     ' c_woo_'+east_west+', clma, lai_'+east_west,
                     nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc')
    d.B = b
    d.ob_err_dict['clma'] = 0.33 * d.ob_err_dict['clma']
    d.ob_err_dict['lai'] = 0.33 * d.ob_err_dict['lai']
    m = mc.DalecModel(d)
    m.yoblist = perturb_obs(m.yoblist, m.yerroblist)
    out = m.find_min_tnc_cvt(pvals, dispp=0)
    return m.yoblist, pvals, out
Ejemplo n.º 9
0
def r_estimate(yoblist, pvals, out, east_west):
    d = dc.DalecData(2015, 2016, 'nee_day_'+east_west+', nee_night_'+east_west+', c_roo_'+east_west+','
                     ' c_woo_'+east_west+', clma, lai_'+east_west,
                     nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc')
    d.B = b
    m = mc.DalecModel(d)
    m.yoblist = yoblist
    pvallistxb = m.mod_list(pvals)
    pvallistxa = m.mod_list(out)
    yhxb = m.yoblist - m.hxcost(pvallistxb)
    yhxa = m.yoblist - m.hxcost(pvallistxa)
    r_estimate = np.dot(np.matrix(yhxa).T, np.matrix(yhxb))
    return r_estimate
Ejemplo n.º 10
0
def test_linmod(gamma=1e1):
    """ Test from TLM to check it converges.
    """
    d = dC.DalecData(731, 'nee')
    pvals = d.pvals
    m = mc.DalecModel(d)
    cx, matlist = m.linmod_list(pvals)
    pvals2 = pvals * (1 + 0.3 * gamma)
    cxdx = m.mod_list(pvals2)[-1]
    pvals3 = pvals * (0.3 * gamma)

    dxl = np.linalg.norm(np.dot(m.mfac(matlist, 730), pvals3.T))

    dxn = np.linalg.norm(cxdx - cx - dxl)
    return dxl / dxn
Ejemplo n.º 11
0
def east_west_run_b(f_name, east_west, net_file="None"):
    if east_west == 'east':
        obs = 'nee_day_east, nee_night_east, clma, lai_east, c_woo_east, c_roo_east'
    elif east_west == 'west':
        obs = 'nee_day_west, nee_night_west, clma, lai_west, c_woo_west, c_roo_west'
    if net_file != "None":
        d = dc.DalecData(2015, 2016, obs, nc_file=net_file)
    else:
        d = dc.DalecData(2015, 2016, obs)
    m = mc.DalecModel(d)
    assim_results, xa = m.find_min_tnc_cvt(d.edinburgh_mean,
                                           f_name + '_assim_res')
    # Plot 4dvar time series
    ax, fig = p.plot_4dvar('nee', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_nee.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('nee_day', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_need.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('nee_night', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_neen.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('lai', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_lai.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('c_woo', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_cwoo.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('c_roo', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_croo.png', bbox_inches='tight')

    # Plot scatter plots of obs
    ax, fig = p.plot_scatter('nee_day', xa, d, len(d.I), 'a')
    fig.savefig(f_name + '_need_scat.png', bbox_inches='tight')
    ax, fig = p.plot_scatter('nee_night', xa, d, len(d.I), 'a')
    fig.savefig(f_name + '_neen_scat.png', bbox_inches='tight')

    # Plot error in analysis and background
    ax, fig = p.plot_a_inc(d.edinburgh_mean, xa, east_west)
    fig.savefig(f_name + '_xa_inc.png', bbox_inches='tight')
    return 'all experimented'
Ejemplo n.º 12
0
def test_cost(alph=1e-8, vect=0):
    """Test for cost and gradcost functions.
    """
    d = dC.DalecData(365, 'nee')
    m = mc.DalecModel(d)
    pvals = d.edinburghmean
    gradj = m.gradcost2(pvals)
    if vect == True:
        h = pvals * (np.linalg.norm(pvals))**(-1)
    else:
        h = gradj * (np.linalg.norm(gradj))**(-1)
    j = m.cost(pvals)
    jalph = m.cost(pvals + alph * h)
    print jalph - j
    print np.dot(alph * h, gradj)
    return (jalph - j) / (np.dot(alph * h, gradj))
Ejemplo n.º 13
0
def run_assimilation(yr):
    d = ahd.DalecData(
        yr,
        yr + 1,
        'nee, nee_day, nee_night',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc')
    m = mc.DalecModel(d)
    find_min, xa = m.find_min_tnc_cvt(d.xb_ew_lai_hi)
    result_dic = {}
    result_dic['time'] = [t.strftime('%m/%d/%Y') for t in d.dates]
    result_dic['incident_radiation'] = d.I.tolist()
    result_dic['t_mean'] = d.t_mean.tolist()
    result_dic['doy'] = d.D.tolist()
    mod_lst_xb = m.mod_list(d.xb_ew_lai_hi)
    result_dic['nee_day_xb'] = m.oblist('nee_day', mod_lst_xb).tolist()
    result_dic['nee_xb'] = m.oblist('nee', mod_lst_xb).tolist()
    mod_lst_xa = m.mod_list(xa)
    result_dic['nee_day_xa'] = m.oblist('nee_day', mod_lst_xa).tolist()
    result_dic['nee_xa'] = m.oblist('nee', mod_lst_xa).tolist()
    return result_dic
Ejemplo n.º 14
0
def return_a_mat(pick_dict):
    b = pick_dict['b_mat']  #1.5*pick_dict['b_mat']
    # east data
    d = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    d.B = b
    d.ob_dict = pick_dict['obs']
    d.ob_err_dict = pick_dict['obs_err']
    # obs err scaling
    # west data

    # obs err scaling
    # setup model
    m = mc.DalecModel(d)
    m.rmatrix = pick_dict['rmat']
    a_cov = m.acovmat(pick_dict['xa'])
    return a_cov
Ejemplo n.º 15
0
def east_west_run(f_name, ob_list, east_west):
    ob_str = ''
    for ob in ob_list:
        if ob == 'clma':
            ob_str += ob + ','
        else:
            ob_str += ob + '_' + east_west + ','
    d = dc.DalecData(2015, 2016, ob_str)
    d.B = d.make_b(d.edinburgh_std)
    m = mc.DalecModel(d)
    assim_results, xa = m.find_min_tnc_cvt(d.edinburgh_mean,
                                           f_name + '_assim_res')
    # Plot 4dvar time series
    ax, fig = p.plot_4dvar('nee', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_nee.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('nee_day', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_need.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('nee_night', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_neen.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('lai', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_lai.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('c_woo', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_cwoo.png', bbox_inches='tight')
    ax, fig = p.plot_4dvar('c_roo', d, xb=d.edinburgh_mean, xa=xa)
    fig.savefig(f_name + '_croo.png', bbox_inches='tight')

    # Plot scatter plots of obs
    ax, fig = p.plot_scatter('nee_day', xa, d, len(d.I), 'a')
    fig.savefig(f_name + '_need_scat.png', bbox_inches='tight')
    ax, fig = p.plot_scatter('nee_night', xa, d, len(d.I), 'a')
    fig.savefig(f_name + '_neen_scat.png', bbox_inches='tight')

    # Plot error in analysis and background
    ax, fig = p.plot_a_inc(d.edinburgh_mean, xa, east_west)
    fig.savefig(f_name + '_xa_inc.png', bbox_inches='tight')
    return 'all experimented'
Ejemplo n.º 16
0
def plot_cum_nee(f_name, exp_name, f_typ='pdf', exp='a'):
    sns.set_context('poster',
                    font_scale=1.,
                    rc={
                        'lines.linewidth': 1.5,
                        'lines.markersize': 1.
                    })
    sns.set_style('whitegrid')
    if not os.path.exists(f_name):
        os.makedirs(f_name)
    east = pickle.load(open(exp_name + 'east_assim', 'r'))
    west = pickle.load(open(exp_name + 'west_assim', 'r'))
    b = 1.5 * east['b_mat']
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    de.B = b
    de.ob_dict = east['obs']
    de.ob_err_dict = east['obs_err']
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    dw.B = b
    dw.ob_dict = west['obs']
    dw.ob_err_dict = west['obs_err']
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # a_east = pickle.load(open('a_east.p', 'r'))
    # a_west = pickle.load(open('a_west.p', 'r'))
    a_east = me.acovmat(east['xa'])
    a_west = mw.acovmat(west['xa'])
    e_ens = p.create_ensemble(de, a_east, east['xa'])
    w_ens = p.create_ensemble(de, a_west, west['xa'])
    p_e_ens = p.plist_ens(de, e_ens)
    p_w_ens = p.plist_ens(dw, w_ens)
    plot, ob_std_e, ob_std_w = p.plot_east_west_paper_cum2(
        'nee',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label='Cumulative NEE (g C m$^{-2}$)')
    plot[1].savefig(f_name + 'nee_cum.' + f_typ, bbox_inches='tight')
    return east['xa'], west['xa'], de, dw, ob_std_e, ob_std_w
Ejemplo n.º 17
0
def save_paper_plots(f_name, exp_name):
    east = pickle.load(open(exp_name + 'east_assim', 'r'))
    west = pickle.load(open(exp_name + 'west_assim', 'r'))
    #b_cor = pickle.load(open('b_edc_cor.p', 'r'))
    #b_std = np.sqrt(np.diag(pickle.load(open('b_edc.p', 'r'))))
    #b_std[10] = 0.2*b_std[10]
    #b_std[1] = 0.2*b_std[1]
    #b_std[2] = 0.1*b_std[2]
    #b_std[0:17] = b_std[0:17]*0.5
    #D = np.zeros_like(b_cor)
    #np.fill_diagonal(D, b_std)
    #b = 0.6*np.dot(np.dot(D, b_cor), D)  #*0.6
    b = east['b_mat']
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    de.B = b
    de.ob_dict = east['obs']
    de.ob_err_dict = east['obs_err']
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    dw.B = b
    dw.ob_dict = west['obs']
    dw.ob_err_dict = west['obs_err']
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # a_east = pickle.load(open('a_east.p', 'r'))
    # a_west = pickle.load(open('a_west.p', 'r'))
    a_east = me.acovmat(east['xa'])
    a_west = mw.acovmat(west['xa'])

    ax, fig = p.plot_east_west_paper(
        'rh',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'Heterotrophic respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'rh.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'nee_day',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'NEE$_{day}$ (g C m$^{-2}$ day$^{-1}$)',
        y_lim=[-15, 5])
    fig.savefig(f_name + 'nee_day.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper_cum(
        'nee_day',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label='Cumulative NEE (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'nee_day_cum.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper_cum(
        'nee',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label='Cumulative NEE (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'nee_cum.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'nee_night',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'NEE$_{night}$ (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'nee_night.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'gpp',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'Gross primary production (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'gpp.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper_cum(
        'gpp',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label='Cumulative GPP (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'gpp_cum.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper('lai',
                                     east['xa'],
                                     west['xa'],
                                     de,
                                     dw,
                                     a_east,
                                     a_west,
                                     y_label=r'Leaf area index')
    fig.savefig(f_name + 'lai.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'c_woo',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'Woody biomass and coarse root carbon (g C m$^{-2}$)',
        y_lim=[9000, 14500])
    fig.savefig(f_name + 'c_woo.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'ra',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'Autotrophic respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'ra.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'rt',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label=r'Total ecosystem respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'rt.pdf', bbox_inches='tight')
    ax, fig = p.plot_east_west_paper_cum(
        'rt',
        east['xa'],
        west['xa'],
        de,
        dw,
        a_east,
        a_west,
        y_label='Cumulative ecosystem respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'rt_cum.pdf', bbox_inches='tight')
    ax, fig = p.plot_inc_east_west(east['xb'], east['xa'], west['xa'])
    fig.savefig(f_name + 'xa_inc.pdf', bbox_inches='tight')
    return 'done!'
Ejemplo n.º 18
0
import data_class as dc
import mod_class as mc
import numpy as np
import sympy as smp
import plot as p
import re
import os
import pickle
import matplotlib.pyplot as plt
import seaborn as sns

d = dc.DalecData(2015,
                 2016,
                 'clma',
                 nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
                 scale_nee=0)


def experiment_bmat(f_name):
    # Construct B
    b_cor = pickle.load(open('b_edc_cor.p', 'r'))
    b_std = np.sqrt(np.diag(pickle.load(open('b_edc.p', 'r'))))
    b_std[0:17] = b_std[0:17] * 0.5
    D = np.zeros_like(b_cor)
    np.fill_diagonal(D, b_std)
    b = 0.8 * np.dot(np.dot(D, b_cor), D)  #*0.6
    experiment(f_name, b)
    return 'done!'


def experiment_bmat_ceff(f_name):
Ejemplo n.º 19
0
def east_west_joint_run_nee_err_a(xb,
                                  f_name,
                                  nee_scale=0,
                                  clma_er=1.,
                                  lai_er=1.,
                                  need_er=1.,
                                  neen_er=1.,
                                  cr_er=1.,
                                  cw_er=1.):
    f_name += 'clmaer%r_laier%r_needer%r_neener%r_crer%r_cwer%r' % (
        clma_er, lai_er, need_er, neen_er, cr_er, cw_er)
    # Construct B
    b = 0.6 * pickle.load(open('a_cov.p', 'r'))
    # b = pickle.load(open('b_edc.p', 'r'))
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'nee_day_east, nee_night_east, c_woo_east, clma, lai_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=nee_scale)
    de.B = b
    # obs err scaling
    de.ob_err_dict['clma'] = clma_er * de.ob_err_dict['clma']
    de.ob_err_dict['lai'] = lai_er * de.ob_err_dict['lai']
    de.ob_err_dict['nee_day'] = need_er * de.ob_err_dict['nee_day']
    de.ob_err_dict['nee_night'] = neen_er * de.ob_err_dict['nee_night']
    # de.ob_err_dict['c_roo'] = cr_er * de.ob_err_dict['c_roo']
    de.ob_err_dict['c_woo'] = cw_er * de.ob_err_dict['c_woo']

    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'nee_day_west, nee_night_west, c_woo_west, clma, lai_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee.nc',
        scale_nee=nee_scale)
    dw.B = b
    # obs err scaling
    dw.ob_err_dict['clma'] = clma_er * dw.ob_err_dict['clma']
    dw.ob_err_dict['lai'] = lai_er * dw.ob_err_dict['lai']
    dw.ob_err_dict['nee_day'] = need_er * dw.ob_err_dict['nee_day']
    dw.ob_err_dict['nee_night'] = neen_er * dw.ob_err_dict['nee_night']
    # dw.ob_err_dict['c_roo'] = cr_er * dw.ob_err_dict['c_roo']
    dw.ob_err_dict['c_woo'] = cw_er * dw.ob_err_dict['c_woo']
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # run DA scheme
    xa_e = me.find_min_tnc_cvt(xb, f_name + 'east_assim')
    xa_w = mw.find_min_tnc_cvt(xb, f_name + 'west_assim')
    # save plots
    save_plots(f_name, xb, xa_e[1], xa_w[1], de, dw, me, mw)
    return 'done'
Ejemplo n.º 20
0
def save_paper_plots(f_name, exp_name, f_typ='pdf', exp='a'):
    if not os.path.exists(f_name):
        os.makedirs(f_name)
    east = pickle.load(open(exp_name + 'east_assim', 'r'))
    west = pickle.load(open(exp_name + 'west_assim', 'r'))
    b = 1.5 * east['b_mat']
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    de.B = b
    de.ob_dict = east['obs']
    de.ob_err_dict = east['obs_err']
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee2.nc',
        scale_nee=1)
    dw.B = b
    dw.ob_dict = west['obs']
    dw.ob_err_dict = west['obs_err']
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # a_east = pickle.load(open('a_east.p', 'r'))
    # a_west = pickle.load(open('a_west.p', 'r'))
    a_east = me.acovmat(east['xa'])
    a_west = mw.acovmat(west['xa'])
    e_ens = p.create_ensemble(de, a_east, east['xa'])
    w_ens = p.create_ensemble(de, a_west, west['xa'])
    p_e_ens = p.plist_ens(de, e_ens)
    p_w_ens = p.plist_ens(dw, w_ens)

    annual_flux_lst = []
    if exp == 'a':
        cwoo_ylim = [0, 16000]
    else:
        cwoo_ylim = [9000, 14500]
    # set context
    sns.set_context('poster',
                    font_scale=1.,
                    rc={
                        'lines.linewidth': .8,
                        'lines.markersize': 1.
                    })
    sns.set_style('whitegrid')

    # joint plots
    ax, fig = p.plot_east_west_paper_part(
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Cumulative fluxes (g C m$^{-2}$)')
    fig.savefig(f_name + 'cum_flux.' + f_typ, bbox_inches='tight')
    #ax, fig = p.plot_obs_east_west_part(east['xa'], de)
    #fig.savefig(f_name+'resp_part_e.'+f_typ, bbox_inches='tight')
    #ax, fig = p.plot_obs_east_west_part(west['xa'], de)
    #fig.savefig(f_name+'resp_part_w.'+f_typ, bbox_inches='tight')
    fig = p.part_plot(east['xa'], west['xa'], de, dw)
    fig.savefig(f_name + 'resp_part.' + f_typ, bbox_inches='tight')

    f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
    # Observed values
    p.plot_east_west_paper('nee_day',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'NEE$_{day}$ (g C m$^{-2}$ day$^{-1}$)',
                           y_lim=[-15, 5],
                           axes=ax1)
    ax1.set_title(r'a) Daytime NEE')  #, y=1.06)
    p.plot_east_west_paper('nee_night',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'NEE$_{night}$ (g C m$^{-2}$ day$^{-1}$)',
                           axes=ax2)
    ax2.set_title(r'b) Nighttime NEE')  #, y=1.06)
    p.plot_east_west_paper('lai',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'Leaf area index',
                           axes=ax3)
    ax3.set_title(r'c) Leaf area index')  #, y=1.06)
    p.plot_east_west_paper('c_woo',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'C$_{woo}$ (g C m$^{-2}$)',
                           y_lim=cwoo_ylim,
                           axes=ax4)  # [9000, 14500][3000, 14500]
    ax4.set_title(r'd) Woody and coarse root carbon')  #, y=1.06)
    f.tight_layout()
    #f.subplots_adjust(hspace=.5)
    f.savefig(f_name + 'obs_comp.' + f_typ)  #, bbox_inches='tight')

    f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
    # Fluxes
    p.plot_east_west_paper('gpp',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'GPP (g C m$^{-2}$ day$^{-1}$)',
                           axes=ax1)
    ax1.set_title(r'a) Gross primary productivity')  #, y=1.06)

    p.plot_east_west_paper('rt',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'R$_{eco}$ (g C m$^{-2}$ day$^{-1}$)',
                           axes=ax2)
    ax2.set_title(r'b) Total ecosystem respiration')  #, y=1.06)

    p.plot_east_west_paper('ra',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'R$_{a}$ (g C m$^{-2}$ day$^{-1}$)',
                           axes=ax3)
    ax3.set_title(r'c) Autotrophic respiration')  #, y=1.06)

    p.plot_east_west_paper('rh',
                           east['xa'],
                           west['xa'],
                           de,
                           dw,
                           p_e_ens,
                           p_w_ens,
                           y_label=r'R$_{h}$ (g C m$^{-2}$ day$^{-1}$)',
                           axes=ax4)
    ax4.set_title(r'd) Heterotrophic respiration')  #, y=1.06)
    f.tight_layout()
    #f.subplots_adjust(hspace=.5)
    f.savefig(f_name + 'flux_comp.' + f_typ)

    # std dev reduction
    ax, fig = p.plot_var_red_east_west(b, a_east, a_west)
    fig.savefig(f_name + 'var_red.' + f_typ, bbox_inches='tight')

    sns.set_style('whitegrid')
    ax, fig = p.plot_east_west_paper_part(
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label='Cumulative NEE partitioning (g C m$^{-2}$)')
    fig.savefig(f_name + 'nee_cum_part.' + f_typ, bbox_inches='tight')

    ax, fig = p.plot_east_west_paper(
        'rh',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Heterotrophic respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'rh.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'nee_day',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'NEE$_{day}$ (g C m$^{-2}$ day$^{-1}$)',
        y_lim=[-15, 5])
    fig.savefig(f_name + 'nee_day.' + f_typ, bbox_inches='tight')
    # ax, fig, cum_east, cum_west = p.plot_east_west_paper_cum('nee_day', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label='Cumulative NEE (g C m$^{-2}$ day$^{-1}$)')
    # fig.savefig(f_name+'nee_day_cum.png', bbox_inches='tight')
    ax, fig, cum_east, cum_west = p.plot_east_west_paper_cum(
        'nee',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label='Cumulative NEE (g C m$^{-2}$)')
    fig.savefig(f_name + 'nee_cum.' + f_typ, bbox_inches='tight')
    annual_flux_lst.append(cum_east)
    annual_flux_lst.append(cum_west)
    ax, fig = p.plot_east_west_paper(
        'nee_night',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'NEE$_{night}$ (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'nee_night.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'gpp',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Gross primary production (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'gpp.' + f_typ, bbox_inches='tight')
    ax, fig, cum_east, cum_west = p.plot_east_west_paper_cum(
        'gpp',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label='Cumulative GPP (g C m$^{-2}$)')
    fig.savefig(f_name + 'gpp_cum.' + f_typ, bbox_inches='tight')
    annual_flux_lst.append(cum_east)
    annual_flux_lst.append(cum_west)
    ax, fig = p.plot_east_west_paper('lai',
                                     east['xa'],
                                     west['xa'],
                                     de,
                                     dw,
                                     p_e_ens,
                                     p_w_ens,
                                     y_label=r'Leaf area index')
    fig.savefig(f_name + 'lai.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'c_woo',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Woody biomass and coarse root carbon (g C m$^{-2}$)',
        y_lim=cwoo_ylim)
    fig.savefig(f_name + 'c_woo.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'ra',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Autotrophic respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'ra.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_east_west_paper(
        'rt',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label=r'Total ecosystem respiration (g C m$^{-2}$ day$^{-1}$)')
    fig.savefig(f_name + 'rt.' + f_typ, bbox_inches='tight')
    ax, fig, cum_east, cum_west = p.plot_east_west_paper_cum(
        'rt',
        east['xa'],
        west['xa'],
        de,
        dw,
        p_e_ens,
        p_w_ens,
        y_label='Cumulative ecosystem respiration (g C m$^{-2}$)')
    fig.savefig(f_name + 'rt_cum.' + f_typ, bbox_inches='tight')
    annual_flux_lst.append(cum_east)
    annual_flux_lst.append(cum_west)
    ax, fig = p.plot_inc_east_west(east['xb'], east['xa'], west['xa'])
    fig.savefig(f_name + 'xa_inc.' + f_typ, bbox_inches='tight')
    ax, fig = p.plot_rmat(p.cov2cor(east['rmat']))
    fig.savefig(f_name + 'rmat_east.pdf', bbox_inches='tight')
    ax, fig = p.plot_rmat(p.cov2cor(west['rmat']))
    fig.savefig(f_name + 'rmat_west.pdf', bbox_inches='tight')
    f = open(f_name + 'annual_fluxes.txt', 'w')
    for item in annual_flux_lst:
        f.write("%s\n" % item)
    f.close()
    return 'done!'
Ejemplo n.º 21
0
def save_paper_plots_test(f_name, exp_name):
    if not os.path.exists(f_name):
        os.makedirs(f_name)
    east = pickle.load(open(exp_name + 'east_assim', 'r'))
    west = pickle.load(open(exp_name + 'west_assim', 'r'))
    b = east['b_mat']
    # east data
    de = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=1)
    de_all = dc.DalecData(
        2015,
        2016,
        'clma, nee_day_east, nee_night_east, lai_east, c_woo_east',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=1)
    de.B = b
    de.ob_dict = east['obs']
    de.ob_err_dict = east['obs_err']
    # obs err scaling
    # west data
    dw = dc.DalecData(
        2015,
        2016,
        'clma',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=1)
    dw_all = dc.DalecData(
        2015,
        2016,
        'clma, nee_day_west, nee_night_west, lai_west, c_woo_west',
        nc_file='../../alice_holt_data/ah_data_daily_test_nee3.nc',
        scale_nee=1)
    dw.B = b
    dw.ob_dict = west['obs']
    dw.ob_err_dict = west['obs_err']
    # obs err scaling
    # setup model
    me = mc.DalecModel(de)
    me.rmatrix = r_mat_corr(me.yerroblist,
                            me.ytimestep,
                            me.y_strlst,
                            me.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    mw = mc.DalecModel(dw)
    mw.rmatrix = r_mat_corr(mw.yerroblist,
                            mw.ytimestep,
                            mw.y_strlst,
                            mw.rmatrix,
                            corr=0.3,
                            tau=2.)[1]
    # a_east = pickle.load(open('a_east.p', 'r'))
    # a_west = pickle.load(open('a_west.p', 'r'))
    a_east = me.acovmat(east['xa'])
    a_west = mw.acovmat(west['xa'])
    e_ens = p.create_ensemble(de, a_east, east['xa'])
    w_ens = p.create_ensemble(de, a_west, west['xa'])
    p_e_ens = p.plist_ens(de, e_ens)
    p_w_ens = p.plist_ens(dw, w_ens)

    ax, fig = p.plot_var_red_east_west(b, a_east, a_west)
    ax.set_ylim([0, 100])
    fig.savefig(f_name + 'var_red.png', bbox_inches='tight')
    sns.set_context('poster',
                    font_scale=1.,
                    rc={
                        'lines.linewidth': .8,
                        'lines.markersize': 1.
                    })
    sns.set_style('whitegrid')
    #de.ob_err_dict['lai']=np.sqrt(de.ob_err_dict['lai'])
    #dw.ob_err_dict['lai']=np.sqrt(dw.ob_err_dict['lai'])

    #ax, fig = p.plot_east_west_paper_part(east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label='Cumulative NEE partitioning (g C m$^{-2}$)')
    #fig.savefig(f_name+'nee_cum_part.png', bbox_inches='tight')

    #f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
    # Observed values
    #p.plot_east_west_paper('nee_day', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'NEE$_{day}$ (g C m$^{-2}$ day$^{-1}$)', y_lim=[-14, 6], axes=ax1,
    #                       de_obdic=de_all,dw_obdic=dw_all)
    #ax1.set_ylim([-14, 6])
    #ax1.set_title(r'a) Daytime NEE')#, y=1.06)
    #p.plot_east_west_paper('nee_night', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'NEE$_{night}$ (g C m$^{-2}$ day$^{-1}$)', y_lim=[-14, 6],
    #                       axes=ax2, de_obdic=de_all,
    #                       dw_obdic=dw_all)
    #ax2.set_ylim([-14, 6])
    #ax2.set_title(r'b) Nighttime NEE')#, y=1.06)
    #p.plot_east_west_paper('lai', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'Leaf area index', y_lim=[0, 5], axes=ax3, de_obdic=de_all,
    #                       dw_obdic=dw_all)
    #ax3.set_ylim([0, 5])
    #ax3.set_title(r'c) Leaf area index')#, y=1.06)
    #p.plot_east_west_paper('c_woo', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'C$_{woo}$ (g C m$^{-2}$)',
    #                                 y_lim=[9000, 14500], axes=ax4, de_obdic=de_all,
    #                       dw_obdic=dw_all)
    #ax4.set_ylim([0, 18000])
    #ax4.set_title(r'd) Woody and coarse root carbon')#, y=1.06)
    #f.tight_layout()
    #f.subplots_adjust(hspace=.5)
    #f.savefig(f_name+'obs_comp.pdf') #, bbox_inches='tight')

    #f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2)
    # Fluxes
    #p.plot_east_west_paper('gpp', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'GPP (g C m$^{-2}$ day$^{-1}$)', axes=ax1)
    #ax1.set_title(r'a) Gross primary productivity')#, y=1.06)

    #p.plot_east_west_paper('rt', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'R$_{eco}$ (g C m$^{-2}$ day$^{-1}$)', axes=ax2)
    #ax2.set_title(r'b) Total ecosystem respiration')#, y=1.06)

    #p.plot_east_west_paper('ra', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'R$_{a}$ (g C m$^{-2}$ day$^{-1}$)', axes=ax3)
    #ax3.set_title(r'c) Autotrophic respiration')#, y=1.06)

    #p.plot_east_west_paper('rh', east['xa'], west['xa'], de, dw, p_e_ens, p_w_ens,
    #                                 y_label=r'R$_{h}$ (g C m$^{-2}$ day$^{-1}$)', axes=ax4)
    #ax4.set_title(r'd) Heterotrophic respiration')#, y=1.06)
    #f.tight_layout()
    #f.subplots_adjust(hspace=.5)
    #f.savefig(f_name+'flux_comp.pdf') #, bbox_inches='tight')
    return 'done!'