Core framework

NutMEG is arranged into three subpackages:

  • NutMEG.core contains the building-block objects for creating a wide variety of computational scenarios. They are designed to be as simple and flexible as possible, and can be extended for specific applications and presets.

  • NutMEG.models contains classes that for models used by NutMEG.core objects. For example, a BaseOrganism requires a growth_model describing its growth behaviour. Classes that can faciliate that are found in the NutMEG.models.organism.growth_models subpackage, like Monod, or BioenergeticGrowthModel. They can also be user-defined.

  • NutMEG.presets provides builders for a specific type of organism or environment. For example, Enceladus [1] creates an Enceladus-like chemical environment, and TypicalOptimalMethanogen creates methanogenic organism population as defined in ref [2].

The basics of NutMEG.core

NutMEG.core.ecosystem

Most presets and applications interface with an Ecosystem. It contains the local chemical environment which is summarised by a Reactor object, and any number of Resident objects that can interact with that environment through time.

The NutMEG.core.reactor submodule

  • Reactor objects monitor the physicochemical system, such as it’s composition, size, temperature, and pressure. Under default settings, Reactor is valid for well-mixed near-equilibrium or kinetically quiescent conditions where the composition does not appreciably change unless we introduce something to disrupt the system such as an OrganismPopulation. Simple environmental disequilibria can be introduced, such as a constant fresh supply of a Reagent or simple modelled chemical Reaction.

  • Reagent objects store and updates properties of chemical species such as thermodynamic parameters, activities, molar quantities. Thermodynamic data at a range of temperatures and pressures can be calculated from chemical databases.

  • Reaction objects model chemical reactions by interacting with Reagents. Both biotic and abiotic chemical interactions with the Reactor are possible.

The NutMEG.core.base_organism submodule

This submodule is for building model organisms which act as the foundation for the behaviour of an OrganismPopulation.

  • BaseOrganism objects hold contextual cell-specific information about the model organism, such as its mass, energy requirements for biomass building.

  • Metaboliser objects handle the kinetics and energetics of the net metabolism. Each organism has one Metaboliser: BaseOrganism.metabolism. Metabolisers can handle any number of rate-limiting mechansims for the eventual metabolic rate.

  • Maintainer objects handle mirobial maintenance processes (specifically, the energetic cost of them). This can be compared against the energy yield from the Metabolisers to assess habitability and the energy available for biomass growth. Each organism has one Maintainer: BaseOrganism.maintenance.

  • Grower objects handle the growth behavior of the organism, and can interface with the Metaboliser. Each organism has one Grower: BaseOrganism.growth. Growers can also handle any number of rate-limiting mechansims specific to growth.

The NutMEG.core.resident submodule

This submodule is for dynamic inhabitants of an ecosystem. Usually these will be organisms, but any evolving phase that interacts with the reactor (e.g., a dissolving solid phase) is possible.

  • OrganismPopulation objects represent a population of a specific microbial strain whose constituents act like a common BaseOrganism. A seperate OrganismPopulation is needed for each different model organism present (e.g., for different metabolisms, growth behaviours etc)