Liver Regeneration from CCl4

Persistent Identifier

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

Hepatocyte–sinusoid alignment (HSA) supports the coordination of hepatocytes during liver regeneration after damage by carbon tetrachloride.

Introduction

The regenerative capacity of the mammalian liver did already inspire the fate of Prometheus in Greek Myth but it still poses many questions today that call for spatio-temporal multicellular modeling. In the experimental paradigm of CCl4 intoxication of mice, hepatocytes around the central vein (located in the center of an idealized hexagonal liver lobule) are dying and are subsequently replaced by new hepatocytes, largely through activation of proliferation in the remaining hepatocytes, as depicted in the light microscopy images in Fig. 1 below.

Alignment of daughter hepatocytes along the orientation of the closest sinusoid, a process which is named hepatocyte-sinusoid alignment (HSA), was proposed by Höhme et al. as necessary mechanism to restore the layered tissue microarchitecture. Alternative hypotheses could not explain the experimental data as well.

Originally, Höhme et al. employed a center-based model. Here, using the same processes and parameter values wherever possible, the published rersults are reproduced quantitatively by a cellular Potts model (CPM).

Figure 1. Mouse liver lobules visualized under light microscopy. (A) Control, (B) $t = 2\ \mathrm{d}$, (C) $t = 4\ \mathrm{d}$, and (D) $t = 8\ \mathrm{d}$ after administration of CCl4. ([©](https://www.pnas.org/about/rights-permissions) [**Höhme _et al._**](#reference), [Fig. 2A-D](https://www.pnas.org/doi/full/10.1073/pnas.0909374107#F2))
Figure 1. Mouse liver lobules visualized under light microscopy. (A) Control, (B) $t = 2\ \mathrm{d}$, (C) $t = 4\ \mathrm{d}$, and (D) $t = 8\ \mathrm{d}$ after administration of CCl4. (© Höhme et al., Fig. 2A-D)

Description

The model captures all hepatocytes of a mouse liver lobule during a 16-day regeneration process. The spatial initialization of the lobule including the hexagonal shape, medium, hepatocytes, central vein (CV) and portal veins (PV) was inspired by a two-dimensional human liver model originally modeled in MorpheusML by Heldring et al., 2022. While the original model by Höhme et al. is three-dimensional, we here focus on a cross section plane and have to scale cell numbers etc. from the original volume to the cross section area. Also, the radially oriented sinusoidal objects can only be incorporated in a three-dimensional model and are omitted in the two-dimensional model. The remaining space is filled by hepatocytes.

Although a regular Hexagon with noflux boundary conditions was used in the present MorpheusML model, arbitrary lobule geometries as described by Höhme et al. and shown e.g. in SI Movie S12 may also be easily defined in MorpheusML by using a custom domain Expression or domain Image.

Parameters from SI Appendix Tab. 6 by Höhme et al. were adjusted accordingly:

Parameter Symbol (Lit.) Value (Lit.) Location in MorpheusML
Lobule radius $R$ $284.3\ \mathrm{\mu m}$ Hexagon
Radius of necrotic lesion before regeneration $R_\mathrm{nec}$ $149\ \mathrm{\mu m}$ hepatocyte.lesion.radius
Central vein radius $41.2\ \mathrm{\mu m}$ Sphere
Hepatocyte diameter $l_\mathrm{Cell}$ $23.3\ \mathrm{\mu m}$ VolumeConstraint
Intrinsic cell cycle time $\tau$  $24\ \mathrm{h}$ hepatocyte.time_span.cell_cycle
Morphogen diffusion coefficient $D_\mathrm{M}$ $10^{-6}\ \frac{\mathrm{cm}^2}{\mathrm{s}}$ Diffusion¹

¹Diffusion rate set smaller than in Höhme et al. ($\frac{1}{100}$ of the lit. value) to significantly reduce simulation runtime.

To simulate damage from CCl4, a circular necrotic lesion was imposed by a CellDeath rule. The units of the variables are chosen as $[\mathrm{time}] = 1\ \mathrm{d}$ and $[\mathrm{space}] = 3\ \mathrm{\mu m}$.

Four mechanisms are considered that drive liver regeneration after damage by CCl4:

  • A time and distance-dependent proliferation response as measured from BrdU incorporation experiments and shown in Fig. 2 below (hepatocyte.proliferation_p),
  • cell-cell adhesion such that adjacent polar hepatocytes only form adhesive bonds at their apical sides (HomophilicAdhesion),
  • active chemotactic migration of hepatocytes in a field of diffusible factors that emanate from the necrotic lesion (Chemotaxis), and
  • „hepatocyte-sinusoid alignment” (HSA): Daughter cells from hepatocyte division align along the closest sinusoid (CellDivision).
Figure 2. Distribution of BrdU-positive cells in the liver lobule ([©](https://www.pnas.org/about/rights-permissions) [**Höhme _et al._**](#reference), [Fig. 2E](https://www.pnas.org/doi/full/10.1073/pnas.0909374107#F2))
Figure 2. Distribution of BrdU-positive cells in the liver lobule (© Höhme et al., Fig. 2E)

The interesting mechanism HSA is implemented in MorpheusML as oriented CellDivision following the (radial) sinusoidal vector field. This (arbitrary) vector field can alternatively be imported from experimental data. Moreover, hepatocytes possess anisotropic apical adhesion and this is implemented in MorpheusML through a field of adhesion molecule density (a MembraneProperty with highest values at apical domains) along the dynamically reshaping and moving membranes of each hepatocyte.

Results

Published results by Höhme et al. from the center-based model are shown in Figs. 3 and 4 and Video 1. Reproduced results from the cellular Potts model are shown in Video 1, Video 2 and Fig. 5. These simulation results match with the published results.

Video 1. Simulation by Höhme et al. (left, © Höhme et al., SI Movie S9) and Morpheus simulation (right) reproducing the published result showing the regeneration process with anisotropic apical adhesion, active directed migration and orientation of the hepatocytes after cell division along the closest sinusoid. Red: CV, blue: PVs, light orange: hepatocytes, orange: pericentral hepatocytes, beige: necrotic hepatocytes, light red: proliferating (left video) or daughter (right video) hepatocytes.
Figure 3. Liver lobule with maximal necrotic lesion $2\ \mathrm{d}$ after administration of CCl4 (red: layer 1 in direct contact with necrosis, green: layer 2 etc.) ([©](https://www.pnas.org/about/rights-permissions) [**Höhme _et al._**](#reference), [SI Fig. 2B](https://www.pnas.org/doi/full/10.1073/pnas.0909374107#supplementary-materials))
Figure 3. Liver lobule with maximal necrotic lesion $2\ \mathrm{d}$ after administration of CCl4 (red: layer 1 in direct contact with necrosis, green: layer 2 etc.) (© Höhme et al., SI Fig. 2B)
Video 2. Morpheus simulation with tangential apical polarization and anisotropic HomophilicAdhesion, Chemotaxis towards the centrilobular dead cell area and oriented cell division during regeneration from CCl4 induced liver damage. The top left panel shows the layer index with the same color code as in Fig. 3, the top right panel indicated the proliferation index with the same color code as in Fig. 2, in the bottom left panel the apical membrane domains (in light green) are shown and the bottom right panel visualizes the concentration profile of the chemoattractant that emanates from the necrotic lesion.

To quantitatively compare the results from both model formalisms, the pericentral necrotic lesion area was measured in paired simulations. This area reaches its maximum at $t = 1\ \mathrm{d}$ in both models and follows a very similar time course in the published data from the center-based model in Fig. 4 and the reproduced CPM model in Fig. 5.

Figure 4. Simulation by [**Höhme _et al._**](#reference) Area of central necrosis with the experiment (green box plot) and the simulation (green graph, ‘Model 3’) in comparison. ‘Model 3’ combines all regeneration mechanisms discussed [above](#desc-regeneration-mechanisms), whereas submodels ‘Model 2’ (without HSA) and ‘Model 1’ (including growth dynamics, but with unspecific homogeneous isotropic adhesion, and neither chemotaxis nor HSA) by [Höhme _et al._](#reference) are not compared in the here presented MorpheusML implementation. ([©](https://www.pnas.org/about/rights-permissions) [**Höhme _et al._**](#reference), [Fig. 3E](https://www.pnas.org/doi/full/10.1073/pnas.0909374107#F3))
Figure 4. Simulation by Höhme et al. Area of central necrosis with the experiment (green box plot) and the simulation (green graph, ‘Model 3’) in comparison. ‘Model 3’ combines all regeneration mechanisms discussed above, whereas submodels ‘Model 2’ (without HSA) and ‘Model 1’ (including growth dynamics, but with unspecific homogeneous isotropic adhesion, and neither chemotaxis nor HSA) by Höhme et al. are not compared in the here presented MorpheusML implementation. (© Höhme et al., Fig. 3E)
Figure 5. Morpheus Simulation. Time course of the necrotic lesion in Morpheus' CPM simulation (purple curve) compared to the experimental data from [Höhme _et al._](#reference) (green bars)
Figure 5. Morpheus Simulation. Time course of the necrotic lesion in Morpheus' CPM simulation (purple curve) compared to the experimental data from Höhme et al. (green bars)

Reference

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

S. Höhme, M. Brulport, A. Bauer, E. Bedawy, W. Schormann, M. Hermes, V. Puppe, R. Gebhardt, S. Zellmer, M. Schwarz, E. Bockamp, T. Timmel, J. G. Hengstler, D. Drasdo: Prediction and validation of cell alignment along microvessels as order principle to restore tissue architecture in liver regeneration. PNAS 107 (23): 10371–10376, 2010.

Model

Get this model via:

  • Morpheus-Link or
  •  Download: M9147_liver-regeneration_model.xml
  • XML Preview

    <?xml version='1.0' encoding='UTF-8'?>
    <MorpheusModel version="4">
        <Time>
            <StartTime value="0"/>
            <StopTime value="4752">
                <Annotation>[time] = 5 min, i. e. 288 time units correspond to 24 h; total time (StopTime) of 4752 units gives 0.5 d initialization time + 16 d dynamics (1 d cell death phase after CCl_4 administration + 7 d regeneration time)</Annotation>
            </StopTime>
            <!--    <Disabled>
            <SaveInterval value="144">
                <Annotation>Save checkpoint after 0.5 d</Annotation>
            </SaveInterval>
        </Disabled>
    -->
            <TimeSymbol symbol="time" name="time"/>
            <RandomSeed value="0"/>
        </Time>
        <Description>
            <Title>M9147: Liver Regeneration</Title>
            <Details>Model ID:		https://identifiers.org/morpheus/M9147
    Title:		Liver Regeneration from CCl4
    Authors:		S. Höhme, M. Brulport, A. Bauer, E. Bedawy, W. Schormann, M. Hermes, V. Puppe, R. Gebhardt, S. Zellmer, M. Schwarz, E. Bockamp, T. Timmel, J. G. Hengstler, D. Drasdo
    Submitters:		D. Jahn, L. Brusch
    Curators:		D. Jahn, L. Brusch
    Date:		12.04.2024
    Software:		Morpheus (open source). Download from: https://morpheus.gitlab.io
    Units:		[time] = 1 d
    		[space] = 3 µm
    Reference:		This model reproduces a published result, originally obtained with a different simulator:
    		S. Höhme, M. Brulport, A. Bauer, E. Bedawy, W. Schormann, M. Hermes, V. Puppe, R. Gebhardt, S. Zellmer, M. Schwarz, E. Bockamp, T. Timmel, J. G. Hengstler, D. Drasdo: Prediction and validation of cell alignment along microvessels as order principle to restore tissue architecture in liver regeneration. PNAS 107 (23): 10371-10376, 2010.
    		https://doi.org/10.1073/pnas.0909374107
    </Details>
        </Description>
        <Space>
            <SpaceSymbol symbol="l" name="location"/>
            <Lattice class="hexagonal">
                <Size symbol="size" value="200, 200, 0"/>
                <BoundaryConditions>
                    <Condition type="noflux" boundary="x"/>
                    <Condition type="noflux" boundary="y"/>
                </BoundaryConditions>
                <Neighborhood>
                    <Order>2</Order>
                </Neighborhood>
                <Annotation>Lobule radius in 2D slice (lit.): 284.3 µm
    Hexagon diameter: 284.3 µm * 2 / node.length = 190</Annotation>
                <Domain boundary-type="noflux">
                    <Hexagon diameter="190"/>
                </Domain>
                <NodeLength symbol="um" value="3"/>
            </Lattice>
            <MembraneLattice>
                <Resolution value="100"/>
                <SpaceSymbol symbol="membrane"/>
            </MembraneLattice>
        </Space>
        <Global>
            <Constant symbol="apical.polarization" tags="CCl4, HCC" value="0">
                <Annotation>0: tangential
    1: radial</Annotation>
            </Constant>
            <Constant symbol="node.length" name="Lattice node length in µm" value="3"/>
            <Constant symbol="node.volume" value="node.length^2 * sqrt(3)/2 * 10^-6"/>
            <Constant symbol="time_span.day" value="12 * 24">
                <Annotation>Factor to scale time from 5 min steps to 1 d</Annotation>
            </Constant>
            <Function symbol="time.days" name="Time in days">
                <Expression>time/time_span.day</Expression>
            </Function>
            <Function symbol="time.regeneration" name="Time after CCl_4 administration [d]" tags="CCl4">
                <Annotation>Time in days excluding initialization time (0 ≤ t ≤ time.cell_death). Used for plotting.</Annotation>
                <Expression>time.days - hepatocyte.time.death_start</Expression>
            </Function>
            <ConstantVector symbol="size.physical" tags="CCl4, HCC" value="size.x, size.y * sqrt(3)/2, size.z"/>
            <VectorField symbol="sinusoid" tags="CCl4, HCC" value="l - size.physical/2"/>
            <Constant symbol="membrane.apical" tags="CCl4" value="0.0">
                <Annotation>Default value for apical adhesive. Value is set per CellType.</Annotation>
            </Constant>
            <Constant symbol="hepatocyte.contactEnergy" value="-0.5">
                <Annotation>Common value for all contact energies with hepatocytes involved</Annotation>
            </Constant>
            <Constant symbol="hepatocyte.adhesionStrength" value="1.0">
                <Annotation>Common value for //CPM/Interaction/Contact/HomophilicAdhesion/@strength of all possible hepatocyte interactions</Annotation>
            </Constant>
            <Field symbol="c" name="Chemoattractant" tags="CCl4" value="0">
                <Annotation>Diffusion constant converted from cm^2/s to 3 µm^2/5 min:
    
    10e-6 cm^2/s = 10e-6 * (10^4)^2 µm^2/s = 10e-6 * (10^4)^2 / 3^2 (3 µm)^2/s  = 10^-6 * 10^8 / 9 * 300 (3 µm)^2/5 min = 3333.3</Annotation>
                <Diffusion rate="33"/>
            </Field>
            <Field symbol="hepatocyte.lesion.pattern" name="Hepatocyte lesion pattern" tags="CCl4" value="false"/>
            <Field symbol="hepatocyte.lesion.pattern_including_cv" name="Hepatocyte lesion pattern plus CV cross section" tags="CCl4" value="false"/>
            <Constant symbol="c.decay" tags="CCl4" value="0">
                <Annotation>Global initialization of decay rate. Actual CCl4 depletion occurs only in CellType 'hepatocytes'.</Annotation>
            </Constant>
            <System time-step="mcs_duration" name="CCl4 input and induced morphogen formation, diffusion and depletion" solver="Bogacki-Shampine [adaptive, O(3)]" tags="CCl4">
                <Rule symbol-ref="hepatocyte.lesion.pattern" tags="CCl4">
                    <Expression>cell.type ==  celltype.medium.id</Expression>
                </Rule>
                <Rule symbol-ref="hepatocyte.lesion.pattern_including_cv" tags="CCl4">
                    <Expression>cell.type ==  celltype.medium.id or cell.type == celltype.CV.id</Expression>
                </Rule>
                <Constant symbol="c.target" tags="CCl4" value="1"/>
                <DiffEqn symbol-ref="c" tags="CCl4">
                    <Expression>-c.decay*c + (c.target-c)*hepatocyte.lesion.pattern_including_cv</Expression>
                </DiffEqn>
            </System>
            <Constant symbol="c.mean_per_cell" tags="CCl4" value="0.0"/>
            <Field symbol="c.mean_per_cell.field" tags="CCl4" value="0.0"/>
            <Constant symbol="hepatocyte.location.has_contact_to_lesion" name="Contact state to lesion" value="0.0"/>
            <Constant symbol="hepatocyte.layer.self" value="0"/>
            <Constant symbol="hepatocyte.layer.neighbor" value="0"/>
            <Constant symbol="hepatocyte.time_span.cell_cycle" name="tau" tags="CCl4, HCC" value="1">
                <Annotation>Time of one cell cycle in days.</Annotation>
            </Constant>
            <Constant symbol="hepatocyte.time.death_start" tags="CCl4" value="0.5">
                <Annotation>Initialization time in days (time of CCl4 administration and full formation of the necrotic lesion).</Annotation>
            </Constant>
            <Constant symbol="hepatocyte.time.death_end" value="hepatocyte.time.death_start + hepatocyte.time_span.death"/>
            <Constant symbol="hepatocyte.time_span.death" value="1"/>
            <Constant symbol="hepatocyte.proliferation_scaling" value="1.0"/>
            <Constant symbol="hepatocyte.time_span.proliferation" value="2.9">
                <Annotation>Proliferation window</Annotation>
            </Constant>
            <Constant symbol="hepatocyte.lesion.radius" value="(149 + 23.3/2) / node.length">
                <Annotation>Radius of necrotic lesion before regeneration in NodeLengths.
    
    149 µm = 149/3 NodeLengths (equivalent to 6.4 hepatocytes)</Annotation>
            </Constant>
            <Variable symbol="hepatocyte.lesion.nodes" value="0.0"/>
            <Mapper>
                <Annotation>Determine area of necrotic lesion by counting the nodes.</Annotation>
                <Input value="hepatocyte.lesion.pattern"/>
                <Output symbol-ref="hepatocyte.lesion.nodes" mapping="sum"/>
            </Mapper>
            <Function symbol="hepatocyte.lesion.area" name="Area of necrotic lesion [mm^2]">
                <Annotation>Convert lesion nodes to lesion area in mm^2.
    
    Node area: (3 µm)^2 = 9 µm^2
    Conversion: 1 node = 9 * 10^-6 mm^2
    
    Area of necrotic lesion before regeneration (lit.): 0.073 mm^2</Annotation>
                <Expression>hepatocyte.lesion.nodes * node.volume</Expression>
            </Function>
            <Function symbol="hepatocyte.lesion.area_exp" name="Experiment [mm^2]">
                <Annotation>Contains the experimental values for calculating the deviations of the simulation and displaying these values in Gnuplotter.</Annotation>
                <Expression>piecewise(0.002, time.regeneration >= -0.25 &amp;&amp; time.regeneration &lt;= 0.25,
    0.075, time.regeneration >= 0.75 &amp;&amp; time.regeneration &lt;= 1.25,
    0.061, time.regeneration >= 1.75 &amp;&amp; time.regeneration &lt;= 2.25,
    0.037, time.regeneration >= 2.75 &amp;&amp; time.regeneration &lt;= 3.25,
    0.016, time.regeneration >= 3.75 &amp;&amp; time.regeneration &lt;= 4.25,
    0.003, time.regeneration >= 6.75 &amp;&amp; time.regeneration &lt;= 7.25,
    0.004, time.regeneration >= 7.75 &amp;&amp; time.regeneration &lt;= 8.25, 
    0.002, time.regeneration >= 15.75 &amp;&amp; time.regeneration &lt;= 16.25, 0)</Expression>
            </Function>
            <Variable symbol="hepatocyte.lesion.area_error" name="Error of Lesion Area [mm^4]" value="0.0"/>
            <Event trigger="when-true" time-step="0.25 * time_span.day">
                <Annotation>Sum up square deviations from experimental values.</Annotation>
                <Condition>rint(time.regeneration*10)/10 == 0.0 || rint(time.regeneration*10)/10 == 1.0 || rint(time.regeneration*10)/10 == 2.0 || rint(time.regeneration*10)/10 == 3.0 || rint(time.regeneration*10)/10 == 4.0 || rint(time.regeneration*10)/10 == 7.0 || rint(time.regeneration*10)/10 == 8.0 || rint(time.regeneration*10)/10 == 16.0</Condition>
                <Rule symbol-ref="hepatocyte.lesion.area_error">
                    <Expression>hepatocyte.lesion.area_error + (hepatocyte.lesion.area_exp - hepatocyte.lesion.area)^2</Expression>
                </Rule>
            </Event>
            <Variable symbol="cell.color" tags="CCl4" value="0"/>
        </Global>
        <CellTypes>
            <CellType class="medium" name="medium" tags="CCl4, HCC"/>
            <CellType class="biological" name="CV" tags="CCl4, HCC">
                <FreezeMotion tags="CCl4, HCC">
                    <Condition>1</Condition>
                </FreezeMotion>
                <Constant symbol="cell.color" value="4">
                    <Annotation>Set CV color to 5 (medium-blue) to match Höhme et al., SI Movie S9.</Annotation>
                </Constant>
            </CellType>
            <CellType class="biological" name="PV" tags="CCl4, HCC">
                <FreezeMotion tags="CCl4, HCC">
                    <Condition>1</Condition>
                </FreezeMotion>
                <Constant symbol="cell.color" value="5">
                    <Annotation>Set PV color to 4 (light-red) to match Höhme et al., SI Movie S9.</Annotation>
                </Constant>
            </CellType>
            <CellType class="biological" name="hepatocytes" tags="CCl4, HCC">
                <Property symbol="hepatocyte.time.birth" tags="CCl4" value="-hepatocyte.time_span.cell_cycle"/>
                <VolumeConstraint target="pi * (0.5*23.3/node.length)^2 / (sqrt(3)/2)" name="Target area (2D)" strength="1" tags="CCl4">
                    <Annotation>Cell diameter (lit.): 23.3 µm
    
    </Annotation>
                </VolumeConstraint>
                <SurfaceConstraint target="1" name="Target perimenter (2D)" strength="1" tags="CCl4" mode="aspherity"/>
                <Constant symbol="c.decay" tags="CCl4" value="0.004">
                    <Annotation>CCl4 depletion occurs only in hepatocytes, i.e. CCl4 decay rate is 0 at in all other locations.</Annotation>
                </Constant>
                <Property symbol="c.mean_per_cell" name="Mean morphogen concentration per cell" tags="CCl4" value="0.0"/>
                <Mapper tags="CCl4">
                    <Input value="c"/>
                    <Output symbol-ref="c.mean_per_cell" mapping="average"/>
                    <Output symbol-ref="c.mean_per_cell.field" mapping="average"/>
                </Mapper>
                <PropertyVector symbol="hepatocyte.sinusoid_mean" tags="CCl4" value="0.0, 0.0, 0.0"/>
                <VectorMapper tags="CCl4, HCC">
                    <Input value="sinusoid"/>
                    <Output symbol-ref="hepatocyte.sinusoid_mean" mapping="average"/>
                </VectorMapper>
                <MembraneProperty symbol="membrane.apical" tags="CCl4" value="0">
                    <Diffusion rate="0.0"/>
                </MembraneProperty>
                <Equation symbol-ref="membrane.apical" tags="CCl4, HCC">
                    <Annotation>Assign the value "1" to the MembraneProperty on apical sides (± 45°; ± π/4) of the hepatocytes. Needed for homophilic adhesion.
    
    - Use cos() version for apical sides perpendicular to sinusoids (tangential).
    - Use sin() version for apical sides parallel to sinusoids (radial).</Annotation>
                    <Expression>apical.polarization == 0 ? (abs(cos(membrane.phi - hepatocyte.sinusoid_mean.phi)) &lt;= sin(pi/4) ? 1 : 0) : (abs(sin(membrane.phi - hepatocyte.sinusoid_mean.phi)) &lt;= sin(pi/4) ? 1 : 0)</Expression>
                </Equation>
                <Property symbol="hepatocyte.time.death" tags="CCl4" value="-1"/>
                <Equation symbol-ref="hepatocyte.time.death">
                    <Annotation>Assign death times to all hepatocytes within lesion radius.</Annotation>
                    <Expression>if(time.days >= hepatocyte.time.death_start &amp;&amp; time.days &lt; hepatocyte.time.death_end &amp;&amp; hepatocyte.sinusoid_mean.abs &lt;= hepatocyte.lesion.radius &amp;&amp; hepatocyte.time.death == -1, rand_uni(time.days, hepatocyte.time.death_end), hepatocyte.time.death)</Expression>
                </Equation>
                <CellDeath tags="CCl4">
                    <Condition>hepatocyte.time.death > -1 &amp;&amp; time.days >= hepatocyte.time.death</Condition>
                </CellDeath>
                <Chemotaxis strength="10" tags="CCl4, HCC" field="c"/>
                <Property symbol="hepatocyte.location.has_contact_to_lesion" tags="CCl4" value="0.0"/>
                <NeighborhoodReporter tags="CCl4">
                    <Input scaling="cell" value="(cell.type == celltype.medium.id) &amp;&amp; (local.hepatocyte.sinusoid_mean.abs &lt; 0.5*size.physical.abs/2)"/>
                    <Output symbol-ref="hepatocyte.location.has_contact_to_lesion" mapping="maximum"/>
                </NeighborhoodReporter>
                <Property symbol="hepatocyte.layer.self" name="Order of hepatocyte layers" tags="CCl4" value="+1000"/>
                <Property symbol="hepatocyte.layer.neighbor" tags="CCl4" value="+1000"/>
                <NeighborhoodReporter time-step="1.0" name="Neighbour's layer" tags="CCl4">
                    <Input scaling="cell" value="if(cell.type == celltype.hepatocytes.id, hepatocyte.layer.self, 5)"/>
                    <Output symbol-ref="hepatocyte.layer.neighbor" mapping="minimum"/>
                </NeighborhoodReporter>
                <System time-step="1.0" solver="Euler [fixed, O(1)]" tags="CCl4">
                    <Rule symbol-ref="hepatocyte.layer.self">
                        <Annotation>Determination of the proliferating cell layers</Annotation>
                        <Expression>if(hepatocyte.location.has_contact_to_lesion==1,1,hepatocyte.layer.neighbor+1)</Expression>
                    </Rule>
                </System>
                <Property symbol="hepatocyte.layer" name="Hepatocyte layers" tags="CCl4" value="0.0"/>
                <Property symbol="hepatocyte.proliferation_p" name="Chance of proliferation" tags="CCl4" value="0"/>
                <System time-step="12" solver="Euler [fixed, O(1)]" tags="CCl4">
                    <Rule symbol-ref="hepatocyte.proliferation_p">
                        <Annotation>Definition of the cell division probability of BrdU-positive hepatocytes depending on the the layer number.</Annotation>
                        <Expression>if(time.regeneration >= 2.9 - hepatocyte.time_span.proliferation/2 &amp;&amp; time.regeneration &lt; 2.9 + hepatocyte.time_span.proliferation/2,
    if(hepatocyte.layer.self == 1, 0.3,
    if(hepatocyte.layer.self == 2, 0.25,
    if(hepatocyte.layer.self == 3, 0.2,
    if(hepatocyte.layer.self == 4, 0.2, 0.1)))), 0)</Expression>
                    </Rule>
                </System>
                <!--    <Disabled>
            <Function symbol="hepatocyte.cell_division_time">
                <Expression internal:disabled="true">time.days > hepatocyte.time.birth + hepatocyte.time_span.cell_cycle &amp;&amp; rand_uni(0,1) &lt; (hepatocyte.proliferation_scaling*hepatocyte.proliferation_p / (time_span.day/mcs_duration))</Expression>
                <Expression>hepatocyte.proliferation_p > 0 ? hepatocyte.time.birth + hepatocyte.time_span.cell_cycle + rand_uni(0,1) *  : -1</Expression>
            </Function>
        </Disabled>
    -->
                <CellDivision orientation="hepatocyte.sinusoid_mean" trigger="on-change" write-log="celltype-csv" division-plane="oriented" name="proliferation w/ HSA" tags="CCl4, HCC">
                    <Condition>time.days > hepatocyte.time.birth + hepatocyte.time_span.cell_cycle &amp;&amp; rand_uni(0,1) &lt; (hepatocyte.proliferation_scaling*hepatocyte.proliferation_p / (time_span.day/mcs_duration))</Condition>
                    <Triggers>
                        <Rule symbol-ref="hepatocyte.time.birth">
                            <Expression>time.days</Expression>
                        </Rule>
                        <!--    <Disabled>
            <IntermediateVector symbol="hepatocyte.division_plane" value="sweep.division_plane == 0 ? hepatocyte.sinusoid_mean : rand_uni(0, 1), rand_uni(0, 1), rand_uni(0, 1)"/>
        </Disabled>
    -->
                    </Triggers>
                    <!--    <Disabled>
            <Triggers>
                <Rule symbol-ref="hepatocyte.generation">
                    <Expression>hepatocyte.generation + 1</Expression>
                </Rule>
            </Triggers>
        </Disabled>
    -->
                </CellDivision>
                <Function symbol="cell.color">
                    <Annotation>Set hepatocyte colors to match Höhme et al., SI Movie S9.
    
    Color 0 (light-salmon)	: Hepatocyte standard color
    Color 1 (tan1)	: Pericentral hepatocytes
    Color 2 (beige)	: Necrotic hepatocytes
    Color 3 (light-coral)	: Daughter hepatocytes</Annotation>
                    <Expression>piecewise(1, hepatocyte.sinusoid_mean.abs &lt;= (41.2 + 2.0*23.3) / node.length,
    2, hepatocyte.time.death > -1,
    3, time.days >= hepatocyte.time.birth &amp;&amp; time.days &lt; hepatocyte.time.birth + 0.9, 0)</Expression>
                </Function>
            </CellType>
        </CellTypes>
        <CPM>
            <Interaction default="0.0">
                <Contact type1="hepatocytes" type2="medium" value="0"/>
                <Contact type1="hepatocytes" type2="hepatocytes" value="hepatocyte.contactEnergy">
                    <HomophilicAdhesion strength="hepatocyte.adhesionStrength" adhesive="membrane.apical" tags="CCl4, HCC"/>
                </Contact>
                <Contact type1="hepatocytes" type2="CV" value="hepatocyte.contactEnergy"/>
                <Contact type1="hepatocytes" type2="PV" value="hepatocyte.contactEnergy"/>
            </Interaction>
            <MonteCarloSampler stepper="edgelist">
                <MCSDuration symbol="mcs_duration" value="10.0"/>
                <Neighborhood>
                    <Order>2</Order>
                </Neighborhood>
                <MetropolisKinetics temperature="0.4"/>
            </MonteCarloSampler>
            <ShapeSurface scaling="norm">
                <Neighborhood>
                    <Order>3</Order>
                </Neighborhood>
            </ShapeSurface>
        </CPM>
        <Analysis>
            <ModelGraph format="svg" reduced="false" include-tags="#untagged,CCl4"/>
            <Gnuplotter time-step="1/4 * time_span.day" decorate="false" tags="CCl4">
                <Annotation>Reproduction of SI Movie S9 from Höhme et al.
    
    Color 0 (light-salmon)	: Hepatocyte standard color
    Color 1 (beige)	: Necrotic hepatocytes
    Color 2 (light-coral)	: Daughter hepatocytes
    Color 3 (tan1)	: Pericentral hepatocytes
    Color 4 (light-red)	: CV
    Color 5 (medium-blue)	: PVs</Annotation>
                <Plot>
                    <Cells value="cell.color">
                        <ColorMap adaptive-range="false">
                            <Color value="0" color="light-salmon"/>
                            <Color value="1" color="tan1"/>
                            <Color value="2" color="beige"/>
                            <Color value="3" color="light-coral"/>
                            <Color value="4" color="light-red"/>
                            <Color value="5" color="medium-blue"/>
                        </ColorMap>
                    </Cells>
                </Plot>
                <Terminal name="png"/>
            </Gnuplotter>
            <Gnuplotter time-step="1/4 * time_span.day" decorate="true" tags="CCl4">
                <Terminal name="png" size="1534, 1200, 0"/>
                <Plot>
                    <Cells min="0" max="5" value="hepatocyte.layer.self">
                        <ColorMap adaptive-range="false">
                            <Color value="0" color="white"/>
                            <Color value="1" color="coral"/>
                            <Color value="2" color="spring-green"/>
                            <Color value="3" color="slategrey"/>
                            <Color value="4" color="gold"/>
                            <Color value="5" color="light-turquoise"/>
                        </ColorMap>
                    </Cells>
                    <!--    <Disabled>
            <CellLabels fontsize="5" value="hepatocyte.layer.self"/>
        </Disabled>
    -->
                </Plot>
                <Plot>
                    <Cells min="0" max="0.35" value="hepatocyte.proliferation_p">
                        <ColorMap>
                            <Color value="0.3" color="red"/>
                            <Color value="0.2" color="yellow"/>
                            <Color value="0.1" color="green"/>
                            <Color value="0" color="blue"/>
                        </ColorMap>
                    </Cells>
                </Plot>
                <Plot title="Apical sides">
                    <Cells opacity="0.1" flooding="true" value="membrane.apical">
                        <ColorMap>
                            <Color value="0" color="gray90"/>
                            <Color value="1" color="light-green"/>
                        </ColorMap>
                    </Cells>
                    <!--    <Disabled>
            <CellArrows orientation="sinusoid_mean / sinusoid_mean.abs * 5"/>
        </Disabled>
    -->
                    <!--    <Disabled>
            <Field symbol-ref="c.mean_per_cell.field"/>
        </Disabled>
    -->
                    <!--    <Disabled>
            <Field symbol-ref="c"/>
        </Disabled>
    -->
                </Plot>
                <!--    <Disabled>
            <Plot>
                <Cells value="c.mean_per_cell">
                    <ColorMap>
                        <Color value="0" color="white"/>
                        <Color value="0.5" color="orange"/>
                        <Color value="1" color="red"/>
                    </ColorMap>
                </Cells>
                <CellLabels fontsize="5" internal:disabled="true" precision="0" value="c.mean_per_cell*1000"/>
            </Plot>
        </Disabled>
    -->
                <Plot>
                    <Field symbol-ref="c" min="0.0" max="1.0"/>
                </Plot>
                <!--    <Disabled>
            <Plot>
                <Field symbol-ref="hepatocyte.lesion.pattern"/>
            </Plot>
        </Disabled>
    -->
            </Gnuplotter>
            <Logger time-step="1/24 * time_span.day">
                <Restriction condition="time.regeneration >= 0"/>
                <Input>
                    <Symbol symbol-ref="celltype.hepatocytes.size"/>
                    <Symbol symbol-ref="time.days"/>
                    <Symbol symbol-ref="time.regeneration"/>
                    <Symbol symbol-ref="hepatocyte.lesion.area"/>
                    <Symbol symbol-ref="hepatocyte.lesion.area_exp"/>
                    <Symbol symbol-ref="hepatocyte.lesion.area_error"/>
                </Input>
                <Output>
                    <TextOutput/>
                </Output>
                <Plots>
                    <Plot time-step="-1">
                        <Style line-width="1.0" style="lines"/>
                        <Terminal terminal="png"/>
                        <X-axis maximum="17.0" minimum="-1.0">
                            <Symbol symbol-ref="time.regeneration"/>
                        </X-axis>
                        <Y-axis minimum="-0.01" maximum="0.095">
                            <Symbol symbol-ref="hepatocyte.lesion.area"/>
                            <Symbol symbol-ref="hepatocyte.lesion.area_exp"/>
                        </Y-axis>
                    </Plot>
                    <Plot time-step="-1">
                        <Style line-width="1.0" style="lines"/>
                        <Terminal terminal="png"/>
                        <X-axis>
                            <Symbol symbol-ref="time.regeneration"/>
                        </X-axis>
                        <Y-axis>
                            <Symbol symbol-ref="hepatocyte.lesion.area_error"/>
                        </Y-axis>
                    </Plot>
                </Plots>
            </Logger>
            <Logger time-step="0.5 * time_span.day">
                <Annotation>Separately log hepatocyte lesion error at t = 4 d for quick comparison between simulation runs.</Annotation>
                <Restriction condition="rint(time.regeneration*10)/10 == 4.0 || rint(time.regeneration*10)/10 == 6.0"/>
                <Input>
                    <Symbol symbol-ref="time.regeneration"/>
                    <Symbol symbol-ref="hepatocyte.lesion.area_error"/>
                </Input>
                <Output>
                    <TextOutput file-name="logger-ccl4-lesion-error-4d"/>
                </Output>
            </Logger>
        </Analysis>
        <CellPopulations>
            <Population type="hepatocytes" name="Hepatocytes" size="0">
                <InitCircle name="Hepatocyte initialization" number-of-cells="675" tags="CCl4, HCC" mode="random">
                    <Annotation>Hepatocyte density (lit.): 1889 cells/mm^2
    Lobule area in 2D slice (lit.): 0.21 mm^2
    
    - Hepatocyte lesion without hepatocytes, i.e. with medium only (model): 0.2043646748 mm^2 → 386 cells
    - Lobule area, i.e. includung medium, hepatocytes, CV, PVs (model): 0.2132578897  mm^2 → 403 cells</Annotation>
                    <Dimensions radius="size.x/2" center="size.x/2, size.y/2 * sqrt(3)/2, 0"/>
                </InitCircle>
            </Population>
            <Population type="CV" name="Central vein" size="1">
                <InitCellObjects name="Set coordinates" tags="CCl4, HCC" mode="order">
                    <Annotation>Central vein radius (lit.): 41.2 µm</Annotation>
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="41.2/node.length" center="size.physical/2"/>
                    </Arrangement>
                </InitCellObjects>
            </Population>
            <Population type="PV" name="Portal vein" size="1">
                <InitCellObjects name="bottom left" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="52.5, 5 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
                <InitCellObjects name="bottom right" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="147.5, 5 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
                <InitCellObjects name="mid left" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="5, 100 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
                <InitCellObjects name="mid right" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="195, 100 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
                <InitCellObjects name="upper left" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="52.5, 195 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
                <InitCellObjects name="upper right" tags="CCl4, HCC" mode="order">
                    <Arrangement displacements="1, 1, 1" repetitions="1, 1, 1">
                        <Sphere radius="23.3 / node.length" center="147.5, 195 * sqrt(3)/2, 0"/>
                    </Arrangement>
                </InitCellObjects>
            </Population>
        </CellPopulations>
    </MorpheusModel>
    
    

    Model Graph
    Model Graph

    Downloads

    Files associated with this model:

    Previous
    Next