Beispiel #1
0
def test():
    from pele.systems import LJCluster
    from pele.landscape import ConnectManager

    system = LJCluster(13)

    db = system.create_database()
    bh = system.get_basinhopping(db, outstream=None)
    bh.run(200)

    manager = ConnectManager(db)
    for i in range(3):
        min1, min2 = manager.get_connect_job()
        connect = system.get_double_ended_connect(min1, min2, db)
        connect.connect()

    # get_thermodynamic_information(system, db)

    print "getting thermodynamic info", db.number_of_minima()
    get_thermodynamic_information(system, db, nproc=4)

    for m in db.minima():
        print m.id(), m.pgorder, m.fvib

    print "\nnow transition states"
    for ts in db.transition_states():
        print ts.id(), ts.pgorder, ts.fvib
Beispiel #2
0
def create_random_database(system, db, nmin=20, nts=10):
    if db.number_of_minima() < nmin:
        bh = system.get_basinhopping(db, outstream=None)
        bh.run(50)

    if db.number_of_transition_states() < nts:
        manager = ConnectManager(db, strategy="gmin")
        for i in range(nts):
            try:
                min1, min2 = manager.get_connect_job("gmin")
            except Exception as e:
                if not "couldn't find any random minima pair to connect" in str(
                        e):
                    raise

            connect = system.get_double_ended_connect(min1,
                                                      min2,
                                                      db,
                                                      verbosity=0)
            connect.connect()

    connect = system.get_double_ended_connect(db.minima()[0],
                                              db.minima()[-1],
                                              db,
                                              verbosity=0)
    connect.connect()

    get_thermodynamic_information(system, db, nproc=2)
    return db
def main2():
    """a copy of main to clean it up a bit"""
    np.random.seed(0)
    #params=[0.1,1.0,0.0,0.0,0.0]
    #params=[0.1,1.0,0.0]
    params = [0.1, 1.0, 0.0, 0.0, 0.5 * np.pi]
    model = WaveModel(params0=params, sigma=0.1)
    system = RegressionSystem(model)
    database = system.create_database(db="/home/ab2111/mydb.sqlite")
    pot = system.get_potential()

    # do basinhopping
    x0 = np.random.uniform(0., 3, [model.nparams])
    print pot.getEnergy(x0)
    pot.test_potential(x0)
    step = RandomCluster(volume=1.0)
    bh = system.get_basinhopping(database=database,
                                 takestep=step,
                                 coords=x0,
                                 temperature=10.0)
    bh.run(100)

    mindist = system.get_mindist()

    #for j,m in enumerate(database.minima()):
    #    for i,mi in enumerate(database.minima()):
    #        distbest,c,minew = mindist(m.coords,mi.coords)
    #        if distbest-np.linalg.norm(mi.coords-m.coords) != 0.:
    #            print j,i,distbest,np.linalg.norm(mi.coords-m.coords),"\n",mi.coords,"\n",minew

    #print m.energy,m.coords

    for m in database.minima():
        print m.energy, m.coords

    m0 = database.minima()[0]
    m1 = database.minima()[1]
    mindist(m0.coords, m1.coords)

    # connect the minima
    manager = ConnectManager(database, strategy="gmin")
    for i in xrange(3):
        try:
            m1, m2 = manager.get_connect_job()
        except manager.NoMoreConnectionsError:
            break
        connect = system.get_double_ended_connect(m1, m2, database)
        connect.connect()

    for m in database.minima():
        print m.energy, m.coords

    database.session.commit()
    exit()

    make_disconnectivity_graph(database)

    m1 = database.minima()[0]
    m2 = database.minima()[1]
Beispiel #4
0
    def __init__(self, system, database, server_name=None, host=None, port=0):
        self.system = system
        self.db = database
        self.server_name = server_name
        self.host = host
        self.port = port

        self.connect_manager = ConnectManager(self.db)
def run_double_ended_connect(system, database):
    # connect the all minima to the lowest minimum
    from pele.landscape import ConnectManager
    manager = ConnectManager(database, strategy="gmin")
    for i in xrange(database.number_of_minima() - 1):
        min1, min2 = manager.get_connect_job()
        connect = system.get_double_ended_connect(min1, min2, database)
        connect.connect()
Beispiel #6
0
    def test_gmin(self):
        manager = ConnectManager(self.db, strategy="gmin")
        m0 = self.db.minima()[0]

        for i in range(5):
            m1, m2 = manager.get_connect_job()
            self.assertEqual(m1, m0)
            self.connect_min(m1, m2)
Beispiel #7
0
    def test_untrap(self):
        # first connect them all randomly
        manager = ConnectManager(self.db, strategy="random")
        while True:
            try:
                m1, m2 = manager.get_connect_job()
            except manager.NoMoreConnectionsError:
                break
            self.connect_min(m1, m2)

        for i in range(5):
            try:
                m1, m2 = manager.get_connect_job(strategy="untrap")
            except manager.NoMoreConnectionsError:
                break
            self.connect_min(m1, m2)
Beispiel #8
0
    def test_combine(self):
        minima = self.db.minima()
        i = 5
        for m1, m2 in zip(minima[:i - 1], minima[1:i]):
            self.connect_min(m1, m2)
        for m1, m2 in zip(minima[i:], minima[i + 1:]):
            self.connect_min(m1, m2)

        # at this point the minima should be in two disconnected groups
        g = database2graph(self.db)
        self.assertEqual(len(list(nx.connected_components(g))), 2)

        manager = ConnectManager(self.db, strategy="combine")
        m1, m2 = manager.get_connect_job()
        self.connect_min(m1, m2)

        # they should all be connected now
        g = database2graph(self.db)
        self.assertEqual(len(list(nx.connected_components(g))), 1)
Beispiel #9
0
    def __init__(self, system, database, parent=None, app=None):
        ConnectViewer.__init__(self, system, database, app=app, parent=parent)
        self.setWindowTitle("Connect all")

        self.wgt_dgraph = DGraphWidget(database=self.database, parent=self)
        self.connect_manager = ConnectManager(database)
        self.view_dgraph = self.new_view("Disconnectivity Graph",
                                         self.wgt_dgraph,
                                         QtCore.Qt.TopDockWidgetArea)
        self.view_dgraph.hide()
        self.ui.actionD_Graph.setVisible(True)
        self.ui.actionD_Graph.setChecked(False)

        self.textEdit_summary = QtGui.QTextEdit(parent=self)
        self.textEdit_summary.setReadOnly(True)
        self.view_summary = self.new_view("Summary",
                                          self.textEdit_summary,
                                          pos=QtCore.Qt.TopDockWidgetArea)
        self.connect_summary = _ConnectAllSummary()
        self.ui.actionSummary.setVisible(True)
        self.view_summary.hide()
        self.ui.actionSummary.setChecked(False)

        self.ui.action3D.setChecked(False)
        self.view_3D.hide()

        self.ui.actionEnergy.setChecked(False)
        self.view_energies.hide()

        self.ui.actionPause.setVisible(True)

        self.is_running = False

        self.failed_pairs = set()

        # add combo box to toolbar
        self.combobox = Qt.QComboBox()
        self.ui.toolBar.addWidget(self.combobox)
        self.combobox.addItems(
            ["connect strategy:", "random", "global min", "untrap", "combine"])
        self.combobox.setToolTip(
            "the strategy used to select which minima to connect")
def create_random_database(nmin=20, nts=20):
    db = Database()

    for i in range(nmin):
        energy = np.random.uniform(-1., 10.)
        x = [energy]
        db.addMinimum(energy, x)

    manager = ConnectManager(db, verbosity=0)
    for i in range(old_div(nts, 2)):
        m1, m2 = manager.get_connect_job("gmin")
        energy = max([m1.energy, m2.energy]) + np.random.uniform(1, 10)
        x = [energy]
        db.addTransitionState(energy, x, m1, m2)
    for i in range(old_div(nts, 2)):
        m1, m2 = manager.get_connect_job("random")
        energy = max([m1.energy, m2.energy]) + np.random.uniform(1, 5)
        x = [energy]
        db.addTransitionState(energy, x, m1, m2)

    return db
Beispiel #11
0
def test_script():
    natoms = 24
    boxl = 3
    boxvec = np.ones(3) * boxl
    # system = MorseCluster(natoms, rho=1.6047, r0=2.8970, A=0.7102, rcut=9.5)
    radii = np.ones(natoms) * .6
    system = SoftSphereSystem(radii, boxvec, power=2.5)
    
    db = system.create_database()
    
    bh = system.get_basinhopping(db)
    bh.run(100)
    
    from pele.landscape import ConnectManager
    manager = ConnectManager(db, strategy="random")
    for i in range(10):
        try:
            m1, m2 = manager.get_connect_job()
        except manager.NoMoreConnectionsError:
            break
        
        connect = system.get_double_ended_connect(m1, m2, db)
        connect.connect()
Beispiel #12
0
    def test_random(self):
        manager = ConnectManager(self.db, strategy="random")

        for i in range(5):
            m1, m2 = manager.get_connect_job()
            self.connect_min(m1, m2)
#
# first use the logging module to turn off the status messages
logger = logging.getLogger("pele.connect")
logger.setLevel("WARNING")
# now create the double ended connect object
connect = system.get_double_ended_connect(m1, m2, db)
connect.connect()
mints, S, energies = connect.returnPath()
nts = (len(mints) - 1) / 2
print "\nprint found a connection with", nts, "transition states"

# connect all minima to the lowest minimum
print "now connecting all the minima to the lowest energy minimum"
from pele.landscape import ConnectManager

manager = ConnectManager(db, strategy="gmin")
for i in xrange(db.number_of_minima() - 1):
    print "connecting minima with id's", m1._id, m2._id
    m1, m2 = manager.get_connect_job()
    connect = system.get_double_ended_connect(m1, m2, db)
    connect.connect()

# print some data about the database
print "database summary:"
print "    ", len(db.minima()), "minima"
print "    ", len(db.transition_states()), "transition states"

# finally, create a disconnectivity graph from the database
print "computing and showing disconnectivity graph"
import pylab as pl