Module nlisim.modules.hemoglobin
Expand source code
from typing import Any, Dict
import attr
from attr import attrib, attrs
import numpy as np
from nlisim.coordinates import Voxel
from nlisim.diffusion import apply_diffusion
from nlisim.grid import RectangularGrid
from nlisim.module import ModuleModel, ModuleState
from nlisim.modules.molecules import MoleculesState
from nlisim.state import State
from nlisim.util import turnover_rate
def molecule_grid_factory(self: 'HemoglobinState') -> np.ndarray:
return np.zeros(shape=self.global_state.grid.shape, dtype=float)
@attrs(kw_only=True, repr=False)
class HemoglobinState(ModuleState):
grid: np.ndarray = attrib(default=attr.Factory(molecule_grid_factory, takes_self=True))
uptake_rate: float
ma_heme_import_rate: float
class Hemoglobin(ModuleModel):
"""Hemoglobin"""
name = 'hemoglobin'
StateClass = HemoglobinState
def initialize(self, state: State) -> State:
hemoglobin: HemoglobinState = state.hemoglobin
# config file values
hemoglobin.uptake_rate = self.config.getfloat('uptake_rate')
hemoglobin.ma_heme_import_rate = self.config.getfloat('ma_heme_import_rate')
# computed values (none)
return state
def advance(self, state: State, previous_time: float) -> State:
"""Advance the state by a single time step."""
from nlisim.modules.afumigatus import (
AfumigatusCellData,
AfumigatusCellStatus,
AfumigatusState,
)
hemoglobin: HemoglobinState = state.hemoglobin
molecules: MoleculesState = state.molecules
afumigatus: AfumigatusState = state.afumigatus
grid: RectangularGrid = state.grid
# afumigatus uptakes iron from hemoglobin
for afumigatus_cell_index in afumigatus.cells.alive():
afumigatus_cell: AfumigatusCellData = afumigatus.cells[afumigatus_cell_index]
if afumigatus_cell['status'] in {
AfumigatusCellStatus.HYPHAE,
AfumigatusCellStatus.GERM_TUBE,
}:
afumigatus_cell_voxel: Voxel = grid.get_voxel(afumigatus_cell['point'])
fungal_absorbed_hemoglobin = (
hemoglobin.uptake_rate * hemoglobin.grid[tuple(afumigatus_cell_voxel)]
)
hemoglobin.grid[tuple(afumigatus_cell_voxel)] -= fungal_absorbed_hemoglobin
afumigatus_cell['iron_pool'] += 4 * fungal_absorbed_hemoglobin
# Degrade Hemoglobin
hemoglobin.grid *= turnover_rate(
x=hemoglobin.grid,
x_system=0.0,
base_turnover_rate=molecules.turnover_rate,
rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t,
)
# Diffusion of Hemoglobin
hemoglobin.grid[:] = apply_diffusion(
variable=hemoglobin.grid,
laplacian=molecules.laplacian,
diffusivity=molecules.diffusion_constant,
dt=self.time_step,
)
return state
def summary_stats(self, state: State) -> Dict[str, Any]:
hemoglobin: HemoglobinState = state.hemoglobin
voxel_volume = state.voxel_volume
return {
'concentration (nM)': float(np.mean(hemoglobin.grid) / voxel_volume / 1e9),
}
def visualization_data(self, state: State):
hemoglobin: HemoglobinState = state.hemoglobin
return 'molecule', hemoglobin.grid
Functions
def molecule_grid_factory(self: HemoglobinState) ‑> numpy.ndarray
-
Expand source code
def molecule_grid_factory(self: 'HemoglobinState') -> np.ndarray: return np.zeros(shape=self.global_state.grid.shape, dtype=float)
Classes
class Hemoglobin (config: SimulationConfig)
-
Hemoglobin
Expand source code
class Hemoglobin(ModuleModel): """Hemoglobin""" name = 'hemoglobin' StateClass = HemoglobinState def initialize(self, state: State) -> State: hemoglobin: HemoglobinState = state.hemoglobin # config file values hemoglobin.uptake_rate = self.config.getfloat('uptake_rate') hemoglobin.ma_heme_import_rate = self.config.getfloat('ma_heme_import_rate') # computed values (none) return state def advance(self, state: State, previous_time: float) -> State: """Advance the state by a single time step.""" from nlisim.modules.afumigatus import ( AfumigatusCellData, AfumigatusCellStatus, AfumigatusState, ) hemoglobin: HemoglobinState = state.hemoglobin molecules: MoleculesState = state.molecules afumigatus: AfumigatusState = state.afumigatus grid: RectangularGrid = state.grid # afumigatus uptakes iron from hemoglobin for afumigatus_cell_index in afumigatus.cells.alive(): afumigatus_cell: AfumigatusCellData = afumigatus.cells[afumigatus_cell_index] if afumigatus_cell['status'] in { AfumigatusCellStatus.HYPHAE, AfumigatusCellStatus.GERM_TUBE, }: afumigatus_cell_voxel: Voxel = grid.get_voxel(afumigatus_cell['point']) fungal_absorbed_hemoglobin = ( hemoglobin.uptake_rate * hemoglobin.grid[tuple(afumigatus_cell_voxel)] ) hemoglobin.grid[tuple(afumigatus_cell_voxel)] -= fungal_absorbed_hemoglobin afumigatus_cell['iron_pool'] += 4 * fungal_absorbed_hemoglobin # Degrade Hemoglobin hemoglobin.grid *= turnover_rate( x=hemoglobin.grid, x_system=0.0, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) # Diffusion of Hemoglobin hemoglobin.grid[:] = apply_diffusion( variable=hemoglobin.grid, laplacian=molecules.laplacian, diffusivity=molecules.diffusion_constant, dt=self.time_step, ) return state def summary_stats(self, state: State) -> Dict[str, Any]: hemoglobin: HemoglobinState = state.hemoglobin voxel_volume = state.voxel_volume return { 'concentration (nM)': float(np.mean(hemoglobin.grid) / voxel_volume / 1e9), } def visualization_data(self, state: State): hemoglobin: HemoglobinState = state.hemoglobin return 'molecule', hemoglobin.grid
Ancestors
Methods
def advance(self, state: State, previous_time: float) ‑> State
-
Advance the state by a single time step.
Expand source code
def advance(self, state: State, previous_time: float) -> State: """Advance the state by a single time step.""" from nlisim.modules.afumigatus import ( AfumigatusCellData, AfumigatusCellStatus, AfumigatusState, ) hemoglobin: HemoglobinState = state.hemoglobin molecules: MoleculesState = state.molecules afumigatus: AfumigatusState = state.afumigatus grid: RectangularGrid = state.grid # afumigatus uptakes iron from hemoglobin for afumigatus_cell_index in afumigatus.cells.alive(): afumigatus_cell: AfumigatusCellData = afumigatus.cells[afumigatus_cell_index] if afumigatus_cell['status'] in { AfumigatusCellStatus.HYPHAE, AfumigatusCellStatus.GERM_TUBE, }: afumigatus_cell_voxel: Voxel = grid.get_voxel(afumigatus_cell['point']) fungal_absorbed_hemoglobin = ( hemoglobin.uptake_rate * hemoglobin.grid[tuple(afumigatus_cell_voxel)] ) hemoglobin.grid[tuple(afumigatus_cell_voxel)] -= fungal_absorbed_hemoglobin afumigatus_cell['iron_pool'] += 4 * fungal_absorbed_hemoglobin # Degrade Hemoglobin hemoglobin.grid *= turnover_rate( x=hemoglobin.grid, x_system=0.0, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) # Diffusion of Hemoglobin hemoglobin.grid[:] = apply_diffusion( variable=hemoglobin.grid, laplacian=molecules.laplacian, diffusivity=molecules.diffusion_constant, dt=self.time_step, ) return state
Inherited members
class HemoglobinState (*, global_state: State, grid: numpy.ndarray = NOTHING)
-
Base type intended to store the state for simulation modules.
This class contains serialization support for basic types (float, int, str, bool) and numpy arrays of those types. Modules containing more complicated state must override the serialization mechanism with custom behavior.
Method generated by attrs for class HemoglobinState.
Expand source code
class HemoglobinState(ModuleState): grid: np.ndarray = attrib(default=attr.Factory(molecule_grid_factory, takes_self=True)) uptake_rate: float ma_heme_import_rate: float
Ancestors
Class variables
var grid : numpy.ndarray
var ma_heme_import_rate : float
var uptake_rate : float
Inherited members