def Align(self, coords1, coords2): from pygmin.mindist import rmsfit,aamindist potential = GMINPotential(GMIN) ca1 = CoordsAdapter(nrigid=coords1.size/6, coords = coords1) ca2 = CoordsAdapter(nrigid=coords2.size/6, coords = coords2) rot = rmsfit.findrotation_kabsch(ca2.posRigid, ca1.posRigid) ca2.posRigid[:] = np.dot(rot,ca2.posRigid.transpose()).transpose() for p in ca2.rotRigid: p[:] = rotations.mx2aa((np.dot(rot, rotations.aa2mx(p)))) print "before" print potential.getEnergy(coords1), potential.getEnergy(coords2) print ca2.rotRigid - ca1.rotRigid for p1,p2 in zip(ca1.rotRigid, ca2.rotRigid): p1[:],p2[:] = aamindist.aadistance(p1, p2) print "after" print potential.getEnergy(coords1), potential.getEnergy(coords2) print ca2.rotRigid - ca1.rotRigid path = InterpolatedPath(coords1, coords2, 40) print potential.getEnergy(path[0]) print "Interpolated energies" for x in InterpolatedPath(coords1, coords2, 40): print potential.getEnergy(x) print "done" return coords1, coords2
def setup_aatopology(self): GMIN.initialize() pot = GMINPotential(GMIN) coords = pot.getCoords() nrigid = coords.size / 6 print "I have %d water molecules in the system" % nrigid print "The initial energy is", pot.getEnergy(coords) water = tip4p.water() system = RBTopology() system.add_sites([deepcopy(water) for i in xrange(nrigid)]) self.potential = pot self.nrigid = nrigid self.render_scale = 0.3 self.atom_types = system.get_atomtypes() self.draw_bonds = [] for i in xrange(nrigid): self.draw_bonds.append((3 * i, 3 * i + 1)) self.draw_bonds.append((3 * i, 3 * i + 2)) return system
def setup_aatopology(self): GMIN.initialize() pot = GMINPotential(GMIN) coords = pot.getCoords() nrigid = coords.size / 6 print "I have %d water molecules in the system"%nrigid print "The initial energy is", pot.getEnergy(coords) water = create_base() system = RBTopology() system.add_sites([deepcopy(water) for i in xrange(nrigid)]) self.potential = pot self.nrigid = nrigid self.render_scale = 0.15 self.atom_types = system.get_atomtypes() self.draw_bonds = [] for i in xrange(nrigid-1): self.draw_bonds.append((2*i, 2*i+1)) self.draw_bonds.append((2*i, 2*i+2)) return system
def getEnergy(self, coords): E = GMINPotential.getEnergy(self, coords) ca = CoordsAdapter(nrigid=coords.size/6, coords=coords) RMX = [rmdrvt(p, True) for p in ca.rotRigid] xback = np.array([x - 0.4*np.dot(r[0], np.array([1., 0., 0.])) for x, r in zip(ca.posRigid, RMX)]) xbase = np.array([x + 0.4*np.dot(r[0], np.array([1., 0., 0.])) for x, r in zip(ca.posRigid, RMX)]) Eangle = 0 v2 = xback[1] - xback[0] v2 /= np.linalg.norm(v2) for i in xrange(1,ca.nrigid-1): v1 = -v2.copy() v2 = xback[i+1] - xback[i] v2 /= np.linalg.norm(v2) theta = np.arccos(np.dot(v1,v2)) Eangle += 0.5*self.k*(theta - self.theta0)**2 # add the torsion angle Etorsion = 0 if self.use_torsion: for i in xrange(ca.nrigid-3): theta = dihedral_angle(xback[i:i+4]) Etorsion += U_torsion_back(theta) return E + Eangle + Etorsion
def getEnergy(self, coords): E = GMINPotential.getEnergy(self, coords) ca = CoordsAdapter(nrigid=coords.size / 6, coords=coords) RMX = [rmdrvt(p, True) for p in ca.rotRigid] xback = np.array([ x - 0.4 * np.dot(r[0], np.array([1., 0., 0.])) for x, r in zip(ca.posRigid, RMX) ]) xbase = np.array([ x + 0.4 * np.dot(r[0], np.array([1., 0., 0.])) for x, r in zip(ca.posRigid, RMX) ]) Eangle = 0 v2 = xback[1] - xback[0] v2 /= np.linalg.norm(v2) for i in xrange(1, ca.nrigid - 1): v1 = -v2.copy() v2 = xback[i + 1] - xback[i] v2 /= np.linalg.norm(v2) theta = np.arccos(np.dot(v1, v2)) Eangle += 0.5 * self.k * (theta - self.theta0)**2 # add the torsion angle Etorsion = 0 if self.use_torsion: for i in xrange(ca.nrigid - 3): theta = dihedral_angle(xback[i:i + 4]) Etorsion += U_torsion_back(theta) return E + Eangle + Etorsion
traj = open("traj.xyz", "w") #for x in path: # #export_xyz(traj, x) # #ret = quench.mylbfgs(x, pot.getEnergyGradient) # #print i,pot.getEnergy(x), ret[1] # # # export_xyz(traj, ret[0]) db=Database(db="oxdna.sqlite") path[0]=db.minima()[19].coords path[-1]=db.minima()[0].coords e1 = [] e2 = [] e1.append(pot.getEnergy(path[0])) e2.append(pot.getEnergy(path[0])) for i in xrange(1): for i in xrange(len(path)-1): e1.append(pot.getEnergy(path[i+1])) c1 = CoordsAdapter(nrigid=13, coords = path[i]) c2 = CoordsAdapter(nrigid=13, coords = path[i+1]) com1 = np.sum(c1.posRigid,axis=0) / float(13) com2 = np.sum(c1.posRigid,axis=0) / float(13) c1.posRigid-=com1 c2.posRigid-=com2 mx = findrotation_kabsch(c2.posRigid, c1.posRigid) #print mx c2.posRigid[:] = np.dot(mx, c2.posRigid.transpose()).transpose() for p in c2.rotRigid:
# define the whole water system system = RBSystem() system.add_sites([deepcopy(water) for i in xrange(nrigid)]) # this is an easy access wrapper for coordinates array ca = system.coords_adapter(coords) #buildingblocks.rotate(3.0, ca.rotRigid[-1:]) #ret = mylbfgs(coords, pot.getEnergyGradient, iprint=0) #coords2 = ret[0] #np.savetxt("coords1_2.txt", coords1) #np.savetxt("coords2_2.txt", coords2) coords1 = np.loadtxt("coords1.txt") coords2 = np.loadtxt("coords2.txt") print pot.getEnergy(coords1), pot.getEnergy(coords2) defaults.NEBquenchParams["nsteps"] = 200 defaults.NEBquenchParams["iprint"] = 1 defaults.NEBquenchParams["maxstep"] = 0.1 defaults.NEBquenchParams["maxErise"] = 0.1 defaults.NEBquenchParams["tol"] = 1e-6 defaults.NEBquenchRoutine = mylbfgs k = 10. nimages=50 dneb=True #print coords2[-6:],coords1[-6:] path = tip4p.get_path(system, coords1, coords2, nimages) path_energy = [pot.getEnergy(coords) for coords in path]
# define the whole water system system = RBSystem() system.add_sites([deepcopy(water) for i in xrange(nrigid)]) # this is an easy access wrapper for coordinates array ca = system.coords_adapter(coords) #buildingblocks.rotate(3.0, ca.rotRigid[-1:]) #ret = mylbfgs(coords, pot.getEnergyGradient, iprint=0) #coords2 = ret[0] #np.savetxt("coords1_2.txt", coords1) #np.savetxt("coords2_2.txt", coords2) coords1 = np.loadtxt("coords1.txt") coords2 = np.loadtxt("coords2.txt") print pot.getEnergy(coords1), pot.getEnergy(coords2) NEBquenchParams = dict() NEBquenchParams["nsteps"] = 200 NEBquenchParams["iprint"] = 1 NEBquenchParams["maxstep"] = 0.1 NEBquenchParams["maxErise"] = 0.1 NEBquenchParams["tol"] = 1e-6 NEBquenchRoutine = mylbfgs decp = dict() decp["local_connect_params"] = dict() decp["local_connect_params"]["NEBparams"] = dict() decp["local_connect_params"]["NEBparams"]["NEBquenchParams"] = NEBquenchParams decp["local_connect_params"]["NEBparams"][ "NEBquenchRoutine"] = NEBquenchRoutine