## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  warning = FALSE,
  message = FALSE,
  comment = "#>"
)

## ----setup, echo=FALSE--------------------------------------------------------
library(knitr)
library(BioNAR)
library(synaptome.db)
library(ggplot2)
library(pander)
library(ggrepel)
library(randomcoloR)

## ----network_from_scratch-----------------------------------------------------
file <- system.file("extdata", "PPI_Presynaptic.csv", package = "BioNAR")
tbl <- read.csv(file, sep="\t")
head(tbl)
gg <- buildNetwork(tbl)
summary(gg)


## ----net_from_SynaptomeDB-----------------------------------------------------
# Let's get the ID for presynaptic compartment
cid<-match('Presynaptic',getCompartments()$Name) 
cid
# Now we need to collect all the gene IDs for presinaptic  compartment
t<-getAllGenes4Compartment(cid) 
dim(t)
head(t)
# finally, build the graph using respecctive gene EntrezIDs as node IDs
gg<-buildFromSynaptomeByEntrez(t$HumanEntrez) 
summary(gg)


## ----net_predefind------------------------------------------------------------
file <- system.file("extdata", "PPI_Presynaptic.gml", package = "BioNAR")
gg1 <- igraph::read.graph(file,format="gml")
summary(gg1)

## ----cluster_predefind, include=FALSE-----------------------------------------
file <- system.file("extdata", "PPI_cluster.gml", package = "BioNAR")
ggCluster <- igraph::read.graph(file,format="gml")

## ----annotate_net-------------------------------------------------------------
gg<-annotateGeneNames(gg)
summary(gg)
head(V(gg))
head(V(gg)$GeneName)

## ----annotate_topOnto---------------------------------------------------------
afile<-system.file("extdata", "flatfile_human_gene2HDO.csv", package = "BioNAR")
dis <- read.table(afile,sep="\t",skip=1,header=FALSE,strip.white=TRUE,quote="")
gg <- annotateTopOntoOVG(gg, dis)
summary(gg)


## ----annotate_Shanno----------------------------------------------------------
sfile<-system.file("extdata", "SCH_flatfile.csv", package = "BioNAR")
shan<- read.table(sfile,sep="\t",skip=1,header=FALSE,strip.white=TRUE,quote="")
sgg<-annotateSCHanno(gg,shan)
summary(sgg)

## ----annotate_Chua, eval=FALSE------------------------------------------------
#  sfile<-system.file("extdata", "PresynAn.csv", package = "BioNAR")
#  pres <- read.csv(sfile,skip=1,header=FALSE,strip.white=TRUE,quote="")
#  sgg <- annotatePresynaptic(gg, pres)
#  summary(sgg)

## ----annotate_go--------------------------------------------------------------

ggGO <- annotateGOont(gg)

#however, functionality from GO: BP, MF,CC can be added

sfile<-system.file("extdata", "flatfile.go.BP.csv", package = "BioNAR")
goBP <- read.table(sfile,sep="\t",skip=1,header=FALSE,strip.white=TRUE,quote="")
sgg <- annotateGoBP(gg, goBP)
summary(sgg)

sfile<-system.file("extdata", "flatfile.go.MF.csv", package = "BioNAR")
goMF <- read.table(sfile,sep="\t",skip=1,header=FALSE,strip.white=TRUE,quote="")
sgg <- annotateGoMF(gg, goMF)
summary(sgg)

sfile<-system.file("extdata", "flatfile.go.CC.csv", package = "BioNAR")
goCC <- read.table(sfile,sep="\t",skip=1,header=FALSE,strip.white=TRUE,quote="")
sgg <- annotateGoCC(gg, goCC)
summary(sgg)


## ----graph_cent---------------------------------------------------------------
gg <- calcCentrality(gg)
summary(gg)

## ----matrix_cent--------------------------------------------------------------
mc <- getCentralityMatrix(gg)
head(mc)

## ----powerLaw,fig.height=8,fig.width=8,dpi=56---------------------------------
pFit <- fitDegree( as.vector(igraph::degree(graph=gg)),threads=1,Nsim=5,
                    plot=TRUE,WIDTH=2480, HEIGHT=2480)

## ----ent_rate,fig.height=8,fig.width=8,dpi=56---------------------------------
ent <- getEntropyRate(gg)
ent
SRprime <- getEntropy(gg, maxSr = NULL)
head(SRprime)
plotEntropy(SRprime, subTIT = "Entropy", SRo = ent$SRo, maxSr = ent$maxSr)

## ----norm_mod-----------------------------------------------------------------
nm<-normModularity(gg,alg='louvain')
nm

## ----cluster.mem--------------------------------------------------------------
# choose one algorithm from the list
alg = "louvain"
mem <- calcMembership(gg, alg)
pander(head(mem))

## ----cluster.mem2-------------------------------------------------------------
mem2 <- calcMembership(gg, alg)
idx<-match(mem$names,mem2$names)
idnx<-which(mem$membership!=mem2$membership[idx])
pander(head(cbind(mem[idnx,],mem2[idx[idnx],])))

## ----cluster------------------------------------------------------------------
gg <- calcClustering(gg, alg)
summary(gg)

## ----get.attr-----------------------------------------------------------------
mem.df<-data.frame(names=V(gg)$name,membership=as.numeric(V(gg)$louvain))

## ----calcAllClustering,eval=FALSE---------------------------------------------
#  ggc <- calcAllClustering(gg)

## ----calcAllClustering.hid,eval=TRUE,include=FALSE----------------------------
ggc <- ggCluster

## ----clusterSummary,eval=TRUE-------------------------------------------------
m<-clusteringSummary(ggc,att=c('lec','wt','fc',
                                'infomap','louvain',
                                'sgG1','sgG2','sgG5'))
pander(m)

## ----plot.color.graph,fig.height=8,fig.width=8,dpi=56-------------------------
palette <- distinctColorPalette(max(as.numeric(mem.df$membership)))
plot(gg,vertex.size=3,layout=layout_nicely,
        vertex.label=NA,
        vertex.color=palette[as.numeric(mem.df$membership)],
        edge.color='grey95')
legend('topright',legend=names(table(mem.df$membership)),
        col=palette,pch=19,ncol = 2)

## ----plot.clusterwise.graph,fig.height=8,fig.width=8,dpi=56-------------------
lay<-layoutByCluster(gg,mem.df,layout = layout_nicely)
plot(gg,vertex.size=3,layout=lay,
        vertex.label=NA,
        vertex.color=palette[as.numeric(mem.df$membership)],
        edge.color='grey95')
legend('topright',legend=names(table(mem.df$membership)),
        col=palette,pch=19,ncol = 2)

## ----ploc.cluster.communities,fig.height=8,fig.width=8,dpi=56-----------------
idx<-match(V(gg)$name,mem.df$names)
cgg<-getCommunityGraph(gg,mem.df$membership[idx])
D0 = unname(degree(cgg))
plot(cgg, vertex.size=sqrt(V(cgg)$size), vertex.cex = 0.8,
vertex.color=round(log(D0))+1,layout=layout_with_kk,margin=0)

## ----recluster----------------------------------------------------------------
remem<-calcReclusterMatrix(gg,mem.df,alg,10)
head(remem)

## ----plot.recluster.layout,fig.height=8,fig.width=8,dpi=56--------------------
lay<-layoutByRecluster(gg,remem,layout_nicely)
plot(gg,vertex.size=3,layout=lay,
        vertex.label=NA,
        vertex.color=palette[as.numeric(mem.df$membership)],
        edge.color='grey95')
legend('topright',legend=names(table(mem.df$membership)),
        col=palette,pch=19,ncol = 2)

## ----cons_mat-----------------------------------------------------------------
#Build consensus matrix for louvain clustering
conmat <- makeConsensusMatrix(gg, N=5,
                                alg = alg, type = 2, 
                                mask = 10,reclust = FALSE, 
                                Cnmax = 10)


## ----plot.conmat.ecdf,fig.height=8,fig.width=8,dpi=56-------------------------
steps <- 100
Fn  <- ecdf(conmat[lower.tri(conmat)])
X<-seq(0,1,length.out=steps+1)
cdf<-Fn(X)
dt<-data.frame(cons=X,cdf=cdf)
ggplot(dt,aes(x=cons,y=cdf))+geom_line()+
        theme(            
        axis.title.x=element_text(face="bold",size=rel(2.5)),
        axis.title.y=element_text(face="bold",size=rel(2.5)),
        legend.title=element_text(face="bold",size=rel(1.5)),
        legend.text=element_text(face="bold",size=rel(1.5)),
        legend.key=element_blank())+
    theme(panel.grid.major = element_line(colour="grey40",size=0.2),
            panel.grid.minor = element_line(colour="grey40",size=0.1),
            panel.background = element_rect(fill="white"),
            panel.border = element_rect(linetype="solid",fill=NA))

## ----clcons-------------------------------------------------------------------
clrob<-getRobustness(gg, alg = alg, conmat)
pander(clrob)

## ----get.bridge---------------------------------------------------------------
br<-getBridgeness(gg,alg = alg,conmat)
pander(head(br))

## ----calc.bridge--------------------------------------------------------------
gg<-calcBridgeness(gg,alg = alg,conmat)
vertex_attr_names(gg)

## ----plot.bridgeness,fig.height=8,fig.width=8,dpi=56--------------------------
g<-plotBridgeness(gg,alg = alg,
               VIPs=c('8495','22999','8927','8573',
                      '26059','8497','27445','8499'),
               Xatt='SL',
               Xlab = "Semilocal Centrality (SL)",
               Ylab = "Bridgeness (B)",
               bsize = 3,
               spsize =7,
               MainDivSize = 0.8,
               xmin = 0,
               xmax = 1,
               ymin = 0,
               ymax = 1,
               baseColor="royalblue2",
               SPColor="royalblue2")
g

## ----plotly,fig.height=6,fig.width=6------------------------------------------
library(plotly)
g<-plotBridgeness(gg,alg = alg,
               VIPs=c('8495','22999','8927','8573',
                      '26059','8497','27445','8499'),
               Xatt='SL',
               Xlab = "Semilocal Centrality (SL)",
               Ylab = "Bridgeness (B)",
               bsize = 1,
               spsize =2,
               MainDivSize = 0.8,
               xmin = 0,
               xmax = 1,
               ymin = 0,
               ymax = 1,
               baseColor="royalblue2",
               SPColor="royalblue2")
ggplotly(g)

## ----disPairs,warning=FALSE,message=FALSE-------------------------------------
p <- calcDiseasePairs(
    gg,
    name = "TopOnto_OVG_HDO_ID",
    diseases = c("DOID:10652","DOID:3312"),
    permute = "r"
)
pander(p$disease_separation)

r <- runPermDisease(
    gg,
    name = "TopOnto_OVG_HDO_ID",
    diseases = c("DOID:10652","DOID:3312"),
    Nperm = 100,
    alpha = c(0.05, 0.01, 0.001)
)

pander(r$Disease_overlap_sig)

## ----ora,warning=FALSE,message=FALSE------------------------------------------
ora <- clusterORA(gg, alg, name = 'TopOnto_OVG_HDO_ID', vid = "name",alpha = 0.1, col = COLLAPSE)

## ----sessionInfo, echo=FALSE, results='asis', class='text', warning=FALSE-----
library(devtools)
si<-devtools::session_info()
cat('Platform\n\n')
pander::pander(si$platform)
cat('Packages\n\n')
knitr::kable(as.data.frame(si$packages)[,c('ondiskversion',
                                            'loadedversion','date',
                                            'source')],align = c('l','l'))

