Statistiques
| Branche: | Tag: | Révision :

dockonsurf / modules / screening.py @ f3d1e601

Historique | Voir | Annoter | Télécharger (2,55 ko)

1 e07c09eb Carles
import logging
2 f3d1e601 Carles Marti
import numpy as np
3 f3d1e601 Carles Marti
import ase
4 e07c09eb Carles
5 e07c09eb Carles
logger = logging.getLogger('DockOnSurf')
6 e07c09eb Carles
7 e07c09eb Carles
8 f3d1e601 Carles Marti
def get_atom_coords(atoms: ase.Atoms, ctrs_list):
9 f3d1e601 Carles Marti
    pass
10 f3d1e601 Carles Marti
11 f3d1e601 Carles Marti
12 f3d1e601 Carles Marti
def ads_euler(site, ctr, pts_angle, neigh_ctr):
13 f3d1e601 Carles Marti
    pass
14 f3d1e601 Carles Marti
15 f3d1e601 Carles Marti
16 f3d1e601 Carles Marti
def ads_chemcat(site, ctr, pts_angle):
17 f3d1e601 Carles Marti
    pass
18 f3d1e601 Carles Marti
19 f3d1e601 Carles Marti
20 f3d1e601 Carles Marti
def adsorb_confs(conf_list, surf, ads_ctrs, sites, algo, num_pts, neigh_ctrs):
21 f3d1e601 Carles Marti
    surf_ads_list = []
22 f3d1e601 Carles Marti
    sites_coords = get_atom_coords(surf, sites)
23 f3d1e601 Carles Marti
    for conf in conf_list:
24 f3d1e601 Carles Marti
        molec_ctr_coords = get_atom_coords(conf, ads_ctrs)
25 f3d1e601 Carles Marti
        molec_neigh_coords = get_atom_coords(conf, neigh_ctrs)
26 f3d1e601 Carles Marti
        for site in sites_coords:
27 f3d1e601 Carles Marti
            for i, molec_ctr in enumerate(molec_ctr_coords):
28 f3d1e601 Carles Marti
                if algo == 'euler':
29 f3d1e601 Carles Marti
                    surf_ads_list.append(ads_euler(site, molec_ctr, num_pts,
30 f3d1e601 Carles Marti
                                                   molec_neigh_coords[i]))
31 f3d1e601 Carles Marti
                elif algo == 'chemcat':
32 f3d1e601 Carles Marti
                    surf_ads_list.append(ads_chemcat(site, molec_ctr, num_pts))
33 f3d1e601 Carles Marti
    return surf_ads_list
34 f3d1e601 Carles Marti
35 f3d1e601 Carles Marti
36 4614bb6a Carles
def run_screening(inp_vars):
37 e07c09eb Carles
    """Carry out the screening of adsorbate coordinates on a surface
38 e07c09eb Carles

39 e07c09eb Carles
    @param inp_vars: Calculation parameters from input file.
40 e07c09eb Carles
    """
41 e07c09eb Carles
    import os
42 e07c09eb Carles
    import numpy as np
43 f3d1e601 Carles Marti
    from modules.formats import read_coords, read_energies, \
44 f3d1e601 Carles Marti
        rdkit_mol_to_ase_atoms, adapt_format
45 af3e2441 Carles Marti
    from modules.clustering import get_rmsd, clustering
46 f3d1e601 Carles Marti
    from modules.isolated import get_moments_of_inertia, get_neighbors
47 f3d1e601 Carles Marti
    from modules.calculation import run_calc
48 e07c09eb Carles
49 e07c09eb Carles
    if not os.path.isdir("isolated"):
50 e07c09eb Carles
        err = "'isolated' directory not found. It is needed in order to carry "
51 e07c09eb Carles
        "out the screening of structures to be adsorbed"
52 e07c09eb Carles
        logger.error(err)
53 e07c09eb Carles
        raise ValueError(err)
54 e07c09eb Carles
55 f3d1e601 Carles Marti
    conf_list = read_coords(inp_vars['code'], 'isolated', 'rdkit')
56 f3d1e601 Carles Marti
    # TODO Implement neighbors algorithm
57 f3d1e601 Carles Marti
    # neigh_list = get_neighbors(conf_list[0], inp_vars['molec_ads_ctrs'])
58 f3d1e601 Carles Marti
    conf_enrgs = read_energies(inp_vars['code'], 'isolated')
59 f3d1e601 Carles Marti
    mois = np.array([get_moments_of_inertia(conf)[0] for conf in conf_list])
60 f3d1e601 Carles Marti
    rmsd_mtx = get_rmsd(conf_list)
61 05464650 Carles Marti
    exemplars = clustering(rmsd_mtx)
62 f3d1e601 Carles Marti
    conf_list = [conf_list[idx] for idx in exemplars]
63 f3d1e601 Carles Marti
    conf_list = [rdkit_mol_to_ase_atoms(conf) for conf in conf_list]
64 f3d1e601 Carles Marti
    surf = adapt_format('ase', inp_vars['surf_file'])
65 f3d1e601 Carles Marti
    surf_ads_list = adsorb_confs(conf_list, surf, inp_vars['molec_ads_ctrs'],
66 f3d1e601 Carles Marti
                                 inp_vars['sites'], inp_vars['ads_algo'],
67 f3d1e601 Carles Marti
                                 inp_vars['sample_points_per_angle'],
68 f3d1e601 Carles Marti
                                 inp_vars['molec_neigh_ctrs'])
69 f3d1e601 Carles Marti
    run_calc('screening', inp_vars, surf_ads_list)