Source code for vivarium.compartments.growth_division

from __future__ import absolute_import, division, print_function

import os
import uuid
import copy

from vivarium.library.units import units
from vivarium.core.process import Generator
from vivarium.core.composition import (
    COMPARTMENT_OUT_DIR,
    simulate_compartment_in_experiment,
    plot_agents_multigen,
)

# processes
from vivarium.processes.growth_protein import GrowthProtein
from vivarium.processes.minimal_expression import (
    MinimalExpression,
    get_toy_expression_config,
)
from vivarium.processes.meta_division import MetaDivision
from vivarium.processes.convenience_kinetics import (
    ConvenienceKinetics,
    get_glc_lct_config
)
from vivarium.processes.tree_mass import TreeMass

from vivarium.library.dict_utils import deep_merge


NAME = 'growth_division'

[docs]class GrowthDivision(Generator): defaults = { 'boundary_path': ('boundary',), 'agents_path': ('..', '..', 'agents',), 'transport': get_glc_lct_config(), 'daughter_path': tuple(), 'fields_path': ('fields',), 'dimensions_path': ('dimensions',), 'growth': {}, 'expression': get_toy_expression_config(), 'mass': {}, } def __init__(self, config): super(GrowthDivision, self).__init__(config) # transport configs boundary_path = self.config['boundary_path'] self.config['transport'] = self.config['transport'] self.config['transport']['global_deriver_config'] = { 'type': 'globals', 'source_port': 'global', 'derived_port': 'global', 'global_port': boundary_path, 'keys': []}
[docs] def generate_processes(self, config): daughter_path = config['daughter_path'] agent_id = config['agent_id'] growth = GrowthProtein(config['growth']) transport = ConvenienceKinetics(config['transport']) expression = MinimalExpression(config['expression']) mass_deriver = TreeMass(config['mass']) # configure division division_config = dict( config.get('division', {}), daughter_path=daughter_path, agent_id=agent_id, compartment=self) division = MetaDivision(division_config) return { 'transport': transport, 'growth': growth, 'expression': expression, 'mass_deriver': mass_deriver, 'division': division, }
[docs] def generate_topology(self, config): boundary_path = config['boundary_path'] agents_path = config['agents_path'] external_path = boundary_path + ('external',) fields_path = config['fields_path'] dimensions_path = config['dimensions_path'] return { 'transport': { 'internal': ('internal',), 'external': external_path, 'fields': fields_path, 'fluxes': ('fluxes',), 'global': boundary_path, 'dimensions': dimensions_path, }, 'growth': { 'internal': ('internal',), 'global': boundary_path }, 'mass_deriver': { 'global': boundary_path }, 'division': { 'global': boundary_path, 'cells': agents_path }, 'expression': { 'internal': ('internal',), 'external': external_path, 'concentrations': ('internal_concentrations',), 'global': boundary_path }, }
if __name__ == '__main__': out_dir = os.path.join(COMPARTMENT_OUT_DIR, NAME) if not os.path.exists(out_dir): os.makedirs(out_dir) agent_id = '0' compartment = GrowthDivision({'agent_id': agent_id}) # settings for simulation and plot settings = { 'environment': { 'volume': 1e-6 * units.L, # L 'ports': { 'fields': ('fields',), 'external': ('boundary', 'external',), 'global': ('boundary',), 'dimensions': ('dimensions',), }, }, 'outer_path': ('agents', agent_id), # TODO -- need to set the agent_id through here? 'return_raw_data': True, 'timestep': 1, 'total_time': 500} output_data = simulate_compartment_in_experiment(compartment, settings) plot_settings = {} plot_agents_multigen(output_data, plot_settings, out_dir)