Module nlisim.modules.liver
Expand source code
import math
from attr import attrs
import numpy as np
from nlisim.module import ModuleModel, ModuleState
from nlisim.modules.molecules import MoleculesState
from nlisim.state import State
from nlisim.util import turnover_rate
@attrs(kw_only=True, repr=False)
class LiverState(ModuleState):
    hep_slope: float
    hep_intercept: float
    il6_threshold: float  # units: aM
    threshold_log_hep: float
    threshold_hep: float
class Liver(ModuleModel):
    """Liver"""
    name = 'liver'
    StateClass = LiverState
    def initialize(self, state: State) -> State:
        liver: LiverState = state.liver
        # config file values
        liver.hep_slope = self.config.getfloat('hep_slope')  # units: aM
        liver.hep_intercept = self.config.getfloat('hep_intercept')  # units: aM
        liver.il6_threshold = self.config.getfloat('il6_threshold')  # units: aM
        liver.threshold_log_hep = self.config.getfloat('threshold_log_hep')
        # computed values
        liver.threshold_hep = math.pow(10, liver.threshold_log_hep)
        return state
    def advance(self, state: State, previous_time: float) -> State:
        """Advance the state by a single time step."""
        from nlisim.modules.hepcidin import HepcidinState
        from nlisim.modules.il6 import IL6State
        from nlisim.modules.transferrin import TransferrinState
        from nlisim.util import TissueType
        liver: LiverState = state.liver
        transferrin: TransferrinState = state.transferrin
        il6: IL6State = state.il6
        hepcidin: HepcidinState = state.hepcidin
        molecules: MoleculesState = state.molecules
        voxel_volume: float = state.voxel_volume
        # interact with IL6
        mask = state.lung_tissue != TissueType.AIR
        global_il6_concentration = np.mean(il6.grid[mask]) / (
            2 * voxel_volume
        )  # div 2: serum, units: aM
        if global_il6_concentration > liver.il6_threshold:
            log_hepcidin = liver.hep_intercept + liver.hep_slope * (
                math.log(global_il6_concentration, 10)
            )
        else:
            log_hepcidin = float('-inf')
        # interact with transferrin
        tf = transferrin.tf_intercept + transferrin.tf_slope * max(
            transferrin.threshold_log_hep, log_hepcidin
        )  # units: aM
        rate_tf = turnover_rate(
            x=transferrin.grid['Tf'],
            x_system=tf * transferrin.default_apotf_rel_concentration * voxel_volume,
            base_turnover_rate=molecules.turnover_rate,
            rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t,
        )
        rate_tf_fe = turnover_rate(
            x=transferrin.grid['TfFe'],
            x_system=tf * transferrin.default_tffe_rel_concentration * voxel_volume,
            base_turnover_rate=molecules.turnover_rate,
            rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t,
        )
        rate_tf_fe2 = turnover_rate(
            x=transferrin.grid['TfFe2'],
            x_system=tf * transferrin.default_tffe2_rel_concentration * voxel_volume,
            base_turnover_rate=molecules.turnover_rate,
            rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t,
        )
        transferrin.grid['Tf'] *= rate_tf
        transferrin.grid['TfFe'] *= rate_tf_fe
        transferrin.grid['TfFe2'] *= rate_tf_fe2
        # interact with hepcidin
        system_concentration = (
            liver.threshold_hep
            if log_hepcidin == float('-inf') or log_hepcidin > liver.threshold_log_hep
            else math.pow(10.0, log_hepcidin)
        )
        hepcidin.grid *= turnover_rate(
            x=hepcidin.grid,
            x_system=system_concentration * voxel_volume,
            base_turnover_rate=molecules.turnover_rate,
            rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t,
        )
        return stateClasses
- class Liver (config: SimulationConfig)
- 
Liver Expand source codeclass Liver(ModuleModel): """Liver""" name = 'liver' StateClass = LiverState def initialize(self, state: State) -> State: liver: LiverState = state.liver # config file values liver.hep_slope = self.config.getfloat('hep_slope') # units: aM liver.hep_intercept = self.config.getfloat('hep_intercept') # units: aM liver.il6_threshold = self.config.getfloat('il6_threshold') # units: aM liver.threshold_log_hep = self.config.getfloat('threshold_log_hep') # computed values liver.threshold_hep = math.pow(10, liver.threshold_log_hep) return state def advance(self, state: State, previous_time: float) -> State: """Advance the state by a single time step.""" from nlisim.modules.hepcidin import HepcidinState from nlisim.modules.il6 import IL6State from nlisim.modules.transferrin import TransferrinState from nlisim.util import TissueType liver: LiverState = state.liver transferrin: TransferrinState = state.transferrin il6: IL6State = state.il6 hepcidin: HepcidinState = state.hepcidin molecules: MoleculesState = state.molecules voxel_volume: float = state.voxel_volume # interact with IL6 mask = state.lung_tissue != TissueType.AIR global_il6_concentration = np.mean(il6.grid[mask]) / ( 2 * voxel_volume ) # div 2: serum, units: aM if global_il6_concentration > liver.il6_threshold: log_hepcidin = liver.hep_intercept + liver.hep_slope * ( math.log(global_il6_concentration, 10) ) else: log_hepcidin = float('-inf') # interact with transferrin tf = transferrin.tf_intercept + transferrin.tf_slope * max( transferrin.threshold_log_hep, log_hepcidin ) # units: aM rate_tf = turnover_rate( x=transferrin.grid['Tf'], x_system=tf * transferrin.default_apotf_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) rate_tf_fe = turnover_rate( x=transferrin.grid['TfFe'], x_system=tf * transferrin.default_tffe_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) rate_tf_fe2 = turnover_rate( x=transferrin.grid['TfFe2'], x_system=tf * transferrin.default_tffe2_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) transferrin.grid['Tf'] *= rate_tf transferrin.grid['TfFe'] *= rate_tf_fe transferrin.grid['TfFe2'] *= rate_tf_fe2 # interact with hepcidin system_concentration = ( liver.threshold_hep if log_hepcidin == float('-inf') or log_hepcidin > liver.threshold_log_hep else math.pow(10.0, log_hepcidin) ) hepcidin.grid *= turnover_rate( x=hepcidin.grid, x_system=system_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) return stateAncestorsMethods- 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.hepcidin import HepcidinState from nlisim.modules.il6 import IL6State from nlisim.modules.transferrin import TransferrinState from nlisim.util import TissueType liver: LiverState = state.liver transferrin: TransferrinState = state.transferrin il6: IL6State = state.il6 hepcidin: HepcidinState = state.hepcidin molecules: MoleculesState = state.molecules voxel_volume: float = state.voxel_volume # interact with IL6 mask = state.lung_tissue != TissueType.AIR global_il6_concentration = np.mean(il6.grid[mask]) / ( 2 * voxel_volume ) # div 2: serum, units: aM if global_il6_concentration > liver.il6_threshold: log_hepcidin = liver.hep_intercept + liver.hep_slope * ( math.log(global_il6_concentration, 10) ) else: log_hepcidin = float('-inf') # interact with transferrin tf = transferrin.tf_intercept + transferrin.tf_slope * max( transferrin.threshold_log_hep, log_hepcidin ) # units: aM rate_tf = turnover_rate( x=transferrin.grid['Tf'], x_system=tf * transferrin.default_apotf_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) rate_tf_fe = turnover_rate( x=transferrin.grid['TfFe'], x_system=tf * transferrin.default_tffe_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) rate_tf_fe2 = turnover_rate( x=transferrin.grid['TfFe2'], x_system=tf * transferrin.default_tffe2_rel_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) transferrin.grid['Tf'] *= rate_tf transferrin.grid['TfFe'] *= rate_tf_fe transferrin.grid['TfFe2'] *= rate_tf_fe2 # interact with hepcidin system_concentration = ( liver.threshold_hep if log_hepcidin == float('-inf') or log_hepcidin > liver.threshold_log_hep else math.pow(10.0, log_hepcidin) ) hepcidin.grid *= turnover_rate( x=hepcidin.grid, x_system=system_concentration * voxel_volume, base_turnover_rate=molecules.turnover_rate, rel_cyt_bind_unit_t=molecules.rel_cyt_bind_unit_t, ) return state
 Inherited members
- class LiverState (*, global_state: State)
- 
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 LiverState. Expand source codeclass LiverState(ModuleState): hep_slope: float hep_intercept: float il6_threshold: float # units: aM threshold_log_hep: float threshold_hep: floatAncestorsClass variables- var hep_intercept : float
- var hep_slope : float
- var il6_threshold : float
- var threshold_hep : float
- var threshold_log_hep : float
 Inherited members