예제 #1
0
def create_mp4_pov(directory, origin_frame=0, fps=5, reverse=True):
    filenames = sorted(glob.glob(directory + '\\*.npz'))
    r = np.append([10], (np.ones(8) * 4))
    r = np.append(r, 3)
    r = np.append(r, 2)
    c = 'kbbggryrycy'

    image_files = []
    j = 0
    report_progress(len(filenames), title='create_pov_mp4', init=True)
    for file in filenames:
        j += 1
        report_progress(j, title='create_pov_mp4')

        dna = HelixPose.from_file(file)
        origin_of = nMC.get_of(dna, origin_frame)
        tf = nMC.get_transformation(origin_of)
        coords = nMC.apply_transformation(dna.coords, tf)
        image_files.append(
            pov_dna(file, [coords],
                    range_A=[1000, 1500],
                    offset_A=[0, 0, 150],
                    show=False))
    create_mp4_images(image_files,
                      fps=fps,
                      delete=True,
                      filename=directory + '.mp4',
                      reverse=reverse)
    return
예제 #2
0
def create_pov_npz(filename):
    filename = change_extension(filename, 'npz')
    # directory = 'E:\\Users\\Noort\\data\\20180320\\data_001\\'
    # filename = 'E:\\Users\\Noort\\data\\20180320\\data_001\\data_001_0001.npz'
    # print(filename)
    dna = HelixPose.from_file(filename)
    pov_dna(filename, [dna.coords],
            range_A=[1500, 2500],
            offset_A=[0, 0, 150],
            show=True)
    return
예제 #3
0
def plot_step_params(filename, dataset, save=False, wait=0, plot_energy=True):
    filename = fileio.change_extension(filename, 'xlsx')
    sets, files, _ = contents_xlsx(filename)
    if dataset == -1:
        filename = sorted(files)[-1]
    else:
        filename = files[sets.index(dataset)]
    dna = HelixPose.from_file(fileio.change_extension(filename, 'npz'))

    p0 = np.load(default_step_file)[0]
    sigma2 = np.load(default_step_file)[1:]
    k = 1 / sigma2
    energy_kT = []
    for p in dna.params:
        energy_kT.append(0.5 * (p - p0) * np.dot(k, p - p0) / kT)
    energy_kT = np.asarray(energy_kT)
    energy_kT = np.sum(np.abs(energy_kT), axis=1)

    i = xrange(len(dna.params))

    plt.close()
    plt.figure(figsize=(12, 4))
    if plot_energy:
        plt.plot(i, energy_kT)
        plt.ylim(-1, 25)
        plt.ylabel('G (kT)')
    else:
        plt.plot(i, dna.params)
        plt.ylim(-2.5, 4.5)
        plt.ylabel('step parameters')
        plt.legend(['Shift', 'Slide', 'Rise', 'Tilt', 'Roll', 'Twist'], loc=1)
    plt.tick_params(axis='both',
                    which='both',
                    direction='in',
                    top=True,
                    right=True)
    plt.title(filename.split('\\')[-2] + '\\' +
              filename.split('\\')[-1].split('.')[0],
              loc='left',
              fontdict={'fontsize': 10})
    plt.xlabel('i (bp)')

    plt.tight_layout(pad=0.5, w_pad=0.5, h_pad=0.5)
    plt.draw()
    if wait != 0:
        plt.pause(wait)
    if save:
        filename = fileio.change_extension(filename, '_step.jpg')
        plt.savefig(filename, dpi=600, format='jpg')
    return
예제 #4
0
def plot_step_params(filename, dataset, save=False):
    filename = change_extension(filename, 'xlsx')
    sets, files, _ = contents_xlsx(filename)
    if dataset == -1:
        filename = sorted(files)[-1]
    else:
        filename = files[sets.index(dataset)]
    dna = HelixPose.from_file(change_extension(filename, 'npz'))
    # dna = HelixPose.from_file(change_extension(files[-1], 'npz'))

    i = xrange(len(dna.params))

    plt.close()
    plt.figure(figsize=(12, 4))
    plt.plot(i, dna.params)
    plt.tick_params(axis='both',
                    which='both',
                    direction='in',
                    top=True,
                    right=True)
    plt.title(filename.split('\\')[-2] + '\\' +
              filename.split('\\')[-1].split('.')[0],
              loc='left',
              fontdict={'fontsize': 10})
    plt.xlabel('i (bp)')
    plt.ylabel('step parameters')
    plt.ylim(-2.5, 4.5)
    plt.legend(['Shift', 'Slide', 'Rise', 'Tilt', 'Roll', 'Twist'], loc=1)

    plt.tight_layout(pad=0.5, w_pad=0.5, h_pad=0.5)
    plt.draw()
    plt.pause(5)
    if save:
        filename = change_extension(filename, '_step.jpg')
        plt.savefig(filename, dpi=600, format='jpg')

    return
예제 #5
0
from helixmc.pose import HelixPose

# Run HelixMC #
cmdline = 'helixmc-run '
cmdline += '-params Z-DNA.npz '
cmdline += '-n_bp 100 '
cmdline += '-n_step 10 '
cmdline += '-seq GC '
cmdline += '-force 5 '
cmdline += '-compute_fuller_link '
cmdline += '-out_frame test_run'

print 'Z-DNA command line:', cmdline
subprocess.check_call(cmdline.split())

# Data Analysis #
data = np.load('MC_data.npz')
# avg. z-extension in Å
print 'Avg. Z:', np.average(data['coord_terminal'][:, 2])
# avg. link in radian
print 'Avg. Link:', np.average(data['twist'] + data['writhe'])

# Helix Plotting #
pose = HelixPose.from_file('test_run.npz')
pose.plot_centerline(show=False)  # plot the centerline
plt.title('Center line')

pose.plot_helix(show=False, rb_width=15)  # plot the entire helix
plt.title('Helix Plot')
plt.show()
예제 #6
0
파일: z-dna.py 프로젝트: DasLab/HelixMC
# Run HelixMC #
cmdline = 'helixmc-run '
cmdline += '-params Z-DNA.npz '
cmdline += '-n_bp 100 '
cmdline += '-n_step 10 '
cmdline += '-seq GC '
cmdline += '-force 5 '
cmdline += '-compute_fuller_link '
cmdline += '-out_frame test_run'

print 'Z-DNA command line:', cmdline
subprocess.check_call(cmdline.split())

# Data Analysis #
data = np.load('MC_data.npz')
# avg. z-extension in Å
print 'Avg. Z:', np.average(data['coord_terminal'][:, 2])
# avg. link in radian
print 'Avg. Link:', np.average(data['twist'] + data['writhe'])

# Helix Plotting #
pose = HelixPose.from_file('test_run.npz')
pose.plot_centerline(show=False)  # plot the centerline
plt.title('Center line')


pose.plot_helix(show=False, rb_width=15)  # plot the entire helix
plt.title('Helix Plot')
plt.show()
예제 #7
0
def plot_energy(filename):
    params = np.load(default_step_file)
    p0 = params[0]
    cov = params[1:]
    k = np.linalg.inv(cov)

    sets, files, _ = fileio.contents_xlsx(filename)
    dna = HelixPose.from_file(fileio.change_extension(files[0], 'npz'))

    energy_kT = np.empty((len(files), len(dna.params)))
    i = 0
    fileio.report_progress(len(files),
                           title='analyze_step_parameters',
                           init=True)
    for f in files:
        dna = HelixPose.from_file(fileio.change_extension(f, 'npz'))
        fileio.report_progress(i + 1)
        j = 0
        for p in dna.params:
            energy_kT[i, j] = (np.sum(0.5 * (p - p0) * np.dot(k, p - p0)))
            j += 1
        i += 1

    F_data = fileio.read_param_xlsx(filename, 'F_pN')

    forces = np.linspace(10, 0, 4)
    energy_F = []
    for force in forces:
        selected = (np.abs(F_data - force) < 2.5)
        energy_F.append(np.mean(np.abs(energy_kT[selected]), axis=0))
    energy_F = np.asarray(energy_F)
    print(forces)

    i = xrange(len(dna.params))

    plt.close()
    plt.figure(figsize=(12, 3))
    # plt.plot(i, energy_kT)
    plt.plot(i, energy_F.T)
    energy_thermal = np.ones(len(dna.params)) * 3
    plt.plot(i, energy_thermal, color='k', linestyle=':', linewidth=0.8)

    plt.xlim(0, len(dna.params))
    plt.ylim(-1, 26)
    plt.ylabel('G (kT)')
    plt.tick_params(axis='both',
                    which='both',
                    direction='in',
                    top=True,
                    right=True)
    plt.title(filename.split('\\')[-2] + '\\' +
              filename.split('\\')[-1].split('.')[0],
              loc='left',
              fontdict={'fontsize': 10})
    plt.xlabel('i (bp)')

    plt.tight_layout(pad=0.5, w_pad=0.5, h_pad=0.5)
    plt.draw()
    plt.pause(5)
    filename = fileio.change_extension(filename, '_Edna.jpg')
    plt.savefig(filename, dpi=600, format='jpg')

    return
예제 #8
0
from helixmc.pose import HelixPose
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as p3

# Here we have the final frames of 3 independent HelixMC runs,
# named data0.npz, data1.npz and data3.npz. We will plot these
# data in this example.

# Load data #
pose_list = []
pose_list.append(HelixPose.from_file('data0.npz'))
pose_list.append(HelixPose.from_file('data1.npz'))
pose_list.append(HelixPose.from_file('data2.npz'))

coords = [pose.coord / 10 for pose in pose_list]
colors = 'kbrgycm'

# Top View #
plt.figure()
for i, coord in enumerate(coords):
    plt.plot(coord[:, 0], coord[:, 1], color=colors[i])
plt.ylabel('Y (nm)')
plt.xlabel('X (nm)')
plt.title('Top view')

# Side View #
plt.figure()
for i, coord in enumerate(coords):
    plt.plot(coord[:, 0], coord[:, 2], color=colors[i])
plt.ylabel('Z (nm)')
plt.xlabel('X (nm)')
예제 #9
0
def main():
    # Define fiber params
    pars = Parameters()
    pars.add('F_pN', value=0)
    pars.add('z_nm', value=0)
    pars.add('L_bp', value=800)
    pars.add('n_nuc', value=4)
    pars.add('NRL', value=167)
    pars.add('P_nm', value=50)
    pars.add('dyad0_bp', value=0)
    pars.add('diameter_A', value=330)
    pars.add('rise_A', value=100)
    pars.add('nld_A', value=25)
    pars.add('chirality', value=-1)
    pars.add('Unwrapped_bp', value=30)
    pars.add('face', value=1)
    pars.add('g_wrap_kT', value=3)
    pars.add('g_stack_kT', value=25)
    pars.add('fiber_start', value=2)

    g_wrap_kT = pars['g_wrap_kT'].value
    g_stack_kT = pars['g_stack_kT'].value

    # Setup files and forces
    filename = fileio.get_filename(incr=True, root='3nucs')
    print(filename)
    n_step = 250
    n_substeps = 10
    fmax_pN = 10
    fmin_pN = 0.1
    # forces = np.linspace(fmin_pN, fmax_pN, n_step / 2)
    forces = np.logspace(np.log10(fmin_pN), np.log10(fmax_pN), n_step / 2)
    forces = np.append(forces, forces[::-1])

    get_from_file = False
    if get_from_file:
        # Get from file
        file_in = 'E:\\Users\\noort\\data\\20180321\\data_003.xlsx'
        dataset = 0
        pars, datafile = fileio.read_xlsx(file_in, dataset, pars=pars)
        dna, dyads, nucl = fMC.create_nuc_array(p=pars)
        dna = HelixPose.from_file(fileio.change_extension(datafile, 'npz'))
    else:
        # Initialize fiber pose
        dna, dyads, nucl = fMC.create_nuc_array(p=pars)

    pars['dyad0_bp'].value = dyads[0]
    fileio.plot_dna(dna,
                    title='Initial conformation\n',
                    range_nm=100,
                    save=True)
    pars.pretty_print(columns=['value'])

    # Get stack and wrap parameters
    fixed_wrap_params = nMC.get_wrap_params(nucl.dna, nucl.dyad, nucl.fixed)
    fiber_dna, dyads, w = fMC.create_folded_fiber(pars, nucl)
    fixed_stack_params = fMC.get_stack_pars(fiber_dna, dyads)[0]
    fiber_start = pars['fiber_start'].value
    # Initialize random steps
    random_step = RandomStepSimple.load_gaussian_params('DNA_gau.npy')

    basepairs = np.asarray(xrange(pars['L_bp'] - 1))
    accept = 0
    all_coord = np.empty((n_step, 3))

    current_step = 0
    fileio.report_progress(n_step, title='RunMC3', init=True)
    for force in forces:
        fileio.report_progress(current_step + 1, title='RunMC3')
        scorefxn = ScoreTweezers(force)
        previous_bp = 0
        for sub_step in xrange(n_substeps):
            for bp in basepairs:
                accept += MC_move(dna, bp, previous_bp, scorefxn,
                                  fixed_wrap_params, fixed_stack_params, dyads,
                                  nucl, random_step, g_wrap_kT, g_stack_kT,
                                  fiber_start)
                previous_bp = bp
            basepairs = basepairs[::-1]

        fileio.plot_dna(dna,
                        update=True,
                        title='F = {:.1f} pN\n'.format(force),
                        save=True)

        pars['F_pN'].value = force
        pars['z_nm'].value = dna.coord_terminal[2]
        fileio.write_xlsx(fileio.get_filename(sub=True),
                          str(current_step),
                          pars,
                          report_file=filename)
        dna.write2disk(fileio.get_filename(sub=True, ext='npz'))
        all_coord[current_step] = dna.coord_terminal
        current_step += 1

    z = all_coord[:, 2] / 10
    wlc = 1 - 0.5 * np.sqrt(0.1 * kT / (forces * pars['P_nm']))
    grid = []
    for i in xrange(1, pars['n_nuc'] + 1):
        grid.append(wlc * (pars['L_bp'] - 80 * i) / 3)
        grid.append(wlc * (pars['L_bp'] - (pars['n_nuc'] * 80 + i *
                                           (147 - 80))) / 3)
    wlc *= pars['L_bp'] / 3
    selected = np.diff(np.append([-1], forces)) > 0

    fileio.save_plot((forces, z, wlc, selected),
                     filename=filename,
                     ax_labels=['z (nm)', 'F (pN)'],
                     grid=grid,
                     transpose=True,
                     xrange=[0, 1.1 * pars['L_bp'] / 3])

    if n_step > 0:
        print('Accept rate = %.1f %%' % (100 * float(accept) /
                                         (n_step * n_substeps *
                                          (pars['L_bp'] - 1))))
    try:
        fileio.create_mp4_pov(fileio.get_filename(sub=True, folder=True),
                              origin_frame=0,
                              reverse=False)
    except Exception, e:
        print(Exception, e)