Exemplo n.º 1
0
    def setup_aatopology(self):
        GMIN.initialize()
        pot = GMINPotential(GMIN)
        coords = pot.getCoords()        
        nrigid = old_div(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 range(nrigid)])
        self.potential = pot
        self.nrigid = nrigid
        
        self.render_scale = 0.15
        self.atom_types = system.get_atomtypes()
        
        self.draw_bonds = []
        for i in range(nrigid-1):
            self.draw_bonds.append((2*i, 2*i+1))
            self.draw_bonds.append((2*i, 2*i+2))
    
        return system
Exemplo n.º 2
0
    def setup_aatopology(self):
        GMIN.initialize()
        pot = GMINPotential(GMIN)
        coords = pot.getCoords()
        nrigid = coords.size / 6

        print "I have %d PAP molecules in the system" % nrigid
        print "The initial energy is", pot.getEnergy(coords)

        water = create_pap()

        system = RBTopology()
        system.add_sites([deepcopy(water) for i in xrange(nrigid)])
        self.potential = pot
        self.nrigid = nrigid

        self.render_scale = 0.1
        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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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.0, 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.0, 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
Exemplo n.º 5
0
    def getEnergy(self, coords):
        E = GMINPotential.getEnergy(self, coords)
        ca = CoordsAdapter(nrigid=old_div(coords.size, 6), coords=coords)
        RMX = [rotMatDeriv(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 range(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 range(ca.nrigid - 3):
                theta = dihedral_angle(xback[i:i + 4])
                Etorsion += U_torsion_back(theta)
        return E + Eangle + Etorsion
Exemplo n.º 6
0
    def getEnergyGradient(self, coords):
        #return self.getEnergy(coords), self.NumericalDerivative(coords)
        E, grad = GMINPotential.getEnergyGradient(self, coords)

        ca = CoordsAdapter(nrigid=old_div(coords.size, 6), coords=coords)
        RMX = [rotMatDeriv(p, True) for p in ca.rotRigid]

        xback = [
            x - 0.4 * np.dot(r[0], np.array([1., 0., 0.]))
            for x, r in zip(ca.posRigid, RMX)
        ]
        xbase = [
            x - 0.4 * np.dot(r[0], np.array([1., 0., 0.]))
            for x, r in zip(ca.posRigid, RMX)
        ]

        gback = np.zeros_like(xback)
        Eangle = 0.
        v2 = xback[1] - xback[0]
        absv2 = np.linalg.norm(v2)
        v2 /= absv2
        for i in range(1, ca.nrigid - 1):
            v1 = -v2
            absv1 = absv2
            v2 = xback[i + 1] - xback[i]
            absv2 = np.linalg.norm(v2)
            v2 /= absv2

            v1v2 = np.dot(v1, v2)
            theta = np.arccos(v1v2)
            Eangle += 0.5 * self.k * (theta - self.theta0)**2

            acos_prime = 1. / np.sqrt(1. - v1v2**2)
            s = self.k * (theta - self.theta0) * acos_prime
            gback[i -
                  1] += s * (old_div(-v2, absv1) + old_div(v1v2 * v1, absv1))
            gback[i] += s * (old_div(v1, absv2) + old_div(v2, absv1) - old_div(
                v1v2 * v1, absv1) - old_div(v1v2 * v2, absv2))
            gback[i +
                  1] += s * (old_div(-v1, absv2) + old_div(v1v2 * v2, absv2))

        Etorsion = 0
        if self.use_torsion:
            for i in range(ca.nrigid - 3):
                r = xback[i:i + 4]
                theta = dihedral_angle(r)
                e_theta, g_theta = U_torsion_back_grad(theta)
                Etorsion += e_theta
                gback[i:i + 4] += g_theta * dihedral_gradient(r)

        cg = CoordsAdapter(nrigid=ca.nrigid, coords=grad)
        cg.posRigid += gback
        for i in range(ca.nrigid):
            x = -0.4 * np.array([1., 0., 0.])
            R = RMX[i]
            cg.rotRigid[i][0] += np.dot(gback[i], np.dot(R[1], x))
            cg.rotRigid[i][1] += np.dot(gback[i], np.dot(R[2], x))
            cg.rotRigid[i][2] += np.dot(gback[i], np.dot(R[3], x))
        return E + Eangle + Etorsion, grad
Exemplo n.º 7
0
    def __init__(self, *args, **kwargs):
        AppBasinHopping.__init__(self, *args, **kwargs)
        self.quenchRoutine = mylbfgs
        self.potential = GMINPotential(GMIN)

        self.quenchParameters["tol"] = 1e-4
        self.quenchParameters["M"] = 80
        self.quenchParameters["maxErise"] = 0.1
        self.quenchRoutine = mylbfgs
Exemplo n.º 8
0
    def getEnergyGradient(self, coords):
        # return self.getEnergy(coords), self.NumericalDerivative(coords)
        E, grad = GMINPotential.getEnergyGradient(self, coords)

        ca = CoordsAdapter(nrigid=coords.size / 6, coords=coords)
        RMX = [rmdrvt(p, True) for p in ca.rotRigid]

        xback = [x - 0.4 * np.dot(r[0], np.array([1.0, 0.0, 0.0])) for x, r in zip(ca.posRigid, RMX)]
        xbase = [x - 0.4 * np.dot(r[0], np.array([1.0, 0.0, 0.0])) for x, r in zip(ca.posRigid, RMX)]

        gback = np.zeros_like(xback)
        Eangle = 0.0
        v2 = xback[1] - xback[0]
        absv2 = np.linalg.norm(v2)
        v2 /= absv2
        for i in xrange(1, ca.nrigid - 1):
            v1 = -v2
            absv1 = absv2
            v2 = xback[i + 1] - xback[i]
            absv2 = np.linalg.norm(v2)
            v2 /= absv2

            v1v2 = np.dot(v1, v2)
            theta = np.arccos(v1v2)
            Eangle += 0.5 * self.k * (theta - self.theta0) ** 2

            acos_prime = 1.0 / np.sqrt(1.0 - v1v2 ** 2)
            s = self.k * (theta - self.theta0) * acos_prime
            gback[i - 1] += s * (-v2 / absv1 + v1v2 * v1 / absv1)
            gback[i] += s * (v1 / absv2 + v2 / absv1 - v1v2 * v1 / absv1 - v1v2 * v2 / absv2)
            gback[i + 1] += s * (-v1 / absv2 + v1v2 * v2 / absv2)

        Etorsion = 0
        if self.use_torsion:
            for i in xrange(ca.nrigid - 3):
                r = xback[i : i + 4]
                theta = dihedral_angle(r)
                e_theta, g_theta = U_torsion_back_grad(theta)
                Etorsion += e_theta
                gback[i : i + 4] += g_theta * dihedral_gradient(r)

        cg = CoordsAdapter(nrigid=ca.nrigid, coords=grad)
        cg.posRigid += gback
        for i in xrange(ca.nrigid):
            x = -0.4 * np.array([1.0, 0.0, 0.0])
            R = RMX[i]
            cg.rotRigid[i][0] += np.dot(gback[i], np.dot(R[1], x))
            cg.rotRigid[i][1] += np.dot(gback[i], np.dot(R[2], x))
            cg.rotRigid[i][2] += np.dot(gback[i], np.dot(R[3], x))
        return E + Eangle + Etorsion, grad
Exemplo n.º 9
0
Arquivo: otp.py Projeto: js850/pele
 def setup_aatopology(self):
     self.write_coords_data()
     GMIN.initialize()        
     self.pot = GMINPotential(GMIN)
     coords = self.pot.getCoords()
     self.nrigid = coords.size/6
     assert(self.nrigid == self.nmol)
     #self.nrigid = self.nmol
     otp = self.make_otp()
     topology = RBTopology()
     topology.add_sites([deepcopy(otp) for i in xrange(self.nrigid)])
     
     self.render_scale = 0.2
     self.atom_types = topology.get_atomtypes()
     
     self.draw_bonds = []
     for i in xrange(self.nrigid):
         self.draw_bonds.append((3*i, 3*i+1))
         self.draw_bonds.append((3*i, 3*i+2))
 
     self.params.double_ended_connect.local_connect_params.tsSearchParams.iprint = 10
     return topology
Exemplo n.º 10
0
    def check_converged(E, coords):
        if (E < (parameters.TARGET + parameters.EDIFF)):
            fl = open("stat.dat", "a")
            print("#found minimum")
            t1 = time.clock()
            timespent = t1 - t0
            fl.write("#quenches, functioncalls, time\n")
            fl.write("%d %d %f\n" % (opt.stepnum, potential.ncalls, timespent))
            fl.close()
            exit()


# initialize GMIN
GMIN.initialize()
# create a potential which calls GMIN
potential = GMINPotential(GMIN)
# get the initial coorinates
coords = potential.getCoords()
coords = np.random.random(coords.shape)
# create takestep routine

# we combine a normal step taking
group = takestep.BlockMoves()

step1 = takestep.AdaptiveStepsize(OXDNATakestep(displace=parameters.displace,
                                                rotate=0.),
                                  frequency=50)
step2 = takestep.AdaptiveStepsize(OXDNATakestep(displace=0.,
                                                rotate=parameters.rotate),
                                  frequency=50)
group.addBlock(100, step1)
Exemplo n.º 11
0
 def __init__(self, theta0=140.0 / 180.0 * np.pi, k=4.0, use_torsion=False):
     GMINPotential.__init__(self, GMIN)
     self.theta0 = theta0
     self.k = k
     print "theta0 is", theta0
     self.use_torsion = use_torsion
Exemplo n.º 12
0
 def __init__(self, theta0=140. / 180. * np.pi, k=4., use_torsion=False):
     GMINPotential.__init__(self, GMIN)
     self.theta0 = theta0
     self.k = k
     print("theta0 is", theta0)
     self.use_torsion = use_torsion
Exemplo n.º 13
0
import numpy as np
from pele.potentials import GMINPotential
import gmin_ as GMIN
from pele.utils import rotations
from pele.takestep import buildingblocks
from pele.transition_states import NEB
import pylab as pl
from copy import deepcopy, copy
from pele.optimize import mylbfgs
from pele.angleaxis import RigidFragment, RBSystem
import tip4p
from tip4p import dump_path

# initialize GMIN and potential
GMIN.initialize()
pot = GMINPotential(GMIN)
coords = pot.getCoords()

nrigid = old_div(coords.size, 6)
print("I have %d water molecules in the system" % nrigid)

water = tip4p.water()
#water.S = np.identity(3, dtype="float64")
#water.S*=10.

# define the whole water system
system = RBSystem()
system.add_sites([deepcopy(water) for i in range(nrigid)])

# this is an easy access wrapper for coordinates array
ca = system.coords_adapter(coords)
Exemplo n.º 14
0
    def check_converged(E, coords):
        if(E<(parameters.TARGET+parameters.EDIFF)):
                  fl = open("stat.dat", "a")
                  print "#found minimum"
                  t1= time.clock()
                  timespent= t1 - t0
                  fl.write("#quenches, functioncalls, time\n")
                  fl.write("%d %d %f\n"%(opt.stepnum   , potential.ncalls   , timespent))
                  fl.close()
                  exit()

           
# initialize GMIN
GMIN.initialize()
# create a potential which calls GMIN
potential = GMINPotential(GMIN)
# get the initial coorinates
coords=potential.getCoords()
coords=np.random.random(coords.shape)
# create takestep routine

# we combine a normal step taking
group = takestep.BlockMoves()

step1 = takestep.AdaptiveStepsize(OXDNATakestep(displace=parameters.displace, rotate=0.), frequency=50)
step2 = takestep.AdaptiveStepsize(OXDNATakestep(displace=0., rotate=parameters.rotate), frequency=50)
group.addBlock(100, step1)
group.addBlock(100, step2)
# with a generate random configuration
genrandom = OXDNAReseed()
# in a reseeding takestep procedure
Exemplo n.º 15
0
Arquivo: otp.py Projeto: js850/pele
class OTPSystem(RBSystem):
    def __init__(self, nmol, boxl=None):
#        super(OTPSystem, self)
        self.nmol = nmol
        if boxl is None:
            self.periodic = False
            self.boxl = 1e100
        else:
            self.periodic = True
            self.boxl = boxl
        super(OTPSystem, self).__init__()
        
        self.setup_params(self.params)

    def get_rigid_fragment(self):
        return RigidFragment()

    def make_otp(self):
        otp = self.get_rigid_fragment()
        otp.add_atom("O", np.array([0.0, -2./3 * np.sin( 7.*pi/24.), 0.0]), 1.)
        otp.add_atom("O", np.array([cos( 7.*pi/24.),  1./3. * sin( 7.* pi/24.), 0.0]), 1.)
        otp.add_atom("O", np.array([-cos( 7.* pi/24.),  1./3. * sin( 7.*pi/24), 0.0]), 1.)
        otp.finalize_setup()
        return otp

    
    def setup_params(self, params):
        params.gui["basinhopping_nsteps"] = 1000
        
        nebparams = params.double_ended_connect.local_connect_params.NEBparams
        nebparams.max_images = 50
        nebparams.image_density = 5
        nebparams.iter_density = 10.
        nebparams.k = 5.
        nebparams.reinterpolate = 50
        
        nebparams.NEBquenchParams["iprint"] = 10
        
        
        tssearch = params.double_ended_connect.local_connect_params.tsSearchParams
        tssearch.nsteps_tangent1 = 10
        tssearch.nsteps_tangent2 = 30
        tssearch.lowestEigenvectorQuenchParams["nsteps"] = 50
        tssearch.iprint=1
        tssearch.nfail_max = 100
        
        
    
    def get_random_coordinates(self):
        coords = np.zeros([self.nmol*2, 3])
        coords[:self.nmol,:] = np.random.uniform(-1,1,[self.nmol,3]) * (self.nmol*3)**(-1./3) * 1.5
        from pele.utils.rotations import random_aa
        for i in range(self.nmol, self.nmol*2):
            coords[i,:] = random_aa()
        return coords.flatten()
    
    def write_coords_data(self):
        coords = self.get_random_coordinates()
        coords = coords.reshape(-1,3)
        with open("coords", "w") as fout:
            for xyz in coords:
                fout.write( "%f %f %f\n" % tuple(xyz) )
        
        data = "LWOTP 2.614\n"
        if self.periodic:
            data += "periodic %f %f %f\n" % (self.boxl, self.boxl, self.boxl)
        
        with open("data", "w") as fout:
            fout.write(data)
    
    def setup_aatopology(self):
        self.write_coords_data()
        GMIN.initialize()        
        self.pot = GMINPotential(GMIN)
        coords = self.pot.getCoords()
        self.nrigid = coords.size/6
        assert(self.nrigid == self.nmol)
        #self.nrigid = self.nmol
        otp = self.make_otp()
        topology = RBTopology()
        topology.add_sites([deepcopy(otp) for i in xrange(self.nrigid)])
        
        self.render_scale = 0.2
        self.atom_types = topology.get_atomtypes()
        
        self.draw_bonds = []
        for i in xrange(self.nrigid):
            self.draw_bonds.append((3*i, 3*i+1))
            self.draw_bonds.append((3*i, 3*i+2))
    
        self.params.double_ended_connect.local_connect_params.tsSearchParams.iprint = 10
        return topology
    
    def get_potential(self):
        #return OTPPotential(self.aasystem)
        return self.pot
    
    def __call__(self):
        return self

    def load_coords_pymol(self, coordslist, oname, index=1):
        import pymol 
        super(OTPSystem, self).load_coords_pymol(coordslist, oname, index=index)
        pymol.cmd.set("sphere_scale", value=0.2, selection=oname)
Exemplo n.º 16
0
import numpy as np
from pele.potentials import GMINPotential
import gmin_ as GMIN
from pele.utils import rotations
from pele.takestep import buildingblocks
from pele.transition_states import NEB
import pylab as pl
from copy import deepcopy, copy
from pele.optimize import mylbfgs
from pele.angleaxis import RigidFragment, RBSystem
import tip4p
from tip4p import dump_path

# initialize GMIN and potential
GMIN.initialize()
pot = GMINPotential(GMIN)
coords = pot.getCoords()

nrigid = coords.size / 6
print "I have %d water molecules in the system"%nrigid

water = tip4p.water()
#water.S = np.identity(3, dtype="float64")
#water.S*=10.

# 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)