Source code for bio_rtd.chromatography.bt_load

"""Load breakthrough profiles.

Load breakthrough profiles determine what parts of load bind to the
column.

See Also
--------
:class:`bio_rtd.core.ChromatographyLoadBreakthrough`

"""

__all__ = ['ConstantPatternSolution']
__version__ = '0.7.1'
__author__ = 'Jure Sencar'


import numpy as _np

from bio_rtd import core as _core
from bio_rtd.chromatography import bt_curve as _bt_curve


[docs]class ConstantPatternSolution(_core.ChromatographyLoadBreakthrough): """Breakthrough profile - Constant Pattern Solution. r = 1 / (1 + exp(`k` * (`dbc_100` - `m_load` / `cv`))) Parameters ---------- dt Time step duration. dbc_100 Dynamic binding capacity if the load would last indefinitely. k Steepness of the breakthrough profile. bt_profile_id Unique identifier of the PDF instance. Used for logs. Examples -------- >>> t = _np.linspace(0, 120, 1001) # min >>> dt = t[1] >>> btc = ConstantPatternSolution(dt, dbc_100=240, k=0.05) >>> btc.update_btc_parameters(cv=8.0) # column volume [mL] >>> btc.get_total_bc() # 8.0 [mL] * 240 [mg/mL] = 1920.0 [mg] 1920.0 >>> # Load. >>> f_in = _np.ones_like(t) # mL / min >>> c_in = _np.ones([1, t.size]) * 15 # mg / mL >>> c_captured = btc.calc_c_bound(f_in, c_in) >>> c_captured.shape == c_in.shape True >>> c_captured array([[14.99990679, 14.99990574, 14.99990467, ..., 10.22437591, 10.18768049, 10.15083683]]) >>> round((c_captured * f_in * dt).sum(), 1) # < 1920.0 1739.0 """ POSSIBLE_KEY_GROUPS = [['cv']] OPTIONAL_KEYS = [] def __init__(self, dt, dbc_100: float, k: float, bt_profile_id: str = "ConstantPatternSolution"): super().__init__(dt, bt_profile_id) self.dbc_100 = dbc_100 """Dynamic binding capacity at 100 % load breakthrough.""" self.k = k """Steepness of the breakthrough profile.""" # placeholder for column volume self._cv = -1 def _update_btc_parameters(self, kw_pars: dict) -> None: self._cv = kw_pars["cv"] def _calc_unbound_to_load_ratio( self, m_cumulative_load: _np.ndarray) -> _np.ndarray: assert self._cv > 0, f"CV must be defined by now." \ f" Make sure `update_btc_parameters`" \ f" function was called before." ratio = _bt_curve.btc_constant_pattern_solution(m_cumulative_load, self.dbc_100, self.k, self._cv, self.log) return ratio
[docs] def get_total_bc(self) -> float: assert self._cv > 0 return self.dbc_100 * self._cv