# Make sure you run at least step 1 + step 2 before this
# the input for this optional step is one of the GO processes
# that you find in res.go.up.df or res.go.down.df
# the idea is that you find all genes that are associated
# with the process, make a PPI network, visualize the data 
# and find drug targets

# so instead of finding the module from the large network,
# you define the module based on a process of interest

# #############################################
# GET GO TERM
# #############################################

# Check if Cytoscape is running
cytoscapePing()
## You are connected to Cytoscape!
# example "DNA replication"
# look up GO ID in the enrichment result tables
genes <- res.go@geneSets[go.term]

query <- format_csv(as.data.frame(genes[1]), col_names=F, escape = "double", eol =",")
commandsPOST(paste0('string protein query cutoff=0.99 newNetName="PPI network" query="',query,'" limit=0 species="Homo sapiens"'))
## SUID 
##  308
analyzeNetwork()
##                                networkTitle                                   nodeCount 
## "STRING network - PPI network (undirected)"                                       "324" 
##                                   edgeCount                                 avNeighbors 
##                                       "340"                        "4.5174825174825175" 
##                                    diameter                                      radius 
##                                        "12"                                         "6" 
##                                       avSpl                                          cc 
##                         "4.276371515808136"                       "0.36543119472463637" 
##                                     density                               heterogeneity 
##                       "0.03181325716536984"                         "0.901880488475771" 
##                              centralization                                         ncc 
##                       "0.13200479472580162"                                       "171" 
##                                        time 
##                                     "0.105"
RCy3::loadTableData(data=data, data.key.column = "GeneName", table = "node", table.key.column = "query term")
## [1] "Success: Data loaded in defaultnode table"
RCy3::createVisualStyle("log2FC vis")
RCy3::setNodeLabelMapping("display name", style.name = "log2FC vis")
## NULL
control.points <- c (-3.0, 0.0, 3.0)
colors <-  c ('#5588DD', '#FFFFFF', '#DD8855')
setNodeColorMapping("log2FC", control.points, colors, style.name = "log2FC vis", default.color = "#C0C0C0")
## NULL
RCy3::setVisualStyle("log2FC vis")
##                 message 
## "Visual Style applied."
RCy3::lockNodeDimensions("TRUE", "log2FC vis")

# Select significant genes and change border color
x <- RCy3::createColumnFilter('P.Value', 'P.Value', 0.05, "LESS_THAN")
## No edges selected.
RCy3::setNodeBorderColorBypass(x$nodes, new.colors = "#009900")
RCy3::setNodeBorderWidthBypass(x$nodes, new.sizes = 7)
RCy3::clearSelection()

# ==================================================================
# Extend the process PPI with known drug-target interactions from DrugBank
# ==================================================================
unzip(system.file("extdata","drugbank-5.1.0.xgmml.zip", package="rWikiPathways"), exdir = getwd())
drugbank <- file.path(getwd(), "drugbank-5.1.0.xgmml")

commandsRun(paste0('cytargetlinker extend idAttribute="GeneID" linkSetFiles="', drugbank, '"') )
## [1] "Extension step: 1"                   "Linkset: DrugBank_v5.1.0 (approved)"
## [3] "Added edges: 260"                    "Added nodes: 136"
commandsRun('cytargetlinker applyLayout network="current"')

my.drugs <- selectNodes("drug", by.col = "CTL.Type", preserve = FALSE)$nodes #easy way to collect node SUIDs by column value
clearSelection()
setNodeColorBypass(my.drugs, "#DD99FF")
setNodeShapeBypass(my.drugs, "hexagon")

drug.labels <- getTableColumns(columns=c("SUID","CTL.label"))
drug.labels <- na.omit(drug.labels)
mapply(function(x,y) setNodeLabelBypass(x,y), drug.labels$SUID, drug.labels$CTL.label)
## [[1]]
## NULL
## 
## [[2]]
## NULL
## 
## [[3]]
## NULL
## 
## [[4]]
## NULL
## 
## [[5]]
## NULL
## 
## [[6]]
## NULL
## 
## [[7]]
## NULL
## 
## [[8]]
## NULL
## 
## [[9]]
## NULL
## 
## [[10]]
## NULL
## 
## [[11]]
## NULL
## 
## [[12]]
## NULL
## 
## [[13]]
## NULL
## 
## [[14]]
## NULL
## 
## [[15]]
## NULL
## 
## [[16]]
## NULL
## 
## [[17]]
## NULL
## 
## [[18]]
## NULL
## 
## [[19]]
## NULL
## 
## [[20]]
## NULL
## 
## [[21]]
## NULL
## 
## [[22]]
## NULL
## 
## [[23]]
## NULL
## 
## [[24]]
## NULL
## 
## [[25]]
## NULL
## 
## [[26]]
## NULL
## 
## [[27]]
## NULL
## 
## [[28]]
## NULL
## 
## [[29]]
## NULL
## 
## [[30]]
## NULL
## 
## [[31]]
## NULL
## 
## [[32]]
## NULL
## 
## [[33]]
## NULL
## 
## [[34]]
## NULL
## 
## [[35]]
## NULL
## 
## [[36]]
## NULL
## 
## [[37]]
## NULL
## 
## [[38]]
## NULL
## 
## [[39]]
## NULL
## 
## [[40]]
## NULL
## 
## [[41]]
## NULL
## 
## [[42]]
## NULL
## 
## [[43]]
## NULL
## 
## [[44]]
## NULL
## 
## [[45]]
## NULL
## 
## [[46]]
## NULL
## 
## [[47]]
## NULL
## 
## [[48]]
## NULL
## 
## [[49]]
## NULL
## 
## [[50]]
## NULL
## 
## [[51]]
## NULL
## 
## [[52]]
## NULL
## 
## [[53]]
## NULL
## 
## [[54]]
## NULL
## 
## [[55]]
## NULL
## 
## [[56]]
## NULL
## 
## [[57]]
## NULL
## 
## [[58]]
## NULL
## 
## [[59]]
## NULL
## 
## [[60]]
## NULL
## 
## [[61]]
## NULL
## 
## [[62]]
## NULL
## 
## [[63]]
## NULL
## 
## [[64]]
## NULL
## 
## [[65]]
## NULL
## 
## [[66]]
## NULL
## 
## [[67]]
## NULL
## 
## [[68]]
## NULL
## 
## [[69]]
## NULL
## 
## [[70]]
## NULL
## 
## [[71]]
## NULL
## 
## [[72]]
## NULL
## 
## [[73]]
## NULL
## 
## [[74]]
## NULL
## 
## [[75]]
## NULL
## 
## [[76]]
## NULL
## 
## [[77]]
## NULL
## 
## [[78]]
## NULL
## 
## [[79]]
## NULL
## 
## [[80]]
## NULL
## 
## [[81]]
## NULL
## 
## [[82]]
## NULL
## 
## [[83]]
## NULL
## 
## [[84]]
## NULL
## 
## [[85]]
## NULL
## 
## [[86]]
## NULL
## 
## [[87]]
## NULL
## 
## [[88]]
## NULL
## 
## [[89]]
## NULL
## 
## [[90]]
## NULL
## 
## [[91]]
## NULL
## 
## [[92]]
## NULL
## 
## [[93]]
## NULL
## 
## [[94]]
## NULL
## 
## [[95]]
## NULL
## 
## [[96]]
## NULL
## 
## [[97]]
## NULL
## 
## [[98]]
## NULL
## 
## [[99]]
## NULL
## 
## [[100]]
## NULL
## 
## [[101]]
## NULL
## 
## [[102]]
## NULL
## 
## [[103]]
## NULL
## 
## [[104]]
## NULL
## 
## [[105]]
## NULL
## 
## [[106]]
## NULL
## 
## [[107]]
## NULL
## 
## [[108]]
## NULL
## 
## [[109]]
## NULL
## 
## [[110]]
## NULL
## 
## [[111]]
## NULL
## 
## [[112]]
## NULL
## 
## [[113]]
## NULL
## 
## [[114]]
## NULL
## 
## [[115]]
## NULL
## 
## [[116]]
## NULL
## 
## [[117]]
## NULL
## 
## [[118]]
## NULL
## 
## [[119]]
## NULL
## 
## [[120]]
## NULL
## 
## [[121]]
## NULL
## 
## [[122]]
## NULL
## 
## [[123]]
## NULL
## 
## [[124]]
## NULL
## 
## [[125]]
## NULL
## 
## [[126]]
## NULL
## 
## [[127]]
## NULL
## 
## [[128]]
## NULL
## 
## [[129]]
## NULL
## 
## [[130]]
## NULL
## 
## [[131]]
## NULL
## 
## [[132]]
## NULL
## 
## [[133]]
## NULL
## 
## [[134]]
## NULL
## 
## [[135]]
## NULL
## 
## [[136]]
## NULL
# Try different layouts (e.g. yFiles organic layout) if nodes are overlapping too much 
# Cytoscape > Layout menu!

exportImage(paste0(out.folder,'cluster-',cluster,'-with-drugs.png'), type='PNG', zoom=500) #.png; use zoom or width args to increase size/resolution
##                                                                                   file 
## "/home/peipr/gits/BBS2061-breast-cancer/scripts/../output/cluster-3283-with-drugs.png"
# ==================================================================
# SAVING CYTOSCAPE SESSION
# ==================================================================

saveSession(paste0(out.folder,'breast-cancer-GO-PPI.cys'))



## OPTIONAL - FILTER network to only include drugs + targets

selectNodes(my.drugs)
## $nodes
##   [1]  9200  9971  9464  9722  9980  9212  9473  9218  9734  9479  9992 10250  9227  9740  9998  9491
##  [17]  9236  9749  9242 10010  9755 10268  9248 10274  9506 10019  9254  9512 10025  9770  9518 10031
##  [33]  9263  9776 10289  9269 10037  9527 10295  9785  9275 10043 10301  9791  9281 10313  9290 10058
##  [49]  9803  9548  9296  9809  9554  9302 10070  9563 10076  9308  9821 10082  9317  9830 10088  9323
##  [65]  9581 10094  9839  9329  9587  9845  9335 10103  9593  9851  9341  9599  9089  9605 10118  9350
##  [81]  9866 10124  9359  9617  9875  9365 10136  9881  9371  9629  9377  9635  9893  9383 10151  9641
##  [97]  9899  9389  9647  9653  9398  9911  9143  9404  9149  9662  9410  9155  9668 10181  9926  9416
## [113]  9161  9674 10190  9422  9167  9680  9173  9686 10199  9947  9179  9692  9440  9953  9698  9188
## [129]  9446 10214  9959  9704  9194  9452  9965  9710
## 
## $edges
## list()
selectFirstNeighbors()
## $nodes
##   [1]  9200  5110  9722  9212  9218  9734 10250  9227  9740  9236  9749  9242  9755 10268  5660  9248
##  [17] 10274  4645  9254  9770  9263  9776 10289  9269  5685 10295  9785  9275 10301  9791  9281  5700
##  [33] 10313  5705  9290  9803  4685  9296  9809  5715  5205  9302  5210  9308  9821  5215  5730  9317
##  [49]  9830  9323  9839  9329  9845  9335  9851  5755  9341  5760  9350  9866  9359  5775  9875  5780
##  [65]  9365  4760  9881  5785  9371  5275  5790  9377  9893  9383  9899  4780  9389  5805  9398  4790
##  [81]  9911  5305  9404  5820  5825  9410  9926  9416  4810  9422  5840  4305  9947  5855  9440  9953
##  [97]  4835  9446  9959  9452  9965  5360  9971  5875  4855  9464  5880  5370  9980  5375  9473  9479
## [113]  9992  5385  5900  4365  9998  9491 10010  4380  5405  9506 10019  9512 10025  4905  4395  9518
## [129]  4910 10031 10037  4405  9527 10043  4925  4415  4420 10058  9548  5455  9554  5460 10070  5465
## [145]  9563 10076 10082  5475 10088  5480  9581  5485 10094  9587  4470 10103  5495  9593  4475  9599
## [161]  9089  9605 10118 10124  9617  5010  4500 10136  9629  5535  9635  5540 10151  9641  4525  9647
## [177]  9653  9143  9149  5565  9662  9155  9668 10181  9161  9674 10190  5070  9167  9680  9173  4565
## [193]  9686 10199  9179  9692  5600  9698  9188  4580  5605 10214  9704  4585  9194  5100  9710
## 
## $edges
## list()
selected <- getSelectedNodes()

createSubnetwork("selected", "all")
## network 
##   11122