Functions
library(stringi)
library(reticulate)
source_from_github(repositoy = "DEG_functions",version = "0.2.24")
source_from_github(repositoy = "cNMF_functions",version = "0.3.91",script_name = "cnmf_function_Harmony.R")
Data
xeno = readRDS("./Data/10x_xeno_1000.Rds")
lung = readRDS("./Data/lung_cancercells_withTP_onlyPatients.rds")
lung_patients = lung$patient.ident %>% unique() %>% as.character()
lung_patients_filtered = lung_patients[!(lung_patients %in% c("X1055new","X1099"))] # remove patients with less than 100 malignant cells
lung = subset(x = lung,subset = patient.ident %in% lung_patients_filtered)
from cnmf import cNMF
import pickle
f = open('./Data/cnmf/cnmf_objects/models_2Kvargenes_all_K_cnmf_obj.pckl', 'rb')
cnmf_obj = pickle.load(f)
f.close()
k = 9
density_threshold = 0.1
cnmf_obj.consensus(k=k, density_threshold=density_threshold,show_clustering=True)
usage_norm, gep_scores, _, _ = cnmf_obj.load_results(K=k, density_threshold=density_threshold)
usage_norm = py$usage_norm
gep_scores = py$gep_scores
gep_scores5_xeno = gep_scores #save
usage_norm5_xeno = usage_norm #save
#load
usage_norm = usage_norm5_xeno
gep_scores = gep_scores5_xeno
NMF usage

Programs
GSEA
for (col in seq_along(gep_scores)) {
ranked_vec = gep_scores[,col] %>% setNames(rownames(gep_scores)) %>% sort(decreasing = TRUE)
hyp_obj <- fgsea.wrapper(ranked_vec, genesets)
print_tab(hyp_dots(hyp_obj),title = paste0("gep",col))
}
gep1

gep2

gep3

gep4

gep5

gep6

gep7

gep8

gep9

NA
xeno = FindVariableFeatures(object = xeno,nfeatures = 2000)
xeno_vargenes = VariableFeatures(object = xeno)
xeno_expression = FetchData(object = xeno,vars = xeno_vargenes,slot='counts')
all_0_genes = colnames(xeno_expression)[colSums(xeno_expression==0, na.rm=TRUE)==nrow(xeno_expression)] #delete rows that have all 0
xeno_vargenes = xeno_vargenes[!xeno_vargenes %in% all_0_genes]
calculate score for
Xeno
import numpy as np
import scanpy as sc
xeno_expression = r.xeno_expression
xeno_vargenes = r.xeno_vargenes
tpm = compute_tpm(xeno_expression)
usage_by_calc = get_usage_from_score(counts=xeno_expression,tpm=tpm,genes=xeno_vargenes, cnmf_obj=cnmf_obj,k=k)
/sci/labs/yotamd/lab_share/avishai.wizel/python_envs/miniconda/envs/cnmf_env_6/bin/python3.7:7: FutureWarning: X.dtype being converted to np.float32 from float64. In the next version of anndata (0.9) conversion will not be automatic. Pass dtype explicitly to avoid this warning. Pass `AnnData(X, dtype=X.dtype, ...)` to get the future behavour.
/sci/labs/yotamd/lab_share/avishai.wizel/python_envs/miniconda/envs/cnmf_env_6/bin/python3.7:8: FutureWarning: X.dtype being converted to np.float32 from float64. In the next version of anndata (0.9) conversion will not be automatic. Pass dtype explicitly to avoid this warning. Pass `AnnData(X, dtype=X.dtype, ...)` to get the future behavour.
xeno_5_metagenes = py$usage_by_calc #save
all_metagenes = xeno_5_metagenes #load
colnames(all_metagenes) = c("IFNa","immune_response", "hypoxia","cell_cycle","unknown")
programs
expression

LS0tCnRpdGxlOiAnYHIgcnN0dWRpb2FwaTo6Z2V0U291cmNlRWRpdG9yQ29udGV4dCgpJHBhdGggJT4lIGJhc2VuYW1lKCkgJT4lIGdzdWIocGF0dGVybiA9ICJcXC5SbWQiLHJlcGxhY2VtZW50ID0gIiIpYCcgCmF1dGhvcjogIkF2aXNoYWkgV2l6ZWwiCmRhdGU6ICdgciBTeXMudGltZSgpYCcKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdG9jOiB5ZXMKICAgIHRvY19jb2xsYXBzZTogeWVzCiAgICB0b2NfZmxvYXQ6IAogICAgICBjb2xsYXBzZWQ6IEZBTFNFCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRvY19kZXB0aDogMQplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCgoKIyBGdW5jdGlvbnMKCmBgYHtyIHdhcm5pbmc9RkFMU0V9CmxpYnJhcnkoc3RyaW5naSkKbGlicmFyeShyZXRpY3VsYXRlKQpzb3VyY2VfZnJvbV9naXRodWIocmVwb3NpdG95ID0gIkRFR19mdW5jdGlvbnMiLHZlcnNpb24gPSAiMC4yLjI0IikKc291cmNlX2Zyb21fZ2l0aHViKHJlcG9zaXRveSA9ICJjTk1GX2Z1bmN0aW9ucyIsdmVyc2lvbiA9ICIwLjMuOTEiLHNjcmlwdF9uYW1lID0gImNubWZfZnVuY3Rpb25fSGFybW9ueS5SIikKCmBgYAoKIyBEYXRhCgpgYGB7ciByZWFkX2RhdGF9Cnhlbm8gPSByZWFkUkRTKCIuL0RhdGEvMTB4X3hlbm9fMTAwMC5SZHMiKQpsdW5nID0gcmVhZFJEUygiLi9EYXRhL2x1bmdfY2FuY2VyY2VsbHNfd2l0aFRQX29ubHlQYXRpZW50cy5yZHMiKQpsdW5nX3BhdGllbnRzID0gbHVuZyRwYXRpZW50LmlkZW50ICU+JSB1bmlxdWUoKSAlPiUgYXMuY2hhcmFjdGVyKCkKbHVuZ19wYXRpZW50c19maWx0ZXJlZCA9IGx1bmdfcGF0aWVudHNbIShsdW5nX3BhdGllbnRzICVpbiUgYygiWDEwNTVuZXciLCJYMTA5OSIpKV0gIyByZW1vdmUgcGF0aWVudHMgd2l0aCBsZXNzIHRoYW4gMTAwIG1hbGlnbmFudCBjZWxscwpsdW5nID0gc3Vic2V0KHggPSBsdW5nLHN1YnNldCA9IHBhdGllbnQuaWRlbnQgJWluJSBsdW5nX3BhdGllbnRzX2ZpbHRlcmVkKQpgYGAKCmBgYHtweXRob259CmZyb20gY25tZiBpbXBvcnQgY05NRgppbXBvcnQgcGlja2xlCmYgPSBvcGVuKCcuL0RhdGEvY25tZi9jbm1mX29iamVjdHMvbW9kZWxzXzJLdmFyZ2VuZXNfYWxsX0tfY25tZl9vYmoucGNrbCcsICdyYicpCmNubWZfb2JqID0gcGlja2xlLmxvYWQoZikKZi5jbG9zZSgpCmBgYAoKCmBgYHtweXRob259CmsgPSA5CmRlbnNpdHlfdGhyZXNob2xkID0gMC4xIApjbm1mX29iai5jb25zZW5zdXMoaz1rLCBkZW5zaXR5X3RocmVzaG9sZD1kZW5zaXR5X3RocmVzaG9sZCxzaG93X2NsdXN0ZXJpbmc9VHJ1ZSkKdXNhZ2Vfbm9ybSwgZ2VwX3Njb3JlcywgXywgXyA9IGNubWZfb2JqLmxvYWRfcmVzdWx0cyhLPWssIGRlbnNpdHlfdGhyZXNob2xkPWRlbnNpdHlfdGhyZXNob2xkKQoKYGBgCgpgYGB7cn0KdXNhZ2Vfbm9ybSA9IHB5JHVzYWdlX25vcm0KZ2VwX3Njb3JlcyA9IHB5JGdlcF9zY29yZXMKZ2VwX3Njb3JlczVfeGVubyA9IGdlcF9zY29yZXMgI3NhdmUgCnVzYWdlX25vcm01X3hlbm8gPSB1c2FnZV9ub3JtICNzYXZlCmBgYAoKYGBge3J9CiNsb2FkCnVzYWdlX25vcm0gPSB1c2FnZV9ub3JtNV94ZW5vCmdlcF9zY29yZXMgPSBnZXBfc2NvcmVzNV94ZW5vCmBgYAoKIyBOTUYgdXNhZ2UKYGBge3IgZmlnLmhlaWdodD0xMiwgZmlnLndpZHRoPTEyLCByZXN1bHRzPSdhc2lzJ30KCgogIGZvciAoaSBpbiAxOm5jb2wodXNhZ2Vfbm9ybSkpIHsKICAgIG1ldGFnZV9tZXRhZGF0YSA9IHVzYWdlX25vcm0gJT4lIGRwbHlyOjpzZWxlY3QoaSkKICAgIHhlbm8gPSBBZGRNZXRhRGF0YShvYmplY3QgPSB4ZW5vLG1ldGFkYXRhID0gbWV0YWdlX21ldGFkYXRhLGNvbC5uYW1lID0gcGFzdGUwKCJnZXAiLGkpKQogIH0KICAKICBGZWF0dXJlUGxvdChvYmplY3QgPSB4ZW5vLGZlYXR1cmVzID0gcGFzdGUwKCJnZXAiLDE6bmNvbCh1c2FnZV9ub3JtKSksbmNvbCA9IDMpCgoKYGBgCiMgUHJvZ3JhbXMgR1NFQSB7LnRhYnNldH0KCmBgYHtyIHJlc3VsdHM9J2FzaXMnfQogIGZvciAoY29sIGluIHNlcV9hbG9uZyhnZXBfc2NvcmVzKSkgewogICAgIHJhbmtlZF92ZWMgPSBnZXBfc2NvcmVzWyxjb2xdICU+JSBzZXROYW1lcyhyb3duYW1lcyhnZXBfc2NvcmVzKSkgJT4lIHNvcnQoZGVjcmVhc2luZyA9IFRSVUUpIAogICAgIGh5cF9vYmogPC0gZmdzZWEud3JhcHBlcihyYW5rZWRfdmVjLCBnZW5lc2V0cykKICAgICAgIHByaW50X3RhYihoeXBfZG90cyhoeXBfb2JqKSx0aXRsZSA9IHBhc3RlMCgiZ2VwIixjb2wpKQogIH0KYGBgCgpgYGB7cn0KeGVubyA9IEZpbmRWYXJpYWJsZUZlYXR1cmVzKG9iamVjdCA9IHhlbm8sbmZlYXR1cmVzID0gMjAwMCkKeGVub192YXJnZW5lcyA9IFZhcmlhYmxlRmVhdHVyZXMob2JqZWN0ID0geGVubykKCnhlbm9fZXhwcmVzc2lvbiA9IEZldGNoRGF0YShvYmplY3QgPSB4ZW5vLHZhcnMgPSB4ZW5vX3ZhcmdlbmVzLHNsb3Q9J2NvdW50cycpCmFsbF8wX2dlbmVzID0gY29sbmFtZXMoeGVub19leHByZXNzaW9uKVtjb2xTdW1zKHhlbm9fZXhwcmVzc2lvbj09MCwgbmEucm09VFJVRSk9PW5yb3coeGVub19leHByZXNzaW9uKV0gI2RlbGV0ZSByb3dzIHRoYXQgaGF2ZSBhbGwgMAp4ZW5vX3ZhcmdlbmVzID0geGVub192YXJnZW5lc1sheGVub192YXJnZW5lcyAlaW4lIGFsbF8wX2dlbmVzXQoKYGBgCgoKIyBjYWxjdWxhdGUgc2NvcmUgZm9yIFhlbm8KYGBge3B5dGhvbn0KaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBzY2FucHkgYXMgc2MKeGVub19leHByZXNzaW9uID0gci54ZW5vX2V4cHJlc3Npb24KeGVub192YXJnZW5lcyA9IHIueGVub192YXJnZW5lcwp0cG0gPSAgY29tcHV0ZV90cG0oeGVub19leHByZXNzaW9uKQp1c2FnZV9ieV9jYWxjID0gZ2V0X3VzYWdlX2Zyb21fc2NvcmUoY291bnRzPXhlbm9fZXhwcmVzc2lvbix0cG09dHBtLGdlbmVzPXhlbm9fdmFyZ2VuZXMsIGNubWZfb2JqPWNubWZfb2JqLGs9aykKYGBgCgpgYGB7cn0KeGVub181X21ldGFnZW5lcyA9IHB5JHVzYWdlX2J5X2NhbGMgI3NhdmUKYGBgCgoKYGBge3J9CmFsbF9tZXRhZ2VuZXMgPSB4ZW5vXzVfbWV0YWdlbmVzICNsb2FkCmNvbG5hbWVzKGFsbF9tZXRhZ2VuZXMpID0gYygiRU1UIiwiT1RfVE5GYSIsIk9UX0tSQVMiLCAiaHlwb3hpYSIsIm1vZGVsMTA3MSIsImNlbGxfY3ljbGUxIiwiY2VsbF9jeWNsZTIiLCJ1bmtub3duIiwidW5rbm93bl9FTVQiKQpgYGAKCgojIHByb2dyYW1zIGV4cHJlc3Npb24KYGBge3IgZWNobz1UUlVFLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTIsIHJlc3VsdHM9J2FzaXMnfQoKI2FkZCBlYWNoIG1ldGFnZW5lIHRvIG1ldGFkYXRhCmZvciAoaSAgaW4gMTpuY29sKGFsbF9tZXRhZ2VuZXMpKSB7CiAgbWV0YWdlbmVfbWV0YWRhdGEgPSBhbGxfbWV0YWdlbmVzWyxpLGRyb3A9Rl0KICB4ZW5vID0gQWRkTWV0YURhdGEob2JqZWN0ID0geGVubyxtZXRhZGF0YSA9IG1ldGFnZW5lX21ldGFkYXRhLGNvbC5uYW1lID0gbmFtZXMoYWxsX21ldGFnZW5lcylbaV0pCn0KCkZlYXR1cmVQbG90KG9iamVjdCA9IHhlbm8sZmVhdHVyZXMgPSBjb2xuYW1lcyhhbGxfbWV0YWdlbmVzKSxuY29sID0gMykKYGBgCgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9oeXBvdGhlcy5pcy9lbWJlZC5qcyIgYXN5bmM+PC9zY3JpcHQ+Cgo=