Source code for tyssue.behaviors.sheet.apoptosis_events

"""
Apoptosis event module
=======================


"""

from ...geometry.sheet_geometry import SheetGeometry
from ...utils.decorators import face_lookup
from .actions import ab_pull, decrease, exchange, remove
from .basic_events import contraction

default_apoptosis_spec = {
    "face_id": -1,
    "face": -1,
    "shrink_rate": 1.1,
    "critical_area": 1e-2,
    "radial_tension": 0.1,
    "contractile_increase": 0.1,
    "contract_span": 2,
    "geom": SheetGeometry,
}


[docs]@face_lookup def apoptosis(sheet, manager, **kwargs): """Apoptotic behavior While the cell's apical area is bigger than a threshold, the cell shrinks, and the contractility of its neighbors is increased. once the critical area is reached, the cell is eliminated from the apical surface through successive type 1 transition. Once only three sides are left, the cell is eliminated from the tissue. Parameters ---------- sheet : a :class:`Sheet` object manager : a :class:`EventManager` object face_id : int, the id of the apoptotic cell shrink_rate : float, default 0.1 the rate of reduction of the cell's prefered volume e.g. the prefered volume is devided by a factor 1+shrink_rate critical_area : area at which the face is eliminated from the sheet radial_tension : amount of radial tension added at each contraction steps contractile_increase : increase in contractility at the cell neighbors contract_span : number of neighbors affected by the contracitity increase geom : the geometry class used """ apoptosis_spec = default_apoptosis_spec apoptosis_spec.update(**kwargs) face = apoptosis_spec["face"] if sheet.face_df.loc[face, "area"] > apoptosis_spec["critical_area"]: # Shrink and pull decrease( sheet, "face", face, apoptosis_spec["shrink_rate"], "prefered_vol", True ) ab_pull(sheet, face, apoptosis_spec["radial_tension"]) # contract neighbors neighbors = sheet.get_neighborhood( face, apoptosis_spec["contract_span"] ).dropna() neighbors["id"] = sheet.face_df.loc[neighbors.face, "id"].values manager.extend( [ ( contraction, { "face_id": neighbor["id"], "contractile_increase": ( apoptosis_spec["contractile_increase"] / neighbor["order"], ), }, ) for _, neighbor in neighbors.iterrows() ] ) done = False else: if sheet.face_df.loc[face, "num_sides"] > 3: exchange(sheet, face, apoptosis_spec["geom"]) done = False else: remove(sheet, face, apoptosis_spec["geom"]) done = True if not done: manager.append(apoptosis, **apoptosis_spec)