Chemistry: Identifies the Molecule_Types and Interaction_Types that are included in the SimSoup Chemistry sub-system. The Chemistry object provides a point of integration for other objects in the Chemistry sub-system, and also provides a number of sub-system level operations. Only one Chemistry object can exist in SimSoup at any time.
Molecule_Type: Represents a type of molecule.
Interaction_Type: A base class. Classes derived from Interaction_Type represent types of interaction that can take place involving Molecule_Types. Interaction_Type represents those aspects that are common to all types of interaction. This includes one Reactant and one Product.
Construction: A Construction is a kind of Interaction_Type. It has interaction scheme A + B --> C. In a Construction, two Molecules join together to produce a single product Molecule.
Fission: A Fission is a kind of Interaction_Type. It has interaction scheme A --> B+ C. In a Fission, a single Molecule splits to form two product Molecules.
Transformation: A Transformation is a kind of Interaction_Type. It has interaction scheme A --> B. In a Transformation, a single Molecule transforms into a single product Molecule of a different Molecule_Type.
The inheritance relationships between Chemistry and Construction, Fission and Transformation show that the latter three are different kinds of interaction derived from the Interaction_Type base class.
The Molecule_Type is Input relationship between Interaction_Type and Molecule_Type indicates that one Molecule_Type can be an input to many different Interaction_Types. Each Molecule_Type maintains a List of Interaction_Types to which it can be an input.
Similarly, the Molecule_Type_Is_Product relationship indicates that one Molecule_Type can be a product of many different Interaction_Types. Each Molecule_Type object maintains a List of the Interaction_Types of which it is a product.
The Molecule_Type is Reactant 1 relationship indicates that each Interaction_Type has a 'first' Reactant. Each Interaction_Type object maintains a pointer to its Reactant 1 Molecule_Type.
Similarly, the Molecule_Is_Product1 relationship indicates that each Interaction_Type has a 'first' Product. Each Interaction_Type object maintains a pointer to its Product 1 Molecule_Type.
The Construction class has two Reactants. The Molecule_Type is Reactant 2 relationship indicates that in addition to having a relationship with a 'first' Reactant (inherited from its base class), each Construction also has a relationship with a second reactant (Reactant 2). Each Construction maintanis a pointer to its Reactant 2 Molecule_Type.
Similarly, each Fission has a Molecule_Type is Product 2 relationship, and maintains a pointer to the Product 2 Molecule_Type.
Since a Transformation has only one reactant and one product, it needs no relationships beyond the ones it inherits from its base class (Interaction_Type).
Finally, the Molecule_Type is / has been realised and Interaction_Type is currently realisable relationships indicate that each Molecule_Type can be associated with a Realised_Molecule_Type in the Reactor sub-system, and each Interaction_Type can be associated with a Realisable_Interaction_Type in the Reactor sub-system.