Chaste  Release::2018.1
HeartGeometryInformation< SPACE_DIM > Class Template Reference

#include <HeartGeometryInformation.hpp>

+ Inheritance diagram for HeartGeometryInformation< SPACE_DIM >:
+ Collaboration diagram for HeartGeometryInformation< SPACE_DIM >:

Public Member Functions

 HeartGeometryInformation (AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM > &rMesh, const std::string &rEpiFile, const std::string &rEndoFile, bool indexFromZero)
 
 HeartGeometryInformation (AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM > &rMesh, const std::string &rEpiFile, const std::string &rLVFile, const std::string &rRVFile, bool indexFromZero)
 
 HeartGeometryInformation (std::string nodeHeterogeneityFileName)
 
HeartRegionType GetHeartRegion (unsigned nodeIndex) const
 
std::vector< double > & rGetDistanceMapEpicardium ()
 
std::vector< double > & rGetDistanceMapEndocardium ()
 
std::vector< double > & rGetDistanceMapRightVentricle ()
 
std::vector< double > & rGetDistanceMapLeftVentricle ()
 
const std::vector< unsigned > & rGetNodesOnEpiSurface ()
 
const std::vector< unsigned > & rGetNodesOnEndoSurface ()
 
const std::vector< unsigned > & rGetNodesOnLVSurface ()
 
const std::vector< unsigned > & rGetNodesOnRVSurface ()
 
const std::vector
< HeartLayerType > & 
rGetLayerForEachNode ()
 
double CalculateRelativeWallPosition (unsigned nodeIndex)
 
void DetermineLayerForEachNode (double epiFraction, double endoFraction)
 
void WriteLayerForEachNode (std::string outputDir, std::string file)
 
ChasteCuboid< SPACE_DIM > CalculateBoundingBoxOfEpi ()
 
ChasteCuboid< SPACE_DIM > CalculateBoundingBoxOfEndo ()
 
ChasteCuboid< SPACE_DIM > CalculateBoundingBoxOfLV ()
 
ChasteCuboid< SPACE_DIM > CalculateBoundingBoxOfRV ()
 

Static Public Attributes

static const HeartRegionType LEFT_VENTRICLE_WALL =1001
 
static const HeartRegionType RIGHT_VENTRICLE_WALL =1002
 
static const HeartRegionType LEFT_SEPTUM =1003
 
static const HeartRegionType RIGHT_SEPTUM =1004
 
static const HeartRegionType LEFT_VENTRICLE_SURFACE =1005
 
static const HeartRegionType RIGHT_VENTRICLE_SURFACE =1006
 
static const HeartRegionType UNKNOWN =1007
 

Private Member Functions

void GetNodesAtSurface (const std::string &rSurfaceFileName, std::vector< unsigned > &rSurfaceNodes, bool indexFromZero=true) const
 
void ProcessLine (const std::string &rLineFromFile, std::set< unsigned > &rSurfaceNodeIndexSet, unsigned offset) const
 
double GetDistanceToEndo (unsigned nodeIndex)
 
double GetDistanceToEpi (unsigned nodeIndex)
 
ChasteCuboid< SPACE_DIM > CalculateBoundingBoxOfSurface (const std::vector< unsigned > &rSurfaceNodes)
 

Private Attributes

std::vector< unsignedmEpiSurface
 
std::vector< unsignedmEndoSurface
 
std::vector< unsignedmLVSurface
 
std::vector< unsignedmRVSurface
 
AbstractTetrahedralMesh
< SPACE_DIM, SPACE_DIM > * 
mpMesh
 
std::vector< doublemDistMapEpicardium
 
std::vector< doublemDistMapEndocardium
 
std::vector< doublemDistMapRightVentricle
 
std::vector< doublemDistMapLeftVentricle
 
unsigned mNumberOfSurfacesProvided
 
std::vector< HeartLayerType > mLayerForEachNode
 

Static Private Attributes

static const double LEFT_SEPTUM_SIZE = 2.0/3.0
 
static const double RIGHT_SEPTUM_SIZE = 1.0/3.0
 

Detailed Description

template<unsigned SPACE_DIM>
class HeartGeometryInformation< SPACE_DIM >

This class provides a method to calculate the relative position of a node with respect to two (or three) given surfaces.

Definition at line 62 of file HeartGeometryInformation.hpp.

Constructor & Destructor Documentation

template<unsigned SPACE_DIM>
HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation ( AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM > &  rMesh,
const std::string &  rEpiFile,
const std::string &  rEndoFile,
bool  indexFromZero 
)

Constructor for a two surface mesh. File formats: list of nodes, either one per line or multiple (e.g. nodes in each boundary element on surface).

Parameters
rMeshreference to the mesh
rEpiFilea file containing a list of global node indices on the epicardial surface
rEndoFilea file containing a list of global node indices on the endocardial surface
indexFromZerotrue for native triangles files. false for Memfem files which are indexed from 1.

Definition at line 53 of file HeartGeometryInformation.cpp.

References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), HeartGeometryInformation< SPACE_DIM >::GetNodesAtSurface(), HeartGeometryInformation< SPACE_DIM >::mDistMapEndocardium, HeartGeometryInformation< SPACE_DIM >::mDistMapEpicardium, HeartGeometryInformation< SPACE_DIM >::mEndoSurface, HeartGeometryInformation< SPACE_DIM >::mEpiSurface, HeartGeometryInformation< SPACE_DIM >::mNumberOfSurfacesProvided, and HeartGeometryInformation< SPACE_DIM >::mpMesh.

template<unsigned SPACE_DIM>
HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation ( AbstractTetrahedralMesh< SPACE_DIM, SPACE_DIM > &  rMesh,
const std::string &  rEpiFile,
const std::string &  rLVFile,
const std::string &  rRVFile,
bool  indexFromZero 
)

Constructor for a three surface mesh. File formats: list of nodes, either one per line or multiple (e.g. nodes in each boundary element on surface).

Parameters
rMeshreference to the mesh
rEpiFilea file containing a list of global node indices on the epicardial surface
rRVFilea file containing a list of global node indices on the endocardial right ventricular surface (can be empty string)
rLVFilea file containing a list of global node indices on the endocardial left ventricular surface (can be empty string)
indexFromZerotrue for native triangles files. false for Memfem files which are indexed from 1.

If either rRVFile or rLVfile are the empty string, then it is assumed that this is a wedge preparation for left or right ventricle, respectively. That is, the ventricle with a non-empty string. If both are empty strings then throws exception.

Definition at line 72 of file HeartGeometryInformation.cpp.

References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), EXCEPTION, HeartGeometryInformation< SPACE_DIM >::GetNodesAtSurface(), HeartGeometryInformation< SPACE_DIM >::mDistMapEpicardium, HeartGeometryInformation< SPACE_DIM >::mDistMapLeftVentricle, HeartGeometryInformation< SPACE_DIM >::mDistMapRightVentricle, HeartGeometryInformation< SPACE_DIM >::mEpiSurface, HeartGeometryInformation< SPACE_DIM >::mLVSurface, HeartGeometryInformation< SPACE_DIM >::mNumberOfSurfacesProvided, HeartGeometryInformation< SPACE_DIM >::mpMesh, and HeartGeometryInformation< SPACE_DIM >::mRVSurface.

template<unsigned SPACE_DIM>
HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation ( std::string  nodeHeterogeneityFileName)

Alternative constructor that takes in the file containing a list of numbers (as many as the number of nodes). Each number specifies the layer for the corresponding node.

This constructor should be called if the heterogeneities have /already/ been computed by an instance of this class and written to file by the WriteLayerForEachNode() method.

Parameters
nodeHeterogeneityFileNamethe file name.

Definition at line 108 of file HeartGeometryInformation.cpp.

References EXCEPTION.

Member Function Documentation

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfEndo ( )
inline
Returns
bounding box Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial surface

Definition at line 341 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfEpi ( )
inline
Returns
bounding box Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input epicardial surface

Definition at line 330 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfLV ( )
inline
Returns
bounding box Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial left ventricular surface

Definition at line 352 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfRV ( )
inline
Returns
bounding box Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial left ventricular surface

Definition at line 363 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid< SPACE_DIM > HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfSurface ( const std::vector< unsigned > &  rSurfaceNodes)
private
Returns
a bounding box for a group of node indices (such as the epi-surface)
Parameters
rSurfaceNodesThe indices of the nodes which represent this surface

Definition at line 408 of file HeartGeometryInformation.cpp.

Referenced by HeartGeometryInformation< ELEMENT_DIM >::CalculateBoundingBoxOfEndo(), HeartGeometryInformation< ELEMENT_DIM >::CalculateBoundingBoxOfEpi(), HeartGeometryInformation< ELEMENT_DIM >::CalculateBoundingBoxOfLV(), and HeartGeometryInformation< ELEMENT_DIM >::CalculateBoundingBoxOfRV().

template<unsigned SPACE_DIM>
double HeartGeometryInformation< SPACE_DIM >::CalculateRelativeWallPosition ( unsigned  nodeIndex)
Returns
the relative position within the wall thickness (normalised to [0,1])
Parameters
nodeIndexindex is the index of the node in the mesh
Returns
the relative position

Definition at line 331 of file HeartGeometryInformation.cpp.

template<unsigned SPACE_DIM>
void HeartGeometryInformation< SPACE_DIM >::DetermineLayerForEachNode ( double  epiFraction,
double  endoFraction 
)

Compute which layer (endocardial, midmyocardial or epicardial) each node is in

Parameters
epiFractionis the fraction of wall designed to be epicardial layer
endoFractionis the fraction of wall designed to be endocardial layer

Definition at line 346 of file HeartGeometryInformation.cpp.

References EXCEPTION.

Referenced by HeartConfigRelatedCellFactory< SPACE_DIM >::FillInCellularTransmuralAreas().

template<unsigned SPACE_DIM>
double HeartGeometryInformation< SPACE_DIM >::GetDistanceToEndo ( unsigned  nodeIndex)
private

Helper method to calculate the distance between the node and the Endocardial surface as defined to be the closest surface to the node out of left ventricle and right ventricle.

Parameters
nodeIndexis the index of the node in the mesh
Returns
the distance

Definition at line 270 of file HeartGeometryInformation.cpp.

References NEVER_REACHED.

template<unsigned SPACE_DIM>
double HeartGeometryInformation< SPACE_DIM >::GetDistanceToEpi ( unsigned  nodeIndex)
private

Helper method to calculate the distance between the node and the Epicardial surface

Parameters
nodeIndexis the index of the node in the mesh
Returns
the distance

Definition at line 325 of file HeartGeometryInformation.cpp.

template<unsigned SPACE_DIM>
HeartRegionType HeartGeometryInformation< SPACE_DIM >::GetHeartRegion ( unsigned  nodeIndex) const
Parameters
nodeIndexindex is the index of the node in the mesh
Returns
the region type based on the relative distances to epi and endocardial surfaces

Definition at line 236 of file HeartGeometryInformation.cpp.

References NEVER_REACHED.

template<unsigned SPACE_DIM>
void HeartGeometryInformation< SPACE_DIM >::GetNodesAtSurface ( const std::string &  rSurfaceFileName,
std::vector< unsigned > &  rSurfaceNodes,
bool  indexFromZero = true 
) const
private

Takes in a file of all the nodes on ONE PARTICULAR surface of the mesh (eg the right ventricular endo-cardial surface) and collects all the nodes on that surface in one vector.

Parameters
rSurfaceFileNameThe surface file, lists global node indices on this surface. The number of lines in this file and entries per line doesn't matter. Just have to be separated by whitespace and returns. But these files would tend to be: EITHER: multiple entries on one line – all nodes in each boundary element, OR: simply a list of the nodes on the surface.
rSurfaceNodesThe returned vector of nodes indices on this surface
indexFromZeroTrue for native triangles files. False for Memfem files which are indexed from 1.

Definition at line 176 of file HeartGeometryInformation.cpp.

References EXCEPTION.

Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation().

template<unsigned SPACE_DIM>
void HeartGeometryInformation< SPACE_DIM >::ProcessLine ( const std::string &  rLineFromFile,
std::set< unsigned > &  rSurfaceNodeIndexSet,
unsigned  offset 
) const
private

Helper function for GetNodesAtSurface

Parameters
rLineFromFileA line in a surface file.
rSurfaceNodeIndexSetThe nodes in the element corresponding to this line.
offsetis the lowest index of a node in the original mesh (0 for native triangles or 1 for MEMFEM).

Definition at line 156 of file HeartGeometryInformation.cpp.

References EXCEPTION.

template<unsigned SPACE_DIM>
std::vector<double>& HeartGeometryInformation< SPACE_DIM >::rGetDistanceMapEndocardium ( )
inline
Returns
the distance map to the endocardium

Definition at line 237 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
std::vector<double>& HeartGeometryInformation< SPACE_DIM >::rGetDistanceMapEpicardium ( )
inline
Returns
the distance map to the epicardium

Definition at line 228 of file HeartGeometryInformation.hpp.

Referenced by StreeterFibreGenerator< SPACE_DIM >::PreWriteCalculations().

template<unsigned SPACE_DIM>
std::vector<double>& HeartGeometryInformation< SPACE_DIM >::rGetDistanceMapLeftVentricle ( )
inline
Returns
the distance map to the left ventricle

Definition at line 257 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
std::vector<double>& HeartGeometryInformation< SPACE_DIM >::rGetDistanceMapRightVentricle ( )
inline
Returns
the distance map to the right ventricle

Definition at line 247 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<HeartLayerType>& HeartGeometryInformation< SPACE_DIM >::rGetLayerForEachNode ( )
inline
Returns
the layer for every node in the mesh.

Definition at line 294 of file HeartGeometryInformation.hpp.

Referenced by HeartConfigRelatedCellFactory< SPACE_DIM >::FillInCellularTransmuralAreas().

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnEndoSurface ( )
inline
Returns
the nodes on the endocardial surface

Definition at line 271 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnEpiSurface ( )
inline
Returns
the nodes on the epicardial surface

Definition at line 264 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnLVSurface ( )
inline
Returns
the nodes on the endocardial left ventricular surface

Definition at line 278 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnRVSurface ( )
inline
Returns
the nodes on the endocardial right ventricular surface

Definition at line 285 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
void HeartGeometryInformation< SPACE_DIM >::WriteLayerForEachNode ( std::string  outputDir,
std::string  file 
)

Write the layer for each node. DetermineLayerForEachNode() must have been called first.

Parameters
outputDirOutput directory - note not cleaned
fileOutput file

Definition at line 378 of file HeartGeometryInformation.cpp.

References PetscTools::AmMaster(), PetscTools::Barrier(), and OutputFileHandler::OpenOutputFile().

Member Data Documentation

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::LEFT_SEPTUM =1003
static

Left portion of the septum

Definition at line 162 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const double HeartGeometryInformation< SPACE_DIM >::LEFT_SEPTUM_SIZE = 2.0/3.0
staticprivate

Area of the septum considered to belong to the left septum (relative to 1)

Definition at line 67 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::LEFT_VENTRICLE_SURFACE =1005
static

Endocardial surface of the left ventricle

Definition at line 166 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::LEFT_VENTRICLE_WALL =1001
static
Todo:
#1703 Perhaps add these constants to HeartConfig...

Left ventricular wall

Definition at line 158 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
std::vector<double> HeartGeometryInformation< SPACE_DIM >::mDistMapEndocardium
private
template<unsigned SPACE_DIM>
std::vector<double> HeartGeometryInformation< SPACE_DIM >::mDistMapEpicardium
private
template<unsigned SPACE_DIM>
std::vector<double> HeartGeometryInformation< SPACE_DIM >::mDistMapLeftVentricle
private

Vector to store the distance map to the left ventricle surface

Definition at line 140 of file HeartGeometryInformation.hpp.

Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation(), and HeartGeometryInformation< ELEMENT_DIM >::rGetDistanceMapLeftVentricle().

template<unsigned SPACE_DIM>
std::vector<double> HeartGeometryInformation< SPACE_DIM >::mDistMapRightVentricle
private

Vector to store the distance map to the right ventricle surface

Definition at line 137 of file HeartGeometryInformation.hpp.

Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation(), and HeartGeometryInformation< ELEMENT_DIM >::rGetDistanceMapRightVentricle().

template<unsigned SPACE_DIM>
std::vector<unsigned> HeartGeometryInformation< SPACE_DIM >::mEndoSurface
private
template<unsigned SPACE_DIM>
std::vector<HeartLayerType> HeartGeometryInformation< SPACE_DIM >::mLayerForEachNode
private

Vector to store the layer for each node

Definition at line 146 of file HeartGeometryInformation.hpp.

Referenced by HeartGeometryInformation< ELEMENT_DIM >::rGetLayerForEachNode().

template<unsigned SPACE_DIM>
std::vector<unsigned> HeartGeometryInformation< SPACE_DIM >::mLVSurface
private
template<unsigned SPACE_DIM>
AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>* HeartGeometryInformation< SPACE_DIM >::mpMesh
private

The mesh of the problem

Definition at line 128 of file HeartGeometryInformation.hpp.

Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation().

template<unsigned SPACE_DIM>
std::vector<unsigned> HeartGeometryInformation< SPACE_DIM >::mRVSurface
private
template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::RIGHT_SEPTUM =1004
static

Right portion of the septum

Definition at line 164 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const double HeartGeometryInformation< SPACE_DIM >::RIGHT_SEPTUM_SIZE = 1.0/3.0
staticprivate

Area of the septum considered to belong to the right septum (relative to 1)

Definition at line 69 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::RIGHT_VENTRICLE_SURFACE =1006
static

Endocardial surface of the right ventricle

Definition at line 168 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::RIGHT_VENTRICLE_WALL =1002
static

Right ventricular wall

Definition at line 160 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const HeartRegionType HeartGeometryInformation< SPACE_DIM >::UNKNOWN =1007
static

Unknown node type (should never occur...)

Definition at line 170 of file HeartGeometryInformation.hpp.


The documentation for this class was generated from the following files: