Source code for eon.eon_kdb


import subprocess
import os
import shutil
import signal
import glob
import numpy
import logging
logger = logging.getLogger('kdb')

from eon.config import config
from eon import fileio as io

[docs] def insert(state, process_id): try: from kdb import aselite from kdb import local_db from kdb import local_insert except: logger.error('Python module kdb not found, kdb will not be used.') return logger.debug("KDB inserting process") reactant = aselite.read_any(state.proc_reactant_path(process_id)) saddle = aselite.read_any(state.proc_saddle_path(process_id)) product = aselite.read_any(state.proc_product_path(process_id)) mode = state.get_process_mode(process_id) db = local_db.LocalDB(config.kdb_name) params = db.get_params() insert_sub_class = local_insert.LocalInsert() insert_sub_class.insert(reactant, saddle, product, mode=mode, nf=params['nf'], dc=params['dc'], mac=params['mac'], kdbname=config.kdb_name)
[docs] def query(state): try: from kdb import aselite from kdb import local_db from kdb import local_query except: logger.error('Python module kdb not found, kdb will not be used.') return if os.path.isdir(os.path.join(config.kdb_scratch_path, "kdbmatches")): shutil.rmtree(os.path.join(config.kdb_scratch_path, "kdbmatches")) os.makedirs(os.path.join(config.kdb_scratch_path, "kdbmatches")) kdbpath = os.path.abspath(os.path.join(config.path_root, config.kdb_path)) if state.number == 0: reactant = aselite.read_any(os.path.abspath(os.path.join(config.path_root, "pos.con"))) else: reactant = aselite.read_any(os.path.abspath(state.reactant_path)) db = local_db.LocalDB(config.kdb_name) params = db.get_params() query_sub_class = local_query.LocalQuery() query_sub_class.query(reactant, os.path.join(config.kdb_scratch_path, "kdbmatches"), nodupes = config.kdb_nodupes, kdbname=config.kdb_name, dc=params['dc'], nf=params['nf'])
[docs] def make_suggestion(): if os.path.isdir(os.path.join(config.kdb_scratch_path, "kdbmatches")): dones = glob.glob(os.path.join(config.kdb_scratch_path, "kdbmatches",".done_*")) if len(dones) > 0: number = dones[0].split("_")[1] try: displacement = io.loadcon(os.path.join(config.kdb_scratch_path, "kdbmatches", "SADDLE_%s" % number)) except FloatingPointError: displacement = io.loadposcar(os.path.join(config.kdb_scratch_path, "kdbmatches", "SADDLE_%s" % number)) except ValueError: displacement = io.loadposcar(os.path.join(config.kdb_scratch_path, "kdbmatches", "SADDLE_%s" % number)) mode = [[float(i) for i in l.strip().split()] for l in open(os.path.join(config.kdb_scratch_path, "kdbmatches", "MODE_%s" % number), 'r').readlines()[:]] os.remove(os.path.join(config.kdb_scratch_path, "kdbmatches", ".done_%s" % number)) os.remove(os.path.join(config.kdb_scratch_path, "kdbmatches", "SADDLE_%s" % number)) os.remove(os.path.join(config.kdb_scratch_path, "kdbmatches", "MODE_%s" % number)) return displacement, mode return None, None