def test_sample_dimension(): np.random.seed(42) X = np.random.randn(500, 5) data = [X, X, X] tica = tICA(n_components=2, lag_time=1).fit(data) tica_trajs = {k: tica.partial_transform(v) for k, v in enumerate(data)} res = sample_dimension(tica_trajs, 0, 10, scheme="linear") res2 = sample_dimension(tica_trajs, 1, 10, scheme="linear") assert len(res) == len(res2) == 10
def respawn_from_tICs(self, n_spawns, dims=(0, 1)): """ Find candidate frames in the trajectories to spawn new simulations from. Look for frames in the trajectories that are nearby the edge regions of the tIC converted space Parameters ---------- dims: tuple of ints, tICs to sample from n_spawns: int, number of spawns to generate Returns ------- chosen_frames: list of tuples, each tuple is (traj_id, frame_id) """ if self.ttrajs is None: self.ttrajs = self.get_tica_trajs() frames_per_tIC = max(1, int(n_spawns / len(dims))) chosen_frames = [] for d in dims: sampled_pairs = sample_dimension(self.ttrajs, dimension=d, n_frames=frames_per_tIC, scheme='edge') for pair in sampled_pairs: chosen_frames.append(pair) return chosen_frames
def sampling_along_tIC(resultdir, opath, tica_trajs, xtc_traj_folder, traj_list_array, pdb_name, tIC_a): transformed = np.concatenate(tica_trajs) draw_tica_histogram_core(transformed[:, 0], transformed[:, 1], '1', '2') tica_trajs = {i: tica_trajs[i] for i in range(len(tica_trajs)) } #tica_trajs is now a dictionary inds = sample_dimension(tica_trajs, dimension=tIC_a - 1, n_frames=200, scheme='random') #sample 200 conformations #make trajectory traj = md.join( md.load_frame(xtc_traj_folder + traj_list_array[i], index=frame_i, top=xtc_traj_folder + pdb_name) for i, frame_i in inds) #save the trajectory traj.save("%s/tica-dimension-tIC%s.xtc" % (resultdir, tIC_a - 1)) #show the samples on tICA projections samples_coord = [] for i, frame_i in inds: samples_coord.append( [tica_trajs[i][frame_i][0], tica_trajs[i][frame_i][1]]) samples_coord = np.array(samples_coord) print(samples_coord.shape) plt.plot(samples_coord[:, 0], samples_coord[:, 1], 'o-') plt.legend('sample') plt.savefig(resultdir + '/' + opath)
def sample_tica_dim(dim=0, n_frames=200, meta=None, ttrajs=None): ## Load if (not meta is None) & (not ttrajs is None): ## Sample # These are apparently ordered according tica value inds = sample_dimension(ttrajs, dimension=dim, n_frames=n_frames, scheme='random') save_generic(inds, "tica-dimension-{}-inds.pickl".format(dim + 1)) ## Get tica components tica_values = np.array( [ttrajs[traj_i][frame_i][dim] for traj_i, frame_i in inds]) tica_values = (tica_values - tica_values.min()) / (tica_values.max() - tica_values.min()) tica_values *= 10 ## Make trajectory top = preload_top(meta) # Use loc because sample_dimension is nice traj = md.join( md.load_frame(meta.loc[traj_i]['traj_fn'], index=frame_i, top=top) for traj_i, frame_i in inds) ## Supperpose ## Save traj_fn = "tica-dimension-{}.dcd".format(dim + 1) backup(traj_fn) traj.save(traj_fn) else: raise ValueError('Specify meta data and trajectory objects')
depends: - ../top.pdb - ../trajs """ import mdtraj as md from msmbuilder.io.sampling import sample_dimension from msmbuilder.io import load_trajs, save_generic, preload_top, backup ## Load meta, ttrajs = load_trajs('ttrajs') ## Sample inds = sample_dimension(ttrajs, dimension=0, n_frames=200, scheme='random') save_generic(inds, "tica-dimension-0-inds.pickl") ## Make trajectory top = preload_top(meta) # Use loc because sample_dimension is nice traj = md.join( md.load_frame(meta.loc[traj_i]['traj_fn'], index=frame_i, top=top) for traj_i, frame_i in inds ) ## Save traj_fn = "tica-dimension-0.xtc"