void TestSloughingCellKillerTopAndSides() throw(Exception) { // Create mesh TrianglesMeshReader<2,2> mesh_reader("mesh/test/data/square_128_elements"); MutableMesh<2,2> mesh; mesh.ConstructFromMeshReader(mesh_reader); mesh.Translate(-0.25,-0.25); // Create cells std::vector<CellPtr> cells; CellsGenerator<FixedDurationGenerationBasedCellCycleModel, 2> cells_generator; cells_generator.GenerateBasic(cells, mesh.GetNumNodes()); // Create cell population MeshBasedCellPopulation<2> cell_population(mesh, cells); // Create cell killer and kill cells SloughingCellKiller<2> sloughing_cell_killer(&cell_population, 0.5, true, 0.5); sloughing_cell_killer.CheckAndLabelCellsForApoptosisOrDeath(); TS_ASSERT_EQUALS(sloughing_cell_killer.GetIdentifier(), "SloughingCellKiller-2"); // Check that cells were labelled for death correctly for (AbstractCellPopulation<2>::Iterator cell_iter = cell_population.Begin(); cell_iter != cell_population.End(); ++cell_iter) { double x = cell_population.GetLocationOfCellCentre(*cell_iter)[0]; double y = cell_population.GetLocationOfCellCentre(*cell_iter)[1]; if ((x<0) || (x>0.5) || (y>0.5)) { TS_ASSERT_EQUALS(cell_iter->IsDead(), true); } else { TS_ASSERT_EQUALS(cell_iter->IsDead(), false); } } cell_population.RemoveDeadCells(); for (AbstractCellPopulation<2>::Iterator cell_iter = cell_population.Begin(); cell_iter != cell_population.End(); ++cell_iter) { double x = cell_population.GetLocationOfCellCentre(*cell_iter)[0]; double y = cell_population.GetLocationOfCellCentre(*cell_iter)[1]; TS_ASSERT_LESS_THAN_EQUALS(x, 0.5); TS_ASSERT_LESS_THAN_EQUALS(y, 0.5); } }
void TestRadialSloughingCellKillerMethods() throw(Exception) { // Create mesh TrianglesMeshReader<2,2> mesh_reader("mesh/test/data/square_128_elements"); MutableMesh<2,2> mesh; mesh.ConstructFromMeshReader(mesh_reader); mesh.Translate(-0.5,-0.5); // Get centre of mesh (we know it's at the origin, really) c_vector<double,2> centre(2); centre[0] = 0.0; centre[1] = 0.0; for (unsigned i=0; i<mesh.GetNumNodes(); i++) { centre += mesh.GetNode(i)->rGetLocation(); } centre = centre/mesh.GetNumNodes(); // Choose radius of cell killer double radius = 0.4; // Create cells std::vector<CellPtr> cells; CellsGenerator<FixedDurationGenerationBasedCellCycleModel, 2> cells_generator; cells_generator.GenerateBasic(cells, mesh.GetNumNodes()); // Create cell population MeshBasedCellPopulation<2> cell_population(mesh, cells); // Create cell killer and kill cells RadialSloughingCellKiller radial_cell_killer(&cell_population, centre, radius); radial_cell_killer.CheckAndLabelCellsForApoptosisOrDeath(); // Check that cells were labelled for death correctly for (AbstractCellPopulation<2>::Iterator cell_iter = cell_population.Begin(); cell_iter != cell_population.End(); ++cell_iter) { double r = norm_2(cell_population.GetLocationOfCellCentre(*cell_iter) - centre); if (r > radius) { TS_ASSERT_EQUALS(cell_iter->IsDead(), true); } else { TS_ASSERT_EQUALS(cell_iter->IsDead(), false); } } // Now get rid of dead cells cell_population.RemoveDeadCells(); // Check that we are correctly left with cells inside the circle of death for (AbstractCellPopulation<2>::Iterator cell_iter = cell_population.Begin(); cell_iter != cell_population.End(); ++cell_iter) { double r = norm_2(cell_population.GetLocationOfCellCentre(*cell_iter) - centre); TS_ASSERT_LESS_THAN_EQUALS(r, radius); } }