def save(self): "Save the trajs as a n MSMBuilder project" traj_dir = pjoin(self.project_dir, 'Trajectories') if not os.path.exists(traj_dir): os.makedirs(traj_dir) t = Trajectory.load_trajectory_file(self.conf_filename) traj_paths = [] for i, xyz in enumerate(self.trajectories): t['IndexList'] = None # bug in msmbuilder t['XYZList'] = xyz traj_paths.append(pjoin(traj_dir, 'trj%d.lh5' % i)) t.save(traj_paths[-1]) p = Project( { 'conf_filename': os.path.abspath(self.conf_filename), 'traj_lengths': self.n_frames * np.ones(self.n_trajs), 'traj_paths': [os.path.abspath(e) for e in traj_paths], 'traj_converted_from': [[] for i in range(self.n_trajs)], 'traj_errors': [None for i in range(self.n_trajs)], }, project_dir=self.project_dir, validate=True) p.save(pjoin(self.project_dir, 'Project.yaml')) # just check again p = Project.load_from(pjoin(self.project_dir, 'Project.yaml')) p._validate() assert np.all( (p.load_traj(0)['XYZList'] - self.trajectories[0])**2 < 1e-6)
def main(): parser = argparse.ArgumentParser() parser.add_argument('-n', '--n_trajs', help='number of trajectories. Default=10', type=int, default=10) parser.add_argument('-t', '--traj_length', help='trajectories length. Default=10000', type=int, default=10000) args = parser.parse_args() # these could be configured kT = 15.0 dt = 0.1 mGamma = 1000.0 forcecalculator = muller.muller_force() project = Project({'ConfFilename': os.path.join(mullermsm.__path__[0], 'conf.pdb'), 'NumTrajs': args.n_trajs, 'ProjectRootDir': '.', 'TrajFileBaseName': 'trj', 'TrajFilePath': 'Trajectories', 'TrajFileType': '.lh5', 'TrajLengths': [args.traj_length]*args.n_trajs}) if os.path.exists('ProjectInfo.h5'): print >> sys.stderr, "The file ./ProjectInfo.h5 already exists. I don't want to overwrite anything, so i'm backing off" sys.exit(1) try: os.mkdir('Trajectories') except OSError: print >> sys.stderr, "The directory ./Trajectores already exists. I don't want to overwrite anything, so i'm backing off" sys.exit(1) for i in range(args.n_trajs): print 'simulating traj %s' % i # select initial configs randomly from a 2D box initial_x = [random.uniform(-1.5, 1.2), random.uniform(-0.2, 2)] print 'starting conformation from randomly sampled points (%s, %s)' % (initial_x[0], initial_x[1]) print 'propagating for %s steps on the Muller potential with a Langevin integrator...' % args.traj_length positions = muller.propagate(args.traj_length, initial_x, kT, dt, mGamma, forcecalculator) # positions is N x 2, but we want to make it N x 1 x 3 where the additional # column is just zeros. This way, being N x 1 x 3, it looks like a regular MD # trajectory that would be N_frames x N_atoms x 3 positions3 = np.hstack((positions, np.zeros((len(positions),1)))).reshape((len(positions), 1, 3)) t = Trajectory.LoadTrajectoryFile(project['ConfFilename']) t['XYZList'] = positions3 t.SaveToLHDF(project.GetTrajFilename(i)) print 'saving trajectory to %s' % project.GetTrajFilename(i) project.SaveToHDF('ProjectInfo.h5') print 'saved ProjectInfo.h5 file' pickle.dump(metric.EuclideanMetric(), open('metric.pickl', 'w')) print 'saved metric.pickl'
def run(traj_dir, conf_filename, project_filename, iext): logger.info("Rebuilding project.") file_list = glob.glob(traj_dir + "/trj*%s" % iext) num_traj = len(file_list) traj_lengths = np.zeros(num_traj, 'int') traj_paths = [] if not os.path.exists(conf_filename): raise(IOError("Cannot find conformation file %s" % conf_filename)) file_list = sorted(file_list, key=utils.keynat) for i, filename in enumerate(file_list): traj_lengths[i] = len(md.open(filename)) traj_paths.append(filename) records = { "conf_filename": conf_filename, "traj_lengths": traj_lengths, "traj_paths": traj_paths, "traj_errors": [None for i in xrange(num_traj)], "traj_converted_from": [[] for i in xrange(num_traj)] } p = Project(records) p.save(project_filename) logger.info("Wrote %s" % project_filename)
def setup(self): self.metric = metrics.Dihedral() self.pdb_fn = os.path.join(fixtures_dir(), 'native.pdb') self.trj_fn = os.path.join(fixtures_dir(), 'trj0.lh5') self.project = Project({'traj_lengths': [501], 'traj_paths': [self.trj_fn], 'conf_filename': self.pdb_fn, 'traj_converted_from': [None], 'traj_errors': [None]}) self.vtraj = partition(self.project, chunk_size=501)[0]
def test_project_2(): 'inconsistent lengths should be detected' records = {'conf_filename': None, 'traj_lengths': [0,0], # this is one too short 'traj_errors': [None, None, None], 'traj_paths': ['t0', 't1', 't2'], 'traj_converted_from': [None, None, None]} proj = Project(records, validate=False)
def setup(self): self.metric = metrics.Dihedral() self.pdb_fn = os.path.join(fixtures_dir(), 'native.pdb') self.trj_fn = os.path.join(fixtures_dir(), 'trj0.lh5') self.project = Project({ 'NumTrajs': 1, 'TrajLengths': [501], 'TrajFileBaseName': 'trj', 'TrajFileType': '.lh5', 'ConfFilename': self.pdb_fn, 'TrajFilePath': fixtures_dir() }) self.vtraj = partition(self.project, chunk_size=501)[0]
def test_project_1(): 'ensure that the counting of errors works right' records = {'conf_filename': None, 'traj_lengths': [0,0,0], 'traj_errors': [None, 1, None], 'traj_paths': ['t0', 't1', 't2'], 'traj_converted_from': [None, None, None]} proj = Project(records, validate=False) eq_(proj.n_trajs, 2) eq_(os.path.basename(proj.traj_filename(0)), 't0') # since t1 should be skipped eq_(os.path.basename(proj.traj_filename(1)), 't2')