예제 #1
0
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
예제 #2
0
    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)
예제 #4
0
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')
예제 #5
0
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"