Skip to content

Latest commit

 

History

History
45 lines (30 loc) · 1.64 KB

logging_and_debugging.md

File metadata and controls

45 lines (30 loc) · 1.64 KB

Logging

Logging is handled via the logging module. The handler is not defined however. This is true for Victor, Fragmenstein, Igor, Rectifier and the dependency Params.

In Victor the logger is a class attribute called .journal, in the other it's simply .log.

Victor has a shorthand for adding a file or console handler.

import logging
Victor.enable_stdout(level=logging.DEBUG)
Victor.enable_logfile(level=logging.DEBUG)

To change the level quickly just run it again.

Error

If an error occurs, it will be caught and logged and the user will just get a log error. If instead one wants to have the error be left uncaught:

Victor.error_to_catch = ()

The error ConnectionError gets used internally (for bond problems, not internet ones) and is caught regardless of this.

Steps

During merging and rectification, odd things are bound to happen. Given a Victor instance victor, this could be done to make a pymol session to see what happened at each step:

import pymol2
from rdkit import Chem
with pymol2.PyMOL() as pymol:
    for hit in victor.fragmenstein.hits:
        # this may differ from victor.hits —the latter are not collapsed.
        pymol.cmd.read_molstr(Chem.MolToMolBlock(hit, kekulize=False), hit.GetProp('_Name'))
    for i, mod in enumerate(victor.modifications):
        pymol.cmd.read_molstr(Chem.MolToMolBlock(mod, kekulize=False), f'step{i}')
    pymol.cmd.save('test.pse')

The Monster class can trip up, and this can happen at various steps. victor.modifications contains a stack of the various step, such as the collapsed rings to the rectification.