Alchemical Networks: Representation of a Simulation#
The goal of the setup stage is to create an AlchemicalNetwork,
which contains all the information needed for a campaign of simulations.
This section will describe the composition of the achemical network,
including describing the OpenFE objects that describe chemistry, as well as
alchemical transformations.
Like any network, the AlchemicalNetwork can be described in terms
of nodes and edges between nodes. The nodes are ChemicalSystems,
which describe the specific molecules involved. The edges are
Transformation objects, which carry all the information about how
the simulation is to be performed.
In practice, nodes must be associated with a transformation in order to be relevant in an alchemical network; that is, there are no disconnected nodes. This means that the alchemical network can be fully described by just the edges (which contain information on the nodes they connect). Note that this does not mean that the entire network must be fully connected – just that there are no solitary nodes.
Each Transformation represents everything that is needed to
calculate the free energy differences between the two
ChemicalSystems that are the nodes for that edge. In addition to
containing the information for each ChemicalSystem, the
Transformation also contains a Protocol and, when
relevant, atom mapping information for alchemical transformations.
A ChemicalSystem is made up of one or more ChemicalComponents. Each component represents a conceptual part of the total molecular
system. A ligand would be represented by a SmallMoleculeComponent.
A protein would be a ProteinComponent. The solvent to be added is
represented as a SolventComponent. This allows us to easily
identify what is changing between two nodes – for example, a relative
binding free energy (RBFE) edge for ligand binding would have the same
solvent and protein components, but different ligand components.
The Protocol object describes how the simulation should be run.
This includes choice of algorithm, as well as specific settings for the
edge. Each protocol has its own Settings subclass, which contains
all the settings relevant for that protocol.