Code Structure#

Overview#

The autodE code base is structured around a Reaction class, due to the initial singular goal of calculating reaction profiles.

../_images/reaction_simple_uml.svg


The key attributes include reacs and prods as individual molecules comprising the reactants and products of the reaction. Transition states connecting reactants and products are held in tss. From these, property attributes are generated, including reactant and product, which are the corresponding association complexes of all reactants and products. The ts property is simply the lowest energy transition state and None if len(reaction.tss) == 0.

Overall class structure#

Zooming out, the composition and inheritance between of some of the classes arising from Reaction (center) is shown below.


../_images/simple_uml.svg

Species#

Individual atoms are collected into a Atoms class which becomes an (effective) attribute of an AtomCollection, which serves as a base class for all objects with associated atoms. A Species adds a molecular graph, solvent and name attributes and is the parent class of a Molecule, Complex and TransitionState.

Values#

Quantities with associated units e.g. an angle or energy are subclasses of autode.values.Value, which facilitate the conversion between units (using value.to()). For example, species.energy returns a PotentialEnergy instance (if the energy has been calculated with e.g. species.single_point()).

Solvent#

Species in the gas phase have species.solvent == None while solvated ones have an instance of either ImplicitSolvent or ExplicitSolvent, inheriting from the base autode.solvent.Solvent class. Explicit solvent contains defined atoms, thus inherits also from AtomCollecion.

Calculation#

Energies and derivatives thereof are obtained but running calculations using external QM packages (e.g. Gaussian, etc.) through a Calculation instance. A Calculation is initialised with a Species, using a Method and Keywords describing the type of calculation to perform. Please reach out via email or slack to add a a new method.

calculate_reaction_profile#

From the description of a reaction (e.g SMILES strings), autodE can generate the reaction profile. It starts by building a Reaction instance, describing the reactants/products involved (see Molecule) as well as the transition states (see TransitionStates). Calling the calculate_reaction_profile method on the reaction instance first locates the lowest energy conformers of each reactant and product (species.find_lowest_energy_conformer()). The intermediate optimisations are performed using a Calculation instance, which is responsible for calling a specified QM package (e.g. XTB or Gaussian) with calculation.run(). The generated output is then parsed and the output available from the calculation instance e.g. calculation.get_final_atoms(). A Calculation is constructed with a Method, which serves as the QM wrapper. From optimised reactants and products a transition state (TS) search is performed by constructing association complexes of reactants and products, then searching over bond additions and deletions to traverse a reasonable path. Once the TransitionStates instance has been populated the lowest is selected to perform a conformer search. If required, the conformational space of the ReactantComplex and ProductComplex attributes of the reaction are optimised. Hessian calculations are performed if the thermochemical contributions to the energy are required, followed by single-point energy evaluations on the final geometries.