00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ABSTRACTCELLSGENERATOR_HPP_
00029 #define ABSTRACTCELLSGENERATOR_HPP_
00030
00031 #include "TetrahedralMesh.hpp"
00032 #include "TissueCell.hpp"
00033 #include "AbstractSimpleGenerationBasedCellCycleModel.hpp"
00034 #include "RandomNumberGenerator.hpp"
00035
00036
00042 template<unsigned DIM>
00043 class AbstractCellsGenerator
00044 {
00045 public:
00046
00050 AbstractCellsGenerator()
00051 {}
00052
00056 virtual AbstractCellCycleModel* CreateCellCycleModel()=0;
00057
00063 virtual double GetTypicalTransitCellCycleTime()=0;
00064
00070 virtual double GetTypicalStemCellCycleTime()=0;
00071
00076 virtual bool CellsCanDifferentiate();
00077
00081 virtual ~AbstractCellsGenerator()
00082 {}
00083
00092 void GenerateBasic(std::vector<TissueCell>& rCells,
00093 const unsigned numCells);
00094
00113 virtual void GenerateForCrypt(std::vector<TissueCell>& rCells,
00114 TetrahedralMesh<2,2>& rMesh,
00115 const std::vector<unsigned> locationIndices,
00116 bool randomBirthTimes,
00117 double y0 = 0.3,
00118 double y1 = 2.0,
00119 double y2 = 3.0,
00120 double y3 = 4.0,
00121 bool initialiseCells = false);
00122 };
00123
00124
00125
00126 #endif