Lattice Microbes 2.5
This is for whole cell modeling
Loading...
Searching...
No Matches
CMESolver.h
Go to the documentation of this file.
1/*
2 * University of Illinois Open Source License
3 * Copyright 2011-2018 Luthey-Schulten Group,
4 * All rights reserved.
5 *
6 * Developed by: Luthey-Schulten Group
7 * University of Illinois at Urbana-Champaign
8 * http://www.scs.uiuc.edu/~schulten
9 *
10 * Permission is hereby granted, free of charge, to any person obtaining a copy of
11 * this software and associated documentation files (the Software), to deal with
12 * the Software without restriction, including without limitation the rights to
13 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14 * of the Software, and to permit persons to whom the Software is furnished to
15 * do so, subject to the following conditions:
16 *
17 * - Redistributions of source code must retain the above copyright notice,
18 * this list of conditions and the following disclaimers.
19 *
20 * - Redistributions in binary form must reproduce the above copyright notice,
21 * this list of conditions and the following disclaimers in the documentation
22 * and/or other materials provided with the distribution.
23 *
24 * - Neither the names of the Luthey-Schulten Group, University of Illinois at
25 * Urbana-Champaign, nor the names of its contributors may be used to endorse or
26 * promote products derived from this Software without specific prior written
27 * permission.
28 *
29 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
30 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
32 * THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
33 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
34 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
35 * OTHER DEALINGS WITH THE SOFTWARE.
36 *
37 * Author(s): Elijah Roberts
38 */
39
40#ifndef LM_CME_CMESOLVER_H_
41#define LM_CME_CMESOLVER_H_
42
43#include <map>
44#include <list>
45#include <string>
46#include <utility>
47#include "core/Math.h"
48#include "FirstPassageTimes.pb.h"
49#include "ParameterValues.pb.h"
51#include "rng/RandomGenerator.h"
52#include "me/MESolver.h"
53
54using std::map;
55using std::pair;
56using std::list;
57using std::string;
61
62namespace lm {
63
64namespace io {
65class ReactionModel;
66}
67
68namespace cme {
69
70class CMESolver : public MESolver
71{
72protected:
74 {
75 virtual ~PropensityArgs() {}
76 };
78 {
79 static const uint REACTION_TYPE = 0;
81 double k;
82 };
84 {
85 static const uint REACTION_TYPE = 1;
88 double k;
89 };
91 {
92 static const uint REACTION_TYPE = 2;
95 double k;
96 };
98 {
99 static const uint REACTION_TYPE = 3;
102 double k;
103 };
105 {
106 static const uint REACTION_TYPE = 4;
107 KHillPropensityArgs(uint si, double k0, double dk, double I50, double Iex, double h) :si(si),k(k0+(dk/(pow(I50/Iex,h)+1))) {}
109 double k;
110 };
112 {
113 static const uint REACTION_TYPE = 5;
114 KHillTransportPropensityArgs(uint si, uint xi, double k0, double dk, double I50, double Iex, double kit, double kid, double KM, double h, double V) :si(si),xi(xi),k0(k0),dk(dk),IRh(pow(I50/Iex,h)),ITp(kit/(kid*(Iex+KM)*NA*V)),h(h) {}
117 double k0;
118 double dk;
119 double IRh;
120 double ITp;
121 double h;
122 };
124 {
125 static const uint REACTION_TYPE = 6;
129 double k0;
130 double k1;
131 };
133 {
134 static const uint REACTION_TYPE = 7;
136 uint si; // Substrate index
137 uint ei; // Enzyme index
138 double kcat;
139 double Km;
140 };
142 {
143 static const uint REACTION_TYPE = 8;
144 CompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki) :si(si),ei(ei),ii(ii),kcat(kcat),Km(Km),Ki(Ki) {}
145 uint si; // Substrate index
146 uint ei; // Enzyme index
147 uint ii; // Inhibitor index
148 double kcat;
149 double Km;
150 double Ki;
151 };
153 {
154 static const uint REACTION_TYPE = 9;
155 UncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki) :si(si),ei(ei),ii(ii),kcat(kcat),Km(Km),Ki(Ki) {}
156 uint si; // Substrate index
157 uint ei; // Enzyme index
158 uint ii; // Inhibitor index
159 double kcat;
160 double Km;
161 double Ki;
162 };
164 {
165 static const uint REACTION_TYPE = 10;
166 NoncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki) :si(si),ei(ei),ii(ii),kcat(kcat),Km(Km),Ki(Ki) {}
167 uint si; // Substrate index
168 uint ei; // Enzyme index
169 uint ii; // Inhibitor index
170 double kcat;
171 double Km;
172 double Ki;
173 };
174
189 {
191 string name;
192 double * valuePointer;
193 lm::io::ParameterValues dataSet;
194 };
195
196public:
198 virtual ~CMESolver();
199 virtual void initialize(unsigned int replicate, map<string,string> * parameters, ResourceAllocator::ComputeResources * resources);
200 virtual void setReactionModel(lm::io::ReactionModel * reactionModel);
201 virtual void buildModel(const uint numberSpecies, const uint numberReactions, const uint * initialSpeciesCounts, const uint * reactionTypesA, const double * k, const int * S, const uint * D, const uint kCols=1);
202 virtual void setModelPropensityFunction(uint reaction, double (*propensityFunction)(double time, uint * speciesCounts, void * args), void * propensityFunctionArg);
203 virtual void setSpeciesUpperLimit(uint species, uint limit);
204 virtual void setSpeciesLowerLimit(uint species, uint limit);
205 virtual void setFptTrackingList(list<uint> speciesList);
206 virtual void addToParameterTrackingList(pair<string,double*>parameter);
207 virtual void generateTrajectory()=0;
208 virtual void setReactionRateCME(unsigned int reactionId, double rate);
209 // Accessors for internal data
210 virtual void getSpeciesCountView(uint **counts, int *number);
211 virtual void getReactionRateConstantsView(int reactionNumber, double **rates, int *rateConstantCount);
212
213protected:
214 // Propensity functions
215 // The following functions are used to compute the actual propensity for the specific
216 // reaction type.
217 static double zerothOrderPropensity(double time, uint * speciesCounts, void * pargs);
218 static double firstOrderPropensity(double time, uint * speciesCounts, void * pargs);
219 static double secondOrderPropensity(double time, uint * speciesCounts, void * pargs);
220 static double secondOrderSelfPropensity(double time, uint * speciesCounts, void * pargs);
221 static double kHillPropensity(double time, uint * speciesCounts, void * pargs);
222 static double kHillTransportPropensity(double time, uint * speciesCounts, void * pargs);
223 static double zerothOrderHeavisidePropensity(double time, uint * speciesCounts, void * pargs);
224 static double michaelisMentenPropensity(double time, uint * speciesCounts, void *pargs);
225 static double competitiveMMPropensity(double time, uint * speciesCounts, void *pargs);
226 static double uncompetitiveMMPropensity(double time, uint * speciesCounts, void *pargs);
227 static double noncompetitiveMMPropensity(double time, uint * speciesCounts, void *pargs);
228
229
231 virtual void destroyModel();
232 virtual double recordParameters(double nextRecordTime, double recordInterval, double simulationTime);
233 virtual void queueRecordedParameters(bool flush=false);
234
236 {
237 for (uint i=0; i<numberDependentSpecies[r]; i++)
238 {
240 }
241 }
242
244 {
245 for (uint i=0; i<numberSpeciesLimits; i++)
246 {
248 switch (l.type)
249 {
250 case -1:
251 if (speciesCounts[l.species] <= l.limit) return true;
252 break;
253 case 1:
254 if (speciesCounts[l.species] >= l.limit) return true;
255 break;
256 }
257 }
258 return false;
259 }
260
261
262
263protected:
265 unsigned int replicate;
266 map<string,string> * parameters;
269
270 // The reaction model.
274 uint * initialSpeciesCounts; // numberSpecies
275 uint * speciesCounts; // numberSpecies
276 uint * reactionTypes; // numberReactions
277 int * S; // numberSpecies x numberReactions
278 uint * D; // numberSpecies x numberReactions
281 list<PropensityArgs *> propensityArgs;
286 list<TrackedParameter> trackedParameters;
287
288 // Dependency tables.
294
295protected:
296 virtual int hookSimulation(double time);
297 virtual int onBeginTrajectory();
298 virtual int onEndTrajectory();
299};
300
301}
302}
303
304#endif
#define NA
Definition Math.h:51
unsigned int uint
Definition Types.h:52
CMESolver(RandomGenerator::Distributions neededDists)
Definition CMESolver.cpp:74
Distributions
Types of random number generators that are allowed.
Definition RandomGenerator.h:56
A representation for the resources for a given node.
Definition ResourceAllocator.h:62
virtual void setSpeciesUpperLimit(uint species, uint limit)
Definition CMESolver.cpp:1137
RandomGenerator * rng
Definition CMESolver.h:268
uint ** dependentReactions
Definition CMESolver.h:293
virtual void buildModel(const uint numberSpecies, const uint numberReactions, const uint *initialSpeciesCounts, const uint *reactionTypesA, const double *k, const int *S, const uint *D, const uint kCols=1)
Definition CMESolver.cpp:359
virtual void getSpeciesCountView(uint **counts, int *number)
Definition CMESolver.cpp:926
virtual ~CMESolver()
Definition CMESolver.cpp:88
static double competitiveMMPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1096
uint * numberDependentReactions
Definition CMESolver.h:292
virtual void destroyModel()
Definition CMESolver.cpp:268
virtual void setFptTrackingList(list< uint > speciesList)
Definition CMESolver.cpp:1174
bool reachedSpeciesLimit()
Definition CMESolver.h:243
uint numberReactions
Definition CMESolver.h:273
map< string, string > * parameters
Definition CMESolver.h:266
virtual void setReactionRateCME(unsigned int reactionId, double rate)
Definition CMESolver.cpp:1260
RandomGenerator::Distributions neededDists
Definition CMESolver.h:264
static double kHillTransportPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1060
uint numberSpeciesToTrack
Definition CMESolver.h:272
uint ** dependentSpecies
Definition CMESolver.h:290
virtual int onEndTrajectory()
Definition CMESolver.cpp:1256
virtual int hookSimulation(double time)
Definition CMESolver.cpp:1242
uint * reactionTypes
Definition CMESolver.h:276
static double firstOrderPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1032
void updateSpeciesCounts(uint r)
Definition CMESolver.h:235
void ** propensityFunctions
Definition CMESolver.h:279
virtual void initialize(unsigned int replicate, map< string, string > *parameters, ResourceAllocator::ComputeResources *resources)
Initialize the simulation.
Definition CMESolver.cpp:101
static double noncompetitiveMMPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1118
int * S
Definition CMESolver.h:277
uint numberFptTrackedSpecies
Definition CMESolver.h:284
virtual void setReactionModel(lm::io::ReactionModel *reactionModel)
Definition CMESolver.cpp:315
static double kHillPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1054
CMESolver(RandomGenerator::Distributions neededDists)
Definition CMESolver.cpp:74
uint * initialSpeciesCounts
Definition CMESolver.h:274
ResourceAllocator::ComputeResources * resources
Definition CMESolver.h:267
virtual void allocateModel(uint numberSpecies, uint numberReactions)
Definition CMESolver.cpp:215
list< TrackedParameter > trackedParameters
Definition CMESolver.h:286
virtual int onBeginTrajectory()
Definition CMESolver.cpp:1251
list< PropensityArgs * > propensityArgs
Definition CMESolver.h:281
static double zerothOrderPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1026
FPTTracking * fptTrackedSpecies
Definition CMESolver.h:285
virtual void setModelPropensityFunction(uint reaction, double(*propensityFunction)(double time, uint *speciesCounts, void *args), void *propensityFunctionArg)
Definition CMESolver.cpp:1130
virtual void generateTrajectory()=0
Actually run the simulation.
unsigned int replicate
Definition CMESolver.h:265
SpeciesLimit * speciesLimits
Definition CMESolver.h:283
uint * speciesCounts
Definition CMESolver.h:275
static double secondOrderPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1038
virtual void getReactionRateConstantsView(int reactionNumber, double **rates, int *rateConstantCount)
Definition CMESolver.cpp:932
uint * numberDependentSpecies
Definition CMESolver.h:289
virtual void queueRecordedParameters(bool flush=false)
Definition CMESolver.cpp:1224
uint numberSpecies
Definition CMESolver.h:271
virtual void setSpeciesLowerLimit(uint species, uint limit)
Definition CMESolver.cpp:1153
static double uncompetitiveMMPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1107
virtual double recordParameters(double nextRecordTime, double recordInterval, double simulationTime)
Definition CMESolver.cpp:1199
int ** dependentSpeciesChange
Definition CMESolver.h:291
uint * D
Definition CMESolver.h:278
virtual void addToParameterTrackingList(pair< string, double * >parameter)
Definition CMESolver.cpp:1194
void ** propensityFunctionArgs
Definition CMESolver.h:280
static double zerothOrderHeavisidePropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1077
static double secondOrderSelfPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1044
uint numberSpeciesLimits
Definition CMESolver.h:282
static double michaelisMentenPropensity(double time, uint *speciesCounts, void *pargs)
Definition CMESolver.cpp:1086
An object that tracks the available resources for the main simulation runner.
Definition ResourceAllocator.h:57
An abstract base class for all Master Equation solvers, this is essentially a representation of "the ...
Definition MESolver.h:59
MESolver()
Create the MESolver.
Definition MESolver.cpp:46
Base class for random number generators in Lattice Microbes.
Definition RandomGenerator.h:51
Definition CMESolver.cpp:72
Definition LatticeBuilder.h:56
Definition ReactionQueue.h:46
Definition Capsule.cpp:46
CompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:144
Definition CMESolver.h:182
FirstOrderPropensityArgs(uint si, double k)
Definition CMESolver.h:86
KHillPropensityArgs(uint si, double k0, double dk, double I50, double Iex, double h)
Definition CMESolver.h:107
KHillTransportPropensityArgs(uint si, uint xi, double k0, double dk, double I50, double Iex, double kit, double kid, double KM, double h, double V)
Definition CMESolver.h:114
MichaelisMentenPropensityArgs(uint si, uint ei, double kcat, double Km)
Definition CMESolver.h:135
NoncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:166
Definition CMESolver.h:74
SecondOrderPropensityArgs(uint s1i, uint s2i, double k)
Definition CMESolver.h:93
SecondOrderSelfPropensityArgs(uint si, double k)
Definition CMESolver.h:100
Definition CMESolver.h:176
TrackedParameter(string name, double *valuePointer)
Definition CMESolver.h:190
UncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:155
ZerothOrderHeavisidePropensityArgs(uint xi, uint x0, double k0, double k1)
Definition CMESolver.h:126
ZerothOrderPropensityArgs(double k)
Definition CMESolver.h:80
double kcat
Definition CMESolver.h:148
CompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:144
double Km
Definition CMESolver.h:149
double Ki
Definition CMESolver.h:150
static const uint REACTION_TYPE
Definition CMESolver.h:143
Definition CMESolver.h:182
uint species
Definition CMESolver.h:183
uint minValueAchieved
Definition CMESolver.h:184
uint maxValueAchieved
Definition CMESolver.h:185
lm::io::FirstPassageTimes dataSet
Definition CMESolver.h:186
static const uint REACTION_TYPE
Definition CMESolver.h:85
FirstOrderPropensityArgs(uint si, double k)
Definition CMESolver.h:86
uint si
Definition CMESolver.h:87
double k
Definition CMESolver.h:88
double k
Definition CMESolver.h:109
uint si
Definition CMESolver.h:108
KHillPropensityArgs(uint si, double k0, double dk, double I50, double Iex, double h)
Definition CMESolver.h:107
static const uint REACTION_TYPE
Definition CMESolver.h:106
double h
Definition CMESolver.h:121
double dk
Definition CMESolver.h:118
double ITp
Definition CMESolver.h:120
double k0
Definition CMESolver.h:117
double IRh
Definition CMESolver.h:119
static const uint REACTION_TYPE
Definition CMESolver.h:113
KHillTransportPropensityArgs(uint si, uint xi, double k0, double dk, double I50, double Iex, double kit, double kid, double KM, double h, double V)
Definition CMESolver.h:114
double kcat
Definition CMESolver.h:138
static const uint REACTION_TYPE
Definition CMESolver.h:134
MichaelisMentenPropensityArgs(uint si, uint ei, double kcat, double Km)
Definition CMESolver.h:135
NoncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:166
static const uint REACTION_TYPE
Definition CMESolver.h:165
virtual ~PropensityArgs()
Definition CMESolver.h:75
double k
Definition CMESolver.h:95
SecondOrderPropensityArgs(uint s1i, uint s2i, double k)
Definition CMESolver.h:93
static const uint REACTION_TYPE
Definition CMESolver.h:92
SecondOrderSelfPropensityArgs(uint si, double k)
Definition CMESolver.h:100
static const uint REACTION_TYPE
Definition CMESolver.h:99
Definition CMESolver.h:176
uint limit
Definition CMESolver.h:179
int type
Definition CMESolver.h:177
uint species
Definition CMESolver.h:178
double * valuePointer
Definition CMESolver.h:192
string name
Definition CMESolver.h:191
lm::io::ParameterValues dataSet
Definition CMESolver.h:193
TrackedParameter(string name, double *valuePointer)
Definition CMESolver.h:190
double kcat
Definition CMESolver.h:159
UncompetitiveMMPropensityArgs(uint si, uint ei, uint ii, double kcat, double Km, double Ki)
Definition CMESolver.h:155
static const uint REACTION_TYPE
Definition CMESolver.h:154
ZerothOrderHeavisidePropensityArgs(uint xi, uint x0, double k0, double k1)
Definition CMESolver.h:126
static const uint REACTION_TYPE
Definition CMESolver.h:125
static const uint REACTION_TYPE
Definition CMESolver.h:79
double k
Definition CMESolver.h:81
ZerothOrderPropensityArgs(double k)
Definition CMESolver.h:80