Source code for vivarium.processes.derive_counts

from __future__ import absolute_import, division, print_function

from vivarium.processes.derive_globals import get_default_global_state
from vivarium.core.process import Deriver
from vivarium.library.units import units



[docs]class DeriveCounts(Deriver): """ Process for deriving counts from concentrations """ name = 'counts_deriver' defaults = { 'concentration_keys': [], 'initial_state': get_default_global_state(), } def __init__(self, parameters=None): super(DeriveCounts, self).__init__(parameters)
[docs] def ports_schema(self): return { 'global': { 'volume': { '_default': self.parameters[ 'initial_state']['global']['volume'].to('fL')}, 'mmol_to_counts': { '_default': self.parameters[ 'initial_state']['global']['mmol_to_counts'].to('L/mmol')}}, 'counts': { molecule: { '_default': 0, '_divider': 'split', '_updater': 'set'} for molecule in self.parameters['concentration_keys']}, 'concentrations': { molecule: { '_default': 0.0} for molecule in self.parameters['concentration_keys']}}
[docs] def next_update(self, timestep, states): mmol_to_counts = states['global']['mmol_to_counts'].to('L/mmol').magnitude concentrations = states['concentrations'] counts = {} for molecule, concentration in concentrations.items(): counts[molecule] = int(concentration * mmol_to_counts) return { 'counts': counts}
# register process by invoking upon import DeriveCounts()