Esempio n. 1
0
def test_modify():

    datasets, _ = three_faces_sheet()
    extruded = extrude(datasets, method="translation")
    mono = Monolayer("test", extruded, config.geometry.bulk_spec())
    mono.update_specs(config.dynamics.quasistatic_bulk_spec(), reset=True)
    modifiers = {
        "apical": {
            "edge": {
                "line_tension": 1.0
            },
            "face": {
                "contractility": 0.2
            }
        },
        "basal": {
            "edge": {
                "line_tension": 3.0
            },
            "face": {
                "contractility": 0.1
            }
        },
    }

    utils.modify_segments(mono, modifiers)
    assert mono.edge_df.loc[mono.apical_edges,
                            "line_tension"].unique()[0] == 1.0
    assert mono.edge_df.loc[mono.basal_edges,
                            "line_tension"].unique()[0] == 3.0
Esempio n. 2
0
def get_initial_follicle(specs, recreate=False, Nc=200):
    """Retrieves or recreates a spherical epithelium"""
    if recreate:
        ## Lloy_relax=True takes time but should give more spherical epithelium
        follicle = spherical_monolayer(9.0, 12.0, Nc, apical="in", Lloyd_relax=True)
        geom.update_all(follicle)
        geom.scale(follicle, follicle.cell_df.vol.mean() ** (-1 / 3), list("xyz"))
        geom.update_all(follicle)
    else:
        follicle = Monolayer("follicle", hdf5.load_datasets("initial_follicle.hf5"))
        follicle.settings["lumen_side"] = "apical"
        geom.update_all(follicle)

    follicle.update_specs(specs, reset=True)
    follicle.cell_df["id"] = follicle.cell_df.index

    wgeom = WAMonolayerGeometry
    model = model_factory(
        [
            effectors.LumenVolumeElasticity,
            WeightedCellAreaElasticity,
            effectors.CellVolumeElasticity,
        ]
    )

    print("Finding static equilibrium")

    follicle.face_df.loc[follicle.apical_faces, "weight"] = specs["settings"][
        "apical_weight"
    ]
    wgeom.update_all(follicle)

    solver = QSSolver()
    res = solver.find_energy_min(follicle, wgeom, model)

    return follicle, model
Esempio n. 3
0
def test_constriction():
    specs = config.geometry.bulk_spec()
    sheet = Sheet.planar_sheet_3d("flat", 6, 8, 1, 1)
    sheet.sanitize()
    datasets = extrude(sheet.datasets, method="translation")
    mono = Monolayer("mono", datasets, specs)
    geom.center(mono)
    geom.update_all(mono)
    dyn_specs = config.dynamics.quasistatic_bulk_spec()
    dyn_specs["cell"]["area_elasticity"] = 0.05
    dyn_specs["cell"]["prefered_area"] = 6.0
    dyn_specs["cell"]["vol_elasticity"] = 1.0
    dyn_specs["cell"]["prefered_vol"] = 1.2
    dyn_specs["face"]["contractility"] = 0.0
    dyn_specs["edge"]["line_tension"] = 0.0
    mono.update_specs(dyn_specs, reset=True)
    mono.face_df.loc[mono.apical_faces, "contractility"] = 1.12
    mono.face_df.loc[mono.basal_faces, "contractility"] = 1.12

    manager = EventManager("face")
    sheet.face_df["enter_in_process"] = 0

    mono.settings["constriction"] = {}
    mono.cell_df["is_mesoderm"] = False
    mono.face_df["is_mesoderm"] = False

    cell_to_constrict = [12]
    apical_face = mono.face_df[(mono.face_df.index.isin(
        mono.get_orbits("cell", "face")[cell_to_constrict[0]]))
                               & (mono.face_df.segment == "apical")].index[0]
    mono.cell_df.loc[cell_to_constrict, "is_mesoderm"] = True
    mono.cell_df["id"] = mono.cell_df.index.values
    mono.face_df["id"] = mono.face_df.index.values

    list_face_in_cell = mono.get_orbits("cell", "face")
    cell_in_mesoderm = mono.cell_df[mono.cell_df.is_mesoderm].index.values
    for i in cell_in_mesoderm:
        faces_in_cell = mono.face_df.loc[list_face_in_cell[i].unique()]
        for f in faces_in_cell.index.values:
            mono.face_df.loc[f, "is_mesoderm"] = True

    for i in cell_to_constrict:

        delam_kwargs = mono.settings["constriction"].copy()
        delam_kwargs.update({
            "cell_id": i,
            "contract_rate": 2,
            "critical_area": 0.02,
            "shrink_rate": 0.4,
            "critical_volume": 0.1,
            "radial_tension": 3,
            "max_traction": 35,
            "contract_neighbors": True,
            "contract_span": 1,
            "with_rearrangement": True,
            "critical_area_reduction": 5,
        })

        initial_cell_event = [(constriction, delam_kwargs)]
        manager.extend(initial_cell_event)
    manager.execute(mono)
    manager.update()
    assert len(manager.current) == 1

    i = 0
    while i < 10:
        manager.execute(mono)
        manager.update()
        i = i + 1

    assert mono.face_df.loc[apical_face, "contractility"] > 1.0
    for c in cell_to_constrict:
        assert mono.cell_df.loc[c, "num_faces"] <= 4