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