library(pagoda2)
library(dplyr)
library(conos)
library(parallel)
library(cowplot)
library(ggrepel)
library(Matrix)
library(data.table)
# some extra code for the comparative analysis here
source("/home/pkharchenko/m/pavan/DLI/conp2.r")
cdl <- readRDS("~/m/p2/examples/broadBM/full/full.cdl.rds")

Take complete patient 1 matrices, filter

cdl <- cdl[grep("MantonBM1",names(cdl))]
common.genes <- Reduce(intersect,lapply(cdl,rownames))
cdl <- lapply(cdl,function(x) x[common.genes,colSums(x)>500])
old.ann <- readRDS("~/m/p2/examples/figures/fig1/base.ann.rds")
cell.sizes <- lapply(cdl,colSums)
cell.sizes <- setNames(unlist(cell.sizes),unlist(lapply(cell.sizes,names)))

Conos integration to transfer labels: pre-processing

cdl.p2 <- lapply(cdl, basicP2proc, n.cores=30, min.cells.per.gene=0, n.odgenes=2e3, get.largevis=FALSE, make.geneknn=FALSE,get.tsne=T)

Integrate

con <- Conos$new(cdl.p2,n.cores=30)
con$buildGraph(k=15, k.self=5, space='PCA', ncomps=30, n.odgenes=2000, matching.method='mNN', metric='angular', verbose=TRUE)

Cluster and generate a 2D ebmedding

con$findCommunities(r=2)
con$embedGraph(method='UMAP'); 
emb <- con$embedding;

con$misc$embeddings <- list(UMAP=emb)
con$embedGraph(method='largeVis'); 
con$misc$embeddings <- list(largeVis=emb)

propagate labels

new.ann <- con$propagateLabels(labels = old.ann, verbose=T,fixed.initial.labels=TRUE)
new.ann <- new.ann$labels

Take a look:

alpha <- 0.1; size <- 0.1;
p1 <- con$plotGraph(title='clusters',alpha=alpha,size=size);
p2 <- con$plotGraph(color.by='sample',title='samples',mark.groups=F,alpha=alpha,size=size);
p3 <- con$plotGraph(groups=new.ann,alpha=alpha,size=size,title='annotation',plot.na=F)
p4 <- con$plotGraph(colors=cell.sizes,alpha=alpha,size=size,title='depth')
cowplot::plot_grid(plotlist=list(p1,p2,p3,p4),nrow=2)

con$plotPanel(groups=new.ann)

LS0tCnRpdGxlOiAiQnJvYWQgQk0gZXhhbXBsZXMiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyfQpsaWJyYXJ5KHBhZ29kYTIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoY29ub3MpCmxpYnJhcnkocGFyYWxsZWwpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KE1hdHJpeCkKbGlicmFyeShkYXRhLnRhYmxlKQojIHNvbWUgZXh0cmEgY29kZSBmb3IgdGhlIGNvbXBhcmF0aXZlIGFuYWx5c2lzIGhlcmUKc291cmNlKCIvaG9tZS9wa2hhcmNoZW5rby9tL3BhdmFuL0RMSS9jb25wMi5yIikKYGBgCgoKCmBgYHtyfQpjZGwgPC0gcmVhZFJEUygifi9tL3AyL2V4YW1wbGVzL2Jyb2FkQk0vZnVsbC9mdWxsLmNkbC5yZHMiKQpgYGAKClRha2UgY29tcGxldGUgcGF0aWVudCAxIG1hdHJpY2VzLCBmaWx0ZXIKYGBge3J9CmNkbCA8LSBjZGxbZ3JlcCgiTWFudG9uQk0xIixuYW1lcyhjZGwpKV0KY29tbW9uLmdlbmVzIDwtIFJlZHVjZShpbnRlcnNlY3QsbGFwcGx5KGNkbCxyb3duYW1lcykpCmNkbCA8LSBsYXBwbHkoY2RsLGZ1bmN0aW9uKHgpIHhbY29tbW9uLmdlbmVzLGNvbFN1bXMoeCk+NTAwXSkKb2xkLmFubiA8LSByZWFkUkRTKCJ+L20vcDIvZXhhbXBsZXMvZmlndXJlcy9maWcxL2Jhc2UuYW5uLnJkcyIpCmNlbGwuc2l6ZXMgPC0gbGFwcGx5KGNkbCxjb2xTdW1zKQpjZWxsLnNpemVzIDwtIHNldE5hbWVzKHVubGlzdChjZWxsLnNpemVzKSx1bmxpc3QobGFwcGx5KGNlbGwuc2l6ZXMsbmFtZXMpKSkKYGBgCgpDb25vcyBpbnRlZ3JhdGlvbiB0byB0cmFuc2ZlciBsYWJlbHM6CnByZS1wcm9jZXNzaW5nCmBgYHtyfQpjZGwucDIgPC0gbGFwcGx5KGNkbCwgYmFzaWNQMnByb2MsIG4uY29yZXM9MzAsIG1pbi5jZWxscy5wZXIuZ2VuZT0wLCBuLm9kZ2VuZXM9MmUzLCBnZXQubGFyZ2V2aXM9RkFMU0UsIG1ha2UuZ2VuZWtubj1GQUxTRSxnZXQudHNuZT1UKQpgYGAKCkludGVncmF0ZQpgYGB7cn0KY29uIDwtIENvbm9zJG5ldyhjZGwucDIsbi5jb3Jlcz0zMCkKY29uJGJ1aWxkR3JhcGgoaz0xNSwgay5zZWxmPTUsIHNwYWNlPSdQQ0EnLCBuY29tcHM9MzAsIG4ub2RnZW5lcz0yMDAwLCBtYXRjaGluZy5tZXRob2Q9J21OTicsIG1ldHJpYz0nYW5ndWxhcicsIHZlcmJvc2U9VFJVRSkKYGBgCgpDbHVzdGVyIGFuZCBnZW5lcmF0ZSBhIDJEIGVibWVkZGluZwpgYGB7cn0KY29uJGZpbmRDb21tdW5pdGllcyhyPTIpCmNvbiRlbWJlZEdyYXBoKG1ldGhvZD0nVU1BUCcpOyAKZW1iIDwtIGNvbiRlbWJlZGRpbmc7Cgpjb24kbWlzYyRlbWJlZGRpbmdzIDwtIGxpc3QoVU1BUD1lbWIpCmBgYAoKYGBge3J9CmNvbiRlbWJlZEdyYXBoKG1ldGhvZD0nbGFyZ2VWaXMnKTsgCmNvbiRtaXNjJGVtYmVkZGluZ3MgPC0gbGlzdChsYXJnZVZpcz1lbWIpCmBgYAoKCnByb3BhZ2F0ZSBsYWJlbHMKYGBge3J9Cm5ldy5hbm4gPC0gY29uJHByb3BhZ2F0ZUxhYmVscyhsYWJlbHMgPSBvbGQuYW5uLCB2ZXJib3NlPVQsZml4ZWQuaW5pdGlhbC5sYWJlbHM9VFJVRSkKbmV3LmFubiA8LSBuZXcuYW5uJGxhYmVscwpgYGAKCgpUYWtlIGEgbG9vazoKYGBge3IgZmlnLndpZHRoPTksZmlnLmhlaWdodD0xMH0KYWxwaGEgPC0gMC4xOyBzaXplIDwtIDAuMTsKcDEgPC0gY29uJHBsb3RHcmFwaCh0aXRsZT0nY2x1c3RlcnMnLGFscGhhPWFscGhhLHNpemU9c2l6ZSk7CnAyIDwtIGNvbiRwbG90R3JhcGgoY29sb3IuYnk9J3NhbXBsZScsdGl0bGU9J3NhbXBsZXMnLG1hcmsuZ3JvdXBzPUYsYWxwaGE9YWxwaGEsc2l6ZT1zaXplKTsKcDMgPC0gY29uJHBsb3RHcmFwaChncm91cHM9bmV3LmFubixhbHBoYT1hbHBoYSxzaXplPXNpemUsdGl0bGU9J2Fubm90YXRpb24nLHBsb3QubmE9RikKcDQgPC0gY29uJHBsb3RHcmFwaChjb2xvcnM9Y2VsbC5zaXplcyxhbHBoYT1hbHBoYSxzaXplPXNpemUsdGl0bGU9J2RlcHRoJykKY293cGxvdDo6cGxvdF9ncmlkKHBsb3RsaXN0PWxpc3QocDEscDIscDMscDQpLG5yb3c9MikKYGBgCgpgYGB7ciBmaWcuaGVpZ2h0PTEwLGZpZy53aWR0aD0xMH0KY29uJHBsb3RQYW5lbChncm91cHM9bmV3LmFubikKYGBgCgo=