Chaste Commit::29c3c4ab2bee00ddd311a035a1e522c03cbe928a
DeltaNotchEdgeSrnModel.cpp
1/*
2
3Copyright (c) 2005-2026, 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 {
44 mpOdeSolver->Initialise();
45 mpOdeSolver->SetMaxSteps(10000);
46 }
47 assert(mpOdeSolver->IsSetUp());
48}
49
51 : AbstractOdeSrnModel(rModel)
52{
53 /*
54 * Set each member variable of the new SRN model that inherits
55 * its value from the parent.
56 *
57 * Note 1: some of the new SRN model's member variables
58 * will already have been correctly initialized in its constructor.
59 *
60 * Note 2: one or more of the new SRN model's member variables
61 * may be set/overwritten as soon as InitialiseDaughterCell() is called on
62 * the new SRN model.
63 *
64 * Note 3: Only set the variables defined in this class. Variables defined
65 * in parent classes will be defined there.
66 */
67 assert(rModel.GetOdeSystem());
68 AbstractOdeSystem* p_parent_system(rModel.GetOdeSystem());
70 for (unsigned i=0; i < p_parent_system->GetNumberOfParameters(); ++i)
71 {
72 mpOdeSystem->SetParameter(i, p_parent_system->GetParameter(i));
73 }
74}
75
80
82{
83 // Update information before running simulation
85
86 // Run the ODE simulation as needed
88}
89
94
96{
97 assert(mpOdeSystem != nullptr);
98 assert(mpCell != nullptr);
99
100 // A new edge is initialised with zero concentrations
101 mpOdeSystem->SetStateVariable("Notch", 0.0);
102 mpOdeSystem->SetStateVariable("Delta", 0.0);
103 mpOdeSystem->SetParameter("neighbour delta", 0.0);
104 mpOdeSystem->SetParameter("interior delta", 0.0);
105 mpOdeSystem->SetParameter("interior notch", 0.0);
106}
107
109{
110 assert(mpOdeSystem != nullptr);
111 assert(mpCell != nullptr);
112
113 double neigh_delta = mpCell->GetCellEdgeData()->GetItem("neighbour delta")[this->GetEdgeLocalIndex()];
114 mpOdeSystem->SetParameter("neighbour delta", neigh_delta);
115
116 double interior_delta = mpCell->GetCellData()->GetItem("interior delta");
117 mpOdeSystem->SetParameter("interior delta", interior_delta);
118
119 double interior_notch = mpCell->GetCellData()->GetItem("interior notch");
120 mpOdeSystem->SetParameter("interior notch", interior_notch);
121}
122
124{
125 assert(mpOdeSystem != nullptr);
126 double notch = mpOdeSystem->rGetStateVariables()[0];
127 return notch;
128}
129
131{
132 assert(mpOdeSystem != nullptr);
133 mpOdeSystem->rGetStateVariables()[0] = value;
134}
135
137{
138 assert(mpOdeSystem != nullptr);
139 double delta = mpOdeSystem->rGetStateVariables()[1];
140 return delta;
141}
142
144{
145 assert(mpOdeSystem != nullptr);
146 mpOdeSystem->rGetStateVariables()[1] = value;
147}
148
150{
151 assert(mpOdeSystem != nullptr);
152 return mpOdeSystem->GetParameter("neighbour delta");
153}
154
156{
157 assert(mpOdeSystem != nullptr);
158 return mpOdeSystem->GetParameter("interior delta");
159}
160
162{
163 assert(mpOdeSystem != nullptr);
164 return mpOdeSystem->GetParameter("interior notch");
165}
166
168{
169 // No new parameters to output, so just call method on direct parent class
171}
172
174 const double scale)
175{
176 auto p_other_srn = static_cast<DeltaNotchEdgeSrnModel*>(pOtherSrn);
177 const double other_delta = p_other_srn->GetDelta();
178 const double other_notch = p_other_srn->GetNotch();
179 const double this_delta = GetDelta();
180 const double this_notch = GetNotch();
181 SetDelta(this_delta + scale*other_delta);
182 SetNotch(this_notch + scale*other_notch);
183}
184
186{
187 /*
188 * Here we assume that one half of SRN quantities are endocytosed and the remaining
189 * half are split between neighbouring junctions, hence we add 1/4 of SRN variables.
190 */
191 AddSrnQuantities(pShrunkEdgeSrn, 0.25);
192}
193
195{
196 // Add all SRN variables to this edge SRN
197 AddSrnQuantities(pMergedEdgeSrn);
198}
199
200void DeltaNotchEdgeSrnModel::SplitEdgeSrn(const double relativePosition)
201{
202 // Edges with longer relative lengths after split have higher concentration
203 ScaleSrnVariables(relativePosition);
204}
205
206// Declare identifier for the serializer
209#include "CellCycleModelOdeSolverExportWrapper.hpp"
210EXPORT_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)