Exemplo n.º 1
0
    def testBLJ(self):
        import pele.defaults as defaults
        X1 = np.copy(self.X1)
        X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
        
        #run a quench so the structure is not crazy
        ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient)
        X2 = ret[0]

        self.runtest(X1, X2, findBestPermutation)
Exemplo n.º 2
0
    def testLJ_hungarian(self):
        """test findBestPermutationListOPTIM"""
        import pele.defaults as defaults
        X1 = np.copy(self.X1)
        X2 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
        
        #run a quench so the structure is not crazy
        ret = defaults.quenchRoutine(X2, self.pot.getEnergyGradient)
        X2 = ret[0]

        self.runtest(X1, X2, findBestPermutationListHungarian, atomlist=self.permlist[0])
Exemplo n.º 3
0
 def setUp(self):
     from pele.potentials.ljpshiftfast import LJpshift as BLJ
     from pele import defaults
     
     self.natoms = 15
     self.ntypeA = int(self.natoms * .8)
     self.pot = BLJ(self.natoms, self.ntypeA)
     self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1)
     self.X1 = ret[0]
Exemplo n.º 4
0
 def setUp(self):
     from pele.potentials import LJ
     from pele import defaults
     from pele.mindist import CoMToOrigin
     
     self.natoms = 15
     self.pot = LJ(self.natoms)
     self.permlist = [range(self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, tol=.1)
     self.X1 = ret[0]
     self.X1 = CoMToOrigin(self.X1)
Exemplo n.º 5
0
 def setUp(self):
     from pele.potentials.ljpshiftfast import LJpshift as BLJ
     from pele import defaults
     
     self.natoms = 25
     self.ntypeA = int(self.natoms * .8)
     self.pot = BLJ(self.natoms, self.ntypeA)
     self.permlist = [range(self.ntypeA), range(self.ntypeA, self.natoms)]
     
     self.X1 = np.random.uniform(-1,1,[self.natoms*3])*(float(self.natoms))**(1./3)/2
     
     #run a quench so the structure is not crazy
     ret = defaults.quenchRoutine(self.X1, self.pot.getEnergyGradient, **defaults.quenchParams)
     self.X1 = ret[0]
Exemplo n.º 6
0
def _optimizePermRot(X1, X2, niter, permlist, verbose=False, use_quench=True):
    if use_quench:
        pot = MinPermDistPotential(X1, X2.copy(), permlist=permlist)

    distbest = getDistxyz(X1, X2)
    mxbest = np.identity(3)
    X20 = X2.copy()
    for i in range(niter):
        #get and apply a random rotation
        aa = random_aa()
        if not use_quench:
            mx = aa2mx(aa)
            mxtot = mx
            #print "X2.shape", X2.shape
        else:
            #optimize the rotation using a permutationally invariand distance metric
            ret = defaults.quenchRoutine(aa, pot.getEnergyGradient, tol=0.01)
            aa1 = ret[0]
            mx1 = aa2mx(aa1)
            mxtot = mx1
        X2 = applyRotation(mxtot, X20)
        
        #optimize the permutations
        dist, X1, X2 = findBestPermutation(X1, X2, permlist)
        if verbose:
            print "dist", dist, "distbest", distbest
        #print "X2.shape", X2.shape
        
        #optimize the rotation
        dist, Q2 = getAlignRotation(X1, X2)
#        print "dist", dist, "Q2", Q2
        mx2 = q2mx(Q2)
        mxtot = np.dot(mx2, mxtot)
        
        if dist < distbest:
            distbest = dist
            mxbest = mxtot
    return distbest, mxbest