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
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
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