Révision 695dcff8

b/dockonsurf.py
14 14
args = get_args()
15 15
logger = config_log('DockOnSurf')
16 16

  
17
logger.info(f'DockOnSurf started on {os.getcwd()}')
18
logger.info(f"Using '{args.input}' as input")
17
logger.info(f'DockOnSurf started on {os.getcwd()}.')
18
logger.info(f"Using '{args.input}' as input.")
19 19

  
20 20
inp_vars = read_input(args.input)
21 21

  
......
28 28
if inp_vars['refinement']:
29 29
    run_refinement(inp_vars)
30 30

  
31
logger.info(f'DockOnSurf finished')
31
logger.info(f'DockOnSurf finished.')
b/modules/calculation.py
24 24
        logger.warning("'COORD_FILE_NAME' not specified on CP2K input. Using\n"
25 25
                       "default name 'coord.xyz'. A new CP2K input file with "
26 26
                       "the 'COORD_FILE_NAME' variable is created. If there\n"
27
                       "is a name conflict the old file will be backed up")
27
                       "is a name conflict the old file will be backed up.")
28 28
        force_eval.SUBSYS.TOPOLOGY.Coord_file_name = 'coord.xyz'
29 29
        print(inp_file.split('/')[-1])
30 30
        check_bak(inp_file.split('/')[-1])
......
81 81
        subm_jobs.append(qsub(sub_script, name=job_name))
82 82
        os.chdir(init_dir)
83 83

  
84
    logger.info('All jobs have been submitted, waiting them to finish')
84
    logger.info('All jobs have been submitted, waiting them to finish.')
85 85
    while not all([stat == 'f' for stat in get_jobs_status_sge(subm_jobs)]):
86 86
        sleep(30)
87
    logger.info('All jobs have finished')
87
    logger.info('All jobs have finished.')
88 88

  
89 89

  
90 90
def sub_lsf(run_type, sub_script, max_qw, name):
......
109 109

  
110 110
    if inp_vars['batch_q_sys']:
111 111
        logger.info(f"Running {run_type} calculation with {inp_vars['code']} on"
112
                    f" {inp_vars['batch_q_sys']}")
112
                    f" {inp_vars['batch_q_sys']}.")
113 113
    else:
114
        logger.info(f"Doing a dry run of {run_type}")
114
        logger.info(f"Doing a dry run of {run_type}.")
115 115
    check_bak(run_type)
116 116
    os.mkdir(run_type)
117 117
    if inp_vars['code'] == 'cp2k':
b/modules/clustering.py
205 205

  
206 206
    if data.shape[0] == data.shape[1] \
207 207
            and (np.tril(data).T == np.triu(data)).all():
208
        logger.info("Clustering using affinity matrix")
208
        logger.info("Clustering using affinity matrix.")
209 209
        labels = get_labels_affty(data)
210 210
        if max(labels) == -1:
211 211
            logger.warning('Clustering of conformers did not converge. Try '
212
                           "setting a smaller 'min_samples' parameter")
212
                           "setting a smaller 'min_samples' parameter.")
213 213
            exemplars = list(range(data.shape[0]))
214 214
        else:
215 215
            clusters = get_clusters(labels)
b/modules/dos_input.py
205 205
def get_subm_script():
206 206
    subm_script = dos_inp.get('Global', 'subm_script', fallback=False)
207 207
    if subm_script and not os.path.isfile(subm_script):
208
        logger.error(f'File {subm_script} not found')
208
        logger.error(f'File {subm_script} not found.')
209 209
        raise FileNotFoundError(f'File {subm_script} not found')
210 210
    return subm_script
211 211

  
......
283 283
def get_isol_inp_file():
284 284
    isol_inp_file = dos_inp.get('Isolated', 'isol_inp_file')
285 285
    if not os.path.isfile(isol_inp_file):
286
        logger.error(f'File {isol_inp_file} not found')
286
        logger.error(f'File {isol_inp_file} not found.')
287 287
        raise FileNotFoundError(f'File {isol_inp_file} not found')
288 288
    return isol_inp_file
289 289

  
......
291 291
def get_molec_file():
292 292
    molec_file = dos_inp.get('Isolated', 'molec_file')
293 293
    if not os.path.isfile(molec_file):
294
        logger.error(f'File {molec_file} not found')
294
        logger.error(f'File {molec_file} not found.')
295 295
        raise FileNotFoundError(f'File {molec_file} not found')
296 296
    return molec_file
297 297

  
......
339 339
def get_screen_inp_file():
340 340
    screen_inp_file = dos_inp.get('Screening', 'screen_inp_file')
341 341
    if not os.path.isfile(screen_inp_file):
342
        logger.error(f'File {screen_inp_file} not found')
342
        logger.error(f'File {screen_inp_file} not found.')
343 343
        raise FileNotFoundError(f'File {screen_inp_file} not found')
344 344
    return screen_inp_file
345 345

  
......
347 347
def get_surf_file():
348 348
    surf_file = dos_inp.get('Screening', 'surf_file')
349 349
    if not os.path.isfile(surf_file):
350
        logger.error(f'File {surf_file} not found')
350
        logger.error(f'File {surf_file} not found.')
351 351
        raise FileNotFoundError(f'File {surf_file} not found')
352 352
    return surf_file
353 353

  
......
549 549
def get_refine_inp_file():  # TODO if not specified try isol_inp_file.
550 550
    refine_inp_file = dos_inp.get('Refinement', 'refine_inp_file')
551 551
    if not os.path.isfile(refine_inp_file):
552
        logger.error(f'File {refine_inp_file} not found')
552
        logger.error(f'File {refine_inp_file} not found.')
553 553
        raise FileNotFoundError(f'File {refine_inp_file} not found')
554 554

  
555 555
    return refine_inp_file
......
572 572
        dos_inp.read(in_file)
573 573
    except MissingSectionHeaderError as e:
574 574
        logger.error('There are options in the input file without a Section '
575
                     'header')
575
                     'header.')
576 576
        err = e
577 577
    except DuplicateOptionError as e:
578 578
        logger.error('There is an option in the input file that has been '
579 579
                     'specified more than once, possibly due to the lack of a '
580
                     'Section header')
580
                     'Section header.')
581 581
        err = e
582 582
    except Exception as e:
583 583
        err = e
......
685 685
        if return_vars['min_coll_height'] is not False and \
686 686
                return_vars['surf_norm_vect'].tolist() not in cart_axes:
687 687
            logger.warning("'min_coll_height' option is only implemented for "
688
                           "'surf_norm_vect' to be one of the x, y or z axes")
688
                           "'surf_norm_vect' to be one of the x, y or z axes.")
689 689

  
690 690
    # Refinement
691 691
    if refinement:
......
708 708
    return_vars_str = "\n\t".join([str(key) + ": " + str(value)
709 709
                                   for key, value in return_vars.items()])
710 710
    logger.info(
711
        f'Correctly read {in_file} parameters: \n\n\t{return_vars_str}\n')
711
        f'Correctly read {in_file} parameters: \n\n\t{return_vars_str}\n.')
712 712

  
713 713
    return return_vars
714 714

  
b/modules/formats.py
38 38
    from ase import Atoms
39 39
    if mol.GetNumConformers() > 1:
40 40
        logger.warning('A mol object with multiple conformers is parsed, '
41
                       'converting to Atoms only the first conformer')
41
                       'converting to Atoms only the first conformer.')
42 42
    symbols = [atm.GetSymbol() for atm in mol.GetAtoms()]
43 43
    positions = mol.GetConformer(0).GetPositions()
44 44
    return Atoms(symbols=symbols, positions=positions)
b/modules/isolated.py
55 55
    are required to be local minima, ie. setting the 'local_min' value to 
56 56
    True, a geometry optimisation using UFF is performed.
57 57
    """
58
    logger.debug('Generating Conformers')
58
    logger.debug('Generating Conformers.')
59 59

  
60 60
    mol = Chem.AddHs(mol)
61 61
    Chem.EmbedMultipleConfs(mol, numConfs=num_confs, numThreads=0)
62 62
    Chem.AlignMolConformers(mol)
63
    logger.info(f'Generated {len(mol.GetConformers())} conformers')
63
    logger.info(f'Generated {len(mol.GetConformers())} conformers.')
64 64
    return mol
65 65

  
66 66

  
......
114 114
        if mol.GetNumConformers() < init_num_confs:
115 115
            logger.warning(f'MMFF Geometry optimization did not comverge for at'
116 116
                           f'least one conformer. Continuing with '
117
                           f'{mol.GetNumConformers()} converged conformers')
117
                           f'{mol.GetNumConformers()} converged conformers.')
118 118
        logger.info(f'Pre-optimized conformers with MMFF.')
119 119
        return mol, np.array([res[1] for res in results if res[0] == 0])
120 120
    else:
......
133 133
    from modules.clustering import clustering, get_rmsd
134 134
    from modules.calculation import run_calc
135 135

  
136
    logger.info('Carrying out procedures for the isolated molecule')
136
    logger.info('Carrying out procedures for the isolated molecule.')
137 137
    rd_mol = adapt_format('rdkit', inp_vars['molec_file'])
138 138
    confs = gen_confs(rd_mol, inp_vars['num_conformers'])
139 139
    if inp_vars['min_confs']:
b/modules/screening.py
32 32
    if num_sel >= len(conf_list):
33 33
        logger.warning('Number of conformers per magnitude is equal or larger '
34 34
                       'than the total number of conformers. Using all '
35
                       f'available conformers: {len(conf_list)}')
35
                       f'available conformers: {len(conf_list)}.')
36 36
        return conf_list
37 37

  
38 38
    # Read properties
......
60 60
                if sorted_list[i].info['idx'] not in selected_ids:
61 61
                    selected_ids.append(sorted_list[i].info['idx'])
62 62

  
63
    logger.info(f'Selected {len(selected_ids)} conformers for adsorption')
63
    logger.info(f'Selected {len(selected_ids)} conformers for adsorption.')
64 64
    return [conf_list[idx] for idx in selected_ids]
65 65

  
66 66

  
......
389 389
        raise ValueError(err)
390 390

  
391 391
    conf_list = read_coords(inp_vars['code'], 'isolated', 'ase')
392
    logger.info(f"Found {len(conf_list)} structures of isolated conformers")
392
    logger.info(f"Found {len(conf_list)} structures of isolated conformers.")
393 393
    selected_confs = select_confs(conf_list, inp_vars['select_magns'],
394 394
                                  inp_vars['confs_per_magn'],
395 395
                                  inp_vars['code'])
......
403 403
                                 inp_vars['min_coll_height'],
404 404
                                 inp_vars['collision_threshold'])
405 405
    logger.info(f'Generated {len(surf_ads_list)} adsorbate-surface atomic '
406
                f'configurations of the on which to carry out a calculation')
406
                f'configurations, to carry out a calculation of.')
407 407
    run_calc('screening', inp_vars, surf_ads_list)
b/modules/utilities.py
39 39
    if bak_num > 0:
40 40
        os.rename(file_name, new_name)
41 41
        logger.warning(f"'{file_name}' already present. Backed it up to "
42
                       f"{new_name}")
42
                       f"{new_name}.")
43 43

  
44 44

  
45 45
def try_command(command, expct_error_types: list, *args, **kwargs):
b/tests/test_dos_input.py
96 96
        self.assertEqual(get_molec_file(), 'acetic.xyz')
97 97

  
98 98
    def test_cluster_magns(self):
99
        self.assertEqual(get_cluster_magns(), ['energy', 'moi'])
99
        self.assertEqual(get_select_magns(), ['energy', 'moi'])
100 100

  
101 101
    def test_num_conformers(self):
102 102
        self.assertEqual(get_num_conformers(), 100)
......
169 169
        self.assertRaises(FileNotFoundError, get_isol_inp_file)
170 170

  
171 171
    def test_cluster_magns(self):
172
        self.assertRaises(ValueError, get_cluster_magns)
172
        self.assertRaises(ValueError, get_select_magns)
173 173

  
174 174
    def test_num_conformers(self):
175 175
        self.assertRaises(ValueError, get_num_conformers)

Formats disponibles : Unified diff