Viral dynamics in monkey and bat cell lines

Open in Morpheus

Persistent Identifier

Use this permanent link to cite or share this Morpheus model:


Introduction

Brook et al. studied the effect of distinct immune phenotypes on cellular-scale viral propagation in three mammalian kidney cell lines with different interferon pathways (IFN). Differences in the IFN response upon pathogen invasion allowed to experimentally observe, model and numerically simulate viral dynamics in cells with

  1. absent,
  2. induced, and
  3. constitutive immunity.

Brook et al. also developed two related models of these processes, (1) a mean field compartmental model for within-host viral dynamics under different immunity assumptions and (2) a stochastic, spatially explicit individual-based model. The mean field model was fitted to experimental data obtained in a series of in vitro infection trials. The model results showed that stronger antiviral immune response restrains cell death allowing for an accelerated spread and longer viral presence within the host. The finding suggests a role for a pathogen reservoir in hosts with stronger immunity.

Experimental Data

Brook et al. have performed a series of infection assays on three immortalized mammalian cell lines:

  1. IFN-defective Vero (African green monkey) cells,
  2. RoNi/7.1 (Bat Rousettus aegyptiacus) cells with an induced IFN response upon infection, and
  3. PaKiT01 (Bat Pteropus alecto) cells that constitutively express IFN-$\alpha$, i.e. some amount of antiviral cells is present even at the disease-free equilibrium.

The three cell lines were infected with three replication competent, GFP-tagged vesicular stomatitis Indiana viruses:

  • rVSV-G,
  • rVSV-EBOV, and
  • rVSV-MARV.

Cell entry was mediated by the glycoprotein of the bat-evolved filoviruses, Ebola (EBOV) and Marburg (MARV). Each cell culture was infected with each virus at two multiplicities of infection (MOI): 0.0001 (low) and 0.001 (high). At the start of an infectivity assay $k$ viral particles were introduced to the cell monolayer. The proportion of infected cells is described by the Poisson distribution:

$$ \begin{align} P(k) = \frac{e^{m}m^{k}}{k!} \end{align} $$

where $m$ is multiplicity of infection (MOI) and takes either of the two values {0.001, 0.0001}. Assuming that 90% confluent cell culture at the beginning of each trial contained $\sim 9 \times 10^{5}$ cells, each trial started from introducing the virus to $\sim 81$ ($\mathrm{MOI} = 0.0001$) or $\sim 810$ ($\mathrm{MOI} = 0.001$) cells. Each infectivity assay was carried out on a 6-well plate. Each plate contained a cell line infected with a virus at different levels of $\mathrm{MOI}$. 1 control well received no viral particles, 2-3 wells were each infected with a virus at $\mathrm{MOI} = 0.001$ or $\mathrm{MOI} = 0.0001$.

Model Description

Brook et al. assumed the cells to have either of the following five states:

  • susceptible (S)
  • antiviral (A)
  • exposed (E)
  • infectious (I)
  • dead (D)

The modeled viral infection and immunity processes are summarized in this state transition graph:

Cell State Transitions
Overview of cell state transitions

The attached Morpheus model is twofold, it comprises the mean field model and the spatial model, running in parallel for the same parameter set. The parameter set is taken from the publication’s Table 1 and Suppl. file 4. The added model constants termed

  1. select.celltype
  2. select.virus
  3. select.immunity
  4. MOI

allow to readily parametrize and run any of the $3 \times 3 \times 3 \times 2 = 54$ specific combinations of cell line/virus/immune type/virus load, all in the same model. Hence, only these select statements need to be set and no manual change of parameter values is required for most of the model variants to run correctly (for $\mathrm{MOI} = 0.0001$, the spatial initialization and the parameter $\beta$ have to be set manually though).

Mean Field Model

For the mean field model, the state of the system was described by proportions of the respective cell types, e.g., $ P_\mathrm{S} = 0.2 $ would mean that of the total cell count 1/5 were susceptible. Furthermore, the IFN dynamics was modeled by a rate of cell progression from susceptible to antiviral, parametrized by $\rho$ multiplied by the proportion of exposed cells.

This resulted in the following system of ODEs:

$$\begin{align} \frac{dP_\mathrm{S}}{dt} &= bP_\mathrm{D}(P_\mathrm{S} + P_\mathrm{A}) - \beta P_\mathrm{S}P_\mathrm{I} - \mu P_\mathrm{S} -\rho P_\mathrm{E}P_\mathrm{S} -\epsilon P_\mathrm{S} - cP_\mathrm{A} \\ \frac{dP_\mathrm{A}}{dt} &= \rho P_\mathrm{E}P_\mathrm{S} + \epsilon P_\mathrm{S} - cP_\mathrm{A} - \mu P_\mathrm{A} \\ \frac{dP_\mathrm{E}}{dt} &= \beta P_\mathrm{S}P_\mathrm{I} - \sigma P_\mathrm{E} - \mu P_\mathrm{E} \\ \frac{dP_\mathrm{I}}{dt} &= \sigma P_\mathrm{E} - \alpha P_\mathrm{I} - \mu P_\mathrm{I} \\ \frac{dP_\mathrm{D}}{dt} &= \mu (P_\mathrm{S} + P_\mathrm{I} + P_\mathrm{E} + P_\mathrm{A}) + \alpha P_\mathrm{I} - bP_\mathrm{D}(P_\mathrm{S} + P_\mathrm{A}) \end{align} $$

Initial conditions are calculated (including the dependency of cell types at disease-free equilibrium DFE) exactly and individually for each combination of cell line/virus/immune type as defined in the mean field model code by Brook et al..

Spatial Model

The spatial model is a cellular automaton on a fixed two-dimensional hexagonal grid with $10^{4}$ cells. Transitions of local cell states depend on the proportions of cell types in the 6-cell and 36-cell neighborhoods around each cell, as defined by Brook et al.. The time unit is hours post-infection and the space unit is one lattice interval corresponding to the size of a cell.

Regarding the transition from susceptible to antiviral cells, the important parameters of the model, $\rho$ (induced immunity) or $\epsilon$ (constitutive immunity), are respectively taken from the mean field model and in each ten-minute time step multiplied with, respectively, the proportion of exposed and susceptible cells. Brook et al. set the remaining waiting times for state transitions by sampling from normal distributions around the inverse of each parameter.

Transmission of the virus and the birth of new cells is computed probabilistically. The birth rate $b$ is multiplied by the fraction of susceptible cells in the 6-cell neighborhood of a dead cell (regarded as available space). In contrast, the transmission rate $\beta$ is multiplied by the proportion of infected cells in the 36-cell neighborhood of a susceptible cell.

To compensate for the difference between local interactions in the spatial model and globally averaged interactions in the mean field model, Brook et al. rescaled two parameter values for the spatial model: the $b_\mathrm{MF}$ value from the mean field model was multiplied by $6$, and $\beta_\mathrm{MF}$ was multiplied by $10$ to obtain parameter values for the spatial model.

Initial conditions are copied exactly and individually for each combination of cell line/virus/immune type from the corresponding spatial model code by Brook et al..

Results

We have reproduced the graphs (and share our plotting workflow in the iPython Notebook under Downloads below) of the publication using Morpheus and based on the author’s code in the supplementary materials. To rerun or extend each of our results, go to Global in Morpheus and specify the desired cell, virus and immunity type.

Reproduction of mean field results

Results of the mean field model as published by [Brook _et al._](#reference) ([Fig. 5](https://elifesciences.org/articles/48401#fig5)) [*CC BY 4.0*](https://creativecommons.org/licenses/by/4.0/)
Results of the mean field model as published by Brook et al. (Fig. 5) CC BY 4.0
Results for the mean field model reproduced in Morpheus.
Results for the mean field model reproduced in Morpheus

Comparing both figures above, we could reproduce the mean field model exactly, as expected for this deterministic model. Additional curves in the Morpheus graphs show the time courses of all remaining variables.

Note that the black dots in the publication’s graphs correspond to experimental data and are not included in the Morpheus graphs.

Reproduction of spatial model results

Results of the spatial model as published by [Brook _et al._](#reference) ([Fig. 5 Suppl. 3](https://elifesciences.org/articles/48401/figures#fig5s3)). Unshaded panels correspond to best fitting immune type for each virus/cell line combination and only those are followed up in the Morpheus model below. [*CC BY 4.0*](https://creativecommons.org/licenses/by/4.0/)
Results of the spatial model as published by Brook et al. (Fig. 5 Suppl. 3). Unshaded panels correspond to best fitting immune type for each virus/cell line combination and only those are followed up in the Morpheus model below. CC BY 4.0
Statistics over ten simulations of stochastic spatial model simulations in Morpheus
Statistics over ten simulations of stochastic spatial model simulations in Morpheus

Again for the Morpheus model, all curves show time courses for individual cell types. The published spatial model results were reproduced statistically given ten simulation runs at each combination. Note, for both above figures of published and reproduced spatial model results, two of the natural cell death rates were changed to $\mu_\text{Vero}=\frac{1}{83}, \mu_\text{PaKiT01}=\frac{1}{120}$ as in the originally published simulation code, whereas the model.xml file attached below includes the parameter set $\mu_\text{Vero}=\frac{1}{121}, \mu_\text{PaKiT01}=\frac{1}{84}$ from Table 1 and Suppl. file 4. These two similar parameter choices were found to yield qualitatively identical results.

A representative simulation run (with $\mu_\text{Vero}=\frac{1}{83}, \mu_\text{PaKiT01}=\frac{1}{120}$) can be followed in the video below.

Example Simulation

This synced composite video shows the published result on top and the reproduced result in Morpheus at the bottom. Top: Example run of the spatial model from Brook et al. with PaKiT01 cell type, rVSV-EBOV virus and constitutive immunity, published as Video 3 (CC BY 4.0). Bottom: Example run of the spatial model in Morpheus with PaKiT01 cell type, rVSV-EBOV virus and constitutive immunity. To run this combination with the present model.xml, change the three select... constants in the Morpheus GUI from (1,1,1) to (3,2,3). As we randomly initialize $10$ among $10^{4}$ cells as exposed (according to $\mathrm{MOI} = 0.001$), those positions and the shapes of the ensuing waves will occur differently each time and do not match the published video. Color code for cells and curves roughly matches that of the publication, see common color legend at the right margin.

Reference

This model reproduces a published result, originally obtained with a different simulator:

C. E. Brook, M. Boots, K. Chandran, A. P. Dobson, C. Drosten, A. L. Graham, B. T. Grenfell, M. A. Müller, M. Ng, L.-F. Wang, A. van Leeuwen: Accelerated viral dynamics in bat cell lines, with implications for zoonotic emergence. eLife 9: e48401, 2020.

Model

Get this model via:

XML Preview

<?xml version='1.0' encoding='UTF-8'?>
<MorpheusModel version="4">
    <Description>
        <Details>Full title:	Viral dynamics in monkey and bat cell lines
Date:	15.06.2022
Authors:	Cara E Brook, Mike Boots, Kartik Chandran, Andrew P Dobson, Christian Drosten, Andrea L Graham, Bryan T Grenfell, Marcel A Müller, Melinda Ng, Lin-Fa Wang, Anieke van Leeuwen
Contributors: Chetan Munegowda, Madina Japakhova, Shanya Singhal, Justin Bürger, Cara E Brook, Lutz Brusch
Software:	Morpheus (open-source), download from https://morpheus.gitlab.io
Time unit:      hours post infection
Space unit:    lattice interval corresponds to cell size
ModelID:	https://identifiers.org/morpheus/M7677
Reference:	This model reproduces the results in this publication which were originally obtained with a different simulator:
	Brook et al. (2020) Accelerated viral dynamics in bat cell lines, with implications for zoonotic emergence. eLife 9:e48401.
	https://doi.org/10.7554/eLife.48401</Details>
        <Title>Viral Dynamics</Title>
    </Description>
    <Space>
        <Lattice class="hexagonal">
            <Neighborhood>
                <Order>5</Order>
            </Neighborhood>
            <Size symbol="size" value="110, 127, 0"/>
            <BoundaryConditions>
                <Condition type="periodic" boundary="x"/>
                <Condition type="constant" boundary="y"/>
            </BoundaryConditions>
        </Lattice>
        <SpaceSymbol symbol="space"/>
    </Space>
    <Time>
        <StartTime value="0"/>
        <StopTime value="200"/>
        <TimeSymbol symbol="time" name="Time [hours post infection]"/>
        <RandomSeed value="0"/>
    </Time>
    <CellTypes>
        <CellType name="infectious" class="biological">
            <ChangeCellType newCellType="dead" name="Natural death of infectious cells" time-step="dt">
                <Condition>time > (t_birth+tau_mu)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="dead" name="Death of infectious cells due to lysis" time-step="dt">
                <Condition>time > (t_start+tau_alpha)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <Property symbol="tau_mu" value="rand_norm(1/mu,1/mu/2)"/>
            <Property symbol="tau_alpha" value="rand_norm(1/alpha,1/alpha/4)"/>
            <Property symbol="t_start" value="0.0"/>
            <Property symbol="t_birth" value="0.0"/>
        </CellType>
        <CellType name="dead" class="biological">
            <Property symbol="cDS" value="0.0" name="cDS"/>
            <Property symbol="cDA" value="0.0" name="cDA"/>
            <Property symbol="cSS" value="0.0" name="cSS"/>
            <NeighborhoodReporter name="cDS" time-step="dt">
                <Input value="(sqrt((cell.center.x-local.cell.center.x)^2+(cell.center.y-local.cell.center.y)^2)&lt;1.5)*(cell.type == celltype.susceptible.id)/6" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="sum" symbol-ref="cDS"/>
            </NeighborhoodReporter>
            <NeighborhoodReporter name="cDA" time-step="dt">
                <Input value="(sqrt((cell.center.x-local.cell.center.x)^2+(cell.center.y-local.cell.center.y)^2)&lt;1.5)*(cell.type == celltype.antiviral.id)/6" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="sum" symbol-ref="cDA"/>
            </NeighborhoodReporter>
            <NeighborhoodReporter name="cSS" time-step="dt">
                <Input value="cell.type == celltype.susceptible.id" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="average" symbol-ref="cSS"/>
            </NeighborhoodReporter>
            <ChangeCellType newCellType="susceptible" name="Regeneration of dead cells because of antiviral neighbour cells" time-step="dt">
                <Condition>rand_uni(0,1) &lt; (b*cDA*dt)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_epsilon">
                        <Expression>if((epsilon*cSS)>0,rand_norm(1/(epsilon*cSS),1/(epsilon*cSS)/4),100000000000)</Expression>
                    </Rule>
                    <Rule symbol-ref="t_birth">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="susceptible" name="Regeneration of dead cells because of susceptible neighbour cells" time-step="dt">
                <Condition>rand_uni(0,1) &lt; (b*cDS*dt)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_epsilon">
                        <Expression>if((epsilon*cSS)>0,rand_norm(1/(epsilon*cSS),1/(epsilon*cSS)/4),100000000000)</Expression>
                    </Rule>
                    <Rule symbol-ref="t_birth">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <Property symbol="t_start" value="0.0"/>
        </CellType>
        <CellType name="exposed" class="biological">
            <ChangeCellType newCellType="dead" name="Natural death of exposed cells" time-step="dt">
                <Condition>time > (t_birth+tau_mu)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="infectious" name="Exposed cells become infectious" time-step="dt">
                <Condition>time > (t_start+tau_sigma)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_alpha">
                        <Expression>rand_norm(1/alpha,1/alpha/4)</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <Property symbol="tau_sigma" value="rand_norm(1/sigma,1/sigma/4)"/>
            <Property symbol="tau_mu" value="rand_norm(1/mu,1/mu/2)"/>
            <Property symbol="t_start" value="0.0"/>
            <Property symbol="t_birth" value="0.0"/>
        </CellType>
        <CellType name="susceptible" class="biological">
            <Property symbol="cSI" value="0.0" name="cSI"/>
            <Property symbol="cSS" value="0.0" name="cSS"/>
            <Variable symbol="cSE" value="0.0" name="cSE"/>
            <NeighborhoodReporter name="cSI" time-step="dt">
                <Input value="cell.type == celltype.infectious.id" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="average" symbol-ref="cSI"/>
            </NeighborhoodReporter>
            <NeighborhoodReporter name="cSE" time-step="dt">
                <Input value="cell.type == celltype.exposed.id" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="average" symbol-ref="cSE"/>
            </NeighborhoodReporter>
            <NeighborhoodReporter name="cSS" time-step="dt">
                <Input value="cell.type == celltype.susceptible.id" scaling="cell" noflux-cell-medium="false"/>
                <Output mapping="average" symbol-ref="cSS"/>
            </NeighborhoodReporter>
            <ChangeCellType newCellType="dead" name="Natural death of susceptible cells" time-step="dt">
                <Condition>time > (t_birth+tau_mu)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="antiviral" name="Susceptible cells acquire induced immunity" time-step="dt">
                <Condition>rand_uni(0,1) &lt; (rho*cSE*dt)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="antiviral" name="Susceptible cells acquire constitutive immunity" time-step="dt">
                <Condition>time > (t_start+tau_epsilon)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="exposed" name="Susceptible cells gets exposed to the pathogen" time-step="dt">
                <Condition>rand_uni(0,1) &lt; (beta*cSI*dt)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_sigma">
                        <Expression>rand_norm(1/sigma,1/sigma/4)</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <Property symbol="tau_mu" value="rand_norm(1/mu,1/mu/2)"/>
            <Property symbol="tau_epsilon" value="if((epsilon*cSS)>0,rand_norm(1/(epsilon*cSS),1/(epsilon*cSS*4)),100000000000)"/>
            <Property symbol="t_start" value="0.0"/>
            <Property symbol="t_birth" value="0.0"/>
        </CellType>
        <CellType name="antiviral" class="biological">
            <ChangeCellType newCellType="dead" name="Natural death of antiviral cells" time-step="dt">
                <Condition>time > (t_birth+tau_mu)</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <ChangeCellType newCellType="susceptible" name="Antiviral cells become susceptible" time-step="dt">
                <Condition>rand_uni(0,1) &lt; c*dt</Condition>
                <Triggers>
                    <Rule symbol-ref="t_start">
                        <Expression>time</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_mu">
                        <Expression>rand_norm(1/mu,1/mu/2)</Expression>
                    </Rule>
                    <Rule symbol-ref="tau_epsilon">
                        <Expression>if(epsilon>0,rand_norm(1/epsilon,1/epsilon/4),100000000000)</Expression>
                    </Rule>
                </Triggers>
            </ChangeCellType>
            <Property symbol="tau_mu" value="rand_norm(1/mu,1/mu/2)"/>
            <Property symbol="t_start" value="0.0"/>
            <Property symbol="t_birth" value="0.0"/>
        </CellType>
        <CellType name="medium" class="medium"/>
    </CellTypes>
    <CellPopulations>
        <Population name="infectious" type="infectious" size="0">
            <InitCircle mode="random" number-of-cells="0">
                <Dimensions radius="52.0" center="75.0, 75.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="exposed" type="exposed" size="0">
            <InitCircle mode="random" number-of-cells="(MOI==0.001)*10">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="dead" type="dead" size="0">
            <InitCircle mode="random" number-of-cells="(MOI==0.001)*953">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="susceptible" type="susceptible" size="0">
            <InitCircle mode="random" number-of-cells="(MOI==0.001)*(9037+(select.celltype==3)*(select.virus==1)*(select.immunity==3)*(-4786)+(select.celltype==3)*(select.virus==2)*(select.immunity==3)*(-5351))">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="antiviral" type="antiviral" size="0">
            <InitCircle mode="random" number-of-cells="(MOI==0.001)*(0+(select.celltype==3)*(select.virus==1)*(select.immunity==3)*4786+(select.celltype==3)*(select.virus==2)*(select.immunity==3)*5351)">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="susceptible" type="susceptible" size="0">
            <InitCircle name="filling up space with susceptible cells for above conditions" mode="random" number-of-cells="(MOI==0.001)*((select.celltype!=3)*(select.virus!=2)*(select.immunity!=3)*100000)">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
        <Population name="antiviral" type="antiviral" size="0">
            <InitCircle name="filling up space with antiviral cells for above conditions" mode="random" number-of-cells="(MOI==0.001)*((select.celltype==3)*(select.virus==2)*(select.immunity==3)*100000)">
                <Dimensions radius="52.0" center="55.0, 55.0, 0.0"/>
            </InitCircle>
        </Population>
    </CellPopulations>
    <Global>
        <Constant symbol="select.celltype" value="1" name="1=Vero, 2=RoNi7.1, 3=PaKiT01"/>
        <Constant symbol="select.virus" value="1" name="1=rVSV-G, 2=rVSV-EBOV, 3=rVSV-MARV"/>
        <Constant symbol="select.immunity" value="1" name="1=absent, 2=induced, 3=constitutive"/>
        <Constant symbol="MOI" value="0.001" name="Initial infectious dose"/>
        <Constant symbol="epsilon" value="(select.celltype==3)*(select.virus==1)*(select.immunity==3)*0.006017893 + (select.celltype==3)*(select.virus==2)*(select.immunity==3)*0.04775666"/>
        <Constant symbol="rho" value="(select.celltype==2)*(select.virus==1)*(select.immunity==2)*0.088973822 + (select.celltype==2)*(select.virus==2)*(select.immunity==2)*0.036294543 + (select.celltype==2)*(select.virus==3)*(select.immunity==2)*0.017664985 + (select.celltype==3)*(select.virus==1)*(select.immunity==3)*8.25891E-08 + (select.celltype==3)*(select.virus==2)*(select.immunity==3)*4.46435E-08 + (select.celltype==3)*(select.virus==3)*(select.immunity==2)*13.14416159"/>
        <Constant symbol="mu" value="(select.celltype==1)*(1/121) + (select.celltype==2)*(1/191) + (select.celltype==3)*(1/84)">
            <Annotation>To reproduce the originally published Fig. 5 Suppl. 3, use mu=
(select.celltype==1)*(1/83) + (select.celltype==2)*(1/191) + (select.celltype==3)*(1/120)
as in the originally published simulation code.</Annotation>
        </Constant>
        <Constant symbol="mu_MF" value="(select.celltype==1)*(1/121) + (select.celltype==2)*(1/191) + (select.celltype==3)*(1/84)"/>
        <Constant symbol="alpha" value="1/6"/>
        <Constant symbol="beta_MF" value="(MOI==0.001)*((select.celltype==1)*(select.virus==1)*(select.immunity==1)*2.441842792 + (select.celltype==1)*(select.virus==2)*(select.immunity==1)*1.499584278 + (select.celltype==1)*(select.virus==3)*(select.immunity==1)*0.975158825 + (select.celltype==2)*(select.virus==1)*(select.immunity==2)*2.470464175 + (select.celltype==2)*(select.virus==2)*(select.immunity==2)*0.684901882 + (select.celltype==2)*(select.virus==3)*(select.immunity==2)*1.233417847 + (select.celltype==3)*(select.virus==1)*(select.immunity==3)*3.451642437 + (select.celltype==3)*(select.virus==2)*(select.immunity==3)*34.48214995 + (select.celltype==3)*(select.virus==3)*(select.immunity==2)*3.24521928)"/>
        <Constant symbol="beta" value="beta_MF*10"/>
        <Constant symbol="b_MF" value="0.025"/>
        <Constant symbol="b" value="b_MF*6"/>
        <Constant symbol="c" value="0"/>
        <Constant symbol="sigma" value="(select.celltype==1)*(select.virus==1)*(select.immunity==1)*0.119284294 + (select.celltype==1)*(select.virus==2)*(select.immunity==1)*0.141509434 + (select.celltype==1)*(select.virus==3)*(select.immunity==1)*0.104347826 + (select.celltype==2)*(select.virus==1)*(select.immunity==2)*0.125 + (select.celltype==2)*(select.virus==2)*(select.immunity==2)*0.148883375 + (select.celltype==2)*(select.virus==3)*(select.immunity==2)*0.147420147 + (select.celltype==3)*(select.virus==1)*(select.immunity==3)*0.139534884 + (select.celltype==3)*(select.virus==2)*(select.immunity==3)*0.165745856 + (select.celltype==3)*(select.virus==3)*(select.immunity==2)*0.155844156"/>
        <Constant symbol="N_total" value="10000" name="total number of cells required"/>
        <Function symbol="N" name="total number of cells">
            <Expression>celltype.antiviral.size+celltype.dead.size+celltype.exposed.size+celltype.infectious.size+celltype.susceptible.size</Expression>
        </Function>
        <Function symbol="N_SAE" name="total number of live, uninfectious cells">
            <Expression>celltype.antiviral.size+celltype.exposed.size+celltype.susceptible.size</Expression>
        </Function>
        <Constant symbol="dt" value="1/6" name="dt"/>
        <System solver="Dormand-Prince [adaptive, O(5)]" time-step="1/6">
            <DiffEqn symbol-ref="P_S">
                <Expression>b_MF*P_D*(P_S+P_A)-beta_MF*P_S*P_I-mu_MF*P_S-rho*P_E*P_S-epsilon*P_S+c*P_A</Expression>
            </DiffEqn>
            <DiffEqn symbol-ref="P_A">
                <Expression>rho*P_E*P_S+epsilon*P_S-c*P_A-mu_MF*P_A</Expression>
            </DiffEqn>
            <DiffEqn symbol-ref="P_E">
                <Expression>beta_MF*P_S*P_I-sigma*P_E-mu_MF*P_E</Expression>
            </DiffEqn>
            <DiffEqn symbol-ref="P_I">
                <Expression>sigma*P_E-alpha*P_I-mu_MF*P_I</Expression>
            </DiffEqn>
            <DiffEqn symbol-ref="P_D">
                <Expression>mu_MF*(P_S+P_E+P_I+P_A)+alpha*P_I-b_MF*P_D*(P_S+P_A)</Expression>
            </DiffEqn>
        </System>
        <Variable symbol="P_I" value="0" name="P_I"/>
        <Variable symbol="P_E" value="(1-exp(-MOI))*0.9" name="P_E"/>
        <Variable symbol="P_D" value="0.1" name="P_D"/>
        <Variable symbol="P_S_DFE" value="((b_MF-mu_MF)*(c+mu_MF))/(b_MF*(c+mu_MF+epsilon))" name="P_S_DFE"/>
        <Variable symbol="P_A_DFE" value="epsilon*P_S_DFE/(c+mu_MF)" name="P_A_DFE"/>
        <Variable symbol="P_S" value="(epsilon==0)*(1-P_E-P_D)+(epsilon>0)*(P_S_DFE &lt; P_A_DFE)*((0.9-(1-exp(-MOI)))/(1+P_A_DFE/P_S_DFE))+(epsilon>0)*(P_S_DFE >= P_A_DFE)*(1-P_E-P_A_DFE-P_D)" name="P_S"/>
        <Variable symbol="P_A" value="(epsilon==0)*(0)+(epsilon>0)*(P_S_DFE &lt; P_A_DFE)*((0.9-(1-exp(-MOI))) - P_S)+(epsilon>0)*(P_S_DFE >= P_A_DFE)*(P_A_DFE)" name="P_A"/>
        <Function symbol="P_total">
            <Expression>P_S+P_A+P_E+P_I+P_D</Expression>
        </Function>
        <Function symbol="P_SAE">
            <Expression>P_S+P_A+P_E</Expression>
        </Function>
        <Function symbol="R0_MF" name="reproduction number">
            <Expression>(beta_MF*sigma*(b_MF-mu_MF)*(c+mu_MF))/(b_MF*(sigma+mu_MF)*(alpha+mu_MF)*(c+mu_MF+epsilon)) </Expression>
        </Function>
        <Function symbol="R_eff_MF" name="effective reproduction number">
            <Expression>R0_MF * P_S</Expression>
        </Function>
        <Constant symbol="antiviral_rate" value="rho*P_E*P_S-epsilon*P_S"/>
        <Constant symbol="plot_helper" value="-1" name="plot_helper"/>
    </Global>
    <Analysis>
        <Gnuplotter time-step="1">
            <Plot title="A. Cell space">
                <Cells value="cell.type">
                    <ColorMap>
                        <Color value="0" color="red"/>
                        <Color value="1" color="dark-violet"/>
                        <Color value="2" color="orange"/>
                        <Color value="3" color="dark-green"/>
                        <Color value="4" color="skyblue"/>
                        <Color value="5" color="white"/>
                    </ColorMap>
                </Cells>
            </Plot>
            <Terminal name="png"/>
        </Gnuplotter>
        <Logger time-step="dt">
            <Input>
                <Symbol symbol-ref="antiviral_rate"/>
                <Symbol symbol-ref="R0_MF"/>
            </Input>
            <Output>
                <TextOutput/>
            </Output>
            <Plots>
                <Plot time-step="1" title="B. Time series">
                    <Style style="points" decorate="false"/>
                    <Terminal terminal="png"/>
                    <X-axis maximum="200" minimum="0">
                        <Symbol symbol-ref="time"/>
                    </X-axis>
                    <Y-axis maximum="10000" minimum="0">
                        <Symbol symbol-ref="celltype.dead.size"/>
                        <Symbol symbol-ref="celltype.susceptible.size"/>
                        <Symbol symbol-ref="celltype.antiviral.size"/>
                        <Symbol symbol-ref="celltype.exposed.size"/>
                        <Symbol symbol-ref="N_SAE"/>
                        <Symbol symbol-ref="plot_helper"/>
                        <Symbol symbol-ref="celltype.infectious.size"/>
                    </Y-axis>
                </Plot>
                <Plot>
                    <Style style="points" decorate="true"/>
                    <Terminal terminal="png"/>
                    <X-axis>
                        <Symbol symbol-ref="time"/>
                    </X-axis>
                    <Y-axis>
                        <Symbol symbol-ref="P_D"/>
                        <Symbol symbol-ref="P_S"/>
                        <Symbol symbol-ref="P_A"/>
                        <Symbol symbol-ref="P_E"/>
                        <Symbol symbol-ref="P_SAE"/>
                        <Symbol symbol-ref="R_eff_MF"/>
                        <Symbol symbol-ref="P_I"/>
                    </Y-axis>
                </Plot>
            </Plots>
        </Logger>
        <ModelGraph format="svg" include-tags="#untagged" reduced="false"/>
    </Analysis>
</MorpheusModel>

Model Graph
Model Graph

Downloads

Files associated with this model:

Previous
Next