CellPopulationAreaWriter.cpp
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
00030
00031
00032
00033
00034
00035
00036 #include "CellPopulationAreaWriter.hpp"
00037 #include "AbstractCellPopulation.hpp"
00038 #include "MeshBasedCellPopulation.hpp"
00039 #include "CaBasedCellPopulation.hpp"
00040 #include "NodeBasedCellPopulation.hpp"
00041 #include "PottsBasedCellPopulation.hpp"
00042 #include "VertexBasedCellPopulation.hpp"
00043
00044 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00045 CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::CellPopulationAreaWriter()
00046 : AbstractCellPopulationWriter<ELEMENT_DIM, SPACE_DIM>("cellpopulationareas.dat")
00047 {
00048 }
00049
00050 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00051 void CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::Visit(MeshBasedCellPopulation<ELEMENT_DIM, SPACE_DIM>* pCellPopulation)
00052 {
00053 assert(SPACE_DIM==2 || SPACE_DIM==3);
00054
00055 VertexMesh<ELEMENT_DIM, SPACE_DIM>* voronoi_tessellation = pCellPopulation->GetVoronoiTessellation();
00056
00057 assert (voronoi_tessellation != NULL);
00058
00059
00060 double total_area = static_cast<MutableMesh<ELEMENT_DIM,SPACE_DIM>&>((pCellPopulation->rGetMesh())).GetVolume();
00061 double apoptotic_area = 0.0;
00062
00063
00064 for (typename VertexMesh<ELEMENT_DIM,SPACE_DIM>::VertexElementIterator elem_iter = voronoi_tessellation->GetElementIteratorBegin();
00065 elem_iter != voronoi_tessellation->GetElementIteratorEnd();
00066 ++elem_iter)
00067 {
00068
00069 unsigned elem_index = elem_iter->GetIndex();
00070
00071
00072 unsigned node_index = voronoi_tessellation->GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex(elem_index);
00073
00074
00075 if (!pCellPopulation->IsGhostNode(node_index))
00076 {
00077
00078 CellPtr p_cell = pCellPopulation->GetCellUsingLocationIndex(node_index);
00079
00080
00081 bool cell_is_apoptotic = p_cell->HasCellProperty<ApoptoticCellProperty>();
00082 if (cell_is_apoptotic)
00083 {
00084 double cell_volume = voronoi_tessellation->GetVolumeOfElement(elem_index);
00085 apoptotic_area += cell_volume;
00086 }
00087 }
00088 }
00089 *this->mpOutStream << total_area << " " << apoptotic_area;
00090 }
00091
00092 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00093 void CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::Visit(CaBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00094 {
00095 }
00096
00097 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00098 void CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::Visit(NodeBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00099 {
00100 }
00101
00102 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00103 void CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::Visit(PottsBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00104 {
00105 }
00106
00107 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00108 void CellPopulationAreaWriter<ELEMENT_DIM, SPACE_DIM>::Visit(VertexBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00109 {
00110 }
00111
00112
00113 template class CellPopulationAreaWriter<1,1>;
00114 template class CellPopulationAreaWriter<1,2>;
00115 template class CellPopulationAreaWriter<2,2>;
00116 template class CellPopulationAreaWriter<1,3>;
00117 template class CellPopulationAreaWriter<2,3>;
00118 template class CellPopulationAreaWriter<3,3>;
00119
00120 #include "SerializationExportWrapperForCpp.hpp"
00121
00122 EXPORT_TEMPLATE_CLASS_ALL_DIMS(CellPopulationAreaWriter)