--- a +++ b/bin/archr_gene_integration.R @@ -0,0 +1,100 @@ +# Code to integrate atac and rna using archr +# References +# https://www.archrproject.com/bookdown/cross-platform-linkage-of-scatac-seq-cells-with-scrna-seq-cells.html +# We do this using the paired ATAC/RNA GM12878 data +rm(list = ls(all.names = TRUE)) # Clear environment + +# Some other useful links +# https://stackoverflow.com/questions/9776064/how-do-i-test-if-r-is-running-as-rscript +# https://stackoverflow.com/questions/45325863/how-to-access-hidden-functions-that-are-very-well-hidden + +library(tools) +library(optparse) +library(Matrix) +# https://www.r-bloggers.com/passing-arguments-to-an-r-script-from-command-lines/ +# https://stackoverflow.com/questions/13790610/passing-multiple-arguments-via-command-line-in-r +# https://gallery.rcpp.org/articles/sparse-matrix-coercion/ + +if (!interactive()){ + option_list = list( + make_option(c("-a", "--archr"), type="character", default=NULL, + help="Archr file", metavar="character"), + make_option(c("-s", "--seurat"), type="character", default=NULL, + help="Seurat file", metavar="character"), + make_option(c("-o", "--out"), type="character", default="archr_gene_integration", + help="output file name prefix [default= %default]", metavar = "character"), + make_option(c("-g", "--grouping"), type = "character", default = "RNA_snn_res.1", + help="grouping to use for RNA object", metavar = "character") + ); + + opt_parser = OptionParser(option_list=option_list); + opt = parse_args(opt_parser); + + if (is.null(opt$archr) | is.null(opt$seurat)){ + print_help(opt_parser) + stop("At least one argument must be supplied (input file).n", call.=FALSE) + } + + archr_dir <- opt$archr + seurat_file <- opt$seurat + output_prefix <- opt$out + grouping_key <- opt$grouping +} else { + setwd("/Users/kevin/Documents/Stanford/zou/single_cell_rep/commonspace_data/tmp") + archr_dir <- "/Users/kevin/Documents/Stanford/zou/single_cell_rep/commonspace_data/archr_gene_activities/GM12878" + seurat_file <- "/Users/kevin/Documents/Stanford/zou/single_cell_rep/commonspace_data/seurat_scrnaseq/GM12878_scraseq_seurat.rds" + output_prefix <- "temptest" + grouping_key <- "RNA_snn_res.1" + imputed_genes <- as.matrix( + read.csv(file = "/Users/kevin/Documents/Stanford/zou/single_cell_rep/commonspace_eval/evalGM_logsplit_DM_HSR_PBMC/atac_rna_table.csv", row.names = 0) + ) +} + + + +library(ArchR) +library(Seurat) + +gm.archr.proj = loadArchRProject(path = archr_dir) +# gm.archr.proj <- addIterativeLSI(ArchRProj = gm.archr.proj, useMatrix = "TileMatrix", name = "IterativeLSI") + +if (interactive()) { + ArchR:::.addMatToArrow( + mat = imputed_genes, + ArrowFile = getArrowFiles(gm.archr.proj)[2], + Group = "GeneScoreMatrix/1", + binarize = FALSE, + addColSums = TRUE, + addRowSums = TRUE, + addRowVarsLog2 = TRUE, + ) +} + +input_seurat_ext <- file_ext(seurat_file) +if (input_seurat_ext == "rds") { + gm.seurat <- readRDS(seurat_file) +} else if (input_seurat_ext == "h5ad") { + gm.seurat <- ReadH5AD(seurat_file) +} else { + stop("Unrecognized file extension") +} + + +gm.archr.proj <- addGeneIntegrationMatrix( + ArchRProj = gm.archr.proj, + useMatrix = "GeneScoreMatrix", + matrixName = "GeneIntegrationMatrix", + reducedDims = "IterativeLSI", + seRNA = gm.seurat, + addToArrow = TRUE, + groupRNA = grouping_key, + nameCell = "predictedCell_Un", + nameGroup = "predictedGroup_Un", + nameScore = "predictedScore_Un", + force = TRUE, +) + +mat = getMatrixFromProject(gm.archr.proj, useMatrix = "GeneIntegrationMatrix") +writeMM(assays(mat)[['GeneIntegrationMatrix']], paste(output_prefix, "_gene_integration.mtx", sep="")) # Write the numerical matrix +write.csv(rowData(mat), paste(output_prefix, "_gene_integration_var.csv", sep="")) +write.csv(colData(mat), paste(output_prefix, "_gene_integration_obs.csv", sep=""))