5 Cell Fate Specification in Ascidian Embryo

This section contains instructions to reproduce the results of simulating FVS control node perturbations in a model of ascidian embryo cell specification. You can read the original report here: link

The original studies of Cell Fate Specification in the Ascidian Embryo were performed by Kobayashi et al. in “Using linkage logic theory to control dynamics of a gene regulatory network of a chordate embryo (Sci Rep 11, 4001 (2021))”. The network, internal-marker nodes, and FVS was derived from the publication and its supplementary material.

The input data, nextflow pipeline, and results of this simulation can be found in the ascidian embryo folder in the github repository

These simulations were run on a high performance cluster that uses a SLURM executor. Although we recommend that you run NETISCE on an hpc, this simulation is small enough that it can be run on a local machine. If you choose to run it locally, then remove the nextflow.config file from the directory.

5.1 Input Data

The goal of this simulation was to reproduce the results of experimental perturbations to the FVS nodes of the cell fate specification GRN for ascidian embryos using Signal Flow Analysis. Therefore, we use a modified version of the NETISCE pipeline to simulate these specific perturbations. We are only interested in performing the 7 perturbations to the 6 FVS control nodes that were experimentally verified to induce cell tissue fates.

network.sifcontains the gene regulatory network of ascidian embryonic development.

expression.csv contains the initial activities for the unperturbed state and the 7 FVS control node perturbations. Here, all simulations have Gata.a and Zic-r.a=1, as the activation of these two genes is required for normal embryonic development.

perturbations.csv contains the specified perturbations for each FVS node in the appropriate perturbation simulation. 0 denotes downregulation, wherease 1 encodes upregulation. If no value is set, then there is no fixed perturbation to the FVS node, as in the unperturbed case.

internal-marker-nodes.txt contains the 7 internal marker nodes used to verify if the specified cell reprogramming had been successfully simulated.

5.2 Run the simulation

To run the simulation, simply execute the ascidian-embryo.nf file using the following command: ./nextflow run ascidian-embryo.nf -resume

5.3 Results

The nextflow pipeline generates 1 result file exp_internalmarkers.txt, which contains the steady state values of the internal-marker nodes for the unperturbed attractor, and the attractors generated from the perturbations on FVS control nodes.
name Alp Bco Celf3.a Epi1 Fli.Erg.a Myl Noto1
unperturbed -0.0000341 0.0018729 0.0018729 0.0217995 0.0013966 0.0008975 0.0004029
Adentz (Endoderm perturbation) 0.1179951 -0.4252100 -0.4252100 0.2707276 -0.1836794 -0.1396049 0.1169769
adentZ (brain+pan-neural perturbation) -0.3845691 0.4252100 0.4252100 0.2707276 -0.2370737 -0.0041647 0.1123776
adeNtz (pan-neural perturbation) -0.5243074 -0.4252100 -0.4252100 0.2707276 -0.3002010 -0.1063952 0.2408746
adEntZ (mesenchyme perturbation) -0.2630083 0.4252100 0.4252100 -0.1563935 0.2841288 -0.0871440 -0.0052551
adentz (epidermis perturbation) -0.5243074 -0.4252100 -0.4252100 0.2707276 -0.3002010 -0.1237829 0.2349825
adenTz (muscle perturbation) -0.5243074 -0.4252100 -0.4252100 0.2707276 -0.3002010 0.0837375 0.2589035
aDentz (notochord perturbation) -0.3792942 -0.4252100 -0.4252100 0.1988199 -0.3966199 -0.1218621 0.0943055

A perturbation is considered successful if the internal-marker node in the attractor generated from the perturbed FVS control nodes has a larger steady-state value than that in the unperturbed attractor. We determine this by subtracting the steady-state values of the unperturbed simulation from the steady-state values of the perturbations of FVS control nodes.

Alp Bco Celf3.a Epi1 Fli.Erg.a Myl Noto1
Adentz (Endoderm perturbation) 0.118 -0.427 -0.427 0.249 -0.185 -0.141 0.117
adentZ (brain+pan-neural perturbation) -0.385 0.423 0.423 0.249 -0.238 -0.005 0.112
adeNtz (pan-neural perturbation) -0.524 -0.427 -0.427 0.249 -0.302 -0.107 0.24
adEntZ (mesenchyme perturbation) -0.263 0.423 0.423 -0.178 0.283 -0.088 -0.006
adentz (epidermis perturbation) -0.524 -0.427 -0.427 0.249 -0.302 -0.125 0.235
adenTz (muscle perturbation) -0.524 -0.427 -0.427 0.249 -0.302 0.083 0.259
aDentz (notochord perturbation) -0.379 -0.427 -0.427 0.177 -0.398 -0.123 0.094

Here we see that for 6 out of the 7 perturbations to FVS controlnodes, we were able to upregulate the desired tissue marker when compared to the unperturbed state.

5.4 Visualizing Results

We can use radar plots to visualize the results of the SFA simulations of perturbations to the FVS control nodes. This can help us identify which perturbations successfully induced the appropriate tissue fate.

The following code for generating radar plots was adapted from datanovia.com.

Note: you may need to adjust the formatting of exp_internalmarkers.txt so that the strings within quotations are placed into one column.

create_beautiful_radarchart <- function(data, color = "#00AFBB", 
                                        vlabels = colnames(data), vlcex = 1,
                                        caxislabels = NULL, title =row.names(data)[4], ...){
  radarchart(
    data, axistype = 1,
    # Customize the polygon
    pcol = color, pfcol = NULL, plwd = 2, plty = 1,
    # Customize the grid
    cglcol = "grey", cglty = 1, cglwd = 0.8,
    # Customize the axis
    axislabcol = "grey", 
    # Variable labels
    vlcex = vlcex, vlabels = vlabels,
    title = title,
    centerzero = F,
    caxislabels = caxislabels
    
  )
}

We can take the relevant internal-marker for each perturbation to create one “meta” radar chart that summarizes the difference in steady-state expression values between the unperturbed state and the perturbed state

Alp Bco Celf3.a1 Celf3.a2 Epi1 Fli.Erg.a Myl Noto1
unperturbed -3.41e-05 0.00187 0.00187 0.00187 0.0218 0.0014 0.000898 0.000403
perturbation results 1.18e-01 0.42500 0.42500 -0.42500 0.2710 0.2840 0.083700 0.094300
maxcol<-apply(test, 2, max)
mincol<-apply(test, 2, min)
d2<-rbind(maxcol,mincol, test)
rownames(d2)[1:2]<- c("Max", "Min")
par(mar = c(1, 0.1, 4, 1))
for (i in 4:nrow(d2)) {
  create_beautiful_radarchart2(d2[c(1:3, i), ],color = c("#00AFBB", "#E7B800"),caxislabels = seq(round(min(d2[c(1:3, i),]),1),round(max(d2[c(1:3, i),]),1),.1), vlabels=c("Alp\n(endoderm)","Bco \n(brain)","Celf3.a \n(pan-neural)","Celf3.a\n (pan-neural)","Epi1 \n(epidermis)","Fli.Erg.a \n(mesenchyme)","Myl \n(muscle)", "Noto1\n (notochord)"));legend(x=0.4, y=1.3, legend =c("unperturbed","perturbed FVS") , bty = "n", pch=20 , col=c("#00AFBB", "#E7B800","#FC4E07") , text.col = "black", cex=.8, pt.cex=2)
}