#include <TissueSimulation.hpp>
Public Member Functions | |
TissueSimulation (AbstractTissue< DIM > &rTissue, std::vector< AbstractForce< DIM > * > forceCollection, bool deleteTissueAndForceCollection=false, bool initialiseCells=true) | |
virtual | ~TissueSimulation () |
std::vector< double > | GetNodeLocation (const unsigned &rNodeIndex) |
double | GetDt () |
unsigned | GetNumBirths () |
unsigned | GetNumDeaths () |
std::string | GetOutputDirectory () |
void | SetDt (double dt) |
void | SetEndTime (double endTime) |
void | SetOutputDirectory (std::string outputDirectory) |
void | SetSamplingTimestepMultiple (unsigned samplingTimestepMultiple) |
void | SetNoBirth (bool noBirth) |
void | SetUpdateTissueRule (bool updateTissue) |
void | AddCellKiller (AbstractCellKiller< DIM > *pCellKiller) |
void | Solve () |
AbstractTissue< DIM > & | rGetTissue () |
const AbstractTissue< DIM > & | rGetTissue () const |
const std::vector < AbstractForce< DIM > * > | rGetForceCollection () const |
Protected Member Functions | |
template<class Archive> | |
void | serialize (Archive &archive, const unsigned int version) |
virtual void | WriteVisualizerSetupFile () |
unsigned | DoCellBirth () |
virtual c_vector< double, DIM > | CalculateDividingCellCentreLocations (TissueCell *pParentCell) |
unsigned | DoCellRemoval () |
virtual void | UpdateNodePositions (const std::vector< c_vector< double, DIM > > &rNodeForces) |
virtual void | ApplyTissueBoundaryConditions (const std::vector< c_vector< double, DIM > > &rOldLocations) |
virtual void | PostSolve () |
virtual void | SetupSolve () |
virtual void | AfterSolve () |
virtual bool | StoppingEventHasOccurred () |
void | UpdateTissue () |
Protected Attributes | |
double | mDt |
double | mEndTime |
AbstractTissue< DIM > & | mrTissue |
bool | mDeleteTissue |
bool | mAllocatedMemoryForForceCollection |
bool | mInitialiseCells |
bool | mNoBirth |
bool | mUpdateTissue |
std::string | mOutputDirectory |
std::string | mSimulationOutputDirectory |
out_stream | mpSetupFile |
TissueConfig * | mpConfig |
RandomNumberGenerator * | mpRandomGenerator |
unsigned | mNumBirths |
unsigned | mNumDeaths |
unsigned | mSamplingTimestepMultiple |
std::vector < AbstractCellKiller< DIM > * > | mCellKillers |
std::vector< AbstractForce < DIM > * > | mForceCollection |
Friends | |
class | TestCryptSimulation2d |
class | TestTissueSimulation3d |
class | boost::serialization::access |
In cell-centre-based tissues, each cell is represented by a single node (corresponding to its centre), and connectivity is defined either by a Delaunay triangulation or a radius of influence. In vertex-based tissues, each cell is represented by a polytope (corresponding to its membrane) with a variable number of vertices.
The TissueSimulation is constructed with a Tissue, which updates the correspondence between each TissueCell and its spatial representation and handles cell division (governed by the CellCycleModel associated with each cell); and one or more Force laws, which define the mechanical properties of the Tissue. It is also possible to add one or more CellKiller objects to the TissueSimulation, which specify the conditions under which a TissueCell dies.
Definition at line 61 of file TissueSimulation.hpp.
TissueSimulation< DIM >::TissueSimulation | ( | AbstractTissue< DIM > & | rTissue, | |
std::vector< AbstractForce< DIM > * > | forceCollection, | |||
bool | deleteTissueAndForceCollection = false , |
|||
bool | initialiseCells = true | |||
) | [inline] |
Constructor.
rTissue | A tissue facade class (contains a mesh and cells) | |
forceCollection | The mechanics to use in the simulation | |
deleteTissueAndForceCollection | Whether to delete the tissue and force collection on destruction to free up memory | |
initialiseCells | Whether to initialise cells (set to false when loading from an archive) |
Definition at line 40 of file TissueSimulation.cpp.
References RandomNumberGenerator::Instance(), TissueConfig::Instance(), TissueSimulation< DIM >::mInitialiseCells, TissueSimulation< DIM >::mpConfig, TissueSimulation< DIM >::mpRandomGenerator, and TissueSimulation< DIM >::mrTissue.
TissueSimulation< DIM >::~TissueSimulation | ( | ) | [inline, virtual] |
Destructor.
This frees the tissue and cell killers, if they were created by de-serialization.
Definition at line 72 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mAllocatedMemoryForForceCollection, TissueSimulation< DIM >::mCellKillers, TissueSimulation< DIM >::mDeleteTissue, TissueSimulation< DIM >::mForceCollection, and TissueSimulation< DIM >::mrTissue.
void TissueSimulation< DIM >::serialize | ( | Archive & | archive, | |
const unsigned int | version | |||
) | [inline, protected] |
Archive the member variables.
Serialization of singleton objects must be done with care. Before the object is serialized via a pointer, it *MUST* be serialized directly, or an assertion will trip when a second instance of the class is created on de-serialization.
archive | the archive | |
version | the current version of this class |
Reimplemented in CryptSimulation2d.
Definition at line 141 of file TissueSimulation.hpp.
virtual void TissueSimulation< DIM >::WriteVisualizerSetupFile | ( | ) | [inline, protected, virtual] |
Writes out special information about the mesh to the visualizer.
Reimplemented in CryptSimulation2d.
Definition at line 168 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::Solve().
unsigned TissueSimulation< DIM >::DoCellBirth | ( | ) | [inline, protected] |
During a simulation time step, process any cell divisions that need to occur. If the simulation includes cell birth, causes (almost) all cells that are ready to divide to produce daughter cells.
Definition at line 98 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::CalculateDividingCellCentreLocations(), TissueSimulation< DIM >::mNoBirth, and TissueSimulation< DIM >::mrTissue.
Referenced by TissueSimulation< DIM >::UpdateTissue().
c_vector< double, DIM > TissueSimulation< DIM >::CalculateDividingCellCentreLocations | ( | TissueCell * | pParentCell | ) | [inline, protected, virtual] |
Calculate the new locations of the cell centres of a dividing cell, move the parent cell and return the location of the daughter cell.
The new locations are found by picking a random direction and placing the parent and daughter in opposing directions along this axis.
pParentCell | pointer to the parent cell |
Reimplemented in CryptSimulation2d.
Definition at line 167 of file TissueSimulation.cpp.
References TissueConfig::GetDivisionSeparation(), RandomNumberGenerator::Instance(), TissueConfig::Instance(), TissueSimulation< DIM >::mrTissue, and RandomNumberGenerator::ranf().
Referenced by TissueSimulation< DIM >::DoCellBirth().
unsigned TissueSimulation< DIM >::DoCellRemoval | ( | ) | [inline, protected] |
During a simulation time step, process any cell sloughing or death
This uses the cell killers to remove cells and associated nodes from the facade class.
Definition at line 140 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mCellKillers, and TissueSimulation< DIM >::mrTissue.
Referenced by TissueSimulation< DIM >::UpdateTissue().
void TissueSimulation< DIM >::UpdateNodePositions | ( | const std::vector< c_vector< double, DIM > > & | rNodeForces | ) | [inline, protected, virtual] |
Moves each node to a new position for this timestep by calling the tissue UpdateNodeLocations() method then applying any boundary conditions.
rNodeForces | the forces on nodes |
Definition at line 229 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::ApplyTissueBoundaryConditions(), TissueSimulation< DIM >::mDt, and TissueSimulation< DIM >::mrTissue.
Referenced by TissueSimulation< DIM >::Solve().
virtual void TissueSimulation< DIM >::ApplyTissueBoundaryConditions | ( | const std::vector< c_vector< double, DIM > > & | rOldLocations | ) | [inline, protected, virtual] |
Apply any tissue boundary conditions. Can be overridden in subclasses.
rOldLocations | the node locations before any boundary conditions are applied |
Definition at line 219 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::UpdateNodePositions().
virtual void TissueSimulation< DIM >::PostSolve | ( | ) | [inline, protected, virtual] |
A method for subclasses to do something at the end of each timestep
Reimplemented in CryptSimulation2d.
Definition at line 226 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::Solve().
virtual void TissueSimulation< DIM >::SetupSolve | ( | ) | [inline, protected, virtual] |
A method for subclasses to do something at before the start of the time loop
Reimplemented in CryptSimulation2d.
Definition at line 233 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::Solve().
virtual void TissueSimulation< DIM >::AfterSolve | ( | ) | [inline, protected, virtual] |
This method may be overridden in subclasses to do something at the end of each time loop.
Reimplemented in CryptSimulation2d.
Definition at line 241 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::Solve().
bool TissueSimulation< DIM >::StoppingEventHasOccurred | ( | ) | [inline, protected, virtual] |
A child class can overload this if they want the simulation to stop based on certain conditions before the specified end time (for example, run until a crypt becomes monoclonal).
Definition at line 522 of file TissueSimulation.cpp.
Referenced by TissueSimulation< DIM >::Solve().
void TissueSimulation< DIM >::UpdateTissue | ( | ) | [inline, protected] |
Calls the deaths, births and (if mUpdateTissue is true) Tissue::Update() methods.
Definition at line 529 of file TissueSimulation.cpp.
References GenericEventHandler< 9, CancerEventHandler >::BeginEvent(), TissueSimulation< DIM >::DoCellBirth(), TissueSimulation< DIM >::DoCellRemoval(), GenericEventHandler< 9, CancerEventHandler >::EndEvent(), TissueSimulation< DIM >::mNumBirths, TissueSimulation< DIM >::mNumDeaths, TissueSimulation< DIM >::mrTissue, and TissueSimulation< DIM >::mUpdateTissue.
Referenced by TissueSimulation< DIM >::Solve().
std::vector< double > TissueSimulation< DIM >::GetNodeLocation | ( | const unsigned & | rNodeIndex | ) | [inline] |
Get a node's location (ONLY FOR TESTING).
rNodeIndex | the node index |
Definition at line 345 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mrTissue.
double TissueSimulation< DIM >::GetDt | ( | ) | [inline] |
Definition at line 258 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mDt.
unsigned TissueSimulation< DIM >::GetNumBirths | ( | ) | [inline] |
Definition at line 265 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mNumBirths.
unsigned TissueSimulation< DIM >::GetNumDeaths | ( | ) | [inline] |
Definition at line 272 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mNumDeaths.
std::string TissueSimulation< DIM >::GetOutputDirectory | ( | ) | [inline] |
Get the output directory of the simulation.
Definition at line 295 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mOutputDirectory.
void TissueSimulation< DIM >::SetDt | ( | double | dt | ) | [inline] |
Set the timestep of the simulation.
dt | the timestep to use |
Definition at line 250 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mDt.
void TissueSimulation< DIM >::SetEndTime | ( | double | endTime | ) | [inline] |
Set the end time and resets the timestep to be endtime/100.
endTime | the end time to use |
Definition at line 279 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mEndTime.
void TissueSimulation< DIM >::SetOutputDirectory | ( | std::string | outputDirectory | ) | [inline] |
Set the output directory of the simulation.
outputDirectory | the output directory to use |
Definition at line 287 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mOutputDirectory, and TissueSimulation< DIM >::mSimulationOutputDirectory.
void TissueSimulation< DIM >::SetSamplingTimestepMultiple | ( | unsigned | samplingTimestepMultiple | ) | [inline] |
Set the ratio of the number of actual timesteps to the number of timesteps at which results are written to file. Default value is set to 1 by the constructor.
samplingTimestepMultiple | the ratio to use |
Definition at line 302 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mSamplingTimestepMultiple.
void TissueSimulation< DIM >::SetNoBirth | ( | bool | noBirth | ) | [inline] |
Set the simulation to run with no birth.
noBirth | whether to run with no birth |
Definition at line 331 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mNoBirth.
void TissueSimulation< DIM >::SetUpdateTissueRule | ( | bool | updateTissue | ) | [inline] |
Set whether to update the topology of the tissue at each time step.
updateTissue | whether to update the tissue each time step |
Definition at line 324 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mUpdateTissue.
void TissueSimulation< DIM >::AddCellKiller | ( | AbstractCellKiller< DIM > * | pCellKiller | ) | [inline] |
Add a cell killer to be used in this simulation.
pCellKiller | pointer to a cell killer |
Definition at line 338 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mCellKillers.
void TissueSimulation< DIM >::Solve | ( | ) | [inline] |
Main solve method.
This method sets up the simulation time, creates output files, and initialises the tissue. It then iterates through a time loop. At each time step, first any cell death or birth is implemented, then the tissue topology is updated, then the forces are recalculated and the tissue evolved according to whatever force laws are present in the simulation, and finally the results for that time step are output to file. At the end of the time loop, the method closes any output files.
This function calls: DoCellRemoval() DoCellBirth() Tissue::Update()
Definition at line 357 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::AfterSolve(), GenericEventHandler< 9, CancerEventHandler >::BeginEvent(), GenericEventHandler< 9, CancerEventHandler >::EndEvent(), SimulationTime::GetTime(), SimulationTime::GetTimeStepsElapsed(), SimulationTime::IncrementTimeOneStep(), SimulationTime::Instance(), TissueSimulation< DIM >::mDt, TissueSimulation< DIM >::mEndTime, TissueSimulation< DIM >::mForceCollection, TissueSimulation< DIM >::mOutputDirectory, TissueSimulation< DIM >::mpSetupFile, TissueSimulation< DIM >::mrTissue, TissueSimulation< DIM >::mSamplingTimestepMultiple, TissueSimulation< DIM >::mSimulationOutputDirectory, OutputFileHandler::OpenOutputFile(), TissueSimulation< DIM >::PostSolve(), SimulationTime::ResetEndTimeAndNumberOfTimeSteps(), SimulationTime::SetEndTimeAndNumberOfTimeSteps(), TissueSimulation< DIM >::SetupSolve(), TissueSimulation< DIM >::StoppingEventHasOccurred(), TissueSimulation< DIM >::UpdateNodePositions(), TissueSimulation< DIM >::UpdateTissue(), and TissueSimulation< DIM >::WriteVisualizerSetupFile().
AbstractTissue< DIM > & TissueSimulation< DIM >::rGetTissue | ( | ) | [inline] |
Definition at line 310 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mrTissue.
const AbstractTissue< DIM > & TissueSimulation< DIM >::rGetTissue | ( | ) | const [inline] |
Definition at line 317 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mrTissue.
const std::vector< AbstractForce< DIM > * > TissueSimulation< DIM >::rGetForceCollection | ( | ) | const [inline] |
Definition at line 160 of file TissueSimulation.cpp.
References TissueSimulation< DIM >::mForceCollection.
friend class boost::serialization::access [friend] |
Needed for serialization.
Reimplemented in CryptSimulation2d.
Definition at line 128 of file TissueSimulation.hpp.
double TissueSimulation< DIM >::mDt [protected] |
Time step.
Definition at line 71 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::GetDt(), TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::SetDt(), TissueSimulation< DIM >::Solve(), and TissueSimulation< DIM >::UpdateNodePositions().
double TissueSimulation< DIM >::mEndTime [protected] |
Time to run the Solve() method up to.
Definition at line 74 of file TissueSimulation.hpp.
Referenced by TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::SetEndTime(), and TissueSimulation< DIM >::Solve().
AbstractTissue<DIM>& TissueSimulation< DIM >::mrTissue [protected] |
Facade encapsulating cells in the tissue being simulated.
Definition at line 77 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::CalculateDividingCellCentreLocations(), TissueSimulation< DIM >::DoCellBirth(), TissueSimulation< DIM >::DoCellRemoval(), TissueSimulation< DIM >::GetNodeLocation(), TissueSimulation< DIM >::rGetTissue(), TissueSimulation< DIM >::Solve(), TissueSimulation< DIM >::TissueSimulation(), TissueSimulation< DIM >::UpdateNodePositions(), TissueSimulation< DIM >::UpdateTissue(), and TissueSimulation< DIM >::~TissueSimulation().
bool TissueSimulation< DIM >::mDeleteTissue [protected] |
Whether to delete the tissue facade in the destructor.
Definition at line 80 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::~TissueSimulation().
bool TissueSimulation< DIM >::mAllocatedMemoryForForceCollection [protected] |
Whether delete the collection of force laws in the destructor.
Definition at line 83 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::~TissueSimulation().
bool TissueSimulation< DIM >::mInitialiseCells [protected] |
Whether to initialise the cells.
Definition at line 86 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::TissueSimulation().
bool TissueSimulation< DIM >::mNoBirth [protected] |
Whether to run the simulation with no birth (defaults to false).
Definition at line 89 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::DoCellBirth(), TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::SetNoBirth().
bool TissueSimulation< DIM >::mUpdateTissue [protected] |
Whether to update the topology of the tissue at each time step (defaults to true).
Definition at line 92 of file TissueSimulation.hpp.
Referenced by TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::SetUpdateTissueRule(), and TissueSimulation< DIM >::UpdateTissue().
std::string TissueSimulation< DIM >::mOutputDirectory [protected] |
Output directory (a subfolder of tmp/[USERNAME]/testoutput)
Definition at line 95 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::GetOutputDirectory(), TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::SetOutputDirectory(), and TissueSimulation< DIM >::Solve().
std::string TissueSimulation< DIM >::mSimulationOutputDirectory [protected] |
Simulation Output directory either the same as mOutputDirectory or includes mOutputDirectory/results_from_time_[TIME]
Definition at line 98 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::SetOutputDirectory(), and TissueSimulation< DIM >::Solve().
out_stream TissueSimulation< DIM >::mpSetupFile [protected] |
Visualiser setup file
Definition at line 101 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::Solve().
TissueConfig* TissueSimulation< DIM >::mpConfig [protected] |
The cancer tissue configuration
Definition at line 104 of file TissueSimulation.hpp.
Referenced by TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::TissueSimulation().
RandomNumberGenerator* TissueSimulation< DIM >::mpRandomGenerator [protected] |
The singleton RandomNumberGenerator
Definition at line 107 of file TissueSimulation.hpp.
Referenced by TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::TissueSimulation().
unsigned TissueSimulation< DIM >::mNumBirths [protected] |
Counts the number of births during the simulation
Definition at line 110 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::GetNumBirths(), TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::UpdateTissue().
unsigned TissueSimulation< DIM >::mNumDeaths [protected] |
Counts the number of deaths during the simulation
Definition at line 113 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::GetNumDeaths(), TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::UpdateTissue().
unsigned TissueSimulation< DIM >::mSamplingTimestepMultiple [protected] |
The ratio of the number of actual timesteps to the number of timesteps at which results are written to file
Definition at line 119 of file TissueSimulation.hpp.
Referenced by TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::SetSamplingTimestepMultiple(), and TissueSimulation< DIM >::Solve().
std::vector<AbstractCellKiller<DIM>*> TissueSimulation< DIM >::mCellKillers [protected] |
List of cell killers
Definition at line 122 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::AddCellKiller(), TissueSimulation< DIM >::DoCellRemoval(), TissueSimulation< 2 >::serialize(), and TissueSimulation< DIM >::~TissueSimulation().
std::vector<AbstractForce<DIM>*> TissueSimulation< DIM >::mForceCollection [protected] |
The mechanics used to determine the new location of the cells
Definition at line 125 of file TissueSimulation.hpp.
Referenced by TissueSimulation< DIM >::rGetForceCollection(), TissueSimulation< 2 >::serialize(), TissueSimulation< DIM >::Solve(), and TissueSimulation< DIM >::~TissueSimulation().