## ----message=FALSE, warning=FALSE---------------------------------------------------------------------------
library(dplyr)
library(ggplot2)
library(OmnipathR)
library(igraph)
library(ggraph)

## -----------------------------------------------------------------------------------------------------------
# Download protein-protein interactions
interactions = import_omnipath_interactions() %>% as_tibble()

# Convert to igraph objects:
OPI_g = interaction_graph(interactions = interactions )

## ---- eval=FALSE--------------------------------------------------------------------------------------------
#  library(dbparser)
#  library(XML)
#  
#  
#  ## parse data from XML and save it to memory
#  get_xml_db_rows("..path-to-DrugBank/full database.xml")
#  
#  ## load drugs data
#  drugs <- parse_drug() %>% select(primary_key, name)
#  drugs <- rename(drugs,drug_name = name)
#  
#  ## load drug target data
#  drug_targets <- parse_drug_targets() %>%
#     select(id, name,organism,parent_key) %>%
#     rename(target_name = name)
#  
#  ## load polypeptide data
#  drug_peptides <- parse_drug_targets_polypeptides()  %>%
#     select(id, name, general_function, specific_function,
#            gene_name, parent_id) %>%
#     rename(target_name = name, gene_id = id)
#  
#  # join the 3 datasets
#  drug_targets_full <- inner_join(drug_targets, drug_peptides,
#                                  by=c("id"="parent_id", "target_name")) %>%
#     inner_join(drugs, by=c("parent_key"="primary_key")) %>%
#     select(-other_keys)
#  

## -----------------------------------------------------------------------------------------------------------
drug_names = c("Valproat"      = "Valproic Acid",
               "Diclofenac"    = "Diclofenac",
               "Paracetamol"   = "Acetaminophen",
               "Ciproflaxin"   = "Ciprofloxacin",
               "Nitrofurantoin"= "Nitrofurantoin",
               "Tolcapone",
               "Azathioprine",
               "Troglitazone",
               "Nefazodone",
               "Ketoconazole",
               "Omeprazole",
               "Phenytoin",
               "Amiodarone",
               "Cisplatin",
               "Cyclosporin A"  = "Cyclosporine",
               "Verapamil",
               "Buspirone",
               "Melatonin",
               "N-Acetylcysteine"= "Acetylcysteine",
               "Vitamin C"       = "Ascorbic acid",
               "Famotidine",
               "Vancomycin")

## ---- eval=FALSE--------------------------------------------------------------------------------------------
#  
#  drug_target_data_sample <- drug_targets_full %>%
#     filter(organism == "Humans",drug_name %in% drug_names)
#  

## -----------------------------------------------------------------------------------------------------------
drug_targets <- OmnipathR:::drug_target_data_sample %>%
   filter(organism == "Humans",drug_name %in% drug_names)

## -----------------------------------------------------------------------------------------------------------
drug_targets <-  drug_targets %>%
   select(-target_name, -organism) %>%
   mutate(in_OP = gene_id %in% c(interactions$source))
# not all drug-targets are in OP.
print(all(drug_targets$in_OP))

# But each drug has at least one target in OP.
drug_targets %>% group_by(drug_name) %>% summarise(any(in_OP))


## -----------------------------------------------------------------------------------------------------------
POI = tibble(protein = c("NFE2L2","HMOX1","TP53","CDKN1A","BTG2","NFKB1",
                         "ICAM1","HSPA5", "ATF4","DDIT3","XBP1"))

## -----------------------------------------------------------------------------------------------------------
POI <- POI %>% mutate(in_OP = protein %in% interactions$target_genesymbol)
# all POI is in Omnipath
print(all(POI$in_OP))



## -----------------------------------------------------------------------------------------------------------

source_nodes <- drug_targets %>%
   filter(in_OP, drug_name=="Cisplatin") %>%
   pull(gene_name)
target_nodes <- POI %>% filter(in_OP) %>% pull(protein)

collected_path_nodes = list()

for(i_source in 1:length(source_nodes)){

   paths <- shortest_paths(OPI_g, from = source_nodes[[i_source]],
                           to = target_nodes,
                           output = 'vpath')
   path_nodes <- lapply(paths$vpath,names) %>% unlist() %>% unique()
   collected_path_nodes[[i_source]] <- path_nodes
}
collected_path_nodes <- unlist(collected_path_nodes) %>% unique()

## -----------------------------------------------------------------------------------------------------------
cisplatin_nodes <- c(source_nodes,target_nodes, collected_path_nodes) %>%
   unique()
cisplatin_network <- induced_subgraph(graph = OPI_g,vids = cisplatin_nodes)

## -----------------------------------------------------------------------------------------------------------
V(cisplatin_network)$node_type = ifelse(
   V(cisplatin_network)$name %in% source_nodes, "direct drug target",
   ifelse(
      V(cisplatin_network)$name %in% target_nodes,"POI","intermediate node"))

ggraph(
      cisplatin_network,
      layout = "lgl",
      area = vcount(cisplatin_network)^2.3,
      repulserad = vcount(cisplatin_network)^1.2,
      coolexp = 1.1
   ) +
   geom_edge_link(
      aes(
         start_cap = label_rect(node1.name),
         end_cap = label_rect(node2.name)),
         arrow = arrow(length = unit(4, 'mm')
      ),
      edge_width = .5,
      edge_alpha = .2
   ) +
   geom_node_point() +
   geom_node_label(aes(label = name, color = node_type)) +
   scale_color_discrete(
      guide = guide_legend(title = 'Node type')
   ) +
   theme_bw() +
   xlab("") +
   ylab("") +
   ggtitle("Cisplatin induced network")


## ---- sessionInfo, echo=FALSE-------------------------------------------------------------------------------
sessionInfo()

