Using the logger to control output and logging information

In this example, we’ll use scm.reactmap.logger to adjust the level of information that is printed and logged in the text file RM_Log.txt. These options can be adjusted using a set of 3 logger attributes:

  • logger.write_log = True/False – Whether to write the log file (default False)
  • logger.print_level = 'info'/'status'/'warning'/'error'/'critical'/'none' – Which level of information to write to stdout (in decreasing order by amount of information)
  • logger.log_levelS = 'info'/'status'/'warning'/'error'/'critical'/'none' – Which level of information to write to the log file (in decreasing order by amount of information)
import scm.reactmap as rm

# turn off logging
rm.logger.write_log   = False

reactant  = rm.Molecule(atoms=['H','O','O','H'], bonds=[(0,1),(1,2),(2,3)])
product   = rm.Molecule(atoms=['H','O','O','H'], bonds=[(0,1),(2,3)])
reaction1 = rm.Reaction(reactant = reactant, product = product, name = "homolytic cleavage")


# print nothing
print("print_level = 'none'")
rm.logger.print_level = 'none'
rm.Map(reaction1)

# print status
print("print_level = 'status'")
rm.logger.print_level = 'status'
rm.Map(reaction1)

# print everything
print("print_level = 'info'")
rm.logger.print_level = 'info'
rm.Map(reaction1)

# now we make an error -- we provide a reaction that cannot be mapped
# this is due to an imbalance of atoms between reactant and product
print("making error, print_level = 'none'")
rm.logger.print_level = 'none'

reactant  = rm.Molecule(atoms=['H','O','O','H','F'], bonds=[(0,1),(1,2),(2,3)])
product   = rm.Molecule(atoms=['H','O','O','H'], bonds=[(0,1),(2,3)])
reaction2 = rm.Reaction(reactant = reactant, product = product, name = "homolytic cleavage error")
rm.Map(reaction2)

print("making error, print_level = 'error'")
rm.logger.print_level = 'error'
rm.Map(reaction2)


# now let's write a log
print("now, writing the log")
rm.logger.write_log = True
rm.logger.log_level = 'info'
rm.Map(reaction1)

The output shows the total cost of the mapping as well as the assignment of each atom in the reactants to a unique atom in the products.

print_level = 'none'
print_level = 'status'

            Starting calculation on homolytic cleavage.

            Details of homolytic cleavage:
            Number of atoms:                                       4,
            Types of atoms:                                      O H,
            Number of reactant bonds:                              3,
            Number of product bonds:                               2,

            Timer has been reset.

STATUS :    0.000s : Trying Heuristics.
STATUS :    0.000s : Heuristics successfully solved the model and found a value of 1.

                Mapping finished of homolytic cleavage.
                Found a minimal map cost of 1 in 0.000 seconds

print_level = 'info'
INFO :      0.001s : No settings supplied. Continuing with standard settings

            Starting calculation on homolytic cleavage.

            Details of homolytic cleavage:
            Number of atoms:                                       4,
            Types of atoms:                                      O H,
            Number of reactant bonds:                              3,
            Number of product bonds:                               2,

            Timer has been reset.

INFO :      0.000s : Checking settings for problem.
INFO :      0.000s : Preprocessing problem.
STATUS :    0.000s : Trying Heuristics.
STATUS :    0.000s : Heuristics successfully solved the model and found a value of 1.
INFO :      0.000s : Postprocessing problem.

                Mapping finished of homolytic cleavage.
                Found a minimal map cost of 1 in 0.000 seconds

making error, print_level = 'none'
making error, print_level = 'error'
ERROR :     0.001s : problem homolytic cleavage error is not valid for reaction mapping.  Skipping problem
now, writing the log

Additionally, the following log file RM_Log.txt is produced:

INFO :      0.001s : No settings supplied. Continuing with standard settings

            Starting calculation on homolytic cleavage.

            Details of homolytic cleavage:
            Number of atoms:                                       4,
            Types of atoms:                                      O H,
            Number of reactant bonds:                              3,
            Number of product bonds:                               2,

            Timer has been reset.

INFO :      0.000s : Checking settings for problem.
INFO :      0.000s : Preprocessing problem.
STATUS :    0.000s : Trying Heuristics.
STATUS :    0.000s : Heuristics successfully solved the model and found a value of 1.
INFO :      0.000s : Postprocessing problem.

                Mapping finished of homolytic cleavage.
                Found a minimal map cost of 1 in 0.000 seconds