Commit 7c2b4e68 authored by MarinaEM's avatar MarinaEM
Browse files

Updated scripts for conversion from PC to AF maps using CasQ Minerva and...

Updated scripts for conversion from PC to AF maps using CasQ Minerva and Hipathia producing sif and att files
parent 57421497
Pipeline #36542 passed with stages
in 1 minute and 6 seconds
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