You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+12-8Lines changed: 12 additions & 8 deletions
Original file line number
Diff line number
Diff line change
@@ -238,23 +238,27 @@ Each `substrate` includes the attribute `name="S"` to set the substrate.
238
238
**See templates [here](#pd_templates).**
239
239
240
240
### PD models
241
-
Two similar models are supplied for PD, both using the principle of Area Under the Curve or AUC.
242
-
One uses the AUC of the internalized *concentration*, `AUC`, and the other uses the AUC of the internalized *amount*, `AUC_amount`.
241
+
There are four available PD models: `AUC`, `AUC_amount`, `MMD`, and `MMD_amount`.
242
+
The `AUC`-prefixed models use the area under the curve (AUC) of the internalized concentration to set the damage variable, `S_damage`.
243
+
By contrast, the `MMD`-prefixed models are based on metabolism-mediated damage (MMD) and use the amount of internalized substrate metabolized to set the damage variable, also accumulated over time similar to AUC.
244
+
The value of $\gamma$ below differentiates between these two classes.
245
+
246
+
The `_amount`-suffixed models use the internalized *amount* rather than the internalized *concentration* to update the damage variable.
243
247
PhysiPKPD will turn on `track_internalized_substrates` for you if it detects a PD model.
244
-
When using `AUC`, PhysiPKPD divides the internalized amount that PhysiCell tracks by the cell's current volume to determine the initial condition for $A$.
248
+
When using `AUC` or `MMD`, PhysiPKPD divides the internalized amount that PhysiCell tracks by the cell's current volume to determine the initial condition for $A$.
249
+
245
250
Both update according to the following differential equation:
246
251
247
252
$$
248
253
\begin{aligned}
249
254
A' & = -mA \\
250
-
D' & = A - r_1D - r_0
255
+
D' & = \gamma A - r_1D - r_0
251
256
\end{aligned}
252
257
$$
253
258
254
-
where $A$ is the internalized quantity, amount or concentration, and $D$ is the accumulated damage or AUC[^auc_no_par].
259
+
where $A$ is the internalized quantity, amount or concentration, and $D$ is the accumulated damage.
255
260
The internalized quantity, $A$, is metabolized at a rate $m$, damage is repaired with linear rate $r_1$ and constant rate $r_0$.
256
-
257
-
[^auc_no_par]: Because $D$ is measuring the AUC, the coefficient for $A$ in $D'$ is fixed to $1$. That is, $D$ has units amount x min or concentration x min, depending on the model used.
261
+
The parameter $\gamma$ is set either to `1.0` (for `AUC` and `AUC_amount`) or set to $m$ (for `MMD` and `MMD_amount`).
258
262
259
263
| Parameter | Description | If Missing |
260
264
| :-- | :-- | :-- |
@@ -407,7 +411,7 @@ Place the following within the `cell_definition` element:
if (pCD->custom_data.find_variable_index(substrate_name + "_damage")==-1) // make sure a damage variable for this cell was initialized for this substrate
38
-
{
39
-
for (int i = 0; i < cell_definitions_by_index.size(); i++)
40
-
{
41
-
if (cell_definitions_by_index[i]->custom_data.find_variable_index(substrate_name + "_damage")!=-1)
42
-
{
43
-
std::cout << "PhysiPKPD ERROR: No damage variable for " << substrate_name << " acting on " << cell_definition_name << " given." << std::endl
44
-
<< "\tBut " << cell_definitions_by_index[i]->name << " does have this damage variable." << std::endl
45
-
<< "\tI cannot guarantee that adding this variable will put it in the right index." << std:: endl
46
-
<< "\tSet this with " << substrate_name + "_damage"
47
-
<< "\tas a custom variable for " << cell_definition_name << std::endl
48
-
<< std::endl;
49
-
exit(-1);
50
-
}
51
-
}
52
-
std::cout << "PhysiPKPD WARNING: No damage variable for " << substrate_name << " acting on " << cell_definition_name << " given." << std::endl
53
-
<< "\tSet this with " << substrate_name + "_damage for all cell types affected by this substrate."
54
-
<< "\tOtherwise, you risk changing variable indices and I can't guarantee that won't cause issues." << std::endl
// if the metabolism and repair rates are equal, then the system has repeated eigenvalues and the analytic solution is qualitatively different; notice the division by the difference of these rates in the first case
0 commit comments