void TestTysonNovakImmortalStemCell() { double end_time = 100.0; // A good load of divisions to make sure nothing mucks up.. // one division = 1.26 hours. int time_steps = 1000; SimulationTime* p_simulation_time = SimulationTime::Instance(); p_simulation_time->SetEndTimeAndNumberOfTimeSteps(end_time, time_steps); MAKE_PTR(WildTypeCellMutationState, p_healthy_state); MAKE_PTR(StemCellProliferativeType, p_type); TysonNovakCellCycleModel* p_model = new TysonNovakCellCycleModel(); CellPtr p_stem_cell(new Cell(p_healthy_state, p_model)); p_stem_cell->SetCellProliferativeType(p_type); p_stem_cell->InitialiseCellCycleModel(); TS_ASSERT_EQUALS(p_stem_cell->ReadyToDivide(), false); unsigned divisions = 0; while (p_simulation_time->GetTime() < end_time) { p_simulation_time->IncrementTimeOneStep(); if (p_stem_cell->ReadyToDivide()) { p_stem_cell->Divide(); TS_ASSERT_EQUALS(p_stem_cell->ReadyToDivide(), false); divisions++; } } TS_ASSERT_DELTA(divisions, (unsigned)(end_time/1.26), 1); }
/* * ReadyToDivide() now calls UpdateCellProliferativeType() where appropriate. * (at the moment in Wnt-dependent cells). */ void TestUpdateCellProliferativeTypes() throw (Exception) { SimulationTime* p_simulation_time = SimulationTime::Instance(); p_simulation_time->SetEndTimeAndNumberOfTimeSteps(200, 20); boost::shared_ptr<AbstractCellProperty> p_healthy_state(CellPropertyRegistry::Instance()->Get<WildTypeCellMutationState>()); boost::shared_ptr<AbstractCellProperty> p_stem_type(CellPropertyRegistry::Instance()->Get<StemCellProliferativeType>()); boost::shared_ptr<AbstractCellProperty> p_transit_type(CellPropertyRegistry::Instance()->Get<TransitCellProliferativeType>()); FixedDurationGenerationBasedCellCycleModel* p_model = new FixedDurationGenerationBasedCellCycleModel(); CellPtr p_stem_cell(new Cell(p_healthy_state, p_model)); p_stem_cell->SetCellProliferativeType(p_stem_type); p_stem_cell->InitialiseCellCycleModel(); p_stem_cell->ReadyToDivide(); TS_ASSERT_EQUALS(p_stem_cell->GetCellProliferativeType()->IsType<StemCellProliferativeType>(), true); p_stem_cell->SetCellProliferativeType(p_transit_type); p_stem_cell->ReadyToDivide(); TS_ASSERT_EQUALS(p_stem_cell->GetCellProliferativeType()->IsType<TransitCellProliferativeType>(), true); // Test a Wnt dependent cell WntConcentration<2>::Instance()->SetConstantWntValueForTesting(0.0); WntCellCycleModel* p_cell_cycle_model1 = new WntCellCycleModel(); p_cell_cycle_model1->SetDimension(2); CellPtr p_wnt_cell(new Cell(p_healthy_state, p_cell_cycle_model1)); p_wnt_cell->SetCellProliferativeType(p_transit_type); TS_ASSERT_EQUALS(p_wnt_cell->GetCellProliferativeType()->IsType<TransitCellProliferativeType>(), true); p_wnt_cell->InitialiseCellCycleModel(); TS_ASSERT_EQUALS(p_wnt_cell->GetCellProliferativeType()->IsType<DifferentiatedCellProliferativeType>(), true); p_wnt_cell->ReadyToDivide(); TS_ASSERT_EQUALS(p_wnt_cell->GetCellProliferativeType()->IsType<DifferentiatedCellProliferativeType>(), true); WntConcentration<2>::Instance()->SetConstantWntValueForTesting(1.0); // Go forward through time for (unsigned i=0; i<20; i++) { p_simulation_time->IncrementTimeOneStep(); } p_wnt_cell->ReadyToDivide(); TS_ASSERT_EQUALS(p_wnt_cell->GetCellProliferativeType()->IsType<TransitCellProliferativeType>(), true); // Tidy up WntConcentration<2>::Destroy(); }
void Test0DBucketWithTysonNovak() { double end_time = 7.0; // not very long because cell cycle time is only 1.2 // (75 mins) because Tyson Novaks is for yeast int time_steps = 100; SimulationTime* p_simulation_time = SimulationTime::Instance(); p_simulation_time->SetEndTimeAndNumberOfTimeSteps(end_time, time_steps); MAKE_PTR(WildTypeCellMutationState, p_healthy_state); MAKE_PTR(StemCellProliferativeType, p_type); TysonNovakCellCycleModel* p_model = new TysonNovakCellCycleModel(); CellPtr p_stem_cell(new Cell(p_healthy_state, p_model)); p_stem_cell->SetCellProliferativeType(p_type); p_stem_cell->InitialiseCellCycleModel(); std::vector<CellPtr> cells; std::vector<CellPtr> newly_born; std::vector<unsigned> stem_cells(time_steps); std::vector<unsigned> transit_cells(time_steps); std::vector<unsigned> differentiated_cells(time_steps); std::vector<double> times(time_steps); cells.push_back(p_stem_cell); std::vector<CellPtr>::iterator cell_iterator; unsigned i = 0; while (p_simulation_time->GetTime()< end_time) { // Produce the offspring of the cells p_simulation_time->IncrementTimeOneStep(); times[i] = p_simulation_time->GetTime(); cell_iterator = cells.begin(); unsigned j = 0; while (cell_iterator < cells.end()) { if ((*cell_iterator)->ReadyToDivide()) { newly_born.push_back((*cell_iterator)->Divide()); } ++cell_iterator; j++; } // Copy offspring in newly_born vector to cells vector cell_iterator = newly_born.begin(); while (cell_iterator < newly_born.end()) { cells.push_back(*cell_iterator); ++cell_iterator; } newly_born.clear(); // Update cell counts cell_iterator = cells.begin(); while (cell_iterator < cells.end()) { if ((*cell_iterator)->GetCellProliferativeType()->IsType<StemCellProliferativeType>()) { stem_cells[i]++; } else if ((*cell_iterator)->GetCellProliferativeType()->IsType<TransitCellProliferativeType>()) { transit_cells[i]++; } else { differentiated_cells[i]++; } ++cell_iterator; } i++; } TS_ASSERT_EQUALS(stem_cells[time_steps-1], 1u); TS_ASSERT_EQUALS(transit_cells[time_steps-1], 31u); TS_ASSERT_EQUALS(differentiated_cells[time_steps-1], 0u); }