コード例 #1
0
ファイル: oxgui.py プロジェクト: wwwtyro/PyGMIN
 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
コード例 #2
0
ファイル: tip4p_system.py プロジェクト: yfyh2013/PyGMIN
    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
コード例 #3
0
ファイル: oxgui.py プロジェクト: js850/PyGMIN
    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
コード例 #4
0
ファイル: oxdnaanglepot.py プロジェクト: js850/PyGMIN
 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
コード例 #5
0
ファイル: oxdnaanglepot.py プロジェクト: yfyh2013/PyGMIN
    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
コード例 #6
0
ファイル: path.py プロジェクト: wwwtyro/PyGMIN
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:
コード例 #7
0
ファイル: tip4p_aaneb.py プロジェクト: wwwtyro/PyGMIN
# 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]
コード例 #8
0
ファイル: tip4p_aaneb.py プロジェクト: yfyh2013/PyGMIN
# 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