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

#include <HeartGeometryInformation.hpp>

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

List of all members.

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 &surfaceFile, std::vector< unsigned > &rSurfaceNodes, bool indexFromZero=true) const
void ProcessLine (const std::string &line, 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

Parameters:
rMesh,:reference to the mesh
rEpiFile,:file of elements on the epicardial surface
rEndoFile,:file of elements 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

Parameters:
rMesh,:reference to the mesh
rEpiFile,:file of elements on the epicardial surface
rRVFile,:file of elements on the endocardial right ventricular surface (can be empty string)
rLVFile,:file of elements 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 109 of file HeartGeometryInformation.cpp.

References EXCEPTION.


Member Function Documentation

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfEndo ( ) [inline]

Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial surface

Definition at line 329 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfEpi ( ) [inline]

Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input epicardial surface

Definition at line 319 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfLV ( ) [inline]

Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial left ventricular surface

Definition at line 339 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid<SPACE_DIM> HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfRV ( ) [inline]

Uses CalculateBoundingBoxOfSurface to calculate an axis-aligned bounding box of the nodes in the input endocardial left ventricular surface

Definition at line 349 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
ChasteCuboid< SPACE_DIM > HeartGeometryInformation< SPACE_DIM >::CalculateBoundingBoxOfSurface ( const std::vector< unsigned > &  rSurfaceNodes) [private]

Get 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 409 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)

Calculates 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 330 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 345 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 269 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 324 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.

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

Takes in a file of all the surface elements 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:
surfaceFileThe surface file
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 &  line,
std::set< unsigned > &  rSurfaceNodeIndexSet,
unsigned  offset 
) const [private]

Helper function for GetNodesAtSurface

Parameters:
lineA 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 157 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 227 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 218 of file HeartGeometryInformation.hpp.

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

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

Definition at line 247 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 237 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<HeartLayerType>& HeartGeometryInformation< SPACE_DIM >::rGetLayerForEachNode ( ) [inline]

Get the layer for every node in the mesh.

Definition at line 284 of file HeartGeometryInformation.hpp.

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

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnEndoSurface ( ) [inline]

Get the nodes on the endocardial surface

Definition at line 261 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnEpiSurface ( ) [inline]

Get the nodes on the epicardial surface

Definition at line 254 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnLVSurface ( ) [inline]

Get the nodes on the endocardial left ventricular surface

Definition at line 268 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const std::vector<unsigned>& HeartGeometryInformation< SPACE_DIM >::rGetNodesOnRVSurface ( ) [inline]

Get the nodes on the endocardial right ventricular surface

Definition at line 275 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 154 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const double HeartGeometryInformation< SPACE_DIM >::LEFT_SEPTUM_SIZE = 2.0/3.0 [static, private]

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 158 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 150 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 132 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 129 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 138 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 120 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 156 of file HeartGeometryInformation.hpp.

template<unsigned SPACE_DIM>
const double HeartGeometryInformation< SPACE_DIM >::RIGHT_SEPTUM_SIZE = 1.0/3.0 [static, private]

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 160 of file HeartGeometryInformation.hpp.

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

Right ventricular wall

Definition at line 152 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 162 of file HeartGeometryInformation.hpp.


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