示例#1
0
def plot_replica_grid_with_colors(dataset, xlabel, ylabel, title, annotations,
            coloridxs, grid_dims, saveas, saveas_formats=["png","pdf"], display=False, y_ticks=None):
    """ Plot replica observables with their replica average  NOT DONE"""
    cwd = os.getcwd()

    parent_dirs = dataset.parent_dirs
    sub_dirs = dataset.sub_dirs
    n_dirs = len(parent_dirs)
     
    all_interp_points, all_rep_avg_data, all_min_max = get_replica_average(dataset)
    fig, axes = plt.subplots(grid_dims[0], grid_dims[1], sharex=True, sharey=True)
    counter = 0
    for i in range(n_dirs):
         Plot individual replicas
        rep_bins, rep_data = get_replicas(dataset, i)
        ax = axes[counter / grid_dims[1], counter % grid_dims[1]]
        for rep_idx in range(len(rep_bins)):
            ax.plot(rep_bins[rep_idx], rep_data[rep_idx], color=cubecmap(coloridxs[i]), alpha=0.3)

        # Plot bold replica average
        ax.plot(all_interp_points[i], all_rep_avg_data[i], lw=3, color=cubecmap(coloridxs[i]))
        counter += 1

        if y_ticks is not None:
            ax.set_yticks(y_ticks)
            ax.set_ylim(y_ticks[0],y_ticks[-1])

        ax.annotate("%s" % annotations[i], xy=(0.5, 0.5), xytext=dataset.xytext,
                            xycoords="axes fraction", textcoords="axes fraction")
示例#2
0
def plot_Fvsx_variance_gridplot(myroot,
                                parent_dirs,
                                sub_dirs,
                                variance,
                                Fprofiles,
                                Fmid_bins,
                                coloridx,
                                name,
                                coordname,
                                display=True,
                                nrows=3,
                                ncols=4):
    """Gridplot free energy profiles with average profile in bold """
    if not display:
        import matplotlib
        matplotlib.use("Agg")
    import matplotlib.pyplot as plt
    from plotter.cube_cmap import cubecmap
    from scipy.interpolate import interp1d
    fig1, axes = plt.subplots(nrows, ncols, sharex=True, sharey=True)
    counter = 0
    Finterp_all = []
    for i in range(len(parent_dirs)):
        Finterp_rep = []
        xall = []
        i_idx = counter / 4
        j_idx = counter % 4
        ax = axes[i_idx, j_idx]
        for j in range(len(sub_dirs)):
            Fvsx = Fprofiles[i][j]
            mid_bin = Fmid_bins[i][j]

            ax.plot(mid_bin, Fvsx, color=cubecmap(coloridx[i]), alpha=0.2)

            Finterp = interp1d(mid_bin, Fvsx, kind="cubic")
            Finterp_rep.append(Finterp)
            xall.append(mid_bin)

        Finterp_all.append(Finterp_rep)
        ax.text(mid_bin.max() * 0.3, 3.2, "$b^2 = %s$" % variance[i])
        qmax = min([max(xall[x]) for x in range(len(xall))])
        qmin = max([min(xall[x]) for x in range(len(xall))])
        q = np.linspace(qmin, qmax, 100)
        Favg = np.mean(np.array(
            [Finterp_rep[x](q) for x in range(len(Finterp_rep))]),
                       axis=0)
        #ax.plot(q,Favg,color="#5DA5DA")
        ax.plot(q, Favg, color=cubecmap(coloridx[i]), lw=3)
        ax.set_ylim(0, 4)

        counter += 1

    axes[1, 0].set_ylabel("Free energy F(Q) (k$_B$T)")
    axes[2, 1].set_xlabel("Folding Q")
    fig1.suptitle("Free energy curves %s" % name, fontsize=18)
    fig1.subplots_adjust(hspace=0, wspace=0)
    if not os.path.exists("plots"):
        os.mkdir("plots")
    fig1.savefig("plots/all_b2_profiles_%s.png" % coordname)
示例#3
0
def plot_contact_fluctuations_vs_Q(coord_label, native_pairs, nonnative_pairs,
                                   Qbins, Qi_vs_Q, dQi2_vs_Q, A_vs_Q,
                                   Amax_vs_Q, dA2_vs_Q, Ai_vs_Q, dAi2_vs_Q,
                                   no_display):
    n_nat = len(native_pairs)
    nat_loops = (native_pairs[:, 1] - native_pairs[:, 0]).astype(float)
    nat_coloring = [
        (nat_loops[i] - min(nat_loops)) / (max(nat_loops) - min(nat_loops))
        for i in range(n_nat)
    ]

    n_nnat = len(nonnative_pairs)
    nnat_loops = (nonnative_pairs[:, 1] - nonnative_pairs[:, 0]).astype(float)
    nnat_coloring = [
        (nnat_loops[i] - min(nnat_loops)) / (max(nnat_loops) - min(nnat_loops))
        for i in range(n_nnat)
    ]

    plt.figure()
    for i in range(n_nat):
        plt.plot(Qbins, Qi_vs_Q[:, i], color=cubecmap(nat_coloring[i]))
    label_and_save(coord_label, "$\langle Q_i \\rangle$",
                   "Native contact formation", "Qivscoord")

    plt.figure()
    for i in range(n_nat):
        plt.plot(Qbins, dQi2_vs_Q[:, i], color=cubecmap(nat_coloring[i]))
    label_and_save(coord_label, "$\langle Q_i^2 \\rangle$",
                   "Native contact fluctuations", "dQi2vscoord")

    plt.figure()
    plt.plot(Qbins, A_vs_Q)
    label_and_save(coord_label, "$\langle A \\rangle$",
                   "Average non-native contacts", "Avscoord")

    plt.figure()
    plt.plot(Qbins, Amax_vs_Q)
    label_and_save(coord_label, "max$\left( A \\right)$",
                   "Max non-native contacts", "Amaxvscoord")

    plt.figure()
    plt.plot(Qbins, dA2_vs_Q)
    label_and_save(coord_label, "$\langle\delta A^2  \\rangle$",
                   "Non-native contact fluctuations", "dA2vscoord")

    plt.figure()
    for i in range(n_nnat):
        plt.plot(Qbins, Ai_vs_Q[:, i], color=cubecmap(nnat_coloring[i]))
    label_and_save(coord_label, "$\langle A_i \\rangle$",
                   "Non-native contacts", "Aivscoord")

    plt.figure()
    for i in range(n_nnat):
        plt.plot(Qbins, dAi2_vs_Q[:, i], color=cubecmap(nnat_coloring[i]))
    label_and_save(coord_label, "$\langle\delta A_i^2 \\rangle$",
                   "Non-native contact fluctuations", "dAi2vscoord")

    if not no_display:
        plt.show()
示例#4
0
def compute_free_energy_profiles_vs_T(coordinate,coordmin,coordmax,dcoord,tempsfile):
    """Compute potential of mean force along a coordinate as a function of temperature"""

    bin_edges = np.arange(coordmin,coordmax + dcoord,dcoord)

    bin_centers = 0.5*(bin_edges[1:] + bin_edges[:-1])
    
    dirs = [ x.rstrip("\n") for x in open(tempsfile,"r").readlines() ]

    unique_Tlist, sorted_dirs = get_unique_Tlist(dirs)
    print "Loading u_kn"
    wantT, sub_indices, E, u_kn, N_k = get_ukn(unique_Tlist,sorted_dirs)
    beta = np.array([ 1./(kb*x) for x in wantT ])

    print "solving mbar"
    mbar = pymbar.MBAR(u_kn,N_k)

    # Compute bin expectations at all temperatures. Free energy profile.
    print "computing expectations"
    A_indicators = get_binned_observables(bin_edges,coordinate,sorted_dirs,sub_indices)

    coordname = coordinate.split(".")[0]
    if not os.path.exists("pymbar_%s" % coordname):
        os.mkdir("pymbar_%s" % coordname)
    os.chdir("pymbar_%s" % coordname)

    Tndxs = np.argsort(wantT)
    sortT = wantT[Tndxs]

    np.savetxt("outputT",wantT[Tndxs])
    np.savetxt("bin_edges",bin_edges)
    np.savetxt("bin_centers",bin_centers)

    plt.figure()
    # Compute pmf at each temperature.
    for i in range(len(wantT)):
        Tstr = "%.2f" % wantT[Tndxs[i]]
        #x = (max(sortT) - sortT[i])/(max(sortT) - min(sortT))   # Reverse color ordering
        x = (sortT[i] - min(sortT))/(max(sortT) - min(sortT))   # Color from blue to red
        
        A_ind_avg, dA_ind_avg, d2A_ind_avg = mbar.computeMultipleExpectations(A_indicators,u_kn[Tndxs[i],:])

        pmf = -np.log(A_ind_avg)
        min_pmf = min(pmf)
        pmf -= min_pmf
        pmf_err_lower = -np.log(A_ind_avg - dA_ind_avg) - min_pmf
        pmf_err_upper = -np.log(A_ind_avg + dA_ind_avg) - min_pmf
        np.savetxt("free_%s" % Tstr, np.array([pmf,pmf_err_lower,pmf_err_upper]).T)
    
        plt.plot(bin_centers,pmf,lw=2,label=Tstr,color=cubecmap(x))

    plt.xlabel("%s" % coordname,fontsize=18)
    plt.ylabel("F(%s)" % coordname,fontsize=18)
    
    plt.savefig("Fvs%s_all.png" % coordname)
    plt.savefig("Fvs%s_all.pdf" % coordname)
    plt.savefig("Fvs%s_all.eps" % coordname)

    os.chdir("..")
示例#5
0
def plot_Fvsx_variance_gridplot(myroot,parent_dirs,sub_dirs,variance,Fprofiles,Fmid_bins,coloridx,name,coordname,display=True,nrows=3,ncols=4):
    """Gridplot free energy profiles with average profile in bold """
    if not display:
        import matplotlib
        matplotlib.use("Agg")
    import matplotlib.pyplot as plt
    from plotter.cube_cmap import cubecmap
    from scipy.interpolate import interp1d
    fig1,axes = plt.subplots(nrows,ncols,sharex=True,sharey=True)
    counter = 0
    Finterp_all = []
    for i in range(len(parent_dirs)):
        Finterp_rep = []
        xall = []
        i_idx = counter / 4
        j_idx = counter % 4
        ax = axes[i_idx,j_idx]
        for j in range(len(sub_dirs)):
            Fvsx = Fprofiles[i][j]
            mid_bin = Fmid_bins[i][j]

            ax.plot(mid_bin,Fvsx,color=cubecmap(coloridx[i]),alpha=0.2)

            Finterp = interp1d(mid_bin,Fvsx,kind="cubic")
            Finterp_rep.append(Finterp)
            xall.append(mid_bin)

        Finterp_all.append(Finterp_rep)
        ax.text(mid_bin.max()*0.3,3.2,"$b^2 = %s$" % variance[i])
        qmax = min([ max(xall[x]) for x in range(len(xall)) ])
        qmin = max([ min(xall[x]) for x in range(len(xall)) ])
        q = np.linspace(qmin,qmax,100)
        Favg = np.mean(np.array([ Finterp_rep[x](q) for x in range(len(Finterp_rep)) ]),axis=0)
        #ax.plot(q,Favg,color="#5DA5DA")
        ax.plot(q,Favg,color=cubecmap(coloridx[i]),lw=3)
        ax.set_ylim(0,4)

        counter += 1

    axes[1,0].set_ylabel("Free energy F(Q) (k$_B$T)")
    axes[2,1].set_xlabel("Folding Q")
    fig1.suptitle("Free energy curves %s" % name,fontsize=18)
    fig1.subplots_adjust(hspace=0,wspace=0)
    if not os.path.exists("plots"):
        os.mkdir("plots")
    fig1.savefig("plots/all_b2_profiles_%s.png" % coordname)
示例#6
0
def plot_protein_grid(names, datasets, xlabel, ylabel, title, coloridxs, 
         saveas, save_formats=["png","pdf"], display=False, x_ticks=None, y_ticks=None, aspect_equal=None):
    """Plot all proteins on one grid"""

    fig, axes = plt.subplots(1, len(names), sharey=True, figsize=(13,4.))
    

    cwd = os.getcwd()
    state_markers = ["o","s",">"]
    for n in range(len(names)):
        dataset = datasets[n]
        coloridx = coloridxs[n]
        name = names[n]
        os.chdir(name)
        all_interp_points, all_rep_avg_data, all_min_max = get_replica_average(dataset)
        os.chdir("..")

        ax = axes[n]
        # Loop over variances
        for i in range(len(all_rep_avg_data)):
            avg_data = all_rep_avg_data[i]
            interp_points = all_interp_points[i]
            ax.plot(interp_points, avg_data, color=cubecmap(coloridx[i]))

            # Indicate location of minima, maxima 
            for s in range(len(all_min_max[i])):
                temp = (interp_points - all_min_max[i][s])**2
                state = np.where(temp == temp.min())[0]
                ax.plot(interp_points[state], avg_data[state], 
                    marker=state_markers[s], ms=8, color=cubecmap(coloridx[i]))

            if hasattr(dataset,"ylim"):
                ax.set_ylim(*dataset.ylim)

        ax.annotate(name, xy=(0.5, 0.5), xytext=(0.05,0.92), fontsize=20,
                            xycoords="axes fraction", textcoords="axes fraction")
        if aspect_equal:
            ax.set_aspect('equal', 'datalim')

        if y_ticks is not None:
            ax.set_yticks(y_ticks)
            ax.set_ylim(y_ticks[0],y_ticks[-1])
        if x_ticks is not None:
            ax.set_xticks(x_ticks)
            ax.set_xlim(x_ticks[0],x_ticks[-1])

    # Rotate ticklabels.
    for j in range(len(axes)): 
        plt.setp(axes[j].xaxis.get_majorticklabels(), rotation=270)

    # common xlabel/ylabel and title
    big_ax = fig.add_subplot(111)
    big_ax.grid(False)
    big_ax.set_axis_bgcolor('none')
    big_ax.tick_params(labelcolor='none', top='off', bottom='off', left='off', right='off')
    #big_ax.set_ylabel(ylabel)
    big_ax.text(-.085, 0.9, ylabel, rotation="vertical", fontsize=16, transform=big_ax.transAxes)
    big_ax.set_xlabel(xlabel)
    fig.suptitle(title,fontsize=20)
    fig.subplots_adjust(hspace=0,wspace=0)

    if not os.path.exists("plots"):
        os.mkdir("plots")
    os.chdir("plots")
    # save figures
    for format in save_formats:
        fig.savefig("%s.%s" % (saveas,format), bbox_inches="tight")
    if display:
        plt.show() 
    os.chdir("..")
示例#7
0
def plot_replica_average(dataset, xlabel, ylabel, title, annotations, coloridx, display=False):
    """ Plot replica averaged observable"""
    cwd = os.getcwd()
    ninterp = 500
    parent_dirs = dataset.parent_dirs
    sub_dirs = dataset.sub_dirs
    sqr_num = int(np.ceil(np.sqrt(float(len(parent_dirs)))))
    fig1, axes = plt.subplots(sqr_num, sqr_num, sharex=True, sharey=True)
    counter = 0
    # Plot replica averaged quantity 
    all_interp_points, all_rep_avg_data, all_min_max = get_replica_average(dataset)

    # Plot replica averaged curves in a grid.
    for i in range(len(parent_dirs)):
        interp_points = all_interp_points[i]
        rep_avg_data = all_rep_avg_data[i]
        ax = axes[counter / sqr_num, counter % sqr_num]
        if hasattr(dataset, "plot_rep_avg"):
            dataset.plot_rep_avg(ax, interp_points, rep_avg_data)
        else:
            ax.plot(interp_points, rep_avg_data, color=cubecmap(coloridx[i]))

        if hasattr(dataset,"ylim"):
            ax.set_ylim(*dataset.ylim)

        ax.annotate("%s" % annotations[i], xy=(0.5, 0.5), xytext=dataset.xytext,
                            xycoords="axes fraction", textcoords="axes fraction")
        counter += 1

    # Plot average position of basins.
    counter = 0
    for i in range(len(parent_dirs)):
        y0,y1 = ax.get_ylim()
        ax = axes[counter / sqr_num, counter % sqr_num]
        ax.fill_between(np.array([all_min_max[i][0] - 5, all_min_max[i][0] + 5]),y0,y1,alpha=0.5,color='#5DA5DA')
        ax.fill_between(np.array([all_min_max[i][1] - 5, all_min_max[i][1] + 5]),y0,y1,alpha=0.5,color='#5DA5DA')
        ax.fill_between(np.array([all_min_max[i][1] - 5, all_min_max[i][2] + 5]),y0,y1,alpha=0.5,color='#5DA5DA')
        counter += 1

    # Rotate ticklabels.
    for j in range(axes.shape[1]): 
        plt.setp(axes[-1,j].xaxis.get_majorticklabels(), rotation=270)

    # common xlabel/ylabel and title
    big_ax = fig1.add_subplot(111)
    big_ax.grid(False)
    big_ax.set_axis_bgcolor('none')
    big_ax.tick_params(labelcolor='none', top='off', bottom='off', left='off', right='off')
    big_ax.set_ylabel(ylabel)
    big_ax.set_xlabel(xlabel)
    big_ax.set_title(title)
    fig1.subplots_adjust(hspace=0,wspace=0)

    # plot together on one axis as well.
    if dataset.dimension == 1:
        fig2,ax2 = plt.subplots(1,1)
        for i in range(len(parent_dirs)):
            avg_data = all_rep_avg_data[i]
            interp_points = all_interp_points[i]
            ax2.plot(interp_points, avg_data, color=cubecmap(coloridx[i]),label=annotations[i])

            tempU = (interp_points - all_min_max[i][0])**2
            U = np.where(tempU == tempU.min())[0]
            ax2.plot(interp_points[U], avg_data[U], marker='o', ms=8, color=cubecmap(coloridx[i]))

            tempTS = (interp_points - all_min_max[i][1])**2
            TS = np.where(tempTS == tempTS.min())[0]
            ax2.plot(interp_points[TS], avg_data[TS], marker='s', ms=8, color=cubecmap(coloridx[i]))

            tempN = (interp_points - all_min_max[i][2])**2
            N = np.where(tempN == tempN.min())[0]
            ax2.plot(interp_points[N], avg_data[N], marker='>', ms=8, color=cubecmap(coloridx[i]))

            if hasattr(dataset,"ylim"):
                ax2.set_ylim(*dataset.ylim)
        
        box = ax2.get_position()
        ax2.set_position([box.x0, box.y0, box.width*0.8, box.height])
        ax2.legend(loc='center left', bbox_to_anchor=(1, 0.5))
        ax2.set_ylabel(ylabel)
        ax2.set_xlabel(xlabel)
        ax2.set_title(title)

    # save figure
    os.chdir(cwd)
    if not os.path.exists("plots"):
        os.mkdir("plots")
    os.chdir("plots")
    for format in dataset.save_formats:
        fig1.savefig("%s.%s" % (dataset.saveas,format),bbox_inches="tight")
        if dataset.dimension == 1:
            fig2.savefig("one_%s.%s" % (dataset.saveas,format),bbox_inches="tight")
    if display:
        plt.show()
    plt.close(fig1)