Module nlisim.modules.hepcidin
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.module import ModuleModel, ModuleState
from nlisim.random import rg
from nlisim.state import State
from nlisim.util import activation_function
def molecule_grid_factory(self: 'HepcidinState') -> np.ndarray:
    return np.zeros(shape=self.global_state.grid.shape, dtype=float)
@attrs(kw_only=True, repr=False)
class HepcidinState(ModuleState):
    grid: np.ndarray = attrib(
        default=attr.Factory(molecule_grid_factory, takes_self=True)
    )  # units: atto-mol
    k_d: float  # units: aM
class Hepcidin(ModuleModel):
    """Hepcidin"""
    name = 'hepcidin'
    StateClass = HepcidinState
    def initialize(self, state: State) -> State:
        hepcidin: HepcidinState = state.hepcidin
        # config file values
        hepcidin.k_d = self.config.getfloat('k_d')  # aM
        # 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.macrophage import MacrophageState
        hepcidin: HepcidinState = state.hepcidin
        macrophage: MacrophageState = state.macrophage
        voxel_volume: float = state.voxel_volume
        # interaction with macrophages
        activated_voxels = zip(
            *np.where(
                activation_function(
                    x=hepcidin.grid,
                    k_d=hepcidin.k_d,
                    h=self.time_step / 60,  # units: (min/step) / (min/hour)
                    volume=voxel_volume,
                    b=1,
                )
                > rg.random(size=hepcidin.grid.shape)
            )
        )
        for z, y, x in activated_voxels:
            for macrophage_cell_index in macrophage.cells.get_cells_in_voxel(Voxel(x=x, y=y, z=z)):
                macrophage_cell = macrophage.cells[macrophage_cell_index]
                macrophage_cell['fpn'] = False
                macrophage_cell['fpn_iteration'] = 0
        # Degrading Hepcidin is done by the "liver"
        # hepcidin does not diffuse
        return state
    def summary_stats(self, state: State) -> Dict[str, Any]:
        from nlisim.util import TissueType
        hepcidin: HepcidinState = state.hepcidin
        voxel_volume = state.voxel_volume
        mask = state.lung_tissue != TissueType.AIR
        return {
            'concentration (nM)': float(np.mean(hepcidin.grid[mask]) / voxel_volume / 1e9),
        }
    def visualization_data(self, state: State):
        hepcidin: HepcidinState = state.hepcidin
        return 'molecule', hepcidin.gridFunctions
- def molecule_grid_factory(self: HepcidinState) ‑> numpy.ndarray
- 
Expand source codedef molecule_grid_factory(self: 'HepcidinState') -> np.ndarray: return np.zeros(shape=self.global_state.grid.shape, dtype=float)
Classes
- class Hepcidin (config: SimulationConfig)
- 
Hepcidin Expand source codeclass Hepcidin(ModuleModel): """Hepcidin""" name = 'hepcidin' StateClass = HepcidinState def initialize(self, state: State) -> State: hepcidin: HepcidinState = state.hepcidin # config file values hepcidin.k_d = self.config.getfloat('k_d') # aM # 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.macrophage import MacrophageState hepcidin: HepcidinState = state.hepcidin macrophage: MacrophageState = state.macrophage voxel_volume: float = state.voxel_volume # interaction with macrophages activated_voxels = zip( *np.where( activation_function( x=hepcidin.grid, k_d=hepcidin.k_d, h=self.time_step / 60, # units: (min/step) / (min/hour) volume=voxel_volume, b=1, ) > rg.random(size=hepcidin.grid.shape) ) ) for z, y, x in activated_voxels: for macrophage_cell_index in macrophage.cells.get_cells_in_voxel(Voxel(x=x, y=y, z=z)): macrophage_cell = macrophage.cells[macrophage_cell_index] macrophage_cell['fpn'] = False macrophage_cell['fpn_iteration'] = 0 # Degrading Hepcidin is done by the "liver" # hepcidin does not diffuse return state def summary_stats(self, state: State) -> Dict[str, Any]: from nlisim.util import TissueType hepcidin: HepcidinState = state.hepcidin voxel_volume = state.voxel_volume mask = state.lung_tissue != TissueType.AIR return { 'concentration (nM)': float(np.mean(hepcidin.grid[mask]) / voxel_volume / 1e9), } def visualization_data(self, state: State): hepcidin: HepcidinState = state.hepcidin return 'molecule', hepcidin.gridAncestorsMethods- def advance(self, state: State, previous_time: float) ‑> State
- 
Advance the state by a single time step. Expand source codedef advance(self, state: State, previous_time: float) -> State: """Advance the state by a single time step.""" from nlisim.modules.macrophage import MacrophageState hepcidin: HepcidinState = state.hepcidin macrophage: MacrophageState = state.macrophage voxel_volume: float = state.voxel_volume # interaction with macrophages activated_voxels = zip( *np.where( activation_function( x=hepcidin.grid, k_d=hepcidin.k_d, h=self.time_step / 60, # units: (min/step) / (min/hour) volume=voxel_volume, b=1, ) > rg.random(size=hepcidin.grid.shape) ) ) for z, y, x in activated_voxels: for macrophage_cell_index in macrophage.cells.get_cells_in_voxel(Voxel(x=x, y=y, z=z)): macrophage_cell = macrophage.cells[macrophage_cell_index] macrophage_cell['fpn'] = False macrophage_cell['fpn_iteration'] = 0 # Degrading Hepcidin is done by the "liver" # hepcidin does not diffuse return state
 Inherited members
- class HepcidinState (*, 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 HepcidinState. Expand source codeclass HepcidinState(ModuleState): grid: np.ndarray = attrib( default=attr.Factory(molecule_grid_factory, takes_self=True) ) # units: atto-mol k_d: float # units: aMAncestorsClass variables- var grid : numpy.ndarray
- var k_d : float
 Inherited members