documentation/logging_and_debugging.md
## 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.