Commit 0ea12b23 authored by Marek Ostaszewski's avatar Marek Ostaszewski
Browse files

Merge branch 'sif_att_converter' into 'master'

Sif att converter

See merge request !259
parents 8b26445e 7c2b4e68
This diff is collapsed.
# Converter of COVID-19 CellDesigner diagrams "raw SIF" files obtained using CaSQ and MINERVA to HiPathia "SIF" and "ATT" file format.
The present directory contains the code and files necessary to convert *Simple Interaction Files (SIF)*, generated with CaSQ python package, from curated COVID-19 related CellDesigner diagrams to HiPathia's *SIF* and *ATT (attribute)* files. The *ATT* files are generated using Minerva, as a proxy between CaSQ and CellDesigner, to retrieve details of each node. These *SIF* and *ATT* files are needed by the HiPathia mechanistic modelling metagraphinfo database in order to run the algorithm over the diagrams. After running the conversor, each diagram will count with a *"diagram.sif"* and a *"diagram.att"* file,moreover a *"names.pathways.txt"* file listing the names of the diagrams converted will be also generated.
**The directory is structured into 2 folders and 2 scripts.**
### Scripts
** - functions_retrieve_sif_att_hipathia_from_CellDesigner.R**:
The present script contains the functions needed for converting *raw SIF *files from CellDesigner to HiPathia *SIF* and *ATT* files. The script is autodescriptive and counts with 5 functions for the retrieval, preprocessing and formatting of the raw SIF files. The functions enable to handle API querys, retrieve detailed information of each node from a CellDesigner diagram and format the information into HiPathia's SIF and ATT files. Each function is fully describe in the script. DO NOT EDIT (only edit for coding purposes).
** - example_sif_Hipathia.R**
The present script contains the example code to run over the existing diagrams on the [https://git-r3lab.uni.lu/covid/models/-/tree/master/](https://git-r3lab.uni.lu/covid/models/-/tree/master/) repository, please in order to run the code correctly clone the repository on a local directory and recode the "base_dir" variable to that directory. The script will read the *Simple Interaction Files (SIF)* from the CellDesigner diagrams located in */models-master/Executable Modules/SBML_qual_build/sif* in the repository, generate HiPathia formatted *SIF* and *ATT* files for each diagram and a *"names.pathways.txt"* file listing the names of the diagrams converted. The files are by default stored in the **test folder**, this parameter can be change in the *outputfolder* parameter of the *hipathia.att.sif* function.
<u>**CAUTION**:</u> Please when running the script make sure you recode the variable "base_dir" to the local directory where the repo *models-master* was cloned.
### Resources folder
Contains the *"exceptions.txt"* file, which contains for the nodes we desire to avoid, nodes that are not allowed in the metagraphinfo database such as viral gene nodes.
### Test folder
Empty folder that will store the results of running the *"example_sif_Hipathia.R"*
### Contributors
[Marek Ostaszewski](https://fairdomhub.org/people/665)
[Marina Esteban-Medina](https://fairdomhub.org/people/1873)
###############################################################################
########## EXAMPLE CODE: From CellDseigner CaSQ "Raw sif" files to ############
############## Hipathia "sif" and "att" format using Minerva #############
#############################################################################
###############################################################################################################
## IMPORTANT: CHANGE THE "base_dir" parameter to the local directory where the repository was cloned !!!! ####
base_dir <- "~/Desktop/models-master/"
#####################################################################################################
#### 1. LOAD LIBRARIES AND FUNCTIONS #####
## Load functions
source(file.path(paste0(base_dir, "/Resources/Hipathia/sif_att_converter/functions_retrieve_sif_att_hipathia_from_CellDesigner.R")), echo=TRUE)
#### 2. LOAD FOLDER, CREATE LIST OF RAW_SIF_FILES; LOAD MINERVA MAPS AND INFO NEEDED ####
### Read the raw sif files from the corresponding folder in the repository
sif_files_path <- file.path(paste0(base_dir,"/Executable Modules/SBML_qual_build/sif"))
raw_sif_list <- list.files(path = sif_files_path , all.files = F) %>% .[grep("*_raw*", .)]
diagrams <- gsub("_stable_raw.sif", "", raw_sif_list)
### Get MINERVA elements
### The address of the COVID-19 Disease Map in MINERVA
map <- "https://covid19map.elixir-luxembourg.org/minerva/api/"
### Get configuration of the COVID-19 Disease Map, to obtain the latest (default) version
cfg <- fromJSON(ask_GET(map, "configuration/"))
project_id <- cfg$options[cfg$options$type == "DEFAULT_MAP","value"]
### The address of the latest (default) build
mnv_base <- paste0(map,"projects/",project_id,"/")
message(paste0("Asking for diagrams in: ", mnv_base, "models/"))
### Get diagrams
models <- ask_GET(mnv_base, "models/")
models <- fromJSON(models, flatten = F)
### Read the list of resources to be integrated, from the MINERVA build scripts
res <- read.csv(url("https://git-r3lab.uni.lu/covid/models/raw/master/Integration/MINERVA_build/resources.csv"),
header = T, stringsAsFactors = F)
#### 3. RETRIEVE TTRANSALTED SIF FILES WITH DETAILED INFORMATION OF THE NODES AND INTERACTIONS OF EACH GRAPH USING MINERVA #####
### The obtained translated_sif_files counts with: X-Y coords info, genesList in entrez Identifier and type of
### node ( simple, complex or protein family). The info will be retrieved and stored as a data.frame for each diagram.
translated_sif_files <- lapply(raw_sif_list[-c(6)],
function(x){extract_translatedSIF_Minerva(x)})
#### 4. FORMAT TRANSALTED SIF FILES OBTAINED FOR HIPATHIA METAGRAPHINFO DATABASE #####
att_sif_Hformat <- mapply(hipathia.att.sif, minerva_translated_sif = translated_sif_files, diagram_name = diagrams[-6],
outputfolder = "~/Desktop/models-master/Resources/Hipathia/sif_att_converter/test")
\ No newline at end of file
##########################################################################################
############### FUNCTIONS CREATED TO RETRIEVE, EDIT AND EXPORT CaSQ ###############
############### Simple Interaction Files (SIF) FROM CellDesigner TO ###############
############### HiPathia "ATT" and "SIF" FORMAT USING Minerva AS PROXY ###############
##########################################################################################
if (!require(pacman)) {
install.packages("pacman")
}
if (!require(BiocManager)) {
install.packages("BiocManager")
}
if (!requireNamespace("AnnotationDbi", quietly = TRUE)){
BiocManager::install("AnnotationDbi")
}
if (!requireNamespace("hipathia", quietly = TRUE)){
BiocManager::install("hipathia", version = "3.10")
}
if (!requireNamespace("SummarizedExperiment", quietly = TRUE)){
BiocManager::install("SummarizedExperiment", version = "3.10")
}
if (!requireNamespace("org.Hs.eg.db", quietly = TRUE)){
BiocManager::install("org.Hs.eg.db", version = "3.10")
}
pacman::p_load("here","igraph","rentrez","reutils","hipathia", "biomaRt", "utils", "stringr", "SummarizedExperiment", "magrittr",
"AnnotationDbi","org.Hs.eg.db","dplyr","tidyr", "openxlsx", "data.table", "gdata", "httr", "jsonlite")
##################################################
## Project: COVID-19 Disease Map
## Script purpose: Translate raw CellDesigner SIF obtained from CaSQ to Entrez identifiers using MINERVA
## Date: 11.06.2020
## Author: Marek Ostaszewski
##################################################
## A convenience function to handle API queries
ask_GET <- function(furl, fask) {
print(URLencode(paste0(furl, fask)))
resp <- httr::GET(url = URLencode(paste0(furl, fask)), write_memory(),
httr::add_headers('Content-Type' = "application/x-www-form-urlencoded"),
### Currently ignoring SSL!
httr::set_config(config(ssl_verifypeer = 0L)))
if(httr::status_code(resp) == 200) {
### when the content is sent as a zip file, it needs to be handled differently,
### i.e. saved to a tmp file and unzipped
if(headers(resp)$`content-type` == "application/zip") {
tmp <- tempfile()
tmpc <- file(tmp, "wb")
writeBin(httr::content(resp, as = "raw"), con = tmpc)
close(tmpc)
unzipped <- unzip(tmp)
file.remove(tmp)
return(unzipped)
}
return(httr::content(resp, as = "text"))
}
return(NULL)
}
### An utility function to retrieve Entrez based on the species id
### if the id is a complex, the function goes recursively and fetches the ids of elements in this complex
group_elements <- function(feid, felements, fentrez) {
pos <- which(felements$elementId == feid)
### Any elements that may be nested in the 'feid' (CellDesigner alias)
incs <- felements$elementId[felements$complexId %in% felements$id[pos]]
if(length(incs) > 0) {
### If nested elements found, run the function recursively for the contained elements
return(paste(unlist(sapply(incs, group_elements, felements, fentrez)), collapse = ";"))
} else {
### If no nested elements, return Entrez
rid <- fentrez[[feid]]
if(is.na(rid)) {
### If Entrez not available, return name
rid <- felements$name[pos]
}
return(rid)
}
}
### A workaround function to get information about hypothetical complexes;
### currently MINERVA API does not support this, we need to get the entire CD file and parse it
get_groups <- function(fname) {
message(paste0("Getting groups for ", fname, "..."))
library(xml2)
## Currently comment out the MINERVA download, some content dlded as binary!
cd_map <- read_xml(ask_GET(mnv_base,
paste0("models/",
models$idObject[models$name == fname],
":downloadModel?handlerClass=lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser")))
### CellDesigner namespace
ns_cd <- xml_ns_rename(xml_ns(read_xml("<root>
<sbml xmlns = \"http://www.sbml.org/sbml/level2/version4\"/>
<cd xmlns = \"http://www.sbml.org/2001/ns/celldesigner\"/>
</root>")),
d1 = "sbml", d2 = "cd")
### Get complex ids
cids <- xml_attr(xml_find_all(cd_map, "//cd:complexSpeciesAlias", ns_cd), "species")
### For each check, which is hypothetical
hypocs <- sapply(cids,
function(x) {
tcid <- xml_find_first(cd_map, paste0("//sbml:species[@id='", x, "']"), ns_cd)
ifelse(length(tcid) > 0, xml_text(xml_find_first(tcid, ".//cd:hypothetical", ns_cd)), NA)
})
names(hypocs) <- gsub("s_id_", "",names(hypocs))
return(hypocs)
}
### A convenience function that makes use of the previous ones to retrieve the translated SIF file from CellDesigner
### and CaSQ using Minerva. The function allows to apply the operation to all the diagrams listed in "sif_raw_gitLab"
#' @param sif_raw_gitLab list of raw sif files obtained from CaSQ.
extract_translatedSIF_Minerva <- function(sif_raw_gitLab,
base_url = "https://git-r3lab.uni.lu/covid/models/-/raw/master/Executable%20Modules/SBML_qual_build/sif/"){
message(paste0("Translating..", sif_raw_gitLab))
### Read in the raw SIF version (here straight from the gitLab Covid19)
raw_sif <- read.table(url(paste0(base_url, sif_raw_gitLab)),
sep = " ", header = F, stringsAsFactors = F)
diagram <- gsub(pattern = "_raw.sif", ".xml", sif_raw_gitLab)
diag_name <- res[str_detect(res$Resource, diagram), "Name"]
### Get elements of the chosen diagram
model_elements <- fromJSON(ask_GET(paste0(mnv_base,"models/",models$idObject[models$name == diag_name],"/"),
"bioEntities/elements/?columns=id,name,type,references,elementId,complexId,bounds"),
flatten = F)
message("Fetching entrez ids...")
### Get information about Entrez identifiers from MINERVA elements
entrez <- sapply(model_elements$references, function(x) ifelse(length(x) == 0, NA, x[x$type == "ENTREZ", "resource"]))
names(entrez) <- model_elements$elementId
cgroups <- get_groups(diag_name)
message("Translating...")
### Create a copy
translated_sif <- raw_sif
### Retrieve Entrez and type for the entire columns of sources and targets
s.entrez <- sapply(raw_sif[,1], group_elements, model_elements, entrez)
s.type <- sapply(raw_sif[,1], function(x) { ifelse(x %in% names(cgroups),
ifelse(is.na(cgroups[x]), "complex", "group"),
"node") })
t.entrez <- sapply(raw_sif[,3], group_elements, model_elements, entrez)
t.type <- sapply(raw_sif[,3], function(x) { ifelse(x %in% names(cgroups),
ifelse(is.na(cgroups[x]), "complex", "group"),
"node") })
### Collect x.y information
s.xy <- t(sapply(raw_sif[,1], function(x) unlist(model_elements$bounds[model_elements$elementId == x, c(3,4)])))
colnames(s.xy) <- c("source.x", "source.y")
t.xy <- t(sapply(raw_sif[,3], function(x) unlist(model_elements[model_elements$elementId == x,1][,c(3,4)])))
colnames(t.xy) <- c("targets.x", "targets.y")
### Combine into a single data frame
translated_sif <- data.frame(source = s.entrez, source.type = s.type,
sign = raw_sif[,2],
target = t.entrez, target.type = t.type,
s.xy, t.xy, stringsAsFactors = F)
## In case export is desired
# write.table(translated_sif, file = paste0(diag_name,"_translated_sif.txt"),
# sep = "\t", quote = F, col.names = T, row.names = F)
return(translated_sif)
message("Done.")
}
#################################################
## Project: COVID-19 Disease Map
## Script purpose: Translate Entrez identifiers SIF files from MINERVA to HIPATHIA SIF and ATT files for metagraphinfo compilation.
## Date: 21.10.2020
## Author: Marina Esteban Medina
##################################################
###################################################################################################
### Function to pass translatedSIF_Minerva sif files information to Hipathia att and sif files ####
#' @param minerva_translated_sif the sif file from CaSQ with entrez identifiers from MINERVA
#' @param diagram_name name of the diagram we are adding
#' @param outputfolder the output file path, it will return the sif an att file in Hipathia format
#' @param exceptions file of the nodes exceptions, such as viral genes with entrez ID, that Hipathia does not processes
########################################################################################################################
hipathia.att.sif <- function (minerva_translated_sif, diagram_name, outputfolder,
exceptions = file.path(paste0(base_dir, "/Resources/Hipathia/sif_att_converter/resources/exceptions.txt"))) {
message(paste0("Working on...", diagram_name))
exceptions_2avoid <- read.table(exceptions, stringsAsFactors = F) %>% mutate_all(as.character) %>% .$V1
## Clean auto interaction of nodes
minerva_translated_sif <- mutate_all(minerva_translated_sif, as.character)
minerva_translated_sif <- minerva_translated_sif[!minerva_translated_sif$source == minerva_translated_sif$target, ]
## Clean nodes that are not genes with and entrez ID nor a Function node.
## We clean the source and target columns to avoid non gene-gene interactions.
minerva_translated_sif <- minerva_translated_sif[which(!grepl("[a-z];[0-9]+|[A-Z];[0-9]+|[0-9]+;[a-z]|[0-9]+;[A-Z]|[A-Z]+[a-z]+[0-9]+[[:punct:]];[0-9]+|Unfolded protein", minerva_translated_sif$source)),] %>%
.[which(!grepl("[a-z];[0-9]+|[A-Z];[0-9]+|[0-9]+;[a-z]|[0-9]+;[A-Z]|[A-Z]+[a-z]+[0-9]+[[:punct:]];[0-9]+|Unfolded protein", .$target)),]
## Replace space with "_" in the diagrams name
diagram_name <- gsub(" ", "_", diagram_name)
## Start bulding the att data frame, cols = ID, LABEL, X, Y, COLOR, SHAPE, TYPE, LABEL.CEX, LABEL.COLOR, WIDTH, HEIGHT, genesList
nodes <- unique(c(minerva_translated_sif$source, minerva_translated_sif$target))
## Create a table with the type of nodes, complex or protein family
nodes_gene_type <- data.frame(nodes = c(minerva_translated_sif$source, minerva_translated_sif$target),
type = c(minerva_translated_sif$source.type, minerva_translated_sif$target.type))%>%
.[!duplicated(.$nodes),] %>% mutate_all(as.character)
id_num <- seq_along(nodes)
## Create empty vectors for the columns of the att data.frame that we will then export to ".att" file of each diagram
ID = sapply(id_num, function(x) {paste("N", paste0("hsaCovid19", diagram_name ), x , sep = "-")})
sif <- data.frame(ID, nodes)
label <- c()
shape <- c()
type <- c()
genesList <- c()
for (i in seq_along(nodes)){
## In the case of human gene nodes with entrez identifiers
if (grepl ("[A-Z]|[a-z]", nodes[i]) == F && nodes[i] != "8673700" && !(nodes[i] %in% exceptions_2avoid) ){ ## those are new entrez ID of SARS-CoV2 which we want to avoid
message(paste0("Translating...", nodes[i]))
label[i] <- str_split(nodes[i], pattern = ";") %>% sapply ( . , function(x) {
mapIds(org.Hs.eg.db, keys = x, column = "SYMBOL", keytype = "ENTREZID")
}) %>% paste(., collapse = ";")
shape[i] <- "ellipse"
type[i] <- "gene"
genesList[i] <- nodes[i]
if(nodes_gene_type$type[nodes_gene_type$nodes %in% nodes[i]] == "complex"){
genesList[i] <- gsub( ";", ",/,", nodes [i]) ## substitute group sign (;) by what Hipathia takes as complex sign (,/,)
}
## In the case of function nodes
}else if(grepl ("^[A-Z]+[aeiou]+[[:punct:]]*|^[a-z]+[aeiou]+[[:punct:]]*", nodes[i]) == T){
label[i] <- nodes[i]
shape[i] <- "rectangle" ## Hipathia symbol for "function" element in the graph
type[i] <- "node"
genesList[i] <- "NA"
ID[i] <- paste0(ID[i],"_func")
}else{
message(paste0("Translating...", nodes[i]))
## We only use this if we want to keep the non gene nodes visually
label[i] <- nodes[i]
shape[i] <- "circle"
type[i] <- "other"
genesList[i] <- "NA"
}
}
X <- c()
Y <- c()
for (i in seq_along(nodes)){
if(nodes[i] %in% minerva_translated_sif$source){
X[i] <- minerva_translated_sif$source.x[match(nodes[i], minerva_translated_sif$source)]
Y[i] <- minerva_translated_sif$source.y[match(nodes[i], minerva_translated_sif$source)]
}else{
X[i] <- minerva_translated_sif$targets.x[match(nodes[i], minerva_translated_sif$target)]
Y[i] <- minerva_translated_sif$targets.y[match(nodes[i], minerva_translated_sif$target)]
}
}
if(length(id_num) == 0 ){
message(paste0("No human genes founded in ", diagram_name, "...DELETED "))
}else{
## Color, label.cex, label.color, width and height are constant for all the nodes
att_hipathia = data.frame ( ID, label, X, Y, color = "white", shape, type, label.cex = "0.62", label.color = "black",
width = "46", height = "17", genesList )
## Edit the .sif file in Hipathia format, subsitute interactions for "activation" or "inhibition".
interaction = gsub("POSITIVE", "activation", minerva_translated_sif$sign) %>% gsub("NEGATIVE", "inhibition", .)
sif_hipathia <- data.frame(source = sif$ID [match(minerva_translated_sif$source, sif$nodes)], interaction,
target = sif$ID [match(minerva_translated_sif$target, sif$nodes)])
sif_hipathia <- sif_hipathia[sif_hipathia$source %in% att_hipathia$ID, ]
## Create the "name.pathways_hsa.txt" file. This file serves as list of the pathways included in the metaginfo (metagraph-database) Hipathia takes as pathways database.
name.pathways_hsa_file <- data.frame(code = paste0("Covid19", diagram_name), name = diagram_name)
## Export the "att", "sif" and "name.pathways_hsa.txt" to the output folder selected
write.table(att_hipathia, file = paste(outputfolder, paste0(paste0("hsaCovid19", diagram_name ) ,".att"), sep = "/"), sep = "\t", quote = F, col.names = T, row.names = F )
write.table(sif_hipathia, file = paste(outputfolder, paste0(paste0("hsaCovid19", diagram_name ) ,".sif"), sep = "/"), sep = "\t", quote = F, col.names = F, row.names = F )
write.table(name.pathways_hsa_file, file = paste(outputfolder, "name.pathways_hsa.txt", sep = "/"),append = T, sep = "\t", col.names = F, row.names = F, quote = F )
message(paste0(diagram_name, "... Done"))
## The function also returns the "sif and "att" data.frames created in a list for downstream actions.
return(list("att" = att_hipathia, "sif" = sif_hipathia))
}
}
This diff is collapsed.
8673700
43740575
443740570
43740570
43740571
4348
ID label X Y color shape type label.cex label.color width height genesList
N-hsaCovid19Apoptosis-1 FAS;FASLG 360 79.75 white ellipse gene 0.62 black 46 17 355,/,356
N-hsaCovid19Apoptosis-2 BCL2L11;BBC3;BAD 1149 615 white ellipse gene 0.62 black 46 17 10018,/,27113,/,572
N-hsaCovid19Apoptosis-3 BCL2;MCL1;BCL2L1 1013 470.5 white ellipse gene 0.62 black 46 17 596,/,4170,/,598
N-hsaCovid19Apoptosis-4 CYCS;APAF1;CASP9 486 693 white ellipse gene 0.62 black 46 17 54205,/,317,/,842
N-hsaCovid19Apoptosis-5 CYCS 998 743 white ellipse gene 0.62 black 46 17 54205
N-hsaCovid19Apoptosis-6 APAF1 975 682 white ellipse gene 0.62 black 46 17 317
N-hsaCovid19Apoptosis-7 CASP9 880 683 white ellipse gene 0.62 black 46 17 842
N-hsaCovid19Apoptosis-8 AKT1 775 595 white ellipse gene 0.62 black 46 17 207
N-hsaCovid19Apoptosis-9 TNFRSF1A;TNF 710 83 white ellipse gene 0.62 black 46 17 7132,/,7124
N-hsaCovid19Apoptosis-10 TRADD;FADD 822.125 234.375 white ellipse gene 0.62 black 46 17 8717,/,8772
N-hsaCovid19Apoptosis-11 FADD 532 273 white ellipse gene 0.62 black 46 17 8772
N-hsaCovid19Apoptosis-12 TRADD 649.125 226.375 white ellipse gene 0.62 black 46 17 8717
N-hsaCovid19Apoptosis-13 Orf7a 904 358.5 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-14 E 904 409.5 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-15 BAD 904 464 white ellipse gene 0.62 black 46 17 572
N-hsaCovid19Apoptosis-16 CASP8 321.125 421.375 white ellipse gene 0.62 black 46 17 841
N-hsaCovid19Apoptosis-17 CASP3 321.125 631.375 white ellipse gene 0.62 black 46 17 836
N-hsaCovid19Apoptosis-18 BID 809.125 409.5 white ellipse gene 0.62 black 46 17 637
N-hsaCovid19Apoptosis-19 MAPK14 896.125 820.375 white ellipse gene 0.62 black 46 17 1432
N-hsaCovid19Apoptosis-20 M 672 661.5 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-21 CASP7 367.125 751.375 white ellipse gene 0.62 black 46 17 840
N-hsaCovid19Apoptosis-22 Orf3b 250 895 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-23 Orf8a 250 940 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-24 N 250 985 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-25 S 250 805 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-26 Orf9b 250 1030 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-27 Orf6 250 850 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-28 Orf3a 784 878.5 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-29 BAX 1140 958.75 white ellipse gene 0.62 black 46 17 581
N-hsaCovid19Apoptosis-30 Apoptosis 600 1014.5 white circle other 0.62 black 46 17 NA
N-hsaCovid19Apoptosis-1 activation N-hsaCovid19Apoptosis-11
N-hsaCovid19Apoptosis-2 activation N-hsaCovid19Apoptosis-29
N-hsaCovid19Apoptosis-3 activation N-hsaCovid19Apoptosis-2
N-hsaCovid19Apoptosis-3 inhibition N-hsaCovid19Apoptosis-29
N-hsaCovid19Apoptosis-4 activation N-hsaCovid19Apoptosis-7
N-hsaCovid19Apoptosis-5 activation N-hsaCovid19Apoptosis-4
N-hsaCovid19Apoptosis-6 activation N-hsaCovid19Apoptosis-4
N-hsaCovid19Apoptosis-7 activation N-hsaCovid19Apoptosis-4
N-hsaCovid19Apoptosis-8 inhibition N-hsaCovid19Apoptosis-4
N-hsaCovid19Apoptosis-8 inhibition N-hsaCovid19Apoptosis-7
N-hsaCovid19Apoptosis-8 inhibition N-hsaCovid19Apoptosis-15
N-hsaCovid19Apoptosis-9 activation N-hsaCovid19Apoptosis-10
N-hsaCovid19Apoptosis-10 activation N-hsaCovid19Apoptosis-16
N-hsaCovid19Apoptosis-11 activation N-hsaCovid19Apoptosis-10
N-hsaCovid19Apoptosis-11 activation N-hsaCovid19Apoptosis-16
N-hsaCovid19Apoptosis-12 activation N-hsaCovid19Apoptosis-10
N-hsaCovid19Apoptosis-13 activation N-hsaCovid19Apoptosis-3
N-hsaCovid19Apoptosis-14 activation N-hsaCovid19Apoptosis-3
N-hsaCovid19Apoptosis-15 inhibition N-hsaCovid19Apoptosis-3
N-hsaCovid19Apoptosis-16 activation N-hsaCovid19Apoptosis-17
N-hsaCovid19Apoptosis-16 activation N-hsaCovid19Apoptosis-18
N-hsaCovid19Apoptosis-16 activation N-hsaCovid19Apoptosis-21
N-hsaCovid19Apoptosis-17 activation N-hsaCovid19Apoptosis-30
N-hsaCovid19Apoptosis-7 activation N-hsaCovid19Apoptosis-17
N-hsaCovid19Apoptosis-7 activation N-hsaCovid19Apoptosis-21
N-hsaCovid19Apoptosis-18 activation N-hsaCovid19Apoptosis-29
N-hsaCovid19Apoptosis-19 activation N-hsaCovid19Apoptosis-5