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
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
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
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
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()
# 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()
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
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)')
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)