CellsGenerator.hpp
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
00029 #ifndef CELLSGENERATOR_HPP_
00030 #define CELLSGENERATOR_HPP_
00031
00032
00033 #include <vector>
00034 #include "TissueCell.hpp"
00035 #include "WildTypeCellMutationState.hpp"
00036 #include "CellMutationStateRegistry.hpp"
00037
00043 template<class CELL_CYCLE_MODEL, unsigned DIM>
00044 class CellsGenerator
00045 {
00046 public:
00047
00059 void GenerateBasic(std::vector<TissueCell>& rCells,
00060 unsigned numCells,
00061 const std::vector<unsigned> locationIndices=std::vector<unsigned>());
00062
00069 void GenerateGivenLocationIndices(std::vector<TissueCell>& rCells,
00070 const std::vector<unsigned> locationIndices);
00071
00072 };
00073
00074 template<class CELL_CYCLE_MODEL, unsigned DIM>
00075 void CellsGenerator<CELL_CYCLE_MODEL,DIM>::GenerateBasic(std::vector<TissueCell>& rCells,
00076 unsigned numCells,
00077 const std::vector<unsigned> locationIndices)
00078 {
00079 CellMutationStateRegistry::Instance()->Clear();
00080 rCells.clear();
00081 if (!locationIndices.empty())
00082 {
00083
00084 if (numCells != locationIndices.size())
00085 {
00086 EXCEPTION("The size of the locationIndices vector must match the required number of output cells");
00087 }
00088 }
00089 rCells.reserve(numCells);
00090
00091
00092 for (unsigned i=0; i<numCells; i++)
00093 {
00094 CELL_CYCLE_MODEL* p_cell_cycle_model = new CELL_CYCLE_MODEL;
00095 p_cell_cycle_model->SetDimension(DIM);
00096
00097 boost::shared_ptr<AbstractCellMutationState> p_state(CellMutationStateRegistry::Instance()->Get<WildTypeCellMutationState>());
00098 TissueCell cell(STEM, p_state, p_cell_cycle_model);
00099
00100 double birth_time;
00101 if (!locationIndices.empty())
00102 {
00103 birth_time = 0.0 - locationIndices[i];
00104 }
00105 else
00106 {
00107 birth_time = 0.0 - i;
00108 }
00109 cell.SetBirthTime(birth_time);
00110 rCells.push_back(cell);
00111 }
00112 }
00113
00114 template<class CELL_CYCLE_MODEL, unsigned DIM>
00115 void CellsGenerator<CELL_CYCLE_MODEL,DIM>::GenerateGivenLocationIndices(std::vector<TissueCell>& rCells,
00116 const std::vector<unsigned> locationIndices)
00117 {
00118 assert(!locationIndices.empty());
00119
00120 unsigned num_cells = locationIndices.size();
00121
00122 rCells.clear();
00123 rCells.reserve(num_cells);
00124 CellMutationStateRegistry::Instance()->Clear();
00125
00126 for (unsigned i=0; i<num_cells; i++)
00127 {
00128 CELL_CYCLE_MODEL* p_cell_cycle_model = new CELL_CYCLE_MODEL;
00129 p_cell_cycle_model->SetDimension(DIM);
00130
00131 boost::shared_ptr<AbstractCellMutationState> p_state(CellMutationStateRegistry::Instance()->Get<WildTypeCellMutationState>());
00132
00133 TissueCell cell(STEM, p_state, p_cell_cycle_model);
00134
00135 double birth_time = 0.0 - locationIndices[i];
00136 cell.SetBirthTime(birth_time);
00137 rCells.push_back(cell);
00138 }
00139 }
00140
00141 #endif