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 ABSTRACTCENTREBASEDCELLPOPULATION_HPP_
00029 #define ABSTRACTCENTREBASEDCELLPOPULATION_HPP_
00030
00031 #include "AbstractCellPopulation.hpp"
00032
00033
00034 #include "WildTypeCellMutationState.hpp"
00035
00040 template<unsigned DIM>
00041 class AbstractCentreBasedCellPopulation : public AbstractCellPopulation<DIM>
00042 {
00043 private:
00045 friend class boost::serialization::access;
00052 template<class Archive>
00053 void serialize(Archive & archive, const unsigned int version)
00054 {
00055
00056
00057 archive & boost::serialization::base_object<AbstractCellPopulation<DIM> >(*this);
00058 archive & mMeinekeDivisionSeparation;
00059 }
00060
00061 protected:
00062
00067 double mMeinekeDivisionSeparation;
00068
00072 AbstractCentreBasedCellPopulation();
00073
00080 virtual void WriteVtkResultsToFile()=0;
00081
00082 public:
00083
00090 AbstractCentreBasedCellPopulation(std::vector<CellPtr>& rCells,
00091 const std::vector<unsigned> locationIndices=std::vector<unsigned>());
00092
00101 c_vector<double, DIM> GetLocationOfCellCentre(CellPtr pCell);
00102
00110 Node<DIM>* GetNodeCorrespondingToCell(CellPtr pCell);
00111
00121 CellPtr AddCell(CellPtr pNewCell, const c_vector<double,DIM>& rCellDivisionVector, CellPtr pParentCell=CellPtr());
00122
00130 bool IsCellAssociatedWithADeletedLocation(CellPtr pCell);
00131
00138 virtual void UpdateNodeLocations(const std::vector< c_vector<double, DIM> >& rNodeForces, double dt);
00139
00156 virtual double GetDampingConstant(unsigned nodeIndex);
00157
00166 void GenerateCellResults(unsigned locationIndex,
00167 std::vector<unsigned>& rCellProliferativeTypeCounter,
00168 std::vector<unsigned>& rCellCyclePhaseCounter);
00169
00173 virtual void GenerateCellResultsAndWriteToFiles();
00174
00178 virtual void WriteTimeAndNodeResultsToFiles();
00179
00188 virtual bool IsGhostNode(unsigned index);
00189
00193 double GetMeinekeDivisionSeparation();
00194
00200 void SetMeinekeDivisionSeparation(double divisionSeparation);
00201
00207 virtual void OutputCellPopulationParameters(out_stream& rParamsFile);
00208 };
00209
00210 #endif