Chaste Commit::baa90ac2819b962188b7562f2326be23c47859a7
DeltaNotchEdgeSrnModel.cpp
1/*
2
3Copyright (c) 2005-2024, University of Oxford.
4All rights reserved.
5
6University of Oxford means the Chancellor, Masters and Scholars of the
7University of Oxford, having an administrative office at Wellington
8Square, Oxford OX1 2JD, UK.
9
10This file is part of Chaste.
11
12Redistribution and use in source and binary forms, with or without
13modification, are permitted provided that the following conditions are met:
14 * Redistributions of source code must retain the above copyright notice,
15 this list of conditions and the following disclaimer.
16 * Redistributions in binary form must reproduce the above copyright notice,
17 this list of conditions and the following disclaimer in the documentation
18 and/or other materials provided with the distribution.
19 * Neither the name of the University of Oxford nor the names of its
20 contributors may be used to endorse or promote products derived from this
21 software without specific prior written permission.
22
23THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
32OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
34*/
35
36#include "DeltaNotchEdgeSrnModel.hpp"
37
38DeltaNotchEdgeSrnModel::DeltaNotchEdgeSrnModel(boost::shared_ptr<AbstractCellCycleModelOdeSolver> pOdeSolver)
39 : AbstractOdeSrnModel(2, pOdeSolver)
40{
41 if (mpOdeSolver == boost::shared_ptr<AbstractCellCycleModelOdeSolver>())
42 {
43#ifdef CHASTE_CVODE
45 mpOdeSolver->Initialise();
46 mpOdeSolver->SetMaxSteps(10000);
47#else
49 mpOdeSolver->Initialise();
50 SetDt(0.001);
51#endif //CHASTE_CVODE
52 }
53 assert(mpOdeSolver->IsSetUp());
54}
55
57 : AbstractOdeSrnModel(rModel)
58{
59 /*
60 * Set each member variable of the new SRN model that inherits
61 * its value from the parent.
62 *
63 * Note 1: some of the new SRN model's member variables
64 * will already have been correctly initialized in its constructor.
65 *
66 * Note 2: one or more of the new SRN model's member variables
67 * may be set/overwritten as soon as InitialiseDaughterCell() is called on
68 * the new SRN model.
69 *
70 * Note 3: Only set the variables defined in this class. Variables defined
71 * in parent classes will be defined there.
72 */
73 assert(rModel.GetOdeSystem());
74 AbstractOdeSystem* p_parent_system(rModel.GetOdeSystem());
76 for (unsigned i=0; i < p_parent_system->GetNumberOfParameters(); ++i)
77 {
78 mpOdeSystem->SetParameter(i, p_parent_system->GetParameter(i));
79 }
80}
81
86
88{
89 // Update information before running simulation
91
92 // Run the ODE simulation as needed
94}
95
100
102{
103 assert(mpOdeSystem != nullptr);
104 assert(mpCell != nullptr);
105
106 // A new edge is initialised with zero concentrations
107 mpOdeSystem->SetStateVariable("Notch", 0.0);
108 mpOdeSystem->SetStateVariable("Delta", 0.0);
109 mpOdeSystem->SetParameter("neighbour delta", 0.0);
110 mpOdeSystem->SetParameter("interior delta", 0.0);
111 mpOdeSystem->SetParameter("interior notch", 0.0);
112}
113
115{
116 assert(mpOdeSystem != nullptr);
117 assert(mpCell != nullptr);
118
119 double neigh_delta = mpCell->GetCellEdgeData()->GetItem("neighbour delta")[this->GetEdgeLocalIndex()];
120 mpOdeSystem->SetParameter("neighbour delta", neigh_delta);
121
122 double interior_delta = mpCell->GetCellData()->GetItem("interior delta");
123 mpOdeSystem->SetParameter("interior delta", interior_delta);
124
125 double interior_notch = mpCell->GetCellData()->GetItem("interior notch");
126 mpOdeSystem->SetParameter("interior notch", interior_notch);
127}
128
130{
131 assert(mpOdeSystem != nullptr);
132 double notch = mpOdeSystem->rGetStateVariables()[0];
133 return notch;
134}
135
137{
138 assert(mpOdeSystem != nullptr);
139 mpOdeSystem->rGetStateVariables()[0] = value;
140}
141
143{
144 assert(mpOdeSystem != nullptr);
145 double delta = mpOdeSystem->rGetStateVariables()[1];
146 return delta;
147}
148
150{
151 assert(mpOdeSystem != nullptr);
152 mpOdeSystem->rGetStateVariables()[1] = value;
153}
154
156{
157 assert(mpOdeSystem != nullptr);
158 return mpOdeSystem->GetParameter("neighbour delta");
159}
160
162{
163 assert(mpOdeSystem != nullptr);
164 return mpOdeSystem->GetParameter("interior delta");
165}
166
168{
169 assert(mpOdeSystem != nullptr);
170 return mpOdeSystem->GetParameter("interior notch");
171}
172
174{
175 // No new parameters to output, so just call method on direct parent class
177}
178
180 const double scale)
181{
182 auto p_other_srn = static_cast<DeltaNotchEdgeSrnModel*>(pOtherSrn);
183 const double other_delta = p_other_srn->GetDelta();
184 const double other_notch = p_other_srn->GetNotch();
185 const double this_delta = GetDelta();
186 const double this_notch = GetNotch();
187 SetDelta(this_delta + scale*other_delta);
188 SetNotch(this_notch + scale*other_notch);
189}
190
192{
193 /*
194 * Here we assume that one half of SRN quantities are endocytosed and the remaining
195 * half are split between neighbouring junctions, hence we add 1/4 of SRN variables.
196 */
197 AddSrnQuantities(pShrunkEdgeSrn, 0.25);
198}
199
201{
202 // Add all SRN variables to this edge SRN
203 AddSrnQuantities(pMergedEdgeSrn);
204}
205
206void DeltaNotchEdgeSrnModel::SplitEdgeSrn(const double relativePosition)
207{
208 // Edges with longer relative lengths after split have higher concentration
209 ScaleSrnVariables(relativePosition);
210}
211
212// Declare identifier for the serializer
215#include "CellCycleModelOdeSolverExportWrapper.hpp"
216EXPORT_CELL_CYCLE_MODEL_ODE_SOLVER(DeltaNotchEdgeSrnModel)
#define CHASTE_CLASS_EXPORT(T)
virtual void ScaleSrnVariables(const double theta)
virtual void SimulateToCurrentTime()
virtual void Initialise()
virtual void OutputSrnModelParameters(out_stream &rParamsFile)
double GetParameter(unsigned index) const
void SetStateVariable(unsigned index, double newValue)
void SetParameter(const std::string &rName, double value)
void SetOdeSystem(AbstractOdeSystem *pOdeSystem)
boost::shared_ptr< AbstractCellCycleModelOdeSolver > mpOdeSolver
AbstractOdeSystem * GetOdeSystem() const
static boost::shared_ptr< CellCycleModelOdeSolver< CELL_CYCLE_MODEL, ODE_SOLVER > > Instance()
DeltaNotchEdgeSrnModel(const DeltaNotchEdgeSrnModel &rModel)
virtual AbstractSrnModel * CreateSrnModel()
virtual void AddMergedEdgeSrn(AbstractSrnModel *pMergedEdgeSrn)
virtual void AddShrunkEdgeSrn(AbstractSrnModel *pShrunkEdgeSrn)
virtual void SplitEdgeSrn(const double relativePosition)
virtual void OutputSrnModelParameters(out_stream &rParamsFile)
virtual void AddSrnQuantities(AbstractSrnModel *pOtherSrn, const double scale=1.0)