diff --git a/.Rhistory b/.Rhistory
new file mode 100644
index 0000000..b64f754
--- /dev/null
+++ b/.Rhistory
@@ -0,0 +1,512 @@
+temp
+as.data.frame(temp)
+gwas_df <- as.data.frame(temp)
+sum(gwas_df$is_query_snp)
+colnames(gwas_df)
+head(gwas_df$GENCODE_name)
+head(gwas_df$eQTL)
+colnames(gwas_df)
+keep_columns <- c("chr","pos_hg38","r2","D'","is_query_snp","rsID","ref","alt","AFR","AMR","ASN","EUR","GERP_cons",
+"SiPhy_cons","GENCODE_id","GENCODE_name","GENCODE_direction","GENCODE_distance","RefSeq_id",
+"RefSeq_name","RefSeq_direction","RefSeq_distance","query_snp_rsid")
+gwas_df <- gwas_df[,keep_columns]
+gwas_df
+tf_gr <- readRDS("K:/Shared drives/Brain_Merged/Analysis/GTEx/190829_TF_PromoterRegions.rds")
+tf_gr
+ArchRx::countInsertions
+?edgeR::cpm
+se <- readRDS("K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/Cluster_Analyses/clusterFrags/ClusterGroups/190830_CellTypes_TF-Promoters_ArchRSE.rds")
+se
+norm_counts <- as.data.frame(assays(se)$log2norm)
+head(norm_counts)
+write.table(x = norm_counts, file = "190830_TF-Promoters_NormAccessibility.txt", col.names = NA, quote = FALSE, sep = "\t")
+getwd()
+library(GenomicRanges)
+library(ArchRx)
+snp_df <- read.table(file = snp_file, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
+snp_file <- "K:/Shared drives/Brain_Merged/Analysis/GWAS/ld_buddies_table_stage2.tsv"
+snp_df <- read.table(file = snp_file, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
+head(snp_df)
+snp_gr <- makeGRangesFromDataFrame(df = snp_df,
+keep.extra.columns = TRUE,
+ignore.strand = TRUE,
+seqnames.field = "chr",
+start.field = "pos",
+end.field = "pos",
+starts.in.df.are.0based = FALSE)
+unique(snp_df$source_gwas)
+snp_df <- read.table(file = snp_file, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
+snp_df$disease <- NA
+snp_df$disease[which(snp_df$source_gwas == "23andme_PD_hg38.with.ld.buddies.txt")] <- "PD"
+snp_df$disease[which(snp_df$source_gwas == "Chang_23andMe_Parkinsons_LeadSNPs.with.ld.buddies.txt")] <- "PD"
+snp_df$disease[which(snp_df$source_gwas == "Nalls_23andMe_LeadSNPs.with.ld.buddies.txt")] <- "PD"
+snp_df$disease[which(snp_df$source_gwas == "Parkinsons_Pankratz_2012.with.ld.buddies.txt")] <- "PD"
+snp_df$disease[which(snp_df$source_gwas == "Alzheimers_Kunkle_2019.with.ld.buddies.txt")] <- "AD"
+snp_df$disease[which(snp_df$source_gwas == "Alzheimers_Jansen_2018.with.ld.buddies.txt")] <- "AD"
+snp_df$disease[which(snp_df$source_gwas == "Alzheimers_Lambert_2013.with.ld.buddies.txt")] <- "AD"
+which(is.na(snp_df$disease))
+num_AD <- length(which(snp_df$disease == "AD"))
+num_PD <- length(which(snp_df$disease == "PD"))
+num_AD
+num_PD
+which(duplicated(paste0(snp_df$source_gwas,"_",snp_df$snp_id)))
+which(duplicated(paste0(snp_df$disease,"_",snp_df$snp_id)))
+snp_df_dedupDisease <- snp_df[which(duplicated(paste0(snp_df$disease,"_",snp_df$snp_id))),]
+num_AD <- length(which(snp_df_dedupDisease$disease == "AD"))
+num_PD <- length(which(snp_df_dedupDisease$disease == "PD"))
+num_AD
+num_PD
+head(snp_df$snp_id)
+snp_df_dedupDisease <- snp_df[which(duplicated(paste0(snp_df$disease,"_",snp_df$rsid))),]
+length(which(snp_df_dedupDisease$disease == "AD"))
+length(which(snp_df_dedupDisease$disease == "PD"))
+num_AD <- length(which(snp_df_dedupDisease$disease == "AD"))
+num_PD <- length(which(snp_df_dedupDisease$disease == "PD"))
+which(snp_df_dedupDisease[which(snp_df_dedupDisease == "AD"),"snp_id"] %in% snp_df_dedupDisease[which(snp_df_dedupDisease == "PD"),"snp_id"])
+overlap <- which(snp_df_dedupDisease[which(snp_df_dedupDisease == "AD"),"snp_id"] %in% snp_df_dedupDisease[which(snp_df_dedupDisease == "PD"),"snp_id"])
+snp_df_dedupDisease <- snp_df[which(duplicated(paste0(snp_df$disease,"_",snp_df$rsid))),]
+num_AD <- length(which(snp_df_dedupDisease$disease == "AD"))
+num_PD <- length(which(snp_df_dedupDisease$disease == "PD"))
+num_AD <- length(which(snp_df_dedupDisease$disease == "AD"))
+num_PD <- length(which(snp_df_dedupDisease$disease == "PD"))
+overlap <- length(which(snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "AD"),"snp_id"] %in% snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "PD"),"snp_id"]))
+overlap
+snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "AD"),"snp_id"]
+snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "PD"),"snp_id"]
+overlap <- length(which(snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "AD"),"snp_id"] %in% snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "PD"),"snp_id"]))
+overlap
+duplicated(paste0(snp_df$disease,"_",snp_df$rsid))
+snp_df_dedupDisease <- snp_df[which(!duplicated(paste0(snp_df$disease,"_",snp_df$rsid))),]
+num_AD <- length(which(snp_df_dedupDisease$disease == "AD"))
+num_PD <- length(which(snp_df_dedupDisease$disease == "PD"))
+num_AD
+num_PD
+overlap <- length(which(snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "AD"),"snp_id"] %in% snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "PD"),"snp_id"]))
+overlap
+snp_df_dedupDisease
+length(which(snp_df[which(snp_df$disease == "AD"),"snp_id"] %in% snp_df[which(snp_df$disease == "PD"),"snp_id"]))
+ad_snp_gr <- makeGRangesFromDataFrame(df = snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "AD"),],
+keep.extra.columns = TRUE,
+ignore.strand = TRUE,
+seqnames.field = "chr",
+start.field = "pos",
+end.field = "pos",
+starts.in.df.are.0based = FALSE)
+pd_snp_gr <- makeGRangesFromDataFrame(df = snp_df_dedupDisease[which(snp_df_dedupDisease$disease == "PD"),],
+keep.extra.columns = TRUE,
+ignore.strand = TRUE,
+seqnames.field = "chr",
+start.field = "pos",
+end.field = "pos",
+starts.in.df.are.0based = FALSE)
+bulk_gr <- readRDS("K:/Shared drives/Brain_Merged/Analysis/ArchR_KundajeCounts/PeakCalls/190716_Kundaje_IDR-Peaks_ControlsOnly_30percent.rds")
+sc_gr <- readRDS("K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/peakCalls/190812_Kundaje_scATAC_IDR_MergedPeakSet.rds")
+?overlapsAny
+overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")
+seqlevelsStyle(x = ad_snp_gr) <- "UCSC"
+ad_snp_gr
+seqlevelsStyle(x = pd_snp_gr) <- "UCSC"
+which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any"))
+ad_overlaps <- intersect(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))
+ad_overlaps
+pd_overlaps <- intersect(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = pd_snp_gr, subject = sc_gr, type = "any")))
+pd_overlaps
+which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any"))
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any"))
+union(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))
+union(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = pd_snp_gr, subject = sc_gr, type = "any")))
+ad_overlaps <- union(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))
+pd_overlaps <- union(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = pd_snp_gr, subject = sc_gr, type = "any")))
+length(ad_overlaps)
+which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any"))
+which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any"))
+length(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")))
+length(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")))
+length(ad_overlaps)
+ad_overlaps <- union(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))
+pd_overlaps <- union(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = pd_snp_gr, subject = sc_gr, type = "any")))
+length(pd_overlaps)
+ad_snp_gr[union(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))]
+ad_overlap_gr <- ad_snp_gr[union(which(overlapsAny(query = ad_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = ad_snp_gr, subject = sc_gr, type = "any")))]
+pd_overlap_gr <- pd_snp_gr[union(which(overlapsAny(query = pd_snp_gr, subject = bulk_gr, type = "any")),
+which(overlapsAny(query = pd_snp_gr, subject = sc_gr, type = "any")))]
+pd_overlap_gr
+pd_overlap_gr["11530"]
+bed_files <- list.files(path = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/peakCalls/", pattern="narrowPeak")
+bed_files
+bed_files <- list.files(path = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/peakCalls/", pattern="narrowPeak", full.names = TRUE)
+bed_files
+library(rtracklayer)
+for(i in bed_files) {
+gr <- import.bed(con = i)
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+bed_files <- list.files(path = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/peakCalls/Cluster-based/", pattern = "narrowPeak", full.names = TRUE)
+bed_files
+for(i in bed_files) {
+gr <- import.bed(con = i)
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+library(rtracklayer)
+for(i in bed_files) {
+gr <- import.bed(con = i)
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+bed_files
+for(i in bed_files) {
+gr <- import.bed(con = i)
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+?import.bed
+for(i in bed_files) {
+gr <- import.bed(con = i, format = "narrowPeak")
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+for(i in bed_files) {
+gr <- import(con = i, format = "narrowPeak")
+export.bed(object = gr, con = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+for(i in bed_files) {
+gr <- import(con = i, format = "narrowPeak")
+saveRDS(object = gr, file = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+bed_files <- list.files(path = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/peakCalls/CellType-based/", pattern = "narrowPeak", full.names = TRUE)
+for(i in bed_files) {
+gr <- import(con = i, format = "bed")
+saveRDS(object = gr, file = gsub(pattern = "narrowPeak", replacement = "rds", x = i))
+}
+if (!requireNamespace("BiocManager", quietly = TRUE))
+install.packages("BiocManager")
+BiocManager::install("DEGreport")
+library(DEGreport)
+data(humanGender)
+library(DESeq2)
+idx <- c(1:10, 75:85)
+dse <- DESeqDataSetFromMatrix(assays(humanGender)[[1]][1:1000, idx],
+colData(humanGender)[idx,], design=~group)
+res <- degCovariates(log2(counts(dse)+0.5), colData(dse))
+res <- degCovariates(log2(counts(dse)+0.5),
+colData(dse), legacy = TRUE)
+res$plot
+res$scatterPlot[[1]]
+res
+res <- degCovariates(log2(counts(dse)+0.5), colData(dse), minPC = 0)
+res
+res <- degCovariates(log2(counts(dse)+0.5), colData(dse), minPC = 10)
+res
+degCovariates
+se <- readRDS("K:/Shared drives/Brain_Merged/Analysis/ArchR_KundajeCounts/190716_ArchRSE_ControlsOnly_Kundaje_30percent_Counts_NormCounts.rds")
+res <- degCovariates(counts = assays(se)$log2norm, metadata = colData(se), minPC = 5)
+str(res)
+res
+degCovariates
+counts <- assays(se)$log2norm
+metadata <- colData(se)
+minPC <- 5
+fdr = 0.1
+scale = FALSE
+correlation = "kendall"
+addCovDen = TRUE
+legacy = FALSE
+smart = TRUE
+method = "lm"
+plot = TRUE
+title <- paste(ifelse(scale, "s", "un-s"), "caled ", " data in pca;\npve >= ",
+minPC, "%;\n", correlation, " cor ", sep = "")
+title
+message(paste("\nrunning pca and calculating correlations for:\n",
+title, sep = ""))
+metadata <- as.data.frame(metadata)
+metadata
+metadata <- degClean(metadata)
+metadata <- DEGreport:::degClean(metadata)
+metadata
+covar_class <- sapply(metadata[1, ], class)
+covar_class
+metadata <- metadata %>% mutate_all(as.numeric) %>% as.data.frame() %>%
+set_rownames(row.names(metadata))
+metadata <- metadata %>% DEGreport:::mutate_all(as.numeric) %>% as.data.frame() %>%
+set_rownames(row.names(metadata))
+DEGreport:::mutate_all
+mutate_all
+library(dplyr)
+metadata <- metadata %>% mutate_all(as.numeric) %>% as.data.frame() %>%
+set_rownames(row.names(metadata))
+stopifnot(identical(colnames(counts), rownames(metadata)))
+pcares <- .runpca(genesbysamples = counts, scale_data_for_pca = scale,
+min_pve_pct_pc = minPC)
+DEGreport::runpca
+.runpca <- function(genesbysamples, scale_data_for_pca = TRUE,
+min_pve_pct_pc = 1.0) {
+# estimate variance in data by pc:
+pca.res <- prcomp(t(genesbysamples), center = TRUE,
+scale. = scale_data_for_pca, retx = TRUE)
+# examine how much variance is explained by pcs,
+# and consider those with pve >= (min_pve_pct_pc %):
+pc.var <- pca.res$sdev^2L
+pve <- 100L * (pc.var / sum(pc.var))
+npca <- max(1L, length(which(pve >= min_pve_pct_pc)))
+samplepcvals <- pca.res$x[, 1L:npca, drop = FALSE]
+list(samplepcvals = samplepcvals, pve = pve)
+}
+pcares <- .runpca(genesbysamples = counts, scale_data_for_pca = scale,
+min_pve_pct_pc = minPC)
+pcares
+samplepcvals <- pcares[["samplepcvals"]]
+samplepcvals
+pve <- pcares[["pve"]]
+original_names <- colnames(samplepcvals)
+original_names
+pc_pct <- data.frame(pc = colnames(samplepcvals), pct = paste(" (",
+sprintf("%.2f", pve[1L:ncol(samplepcvals)]), "%)", sep = ""),
+stringsAsFactors = FALSE)
+pc_pct
+samplesbyfullcovariates <- metadata[, which(apply(metadata,
+2L, function(dat) all(!is.na(dat)))), drop = FALSE]
+samplesbyfullcovariates
+covar_class <- covar_class[colnames(samplesbyfullcovariates)]
+covar_class
+exclude_vars_from_fdr <- setdiff(colnames(metadata), colnames(samplesbyfullcovariates))
+exclude_vars_from_fdr
+covar_factors <- samplesbyfullcovariates[, names(covar_class)[covar_class !=
+"numeric"], drop = FALSE]
+covar_factors
+covar_numeric <- samplesbyfullcovariates[, names(covar_class)[covar_class ==
+"numeric"]]
+covar_numeric
+samplesbyfullcovariates = cbind(covar_factors, covar_numeric)
+samplesbyfullcovariates
+.calccompletecorandplot <- function(compare_data, covar_data,
+correlationtype, title,
+weights = NULL,
+exclude_vars_from_fdr=NULL,
+max_fdr = 0.1) {
+# get factor and continuous covariates
+character_vars <- lapply(covar_data, class) == "character"
+if (sum(character_vars) > 0 )
+covar_data[, character_vars] <- apply(covar_data[, character_vars,
+drop = FALSE],
+1L, as.factor)
+factorcovariates <- select_if(covar_data, is.factor) %>% colnames
+contcovariates <- select_if(covar_data, is.numeric) %>% colnames
+all_covariates <- cbind(covar_data[, contcovariates, drop = FALSE],
+covar_data[, factorcovariates, drop = FALSE] %>%
+mutate_all(as.numeric))
+cov_cor <- corr.test(compare_data,
+all_covariates,
+use = 'pairwise.complete.obs',
+method = correlationtype,
+adjust = "none")
+all_cor_vals <- cov_cor[["r"]]
+all_cor_p <- cov_cor[["p"]]
+rownames(all_cor_vals) <- colnames(compare_data)
+colnames(all_cor_vals) <- colnames(all_covariates)
+rownames(all_cor_p) <- colnames(compare_data)
+colnames(all_cor_p) <- colnames(all_covariates)
+effects.significantcovars <- all_cor_vals
+effects.significantcovars[all_cor_p > max_fdr] <- 0
+effects.significantcovars <- colSums(abs(effects.significantcovars) * replicate(dim(effects.significantcovars)[2L], weights / sum(weights)))
+effects.significantcovars <- effects.significantcovars[order(abs(effects.significantcovars), decreasing = TRUE)]
+cor_mat <- melt(all_cor_p, varnames = c("compare", "covar"))
+colnames(cor_mat)[colnames(cor_mat) == "value"] <- "pvalue"
+cor_mat[["compare"]] <- factor(cor_mat[["compare"]],
+levels = rownames(all_cor_p))
+cor_mat[["covar"]] <- factor(cor_mat[["covar"]],
+levels = colnames(all_cor_p))
+cor_mat[["r"]] <- melt(all_cor_vals)[["value"]]
+cor_mat[["fdr"]] <- p.adjust(cor_mat[["pvalue"]], method = "fdr")
+return(list(mat = cor_mat,
+effects.significantcovars = effects.significantcovars))
+}
+corrRes <- .calccompletecorandplot(samplepcvals, samplesbyfullcovariates,
+correlation, title, weights = pve[1L:dim(samplepcvals)[2L]],
+exclude_vars_from_fdr)
+DEGreport::corr.test
+install.packages("psych")
+install.packages("psych")
+install.packages("psych")
+install.packages("psych")
+library(psych)
+GInteractionsToWashU <- function(gi, minDist = NULL, outfile = NULL, url = FALSE) {
+#if minimum distance is supplied, threshold the gi object upfront
+if(!is.null(minDist)) {
+gi <- gi[which(gi$dist >= minDist)]
+}
+df <- data.frame() #this will hold the data for output
+#store the information for the mid-point of each anchor
+middleOne <- round((end(ranges(anchorOne(gi))) + start(ranges(anchorOne(gi))))/2 )
+middleTwo <- round((end(ranges(anchorTwo(gi))) + start(ranges(anchorTwo(gi))))/2 )
+if(url) {
+df1 <- data.frame(chr1 = seqnames(anchorOne(gi)),
+start1 = middleOne-1,
+end1 = middleOne +1,
+coord2 = paste0(seqnames(anchorTwo(gi)),":",middleTwo-1,"-",middleTwo+1,",",gi$coaccess),
+orderID = seq(from = 1, to = length(gi), by = 1))
+df2 <- data.frame(chr1 = seqnames(anchorTwo(gi)),
+start1 = middleTwo-1,
+end1 = middleTwo +1,
+coord2 = paste0(seqnames(anchorOne(gi)),":",middleOne-1,"-",middleOne+1,",",gi$coaccess),
+orderID = seq(from = 1, to = length(gi), by = 1))
+df_url <- rbind(df1, df2)
+df_url <- df_url[order(df_url$start1),]
+df_url <- df_url[order(gsub(pattern = "chr", replacement = "", x = df_url$chr1)),]
+df_url$orderID <- seq(from = 1, to = nrow(df_url), by = 1)
+df_url$direction <- "."
+df <- df_url
+} else {
+df <- as.data.frame(matrix(nrow = length(gi), ncol = 3, NA))
+colnames(df) <- c("anchor1", "anchor2", "score")
+df$anchor1 <- paste(seqnames(anchorOne(gi)), middleOne-1, middleOne+1, sep = ",")
+df$anchor2 <- paste(seqnames(anchorTwo(gi)), middleTwo-1, middleTwo+1, sep = ",")
+df$score <- gi$coaccess
+}
+if(!is.null(outfile)) {
+write.table(x = df, file = outfile, quote = FALSE, sep = "\t", col.names = FALSE, row.names = FALSE)
+} else {
+return(df)
+}
+}
+gi <- readRDS("K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions.rds")
+GInteractionsToWashU(gi = gi, minDist = 10000, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.txt", url = TRUE)
+#see http://wiki.wubrowse.org/Long-range
+GInteractionsToWashU <- function(gi, minDist = NULL, outfile = NULL, url = FALSE) {
+#if minimum distance is supplied, threshold the gi object upfront
+if(!is.null(minDist)) {
+gi <- gi[which(gi$dist >= minDist)]
+}
+df <- data.frame() #this will hold the data for output
+#store the information for the mid-point of each anchor
+middleOne <- round((end(ranges(anchorOne(gi))) + start(ranges(anchorOne(gi))))/2 )
+middleTwo <- round((end(ranges(anchorTwo(gi))) + start(ranges(anchorTwo(gi))))/2 )
+if(url) {
+df1 <- data.frame(chr1 = seqnames(anchorOne(gi)),
+start1 = middleOne-1,
+end1 = middleOne +1,
+coord2 = paste0(seqnames(anchorTwo(gi)),":",middleTwo-1,"-",middleTwo+1,",",gi$coaccess),
+orderID = seq(from = 1, to = length(gi), by = 1))
+df2 <- data.frame(chr1 = seqnames(anchorTwo(gi)),
+start1 = middleTwo-1,
+end1 = middleTwo +1,
+coord2 = paste0(seqnames(anchorOne(gi)),":",middleOne-1,"-",middleOne+1,",",gi$coaccess),
+orderID = seq(from = 1, to = length(gi), by = 1))
+df_url <- as.data.frame(rbind(df1, df2))
+df_url <- df_url[order(df_url$start1),]
+df_url <- df_url[order(gsub(pattern = "chr", replacement = "", x = df_url$chr1)),]
+df_url$orderID <- seq(from = 1, to = nrow(df_url), by = 1)
+df_url$direction <- "."
+df <- df_url
+} else {
+df <- as.data.frame(matrix(nrow = length(gi), ncol = 3, NA))
+colnames(df) <- c("anchor1", "anchor2", "score")
+df$anchor1 <- paste(seqnames(anchorOne(gi)), middleOne-1, middleOne+1, sep = ",")
+df$anchor2 <- paste(seqnames(anchorTwo(gi)), middleTwo-1, middleTwo+1, sep = ",")
+df$score <- gi$coaccess
+}
+if(!is.null(outfile)) {
+write.table(x = df, file = outfile, quote = FALSE, sep = "\t", col.names = FALSE, row.names = FALSE)
+} else {
+return(df)
+}
+}
+GInteractionsToWashU(gi = gi, minDist = 10000, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.txt", url = TRUE)
+middleOne <- round((end(ranges(anchorOne(gi))) + start(ranges(anchorOne(gi))))/2 )
+library(GenomicInteractions)
+GInteractionsToWashU(gi = gi, minDist = 10000, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.txt", url = TRUE)
+GInteractionsToWashU(gi = gi, minDist = 10000, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.txt", url = TRUE)
+GInteractionsToWashU(gi = gi, minDist = 10000, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.bed", url = FALSE)
+GInteractionsToWashU(gi = gi, outfile = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/CoAccessibility/Peaks-Co-Accessibility_Significant_KUNDAJE_GenomicInteractions_WashU.bed", url = FALSE)
+temp <- readRDS("K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/PCs-25-Peaks-25-25-25-Res-2-6-10.colData-metadata.rds")
+temp
+str(temp)
+ArchRx::quantileCut()
+quantileCut()
+library(ArchRx)
+library(SCArchR)
+library(ggplot2)
+quantileCut()
+quantileCut
+df <- readRDS("K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/PCs-25-Peaks-25-25-25-Res-2-6-10.colData-metadata.rds")
+df
+se <- df
+se
+str(se)
+colData(se)
+se$colData
+df se$colData
+df <- se$colData
+write.table(x = df, file = "K:/Shared drives/Brain_Merged/Analysis/scATAC/190713/PCs-25-Peaks-25-25-25-Res-2-6-10.colData-metadata.txt", quote = FALSE, sep = "\t", col.names = NA)
+?requireNamespace
+library(ArchR)
+getQuantiles <- function(v, len = length(v)){
+if(length(v) < len){
+v2 <- rep(0, len)
+v2[seq_along(v)] <- v
+}else{
+v2 <- v
+}
+p <- trunc(rank(v2))/length(v2)
+if(length(v) < len){
+p <- p[seq_along(v)]
+}
+return(p)
+}
+df <- as.data.frame(matrix(nrow = 8, ncol =5, NA))
+colnames(df) <- c("id","tss","log10frags","quant_tss","quant_log10frags")
+df$id <- 1:8
+df$tss <- c(9,4.5,20,12,13,8,11,17)
+df$log10frags <- c(3.5,4.5,4,4.7,3,3.3,4.1,3.8)
+df$quant_tss <- getQuantiles(df$tss)
+df$quant_log10frags <- getQuantiles(df$log10frags)
+df
+dist(x = df[,4:5], method = "euclidean")
+dist(x = df[,2:3], method = "euclidean")
+pre <- ggPoint(x = df$tss, y = df$log10frags, color = df$id, discrete = TRUE, discreteSet = "stallion", baseSize = 8,
+xlim = c(2.5,22.5), ylim = c(2.25,5.25), ratioYX = 3/20, size = 3, xlabel = "TSS Score", ylabel = "log10(Num Fragments)")
+post <- ggPoint(x = df$quant_tss, y = df$quant_log10frags, color = df$id, discrete = TRUE, discreteSet = "stallion", baseSize = 8,
+xlim = c(-0.1,1.1), ylim = c(-0.1,1.1), ratioYX = 1, size = 3, xlabel = "Quantile TSS Score", ylabel = "Quantile log10(Num Fragments)")
+setwd("K:/My Drive/Work/GitHub/ArchR_Website/")
+build_site()
+library(pkgdown)
+build_sit()
+build_site()
+setwd("K:/My Drive/Work/GitHub/ArchR_Website/bookdown/")
+library(bookdown)
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+getwd()
+getwd()
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+render_book(input = "index.Rmd")
+setwd("K:/My Drive/Work/GitHub/ArchR_Website/")
+library(pkgdown)
+build_site()
+biuld_home()
+build_home()
+build_home()
+build_favicon()
+build_favicons()
+build_site()
+build_favicons()
+build_favicons(overwrite = TRUE)
+build_site()
diff --git a/bookdown/01_GettingStarted.Rmd b/bookdown/01_GettingStarted.Rmd
index 6441342..08b46d9 100644
--- a/bookdown/01_GettingStarted.Rmd
+++ b/bookdown/01_GettingStarted.Rmd
@@ -5,7 +5,7 @@ setwd("/Volumes/JG_SSD_2/ArchR_Walkthrough/")
save.image("Save-ArchR-Walkthrough-Chapter1-Feb13.Rdata")
```
-This chapter will introduce you to how to import data into ArchR.
+This chapter will introduce you to how to import data into ArchR and how to create ArrowFiles, the base unit of ArchR analysis.
## What is an `ArrowFile` / `ArchRProject`?
@@ -47,7 +47,9 @@ addArchRGenome("hg19")
ArchR requires gene and genome annotations to do things such as calculate TSS enrichment scores, nucleotide content, and gene activity scores. Because our tutorial dataset uses scATAC-seq data that has already been aligned to the hg19 reference genome, we have set "hg19" as the default genome above. However, ArchR supports "hg19", "hg38", "mm9", and "mm10" natively but you can create your own using the `createGeneAnnotation()` and `createGenomeAnnotation()` functions.
-Providing this information to ArchR is streamlined through the `addArchRGenome()` function. This function tells ArchR that, for all analysis in the current session, it should use the `genomeAnnotation` and `geneAnnotation` associated with the defined `ArchRGenome`. Each of the natively supported genomes are composed of a `BSgenome` object and a `GRanges` object containing a set of blacklisted regions. Below are examples of how to load gene and genome annotations for the natively supported genomes as well as information on their `BSgenome` and blacklist components.
+Providing this information to ArchR is streamlined through the `addArchRGenome()` function. This function tells ArchR that, for all analyses in the current session, it should use the `genomeAnnotation` and `geneAnnotation` associated with the defined `ArchRGenome`. Each of the natively supported genomes are composed of a `BSgenome` object and a `GRanges` object containing a set of blacklisted regions. Below are examples of how to load gene and genome annotations for the natively supported genomes as well as information on their `BSgenome` and blacklist components.
+
+
The precompiled version of the __hg19__ genome in ArchR uses `BSgenome.Hsapiens.UCSC.hg19` and a blacklist that was merged using `ArchR::mergeGR()` from the [hg19 v2 blacklist regions](https://github.com/Boyle-Lab/Blacklist/blob/master/lists/hg19-blacklist.v2.bed.gz) and from [mitochondrial regions that show high mappability to the hg19 nuclear genome](https://github.com/caleblareau/mitoblacklist/blob/master/peaks/hg19_peaks.narrowPeak) from Caleb Lareau and Jason Buenrostro. To set a global genome default to the precompiled hg19 genome:
@@ -56,6 +58,8 @@ addArchRGenome("hg19")
# Setting default genome to Hg19.
```
+
+
The precompiled version of the __hg38__ genome in ArchR uses `BSgenome.Hsapiens.UCSC.hg38` and a blacklist that was merged using `ArchR::mergeGR()` from the [hg38 v2 blacklist regions](https://github.com/Boyle-Lab/Blacklist/blob/master/lists/hg38-blacklist.v2.bed.gz) and from [mitochondrial regions that show high mappability to the hg38 nuclear genome](https://github.com/caleblareau/mitoblacklist/blob/master/peaks/hg38_peaks.narrowPeak) from Caleb Lareau and Jason Buenrostro. To set a global genome default to the precompiled hg38 genome:
```{r eval=FALSE}
@@ -63,6 +67,8 @@ addArchRGenome("hg38")
# Setting default genome to Hg38.
```
+
+
The precompiled version of the __mm9__ genome in ArchR uses `BSgenome.Mmusculus.UCSC.mm9` and a blacklist that was merged using `ArchR::mergeGR()` from the [mm9 v1 blacklist regions](http://mitra.stanford.edu/kundaje/akundaje/release/blacklists/mm9-mouse/mm9-blacklist.bed.gz) from Anshul Kundaje and from [mitochondrial regions that show high mappability to the mm9 nuclear genome](https://github.com/caleblareau/mitoblacklist/blob/master/peaks/mm9_peaks.narrowPeak) from Caleb Lareau and Jason Buenrostro. To set a global genome default to the precompiled mm9 genome:
```{r eval=FALSE}
@@ -70,6 +76,8 @@ addArchRGenome("mm9")
# Setting default genome to Mm9.
```
+
+
The precompiled version of the __mm10__ genome in ArchR uses `BSgenome.Mmusculus.UCSC.mm10` and a blacklist that was merged using `ArchR::mergeGR()` from the [mm10 v2 blacklist regions](https://github.com/Boyle-Lab/Blacklist/blob/master/lists/mm10-blacklist.v2.bed.gz) and from [mitochondrial regions that show high mappability to the mm10 nuclear genome](https://github.com/caleblareau/mitoblacklist/blob/master/peaks/mm10_peaks.narrowPeak) from Caleb Lareau and Jason Buenrostro. To set a global genome default to the precompiled hg38 genome:
```{r eval=FALSE}
@@ -77,8 +85,13 @@ addArchRGenome("mm10")
# Setting default genome to Mm10.
```
-To instead create a custom genome annotation, we can use `createGenomeAnnotation()`. To do this, you will need the following information:
-1. A `BSgenome` object which contains the sequence information for a genome. These are commonly Bioconductor packages (for example, `BSgenome.Hsapiens.UCSC.hg38`) that can be easily found with google.
+
+
+### Creating a custom genome annotation
+
+To instead create a custom genome annotation, we can use `createGenomeAnnotation()`. To do this, you will need the following information:
+
+1. A `BSgenome` object which contains the sequence information for a genome. These are commonly Bioconductor packages (for example, `BSgenome.Hsapiens.UCSC.hg38`) that can be easily found with google.
2. A `GRanges` genomic ranges object containing a set of blacklisted regions that will be used to filter out unwanted regions from downstream analysis. This is not required but is recommended.
```{r eval=FALSE}
@@ -89,10 +102,10 @@ genomeAnnotation <- createGenomeAnnotation(genome = BSgenome.Dmelanogaster.UCSC.
# names(3): genome chromSizes blacklist
```
-To create a custom gene annotation for use instead we can use `createGeneAnnotation()`. To do this, you will need the following information:
+To create a custom gene annotation for use instead we can use `createGeneAnnotation()`. To do this, you will need the following information:
-1. A `TxDb` object (transcript database) from Bioconductor which contains information for gene/transcript coordinates. For example, from `txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene`.
-2. An `OrgDb` object (organism database) from Bioconductor which contains information for gene/transcript symbols from ids. For example, from `orgdb <- org.Hs.eg.db`.
+1. A `TxDb` object (transcript database) from Bioconductor which contains information for gene/transcript coordinates. For example, from `txdb <- TxDb.Hsapiens.UCSC.hg38.knownGene`.
+2. An `OrgDb` object (organism database) from Bioconductor which contains information for gene/transcript symbols from ids. For example, from `orgdb <- org.Hs.eg.db`.
```{r eval=FALSE}
@@ -105,7 +118,7 @@ geneAnnotation <- createGeneAnnnotation(TxDb = TxDb.Dmelanogaster.UCSC.dm6.ensGe
# names(3): genes exons TSS
```
-Alternatively, if you dont have a `TxDb` and `OrgDb` object, you can create a `geneAnnotation` object from the following information :
+Alternatively, if you dont have a `TxDb` and `OrgDb` object, you can create a `geneAnnotation` object from the following information :
1. A `GRanges` object containing gene coordinates (start to end). Must have a symbols column matching the symbols column of `exons`.
2. A `GRanges` object containing gene exon coordinates. Must have a symbols column matching the symbols column of `genes`.
@@ -121,7 +134,7 @@ geneAnnotation
## Creating Arrow Files
-For this tutorial, we will use data from a gold-standard downsampled dataset of hematopoietic cells [Granja* et al. Nature Biotechnology 2019](https://www.ncbi.nlm.nih.gov/pubmed/31792411). This includes data from bone marrow mononuclear cells (BMMC), peripheral blood mononuclear cells (PBMC), and CD34+ hematopoietic stem and progenitor cells from bone marrow (CD34 BMMC).
+For this tutorial, we will use data from a downsampled dataset of hematopoietic cells [Granja* et al. Nature Biotechnology 2019](https://www.ncbi.nlm.nih.gov/pubmed/31792411). This includes data from bone marrow mononuclear cells (BMMC), peripheral blood mononuclear cells (PBMC), and CD34+ hematopoietic stem and progenitor cells from bone marrow (CD34 BMMC).
This data is downloaded as fragment files which contain the start and end genomic coordinates of all aligned sequenced fragments. Fragment files are one of the base file types of the 10x Genomics analytical platform (and other platforms) and can be easily created from any BAM file. See __QQQ__ for information on making your own fragment files for input to ArchR. Once we have our fragment files, we provide their paths as a character vector to `createArrowFiles()`. During creation, some basic metadata and matrices are added to each `ArrowFile` including a "TileMatrix" containing insertion counts across genome-wide 500-bp bins (see `addTileMatrix()`) and a "GeneScoreMatrix" that is determined based on weighting insertion counts in tiles nearby a gene promoter (see `addGeneScoreMatrix()`).
@@ -139,12 +152,13 @@ inputFiles
# "HemeFragments/scATAC_PBMC_R1.fragments.tsv.gz"
```
-Now we will create our Arrow Files (~10-15 minutes). For each sample, this step will:
-1. Read accessible fragments from the provided input files.
-2. Calculate quality control information for each cell (i.e. TSS enrichment scores and nucleosome info).
-3. Filter cells based on quality control parameters.
-4. Create a genome-wide TileMatrix using 500-bp bins.
-5. Create a GeneScoreMatrix using the custom `geneAnnotation` that was defined when we called `addArchRGenome()`.
+Now we will create our Arrow Files (10-15 minutes). For each sample, this step will:
+
+1. Read accessible fragments from the provided input files.
+2. Calculate quality control information for each cell (i.e. TSS enrichment scores and nucleosome info).
+3. Filter cells based on quality control parameters.
+4. Create a genome-wide TileMatrix using 500-bp bins.
+5. Create a GeneScoreMatrix using the custom `geneAnnotation` that was defined when we called `addArchRGenome()`.
```{r eval=FALSE}
#Set Genome Annotations to be used to hg19
@@ -166,29 +180,22 @@ ArrowFiles
# [3] "scATAC_PBMC_R1.arrow"
```
-This step will create a folder called "QualityControl" in your current working directory that will contain 2 plots associated with each of your samples:
-1. **TSS Enrichment Score by log10(Unique Fragments)** -
+This step will create a folder called "QualityControl" in your current working directory that will contain 2 plots associated with each of your samples:
-For **BMMC** :
+1. TSS Enrichment Score by log10(Unique Fragments)
+For **BMMC**:
![](images/HemeWalkthrough/PNG/scATAC_BMMC_R1-TSS_by_Unique_Frags_1.png){width=500 height=500}
-
-
-For **CD34 BMMC** :
+For **CD34 BMMC**:
![](images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags_1.png){width=500 height=500}
-
-
-For **PBMC** :
+For **PBMC**:
![](images/HemeWalkthrough/PNG/scATAC_PBMC_R1-TSS_by_Unique_Frags_1.png){width=500 height=500}
-
-
-
-2. **Fragment Size Distribution** -
+2. Fragment Size Distribution
For **BMMC** :
diff --git a/bookdown/03_ArchRProject.Rmd b/bookdown/03_ArchRProject.Rmd
index d7c015f..5d76e92 100644
--- a/bookdown/03_ArchRProject.Rmd
+++ b/bookdown/03_ArchRProject.Rmd
@@ -36,13 +36,14 @@ projHeme1
# medianTSS(1): 16.832
# medianFrags(1): 3050
```
-We can see from the above that our `ArchRProject` has been initialized with a few important attributes:
-1. The specified `outputDirectory`.
-2. The `sampleNames` of each sample which were obtained from the Arrow files.
-3. A matrix called `sampleColData` which contains data associated with each sample.
-4. A matrix called `cellColData` which contains data associated with each cell. Because we already computed doublet enrichment scores (using `addDoubletScores()`), which added those values to each cell in the Arrow files, we can see columns corresponding to the "DoubletEnrichment" and "DoubletScore" in the `cellColData` matrix.
-5. The total number of cells in our project which represents all samples after doublet identification and removal.
-6. The median TSS enrichment score and the median number of fragments across all cells and all samples.
+We can see from the above that our `ArchRProject` has been initialized with a few important attributes:
+
+1. The specified `outputDirectory`.
+2. The `sampleNames` of each sample which were obtained from the Arrow files.
+3. A matrix called `sampleColData` which contains data associated with each sample.
+4. A matrix called `cellColData` which contains data associated with each cell. Because we already computed doublet enrichment scores (using `addDoubletScores()`), which added those values to each cell in the Arrow files, we can see columns corresponding to the "DoubletEnrichment" and "DoubletScore" in the `cellColData` matrix.
+5. The total number of cells in our project which represents all samples after doublet identification and removal.
+6. The median TSS enrichment score and the median number of fragments across all cells and all samples.
We can check how much memory is used to store the `ArchRProject` in memory within R:
@@ -62,7 +63,7 @@ getAvailableMatrices(projHeme1)
## Manipulating An ArchRProject
Now that we have created an `ArchRProject`, there are many things that we can do to easily access or manipulate the associated data.
-Example 1. The `$` accessor, this allows direct access to cellColData
+Example 1. The `$` accessor allows direct access to `cellColData`
```{r eval=FALSE}
#A. Access cell names associated with each cell
@@ -83,7 +84,7 @@ quantile(projHeme1$TSSEnrichment)
# 4.027 13.922 16.832 19.937 41.782
```
-Example 2. Subsetting an ArchRProject By Cells
+Example 2. Subsetting an `ArchRProject` by cells
```{r eval=FALSE}
#A. Subset the project numerically
@@ -140,7 +141,7 @@ projHeme1[cellsPass, ]
# medianFrags(1): 3042
```
-Example 3. Adding data to an ArchRProject
+Example 3. Adding data to an `ArchRProject`
```{r eval=FALSE}
#Add a column to cellColData that contains more legible sample names by removing excess info from the original sample names
@@ -154,7 +155,8 @@ projHeme1$bioNames <- bioNames
#Add a column to cellColData that only contains information for a subset of cells
bioNames <- bioNames[1:10]
cellNames <- projHeme1$cellNames[1:10]
-projHeme1 <- addCellColData(ArchRProj = projHeme1, data = paste0(bioNames), cells = cellNames, name = "bioNames2")
+projHeme1 <- addCellColData(ArchRProj = projHeme1, data = paste0(bioNames),
+ cells = cellNames, name = "bioNames2")
#We can compare these two columns to see "NA" filled in where data wasnt available for bioNames2
getCellColData(projHeme1, select = c("bioNames", "bioNames2"))
@@ -174,10 +176,11 @@ getCellColData(projHeme1, select = c("bioNames", "bioNames2"))
# scATAC_PBMC_R1#CGCTATCGTGAGGTCA-1 PBMC NA
```
-Example 4. Obtaining Unique Fragment Counts
+Example 4. Obtaining unique fragment counts
```{r eval=FALSE}
-#Select the column from cellColData corresponding to the number of unique nuclear (non-mitochondrial) fragments per cell
+#Select the column from cellColData corresponding to the number of unique
+#nuclear (non-mitochondrial) fragments per cell
df <- getCellColData(projHeme1, select = "nFrags")
df
# DataFrame with 10661 rows and 1 column
@@ -195,7 +198,8 @@ df
# scATAC_PBMC_R1#TTCGTTACATTGAACC-1 1033
# scATAC_PBMC_R1#CGCTATCGTGAGGTCA-1 1002
-#Or, instead of selecting a column by name, we can actually perform operations on a given column using its column name
+#Or, instead of selecting a column by name, we can actually perform operations on a given
+#column using its column name
df <- getCellColData(projHeme1, select = c("log10(nFrags)", "nFrags - 1"))
df
# DataFrame with 10661 rows and 2 columns
@@ -214,7 +218,7 @@ df
# scATAC_PBMC_R1#CGCTATCGTGAGGTCA-1 3.00086772153123 1001
```
-Example 5. Plotting QC metrics - log10(Unique Fragments) vs TSS Enrichment Score
+Example 5. Plotting QC metrics - log10(Unique Fragments) vs TSS enrichment score
```{r eval=FALSE}
df <- getCellColData(projHeme1, select = c("log10(nFrags)", "TSSEnrichment"))
@@ -265,7 +269,11 @@ plotPDF(p, name = "TSS-vs-Frags.pdf", ArchRProj = projHeme1, addDOC = FALSE)
## Plotting Sample Statistics from an ArchRProject
-Example 1. Make a Ridge Plot for each sample for the TSS enrichment scores.
+When working with multiple distinct samples in a single integrated data set, it can be important to compare various metrics across all samples. ArchR provides two main plotting mechanisms for grouped data: ridge plots and violin plots. These are both accessed through the `plotGroups()` function. Of course, this plot type is not limited to sample-level data and can be used for plotting of downstream group-level information for groups such as clusters.
+
+Example 1. Make a ridge plot for each sample for the TSS enrichment scores.
+
+To make a ridge plot, we set `plotAs = "ridges"`.
```{r eval=FALSE}
p1 <- plotGroups(
@@ -280,7 +288,9 @@ p1
![](images/HemeWalkthrough/PNG/QC-Sample-Statistics_1.png){width=500 height=500}
-Example 2. Make a Violin Plot for each sample for the TSS enrichment scores.
+Example 2. Make a violin plot for each sample for the TSS enrichment scores.
+
+To make a violin plot, we set `plotAs = "violin"`.
```{r eval=FALSE}
p2 <- plotGroups(
@@ -297,7 +307,7 @@ p2
![](images/HemeWalkthrough/PNG/QC-Sample-Statistics_2.png){width=500 height=500}
-Example 3. Make a Ridge Plot for each sample for the log10(unique nuclear fragments).
+Example 3. Make a ridge plot for each sample for the log10(unique nuclear fragments).
```{r eval=FALSE}
p3 <- plotGroups(
@@ -312,7 +322,7 @@ p3
![](images/HemeWalkthrough/PNG/QC-Sample-Statistics_3.png){width=500 height=500}
-Example 4. Make a Violin Plot for each sample for the log10(unique nuclear fragments).
+Example 4. Make a violin plot for each sample for the log10(unique nuclear fragments).
```{r eval=FALSE}
p4 <- plotGroups(
@@ -339,7 +349,9 @@ plotPDF(p1,p2,p3,p4, name = "QC-Sample-Statistics.pdf", ArchRProj = projHeme1, a
## Plotting Sample Fragment Size Distribution and TSS Enrichment Profiles.
-ArchR can compute fragment size distributions from ArrowFiles very quickly because of how the data is stored and accessed.
+Because of how the data is stored and accessed, ArchR can compute fragment size distributions and TSS enrichment profiles from Arrow files very quickly.
+
+Fragment size distributions:
```{r eval=FALSE}
p1 <- plotFragmentSizes(ArchRProj = projHeme1)
@@ -348,7 +360,7 @@ p1
![](images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_1.png){width=500 height=500}
-ArchR can compute TSS enrichment profiles from ArrowFiles quickly for the same reason.
+TSS enrichment profiles:
```{r eval=FALSE}
p2 <- plotTSSEnrichment(ArchRProj = projHeme1)
@@ -390,7 +402,7 @@ projHeme2
# medianFrags(1): 2994
```
-If you want to filter more cells from the ArchR Project try a higher `filterRatio`. To see additional arguments that can be tweaked, try ?filterDoublets.
+If you wanted to filter more cells from the ArchR Project, you would try a higher `filterRatio`. To see additional arguments that can be tweaked, try `?filterDoublets`.
```{r eval=FALSE}
projHemeTmp <- filterDoublets(projHeme1, filterRatio = 1.5)
@@ -401,9 +413,9 @@ projHemeTmp <- filterDoublets(projHeme1, filterRatio = 1.5)
rm(projHemeTmp)
```
-We can now save our updated `projHeme1` using `saveArchRProject()` which will allow us to use this project in future chapters.
+We can now save our updated `projHeme2` using `saveArchRProject()` which will allow us to use this project in future chapters.
```{r eval=FALSE}
-saveArchRProject(projHeme1, copyArrows = FALSE)
+saveArchRProject(projHeme2, copyArrows = FALSE)
```
diff --git a/bookdown/04_ReducedDims.Rmd b/bookdown/04_ReducedDims.Rmd
index ac6f672..aaf8396 100644
--- a/bookdown/04_ReducedDims.Rmd
+++ b/bookdown/04_ReducedDims.Rmd
@@ -6,16 +6,23 @@ setwd("/Volumes/JG_SSD_2/ArchR_Walkthrough/")
save.image("Save-ArchR-Walkthrough-Feb13-2130.Rdata")
```
-Dimensionality reduction with scATAC-seq is challenging due to the sparsity of the data. When we see multiple Tn5 insertions within a single peak it does not necessarily relate to that site being multiple times more accessible than
-a different site. For this reason a lot of analytical strategies work on a binary scATAC-seq data matrix. First, it is important to determine which regions to use for dimensionality reduction. The main two strategies have been using ATAC-seq peaks or larger kilobase scale tiles genome-wide. However, determining a peak set is a bit challenging because it changes with the number of samples in each experiment. This makes comparisons of multiple data sets extremely challenging. Another strategy is to use large kilobase scale tiles which is promising because it solves the multiple sample comparison challenge by using a predetermined feature set. However, most of the time this is performed on a 5kb+ sized tiles which are much larger (10x) than an accessible region. ArchR was designed to merge these methods by creating a 500-bp genome-wide feature set. The challenge is that this cell by tile matrix is around 6 million features which is too large to read into R for many cells. Therefore, ArchR is designed to compute dimensionality reduction on a subset of these features that are more biologically relevant.
+Dimensionality reduction with scATAC-seq is challenging due to the _sparsity_ of the data. In scATAC-seq, a particular site can either be accessible on one allele, both alleles, or no alleles. Even in higher-quality scATAC-seq data, the majority of accesible regions are not transposed and this leads to many loci having 0 accessibile alleles. Moreover, when we see (for example) three Tn5 insertions within a single peak region in a single cell, the sparsity of the data prevents us from confidently determining that this site in this cell is actually three times more accessible than another cell that only has one insertion in the same site. For this reason a lot of analytical strategies work on a binarized scATAC-seq data matrix. This binarized matrix still ends up being mostly 0s because transposition is rare. However, it is important to note that a 0 in scATAC-seq could mean "non-accessible" or "not sampled" and these two inferences are very different from a biological standpoint. Because of this, the 1s have information and the 0s do not. This low information content is what makes our scATAC-seq data _sparse_.
-## Iterative Latent Semantic Indexing (LSI)
+If you were to perform a standard dimensionality reduction, like Principal Component Analysis, on this sparse insertion counts matrix and plot the top two principal components, you would not obtain the desired result because the sparsity causes high inter-cell similarity at all of the 0 positions. To get around this issue, we use a layered dimensionality reduction approach. First, we use Latent Semantic Indexing (LSI), an approach from natural language processing that was originally designed to assess document similarity based on word counts. This solution was created for natural language processing because the data is sparse and noisy (many different words and many low frequency words). LSI was first introduced for scATAC-seq by [Cusanovich et al. (Science 2015)](https://www.ncbi.nlm.nih.gov/pubmed/25953818). In the case of scATAC-seq, different samples are the _documents_ and different regions/peaks are the _words_. First, we calculate the term frequency by depth normalization per single cell. These values are then normalized by the inverse document frequency which weights features by how often they occur to identify featres that are more "specific" rather than commonly accessible. The resultant term frequency-inverse document frequency (TF-IDF) matrix reflects how important a _word_ (aka region/peak) is to a _document_ (aka sample). Then, through a technique called singular value decomposition (SVD), the most _valuable_ information across samples is identified and represented in a lower dimensional space. LSI allows you to reduce the dimensionality of the sparse insertion counts matrix from many thousands to tens or hundreds. Then, a more conventional dimensionality reduction technique, such as Uniform Manifold Approximation and Projection (UMAP) or t-distributed stochastic neighbor embedding (t-SNE) can be used to visualize the data. In ArchR, these visualization methods are referred to as _embeddings_.
+
+## ArchR's LSI Implementation
+
+ArchR implements a few different LSI implementations and we have benchmarked many of these methods across multiple different test data sets. ArchR's default LSI implementation is related to the method introduced by Timothy Stuart in [Signac](https://satijalab.org/signac/), which uses a term frequency that has been depth normalized to a constant (10,000) followed by normalization with the inverse document frequency and then log-transforming the resultant matrix (aka `log(TF-IDF)`).
-Latent semantic indexing (LSI) was first introduced for scATAC-seq by Cusanovich et al (Science 2015) as a form for analyzing scATAC-seq data. LSI commonly refers to computing the term frequency (TF) and then normalization by the inverse document frequency (IDF) to get a normalized matrix (TF-IDF) and then Singular Value Decomposition (SVD). The term frequency is simply dividing depth normalization per single cell. The inverse document frequency refers to weighting each feature by how often it occurs to weight features that are more "specific" rather than commonly accessible. There are many different TF-IDF transformations with their own merits. ArchR has a few LSI implementations and we have tested out many of these methods across many different test data sets. The default LSI implementation is related to the one introduced by Timothy Stuart, which depth normalizes to a constant (10,000) followed by normalization with the inverse document frequency and then log-transforming the resultant matrix (log(TF-IDF)).
+One of the key inputs to LSI dimensionality reduction is the starting matrix. Thus far, the main two strategies in scATAC-seq have been to (1) use peak regions or (2) genome-wide tiles. However, using peak regions for LSI is inherently challenging because we do not have clusters or cluster-specific peaks prior to dimensionality reduction. Moreover, calling peaks on aggregated cells prior to clustering obscures cell type-specific peaks. Moreover, any union peak set will change when new samples are added to an experiment, making this strategy less stable. The second strategy, using genome-wide tiles, mitigates these issues by using a consistent and unbiased feature set (genome-wide tiles). However, a genome-wide tile matrix of all cells by all regions can become prohibitively large. For this reason, most implementations use tiles that are greater than or equal to 5 kilobases in size. This drastically reduces the resolution of the approach because most accessible regions are only a few hundred basepairs long.
+
+Because of the way that Arrow files are designed, ArchR is able to perform LSI very rapidly using genome-wide 500-bp tiles. This solves the problem of resolution and allows for the identification of clusters prior to calling peaks. The challenge is that 500-bp bins generate around 6 million features to be included in the cell by tile matrix. While ArchR is able to read this large amount of data into R by chunking the relevant matrices, we have also implemented an "estimated LSI" approach that performs the initial dimensionality reduction on a subset of the total cells.
+
+## Iterative Latent Semantic Indexing (LSI)
-In scRNA-seq identifying variable genes is a common way to compute dimensionality reduction (such as PCA). This is done becasue these genes are more likely to be biologically important and this reduces experimental noise. In scATAC-seq the data is binary and thus you cant identify variable peaks for dimensionality reduction. We have tried using the most accessible features instead, however the results when running multiple samples have had strong noise. To remedy this we introduced the iterative LSI approach (Satpathy+, Granja+ et al NBT 2019 and Granja+, Klemm+ and McGinnis+ et al NBT 2019). This approach computes an intial LSI transformation on the most accessible tiles and identifies lower resolution clusters that are not batch confounded (ie. in PBMCs just classifying T cells, B cells and Monocytes). Then ArchR computes the average accessibility for each of these clusters across all features creating "pseudobulks". Then ArchR identifies the variable peaks across these "pseudobulks" and then use these features for LSI again as these peaks are more similar to scRNA-seq's variable peaks. We have found this approach is very good for batch minimization and allows operations on a more reasonable sized matrix than a much larger sparse matrix.
+In scRNA-seq identifying variable genes is a common way to compute dimensionality reduction (such as PCA). This is done becasue these genes are more likely to be biologically important and this reduces experimental noise. In scATAC-seq the data is binary and thus you cannot identify variable peaks for dimensionality reduction. Rather than identifying the most variable peaks, we have tried using the most accessible features as input to LSI; however, the results when running multiple samples have shown high degrees of noise and low reproducibility. To remedy this we introduced the "iterative LSI" approach ([Satpathy\*, Granja\* et al. Nature Biotechnology 2019](https://www.ncbi.nlm.nih.gov/pubmed/31375813) and [Granja\*, Klemm\* and McGinnis\* et al. Nature Biotechnology 2019](https://www.ncbi.nlm.nih.gov/pubmed/31792411)). This approach computes an intial LSI transformation on the most accessible tiles and identifies lower resolution clusters that are not batch confounded. For example, when performed on peripheral blood mononuclear cells, this will identify clusters corresponding to the major cell types (T cells, B cells, and monocytes). Then ArchR computes the average accessibility for each of these clusters across all features creating "pseudo-bulks". ArchR then identifies the most variable peaks across these pseudo-bulks and uses these features for LSI again. In this second iteration, the most variable peaks are more similar to the variable genes used in scRNA-seq LSI implementations. The user can set how many iterations of LSI should be performed. QQQ add new info on LSI implementation. We have found this approach to be very good for batch minimization and allows operations on a more reasonably sized feature matrix.
-To do this we run `addIterativeLSI` with the default parameters which should cover most cases. See ?addIterativeLSI for more details on inputs.
+To perform iterative LSI in ArchR, we use the `addIterativeLSI()` function. The default parameters which should cover most cases but we encourage you to explore the available parameters and how they each affect your particular data set. See `?addIterativeLSI` for more details on inputs.
```{r eval=FALSE}
projHeme2 <- addIterativeLSI(
@@ -33,7 +40,7 @@ projHeme2 <- addIterativeLSI(
)
```
-If you see downstream that you have subtle batch effects still another option is to add more LSI iterations and start from a lower intial clustering resolution as shown below. Additionally the number of variable features can be lowered to increase focus on the more variable features.
+If you see downstream that you have subtle batch effects, another option is to add more LSI iterations and to start from a lower intial clustering resolution as shown below. Additionally the number of variable features can be lowered to increase focus on the more variable features. QQQ would be nice to see an example of what these batch effects look like and how this corrects them
```{r eval=FALSE}
projHeme2 <- addIterativeLSI(
@@ -51,7 +58,7 @@ projHeme2 <- addIterativeLSI(
)
```
-Additionally ArchR allows for a normal LSI transformation with `addLSI`, however we recommend the iterative procedure.
+Additionally ArchR allows for a normal (non-iterative) LSI transformation via the `addLSI() function`, however we recommend the iterative procedure.
```{r eval=FALSE}
projHeme2 <- addLSI(
@@ -63,7 +70,7 @@ projHeme2 <- addLSI(
)
```
-Lastly, lets compute the iterativeLSI for the ArchRProject still containing doublets.
+Lastly, lets compute the iterative LSI for the `ArchRProject` still containing doublets.
```{r eval=FALSE}
projHeme1 <- addIterativeLSI(
@@ -83,7 +90,7 @@ projHeme1 <- addIterativeLSI(
## Batch Effect Correction wtih Harmony
-Sometimes the iterative LSI approach isnt enough of a correction for strong batch effect differences. For this reason we added a commonly used batch effect correction tool Harmony for scRNA (https://github.com/immunogenomics/harmony). We wrote a wrapper that will pass a dimensionality reduction object from ArchR directly to `HarmonyMatrix`. Additional arguments can be directly passed to `HarmonyMatrix` in the function. See ?addHarmony for more details.
+Sometimes the iterative LSI approach isnt enough of a correction for strong batch effect differences. For this reason, ArchR implements a commonly used batch effect correction tool called [Harmony](https://github.com/immunogenomics/harmony) which was originally designed for scRNA-seq. We provide a wrapper that will pass a dimensionality reduction object from ArchR directly to the `HarmonyMatrix()` function. Additional arguments can be directly passed to `HarmonyMatrix` in the function. See `?addHarmony` for more details. Users should be aware of the caveats of batch correction for their particular application.
```{r eval=FALSE}
projHeme2 <- addHarmony(
diff --git a/bookdown/_book/.DS_Store b/bookdown/_book/.DS_Store
deleted file mode 100644
index 90c9131..0000000
Binary files a/bookdown/_book/.DS_Store and /dev/null differ
diff --git a/bookdown/_book/add-peak-matrix-1.html b/bookdown/_book/add-peak-matrix-1.html
deleted file mode 100644
index af3ea36..0000000
--- a/bookdown/_book/add-peak-matrix-1.html
+++ /dev/null
@@ -1,346 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix-2.html b/bookdown/_book/add-peak-matrix-2.html
deleted file mode 100644
index 7cd086b..0000000
--- a/bookdown/_book/add-peak-matrix-2.html
+++ /dev/null
@@ -1,347 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix-3.html b/bookdown/_book/add-peak-matrix-3.html
deleted file mode 100644
index 7304f0b..0000000
--- a/bookdown/_book/add-peak-matrix-3.html
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix-4.html b/bookdown/_book/add-peak-matrix-4.html
deleted file mode 100644
index 51f12a2..0000000
--- a/bookdown/_book/add-peak-matrix-4.html
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix-5.html b/bookdown/_book/add-peak-matrix-5.html
deleted file mode 100644
index 945e4e5..0000000
--- a/bookdown/_book/add-peak-matrix-5.html
+++ /dev/null
@@ -1,331 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix-6.html b/bookdown/_book/add-peak-matrix-6.html
deleted file mode 100644
index afb6dbb..0000000
--- a/bookdown/_book/add-peak-matrix-6.html
+++ /dev/null
@@ -1,332 +0,0 @@
-
-
-
-
-
-
- 15.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme4 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme4)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/add-peak-matrix.html b/bookdown/_book/add-peak-matrix.html
deleted file mode 100644
index c6cbc7b..0000000
--- a/bookdown/_book/add-peak-matrix.html
+++ /dev/null
@@ -1,339 +0,0 @@
-
-
-
-
-
-
- 9.3 Add Peak Matrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add Peak Matrix
-
We can now save our original projHeme4 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme4)
-
getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-#~1-2 Minutes
- projHeme5 <- addPeakMatrix (projHeme4)
-
-getAvailableMatrices (projHeme5)
-# [1] "GeneIntegrationMatrix" "GeneScoreMatrix" "PeakMatrix"
-# [4] "TileMatrix"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/adding-pseudo-scrna-profiles-for-each-scatac-cell.html b/bookdown/_book/adding-pseudo-scrna-profiles-for-each-scatac-cell.html
deleted file mode 100644
index a8f4728..0000000
--- a/bookdown/_book/adding-pseudo-scrna-profiles-for-each-scatac-cell.html
+++ /dev/null
@@ -1,451 +0,0 @@
-
-
-
-
-
-
- 8.2 Adding Pseudo-scRNA profiles for each scATAC cell | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Adding Pseudo-scRNA profiles for each scATAC cell
-
First we need to download scRNA data for hematopoiesis from Granja* et al (2019).
-
#259 MB Download
-if (! file.exists ("scRNA-Healthy-Hematopoiesis-191120.rds" )){
- download.file (
- url = "https://jeffgranja.s3.amazonaws.com/MPAL-10x/Supplementary_Data/Healthy-Data/scRNA-Healthy-Hematopoiesis-191120.rds" ,
- destfile = "scRNA-Healthy-Hematopoiesis-191120.rds"
- )
- }
-
- seRNA <- readRDS ("scRNA-Healthy-Hematopoiesis-191120.rds" )
- seRNA
-# class: RangedSummarizedExperiment
-# dim: 20287 35582
-# metadata(6): variableGenes optimizeLSI ... UMAP_Params colorMap
-# assays(1): counts
-# rownames(20287): FAM138A OR4F5 ... S100B PRMT2
-# rowData names(3): gene_name gene_id exonLength
-# colnames(35582): CD34_32_R5:AAACCTGAGTATCGAA-1
-# CD34_32_R5:AAACCTGAGTCGTTTG-1 ...
-# BMMC_10x_GREENLEAF_REP2:TTTGTTGCATGTGTCA-1
-# BMMC_10x_GREENLEAF_REP2:TTTGTTGCATTGAAAG-1
-# colData names(10): Group nUMI_pre ... BioClassification Barcode
-
-colnames (colData (seRNA))
-# [1] "Group" "nUMI_pre" "nUMI"
-# [4] "nGene" "initialClusters" "UMAP1"
-# [7] "UMAP2" "Clusters" "BioClassification"
-# [10] "Barcode"
-
-table (colData (seRNA)$ BioClassification)
-# 01_HSC 02_Early.Eryth 03_Late.Eryth 04_Early.Baso 05_CMP.LMPP
-# 1425 1653 446 111 2260
-# 06_CLP.1 07_GMP 08_GMP.Neut 09_pDC 10_cDC
-# 903 2097 1050 544 325
-# 11_CD14.Mono.1 12_CD14.Mono.2 13_CD16.Mono 14_Unk 15_CLP.2
-# 1800 4222 292 520 377
-# 16_Pre.B 17_B 18_Plasma 19_CD8.N 20_CD4.N1
-# 710 1711 62 1521 2470
-# 21_CD4.N2 22_CD4.M 23_CD8.EM 24_CD8.CM 25_NK
-# 2364 3539 796 2080 2143
-# 26_Unk
-# 161
-
We can now save our original projHeme2 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme2)
-
Constrained Integration (recommended)
-
sampleList <- SimpleList (
- scATAC_BMMC_R1 = grep ("BMMC" , colnames (seRNA), ignore.case = TRUE , value = TRUE ),
- scATAC_CD34_BMMC_R1 = grep ("CD34" , colnames (seRNA), ignore.case = TRUE , value = TRUE ),
- scATAC_PBMC_R1 = grep ("PBMC" , colnames (seRNA), ignore.case = TRUE , value = TRUE )
- )
-
-#To see size of each list element
-lapply (sampleList, length)
-# $scATAC_BMMC_R1
-# [1] 12602
-
-# $scATAC_CD34_BMMC_R1
-# [1] 8176
-
-# $scATAC_PBMC_R1
-# [1] 14804
-
-#~5 minutes
- projHeme3 <- addGeneIntegrationMatrix (
- ArchRProj = projHeme2,
- seRNA = seRNA,
- sampleList = sampleList,
- addToArrow = TRUE , # We are going to add scRNA to each Arrow
- groupBy = "BioClassification" ,
- nameGroup = "predictedGroup" ,
- nameScore = "predictedScore"
- )
-
What matrices are available?
-
getAvailableMatrices (projHeme3)
-#[1] "GeneIntegrationMatrix" "GeneScoreMatrix" "TileMatrix"
-
Now lets see how this effects our marker gene scores overlayed on our 2-d embedding.
-
markerGenes <- c (
- "CD34" , #Early Progenitor
- "GATA1" , #Erythroid
- "PAX5" , "MS4A1" , #B-Cell Trajectory
- "CD14" , #Monocytes
- "CD3D" , "CD8A" , "TBX21" , "IL7R" #TCells
- )
-
- p1 <- plotEmbedding (
- ArchRProj = projHeme3,
- colorBy = "GeneIntegrationMatrix" ,
- name = markerGenes,
- continuousSet = "horizonExtra" ,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme3)
- )
-
- p2 <- plotEmbedding (
- ArchRProj = projHeme3,
- colorBy = "GeneScoreMatrix" ,
- continuousSet = "horizonExtra" ,
- name = markerGenes,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme3)
- )
-
To plot all marker genes we can use cowplot
-
#Rearrange for grid plotting
- p1c <- lapply (p1, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-
-#Rearrange for grid plotting
- p2c <- lapply (p2, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ), p1c))
-
-
do.call (cowplot:: plot_grid, c (list (ncol = 3 ), p2c))
-
-
To save a nice looking pdf we use plotPDF which removes white pages and tries to make the plots
-nice looking.
-
plotPDF (plotList = p1,
- name = "Plot-UMAP-Marker-Genes-RNA-W-Imputation.pdf" ,
- ArchRProj = projHeme3,
- addDOC = FALSE , width = 5 , height = 5 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-annotation-deviations-atac-seq.html b/bookdown/_book/archr-annotation-deviations-atac-seq.html
deleted file mode 100644
index 483d6fc..0000000
--- a/bookdown/_book/archr-annotation-deviations-atac-seq.html
+++ /dev/null
@@ -1,374 +0,0 @@
-
-
-
-
-
-
- 12.3 ArchR Annotation Deviations : ATAC-seq | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Annotation Deviations : ATAC-seq
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "ATAC" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "ATAC"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "ATACMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f22 z 22 IAtlas_T_CD8posCenMem 12.0581125421541
-# f86 z 86 Heme_CD8 11.6532963605177
-# f85 z 85 Heme_CD4 11.5670776340581
-# f23 z 23 IAtlas_T_CD8posEffMem 11.4627247478874
-# f33 z 33 IAtlas_T_Th1Precursor 11.4097813814495
-# f19 z 19 IAtlas_T_CD4posEffector 11.398315976261
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-ATAC-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
ATACPeaks <- c ("Heme_HSC" , "Heme_LMPP" , "Heme_Ery" , "Heme_Mono" , "Heme_CD4" , "Heme_CD8" , "Heme_B" , "Heme_NK" , "IAtlas_DC_Plasmacytoid" )
-getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
-# [1] "z:Heme_NK" "z:Heme_Mono"
-# [3] "z:Heme_MEP" "z:Heme_LMPP"
-# [5] "z:Heme_HSC" "z:Heme_CD8"
-# [7] "z:Heme_CD4" "z:Heme_B"
-# [9] "z:IAtlas_DC_Plasmacytoid" "deviations:Heme_NK"
-# [11] "deviations:Heme_Mono" "deviations:Heme_MEP"
-# [13] "deviations:Heme_LMPP" "deviations:Heme_HSC"
-# [15] "deviations:Heme_CD8" "deviations:Heme_CD4"
-# [17] "deviations:Heme_B" "deviations:IAtlas_DC_Plasmacytoid"
-
To get deviation z-scores
-
markerATAC <- getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
- markerATAC <- sort (grep ("z:" , markerATAC, value = TRUE ))
- markerATAC
-# [1] "z:Heme_B" "z:Heme_CD4"
-# [3] "z:Heme_CD8" "z:Heme_HSC"
-# [5] "z:Heme_MEP" "z:Heme_Mono"
-# [7] "z:Heme_NK" "z:IAtlas_DC_Plasmacytoid"
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "ATACMatrix" ,
- name = markerATAC,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-annotation-deviations-encode-tfbs.html b/bookdown/_book/archr-annotation-deviations-encode-tfbs.html
deleted file mode 100644
index 01e28e3..0000000
--- a/bookdown/_book/archr-annotation-deviations-encode-tfbs.html
+++ /dev/null
@@ -1,444 +0,0 @@
-
-
-
-
-
-
- 12.2 ArchR Annotation Deviations : Encode TFBS | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Annotation Deviations : Encode TFBS
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "EncodeTFBS" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "EncodeTFBS"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "EncodeTFBSMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f222 z 222 222.GATA2_S-K562... 13.3776606277002
-# f41 z 41 41.EZH2_39-NHEK... 12.9568688227648
-# f542 z 542 542.TAL1_SC-K562... 11.3037382536044
-# f498 z 498 498.GATA_2-K562... 10.2006515402356
-# f584 z 584 584.GATA_1-PBDEFetal... 10.0732825204346
-# f44 z 44 44.EZH2_39-NHLF... 9.67400298749933
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-EncodeTFBS-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
tfs <- c ("GATA_1" , "CEBPB" , "EBF1" , "IRF4" , "TBX21" , "PAX5" )
-getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
-# [1] "z:584.GATA_1-PBDEFetal..." "z:582.GATA_1-PBDE..."
-# [3] "z:497.GATA_1-K562..." "z:477.CEBPB-K562..."
-# [5] "z:462.CEBPB-IMR90..." "z:427.CEBPB-HepG2..."
-# [7] "z:426.CEBPB-HepG2..." "z:379.CEBPB-HeLa_S3..."
-# [9] "z:344.CEBPB-H1_hESC..." "z:293.EBF1_SC-GM12878..."
-# [11] "z:278.CEBPB-A549..." "z:213.CEBPB_S-K562..."
-# [13] "z:173.CEBPB_S-HepG2..." "z:130.PAX5_C2-GM12892..."
-# [15] "z:123.PAX5_C2-GM12891..." "z:102.PAX5_N1-GM12878..."
-# [17] "z:101.PAX5_C2-GM12878..." "z:93.IRF4_SC-GM12878..."
-# [19] "z:87.EBF1_SC-GM12878..." "z:86.CEBPB_S-GM12878..."
-# [21] "deviations:584.GATA_1-PBDEFetal..." "deviations:582.GATA_1-PBDE..."
-# [23] "deviations:497.GATA_1-K562..." "deviations:477.CEBPB-K562..."
-# [25] "deviations:462.CEBPB-IMR90..." "deviations:427.CEBPB-HepG2..."
-# [27] "deviations:426.CEBPB-HepG2..." "deviations:379.CEBPB-HeLa_S3..."
-# [29] "deviations:344.CEBPB-H1_hESC..." "deviations:293.EBF1_SC-GM12878..."
-# [31] "deviations:278.CEBPB-A549..." "deviations:213.CEBPB_S-K562..."
-# [33] "deviations:173.CEBPB_S-HepG2..." "deviations:130.PAX5_C2-GM12892..."
-# [35] "deviations:123.PAX5_C2-GM12891..." "deviations:102.PAX5_N1-GM12878..."
-# [37] "deviations:101.PAX5_C2-GM12878..." "deviations:93.IRF4_SC-GM12878..."
-# [39] "deviations:87.EBF1_SC-GM12878..." "deviations:86.CEBPB_S-GM12878..."
-
To get deviation z-scores
-
markerTFs <- getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
- markerTFs <- sort (grep ("z:" , markerTFs, value = TRUE ))
- TFnames <- stringr:: str_split (stringr:: str_split (markerTFs, pattern = " \\ ." , simplify= TRUE )[,2 ], pattern = "-" , simplify = TRUE )[,1 ]
- markerTFs <- markerTFs[! duplicated (TFnames)]
- markerTFs
-# [1] "z:101.PAX5_C2-GM12878..." "z:102.PAX5_N1-GM12878..."
-# [3] "z:173.CEBPB_S-HepG2..." "z:278.CEBPB-A549..."
-# [5] "z:293.EBF1_SC-GM12878..." "z:497.GATA_1-K562..."
-# [7] "z:93.IRF4_SC-GM12878..."
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "EncodeTFBSMatrix" ,
- name = markerTFs,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneScoreMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneScoreMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneIntegrationMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" ,"CEBPA-DT" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneIntegrationMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- continuousSet = "blueYellow" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-annotation-deviations.html b/bookdown/_book/archr-annotation-deviations.html
deleted file mode 100644
index 21c3d52..0000000
--- a/bookdown/_book/archr-annotation-deviations.html
+++ /dev/null
@@ -1,526 +0,0 @@
-
-
-
-
-
-
- 12.2 ArchR Annotation Deviations | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Annotation Deviations
-
-
Encode TFBS
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "EncodeTFBS" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "EncodeTFBS"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "EncodeTFBSMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f222 z 222 222.GATA2_S-K562... 13.3776606277002
-# f41 z 41 41.EZH2_39-NHEK... 12.9568688227648
-# f542 z 542 542.TAL1_SC-K562... 11.3037382536044
-# f498 z 498 498.GATA_2-K562... 10.2006515402356
-# f584 z 584 584.GATA_1-PBDEFetal... 10.0732825204346
-# f44 z 44 44.EZH2_39-NHLF... 9.67400298749933
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-EncodeTFBS-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
tfs <- c ("GATA_1" , "CEBPB" , "EBF1" , "IRF4" , "TBX21" , "PAX5" )
-getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
-# [1] "z:584.GATA_1-PBDEFetal..." "z:582.GATA_1-PBDE..."
-# [3] "z:497.GATA_1-K562..." "z:477.CEBPB-K562..."
-# [5] "z:462.CEBPB-IMR90..." "z:427.CEBPB-HepG2..."
-# [7] "z:426.CEBPB-HepG2..." "z:379.CEBPB-HeLa_S3..."
-# [9] "z:344.CEBPB-H1_hESC..." "z:293.EBF1_SC-GM12878..."
-# [11] "z:278.CEBPB-A549..." "z:213.CEBPB_S-K562..."
-# [13] "z:173.CEBPB_S-HepG2..." "z:130.PAX5_C2-GM12892..."
-# [15] "z:123.PAX5_C2-GM12891..." "z:102.PAX5_N1-GM12878..."
-# [17] "z:101.PAX5_C2-GM12878..." "z:93.IRF4_SC-GM12878..."
-# [19] "z:87.EBF1_SC-GM12878..." "z:86.CEBPB_S-GM12878..."
-# [21] "deviations:584.GATA_1-PBDEFetal..." "deviations:582.GATA_1-PBDE..."
-# [23] "deviations:497.GATA_1-K562..." "deviations:477.CEBPB-K562..."
-# [25] "deviations:462.CEBPB-IMR90..." "deviations:427.CEBPB-HepG2..."
-# [27] "deviations:426.CEBPB-HepG2..." "deviations:379.CEBPB-HeLa_S3..."
-# [29] "deviations:344.CEBPB-H1_hESC..." "deviations:293.EBF1_SC-GM12878..."
-# [31] "deviations:278.CEBPB-A549..." "deviations:213.CEBPB_S-K562..."
-# [33] "deviations:173.CEBPB_S-HepG2..." "deviations:130.PAX5_C2-GM12892..."
-# [35] "deviations:123.PAX5_C2-GM12891..." "deviations:102.PAX5_N1-GM12878..."
-# [37] "deviations:101.PAX5_C2-GM12878..." "deviations:93.IRF4_SC-GM12878..."
-# [39] "deviations:87.EBF1_SC-GM12878..." "deviations:86.CEBPB_S-GM12878..."
-
To get deviation z-scores
-
markerTFs <- getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
- markerTFs <- sort (grep ("z:" , markerTFs, value = TRUE ))
- TFnames <- stringr:: str_split (stringr:: str_split (markerTFs, pattern = " \\ ." , simplify= TRUE )[,2 ], pattern = "-" , simplify = TRUE )[,1 ]
- markerTFs <- markerTFs[! duplicated (TFnames)]
- markerTFs
-# [1] "z:101.PAX5_C2-GM12878..." "z:102.PAX5_N1-GM12878..."
-# [3] "z:173.CEBPB_S-HepG2..." "z:278.CEBPB-A549..."
-# [5] "z:293.EBF1_SC-GM12878..." "z:497.GATA_1-K562..."
-# [7] "z:93.IRF4_SC-GM12878..."
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "EncodeTFBSMatrix" ,
- name = markerTFs,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneScoreMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneScoreMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneIntegrationMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" ,"CEBPA-DT" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneIntegrationMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- continuousSet = "blueYellow" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
Bulk ATAC-seq
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "ATAC" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "ATAC"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "ATACMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f22 z 22 IAtlas_T_CD8posCenMem 12.0581125421541
-# f86 z 86 Heme_CD8 11.6532963605177
-# f85 z 85 Heme_CD4 11.5670776340581
-# f23 z 23 IAtlas_T_CD8posEffMem 11.4627247478874
-# f33 z 33 IAtlas_T_Th1Precursor 11.4097813814495
-# f19 z 19 IAtlas_T_CD4posEffector 11.398315976261
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-ATAC-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
ATACPeaks <- c ("Heme_HSC" , "Heme_LMPP" , "Heme_Ery" , "Heme_Mono" , "Heme_CD4" , "Heme_CD8" , "Heme_B" , "Heme_NK" , "IAtlas_DC_Plasmacytoid" )
-getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
-# [1] "z:Heme_NK" "z:Heme_Mono"
-# [3] "z:Heme_MEP" "z:Heme_LMPP"
-# [5] "z:Heme_HSC" "z:Heme_CD8"
-# [7] "z:Heme_CD4" "z:Heme_B"
-# [9] "z:IAtlas_DC_Plasmacytoid" "deviations:Heme_NK"
-# [11] "deviations:Heme_Mono" "deviations:Heme_MEP"
-# [13] "deviations:Heme_LMPP" "deviations:Heme_HSC"
-# [15] "deviations:Heme_CD8" "deviations:Heme_CD4"
-# [17] "deviations:Heme_B" "deviations:IAtlas_DC_Plasmacytoid"
-
To get deviation z-scores
-
markerATAC <- getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
- markerATAC <- sort (grep ("z:" , markerATAC, value = TRUE ))
- markerATAC
-# [1] "z:Heme_B" "z:Heme_CD4"
-# [3] "z:Heme_CD8" "z:Heme_HSC"
-# [5] "z:Heme_MEP" "z:Heme_Mono"
-# [7] "z:Heme_NK" "z:IAtlas_DC_Plasmacytoid"
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "ATACMatrix" ,
- name = markerATAC,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-annotation-enrichment.html b/bookdown/_book/archr-annotation-enrichment.html
deleted file mode 100644
index 350edfd..0000000
--- a/bookdown/_book/archr-annotation-enrichment.html
+++ /dev/null
@@ -1,401 +0,0 @@
-
-
-
-
-
-
- 11.2 ArchR Annotation Enrichment | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Annotation Enrichment
-
-
Encode TFBS
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "EncodeTFBS" )
-
-#Identify EncodeTFBS Enrichments
- enrichEncode <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "EncodeTFBS" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichEncode
-# class: SummarizedExperiment
-# dim: 689 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(689): 1.CTCF-Dnd41... 2.EZH2_39-Dnd41... ...
-# 688.CTCF-WERI_Rb_1... 689.CTCF-WI_38...
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapEncode <- enrichHeatmap (enrichEncode, n = 7 , transpose = TRUE )
-draw (heatmapEncode, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapEncode, name = "EncodeTFBS-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
Bulk ATAC-seq
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "ATAC" )
-
-#Identify ATAC Enrichments
- enrichATAC <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "ATAC" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichATAC
-# class: SummarizedExperiment
-# dim: 96 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(96): Brain_Astrocytes Brain_Excitatory_neurons ... Heme_MPP
-# Heme_NK
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapATAC <- enrichHeatmap (enrichATAC, n = 7 , transpose = TRUE )
-draw (heatmapATAC, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapATAC, name = "ATAC-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
Codex TFBS
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "Codex" )
-
-#Identify Codex Enrichments
- enrichCodex <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "Codex" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichCodex
-# class: SummarizedExperiment
-# dim: 189 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(189): 1.STAT5-No_drug_(DMSO)... 2.RUNX3-GM12878_cell_fr... ...
-# 188.TP53-codex_Embryonic... 189.TP53-codex_Embryonic...
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapCodex <- enrichHeatmap (enrichCodex, n = 7 , transpose = TRUE )
-draw (heatmapCodex, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapCodex, name = "Codex-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-deviations.html b/bookdown/_book/archr-deviations.html
deleted file mode 100644
index 73c64c7..0000000
--- a/bookdown/_book/archr-deviations.html
+++ /dev/null
@@ -1,525 +0,0 @@
-
-
-
-
-
-
- 12.2 ArchR Deviations | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Deviations
-
-
Encode TFBS
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "EncodeTFBS" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "EncodeTFBS"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "EncodeTFBSMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f222 z 222 222.GATA2_S-K562... 13.3776606277002
-# f41 z 41 41.EZH2_39-NHEK... 12.9568688227648
-# f542 z 542 542.TAL1_SC-K562... 11.3037382536044
-# f498 z 498 498.GATA_2-K562... 10.2006515402356
-# f584 z 584 584.GATA_1-PBDEFetal... 10.0732825204346
-# f44 z 44 44.EZH2_39-NHLF... 9.67400298749933
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-EncodeTFBS-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
tfs <- c ("GATA_1" , "CEBPB" , "EBF1" , "IRF4" , "TBX21" , "PAX5" )
-getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
-# [1] "z:584.GATA_1-PBDEFetal..." "z:582.GATA_1-PBDE..."
-# [3] "z:497.GATA_1-K562..." "z:477.CEBPB-K562..."
-# [5] "z:462.CEBPB-IMR90..." "z:427.CEBPB-HepG2..."
-# [7] "z:426.CEBPB-HepG2..." "z:379.CEBPB-HeLa_S3..."
-# [9] "z:344.CEBPB-H1_hESC..." "z:293.EBF1_SC-GM12878..."
-# [11] "z:278.CEBPB-A549..." "z:213.CEBPB_S-K562..."
-# [13] "z:173.CEBPB_S-HepG2..." "z:130.PAX5_C2-GM12892..."
-# [15] "z:123.PAX5_C2-GM12891..." "z:102.PAX5_N1-GM12878..."
-# [17] "z:101.PAX5_C2-GM12878..." "z:93.IRF4_SC-GM12878..."
-# [19] "z:87.EBF1_SC-GM12878..." "z:86.CEBPB_S-GM12878..."
-# [21] "deviations:584.GATA_1-PBDEFetal..." "deviations:582.GATA_1-PBDE..."
-# [23] "deviations:497.GATA_1-K562..." "deviations:477.CEBPB-K562..."
-# [25] "deviations:462.CEBPB-IMR90..." "deviations:427.CEBPB-HepG2..."
-# [27] "deviations:426.CEBPB-HepG2..." "deviations:379.CEBPB-HeLa_S3..."
-# [29] "deviations:344.CEBPB-H1_hESC..." "deviations:293.EBF1_SC-GM12878..."
-# [31] "deviations:278.CEBPB-A549..." "deviations:213.CEBPB_S-K562..."
-# [33] "deviations:173.CEBPB_S-HepG2..." "deviations:130.PAX5_C2-GM12892..."
-# [35] "deviations:123.PAX5_C2-GM12891..." "deviations:102.PAX5_N1-GM12878..."
-# [37] "deviations:101.PAX5_C2-GM12878..." "deviations:93.IRF4_SC-GM12878..."
-# [39] "deviations:87.EBF1_SC-GM12878..." "deviations:86.CEBPB_S-GM12878..."
-
To get deviation z-scores
-
markerTFs <- getFeatures (projHeme5, select = paste (tfs, collapse= "|" ), useMatrix = "EncodeTFBSMatrix" )
- markerTFs <- sort (grep ("z:" , markerTFs, value = TRUE ))
- TFnames <- stringr:: str_split (stringr:: str_split (markerTFs, pattern = " \\ ." , simplify= TRUE )[,2 ], pattern = "-" , simplify = TRUE )[,1 ]
- markerTFs <- markerTFs[! duplicated (TFnames)]
- markerTFs
-# [1] "z:101.PAX5_C2-GM12878..." "z:102.PAX5_N1-GM12878..."
-# [3] "z:173.CEBPB_S-HepG2..." "z:278.CEBPB-A549..."
-# [5] "z:293.EBF1_SC-GM12878..." "z:497.GATA_1-K562..."
-# [7] "z:93.IRF4_SC-GM12878..."
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "EncodeTFBSMatrix" ,
- name = markerTFs,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneScoreMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneScoreMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
We can also plot the gene expression profiles for each of these TFs
-
markerRNA <- getFeatures (projHeme5, select = paste (gsub ("_" ,"" ,tfs), collapse= "|" ), useMatrix = "GeneIntegrationMatrix" )
- markerRNA <- markerRNA[markerRNA %ni% c ("SREBF1" ,"CEBPA-DT" )]
- markerRNA
-#[1] "TBX21" "CEBPA" "EBF1" "IRF4" "PAX5" "GATA1"
-
- p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "GeneIntegrationMatrix" ,
- name = sort (markerRNA),
- embedding = "UMAP" ,
- continuousSet = "blueYellow" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
-#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
Bulk ATAC-seq
-
If you have not added motif annotations
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "ATAC" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "ATAC"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "ATACMatrix" )
-# DataFrame with 6 rows and 6 columns
-# seqnames idx name combinedVars
-# <Rle> <array> <array> <numeric>
-# f22 z 22 IAtlas_T_CD8posCenMem 12.0581125421541
-# f86 z 86 Heme_CD8 11.6532963605177
-# f85 z 85 Heme_CD4 11.5670776340581
-# f23 z 23 IAtlas_T_CD8posEffMem 11.4627247478874
-# f33 z 33 IAtlas_T_Th1Precursor 11.4097813814495
-# f19 z 19 IAtlas_T_CD4posEffector 11.398315976261
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-ATAC-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
If we want to get TF feature names for downstream plotting
-
ATACPeaks <- c ("Heme_HSC" , "Heme_LMPP" , "Heme_Ery" , "Heme_Mono" , "Heme_CD4" , "Heme_CD8" , "Heme_B" , "Heme_NK" , "IAtlas_DC_Plasmacytoid" )
-getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
-# [1] "z:Heme_NK" "z:Heme_Mono"
-# [3] "z:Heme_MEP" "z:Heme_LMPP"
-# [5] "z:Heme_HSC" "z:Heme_CD8"
-# [7] "z:Heme_CD4" "z:Heme_B"
-# [9] "z:IAtlas_DC_Plasmacytoid" "deviations:Heme_NK"
-# [11] "deviations:Heme_Mono" "deviations:Heme_MEP"
-# [13] "deviations:Heme_LMPP" "deviations:Heme_HSC"
-# [15] "deviations:Heme_CD8" "deviations:Heme_CD4"
-# [17] "deviations:Heme_B" "deviations:IAtlas_DC_Plasmacytoid"
-
To get deviation z-scores
-
markerATAC <- getFeatures (projHeme5, select = paste (ATACPeaks, collapse= "|" ), useMatrix = "ATACMatrix" )
- markerATAC <- sort (grep ("z:" , markerATAC, value = TRUE ))
- markerATAC
-# [1] "z:Heme_B" "z:Heme_CD4"
-# [3] "z:Heme_CD8" "z:Heme_HSC"
-# [5] "z:Heme_MEP" "z:Heme_Mono"
-# [7] "z:Heme_NK" "z:IAtlas_DC_Plasmacytoid"
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "ATACMatrix" ,
- name = markerATAC,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 3 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/archr-enrichment.html b/bookdown/_book/archr-enrichment.html
deleted file mode 100644
index 0383504..0000000
--- a/bookdown/_book/archr-enrichment.html
+++ /dev/null
@@ -1,400 +0,0 @@
-
-
-
-
-
-
- 11.2 ArchR Enrichment | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ArchR Enrichment
-
-
Encode TFBS
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "EncodeTFBS" )
-
-#Identify EncodeTFBS Enrichments
- enrichEncode <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "EncodeTFBS" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichEncode
-# class: SummarizedExperiment
-# dim: 689 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(689): 1.CTCF-Dnd41... 2.EZH2_39-Dnd41... ...
-# 688.CTCF-WERI_Rb_1... 689.CTCF-WI_38...
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapEncode <- enrichHeatmap (enrichEncode, n = 7 , transpose = TRUE )
-draw (heatmapEncode, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapEncode, name = "EncodeTFBS-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
Bulk ATAC-seq
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "ATAC" )
-
-#Identify ATAC Enrichments
- enrichATAC <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "ATAC" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichATAC
-# class: SummarizedExperiment
-# dim: 96 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(96): Brain_Astrocytes Brain_Excitatory_neurons ... Heme_MPP
-# Heme_NK
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapATAC <- enrichHeatmap (enrichATAC, n = 7 , transpose = TRUE )
-draw (heatmapATAC, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapATAC, name = "ATAC-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
Codex TFBS
-
projHeme5 <- addArchRAnnotations (ArchRProj = projHeme5, collection = "Codex" )
-
-#Identify Codex Enrichments
- enrichCodex <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "Codex" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichCodex
-# class: SummarizedExperiment
-# dim: 189 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(189): 1.STAT5-No_drug_(DMSO)... 2.RUNX3-GM12878_cell_fr... ...
-# 188.TP53-codex_Embryonic... 189.TP53-codex_Embryonic...
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapCodex <- enrichHeatmap (enrichCodex, n = 7 , transpose = TRUE )
-draw (heatmapCodex, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapCodex, name = "Codex-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/batch-effect-correction-wtih-harmony.html b/bookdown/_book/batch-effect-correction-wtih-harmony.html
deleted file mode 100644
index 1f8cf8f..0000000
--- a/bookdown/_book/batch-effect-correction-wtih-harmony.html
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-
-
-
-
- 4.2 Batch Effect Correction wtih Harmony | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Batch Effect Correction wtih Harmony
-
Sometimes the iterative LSI approach isnt enough of a correction for strong batch effect differences. For this reason we added a commonly used batch effect correction tool Harmony for scRNA (https://github.com/immunogenomics/harmony ). We wrote a wrapper that will pass a dimensionality reduction object from ArchR directly to HarmonyMatrix
. Additional arguments can be directly passed to HarmonyMatrix
in the function. See ?addHarmony for more details.
-
projHeme2 <- addHarmony (
- ArchRProj = projHeme2,
- reducedDims = "IterativeLSI" ,
- name = "Harmony" ,
- groupBy = "Sample"
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-1.html b/bookdown/_book/calling-peaks-w-macs2-1.html
deleted file mode 100644
index 551a61b..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-1.html
+++ /dev/null
@@ -1,351 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-2.html b/bookdown/_book/calling-peaks-w-macs2-2.html
deleted file mode 100644
index 78981f9..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-2.html
+++ /dev/null
@@ -1,352 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-3.html b/bookdown/_book/calling-peaks-w-macs2-3.html
deleted file mode 100644
index f849f44..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-3.html
+++ /dev/null
@@ -1,345 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-4.html b/bookdown/_book/calling-peaks-w-macs2-4.html
deleted file mode 100644
index 22350c9..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-4.html
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-5.html b/bookdown/_book/calling-peaks-w-macs2-5.html
deleted file mode 100644
index 8e6fdec..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-5.html
+++ /dev/null
@@ -1,336 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2-6.html b/bookdown/_book/calling-peaks-w-macs2-6.html
deleted file mode 100644
index aeefbd7..0000000
--- a/bookdown/_book/calling-peaks-w-macs2-6.html
+++ /dev/null
@@ -1,337 +0,0 @@
-
-
-
-
-
-
- 15.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-macs2.html b/bookdown/_book/calling-peaks-w-macs2.html
deleted file mode 100644
index d9c5207..0000000
--- a/bookdown/_book/calling-peaks-w-macs2.html
+++ /dev/null
@@ -1,344 +0,0 @@
-
-
-
-
-
-
- 9.1 Calling Peaks w/ Macs2 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ Macs2
-
We can now save our original projHeme3 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme3)
-
#Create Group Coverage Files that can be used for downstream analysis (~5-10 minutes)
- projHeme4 <- addGroupCoverages (ArchRProj = projHeme3, groupBy = "Clusters" )
-
-#Find Path to Macs2 binary. This function sometimes struggles if you are using conda environment
-#for installation of python packages. If this function fails try providing a direct path manually
- pathToMacs2 <- findMacs2 ()
-
-#Call Reproducible Peaks w/ Macs2 (~5-10 minutes)
- projHeme4 <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- pathToMacs2 = pathToMacs2
- )
-
-getPeakSet (projHeme4)
-# GRanges object with 158378 ranges and 12 metadata columns:
-# seqnames ranges strand | score
-# <Rle> <IRanges> <Rle> | <numeric>
-# Cluster10 chr1 752327-752827 * | 2.74288
-# Cluster9 chr1 760866-761366 * | 2.65888
-# Cluster2 chr1 762700-763200 * | 18.7147
-# Cluster2 chr1 779639-780139 * | 2.81931
-# Cluster8 chr1 793519-794019 * | 3.74498
-# ... ... ... ... . ...
-# Cluster5 chrX 154841853-154842353 * | 3.43901
-# Cluster12 chrX 154842354-154842854 * | 7.60796
-# Cluster4 chrX 154862032-154862532 * | 9.27826
-# Cluster5 chrX 154912371-154912871 * | 6.27394
-# Cluster6 chrX 154996898-154997398 * | 2.65432
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-1.html b/bookdown/_book/calling-peaks-w-tilematrix-1.html
deleted file mode 100644
index a2ef44a..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-1.html
+++ /dev/null
@@ -1,355 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-2.html b/bookdown/_book/calling-peaks-w-tilematrix-2.html
deleted file mode 100644
index b4e95c2..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-2.html
+++ /dev/null
@@ -1,356 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-3.html b/bookdown/_book/calling-peaks-w-tilematrix-3.html
deleted file mode 100644
index 972f0f1..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-3.html
+++ /dev/null
@@ -1,349 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-4.html b/bookdown/_book/calling-peaks-w-tilematrix-4.html
deleted file mode 100644
index 79b99ba..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-4.html
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-5.html b/bookdown/_book/calling-peaks-w-tilematrix-5.html
deleted file mode 100644
index 5dcdb50..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-5.html
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix-6.html b/bookdown/_book/calling-peaks-w-tilematrix-6.html
deleted file mode 100644
index 620233c..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix-6.html
+++ /dev/null
@@ -1,341 +0,0 @@
-
-
-
-
-
-
- 15.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-w-tilematrix.html b/bookdown/_book/calling-peaks-w-tilematrix.html
deleted file mode 100644
index 09e893b..0000000
--- a/bookdown/_book/calling-peaks-w-tilematrix.html
+++ /dev/null
@@ -1,348 +0,0 @@
-
-
-
-
-
-
- 9.2 Calling Peaks w/ TileMatrix | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks w/ TileMatrix
-
#Call Reproducible Peaks w/ TileMatrix (~2 minutes)
- projHemeTmp <- addReproduciblePeakSet (
- ArchRProj = projHeme4,
- groupBy = "Clusters" ,
- peakMethod = "Tiles" ,
- method = "p"
- )
-
-getPeakSet (projHemeTmp)
-# GRanges object with 277187 ranges and 9 metadata columns:
-# seqnames ranges strand | mlog10p Group
-# <Rle> <IRanges> <Rle> | <numeric> <Rle>
-# [1] chr1 752000-752499 * | 1.682 Cluster10
-# [2] chr1 752500-752999 * | 4.952 Cluster10
-# [3] chr1 758500-758999 * | 1.037 Cluster4
-# [4] chr1 761000-761499 * | 2.204 Cluster9
-# [5] chr1 762000-762499 * | 3.246 Cluster4
-# ... ... ... ... . ... ...
-# [277183] chrX 154842000-154842499 * | 8.936 Cluster12
-# [277184] chrX 154842500-154842999 * | 12.546 Cluster12
-# [277185] chrX 154862000-154862499 * | 2.449 Cluster4
-# [277186] chrX 154912500-154912999 * | 2.484 Cluster5
-# [277187] chrX 154997000-154997499 * | 4.236 Cluster8
-
Lets see how well this compares to Macs2
-
#Peak Overlap
-length (subsetByOverlaps (getPeakSet (projHeme4), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9681079
-length (subsetByOverlaps (getPeakSet (projHemeTmp), getPeakSet (projHeme4))) / length (getPeakSet (projHemeTmp))
-# 0.7902066
-
-#Extend to 1kb
-length (subsetByOverlaps (resize (getPeakSet (projHeme4), 1000 , "center" ), getPeakSet (projHemeTmp))) / length (getPeakSet (projHeme4))
-# 0.9750028
-length (subsetByOverlaps (getPeakSet (projHemeTmp), resize (getPeakSet (projHeme4), 1000 , "center" ))) / length (getPeakSet (projHemeTmp))
-# 0.858287
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-1.html b/bookdown/_book/calling-peaks-with-archr-1.html
deleted file mode 100644
index 2cae6cf..0000000
--- a/bookdown/_book/calling-peaks-with-archr-1.html
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-2.html b/bookdown/_book/calling-peaks-with-archr-2.html
deleted file mode 100644
index 40441f5..0000000
--- a/bookdown/_book/calling-peaks-with-archr-2.html
+++ /dev/null
@@ -1,321 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-3.html b/bookdown/_book/calling-peaks-with-archr-3.html
deleted file mode 100644
index ef02855..0000000
--- a/bookdown/_book/calling-peaks-with-archr-3.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-4.html b/bookdown/_book/calling-peaks-with-archr-4.html
deleted file mode 100644
index a016a95..0000000
--- a/bookdown/_book/calling-peaks-with-archr-4.html
+++ /dev/null
@@ -1,305 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-5.html b/bookdown/_book/calling-peaks-with-archr-5.html
deleted file mode 100644
index b0f38dd..0000000
--- a/bookdown/_book/calling-peaks-with-archr-5.html
+++ /dev/null
@@ -1,305 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/calling-peaks-with-archr-6.html b/bookdown/_book/calling-peaks-with-archr-6.html
deleted file mode 100644
index c0e0111..0000000
--- a/bookdown/_book/calling-peaks-with-archr-6.html
+++ /dev/null
@@ -1,306 +0,0 @@
-
-
-
-
-
-
- Chapter 15 Calling Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Calling Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/chapter-1.html b/bookdown/_book/chapter-1.html
deleted file mode 100644
index 1f4b929..0000000
--- a/bookdown/_book/chapter-1.html
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-
-
-
-
- Chapter 1 CHAPTER 1 | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
CHAPTER 1
-
The following tutorial shows the basics of setting up and interacting with an ArchRProject
using a gold-standard downsampled dataset of hematopoietic cells Granja* et al. Nature Biotechnology 2019 . This tutorial and all of the accompanying vignettes assume that you are running ArchR locally . QQQ Once all of these steps work for you, feel free to set up ArchR to work in a cluster environment . This tutorial does not explain every detail of every step but rather shows you how to perform the most common analyses. Please see the Vignettes section for more details on each major analytical step and all of the major features of ArchR.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/chromvar-deviatons-enrichment-with-archr.html b/bookdown/_book/chromvar-deviatons-enrichment-with-archr.html
deleted file mode 100644
index fedf577..0000000
--- a/bookdown/_book/chromvar-deviatons-enrichment-with-archr.html
+++ /dev/null
@@ -1,313 +0,0 @@
-
-
-
-
-
-
- Chapter 12 ChromVAR Deviatons Enrichment with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ChromVAR Deviatons Enrichment with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/clustering-with-archr.html b/bookdown/_book/clustering-with-archr.html
deleted file mode 100644
index b9d0266..0000000
--- a/bookdown/_book/clustering-with-archr.html
+++ /dev/null
@@ -1,358 +0,0 @@
-
-
-
-
-
-
- Chapter 5 Clustering with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Clustering with ArchR
-
Most single-cell clustering methods focus on computing nearest neighbor graphs in reduced dimensions and then identifying “communities” or clusters. These approaches work extremely well and are a standard practice in scRNA. For this reason, we import existing state of the art clustering methods from scRNA-seq packages for clustering. In our experience, we have had the most success using Seurat’s (https://github.com/satijalab/seurat ) graph clustering approach. Additional clustering params can be passed to Seurat::FindClusters
from this function.
-
projHeme2 <- addClusters (
- input = projHeme2,
- reducedDims = "IterativeLSI" ,
- method = "Seurat" ,
- name = "Clusters" ,
- resolution = 0.8
- )
-
To access these clusters we can use the $
accessor
-
head (projHeme2$ Clusters)
-# [1] "Cluster11" "Cluster2" "Cluster12" "Cluster1" "Cluster12" "Cluster8"
-
-table (projHeme2$ Clusters)
-# Cluster1 Cluster10 Cluster11 Cluster12 Cluster13 Cluster14 Cluster2 Cluster3
-# 28 1070 425 351 408 345 1330 562
-# Cluster4 Cluster5 Cluster6 Cluster7 Cluster8 Cluster9
-# 901 860 1218 974 274 1505
-
We can also create a cluster confusion matrix across each sample. JJJ
-
ArchR::: .confusionMatrix (paste0 (projHeme2$ Clusters), paste0 (projHeme2$ Sample))
-# 14 x 3 sparse Matrix of class "dgCMatrix"
-# scATAC_BMMC_R1 scATAC_CD34_BMMC_R1 scATAC_PBMC_R1
-# Cluster11 247 6 172
-# Cluster2 1254 . 76
-# Cluster12 351 . .
-# Cluster1 28 . .
-# Cluster8 247 27 .
-# Cluster4 315 . 586
-# Cluster9 1456 5 44
-# Cluster5 214 639 7
-# Cluster7 83 887 4
-# Cluster14 161 174 10
-# Cluster3 52 . 510
-# Cluster10 84 1 985
-# Cluster6 117 1101 .
-# Cluster13 80 328 .
-
Determining the appropriate cluster params is useful once you have computed a 2-dimensional embedding. This is because you should be adjusting both the clustering and embedding params to where they both agree.
-
Additionally, one can call clusters with scran (https://bioconductor.org/packages/release/bioc/html/scran.html ).
-
projHeme2 <- addClusters (
- input = projHeme2,
- reducedDims = "IterativeLSI" ,
- method = "scran" ,
- name = "ScranClusters" ,
- k = 15
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/coaccessibility-with-archr.html b/bookdown/_book/coaccessibility-with-archr.html
deleted file mode 100644
index 463c555..0000000
--- a/bookdown/_book/coaccessibility-with-archr.html
+++ /dev/null
@@ -1,455 +0,0 @@
-
-
-
-
-
-
- 15.1 CoAccessibility with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
CoAccessibility with ArchR
-
projHeme5 <- addCoAccessibility (
- ArchRProj = projHeme5,
- reducedDims = "IterativeLSI"
- )
-
cA <- getCoAccessibility (
- ArchRProj = projHeme5,
- corCutOff = 0.5 ,
- resolution = 1 ,
- returnLoops = FALSE
- )
-
- cA
-# DataFrame with 65736 rows and 4 columns
-# queryHits subjectHits seqnames correlation
-# <integer> <integer> <Rle> <numeric>
-# 1 8 13 chr1 0.69736362363962
-# 2 13 8 chr1 0.69736362363962
-# 3 52 64 chr1 0.502479053390956
-# 4 54 55 chr1 0.573405135422231
-# 5 55 54 chr1 0.573405135422231
-# ... ... ... ... ...
-# 65732 158297 158296 chrX 0.5541398895206
-# 65733 158332 158333 chrX 0.504941172383233
-# 65734 158333 158332 chrX 0.504941172383233
-# 65735 158339 158340 chrX 0.506143160385986
-# 65736 158340 158339 chrX 0.506143160385985
-
-metadata (cA)[[1 ]]
-# GRanges object with 158378 ranges and 0 metadata columns:
-# seqnames ranges strand
-# <Rle> <IRanges> <Rle>
-# Cluster10 chr1 752327-752827 *
-# Cluster9 chr1 760866-761366 *
-# Cluster2 chr1 762700-763200 *
-# Cluster2 chr1 779639-780139 *
-# Cluster8 chr1 793519-794019 *
-# ... ... ... ...
-# Cluster5 chrX 154841853-154842353 *
-# Cluster12 chrX 154842354-154842854 *
-# Cluster4 chrX 154862032-154862532 *
-# Cluster5 chrX 154912371-154912871 *
-# Cluster6 chrX 154996898-154997398 *
-
-
- cA <- getCoAccessibility (
- ArchRProj = projHeme5,
- corCutOff = 0.5 ,
- resolution = 1 ,
- returnLoops = TRUE
- )
-
-# GenomicRangesList of length 1
-# names(1): CoAccessibility
-
- cA[[1 ]]
-# GRanges object with 32868 ranges and 1 metadata column:
-# seqnames ranges strand | value
-# <Rle> <IRanges> <Rle> | <numeric>
-# [1] chr1 845640-856561 * | 0.69736362363962
-# [2] chr1 968601-1004143 * | 0.502479053390956
-# [3] chr1 974287-975100 * | 0.573405135422231
-# [4] chr1 1034332-1034887 * | 0.807870076075987
-# [5] chr1 1072846-1079621 * | 0.591975205782561
-# ... ... ... ... . ...
-# [32864] chrX 153597267-153637554 * | 0.501648373320333
-# [32865] chrX 153637554-153659408 * | 0.534554389595235
-# [32866] chrX 153659408-153659914 * | 0.5541398895206
-# [32867] chrX 153959662-153960350 * | 0.504941172383233
-# [32868] chrX 153980214-153990355 * | 0.506143160385986
-
cA <- getCoAccessibility (
- ArchRProj = projHeme5,
- corCutOff = 0.5 ,
- resolution = 1000 ,
- returnLoops = TRUE
- )
-
- cA[[1 ]]
-# GRanges object with 30315 ranges and 1 metadata column:
-# seqnames ranges strand | value
-# <Rle> <IRanges> <Rle> | <numeric>
-# [1] chr1 845500-856500 * | 0.69736362363962
-# [2] chr1 968500-1004500 * | 0.502479053390956
-# [3] chr1 974500-975500 * | 0.573405135422231
-# [4] chr1 1072500-1079500 * | 0.591975205782561
-# [5] chr1 1072500-1109500 * | 0.509755959269061
-# ... ... ... ... . ...
-# [30311] chrX 153596500-153597500 * | 0.526200963980073
-# [30312] chrX 153597500-153637500 * | 0.501648373320333
-# [30313] chrX 153637500-153659500 * | 0.534554389595235
-# [30314] chrX 153959500-153960500 * | 0.504941172383233
-# [30315] chrX 153980500-153990500 * | 0.506143160385986
-# -------
-# seqinfo: 23 sequences from an unspecified genome; no seqlengths
-
cA <- getCoAccessibility (
- ArchRProj = projHeme5,
- corCutOff = 0.5 ,
- resolution = 10000 ,
- returnLoops = TRUE
- )
-
- cA[[1 ]]
-# GRanges object with 15990 ranges and 1 metadata column:
-# seqnames ranges strand | value
-# <Rle> <IRanges> <Rle> | <numeric>
-# [1] chr1 845000-855000 * | 0.69736362363962
-# [2] chr1 965000-1005000 * | 0.502479053390956
-# [3] chr1 1075000-1085000 * | 0.542909007799088
-# [4] chr1 1075000-1105000 * | 0.522706329518404
-# [5] chr1 1105000-1115000 * | 0.607428937524039
-# ... ... ... ... . ...
-# [15986] chrX 153305000-153345000 * | 0.63313940661629
-# [15987] chrX 153595000-153635000 * | 0.501648373320333
-# [15988] chrX 153635000-153655000 * | 0.534554389595235
-# [15989] chrX 153955000-153965000 * | 0.504941172383233
-# [15990] chrX 153985000-153995000 * | 0.506143160385986
-# -------
-# seqinfo: 23 sequences from an unspecified genome; no seqlengths
-
Plotting browser tracks with CoAccessibility
-
markerGenes <- c (
- "CD34" , #Early Progenitor
- "GATA1" , #Erythroid
- "PAX5" , "MS4A1" , #B-Cell Trajectory
- "CD14" , #Monocytes
- "CD3D" , "CD8A" , "TBX21" , "IL7R" #TCells
- )
-
- p <- ArchRBrowserTrack (
- ArchRProj = projHeme5,
- groupBy = "Clusters2" ,
- geneSymbol = markerGenes,
- upstream = 50000 ,
- downstream = 50000
- )
-
To plot a track we can simply print one from the list
-
grid:: grid.newpage ()
- grid:: grid.draw (p$ CD14)
-
-
plotPDF (plotList = p,
- name = "Plot-Tracks-Marker-Genes-with-CoAccessibility.pdf" ,
- ArchRProj = projHeme5,
- addDOC = FALSE , width = 5 , height = 5 )
-
Download PDF : Plot-Tracks-Marker-Genes.pdf
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/creating-an-archrproject-1.html b/bookdown/_book/creating-an-archrproject-1.html
deleted file mode 100644
index c5aadd7..0000000
--- a/bookdown/_book/creating-an-archrproject-1.html
+++ /dev/null
@@ -1,345 +0,0 @@
-
-
-
-
-
-
- 3.1 Creating An ArchRProject | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Creating An ArchRProject
-
First, we must create our ArchRProject
by providing a list of Arrow files and a few other parameters. The outputDirectory
here describes where all downstream analyses and plots will be saved. ArchR will automatically associate the geneAnnotation
and genomeAnnotation
with the new ArchRProject
. These were stored when we ran addArchRGenome("hg19")
in a previous chapter.
-
#Create ArchRProject
- projHeme1 <- ArchRProject (
- ArrowFiles = ArrowFiles,
- outputDirectory = "HemeTutorial" ,
- copyArrows = TRUE #This is recommened so that if you modify the ArrowFiles you have an original copy for later usage.
- )
-
We call this ArchRProject
“projHeme1” because it is the first iteration of our hematopoiesis project. Throughout this walkthrough we will modify and update this ArchRProject
and keep track of which version of the project we are using by iterating the project number (i.e. “projHeme2”).
-
Lets look at our ArchRProject
:
-
projHeme1
-# class: ArchRProject
-# outputDirectory: /Volumes/JG_SSD_2/ArchR_Walkthrough/HemeTutorial
-# samples(3): scATAC_BMMC_R1 scATAC_CD34_BMMC_R1 scATAC_PBMC_R1
-# sampleColData names(1): ArrowFiles
-# cellColData names(11): DoubletEnrichment DoubletScore ... Sample
-# TSSEnrichment
-# numberOfCells(1): 10661
-# medianTSS(1): 16.832
-# medianFrags(1): 3050
-
We can see from the above that our ArchRProject
has been initialized with a few important attributes:
-1. The specified outputDirectory
.
-2. The sampleNames
of each sample which were obtained from the Arrow files.
-3. A matrix called sampleColData
which contains data associated with each sample.
-4. A matrix called cellColData
which contains data associated with each cell. Because we already computed doublet enrichment scores (using addDoubletScores()
), which added those values to each cell in the Arrow files, we can see columns corresponding to the “DoubletEnrichment” and “DoubletScore” in the cellColData
matrix.
-5. The total number of cells in our project which represents all samples after doublet identification and removal.
-6. The median TSS enrichment score and the median number of fragments across all cells and all samples.
-
We can check how much memory is used to store the ArchRProject
in memory within R:
-
paste0 ("Memory Size = " , round (object.size (projHeme1) / 10 ^ 6 , 3 ), " MB" )
-#[1] "Memory Size = 37.135 MB"
-
We can also ask which data matrices are available within the ArchRProject
which will be useful downstream once we start adding to this project:
-
getAvailableMatrices (projHeme1)
-#[1] "GeneScoreMatrix" "TileMatrix"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/creating-an-archrproject.html b/bookdown/_book/creating-an-archrproject.html
deleted file mode 100644
index b44a443..0000000
--- a/bookdown/_book/creating-an-archrproject.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-
-
-
-
- Chapter 3 Creating an ArchRProject | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Creating an ArchRProject
-
An ArchRProject
allows us to group multiple Arrow files together into a single project. This ArchRProject
is small and is stored in memory. By interacting with the ArchRProject
we can rapidly push and pull data from the Arrow files. As such, it forms the basis of nearly all ArchR functions and analytical workflows. This chapter describes how to create and interact with an ArchRProject
object.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/creating-arrow-files-1.html b/bookdown/_book/creating-arrow-files-1.html
deleted file mode 100644
index 4c68141..0000000
--- a/bookdown/_book/creating-arrow-files-1.html
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
-
-
-
- Chapter 2 Creating Arrow Files | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Creating Arrow Files
-
For this tutorial, we will download a collection of fragment files. Fragment files are one of the base file types of the 10x Genomics analytical platform (and other platforms) and can be easily created from any BAM file. See the ArchR input file types vignette for information on making your own fragment files for input to ArchR. Once we have our fragment files, we provide their paths as a character vector to createArrowFiles()
. During creation, some basic metadata and matrices are added to each ArrowFile
including a “TileMatrix” containing insertion counts across genome-wide 500-bp bins (see addTileMatrix()
) and a “GeneScoreMatrix” that is determined based on weighting insertion counts in tiles nearby a gene promoter (see addGeneScoreMatrix()
). These gene activity scores are described in more depth in the Gene Activity Score vignette .
-
#Get Tutorial Data ~1GB To Download (if downloaded already ArchR will bypass downloading).
- inputFiles <- getTutorialData ("Hematopoiesis" )
-
-#Create Arrow Files (~10-15 minutes) w/ helpful messages displaying progress.
-#For each sample, this step will:
-# 1. Read accessible fragments.
-# 2. Calculate QC Information for each cell (TSS Enrichment, Nucleosome info).
-# 3. Filter cells based on QC parameters.
-# 4. Create a genome-wide TileMatrix using 500-bp bins.
-# 5. Create a GeneScoreMatrix using the provided geneAnnotation.
- ArrowFiles <- createArrowFiles (
- inputFiles = inputFiles,
- sampleNames = names (inputFiles),
- filterTSS = 4 , #Dont set this too high because you can always increase later
- filterFrags = 1000 ,
- addTileMat = TRUE ,
- addGeneScoreMat = TRUE
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/creating-arrow-files.html b/bookdown/_book/creating-arrow-files.html
deleted file mode 100644
index b0f5dd1..0000000
--- a/bookdown/_book/creating-arrow-files.html
+++ /dev/null
@@ -1,380 +0,0 @@
-
-
-
-
-
-
- 1.4 Creating Arrow Files | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Creating Arrow Files
-
For this tutorial, we will use data from a gold-standard downsampled dataset of hematopoietic cells Granja* et al. Nature Biotechnology 2019 . This includes data from bone marrow mononuclear cells (BMMC), peripheral blood mononuclear cells (PBMC), and CD34+ hematopoietic stem and progenitor cells from bone marrow (CD34 BMMC).
-
This data is downloaded as fragment files which contain the start and end genomic coordinates of all aligned sequenced fragments. Fragment files are one of the base file types of the 10x Genomics analytical platform (and other platforms) and can be easily created from any BAM file. See QQQ for information on making your own fragment files for input to ArchR. Once we have our fragment files, we provide their paths as a character vector to createArrowFiles()
. During creation, some basic metadata and matrices are added to each ArrowFile
including a “TileMatrix” containing insertion counts across genome-wide 500-bp bins (see addTileMatrix()
) and a “GeneScoreMatrix” that is determined based on weighting insertion counts in tiles nearby a gene promoter (see addGeneScoreMatrix()
).
-
library (ArchR)
-
-#Get Tutorial Data ~0.6GB To Download (if downloaded already ArchR will bypass downloading).
- inputFiles <- getTutorialData ("Hematopoiesis" )
- inputFiles
-# scATAC_BMMC_R1
-# "HemeFragments/scATAC_BMMC_R1.fragments.tsv.gz"
-# scATAC_CD34_BMMC_R1
-# "HemeFragments/scATAC_CD34_BMMC_R1.fragments.tsv.gz"
-# scATAC_PBMC_R1
-# "HemeFragments/scATAC_PBMC_R1.fragments.tsv.gz"
-
Now we will create our Arrow Files (~10-15 minutes). For each sample, this step will:
-1. Read accessible fragments from the provided input files.
-2. Calculate quality control information for each cell (i.e. TSS enrichment scores and nucleosome info).
-3. Filter cells based on quality control parameters.
-4. Create a genome-wide TileMatrix using 500-bp bins.
-5. Create a GeneScoreMatrix using the custom geneAnnotation
that was defined when we called addArchRGenome()
.
-
#Set Genome Annotations to be used to hg19
-addArchRGenome ("hg19" )
-
-#Set Default Threads for ArchR Functions
-addArchRThreads (threads = 6 )
-
- ArrowFiles <- createArrowFiles (
- inputFiles = inputFiles,
- sampleNames = names (inputFiles),
- filterTSS = 4 , #Dont set this too high because you can always increase later
- filterFrags = 1000 ,
- addTileMat = TRUE ,
- addGeneScoreMat = TRUE
- )
- ArrowFiles
-# [1] "scATAC_BMMC_R1.arrow" "scATAC_CD34_BMMC_R1.arrow"
-# [3] "scATAC_PBMC_R1.arrow"
-
This step will create a folder called “QualityControl” in your current working directory that will contain 2 plots associated with each of your samples:
-1. TSS Enrichment Score by log10(Unique Fragments) -
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-
-2. Fragment Size Distribution -
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
To download the TSS by Frags PDFs for each sample:
-
Download PDF : scATAC_BMMC_R1-TSS_by_Unique_Frags.pdf
-Download PDF : scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags.pdf
-Download PDF : scATAC_PBMC_R1-TSS_by_Unique_Frags.pdf
-
To download the Fragment Sizes PDFs for each sample:
-
Download PDF : scATAC_BMMC_R1-Fragment_Size_Distribution.pdf
-Download PDF : scATAC_CD34_BMMC_R1-Fragment_Size_Distribution.pdf
-Download PDF : scATAC_PBMC_R1-Fragment_Size_Distribution.pdf
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/custom-deviations.html b/bookdown/_book/custom-deviations.html
deleted file mode 100644
index 004d983..0000000
--- a/bookdown/_book/custom-deviations.html
+++ /dev/null
@@ -1,374 +0,0 @@
-
-
-
-
-
-
- 12.3 Custom Deviations | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Custom Deviations
-
If you have not added motif annotations
-
#Custom Peak Annotations
- EncodePeaks <- c (
- Encode_K562_GATA1 = "https://www.encodeproject.org/files/ENCFF632NQI/@@download/ENCFF632NQI.bed.gz" ,
- Encode_GM12878_CEBPB = "https://www.encodeproject.org/files/ENCFF761MGJ/@@download/ENCFF761MGJ.bed.gz" ,
- Encode_K562_Ebf1 = "https://www.encodeproject.org/files/ENCFF868VSY/@@download/ENCFF868VSY.bed.gz" ,
- Encode_K562_Pax5 = "https://www.encodeproject.org/files/ENCFF339KUO/@@download/ENCFF339KUO.bed.gz"
- )
- projHeme5 <- addPeakAnnotations (ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "ChIP"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "ChIPMatrix" )
-# DataFrame with 4 rows and 6 columns
-# seqnames idx name combinedVars combinedMeans
-# <Rle> <array> <array> <numeric> <numeric>
-# f1 z 1 Encode_K562_GATA1 6.19256551652079 -0.0229048763845575
-# f3 z 3 Encode_K562_Ebf1 3.31156290837234 0.0394899516880888
-# f4 z 4 Encode_K562_Pax5 2.93016136274537 -0.00867706262058369
-# f2 z 2 Encode_GM12878_CEBPB 0.779863387389073 0.00919359271019273
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-ChIP-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
To get deviation z-scores
-
markerChIP <- getFeatures (projHeme5, useMatrix = "ChIPMatrix" )
- markerChIP <- sort (grep ("z:" , markerChIP, value = TRUE ))
- markerChIP
-# [1] "z:Encode_GM12878_CEBPB" "z:Encode_K562_Ebf1" "z:Encode_K562_GATA1"
-# [4] "z:Encode_K562_Pax5"
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "ChIPMatrix" ,
- name = markerChIP,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 2 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/custom-enrichment.html b/bookdown/_book/custom-enrichment.html
deleted file mode 100644
index e559afa..0000000
--- a/bookdown/_book/custom-enrichment.html
+++ /dev/null
@@ -1,348 +0,0 @@
-
-
-
-
-
-
- 11.3 Custom Enrichment | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Custom Enrichment
-
#Custom Peak Annotations
- EncodePeaks <- c (
- Encode_K562_GATA1 = "https://www.encodeproject.org/files/ENCFF632NQI/@@download/ENCFF632NQI.bed.gz" ,
- Encode_GM12878_CEBPB = "https://www.encodeproject.org/files/ENCFF761MGJ/@@download/ENCFF761MGJ.bed.gz" ,
- Encode_K562_Ebf1 = "https://www.encodeproject.org/files/ENCFF868VSY/@@download/ENCFF868VSY.bed.gz" ,
- Encode_K562_Pax5 = "https://www.encodeproject.org/files/ENCFF339KUO/@@download/ENCFF339KUO.bed.gz"
- )
- projHeme5 <- addPeakAnnotations (ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP" )
-
-#Identify ChIP Enrichments
- enrichRegions <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "ChIP" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichRegions
-# class: SummarizedExperiment
-# dim: 4 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(4): Encode_K562_GATA1 Encode_GM12878_CEBPB Encode_K562_Ebf1
-# Encode_K562_Pax5
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapRegions <- enrichHeatmap (enrichRegions, n = 7 , transpose = TRUE )
-draw (heatmapRegions, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapRegions, name = "Regions-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/custom-region-annotation-deviations.html b/bookdown/_book/custom-region-annotation-deviations.html
deleted file mode 100644
index 6a4a886..0000000
--- a/bookdown/_book/custom-region-annotation-deviations.html
+++ /dev/null
@@ -1,375 +0,0 @@
-
-
-
-
-
-
- 12.3 Custom Region Annotation Deviations | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Custom Region Annotation Deviations
-
If you have not added motif annotations
-
#Custom Peak Annotations
- EncodePeaks <- c (
- Encode_K562_GATA1 = "https://www.encodeproject.org/files/ENCFF632NQI/@@download/ENCFF632NQI.bed.gz" ,
- Encode_GM12878_CEBPB = "https://www.encodeproject.org/files/ENCFF761MGJ/@@download/ENCFF761MGJ.bed.gz" ,
- Encode_K562_Ebf1 = "https://www.encodeproject.org/files/ENCFF868VSY/@@download/ENCFF868VSY.bed.gz" ,
- Encode_K562_Pax5 = "https://www.encodeproject.org/files/ENCFF339KUO/@@download/ENCFF339KUO.bed.gz"
- )
- projHeme5 <- addPeakAnnotations (ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP" )
-
If you have not added background peaks
-
projHeme5 <- addBgdPeaks (projHeme5)
-
Add ChromVAR Deviations for Motifs
-
addArchRThreads (8 )
-
- projHeme5 <- addDeviationsMatrix (
- ArchRProj = projHeme5,
- peakAnnotation = "ChIP"
- )
-
Plot Variable Motif Annotations
-
plotVarDev <- getVarDeviations (projHeme5, plot = TRUE , name = "ChIPMatrix" )
-# DataFrame with 4 rows and 6 columns
-# seqnames idx name combinedVars combinedMeans
-# <Rle> <array> <array> <numeric> <numeric>
-# f1 z 1 Encode_K562_GATA1 6.19256551652079 -0.0229048763845575
-# f3 z 3 Encode_K562_Ebf1 3.31156290837234 0.0394899516880888
-# f4 z 4 Encode_K562_Pax5 2.93016136274537 -0.00867706262058369
-# f2 z 2 Encode_GM12878_CEBPB 0.779863387389073 0.00919359271019273
- plotVarDev
-
-
We can then plot this as a nice PDF
-
plotPDF (plotVarDev, name = "Variable-ChIP-Deviation-Scores" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
To get deviation z-scores
-
markerChIP <- getFeatures (projHeme5, useMatrix = "ChIPMatrix" )
- markerChIP <- sort (grep ("z:" , markerChIP, value = TRUE ))
- markerChIP
-# [1] "z:Encode_GM12878_CEBPB" "z:Encode_K562_Ebf1" "z:Encode_K562_GATA1"
-# [4] "z:Encode_K562_Pax5"
-
p <- plotEmbedding (
- ArchRProj = projHeme5,
- colorBy = "ChIPMatrix" ,
- name = markerChIP,
- embedding = "UMAP" ,
- imputeWeights = getImputeWeights (projHeme5)
- )
-
To plot all motifs we can use cowplot
-
#Rearrange for grid plotting
- p2 <- lapply (p, function (x){
- x + guides (color = FALSE , fill = FALSE ) +
- theme_ArchR (baseSize = 6.5 ) +
- theme (plot.margin = unit (c (0 , 0 , 0 , 0 ), "cm" )) +
- theme (
- axis.text.x= element_blank (),
- axis.ticks.x= element_blank (),
- axis.text.y= element_blank (),
- axis.ticks.y= element_blank ()
- )
- })
-do.call (cowplot:: plot_grid, c (list (ncol = 2 ),p2))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/custom-region-enrichment.html b/bookdown/_book/custom-region-enrichment.html
deleted file mode 100644
index 16c3892..0000000
--- a/bookdown/_book/custom-region-enrichment.html
+++ /dev/null
@@ -1,349 +0,0 @@
-
-
-
-
-
-
- 11.3 Custom Region Enrichment | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Custom Region Enrichment
-
#Custom Peak Annotations
- EncodePeaks <- c (
- Encode_K562_GATA1 = "https://www.encodeproject.org/files/ENCFF632NQI/@@download/ENCFF632NQI.bed.gz" ,
- Encode_GM12878_CEBPB = "https://www.encodeproject.org/files/ENCFF761MGJ/@@download/ENCFF761MGJ.bed.gz" ,
- Encode_K562_Ebf1 = "https://www.encodeproject.org/files/ENCFF868VSY/@@download/ENCFF868VSY.bed.gz" ,
- Encode_K562_Pax5 = "https://www.encodeproject.org/files/ENCFF339KUO/@@download/ENCFF339KUO.bed.gz"
- )
- projHeme5 <- addPeakAnnotations (ArchRProj = projHeme5, regions = EncodePeaks, name = "ChIP" )
-
-#Identify ChIP Enrichments
- enrichRegions <- peakAnnoEnrichment (
- seMarker = markersPeaks,
- ArchRProj = projHeme5,
- peakAnnotation = "ChIP" ,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5"
- )
- enrichRegions
-# class: SummarizedExperiment
-# dim: 4 14
-# metadata(0):
-# assays(10): mlog10Padj mlog10p ... CompareFrequency feature
-# rownames(4): Encode_K562_GATA1 Encode_GM12878_CEBPB Encode_K562_Ebf1
-# Encode_K562_Pax5
-# rowData names(0):
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
-#Heatmap
- heatmapRegions <- enrichHeatmap (enrichRegions, n = 7 , transpose = TRUE )
-draw (heatmapRegions, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapRegions, name = "Regions-Enriched-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/dimensionality-reduction-with-archr.html b/bookdown/_book/dimensionality-reduction-with-archr.html
deleted file mode 100644
index be41c77..0000000
--- a/bookdown/_book/dimensionality-reduction-with-archr.html
+++ /dev/null
@@ -1,315 +0,0 @@
-
-
-
-
-
-
- Chapter 4 Dimensionality Reduction with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Dimensionality Reduction with ArchR
-
Dimensionality reduction with scATAC-seq is challenging due to the sparsity of the data. When we see multiple Tn5 insertions within a single peak it does not necessarily relate to that site being multiple times more accessible than
-a different site. For this reason a lot of analytical strategies work on a binary scATAC-seq data matrix. First, it is important to determine which regions to use for dimensionality reduction. The main two strategies have been using ATAC-seq peaks or larger kilobase scale tiles genome-wide. However, determining a peak set is a bit challenging because it changes with the number of samples in each experiment. This makes comparisons of multiple data sets extremely challenging. Another strategy is to use large kilobase scale tiles which is promising because it solves the multiple sample comparison challenge by using a predetermined feature set. However, most of the time this is performed on a 5kb+ sized tiles which are much larger (10x) than an accessible region. ArchR was designed to merge these methods by creating a 500-bp genome-wide feature set. The challenge is that this cell by tile matrix is around 6 million features which is too large to read into R for many cells. Therefore, ArchR is designed to compute dimensionality reduction on a subset of these features that are more biologically relevant.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/doublet-inference-with-archr.html b/bookdown/_book/doublet-inference-with-archr.html
deleted file mode 100644
index 4b42e83..0000000
--- a/bookdown/_book/doublet-inference-with-archr.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-
-
-
-
- Chapter 2 Doublet Inference with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Doublet Inference with ArchR
-
One major source of trouble in single-cell data is the contribution of “doublets” to the analysis. A doublet refers to a single droplet that received a single barcoded bead and more than one nucleus. This causes the reads from more than one cell to appear as a single cell that is effectively the average of the two cells. We remove these computationally and describe this doublet removal process in depth in this chapter.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/feature-footprinting.html b/bookdown/_book/feature-footprinting.html
deleted file mode 100644
index c5fd61c..0000000
--- a/bookdown/_book/feature-footprinting.html
+++ /dev/null
@@ -1,335 +0,0 @@
-
-
-
-
-
-
- 13.2 Feature Footprinting | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/filtering-doublets-from-an-archrproject.html b/bookdown/_book/filtering-doublets-from-an-archrproject.html
deleted file mode 100644
index 275678f..0000000
--- a/bookdown/_book/filtering-doublets-from-an-archrproject.html
+++ /dev/null
@@ -1,344 +0,0 @@
-
-
-
-
-
-
- 3.5 Filtering Doublets from an ArchRProject | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Filtering Doublets from an ArchRProject
-
#Remove doublets as normal
-#If you feel there are more doublets try increasing filterRatio like below
- projHeme2 <- filterDoublets (projHeme1)
-# Filtering 410 cells from ArchRProject!
-# scATAC_BMMC_R1 : 243 of 4932 (4.9%)
-# scATAC_CD34_BMMC_R1 : 107 of 3275 (3.3%)
-# scATAC_PBMC_R1 : 60 of 2454 (2.4%)
-
-#Lets see the project now
- projHeme2
-# class: ArchRProject
-# outputDirectory: /Volumes/JG_SSD_2/ArchR_Walkthrough/HemeTutorial
-# samples(3): scATAC_BMMC_R1 scATAC_CD34_BMMC_R1 scATAC_PBMC_R1
-# sampleColData names(1): ArrowFiles
-# cellColData names(11): DoubletEnrichment DoubletScore ... Sample
-# TSSEnrichment
-# numberOfCells(1): 10251
-# medianTSS(1): 16.851
-# medianFrags(1): 2994
-
If you want to filter more cells from the ArchR Project try a higher filterRatio.
-To see additional arguments try ?filterDoublets
-
projHemeTmp <- filterDoublets (projHeme1, filterRatio = 1.5 )
-# Filtering 614 cells from ArchRProject!
-# scATAC_BMMC_R1 : 364 of 4932 (7.4%)
-# scATAC_CD34_BMMC_R1 : 160 of 3275 (4.9%)
-# scATAC_PBMC_R1 : 90 of 2454 (3.7%)
-rm (projHemeTmp)
-
We can now save our original projHeme1 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme1, copyArrows = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/footprinting-with-archr.html b/bookdown/_book/footprinting-with-archr.html
deleted file mode 100644
index 4e88bc9..0000000
--- a/bookdown/_book/footprinting-with-archr.html
+++ /dev/null
@@ -1,313 +0,0 @@
-
-
-
-
-
-
- Chapter 13 Footprinting with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/getting-set-up.html b/bookdown/_book/getting-set-up.html
deleted file mode 100644
index de058bd..0000000
--- a/bookdown/_book/getting-set-up.html
+++ /dev/null
@@ -1,328 +0,0 @@
-
-
-
-
-
-
- 1.2 Getting Set Up | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Getting Set Up
-
The first thing we do is set up our working directory and set the number of threads we would like to use, and load our gene and genome annotations. Depending on the configuration of your local environment, you may need to modify the number of threads
used below in addArchRThreads()
. By default ArchR uses half of the total number of threads
available but you can adjust this manually as you see fit. If you are using windows, the usable threads
will automatically be set to 1 because the parallel processing in ArchR is build for Unix-based operating systems.
-
#Load R Libraries
-library (ArchR)
-
-#Create a new folder and set this as the working directory for tutorial analyses
- wd <- "ArchR_Walkthrough"
-dir.create (wd, showWarnings = FALSE , recursive = TRUE )
-setwd (wd)
-
-#Set Default Threads for ArchR Functions
-#The recommendation is to set it around 1/2 to 3/4 of the total available cores.
-addArchRThreads (threads = 6 )
-
-#Set Gene and Genome Annotations to be used
-addArchRGenome ("hg19" )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/getting-started-with-archr.html b/bookdown/_book/getting-started-with-archr.html
deleted file mode 100644
index 88a8347..0000000
--- a/bookdown/_book/getting-started-with-archr.html
+++ /dev/null
@@ -1,314 +0,0 @@
-
-
-
-
-
-
- Chapter 1 Getting Started with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Getting Started with ArchR
-
This chapter will introduce you to how to import data into ArchR.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/identification-of-marker-genes-1.html b/bookdown/_book/identification-of-marker-genes-1.html
deleted file mode 100644
index f659190..0000000
--- a/bookdown/_book/identification-of-marker-genes-1.html
+++ /dev/null
@@ -1,302 +0,0 @@
-
-
-
-
-
-
- 7.1 Identification of Marker Genes | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Identification of Marker Genes
-
Identify Marker Gene through Pairwise Test vs Bias-Matched Background
-
markersGS <- markerFeatures (
- ArchRProj = projHemeND,
- useMatrix = "GeneScoreMatrix" ,
- groupBy = "Clusters" ,
- bias = c ("TSSEnrichment" , "log10(nFrags)" ),
- testMethod = "wilcoxon"
- )
-
markerList <- getMarkers (markersGS, cutOff = "FDR <= 0.01 & Log2FC >= 1.25" )
- markerList$ Cluster4
-# DataFrame with 210 rows and 6 columns
-# seqnames start name idx Log2FC
-# <Rle> <array> <array> <array> <numeric>
-# 14759 chr22 37545962 IL2RB 301 2.09731361787433
-# 6856 chr14 99737822 BCL11B 595 1.42193213075962
-# 13123 chr2 192038902 STAT4 1064 1.90075014141832
-# 12597 chr2 87035519 CD8A 538 1.96747880033344
-# 9299 chr17 34207377 CCL5 540 2.65385587389937
-# ... ... ... ... ... ...
-# 1488 chr1 156182779 PMF1 1488 1.35708770978464
-# 22735 chrX 101854276 ARMCX5-GPRASP2 518 1.59283344451927
-# 19680 chr7 45144641 SNORA5C 318 1.27027443652085
-# 1856 chr1 196659182 CFHR4 1856 1.92661384224492
-# 17830 chr5 140739703 PCDHGB2 690 2.93899133419389
-
We can then plot this as a heatmap
-
markerGenes <- c (
- "CD34" , #Early Progenitor
- "GATA1" , #Erythroid
- "PAX5" , "MS4A1" , #B-Cell Trajectory
- "CD14" , #Monocytes
- "CD3D" , "CD8A" , "TBX21" , "IL7R" #TCells
- )
-
- heatmapGS <- markerHeatmap (
- seMarker = markersGS,
- cutOff = "FDR <= 0.01 & Log2FC >= 1.25" ,
- labelMarkers = markerGenes,
- transpose = TRUE
- )
-
-draw (heatmapGS, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
We can then plot this
-
plotPDF (heatmapGS, name = "GeneScores-Marker-Heatmap" , width = 9 , height = 7 , ArchRProj = projHemeND, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/identification-of-marker-genes.html b/bookdown/_book/identification-of-marker-genes.html
deleted file mode 100644
index b300bac..0000000
--- a/bookdown/_book/identification-of-marker-genes.html
+++ /dev/null
@@ -1,358 +0,0 @@
-
-
-
-
-
-
- 7.1 Identification of Marker Genes | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Identification of Marker Genes
-
Identify Marker Gene through Pairwise Test vs Bias-Matched Background
-
markersGS <- markerFeatures (
- ArchRProj = projHeme2,
- useMatrix = "GeneScoreMatrix" ,
- groupBy = "Clusters" ,
- bias = c ("TSSEnrichment" , "log10(nFrags)" ),
- testMethod = "wilcoxon"
- )
-
markerList <- getMarkers (markersGS, cutOff = "FDR <= 0.01 & Log2FC >= 1.25" )
- markerList$ Cluster4
-# DataFrame with 210 rows and 6 columns
-# seqnames start name idx Log2FC
-# <Rle> <array> <array> <array> <numeric>
-# 14759 chr22 37545962 IL2RB 301 2.09731361787433
-# 6856 chr14 99737822 BCL11B 595 1.42193213075962
-# 13123 chr2 192038902 STAT4 1064 1.90075014141832
-# 12597 chr2 87035519 CD8A 538 1.96747880033344
-# 9299 chr17 34207377 CCL5 540 2.65385587389937
-# ... ... ... ... ... ...
-# 1488 chr1 156182779 PMF1 1488 1.35708770978464
-# 22735 chrX 101854276 ARMCX5-GPRASP2 518 1.59283344451927
-# 19680 chr7 45144641 SNORA5C 318 1.27027443652085
-# 1856 chr1 196659182 CFHR4 1856 1.92661384224492
-# 17830 chr5 140739703 PCDHGB2 690 2.93899133419389
-
We can then plot this as a heatmap
-
markerGenes <- c (
- "CD34" , #Early Progenitor
- "GATA1" , #Erythroid
- "PAX5" , "MS4A1" , #B-Cell Trajectory
- "CD14" , #Monocytes
- "CD3D" , "CD8A" , "TBX21" , "IL7R" #TCells
- )
-
- heatmapGS <- markerHeatmap (
- seMarker = markersGS,
- cutOff = "FDR <= 0.01 & Log2FC >= 1.25" ,
- labelMarkers = markerGenes,
- transpose = TRUE
- )
-
-draw (heatmapGS, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapGS, name = "GeneScores-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme2, addDOC = FALSE )
-
Download PDF : GeneScores-Marker-Heatmap.pdf
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/identifying-marker-peaks-with-archr-1.html b/bookdown/_book/identifying-marker-peaks-with-archr-1.html
deleted file mode 100644
index 124947a..0000000
--- a/bookdown/_book/identifying-marker-peaks-with-archr-1.html
+++ /dev/null
@@ -1,423 +0,0 @@
-
-
-
-
-
-
- 10.1 Identifying Marker Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Identifying Marker Peaks with ArchR
-
Often times, we are interested to know which peaks are unique to an individual cluster or a small group of clusters. We can do this in an unsupervised fashion in ArchR:
-
addArchRThreads (8 )
-
-#Our scRNA labels
-table (projHeme5$ Clusters2)
-# C1_Early.Eryth C10_CD14.Mono.2 C11_B C12_Pre.B C13_CLP.2
-# 28 1070 425 351 408
-# C14_pDC C2_CD4.N1 C3_CD4.N2 C4_NK C5_Late.Eryth
-# 345 1330 562 901 860
-# C6_HSC C7_CMP.LMPP C8_GMP.Neut C9_CD14.Mono.1
-# 1218 974 274 1505
-
-#Identify Marker Peaks while controling for TSS and Depth Biases
- markersPeaks <- markerFeatures (
- ArchRProj = projHeme5,
- useMatrix = "PeakMatrix" ,
- groupBy = "Clusters2" ,
- bias = c ("TSSEnrichment" , "log10(nFrags)" ),
- testMethod = "wilcoxon"
- )
-
- markersPeaks
-# class: SummarizedExperiment
-# dim: 158378 14
-# metadata(2): MatchInfo Params
-# assays(5): Log2FC Mean FDR AUC MeanBGD
-# rownames(158378): 1 2 ... 158377 158378
-# rowData names(4): seqnames idx start end
-# colnames(14): C1_Early.Eryth C2_CD4.N1 ... C13_CLP.2 C14_pDC
-# colData names(0):
-
We can get the peak regions for each marker as DataFrame
or GRanges
.
-
#DataFrame
- markerList <- getMarkers (markersPeaks, cutOff = "FDR <= 0.01 & Log2FC >= 1" )
- markerList
-# List of length 14
-# names(14): C1_Early.Eryth C2_CD4.N1 C3_CD4.N2 ... C12_Pre.B C13_CLP.2 C14_pDC
-
- markerList$ C5_Late.Eryth
-# DataFrame with 2262 rows and 6 columns
-# seqnames idx start end Log2FC
-# <Rle> <array> <array> <array> <numeric>
-# 97705 chr22 1313 30129829 30130329 3.51592607805769
-# 10135 chr1 10135 164681301 164681801 4.44617535438744
-# 48828 chr15 1349 50552672 50553172 5.18141784055201
-# 54061 chr16 1457 15615745 15616245 8.33999798117364
-# 2928 chr1 2928 27869062 27869562 5.21444029812509
-# ... ... ... ... ... ...
-# 41787 chr13 3145 112037183 112037683 3.09392983218513
-# 97647 chr22 1255 29702383 29702883 2.97001510006876
-# 143218 chr8 1908 37949093 37949593 2.9624832757185
-# 39746 chr13 1104 41255455 41255955 1.27203148042162
-# 128023 chr6 3784 41169564 41170064 2.67070386367678
-
-#GRanges
- markerList <- getMarkers (markersPeaks, cutOff = "FDR <= 0.01 & Log2FC >= 1" , returnGR = TRUE )
- markerList
-# GenomicRangesList of length 14
-# names(14): C1_Early.Eryth C2_CD4.N1 C3_CD4.N2 ... C12_Pre.B C13_CLP.2 C14_pDC
-
- markerList$ C5_Late.Eryth
-# GRanges object with 2262 ranges and 2 metadata columns:
-# seqnames ranges strand | Log2FC
-# <Rle> <IRanges> <Rle> | <numeric>
-# [1] chr22 30129829-30130329 * | 3.51592607805769
-# [2] chr1 164681301-164681801 * | 4.44617535438744
-# [3] chr15 50552672-50553172 * | 5.18141784055201
-# [4] chr16 15615745-15616245 * | 8.33999798117364
-# [5] chr1 27869062-27869562 * | 5.21444029812509
-# ... ... ... ... . ...
-# [2258] chr13 112037183-112037683 * | 3.09392983218513
-# [2259] chr22 29702383-29702883 * | 2.97001510006876
-# [2260] chr8 37949093-37949593 * | 2.9624832757185
-# [2261] chr13 41255455-41255955 * | 1.27203148042162
-# [2262] chr6 41169564-41170064 * | 2.67070386367678
-
We can visualize this as a heatmap
-
#Visualize Markers as a heatmap
- heatmapPeaks <- markerHeatmap (
- seMarker = markersPeaks,
- cutOff = "FDR <= 0.1 & Log2FC >= 0.5" ,
- transpose = TRUE
- )
-
-draw (heatmapPeaks, heatmap_legend_side = "bot" , annotation_legend_side = "bot" )
-
-
We can then plot this
-
plotPDF (heatmapPeaks, name = "Peak-Marker-Heatmap" , width = 8 , height = 6 , ArchRProj = projHeme5, addDOC = FALSE )
-
We can also plot an MA/Volcano Plot for any individual cluster
-
#Marker Peaks for Erythroid
- pma <- markerPlot (seMarker = markersPeaks, name = "C5_Late.Eryth" , cutOff = "FDR <= 0.1 & Log2FC >= 1" , plotAs = "MA" )
- pma
-
-
pv <- markerPlot (seMarker = markersPeaks, name = "C5_Late.Eryth" , cutOff = "FDR <= 0.1 & Log2FC >= 1" , plotAs = "Volcano" )
- pv
-
-
We can then plot this as a nice pdf
-
plotPDF (pma, pv, name = "Erythroid-Markers-MA-Volcano" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
Additionally we can see these peak regions overlayed on our browser tracks
-
p <- ArchRBrowserTrack (
- ArchRProj = projHeme5,
- groupBy = "Clusters" ,
- geneSymbol = c ("GATA1" ),
- features = getMarkers (markersPeaks, cutOff = "FDR <= 0.1 & Log2FC >= 1" , returnGR = TRUE )["C5_Late.Eryth" ],
- upstream = 50000 ,
- downstream = 50000
- )
- grid:: grid.newpage ()
- grid:: grid.draw (p$ GATA1)
-
-
We can then plot this as a nice pdf
-
plotPDF (p, name = "Plot-Tracks-With-Features" , width = 5 , height = 5 , ArchRProj = projHeme5, addDOC = FALSE )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/identifying-marker-peaks-with-archr.html b/bookdown/_book/identifying-marker-peaks-with-archr.html
deleted file mode 100644
index 0795e45..0000000
--- a/bookdown/_book/identifying-marker-peaks-with-archr.html
+++ /dev/null
@@ -1,313 +0,0 @@
-
-
-
-
-
-
- Chapter 10 Identifying Marker Peaks with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Identifying Marker Peaks with ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/images/.DS_Store b/bookdown/_book/images/.DS_Store
deleted file mode 100644
index ad1c976..0000000
Binary files a/bookdown/_book/images/.DS_Store and /dev/null differ
diff --git a/bookdown/_book/images/ArchRProject_Schematic.png b/bookdown/_book/images/ArchRProject_Schematic.png
deleted file mode 100644
index 993a3ac..0000000
Binary files a/bookdown/_book/images/ArchRProject_Schematic.png and /dev/null differ
diff --git a/bookdown/_book/images/ArchR_FunctionSchematic.png b/bookdown/_book/images/ArchR_FunctionSchematic.png
deleted file mode 100644
index efc00a1..0000000
Binary files a/bookdown/_book/images/ArchR_FunctionSchematic.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/.DS_Store b/bookdown/_book/images/HemeWalkthrough/.DS_Store
deleted file mode 100644
index 2756822..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/.DS_Store and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/GeneScores-Marker-Heatmap.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/GeneScores-Marker-Heatmap.pdf
deleted file mode 100755
index a50780d..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/GeneScores-Marker-Heatmap.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE-Sample-Clusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE-Sample-Clusters.pdf
deleted file mode 100755
index a531f9f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE-Sample-Clusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE2Harmony-Sample-Clusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE2Harmony-Sample-Clusters.pdf
deleted file mode 100755
index 9a79293..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-TSNE2Harmony-Sample-Clusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes-with-CoAccessibility.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes-with-CoAccessibility.pdf
deleted file mode 100644
index c1aa5c8..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes-with-CoAccessibility.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes.pdf
deleted file mode 100755
index 64abc7f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-Tracks-Marker-Genes.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-W-Imputation.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-W-Imputation.pdf
deleted file mode 100755
index 9a097df..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-W-Imputation.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-WO-Imputation.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-WO-Imputation.pdf
deleted file mode 100755
index fc1f7b0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Marker-Genes-WO-Imputation.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-Clusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-Clusters.pdf
deleted file mode 100755
index a95bb31..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-Clusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-ScranClusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-ScranClusters.pdf
deleted file mode 100755
index f6389d8..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP-Sample-ScranClusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP2Harmony-Sample-Clusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP2Harmony-Sample-Clusters.pdf
deleted file mode 100755
index 99c4717..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-UMAP2Harmony-Sample-Clusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-tSNE-Sample-ScranClusters.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/Plot-tSNE-Sample-ScranClusters.pdf
deleted file mode 100755
index 87f1fe5..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/Plot-tSNE-Sample-ScranClusters.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-FragSizes-TSSProfile.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-FragSizes-TSSProfile.pdf
deleted file mode 100755
index 306b07e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-FragSizes-TSSProfile.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-Statistics.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-Statistics.pdf
deleted file mode 100755
index 862ae54..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/QC-Sample-Statistics.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/TSS-vs-Frags.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/TSS-vs-Frags.pdf
deleted file mode 100755
index 70c2edf..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/TSS-vs-Frags.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Doublet-Summary.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Doublet-Summary.pdf
deleted file mode 100755
index 3024a07..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Doublet-Summary.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Fragment_Size_Distribution.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Fragment_Size_Distribution.pdf
deleted file mode 100755
index 75b4900..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-Fragment_Size_Distribution.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-TSS_by_Unique_Frags.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-TSS_by_Unique_Frags.pdf
deleted file mode 100755
index 5dfbb65..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_BMMC_R1-TSS_by_Unique_Frags.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Doublet-Summary.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Doublet-Summary.pdf
deleted file mode 100755
index f118246..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Doublet-Summary.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution.pdf
deleted file mode 100755
index 2b1367e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags.pdf
deleted file mode 100755
index 28eac83..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Doublet-Summary.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Doublet-Summary.pdf
deleted file mode 100755
index 324b266..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Doublet-Summary.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Fragment_Size_Distribution.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Fragment_Size_Distribution.pdf
deleted file mode 100755
index 29e69db..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-Fragment_Size_Distribution.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-TSS_by_Unique_Frags.pdf b/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-TSS_by_Unique_Frags.pdf
deleted file mode 100755
index 53baa3e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PDF/scATAC_PBMC_R1-TSS_by_Unique_Frags.pdf and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ATAC-Enriched-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/ATAC-Enriched-Marker-Heatmap_1.png
deleted file mode 100755
index 1bb00c6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ATAC-Enriched-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchRBrowser_CD14.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchRBrowser_CD14.png
deleted file mode 100644
index cd48e50..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchRBrowser_CD14.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_1.png
deleted file mode 100644
index b7d23de..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_2.png
deleted file mode 100644
index f489cde..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_3.png
deleted file mode 100644
index 0953326..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_4.png
deleted file mode 100644
index d2e02fd..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_5.png
deleted file mode 100644
index c017267..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_6.png
deleted file mode 100644
index cf097c1..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/ArchR_Browser_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Codex-Enriched-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Codex-Enriched-Marker-Heatmap_1.png
deleted file mode 100755
index 8e05d1b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Codex-Enriched-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/EncodeTFBS-Enriched-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/EncodeTFBS-Enriched-Marker-Heatmap_1.png
deleted file mode 100755
index 7265a4b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/EncodeTFBS-Enriched-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_1.png
deleted file mode 100755
index 9f94e6b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_2.png
deleted file mode 100755
index 9e64176..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-Markers-MA-Volcano_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_1.png
deleted file mode 100755
index e3cdc81..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_2.png
deleted file mode 100755
index 0de18bc..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-MA-Volcano_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_1.png
deleted file mode 100755
index 2206431..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_2.png
deleted file mode 100755
index 386d985..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Erythroid-vs-HSC-Markers-Motifs-Enriched_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_1.png
deleted file mode 100755
index e998902..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_2.png
deleted file mode 100755
index a4234f6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_3.png
deleted file mode 100755
index 49a1168..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Divide-Bias_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_1.png
deleted file mode 100755
index 79b0ad0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_2.png
deleted file mode 100755
index 2bca34a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_3.png
deleted file mode 100755
index 6e8f554..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-No-Normalization_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_1.png
deleted file mode 100755
index a463169..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_2.png
deleted file mode 100755
index 1978a5f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_3.png
deleted file mode 100755
index 682e5bf..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Footprints-Subtract-Bias_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/GeneScores-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/GeneScores-Marker-Heatmap_1.png
deleted file mode 100755
index 51e3e83..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/GeneScores-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Motifs-Enriched-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Motifs-Enriched-Marker-Heatmap_1.png
deleted file mode 100755
index 698a10b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Motifs-Enriched-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-25-49_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-25-49_1.png
deleted file mode 100755
index 7b6017e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-25-49_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-47-12_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-47-12_1.png
deleted file mode 100755
index 05c25c5..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Call-Summary_Date-2020-02-17_Time-02-47-12_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Marker-Heatmap_1.png
deleted file mode 100755
index ae3a9d5..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Peak-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation-Cowplot_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation-Cowplot_1.png
deleted file mode 100755
index cc45af0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation-Cowplot_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_1.png
deleted file mode 100755
index 1c54fd4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_2.png
deleted file mode 100755
index c4402e3..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_3.png
deleted file mode 100755
index 7e62216..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_4.png
deleted file mode 100755
index d363a4f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_5.png
deleted file mode 100755
index 2f93831..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_6.png
deleted file mode 100755
index 083b140..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Groups-Deviations-w-Imputation_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-RNA-GS_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-RNA-GS_1.png
deleted file mode 100755
index d54e085..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-RNA-GS_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_1.png
deleted file mode 100755
index 17fdd2a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_2.png
deleted file mode 100755
index e1ea8d7..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_3.png
deleted file mode 100755
index 40c1de4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_4.png
deleted file mode 100755
index 8d0f9fa..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-Heatmaps_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-UMAP_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-UMAP_1.png
deleted file mode 100755
index c3d714d..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-LymphoidU-Traj-UMAP_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-RNA-GS_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-RNA-GS_1.png
deleted file mode 100755
index 021d02a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-RNA-GS_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_1.png
deleted file mode 100755
index 3991266..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_2.png
deleted file mode 100755
index 358db43..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_3.png
deleted file mode 100755
index fdbce9c..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_4.png
deleted file mode 100755
index 0775f6c..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-Heatmaps_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-UMAP_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-UMAP_1.png
deleted file mode 100755
index f3ec4b1..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-MyeloidU-Traj-UMAP_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters-Combined_1.png
deleted file mode 100755
index 7285a43..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_1.png
deleted file mode 100755
index 14b4dea..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_2.png
deleted file mode 100755
index 0337803..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE-Sample-Clusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2-Sample-Clusters-Combined_1.png
deleted file mode 100755
index 0d4c197..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_1.png
deleted file mode 100755
index 1934a00..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_2.png
deleted file mode 100755
index 75829a6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_3.png
deleted file mode 100755
index 5c9720a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_4.png
deleted file mode 100755
index fb010e1..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNE2Harmony-Sample-Clusters_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNEHarmony-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNEHarmony-Sample-Clusters-Combined_1.png
deleted file mode 100755
index 26cc8c4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-TSNEHarmony-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes-with-CoAccessibility_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes-with-CoAccessibility_5.png
deleted file mode 100755
index ddb7407..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes-with-CoAccessibility_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_1.png
deleted file mode 100755
index ecf8da2..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_2.png
deleted file mode 100755
index d62dfcf..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_3.png
deleted file mode 100755
index a1cc759..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_4.png
deleted file mode 100755
index e614411..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_5.png
deleted file mode 100755
index a29f920..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_6.png
deleted file mode 100755
index f26d20a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_7.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_7.png
deleted file mode 100755
index 9ff4a75..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_7.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_8.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_8.png
deleted file mode 100755
index 9dcc975..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_8.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_9.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_9.png
deleted file mode 100755
index 7efd95c..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-Marker-Genes_9.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-With-Features_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-With-Features_1.png
deleted file mode 100755
index 14bc3ea..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-Tracks-With-Features_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined2_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined2_1.png
deleted file mode 100755
index a1025f0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined2_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined_1.png
deleted file mode 100755
index b09eef8..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-CEBPB-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Clusters12-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Clusters12-Combined_1.png
deleted file mode 100755
index 0ecf30b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Clusters12-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBS-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBS-W-Imputation_1.png
deleted file mode 100755
index 84ebb0f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBS-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSGS-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSGS-W-Imputation_1.png
deleted file mode 100755
index bf0e096..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSGS-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSRNA-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSRNA-W-Imputation_1.png
deleted file mode 100755
index 3baae10..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-EncodeTFBSRNA-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_1.png
deleted file mode 100755
index 5251a9a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_2.png
deleted file mode 100755
index 3584fde..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_3.png
deleted file mode 100755
index c2a5bb6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_4.png
deleted file mode 100755
index 071681f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_5.png
deleted file mode 100755
index 2cc5ff6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_6.png
deleted file mode 100755
index 1e0bc77..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_7.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_7.png
deleted file mode 100755
index 20b5333..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_7.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_8.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_8.png
deleted file mode 100755
index 24d989d..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_8.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_9.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_9.png
deleted file mode 100755
index 9aca4ef..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-RNA-W-Imputation_9.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_1.png
deleted file mode 100755
index cd23670..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_2.png
deleted file mode 100755
index 26caef2..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_3.png
deleted file mode 100755
index 9bfb1a3..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_4.png
deleted file mode 100755
index 3856ce0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_5.png
deleted file mode 100755
index aea59c6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_6.png
deleted file mode 100755
index 3d1a9c0..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_7.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_7.png
deleted file mode 100755
index 8151d2a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_7.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_8.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_8.png
deleted file mode 100755
index a14d29b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_8.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_9.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_9.png
deleted file mode 100755
index fe50cd3..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-W-Imputation_9.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_1.png
deleted file mode 100755
index 84197ea..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_2.png
deleted file mode 100755
index 64a2b17..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_3.png
deleted file mode 100755
index a8493af..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_4.png
deleted file mode 100755
index e5a40dc..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_5.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_5.png
deleted file mode 100755
index 386c230..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_5.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_6.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_6.png
deleted file mode 100755
index 4ea83a5..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_6.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_7.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_7.png
deleted file mode 100755
index 925e34a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_7.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_8.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_8.png
deleted file mode 100755
index 79b017b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_8.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_9.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_9.png
deleted file mode 100755
index 73c5339..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Marker-Genes-WO-Imputation_9.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerATAC-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerATAC-W-Imputation_1.png
deleted file mode 100755
index 61409b4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerATAC-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerChIP-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerChIP-W-Imputation_1.png
deleted file mode 100755
index c221b53..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerChIP-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifs-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifs-W-Imputation_1.png
deleted file mode 100755
index 83e97d4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifs-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsGS-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsGS-W-Imputation_1.png
deleted file mode 100755
index 382b489..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsGS-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsRNA-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsRNA-W-Imputation_1.png
deleted file mode 100755
index 3c75d3d..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-MarkerMotifsRNA-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_1.png
deleted file mode 100755
index edacdcb..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_2.png
deleted file mode 100755
index a376536..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-RNA-W-Imputation_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-W-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-W-Imputation_1.png
deleted file mode 100755
index a376536..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-W-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-WO-Imputation_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-WO-Imputation_1.png
deleted file mode 100755
index d7ea8b5..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Markers-WO-Imputation_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined2_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined2_1.png
deleted file mode 100755
index 2420d1a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined2_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined_1.png
deleted file mode 100755
index 10b7d17..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-PAX5-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_1.png
deleted file mode 100755
index d25e0cb..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_2.png
deleted file mode 100755
index f15844e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-RNA-Integration_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Remap-Clusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Remap-Clusters_1.png
deleted file mode 100755
index 85ee78f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Remap-Clusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters-Combined_1.png
deleted file mode 100755
index b0f5014..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_1.png
deleted file mode 100755
index 83e0e1b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_2.png
deleted file mode 100755
index 5fd983e..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-Clusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters-Combined_1.png
deleted file mode 100755
index b9c2725..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_1.png
deleted file mode 100755
index 83e0e1b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_2.png
deleted file mode 100755
index 37247ed..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP-Sample-ScranClusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2-Sample-Clusters-Combined_1.png
deleted file mode 100755
index 6a92bfe..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_1.png
deleted file mode 100755
index ef96aea..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_2.png
deleted file mode 100755
index 7dd99e2..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_3.png
deleted file mode 100755
index 4588003..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_4.png
deleted file mode 100755
index f4dd568..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAP2Harmony-Sample-Clusters_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAPHarmony-Sample-Clusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAPHarmony-Sample-Clusters-Combined_1.png
deleted file mode 100755
index ed1bb64..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-UMAPHarmony-Sample-Clusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters-Combined_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters-Combined_1.png
deleted file mode 100755
index 5232fdd..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters-Combined_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_1.png
deleted file mode 100755
index 14b4dea..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_2.png
deleted file mode 100755
index 6c47dc9..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Plot-tSNE-Sample-ScranClusters_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_1.png
deleted file mode 100755
index 10379c7..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_2.png
deleted file mode 100755
index 1d25783..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-FragSizes-TSSProfile_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_1.png
deleted file mode 100755
index ba3e606..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_2.png
deleted file mode 100755
index 408bb8b..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_3.png
deleted file mode 100755
index b490469..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_4.png b/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_4.png
deleted file mode 100755
index 2d105bb..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/QC-Sample-Statistics_4.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Regions-Enriched-Marker-Heatmap_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Regions-Enriched-Marker-Heatmap_1.png
deleted file mode 100755
index 970690a..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Regions-Enriched-Marker-Heatmap_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/TSS-No-Normalization_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/TSS-No-Normalization_1.png
deleted file mode 100755
index 776c7ae..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/TSS-No-Normalization_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/TSS-vs-Frags_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/TSS-vs-Frags_1.png
deleted file mode 100755
index b63f939..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/TSS-vs-Frags_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-ATAC-Deviation-Scores_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Variable-ATAC-Deviation-Scores_1.png
deleted file mode 100755
index c6e2184..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-ATAC-Deviation-Scores_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-EncodeTFBS-Deviation-Scores_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Variable-EncodeTFBS-Deviation-Scores_1.png
deleted file mode 100755
index 9660308..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-EncodeTFBS-Deviation-Scores_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-Motif-Deviation-Scores_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/Variable-Motif-Deviation-Scores_1.png
deleted file mode 100755
index f6288bd..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/Variable-Motif-Deviation-Scores_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_1.png
deleted file mode 100755
index 81e19b4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_2.png
deleted file mode 100755
index b518c20..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_3.png
deleted file mode 100755
index 5c34cb4..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Doublet-Summary_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Fragment_Size_Distribution_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Fragment_Size_Distribution_1.png
deleted file mode 100755
index 5b38f1f..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-Fragment_Size_Distribution_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-TSS_by_Unique_Frags_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-TSS_by_Unique_Frags_1.png
deleted file mode 100755
index 3994ecf..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_BMMC_R1-TSS_by_Unique_Frags_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_1.png
deleted file mode 100755
index 27042ab..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_2.png
deleted file mode 100755
index b2b9d84..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_3.png
deleted file mode 100755
index ea2714d..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Doublet-Summary_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution_1.png
deleted file mode 100755
index 7cb8302..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-Fragment_Size_Distribution_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags_1.png
deleted file mode 100755
index 9987bd1..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_CD34_BMMC_R1-TSS_by_Unique_Frags_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_1.png
deleted file mode 100755
index 7c0a6ce..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_2.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_2.png
deleted file mode 100755
index 7f5a414..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_2.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_3.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_3.png
deleted file mode 100755
index 80620d6..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Doublet-Summary_3.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Fragment_Size_Distribution_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Fragment_Size_Distribution_1.png
deleted file mode 100755
index 31e46d3..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-Fragment_Size_Distribution_1.png and /dev/null differ
diff --git a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-TSS_by_Unique_Frags_1.png b/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-TSS_by_Unique_Frags_1.png
deleted file mode 100755
index 87b4673..0000000
Binary files a/bookdown/_book/images/HemeWalkthrough/PNG/scATAC_PBMC_R1-TSS_by_Unique_Frags_1.png and /dev/null differ
diff --git a/bookdown/_book/images/doubletRemoval.png b/bookdown/_book/images/doubletRemoval.png
deleted file mode 100644
index c328fed..0000000
Binary files a/bookdown/_book/images/doubletRemoval.png and /dev/null differ
diff --git a/bookdown/_book/index.html b/bookdown/_book/index.html
deleted file mode 100644
index d9c8cb7..0000000
--- a/bookdown/_book/index.html
+++ /dev/null
@@ -1,324 +0,0 @@
-
-
-
-
-
-
- ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Preface
-
ArchR is a full-featured software suite for the analysis of single-cell chromatin accessibility data. It is designed to handle hundreds of thousands of single cells without large memory or computational requirements, keeping pace with the experimental scale that is achievable with commercial platforms such as the 10x Genomics Chromium system.
-
This website is a complete user’s guide to ArchR. We explain how to use ArchR by walking through examples of every analysis we could think of. We also include some more extensive documention on some of the more salient points of scATAC-seq analysis such as dimensionality reduction and clustering. All of the chapters will utilize the same gold-standard downsampled dataset of hematopoietic cells Granja* et al. Nature Biotechnology 2019 . Each chapter will build on the previous and we provide intermediate files for you to jump in at any point. Importantly, these tutorials assume that you are running ArchR locally .
-
This walkthrough assumes that you have already successfully installed ArchR and all dependencies. If that is not the case, please visit the home page for installation instructions.
-
Cant find what you are looking for?
-
There is a search feature that can be enabled using the magnifying glass in the navigation bar above which will help you find whatever it is you are looking for. If you dont find it in this book, or if you think the documentation on this website or in the function annotations is unclear, please submit an issue on Github with the documentation tag and we will do our best to clarify. If none of these options help, send us an email and we will do our best to respond in a timely fashion.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/inferring-scatac-seq-doublets-with-archr-1.html b/bookdown/_book/inferring-scatac-seq-doublets-with-archr-1.html
deleted file mode 100644
index cd1a346..0000000
--- a/bookdown/_book/inferring-scatac-seq-doublets-with-archr-1.html
+++ /dev/null
@@ -1,300 +0,0 @@
-
-
-
-
-
-
- 2.1 Inferring scATAC-seq Doublets with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Inferring scATAC-seq Doublets with ArchR
-
#Add Infered Doublet Scores to each Arrow File (~2-5 min per sample)
-#By default ArchR uses the doublet params as described in the ArchR paper.
-#We show some of the main adjustable features below for more information
-#Try ?addDoubletScores to see further documentation on parameters for doublet identification.
- doubScores <- addDoubletScores (
- input = ArrowFiles,
- k = 10 , #Refers to how many cells near a "pseudo-doublet" to count.
- knnMethod = "UMAP" , #Refers to embedding to use for nearest neighbor search with doublet projection.
- LSIMethod = 1
- )
-
Now we can look at the results in a folder “QualityControl” in your current working directory. There are 3 plots associated with each of your samples in this folder :
-1. Doublet Enrichments - These represent the enrichment of simulated doublets nearby each single cell compared to the expected if we assume a uniform distribution.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-
-2. Doublet Scores - These represent the significance (-log10 binomial adjusted p-value) of simulated doublets nearby each single cell compared to the expected if we assume a uniform distribution. We have found this value is not as consistent as the doublet enrichments for doublet identification.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-3. Doublet Density - This represents the density of the simulated doublet projections so you can visually where the doublets are located in your 2-d embedding.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/inferring-scatac-seq-doublets-with-archr.html b/bookdown/_book/inferring-scatac-seq-doublets-with-archr.html
deleted file mode 100644
index 767e3d2..0000000
--- a/bookdown/_book/inferring-scatac-seq-doublets-with-archr.html
+++ /dev/null
@@ -1,364 +0,0 @@
-
-
-
-
-
-
- 2.1 Inferring scATAC-seq Doublets with ArchR | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Inferring scATAC-seq Doublets with ArchR
-
Single-cell data generated on essentially any platform is susceptible to the presence of doublets. A doublet refers to a single droplet that received a single barcoded bead and more than one nucleus. This causes the reads from more than one cell to appear as a single cell. For 10x, the percentage of total “cells” that are actually doublets is proportional to the number of cells loaded into the reaction. Even at the lower levels of doublets that result from standard kit use, more than 5% of the data may come from doublets and this exerts substantial effects on clustering. This issue becomes particularly problematic in the context of developmental/trajectory data because doublets look like a mixture between two cell types and this can be confounded with intermediate cell types or cell states.
-
To predict which “cells” are actually doublets, we synthesize in silico doublets from the data by mixing the reads from thousands of combinations of individual cells. We then project these synthetic doublets into the UMAP embedding and identify their nearest neighbor. By iterating this procedure thousands of times, we can identify “cells” in our data whose signal looks very similar to synthetic doublets.
-
-
By default ArchR uses the doublet parameters described in the ArchR manuscript. This is likely a good place to start but we encourage all users to inspect the pre- and post-doublet removal data to understand how doublet removal is affecting the cells. We show some of the main adjustable features below to illustrate how this can be customized to a given application.
-
In ArchR, doublet removal is performed in a single step using addDoubletScores()
.
-
#Add Infered Doublet Scores to each Arrow File (~2-5 min per sample)
-#Try ?addDoubletScores to see further documentation on parameters for doublet identification.
- doubScores <- addDoubletScores (
- input = ArrowFiles,
- k = 10 , #Refers to how many cells near a "pseudo-doublet" to count.
- knnMethod = "UMAP" , #Refers to embedding to use for nearest neighbor search with doublet projection.
- LSIMethod = 1
- )
-
This command will create plots in the “QualityControl” directory. There are 3 plots associated with each of your samples in this folder:
-1. Doublet Enrichments - These represent the enrichment of simulated doublets nearby each single cell compared to the expected if we assume a uniform distribution.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-
-2. Doublet Scores - These represent the significance (-log10(binomial adjusted p-value)
) of simulated doublets nearby each single cell compared to the expected if we assume a uniform distribution. We have found this value to be less consistent than the doublet enrichments and therefore use doublet enrichments for doublet identification.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
-3. Doublet Density - This represents the density of the simulated doublet projections so you can visualize where the synthetic doublets were located after projection into your 2-dimensional embedding.
-
For BMMC :
-
-
-
For CD34 BMMC :
-
-
-
For PBMC :
-
-
QQQ - I would have liked to see a pre- and post- doublet removal UMAP here so that we can illustrate what happens.
-
To download the PDFs for each sample
-
Download PDF : scATAC_BMMC_R1-Doublet-Summary.pdf
-Download PDF : scATAC_CD34_BMMC_R1-Doublet-Summary.pdf
-Download PDF : scATAC_PBMC_R1-Doublet-Summary.pdf
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/iterative-latent-semantic-indexing-lsi.html b/bookdown/_book/iterative-latent-semantic-indexing-lsi.html
deleted file mode 100644
index ccff989..0000000
--- a/bookdown/_book/iterative-latent-semantic-indexing-lsi.html
+++ /dev/null
@@ -1,365 +0,0 @@
-
-
-
-
-
-
- 4.1 Iterative Latent Semantic Indexing (LSI) | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Iterative Latent Semantic Indexing (LSI)
-
Latent semantic indexing (LSI) was first introduced for scATAC-seq by Cusanovich et al (Science 2015) as a form for analyzing scATAC-seq data. LSI commonly refers to computing the term frequency (TF) and then normalization by the inverse document frequency (IDF) to get a normalized matrix (TF-IDF) and then Singular Value Decomposition (SVD). The term frequency is simply dividing depth normalization per single cell. The inverse document frequency refers to weighting each feature by how often it occurs to weight features that are more “specific” rather than commonly accessible. There are many different TF-IDF transformations with their own merits. ArchR has a few LSI implementations and we have tested out many of these methods across many different test data sets. The default LSI implementation is related to the one introduced by Timothy Stuart, which depth normalizes to a constant (10,000) followed by normalization with the inverse document frequency and then log-transforming the resultant matrix (log(TF-IDF)).
-
In scRNA-seq identifying variable genes is a common way to compute dimensionality reduction (such as PCA). This is done becasue these genes are more likely to be biologically important and this reduces experimental noise. In scATAC-seq the data is binary and thus you cant identify variable peaks for dimensionality reduction. We have tried using the most accessible features instead, however the results when running multiple samples have had strong noise. To remedy this we introduced the iterative LSI approach (Satpathy+, Granja+ et al NBT 2019 and Granja+, Klemm+ and McGinnis+ et al NBT 2019). This approach computes an intial LSI transformation on the most accessible tiles and identifies lower resolution clusters that are not batch confounded (ie. in PBMCs just classifying T cells, B cells and Monocytes). Then ArchR computes the average accessibility for each of these clusters across all features creating “pseudobulks”. Then ArchR identifies the variable peaks across these “pseudobulks” and then use these features for LSI again as these peaks are more similar to scRNA-seq’s variable peaks. We have found this approach is very good for batch minimization and allows operations on a more reasonable sized matrix than a much larger sparse matrix.
-
To do this we run addIterativeLSI
with the default parameters which should cover most cases. See ?addIterativeLSI for more details on inputs.
-
projHeme2 <- addIterativeLSI (
- ArchRProj = projHeme2,
- useMatrix = "TileMatrix" ,
- name = "IterativeLSI" ,
- iterations = 2 ,
- clusterParams = list (
- resolution = c (0.2 ),
- sampleCells = 10000 ,
- n.start = 10
- ),
- varFeatures = 25000 ,
- dimsToUse = 1 : 30
- )
-
If you see downstream that you have subtle batch effects still another option is to add more LSI iterations and start from a lower intial clustering resolution as shown below. Additionally the number of variable features can be lowered to increase focus on the more variable features.
-
projHeme2 <- addIterativeLSI (
- ArchRProj = projHeme2,
- useMatrix = "TileMatrix" ,
- name = "IterativeLSI2" ,
- iterations = 4 ,
- clusterParams = list (
- resolution = c (0.1 , 0.2 , 0.4 ),
- sampleCells = 10000 ,
- n.start = 10
- ),
- varFeatures = 15000 ,
- dimsToUse = 1 : 30
- )
-
Additionally ArchR allows for a normal LSI transformation with addLSI
, however we recommend the iterative procedure.
-
projHeme2 <- addLSI (
- ArchRProj = projHeme2,
- useMatrix = "TileMatrix" ,
- name = "LSI" ,
- topFeatures = 25000 ,
- dimsToUse = 1 : 30
- )
-
Lastly, lets compute the iterativeLSI for the ArchRProject still containing doublets.
-
projHeme1 <- addIterativeLSI (
- ArchRProj = projHeme1,
- useMatrix = "TileMatrix" ,
- name = "IterativeLSI" ,
- iterations = 2 ,
- clusterParams = list (
- resolution = c (0.2 ),
- sampleCells = 10000 ,
- n.start = 10
- ),
- varFeatures = 25000 ,
- dimsToUse = 1 : 30
- )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/labeling-clusters-with-scrna.html b/bookdown/_book/labeling-clusters-with-scrna.html
deleted file mode 100644
index 99925e6..0000000
--- a/bookdown/_book/labeling-clusters-with-scrna.html
+++ /dev/null
@@ -1,313 +0,0 @@
-
-
-
-
-
-
- Chapter 8 Labeling Clusters with scRNA | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Labeling Clusters with scRNA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/labeling-scatac-cells-with-scrna-clusters.html b/bookdown/_book/labeling-scatac-cells-with-scrna-clusters.html
deleted file mode 100644
index 0df1445..0000000
--- a/bookdown/_book/labeling-scatac-cells-with-scrna-clusters.html
+++ /dev/null
@@ -1,417 +0,0 @@
-
-
-
-
-
-
- 8.1 Labeling scATAC cells with scRNA clusters | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Labeling scATAC cells with scRNA clusters
-
First we need to download scRNA data for hematopoiesis from Granja* et al (2019).
-
#259 MB Download
-if (! file.exists ("scRNA-Healthy-Hematopoiesis-191120.rds" )){
- download.file (
- url = "https://jeffgranja.s3.amazonaws.com/MPAL-10x/Supplementary_Data/Healthy-Data/scRNA-Healthy-Hematopoiesis-191120.rds" ,
- destfile = "scRNA-Healthy-Hematopoiesis-191120.rds"
- )
- }
-
- seRNA <- readRDS ("scRNA-Healthy-Hematopoiesis-191120.rds" )
- seRNA
-# class: RangedSummarizedExperiment
-# dim: 20287 35582
-# metadata(6): variableGenes optimizeLSI ... UMAP_Params colorMap
-# assays(1): counts
-# rownames(20287): FAM138A OR4F5 ... S100B PRMT2
-# rowData names(3): gene_name gene_id exonLength
-# colnames(35582): CD34_32_R5:AAACCTGAGTATCGAA-1
-# CD34_32_R5:AAACCTGAGTCGTTTG-1 ...
-# BMMC_10x_GREENLEAF_REP2:TTTGTTGCATGTGTCA-1
-# BMMC_10x_GREENLEAF_REP2:TTTGTTGCATTGAAAG-1
-# colData names(10): Group nUMI_pre ... BioClassification Barcode
-
-colnames (colData (seRNA))
-# [1] "Group" "nUMI_pre" "nUMI"
-# [4] "nGene" "initialClusters" "UMAP1"
-# [7] "UMAP2" "Clusters" "BioClassification"
-# [10] "Barcode"
-
-table (colData (seRNA)$ BioClassification)
-# 01_HSC 02_Early.Eryth 03_Late.Eryth 04_Early.Baso 05_CMP.LMPP
-# 1425 1653 446 111 2260
-# 06_CLP.1 07_GMP 08_GMP.Neut 09_pDC 10_cDC
-# 903 2097 1050 544 325
-# 11_CD14.Mono.1 12_CD14.Mono.2 13_CD16.Mono 14_Unk 15_CLP.2
-# 1800 4222 292 520 377
-# 16_Pre.B 17_B 18_Plasma 19_CD8.N 20_CD4.N1
-# 710 1711 62 1521 2470
-# 21_CD4.N2 22_CD4.M 23_CD8.EM 24_CD8.CM 25_NK
-# 2364 3539 796 2080 2143
-# 26_Unk
-# 161
-
Unconstrained Integration (not-recommended)
-
#~5 minutes
- projHeme2 <- addGeneIntegrationMatrix (
- ArchRProj = projHeme2,
- seRNA = seRNA,
- addToArrow = FALSE ,
- groupBy = "BioClassification" ,
- nameGroup = "predictedGroup1" ,
- nameScore = "predictedScore1"
- )
-
Constrained Integration (recommended)
-
sampleList <- SimpleList (
- scATAC_BMMC_R1 = grep ("BMMC" , colnames (seRNA), ignore.case = TRUE , value = TRUE ),
- scATAC_CD34_BMMC_R1 = grep ("CD34" , colnames (seRNA), ignore.case = TRUE , value = TRUE ),
- scATAC_PBMC_R1 = grep ("PBMC" , colnames (seRNA), ignore.case = TRUE , value = TRUE )
- )
-
-#To see size of each list element
-lapply (sampleList, length)
-# $scATAC_BMMC_R1
-# [1] 12602
-
-# $scATAC_CD34_BMMC_R1
-# [1] 8176
-
-# $scATAC_PBMC_R1
-# [1] 14804
-
-#~5 minutes
- projHeme2 <- addGeneIntegrationMatrix (
- ArchRProj = projHeme2,
- seRNA = seRNA,
- sampleList = sampleList,
- addToArrow = FALSE ,
- groupBy = "BioClassification" ,
- nameGroup = "predictedGroup2" ,
- nameScore = "predictedScore2"
- )
-
Compare results
-
pal <- paletteDiscrete (values = colData (seRNA)$ BioClassification)
- pal
-# 01_HSC 02_Early.Eryth 03_Late.Eryth 04_Early.Baso 05_CMP.LMPP
-# "#D51F26" "#502A59" "#235D55" "#3D6E57" "#8D2B8B"
-# 06_CLP.1 07_GMP 08_GMP.Neut 09_pDC 10_cDC
-# "#DE6C3E" "#F9B712" "#D8CE42" "#8E9ACD" "#B774B1"
-# 11_CD14.Mono.1 12_CD14.Mono.2 13_CD16.Mono 14_Unk 15_CLP.2
-# "#D69FC8" "#C7C8DE" "#8FD3D4" "#89C86E" "#CC9672"
-# 16_Pre.B 17_B 18_Plasma 19_CD8.N 20_CD4.N1
-# "#CF7E96" "#A27AA4" "#CD4F32" "#6B977E" "#518AA3"
-# 21_CD4.N2 22_CD4.M 23_CD8.EM 24_CD8.CM 25_NK
-# "#5A5297" "#0F707D" "#5E2E32" "#A95A3C" "#B28D5C"
-# 26_Unk
-# "#3D3D3D"
-
p1 <- plotEmbedding (projHeme2, colorBy = "cellColData" , name = "predictedGroup1" , pal = pal)
- p1
-
-
p2 <- plotEmbedding (projHeme2, colorBy = "cellColData" , name = "predictedGroup2" , pal = pal)
- p2
-
-
To save a nice looking pdf we use plotPDF which removes white pages and tries to make the plots
-nice looking.
-
plotPDF (p1,p2, name = "Plot-UMAP-RNA-Integration.pdf" , ArchRProj = projHeme2, addDOC = FALSE , width = 5 , height = 5 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/labeling-scatac-clusters-with-scrna.html b/bookdown/_book/labeling-scatac-clusters-with-scrna.html
deleted file mode 100644
index 295800e..0000000
--- a/bookdown/_book/labeling-scatac-clusters-with-scrna.html
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
-
-
-
- 8.3 Labeling scATAC clusters with scRNA | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Labeling scATAC clusters with scRNA
-
Now that we have pretty good scRNA and scATAC correspondence we can label our clusters with scRNA
-
To save a nice looking pdf we use plotPDF which removes white pages and tries to make the plots
-nice looking.
-
plotPDF (p1, name = "Plot-UMAP-Remap-Clusters.pdf" , ArchRProj = projHeme2, addDOC = FALSE , width = 5 , height = 5 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/launching-the-archrbrowser.html b/bookdown/_book/launching-the-archrbrowser.html
deleted file mode 100644
index 3f85a6f..0000000
--- a/bookdown/_book/launching-the-archrbrowser.html
+++ /dev/null
@@ -1,324 +0,0 @@
-
-
-
-
-
-
- 7.5 Launching the ArchRBrowser | ArchR
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Launching the ArchRBrowser
-
-
-
-
-
-
-
-
We can now save our original projHeme1 using saveArchRProject
from ArchR.
-
saveArchRProject (projHeme2)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/fontawesome/fontawesome-webfont.ttf b/bookdown/_book/libs/gitbook-2.6.7/css/fontawesome/fontawesome-webfont.ttf
deleted file mode 100644
index 35acda2..0000000
Binary files a/bookdown/_book/libs/gitbook-2.6.7/css/fontawesome/fontawesome-webfont.ttf and /dev/null differ
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-bookdown.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-bookdown.css
deleted file mode 100644
index 8e5bb8a..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-bookdown.css
+++ /dev/null
@@ -1,99 +0,0 @@
-.book .book-header h1 {
- padding-left: 20px;
- padding-right: 20px;
-}
-.book .book-header.fixed {
- position: fixed;
- right: 0;
- top: 0;
- left: 0;
- border-bottom: 1px solid rgba(0,0,0,.07);
-}
-span.search-highlight {
- background-color: #ffff88;
-}
-@media (min-width: 600px) {
- .book.with-summary .book-header.fixed {
- left: 300px;
- }
-}
-@media (max-width: 1240px) {
- .book .book-body.fixed {
- top: 50px;
- }
- .book .book-body.fixed .body-inner {
- top: auto;
- }
-}
-@media (max-width: 600px) {
- .book.with-summary .book-header.fixed {
- left: calc(100% - 60px);
- min-width: 300px;
- }
- .book.with-summary .book-body {
- transform: none;
- left: calc(100% - 60px);
- min-width: 300px;
- }
- .book .book-body.fixed {
- top: 0;
- }
-}
-
-.book .book-body.fixed .body-inner {
- top: 50px;
-}
-.book .book-body .page-wrapper .page-inner section.normal sub, .book .book-body .page-wrapper .page-inner section.normal sup {
- font-size: 85%;
-}
-
-@media print {
- .book .book-summary, .book .book-body .book-header, .fa {
- display: none !important;
- }
- .book .book-body.fixed {
- left: 0px;
- }
- .book .book-body,.book .book-body .body-inner, .book.with-summary {
- overflow: visible !important;
- }
-}
-.kable_wrapper {
- border-spacing: 20px 0;
- border-collapse: separate;
- border: none;
- margin: auto;
-}
-.kable_wrapper > tbody > tr > td {
- vertical-align: top;
-}
-.book .book-body .page-wrapper .page-inner section.normal table tr.header {
- border-top-width: 2px;
-}
-.book .book-body .page-wrapper .page-inner section.normal table tr:last-child td {
- border-bottom-width: 2px;
-}
-.book .book-body .page-wrapper .page-inner section.normal table td, .book .book-body .page-wrapper .page-inner section.normal table th {
- border-left: none;
- border-right: none;
-}
-.book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr, .book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr > td {
- border-top: none;
-}
-.book .book-body .page-wrapper .page-inner section.normal table.kable_wrapper > tbody > tr:last-child > td {
- border-bottom: none;
-}
-
-div.theorem, div.lemma, div.corollary, div.proposition, div.conjecture {
- font-style: italic;
-}
-span.theorem, span.lemma, span.corollary, span.proposition, span.conjecture {
- font-style: normal;
-}
-div.proof:after {
- content: "\25a2";
- float: right;
-}
-.header-section-number {
- padding-right: .5em;
-}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-clipboard.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-clipboard.css
deleted file mode 100644
index 6844a70..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-clipboard.css
+++ /dev/null
@@ -1,18 +0,0 @@
-div.sourceCode {
- position: relative;
-}
-
-.copy-to-clipboard-button {
- position: absolute;
- right: 0;
- top: 0;
- visibility: hidden;
-}
-
-.copy-to-clipboard-button:focus {
- outline: 0;
-}
-
-div.sourceCode:hover > .copy-to-clipboard-button {
- visibility: visible;
-}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-fontsettings.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-fontsettings.css
deleted file mode 100644
index 87236b4..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-fontsettings.css
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Theme 1
- */
-.color-theme-1 .dropdown-menu {
- background-color: #111111;
- border-color: #7e888b;
-}
-.color-theme-1 .dropdown-menu .dropdown-caret .caret-inner {
- border-bottom: 9px solid #111111;
-}
-.color-theme-1 .dropdown-menu .buttons {
- border-color: #7e888b;
-}
-.color-theme-1 .dropdown-menu .button {
- color: #afa790;
-}
-.color-theme-1 .dropdown-menu .button:hover {
- color: #73553c;
-}
-/*
- * Theme 2
- */
-.color-theme-2 .dropdown-menu {
- background-color: #2d3143;
- border-color: #272a3a;
-}
-.color-theme-2 .dropdown-menu .dropdown-caret .caret-inner {
- border-bottom: 9px solid #2d3143;
-}
-.color-theme-2 .dropdown-menu .buttons {
- border-color: #272a3a;
-}
-.color-theme-2 .dropdown-menu .button {
- color: #62677f;
-}
-.color-theme-2 .dropdown-menu .button:hover {
- color: #f4f4f5;
-}
-.book .book-header .font-settings .font-enlarge {
- line-height: 30px;
- font-size: 1.4em;
-}
-.book .book-header .font-settings .font-reduce {
- line-height: 30px;
- font-size: 1em;
-}
-.book.color-theme-1 .book-body {
- color: #704214;
- background: #f3eacb;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section {
- background: #f3eacb;
-}
-.book.color-theme-2 .book-body {
- color: #bdcadb;
- background: #1c1f2b;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section {
- background: #1c1f2b;
-}
-.book.font-size-0 .book-body .page-inner section {
- font-size: 1.2rem;
-}
-.book.font-size-1 .book-body .page-inner section {
- font-size: 1.4rem;
-}
-.book.font-size-2 .book-body .page-inner section {
- font-size: 1.6rem;
-}
-.book.font-size-3 .book-body .page-inner section {
- font-size: 2.2rem;
-}
-.book.font-size-4 .book-body .page-inner section {
- font-size: 4rem;
-}
-.book.font-family-0 {
- font-family: Georgia, serif;
-}
-.book.font-family-1 {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal {
- color: #704214;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal a {
- color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h3,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h4,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h5,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {
- color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h1,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h2 {
- border-color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal h6 {
- color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal hr {
- background-color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal blockquote {
- border-color: #c4b29f;
- opacity: 0.9;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {
- background: #fdf6e3;
- color: #657b83;
- border-color: #f8df9c;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal .highlight {
- background-color: inherit;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table th,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table td {
- border-color: #f5d06c;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr {
- color: inherit;
- background-color: #fdf6e3;
- border-color: #444444;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {
- background-color: #fbeecb;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal {
- color: #bdcadb;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal a {
- color: #3eb1d0;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h3,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h4,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h5,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {
- color: #fffffa;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h1,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h2 {
- border-color: #373b4e;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal h6 {
- color: #373b4e;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal hr {
- background-color: #373b4e;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal blockquote {
- border-color: #373b4e;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {
- color: #9dbed8;
- background: #2d3143;
- border-color: #2d3143;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal .highlight {
- background-color: #282a39;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table th,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table td {
- border-color: #3b3f54;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr {
- color: #b6c2d2;
- background-color: #2d3143;
- border-color: #3b3f54;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {
- background-color: #35394b;
-}
-.book.color-theme-1 .book-header {
- color: #afa790;
- background: transparent;
-}
-.book.color-theme-1 .book-header .btn {
- color: #afa790;
-}
-.book.color-theme-1 .book-header .btn:hover {
- color: #73553c;
- background: none;
-}
-.book.color-theme-1 .book-header h1 {
- color: #704214;
-}
-.book.color-theme-2 .book-header {
- color: #7e888b;
- background: transparent;
-}
-.book.color-theme-2 .book-header .btn {
- color: #3b3f54;
-}
-.book.color-theme-2 .book-header .btn:hover {
- color: #fffff5;
- background: none;
-}
-.book.color-theme-2 .book-header h1 {
- color: #bdcadb;
-}
-.book.color-theme-1 .book-body .navigation {
- color: #afa790;
-}
-.book.color-theme-1 .book-body .navigation:hover {
- color: #73553c;
-}
-.book.color-theme-2 .book-body .navigation {
- color: #383f52;
-}
-.book.color-theme-2 .book-body .navigation:hover {
- color: #fffff5;
-}
-/*
- * Theme 1
- */
-.book.color-theme-1 .book-summary {
- color: #afa790;
- background: #111111;
- border-right: 1px solid rgba(0, 0, 0, 0.07);
-}
-.book.color-theme-1 .book-summary .book-search {
- background: transparent;
-}
-.book.color-theme-1 .book-summary .book-search input,
-.book.color-theme-1 .book-summary .book-search input:focus {
- border: 1px solid transparent;
-}
-.book.color-theme-1 .book-summary ul.summary li.divider {
- background: #7e888b;
- box-shadow: none;
-}
-.book.color-theme-1 .book-summary ul.summary li i.fa-check {
- color: #33cc33;
-}
-.book.color-theme-1 .book-summary ul.summary li.done > a {
- color: #877f6a;
-}
-.book.color-theme-1 .book-summary ul.summary li a,
-.book.color-theme-1 .book-summary ul.summary li span {
- color: #877f6a;
- background: transparent;
- font-weight: normal;
-}
-.book.color-theme-1 .book-summary ul.summary li.active > a,
-.book.color-theme-1 .book-summary ul.summary li a:hover {
- color: #704214;
- background: transparent;
- font-weight: normal;
-}
-/*
- * Theme 2
- */
-.book.color-theme-2 .book-summary {
- color: #bcc1d2;
- background: #2d3143;
- border-right: none;
-}
-.book.color-theme-2 .book-summary .book-search {
- background: transparent;
-}
-.book.color-theme-2 .book-summary .book-search input,
-.book.color-theme-2 .book-summary .book-search input:focus {
- border: 1px solid transparent;
-}
-.book.color-theme-2 .book-summary ul.summary li.divider {
- background: #272a3a;
- box-shadow: none;
-}
-.book.color-theme-2 .book-summary ul.summary li i.fa-check {
- color: #33cc33;
-}
-.book.color-theme-2 .book-summary ul.summary li.done > a {
- color: #62687f;
-}
-.book.color-theme-2 .book-summary ul.summary li a,
-.book.color-theme-2 .book-summary ul.summary li span {
- color: #c1c6d7;
- background: transparent;
- font-weight: 600;
-}
-.book.color-theme-2 .book-summary ul.summary li.active > a,
-.book.color-theme-2 .book-summary ul.summary li a:hover {
- color: #f4f4f5;
- background: #252737;
- font-weight: 600;
-}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-highlight.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-highlight.css
deleted file mode 100644
index 2aabd3d..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-highlight.css
+++ /dev/null
@@ -1,426 +0,0 @@
-.book .book-body .page-wrapper .page-inner section.normal pre,
-.book .book-body .page-wrapper .page-inner section.normal code {
- /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
- /* Tomorrow Comment */
- /* Tomorrow Red */
- /* Tomorrow Orange */
- /* Tomorrow Yellow */
- /* Tomorrow Green */
- /* Tomorrow Aqua */
- /* Tomorrow Blue */
- /* Tomorrow Purple */
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-title {
- color: #8e908c;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-tag,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
-.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,
-.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,
-.book .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,
-.book .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,
-.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,
-.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,
-.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,
-.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,
-.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
-.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {
- color: #c82829;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-number,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-literal,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-params,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-params,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-constant {
- color: #f5871f;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,
-.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {
- color: #eab700;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-string,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-value,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-value,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-header,
-.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,
-.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
- color: #718c00;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,
-.book .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {
- color: #3e999f;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-function,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-function,
-.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,
-.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,
-.book .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,
-.book .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,
-.book .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,
-.book .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,
-.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,
-.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {
- color: #4271ae;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
-.book .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,
-.book .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {
- color: #8959a8;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .hljs,
-.book .book-body .page-wrapper .page-inner section.normal code .hljs {
- display: block;
- background: white;
- color: #4d4d4c;
- padding: 0.5em;
-}
-.book .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,
-.book .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,
-.book .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,
-.book .book-body .page-wrapper .page-inner section.normal code .javascript .xml,
-.book .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
-.book .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .javascript,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .css,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .css,
-.book .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
-.book .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
- opacity: 0.5;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code {
- /*
-
-Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
-
-*/
- /* Solarized Green */
- /* Solarized Cyan */
- /* Solarized Blue */
- /* Solarized Yellow */
- /* Solarized Orange */
- /* Solarized Red */
- /* Solarized Violet */
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs {
- display: block;
- padding: 0.5em;
- background: #fdf6e3;
- color: #657b83;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-template_comment,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-template_comment,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-header,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-header,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-doctype,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-doctype,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pi,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pi,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-javadoc,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-javadoc {
- color: #93a1a1;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-winutils,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-winutils,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .method,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .method,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-addition,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-addition,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-tag,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-tag,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-request,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-request,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-status,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-status,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .nginx .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .nginx .hljs-title {
- color: #859900;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-number,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-command,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-command,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag .hljs-value,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-tag .hljs-value,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-rules .hljs-value,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-rules .hljs-value,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-phpdoc,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-phpdoc,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-hexcolor,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-hexcolor,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_url,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_url {
- color: #2aa198;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-localvars,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-localvars,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-chunk,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-chunk,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-decorator,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-decorator,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-identifier,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-identifier,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .vhdl .hljs-literal,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .vhdl .hljs-literal,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-id,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-id,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-function,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-function {
- color: #268bd2;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .lisp .hljs-body,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .lisp .hljs-body,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .smalltalk .hljs-number,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .smalltalk .hljs-number,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-constant,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-class .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-class .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-parent,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-parent,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .haskell .hljs-type,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .haskell .hljs-type,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_reference,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_reference {
- color: #b58900;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor .hljs-keyword,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor .hljs-keyword,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-shebang,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-shebang,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-symbol .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-symbol .hljs-string,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .diff .hljs-change,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .diff .hljs-change,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-special,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-special,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-attr_selector,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-attr_selector,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-subst,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-subst,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-cdata,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-cdata,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .clojure .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .clojure .hljs-title,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-header {
- color: #cb4b16;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-deletion,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-deletion,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-important,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-important {
- color: #dc322f;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .hljs-link_label,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .hljs-link_label {
- color: #6c71c4;
-}
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
-.book.color-theme-1 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula {
- background: #eee8d5;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code {
- /* Tomorrow Night Bright Theme */
- /* Original theme - https://github.com/chriskempson/tomorrow-theme */
- /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
- /* Tomorrow Comment */
- /* Tomorrow Red */
- /* Tomorrow Orange */
- /* Tomorrow Yellow */
- /* Tomorrow Green */
- /* Tomorrow Aqua */
- /* Tomorrow Blue */
- /* Tomorrow Purple */
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-comment,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-comment,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-title {
- color: #969896;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-variable,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-variable,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-attribute,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-attribute,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-tag,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-tag,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-regexp,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-regexp,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-constant,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-constant,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-tag .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-tag .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-pi,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-pi,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-doctype,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-doctype,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .html .hljs-doctype,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .html .hljs-doctype,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-id,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-id,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-class,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-class,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-pseudo,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-pseudo {
- color: #d54e53;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-number,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-number,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-preprocessor,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-preprocessor,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-pragma,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-pragma,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-built_in,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-built_in,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-literal,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-literal,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-params,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-params,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-constant,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-constant {
- color: #e78c45;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-class .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-class .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-rules .hljs-attribute,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-rules .hljs-attribute {
- color: #e7c547;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-string,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-string,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-value,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-value,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-inheritance,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-inheritance,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-header,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-header,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-symbol,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-symbol,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
- color: #b9ca4a;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .css .hljs-hexcolor,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .css .hljs-hexcolor {
- color: #70c0b1;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-function,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-function,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-decorator,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-decorator,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .python .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .python .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-function .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-function .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .ruby .hljs-title .hljs-keyword,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .ruby .hljs-title .hljs-keyword,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .perl .hljs-sub,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .perl .hljs-sub,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .hljs-title,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .hljs-title {
- color: #7aa6da;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs-keyword,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs-keyword,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .hljs-function,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .hljs-function {
- color: #c397d8;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .hljs,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .hljs {
- display: block;
- background: black;
- color: #eaeaea;
- padding: 0.5em;
-}
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .coffeescript .javascript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .coffeescript .javascript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .javascript .xml,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .javascript .xml,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .tex .hljs-formula,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .tex .hljs-formula,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .javascript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .javascript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .vbscript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .vbscript,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .css,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .css,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal pre .xml .hljs-cdata,
-.book.color-theme-2 .book-body .page-wrapper .page-inner section.normal code .xml .hljs-cdata {
- opacity: 0.5;
-}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-search.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-search.css
deleted file mode 100644
index c85e557..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-search.css
+++ /dev/null
@@ -1,31 +0,0 @@
-.book .book-summary .book-search {
- padding: 6px;
- background: transparent;
- position: absolute;
- top: -50px;
- left: 0px;
- right: 0px;
- transition: top 0.5s ease;
-}
-.book .book-summary .book-search input,
-.book .book-summary .book-search input:focus,
-.book .book-summary .book-search input:hover {
- width: 100%;
- background: transparent;
- border: 1px solid #ccc;
- box-shadow: none;
- outline: none;
- line-height: 22px;
- padding: 7px 4px;
- color: inherit;
- box-sizing: border-box;
-}
-.book.with-search .book-summary .book-search {
- top: 0px;
-}
-.book.with-search .book-summary ul.summary {
- top: 50px;
-}
-.with-search .summary li[data-level] a[href*=".html#"] {
- display: none;
-}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-table.css b/bookdown/_book/libs/gitbook-2.6.7/css/plugin-table.css
deleted file mode 100644
index 7fba1b9..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/plugin-table.css
+++ /dev/null
@@ -1 +0,0 @@
-.book .book-body .page-wrapper .page-inner section.normal table{display:table;width:100%;border-collapse:collapse;border-spacing:0;overflow:auto}.book .book-body .page-wrapper .page-inner section.normal table td,.book .book-body .page-wrapper .page-inner section.normal table th{padding:6px 13px;border:1px solid #ddd}.book .book-body .page-wrapper .page-inner section.normal table tr{background-color:#fff;border-top:1px solid #ccc}.book .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n){background-color:#f8f8f8}.book .book-body .page-wrapper .page-inner section.normal table th{font-weight:700}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/css/style.css b/bookdown/_book/libs/gitbook-2.6.7/css/style.css
deleted file mode 100644
index b896892..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/css/style.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/*! normalize.css v2.1.0 | MIT License | git.io/normalize */img,legend{border:0}*,.fa{-webkit-font-smoothing:antialiased}.fa-ul>li,sub,sup{position:relative}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book-langs-index .inner .languages:after,.buttons:after,.dropdown-menu .buttons:after{clear:both}body,html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}.hidden,[hidden]{display:none}audio:not([controls]){display:none;height:0}html{font-family:sans-serif}body,figure{margin:0}a:focus{outline:dotted thin}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button{margin-right:10px;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}/*!
- * Preboot v2
- *
- * Open sourced under MIT license by @mdo.
- * Some variables and mixins from Bootstrap (Apache 2 license).
- */.link-inherit,.link-inherit:focus,.link-inherit:hover{color:inherit}.fa,.fa-stack{display:inline-block}/*!
- * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:FontAwesome;src:url(./fontawesome/fontawesome-webfont.ttf?v=4.1.0) format('truetype');font-weight:400;font-style:normal}.fa{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-moz-osx-font-smoothing:grayscale}.book .book-header,.book .book-summary{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.book-langs-index{width:100%;height:100%;padding:40px 0;margin:0;overflow:auto}@media (max-width:600px){.book-langs-index{padding:0}}.book-langs-index .inner{max-width:600px;width:100%;margin:0 auto;padding:30px;background:#fff;border-radius:3px}.book-langs-index .inner h3{margin:0}.book-langs-index .inner .languages{list-style:none;padding:20px 30px;margin-top:20px;border-top:1px solid #eee}.book-langs-index .inner .languages:after,.book-langs-index .inner .languages:before{content:" ";display:table;line-height:0}.book-langs-index .inner .languages li{width:50%;float:left;padding:10px 5px;font-size:16px}@media (max-width:600px){.book-langs-index .inner .languages li{width:100%;max-width:100%}}.book .book-header{overflow:visible;height:50px;padding:0 8px;z-index:2;font-size:.85em;color:#7e888b;background:0 0}.book .book-header .btn{display:block;height:50px;padding:0 15px;border-bottom:none;color:#ccc;text-transform:uppercase;line-height:50px;-webkit-box-shadow:none!important;box-shadow:none!important;position:relative;font-size:14px}.book .book-header .btn:hover{position:relative;text-decoration:none;color:#444;background:0 0}.book .book-header h1{margin:0;font-size:20px;font-weight:200;text-align:center;line-height:50px;opacity:0;padding-left:200px;padding-right:200px;-webkit-transition:opacity .2s ease;-moz-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.book .book-header h1 a,.book .book-header h1 a:hover{color:inherit;text-decoration:none}@media (max-width:1000px){.book .book-header h1{display:none}}.book .book-header h1 i{display:none}.book .book-header:hover h1{opacity:1}.book.is-loading .book-header h1 i{display:inline-block}.book.is-loading .book-header h1 a{display:none}.dropdown{position:relative}.dropdown-menu{position:absolute;top:100%;left:0;z-index:100;display:none;float:left;min-width:160px;padding:0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fafafa;border:1px solid rgba(0,0,0,.07);border-radius:1px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.open{display:block}.dropdown-menu.dropdown-left{left:auto;right:4%}.dropdown-menu.dropdown-left .dropdown-caret{right:14px;left:auto}.dropdown-menu .dropdown-caret{position:absolute;top:-8px;left:14px;width:18px;height:10px;float:left;overflow:hidden}.dropdown-menu .dropdown-caret .caret-inner,.dropdown-menu .dropdown-caret .caret-outer{display:inline-block;top:0;border-left:9px solid transparent;border-right:9px solid transparent;position:absolute}.dropdown-menu .dropdown-caret .caret-outer{border-bottom:9px solid rgba(0,0,0,.1);height:auto;left:0;width:auto;margin-left:-1px}.dropdown-menu .dropdown-caret .caret-inner{margin-top:-1px;top:1px;border-bottom:9px solid #fafafa}.dropdown-menu .buttons{border-bottom:1px solid rgba(0,0,0,.07)}.dropdown-menu .buttons:after,.dropdown-menu .buttons:before{content:" ";display:table;line-height:0}.dropdown-menu .buttons:last-child{border-bottom:none}.dropdown-menu .buttons .button{border:0;background-color:transparent;color:#a6a6a6;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.alert,.dropdown-menu .buttons .button:hover{color:#444}.dropdown-menu .buttons .button:focus,.dropdown-menu .buttons .button:hover{outline:0}.dropdown-menu .buttons .button.size-2{width:50%}.dropdown-menu .buttons .button.size-3{width:33%}.alert{padding:15px;margin-bottom:20px;background:#eee;border-bottom:5px solid #ddd}.alert-success{background:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-info{background:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-danger{background:#f2dede;border-color:#ebccd1;color:#a94442}.alert-warning{background:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.book .book-summary{position:absolute;top:0;left:-300px;bottom:0;z-index:1;width:300px;color:#364149;background:#fafafa;border-right:1px solid rgba(0,0,0,.07);-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-summary ul.summary{position:absolute;top:0;left:0;right:0;bottom:0;overflow-y:auto;list-style:none;margin:0;padding:0;-webkit-transition:top .5s ease;-moz-transition:top .5s ease;-o-transition:top .5s ease;transition:top .5s ease}.book .book-summary ul.summary li{list-style:none}.book .book-summary ul.summary li.divider{height:1px;margin:7px 0;overflow:hidden;background:rgba(0,0,0,.07)}.book .book-summary ul.summary li i.fa-check{display:none;position:absolute;right:9px;top:16px;font-size:9px;color:#3c3}.book .book-summary ul.summary li.done>a{color:#364149;font-weight:400}.book .book-summary ul.summary li.done>a i{display:inline}.book .book-summary ul.summary li a,.book .book-summary ul.summary li span{display:block;padding:10px 15px;border-bottom:none;color:#364149;background:0 0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;position:relative}.book .book-summary ul.summary li span{cursor:not-allowed;opacity:.3;filter:alpha(opacity=30)}.book .book-summary ul.summary li a:hover,.book .book-summary ul.summary li.active>a{color:#008cff;background:0 0;text-decoration:none}.book .book-summary ul.summary li ul{padding-left:20px}@media (max-width:600px){.book .book-summary{width:calc(100% - 60px);bottom:0;left:-100%}}.book.with-summary .book-summary{left:0}.book.without-animation .book-summary{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.book{position:relative;width:100%;height:100%}.book .book-body,.book .book-body .body-inner{position:absolute;top:0;left:0;overflow-y:auto;bottom:0;right:0}.book .book-body{color:#000;background:#fff;-webkit-transition:left 250ms ease;-moz-transition:left 250ms ease;-o-transition:left 250ms ease;transition:left 250ms ease}.book .book-body .page-wrapper{position:relative;outline:0}.book .book-body .page-wrapper .page-inner{max-width:800px;margin:0 auto;padding:20px 0 40px}.book .book-body .page-wrapper .page-inner section{margin:0;padding:5px 15px;background:#fff;border-radius:2px;line-height:1.7;font-size:1.6rem}.book .book-body .page-wrapper .page-inner .btn-group .btn{border-radius:0;background:#eee;border:0}@media (max-width:1240px){.book .book-body{-webkit-transition:-webkit-transform 250ms ease;-moz-transition:-moz-transform 250ms ease;-o-transition:-o-transform 250ms ease;transition:transform 250ms ease;padding-bottom:20px}.book .book-body .body-inner{position:static;min-height:calc(100% - 50px)}}@media (min-width:600px){.book.with-summary .book-body{left:300px}}@media (max-width:600px){.book.with-summary{overflow:hidden}.book.with-summary .book-body{-webkit-transform:translate(calc(100% - 60px),0);-moz-transform:translate(calc(100% - 60px),0);-ms-transform:translate(calc(100% - 60px),0);-o-transform:translate(calc(100% - 60px),0);transform:translate(calc(100% - 60px),0)}}.book.without-animation .book-body{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;transition:none!important}.buttons:after,.buttons:before{content:" ";display:table;line-height:0}.button{border:0;background:#eee;color:#666;width:100%;text-align:center;float:left;line-height:1.42857143;padding:8px 4px}.button:hover{color:#444}.button:focus,.button:hover{outline:0}.button.size-2{width:50%}.button.size-3{width:33%}.book .book-body .page-wrapper .page-inner section{display:none}.book .book-body .page-wrapper .page-inner section.normal{display:block;word-wrap:break-word;overflow:hidden;color:#333;line-height:1.7;text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%}.book .book-body .page-wrapper .page-inner section.normal *{box-sizing:border-box;-webkit-box-sizing:border-box;}.book .book-body .page-wrapper .page-inner section.normal>:first-child{margin-top:0!important}.book .book-body .page-wrapper .page-inner section.normal>:last-child{margin-bottom:0!important}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal figure,.book .book-body .page-wrapper .page-inner section.normal img,.book .book-body .page-wrapper .page-inner section.normal pre,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal tr{page-break-inside:avoid}.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal p{orphans:3;widows:3}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5{page-break-after:avoid}.book .book-body .page-wrapper .page-inner section.normal b,.book .book-body .page-wrapper .page-inner section.normal strong{font-weight:700}.book .book-body .page-wrapper .page-inner section.normal em{font-style:italic}.book .book-body .page-wrapper .page-inner section.normal blockquote,.book .book-body .page-wrapper .page-inner section.normal dl,.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal p,.book .book-body .page-wrapper .page-inner section.normal table,.book .book-body .page-wrapper .page-inner section.normal ul{margin-top:0;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal a{color:#4183c4;text-decoration:none;background:0 0}.book .book-body .page-wrapper .page-inner section.normal a:active,.book .book-body .page-wrapper .page-inner section.normal a:focus,.book .book-body .page-wrapper .page-inner section.normal a:hover{outline:0;text-decoration:underline}.book .book-body .page-wrapper .page-inner section.normal img{border:0;max-width:100%}.book .book-body .page-wrapper .page-inner section.normal hr{height:4px;padding:0;margin:1.7em 0;overflow:hidden;background-color:#e7e7e7;border:none}.book .book-body .page-wrapper .page-inner section.normal hr:after,.book .book-body .page-wrapper .page-inner section.normal hr:before{display:table;content:" "}.book .book-body .page-wrapper .page-inner section.normal h1,.book .book-body .page-wrapper .page-inner section.normal h2,.book .book-body .page-wrapper .page-inner section.normal h3,.book .book-body .page-wrapper .page-inner section.normal h4,.book .book-body .page-wrapper .page-inner section.normal h5,.book .book-body .page-wrapper .page-inner section.normal h6{margin-top:1.275em;margin-bottom:.85em;}.book .book-body .page-wrapper .page-inner section.normal h1{font-size:2em}.book .book-body .page-wrapper .page-inner section.normal h2{font-size:1.75em}.book .book-body .page-wrapper .page-inner section.normal h3{font-size:1.5em}.book .book-body .page-wrapper .page-inner section.normal h4{font-size:1.25em}.book .book-body .page-wrapper .page-inner section.normal h5{font-size:1em}.book .book-body .page-wrapper .page-inner section.normal h6{font-size:1em;color:#777}.book .book-body .page-wrapper .page-inner section.normal code,.book .book-body .page-wrapper .page-inner section.normal pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;direction:ltr;border:none;color:inherit}.book .book-body .page-wrapper .page-inner section.normal pre{overflow:auto;word-wrap:normal;margin:0 0 1.275em;padding:.85em 1em;background:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal pre>code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;font-size:.85em;white-space:pre;background:0 0}.book .book-body .page-wrapper .page-inner section.normal pre>code:after,.book .book-body .page-wrapper .page-inner section.normal pre>code:before{content:normal}.book .book-body .page-wrapper .page-inner section.normal code{padding:.2em;margin:0;font-size:.85em;background-color:#f7f7f7}.book .book-body .page-wrapper .page-inner section.normal code:after,.book .book-body .page-wrapper .page-inner section.normal code:before{letter-spacing:-.2em;content:"\00a0"}.book .book-body .page-wrapper .page-inner section.normal ol,.book .book-body .page-wrapper .page-inner section.normal ul{padding:0 0 0 2em;margin:0 0 .85em}.book .book-body .page-wrapper .page-inner section.normal ol ol,.book .book-body .page-wrapper .page-inner section.normal ol ul,.book .book-body .page-wrapper .page-inner section.normal ul ol,.book .book-body .page-wrapper .page-inner section.normal ul ul{margin-top:0;margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal ol ol{list-style-type:lower-roman}.book .book-body .page-wrapper .page-inner section.normal blockquote{margin:0 0 .85em;padding:0 15px;opacity:0.75;border-left:4px solid #dcdcdc}.book .book-body .page-wrapper .page-inner section.normal blockquote:first-child{margin-top:0}.book .book-body .page-wrapper .page-inner section.normal blockquote:last-child{margin-bottom:0}.book .book-body .page-wrapper .page-inner section.normal dl{padding:0}.book .book-body .page-wrapper .page-inner section.normal dl dt{padding:0;margin-top:.85em;font-style:italic;font-weight:700}.book .book-body .page-wrapper .page-inner section.normal dl dd{padding:0 .85em;margin-bottom:.85em}.book .book-body .page-wrapper .page-inner section.normal dd{margin-left:0}.book .book-body .page-wrapper .page-inner section.normal .glossary-term{cursor:help;text-decoration:underline}.book .book-body .navigation{position:absolute;top:50px;bottom:0;margin:0;max-width:150px;min-width:90px;display:flex;justify-content:center;align-content:center;flex-direction:column;font-size:40px;color:#ccc;text-align:center;-webkit-transition:all 350ms ease;-moz-transition:all 350ms ease;-o-transition:all 350ms ease;transition:all 350ms ease}.book .book-body .navigation:hover{text-decoration:none;color:#444}.book .book-body .navigation.navigation-next{right:0}.book .book-body .navigation.navigation-prev{left:0}@media (max-width:1240px){.book .book-body .navigation{position:static;top:auto;max-width:50%;width:50%;display:inline-block;float:left}.book .book-body .navigation.navigation-unique{max-width:100%;width:100%}}.book .book-body .page-wrapper .page-inner section.glossary{margin-bottom:40px}.book .book-body .page-wrapper .page-inner section.glossary h2 a,.book .book-body .page-wrapper .page-inner section.glossary h2 a:hover{color:inherit;text-decoration:none}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index{list-style:none;margin:0;padding:0}.book .book-body .page-wrapper .page-inner section.glossary .glossary-index li{display:inline;margin:0 8px;white-space:nowrap}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:none;-webkit-touch-callout:none}a{text-decoration:none}body,html{height:100%}html{font-size:62.5%}body{text-rendering:optimizeLegibility;font-smoothing:antialiased;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;letter-spacing:.2px;text-size-adjust:100%}
-.book .book-summary ul.summary li a span {display:inline;padding:initial;overflow:visible;cursor:auto;opacity:1;}
diff --git a/bookdown/_book/libs/gitbook-2.6.7/js/app.min.js b/bookdown/_book/libs/gitbook-2.6.7/js/app.min.js
deleted file mode 100644
index d302000..0000000
--- a/bookdown/_book/libs/gitbook-2.6.7/js/app.min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o"'`]/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);var reEscape=/<%-([\s\S]+?)%>/g,reEvaluate=/<%([\s\S]+?)%>/g,reInterpolate=/<%=([\s\S]+?)%>/g;var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;var reRegExpChars=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,reHasRegExpChars=RegExp(reRegExpChars.source);var reComboMark=/[\u0300-\u036f\ufe20-\ufe23]/g;var reEscapeChar=/\\(\\)?/g;var reEsTemplate=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;var reFlags=/\w*$/;var reHasHexPrefix=/^0[xX]/;var reIsHostCtor=/^\[object .+?Constructor\]$/;var reIsUint=/^\d+$/;var reLatin1=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;var reNoMatch=/($^)/;var reUnescapedString=/['\n\r\u2028\u2029\\]/g;var reWords=function(){var upper="[A-Z\\xc0-\\xd6\\xd8-\\xde]",lower="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(upper+"+(?="+upper+lower+")|"+upper+"?"+lower+"|"+upper+"+|[0-9]+","g")}();var contextProps=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"];var templateCounter=-1;var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=false;var deburredLetters={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"};var htmlEscapes={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"};var htmlUnescapes={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"};var objectTypes={function:true,object:true};var regexpEscapes={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"};var stringEscapes={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};var freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports;var freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module;var freeGlobal=freeExports&&freeModule&&typeof global=="object"&&global&&global.Object&&global;var freeSelf=objectTypes[typeof self]&&self&&self.Object&&self;var freeWindow=objectTypes[typeof window]&&window&&window.Object&&window;var moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports;var root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this;function baseCompareAscending(value,other){if(value!==other){var valIsNull=value===null,valIsUndef=value===undefined,valIsReflexive=value===value;var othIsNull=other===null,othIsUndef=other===undefined,othIsReflexive=other===other;if(value>other&&!othIsNull||!valIsReflexive||valIsNull&&!othIsUndef&&othIsReflexive||valIsUndef&&othIsReflexive){return 1}if(value-1){}return index}function charsRightIndex(string,chars){var index=string.length;while(index--&&chars.indexOf(string.charAt(index))>-1){}return index}function compareAscending(object,other){return baseCompareAscending(object.criteria,other.criteria)||object.index-other.index}function compareMultiple(object,other,orders){var index=-1,objCriteria=object.criteria,othCriteria=other.criteria,length=objCriteria.length,ordersLength=orders.length;while(++index=ordersLength){return result}var order=orders[index];return result*(order==="asc"||order===true?1:-1)}}return object.index-other.index}function deburrLetter(letter){return deburredLetters[letter]}function escapeHtmlChar(chr){return htmlEscapes[chr]}function escapeRegExpChar(chr,leadingChar,whitespaceChar){if(leadingChar){chr=regexpEscapes[chr]}else if(whitespaceChar){chr=stringEscapes[chr]}return"\\"+chr}function escapeStringChar(chr){return"\\"+stringEscapes[chr]}function indexOfNaN(array,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?0:-1);while(fromRight?index--:++index=9&&charCode<=13)||charCode==32||charCode==160||charCode==5760||charCode==6158||charCode>=8192&&(charCode<=8202||charCode==8232||charCode==8233||charCode==8239||charCode==8287||charCode==12288||charCode==65279)}function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=-1,result=[];while(++index>>1;var MAX_SAFE_INTEGER=9007199254740991;var metaMap=WeakMap&&new WeakMap;var realNames={};function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value}if(hasOwnProperty.call(value,"__chain__")&&hasOwnProperty.call(value,"__wrapped__")){return wrapperClone(value)}}return new LodashWrapper(value)}function baseLodash(){}function LodashWrapper(value,chainAll,actions){this.__wrapped__=value;this.__actions__=actions||[];this.__chain__=!!chainAll}var support=lodash.support={};lodash.templateSettings={escape:reEscape,evaluate:reEvaluate,interpolate:reInterpolate,variable:"",imports:{_:lodash}};function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=POSITIVE_INFINITY;this.__views__=[]}function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=arrayCopy(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=arrayCopy(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=arrayCopy(this.__views__);return result}function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true}else{result=this.clone();result.__dir__*=-1}return result}function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||arrLength=LARGE_ARRAY_SIZE?createCache(values):null,valuesLength=values.length;if(cache){indexOf=cacheIndexOf;isCommon=false;values=cache}outer:while(++indexlength?0:length+start}end=end===undefined||end>length?length:+end||0;if(end<0){end+=length}length=start>end?0:end>>>0;start>>>=0;while(startlength?0:length+start}end=end===undefined||end>length?length:+end||0;if(end<0){end+=length}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index=LARGE_ARRAY_SIZE,seen=isLarge?createCache():null,result=[];if(seen){indexOf=cacheIndexOf;isCommon=false}else{isLarge=false;seen=iteratee?[]:result}outer:while(++index>>1,computed=array[mid];if((retHighest?computed<=value:computed2?sources[length-2]:undefined,guard=length>2?sources[2]:undefined,thisArg=length>1?sources[length-1]:undefined;if(typeof customizer=="function"){customizer=bindCallback(customizer,thisArg,5);length-=2}else{customizer=typeof thisArg=="function"?thisArg:undefined;length-=customizer?1:0}if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined:customizer;length=1}while(++index-1?collection[index]:undefined}return baseFind(collection,predicate,eachFunc)}}function createFindIndex(fromRight){return function(array,predicate,thisArg){if(!(array&&array.length)){return-1}predicate=getCallback(predicate,thisArg,3);return baseFindIndex(array,predicate,fromRight)}}function createFindKey(objectFunc){return function(object,predicate,thisArg){predicate=getCallback(predicate,thisArg,3);return baseFind(object,predicate,objectFunc,true)}}function createFlow(fromRight){return function(){var wrapper,length=arguments.length,index=fromRight?length:-1,leftIndex=0,funcs=Array(length);while(fromRight?index--:++index=LARGE_ARRAY_SIZE){return wrapper.plant(value).value()}var index=0,result=length?funcs[index].apply(this,args):value;while(++index=length||!nativeIsFinite(length)){return""}var padLength=length-strLength;chars=chars==null?" ":chars+"";return repeat(chars,nativeCeil(padLength/chars.length)).slice(0,padLength)}function createPartialWrapper(func,bitmask,thisArg,partials){var isBind=bitmask&BIND_FLAG,Ctor=createCtorWrapper(func);function wrapper(){var argsIndex=-1,argsLength=arguments.length,leftIndex=-1,leftLength=partials.length,args=Array(leftLength+argsLength);while(++leftIndexarrLength)){return false}while(++index-1&&value%1==0&&value-1&&value%1==0&&value<=MAX_SAFE_INTEGER}function isStrictComparable(value){return value===value&&!isObject(value)}function mergeData(data,source){var bitmask=data[1],srcBitmask=source[1],newBitmask=bitmask|srcBitmask,isCommon=newBitmask0){if(++count>=HOT_COUNT){return key}}else{count=0}return baseSetData(key,value)}}();function shimKeys(object){var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length;var allowIndexes=!!length&&isLength(length)&&(isArray(object)||isArguments(object));var index=-1,result=[];while(++index=120?createCache(othIndex&&value):null}var array=arrays[0],index=-1,length=array?array.length:0,seen=caches[0];outer:while(++index-1){splice.call(array,fromIndex,1)}}return array}var pullAt=restParam(function(array,indexes){indexes=baseFlatten(indexes);var result=baseAt(array,indexes);basePullAt(array,indexes.sort(baseCompareAscending));return result});function remove(array,predicate,thisArg){var result=[];if(!(array&&array.length)){return result}var index=-1,indexes=[],length=array.length;predicate=getCallback(predicate,thisArg,3);while(++index2?arrays[length-2]:undefined,thisArg=length>1?arrays[length-1]:undefined;if(length>2&&typeof iteratee=="function"){length-=2}else{iteratee=length>1&&typeof thisArg=="function"?(--length,thisArg):undefined;thisArg=undefined}arrays.length=length;return unzipWith(arrays,iteratee,thisArg)});function chain(value){var result=lodash(value);result.__chain__=true;return result}function tap(value,interceptor,thisArg){interceptor.call(thisArg,value);return value}function thru(value,interceptor,thisArg){return interceptor.call(thisArg,value)}function wrapperChain(){return chain(this)}function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__)}var wrapperConcat=restParam(function(values){values=baseFlatten(values);return this.thru(function(array){return arrayConcat(isArray(array)?array:[toObject(array)],values)})});function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);if(result){previous.__wrapped__=clone}else{result=clone}var previous=clone;parent=parent.__wrapped__}previous.__wrapped__=value;return result}function wrapperReverse(){var value=this.__wrapped__;var interceptor=function(value){return wrapped&&wrapped.__dir__<0?value:value.reverse()};if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this)}wrapped=wrapped.reverse();wrapped.__actions__.push({func:thru,args:[interceptor],thisArg:undefined});return new LodashWrapper(wrapped,this.__chain__)}return this.thru(interceptor)}function wrapperToString(){return this.value()+""}function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)}var at=restParam(function(collection,props){return baseAt(collection,baseFlatten(props))});var countBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?++result[key]:result[key]=1});function every(collection,predicate,thisArg){var func=isArray(collection)?arrayEvery:baseEvery;if(thisArg&&isIterateeCall(collection,predicate,thisArg)){predicate=undefined}if(typeof predicate!="function"||thisArg!==undefined){predicate=getCallback(predicate,thisArg,3)}return func(collection,predicate)}function filter(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;predicate=getCallback(predicate,thisArg,3);return func(collection,predicate)}var find=createFind(baseEach);var findLast=createFind(baseEachRight,true);function findWhere(collection,source){return find(collection,baseMatches(source))}var forEach=createForEach(arrayEach,baseEach);var forEachRight=createForEach(arrayEachRight,baseEachRight);var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value)}else{result[key]=[value]}});function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;if(!isLength(length)){collection=values(collection);length=collection.length}if(typeof fromIndex!="number"||guard&&isIterateeCall(target,fromIndex,guard)){fromIndex=0}else{fromIndex=fromIndex<0?nativeMax(length+fromIndex,0):fromIndex||0}return typeof collection=="string"||!isArray(collection)&&isString(collection)?fromIndex<=length&&collection.indexOf(target,fromIndex)>-1:!!length&&getIndexOf(collection,target,fromIndex)>-1}var indexBy=createAggregator(function(result,value,key){result[key]=value});var invoke=restParam(function(collection,path,args){var index=-1,isFunc=typeof path=="function",isProp=isKey(path),result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){var func=isFunc?path:isProp&&value!=null?value[path]:undefined;result[++index]=func?func.apply(value,args):invokePath(value,path,args)});return result});function map(collection,iteratee,thisArg){var func=isArray(collection)?arrayMap:baseMap;iteratee=getCallback(iteratee,thisArg,3);return func(collection,iteratee)}var partition=createAggregator(function(result,value,key){result[key?0:1].push(value)},function(){return[[],[]]});function pluck(collection,path){return map(collection,property(path))}var reduce=createReduce(arrayReduce,baseEach);var reduceRight=createReduce(arrayReduceRight,baseEachRight);function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;predicate=getCallback(predicate,thisArg,3);return func(collection,function(value,index,collection){return!predicate(value,index,collection)})}function sample(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n==null){collection=toIterable(collection);var length=collection.length;return length>0?collection[baseRandom(0,length-1)]:undefined}var index=-1,result=toArray(collection),length=result.length,lastIndex=length-1;n=nativeMin(n<0?0:+n||0,length);while(++index0){result=func.apply(this,arguments)}if(n<=1){func=undefined}return result}}var bind=restParam(function(func,thisArg,partials){var bitmask=BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,bind.placeholder);bitmask|=PARTIAL_FLAG}return createWrapper(func,bitmask,thisArg,partials,holders)});var bindAll=restParam(function(object,methodNames){methodNames=methodNames.length?baseFlatten(methodNames):functions(object);var index=-1,length=methodNames.length;while(++indexwait){complete(trailingCall,maxTimeoutId)}else{timeoutId=setTimeout(delayed,remaining)}}function maxDelayed(){complete(trailing,timeoutId)}function debounced(){args=arguments;stamp=now();thisArg=this;trailingCall=trailing&&(timeoutId||!leading);if(maxWait===false){var leadingCall=leading&&!timeoutId}else{if(!maxTimeoutId&&!leading){lastCalled=stamp}var remaining=maxWait-(stamp-lastCalled),isCalled=remaining<=0||remaining>maxWait;if(isCalled){if(maxTimeoutId){maxTimeoutId=clearTimeout(maxTimeoutId)}lastCalled=stamp;result=func.apply(thisArg,args)}else if(!maxTimeoutId){maxTimeoutId=setTimeout(maxDelayed,remaining)}}if(isCalled&&timeoutId){timeoutId=clearTimeout(timeoutId)}else if(!timeoutId&&wait!==maxWait){timeoutId=setTimeout(delayed,wait)}if(leadingCall){isCalled=true;result=func.apply(thisArg,args)}if(isCalled&&!timeoutId&&!maxTimeoutId){args=thisArg=undefined}return result}debounced.cancel=cancel;return debounced}var defer=restParam(function(func,args){return baseDelay(func,1,args)});var delay=restParam(function(func,wait,args){return baseDelay(func,wait,args)});var flow=createFlow();var flowRight=createFlow(true);function memoize(func,resolver){if(typeof func!="function"||resolver&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result};memoized.cache=new memoize.Cache;return memoized}var modArgs=restParam(function(func,transforms){transforms=baseFlatten(transforms);if(typeof func!="function"||!arrayEvery(transforms,baseIsFunction)){throw new TypeError(FUNC_ERROR_TEXT)}var length=transforms.length;return restParam(function(args){var index=nativeMin(args.length,length);while(index--){args[index]=transforms[index](args[index])}return func.apply(this,args)})});function negate(predicate){if(typeof predicate!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return function(){return!predicate.apply(this,arguments)}}function once(func){return before(2,func)}var partial=createPartial(PARTIAL_FLAG);var partialRight=createPartial(PARTIAL_RIGHT_FLAG);var rearg=restParam(function(func,indexes){return createWrapper(func,REARG_FLAG,undefined,undefined,undefined,baseFlatten(indexes))});function restParam(func,start){if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}start=nativeMax(start===undefined?func.length-1:+start||0,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);while(++indexother}function gte(value,other){return value>=other}function isArguments(value){return isObjectLike(value)&&isArrayLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")}var isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag};function isBoolean(value){return value===true||value===false||isObjectLike(value)&&objToString.call(value)==boolTag}function isDate(value){return isObjectLike(value)&&objToString.call(value)==dateTag}function isElement(value){return!!value&&value.nodeType===1&&isObjectLike(value)&&!isPlainObject(value)}function isEmpty(value){if(value==null){return true}if(isArrayLike(value)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))){return!value.length}return!keys(value).length}function isEqual(value,other,customizer,thisArg){customizer=typeof customizer=="function"?bindCallback(customizer,thisArg,3):undefined;var result=customizer?customizer(value,other):undefined;return result===undefined?baseIsEqual(value,other,customizer):!!result}function isError(value){return isObjectLike(value)&&typeof value.message=="string"&&objToString.call(value)==errorTag}function isFinite(value){return typeof value=="number"&&nativeIsFinite(value)}function isFunction(value){return isObject(value)&&objToString.call(value)==funcTag}function isObject(value){var type=typeof value;return!!value&&(type=="object"||type=="function")}function isMatch(object,source,customizer,thisArg){customizer=typeof customizer=="function"?bindCallback(customizer,thisArg,3):undefined;return baseIsMatch(object,getMatchData(source),customizer)}function isNaN(value){return isNumber(value)&&value!=+value}function isNative(value){if(value==null){return false}if(isFunction(value)){return reIsNative.test(fnToString.call(value))}return isObjectLike(value)&&reIsHostCtor.test(value)}function isNull(value){return value===null}function isNumber(value){return typeof value=="number"||isObjectLike(value)&&objToString.call(value)==numberTag}function isPlainObject(value){var Ctor;if(!(isObjectLike(value)&&objToString.call(value)==objectTag&&!isArguments(value))||!hasOwnProperty.call(value,"constructor")&&(Ctor=value.constructor,typeof Ctor=="function"&&!(Ctor instanceof Ctor))){return false}var result;baseForIn(value,function(subValue,key){result=key});return result===undefined||hasOwnProperty.call(value,result)}function isRegExp(value){return isObject(value)&&objToString.call(value)==regexpTag}function isString(value){return typeof value=="string"||isObjectLike(value)&&objToString.call(value)==stringTag}function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}function isUndefined(value){return value===undefined}function lt(value,other){return value0;while(++index=nativeMin(start,end)&&value=0&&string.indexOf(target,position)==position}function escape(string){string=baseToString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string}function escapeRegExp(string){string=baseToString(string);return string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,escapeRegExpChar):string||"(?:)"}var kebabCase=createCompounder(function(result,word,index){return result+(index?"-":"")+word.toLowerCase()});function pad(string,length,chars){string=baseToString(string);length=+length;var strLength=string.length;if(strLength>=length||!nativeIsFinite(length)){return string}var mid=(length-strLength)/2,leftLength=nativeFloor(mid),rightLength=nativeCeil(mid);chars=createPadding("",rightLength,chars);return chars.slice(0,leftLength)+string+chars}var padLeft=createPadDir();var padRight=createPadDir(true);function parseInt(string,radix,guard){if(guard?isIterateeCall(string,radix,guard):radix==null){radix=0}else if(radix){radix=+radix}string=trim(string);return nativeParseInt(string,radix||(reHasHexPrefix.test(string)?16:10))}function repeat(string,n){var result="";string=baseToString(string);n=+n;if(n<1||!string||!nativeIsFinite(n)){return result}do{if(n%2){result+=string}n=nativeFloor(n/2);string+=string}while(n);return result}var snakeCase=createCompounder(function(result,word,index){return result+(index?"_":"")+word.toLowerCase()});var startCase=createCompounder(function(result,word,index){return result+(index?" ":"")+(word.charAt(0).toUpperCase()+word.slice(1))});function startsWith(string,target,position){string=baseToString(string);position=position==null?0:nativeMin(position<0?0:+position||0,string.length);return string.lastIndexOf(target,position)==position}function template(string,options,otherOptions){var settings=lodash.templateSettings;if(otherOptions&&isIterateeCall(string,options,otherOptions)){options=otherOptions=undefined}string=baseToString(string);options=assignWith(baseAssign({},otherOptions||options),settings,assignOwnDefaults);var imports=assignWith(baseAssign({},options.imports),settings.imports,assignOwnDefaults),importsKeys=keys(imports),importsValues=baseValues(imports,importsKeys);var isEscaping,isEvaluating,index=0,interpolate=options.interpolate||reNoMatch,source="__p += '";var reDelimiters=RegExp((options.escape||reNoMatch).source+"|"+interpolate.source+"|"+(interpolate===reInterpolate?reEsTemplate:reNoMatch).source+"|"+(options.evaluate||reNoMatch).source+"|$","g");var sourceURL="//# sourceURL="+("sourceURL"in options?options.sourceURL:"lodash.templateSources["+ ++templateCounter+"]")+"\n";string.replace(reDelimiters,function(match,escapeValue,interpolateValue,esTemplateValue,evaluateValue,offset){interpolateValue||(interpolateValue=esTemplateValue);source+=string.slice(index,offset).replace(reUnescapedString,escapeStringChar);if(escapeValue){isEscaping=true;source+="' +\n__e("+escapeValue+") +\n'"}if(evaluateValue){isEvaluating=true;source+="';\n"+evaluateValue+";\n__p += '"}if(interpolateValue){source+="' +\n((__t = ("+interpolateValue+")) == null ? '' : __t) +\n'"}index=offset+match.length;return match});source+="';\n";var variable=options.variable;if(!variable){source="with (obj) {\n"+source+"\n}\n"}source=(isEvaluating?source.replace(reEmptyStringLeading,""):source).replace(reEmptyStringMiddle,"$1").replace(reEmptyStringTrailing,"$1;");source="function("+(variable||"obj")+") {\n"+(variable?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(isEscaping?", __e = _.escape":"")+(isEvaluating?", __j = Array.prototype.join;\n"+"function print() { __p += __j.call(arguments, '') }\n":";\n")+source+"return __p\n}";var result=attempt(function(){return Function(importsKeys,sourceURL+"return "+source).apply(undefined,importsValues)});result.source=source;if(isError(result)){throw result}return result}function trim(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(trimmedLeftIndex(string),trimmedRightIndex(string)+1)}chars=chars+"";return string.slice(charsLeftIndex(string,chars),charsRightIndex(string,chars)+1)}function trimLeft(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(trimmedLeftIndex(string))}return string.slice(charsLeftIndex(string,chars+""))}function trimRight(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(0,trimmedRightIndex(string)+1)}return string.slice(0,charsRightIndex(string,chars+"")+1)}function trunc(string,options,guard){if(guard&&isIterateeCall(string,options,guard)){options=undefined}var length=DEFAULT_TRUNC_LENGTH,omission=DEFAULT_TRUNC_OMISSION;if(options!=null){if(isObject(options)){var separator="separator"in options?options.separator:separator;length="length"in options?+options.length||0:length;omission="omission"in options?baseToString(options.omission):omission}else{length=+options||0}}string=baseToString(string);if(length>=string.length){return string}var end=length-omission.length;if(end<1){return omission}var result=string.slice(0,end);if(separator==null){return result+omission}if(isRegExp(separator)){if(string.slice(end).search(separator)){var match,newEnd,substring=string.slice(0,end);if(!separator.global){separator=RegExp(separator.source,(reFlags.exec(separator)||"")+"g")}separator.lastIndex=0;while(match=separator.exec(substring)){newEnd=match.index}result=result.slice(0,newEnd==null?end:newEnd)}}else if(string.indexOf(separator,end)!=end){var index=result.lastIndexOf(separator);if(index>-1){result=result.slice(0,index)}}return result+omission}function unescape(string){string=baseToString(string);return string&&reHasEscapedHtml.test(string)?string.replace(reEscapedHtml,unescapeHtmlChar):string}function words(string,pattern,guard){if(guard&&isIterateeCall(string,pattern,guard)){pattern=undefined}string=baseToString(string);return string.match(pattern||reWords)||[]}var attempt=restParam(function(func,args){try{return func.apply(undefined,args)}catch(e){return isError(e)?e:new Error(e)}});function callback(func,thisArg,guard){if(guard&&isIterateeCall(func,thisArg,guard)){thisArg=undefined}return isObjectLike(func)?matches(func):baseCallback(func,thisArg)}function constant(value){return function(){return value}}function identity(value){return value}function matches(source){return baseMatches(baseClone(source,true))}function matchesProperty(path,srcValue){return baseMatchesProperty(path,baseClone(srcValue,true))}var method=restParam(function(path,args){return function(object){return invokePath(object,path,args)}});var methodOf=restParam(function(object,args){return function(path){return invokePath(object,path,args)}});function mixin(object,source,options){if(options==null){var isObj=isObject(source),props=isObj?keys(source):undefined,methodNames=props&&props.length?baseFunctions(source,props):undefined;if(!(methodNames?methodNames.length:isObj)){methodNames=false;options=source;source=object;object=this}}if(!methodNames){methodNames=baseFunctions(source,keys(source))}var chain=true,index=-1,isFunc=isFunction(object),length=methodNames.length;if(options===false){chain=false}else if(isObject(options)&&"chain"in options){chain=options.chain}while(++index0||end<0)){return new LazyWrapper(result)}if(start<0){result=result.takeRight(-start)}else if(start){result=result.drop(start)}if(end!==undefined){end=+end||0;result=end<0?result.dropRight(-end):result.take(end-start)}return result};LazyWrapper.prototype.takeRightWhile=function(predicate,thisArg){return this.reverse().takeWhile(predicate,thisArg).reverse()};LazyWrapper.prototype.toArray=function(){return this.take(POSITIVE_INFINITY)};baseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|map|reject)|While$/.test(methodName),retUnwrapped=/^(?:first|last)$/.test(methodName),lodashFunc=lodash[retUnwrapped?"take"+(methodName=="last"?"Right":""):methodName];if(!lodashFunc){return}lodash.prototype[methodName]=function(){var args=retUnwrapped?[1]:arguments,chainAll=this.__chain__,value=this.__wrapped__,isHybrid=!!this.__actions__.length,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value);if(useLazy&&checkIteratee&&typeof iteratee=="function"&&iteratee.length!=1){isLazy=useLazy=false}var interceptor=function(value){return retUnwrapped&&chainAll?lodashFunc(value,1)[0]:lodashFunc.apply(undefined,arrayPush([value],args))};var action={func:thru,args:[interceptor],thisArg:undefined},onlyLazy=isLazy&&!isHybrid;if(retUnwrapped&&!chainAll){if(onlyLazy){value=value.clone();value.__actions__.push(action);return func.call(value)}return lodashFunc.call(undefined,this.value())[0]}if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);result.__actions__.push(action);return new LodashWrapper(result,chainAll)}return this.thru(interceptor)}});arrayEach(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(methodName){var func=(/^(?:replace|split)$/.test(methodName)?stringProto:arrayProto)[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?"tap":"thru",retUnwrapped=/^(?:join|pop|replace|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){return func.apply(this.value(),args)}return this[chainName](function(value){return func.apply(value,args)})}});baseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name,names=realNames[key]||(realNames[key]=[]);names.push({name:methodName,func:lodashFunc})}});realNames[createHybridWrapper(undefined,BIND_KEY_FLAG).name]=[{name:"wrapper",func:undefined}];LazyWrapper.prototype.clone=lazyClone;LazyWrapper.prototype.reverse=lazyReverse;LazyWrapper.prototype.value=lazyValue;lodash.prototype.chain=wrapperChain;lodash.prototype.commit=wrapperCommit;lodash.prototype.concat=wrapperConcat;lodash.prototype.plant=wrapperPlant;lodash.prototype.reverse=wrapperReverse;lodash.prototype.toString=wrapperToString;lodash.prototype.run=lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=wrapperValue;lodash.prototype.collect=lodash.prototype.map;lodash.prototype.head=lodash.prototype.first;lodash.prototype.select=lodash.prototype.filter;lodash.prototype.tail=lodash.prototype.rest;return lodash}var _=runInContext();if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){root._=_;define(function(){return _})}else if(freeExports&&freeModule){if(moduleExports){(freeModule.exports=_)._=_}else{freeExports._=_}}else{root._=_}}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],3:[function(require,module,exports){(function(window,document,undefined){var _MAP={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"};var _KEYCODE_MAP={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"};var _SHIFT_MAP={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"};var _SPECIAL_ALIASES={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"};var _REVERSE_MAP;for(var i=1;i<20;++i){_MAP[111+i]="f"+i}for(i=0;i<=9;++i){_MAP[i+96]=i}function _addEvent(object,type,callback){if(object.addEventListener){object.addEventListener(type,callback,false);return}object.attachEvent("on"+type,callback)}function _characterFromEvent(e){if(e.type=="keypress"){var character=String.fromCharCode(e.which);if(!e.shiftKey){character=character.toLowerCase()}return character}if(_MAP[e.which]){return _MAP[e.which]}if(_KEYCODE_MAP[e.which]){return _KEYCODE_MAP[e.which]}return String.fromCharCode(e.which).toLowerCase()}function _modifiersMatch(modifiers1,modifiers2){return modifiers1.sort().join(",")===modifiers2.sort().join(",")}function _eventModifiers(e){var modifiers=[];if(e.shiftKey){modifiers.push("shift")}if(e.altKey){modifiers.push("alt")}if(e.ctrlKey){modifiers.push("ctrl")}if(e.metaKey){modifiers.push("meta")}return modifiers}function _preventDefault(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=false}function _stopPropagation(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=true}function _isModifier(key){return key=="shift"||key=="ctrl"||key=="alt"||key=="meta"}function _getReverseMap(){if(!_REVERSE_MAP){_REVERSE_MAP={};for(var key in _MAP){if(key>95&&key<112){continue}if(_MAP.hasOwnProperty(key)){_REVERSE_MAP[_MAP[key]]=key}}}return _REVERSE_MAP}function _pickBestAction(key,modifiers,action){if(!action){action=_getReverseMap()[key]?"keydown":"keypress"}if(action=="keypress"&&modifiers.length){action="keydown"}return action}function _keysFromString(combination){if(combination==="+"){return["+"]}combination=combination.replace(/\+{2}/g,"+plus");return combination.split("+")}function _getKeyInfo(combination,action){var keys;var key;var i;var modifiers=[];keys=_keysFromString(combination);for(i=0;i1){_bindSequence(combination,sequence,callback,action);return}info=_getKeyInfo(combination,action);self._callbacks[info.key]=self._callbacks[info.key]||[];_getMatches(info.key,info.modifiers,{type:info.action},sequenceName,combination,level);self._callbacks[info.key][sequenceName?"unshift":"push"]({callback:callback,modifiers:info.modifiers,action:info.action,seq:sequenceName,level:level,combo:combination})}self._bindMultiple=function(combinations,callback,action){for(var i=0;i-1){return false}if(_belongsTo(element,self.target)){return false}return element.tagName=="INPUT"||element.tagName=="SELECT"||element.tagName=="TEXTAREA"||element.isContentEditable};Mousetrap.prototype.handleKey=function(){var self=this;return self._handleKey.apply(self,arguments)};Mousetrap.init=function(){var documentMousetrap=Mousetrap(document);for(var method in documentMousetrap){if(method.charAt(0)!=="_"){Mousetrap[method]=function(method){return function(){return documentMousetrap[method].apply(documentMousetrap,arguments)}}(method)}}};Mousetrap.init();window.Mousetrap=Mousetrap;if(typeof module!=="undefined"&&module.exports){module.exports=Mousetrap}if(typeof define==="function"&&define.amd){define(function(){return Mousetrap})}})(window,document)},{}],4:[function(require,module,exports){(function(process){function normalizeArray(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i1){for(var i=1;i= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode,key;function error(type){throw RangeError(errors[type])}function map(array,fn){var length=array.length;var result=[];while(length--){result[length]=fn(array[length])}return result}function mapDomain(string,fn){var parts=string.split("@");var result="";if(parts.length>1){result=parts[0]+"@";string=parts[1]}string=string.replace(regexSeparators,".");var labels=string.split(".");var encoded=map(labels,fn).join(".");return result+encoded}function ucs2decode(string){var output=[],counter=0,length=string.length,value,extra;while(counter=55296&&value<=56319&&counter65535){value-=65536;output+=stringFromCharCode(value>>>10&1023|55296);value=56320|value&1023}output+=stringFromCharCode(value);return output}).join("")}function basicToDigit(codePoint){if(codePoint-48<10){return codePoint-22}if(codePoint-65<26){return codePoint-65}if(codePoint-97<26){return codePoint-97}return base}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((flag!=0)<<5)}function adapt(delta,numPoints,firstTime){var k=0;delta=firstTime?floor(delta/damp):delta>>1;delta+=floor(delta/numPoints);for(;delta>baseMinusTMin*tMax>>1;k+=base){delta=floor(delta/baseMinusTMin)}return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var output=[],inputLength=input.length,out,i=0,n=initialN,bias=initialBias,basic,j,index,oldi,w,k,digit,t,baseMinusT;basic=input.lastIndexOf(delimiter);if(basic<0){basic=0}for(j=0;j=128){error("not-basic")}output.push(input.charCodeAt(j))}for(index=basic>0?basic+1:0;index=inputLength){error("invalid-input")}digit=basicToDigit(input.charCodeAt(index++));if(digit>=base||digit>floor((maxInt-i)/w)){error("overflow")}i+=digit*w;t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(digitfloor(maxInt/baseMinusT)){error("overflow")}w*=baseMinusT}out=output.length+1;bias=adapt(i-oldi,out,oldi==0);if(floor(i/out)>maxInt-n){error("overflow")}n+=floor(i/out);i%=out;output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,output=[],inputLength,handledCPCountPlusOne,baseMinusT,qMinusT;input=ucs2decode(input);inputLength=input.length;n=initialN;delta=0;bias=initialBias;for(j=0;j=n&¤tValuefloor((maxInt-delta)/handledCPCountPlusOne)){error("overflow")}delta+=(m-n)*handledCPCountPlusOne;n=m;for(j=0;jmaxInt){error("overflow")}if(currentValue==n){for(q=delta,k=base;;k+=base){t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias;if(q0&&len>maxKeys){len=maxKeys}for(var i=0;i=0){kstr=x.substr(0,idx);vstr=x.substr(idx+1)}else{kstr=x;vstr=""}k=decodeURIComponent(kstr);v=decodeURIComponent(vstr);if(!hasOwnProperty(obj,k)){obj[k]=v}else if(isArray(obj[k])){obj[k].push(v)}else{obj[k]=[obj[k],v]}}return obj};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"}},{}],8:[function(require,module,exports){"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){sep=sep||"&";eq=eq||"=";if(obj===null){obj=undefined}if(typeof obj==="object"){return map(objectKeys(obj),function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;if(isArray(obj[k])){return map(obj[k],function(v){return ks+encodeURIComponent(stringifyPrimitive(v))}).join(sep)}else{return ks+encodeURIComponent(stringifyPrimitive(obj[k]))}}).join(sep)}if(!name)return"";return encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj))};var isArray=Array.isArray||function(xs){return Object.prototype.toString.call(xs)==="[object Array]"};function map(xs,f){if(xs.map)return xs.map(f);var res=[];for(var i=0;i",'"',"`"," ","\r","\n","\t"],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:true,"javascript:":true},hostlessProtocol={javascript:true,"javascript:":true},slashedProtocol={http:true,https:true,ftp:true,gopher:true,file:true,"http:":true,"https:":true,"ftp:":true,"gopher:":true,"file:":true},querystring=require("querystring");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url;u.parse(url,parseQueryString,slashesDenoteHost);return u}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url)){throw new TypeError("Parameter 'url' must be a string, not "+typeof url)}var rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){proto=proto[0];var lowerProto=proto.toLowerCase();this.protocol=lowerProto;rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes=rest.substr(0,2)==="//";if(slashes&&!(proto&&hostlessProtocol[proto])){rest=rest.substr(2);this.slashes=true}}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){var hostEnd=-1;for(var i=0;i127){newpart+="x"}else{newpart+=part[j]}}if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i);var notHost=hostparts.slice(i+1);var bit=part.match(hostnamePartStart);if(bit){validParts.push(bit[1]);notHost.unshift(bit[2])}if(notHost.length){rest="/"+notHost.join(".")+rest}this.hostname=validParts.join(".");break}}}}if(this.hostname.length>hostnameMaxLen){this.hostname=""}else{this.hostname=this.hostname.toLowerCase()}if(!ipv6Hostname){var domainArray=this.hostname.split(".");var newOut=[];for(var i=0;i0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}result.search=relative.search;result.query=relative.query;if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.href=result.format();return result}if(!srcPath.length){result.pathname=null;if(result.search){result.path="/"+result.search}else{result.path=null}result.href=result.format();return result}var last=srcPath.slice(-1)[0];var hasTrailingSlash=(result.host||relative.host)&&(last==="."||last==="..")||last==="";var up=0;for(var i=srcPath.length;i>=0;i--){last=srcPath[i];if(last=="."){srcPath.splice(i,1)}else if(last===".."){srcPath.splice(i,1);up++}else if(up){srcPath.splice(i,1);up--}}if(!mustEndAbs&&!removeAllDots){for(;up--;up){srcPath.unshift("..")}}if(mustEndAbs&&srcPath[0]!==""&&(!srcPath[0]||srcPath[0].charAt(0)!=="/")){srcPath.unshift("")}if(hasTrailingSlash&&srcPath.join("/").substr(-1)!=="/"){srcPath.push("")}var isAbsolute=srcPath[0]===""||srcPath[0]&&srcPath[0].charAt(0)==="/";if(psychotic){result.hostname=result.host=isAbsolute?"":srcPath.length?srcPath.shift():"";var authInHost=result.host&&result.host.indexOf("@")>0?result.host.split("@"):false;if(authInHost){result.auth=authInHost.shift();result.host=result.hostname=authInHost.shift()}}mustEndAbs=mustEndAbs||result.host&&srcPath.length;if(mustEndAbs&&!isAbsolute){srcPath.unshift("")}if(!srcPath.length){result.pathname=null;result.path=null}else{result.pathname=srcPath.join("/")}if(!isNull(result.pathname)||!isNull(result.search)){result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")}result.auth=relative.auth||result.auth;result.slashes=result.slashes||relative.slashes;result.href=result.format();return result};Url.prototype.parseHost=function(){var host=this.host;var port=portPattern.exec(host);if(port){port=port[0];if(port!==":"){this.port=port.substr(1)}host=host.substr(0,host.length-port.length)}if(host)this.hostname=host};function isString(arg){return typeof arg==="string"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isNull(arg){return arg===null}function isNullOrUndefined(arg){return arg==null}},{punycode:6,querystring:9}],11:[function(require,module,exports){var $=require("jquery");function toggleDropdown(e){var $dropdown=$(e.currentTarget).parent().find(".dropdown-menu");$dropdown.toggleClass("open");e.stopPropagation();e.preventDefault()}function closeDropdown(e){$(".dropdown-menu").removeClass("open")}function init(){$(document).on("click",".toggle-dropdown",toggleDropdown);$(document).on("click",".dropdown-menu",function(e){e.stopPropagation()});$(document).on("click",closeDropdown)}module.exports={init:init}},{jquery:1}],12:[function(require,module,exports){var $=require("jquery");module.exports=$({})},{jquery:1}],13:[function(require,module,exports){var $=require("jquery");var _=require("lodash");var storage=require("./storage");var dropdown=require("./dropdown");var events=require("./events");var state=require("./state");var keyboard=require("./keyboard");var navigation=require("./navigation");var sidebar=require("./sidebar");var toolbar=require("./toolbar");function start(config){sidebar.init();keyboard.init();dropdown.init();navigation.init();toolbar.createButton({index:0,icon:"fa fa-align-justify",label:"Toggle Sidebar",onClick:function(e){e.preventDefault();sidebar.toggle()}});events.trigger("start",config);navigation.notify()}var gitbook={start:start,events:events,state:state,toolbar:toolbar,sidebar:sidebar,storage:storage,keyboard:keyboard};var MODULES={gitbook:gitbook,jquery:$,lodash:_};window.gitbook=gitbook;window.$=$;window.jQuery=$;gitbook.require=function(mods,fn){mods=_.map(mods,function(mod){mod=mod.toLowerCase();if(!MODULES[mod]){throw new Error("GitBook module "+mod+" doesn't exist")}return MODULES[mod]});fn.apply(null,mods)};module.exports={}},{"./dropdown":11,"./events":12,"./keyboard":14,"./navigation":16,"./sidebar":18,"./state":19,"./storage":20,"./toolbar":21,jquery:1,lodash:2}],14:[function(require,module,exports){var Mousetrap=require("mousetrap");var navigation=require("./navigation");var sidebar=require("./sidebar");function bindShortcut(keys,fn){Mousetrap.bind(keys,function(e){fn();return false})}function init(){bindShortcut(["right"],function(e){navigation.goNext()});bindShortcut(["left"],function(e){navigation.goPrev()});bindShortcut(["s"],function(e){sidebar.toggle()})}module.exports={init:init,bind:bindShortcut}},{"./navigation":16,"./sidebar":18,mousetrap:3}],15:[function(require,module,exports){var state=require("./state");function showLoading(p){state.$book.addClass("is-loading");p.always(function(){state.$book.removeClass("is-loading")});return p}module.exports={show:showLoading}},{"./state":19}],16:[function(require,module,exports){var $=require("jquery");var url=require("url");var events=require("./events");var state=require("./state");var loading=require("./loading");var usePushState=typeof history.pushState!=="undefined";function handleNavigation(relativeUrl,push){var uri=url.resolve(window.location.pathname,relativeUrl);notifyPageChange();location.href=relativeUrl;return}function updateNavigationPosition(){var bodyInnerWidth,pageWrapperWidth;bodyInnerWidth=parseInt($(".body-inner").css("width"),10);pageWrapperWidth=parseInt($(".page-wrapper").css("width"),10);$(".navigation-next").css("margin-right",bodyInnerWidth-pageWrapperWidth+"px")}function notifyPageChange(){events.trigger("page.change")}function preparePage(notify){var $bookBody=$(".book-body");var $bookInner=$bookBody.find(".body-inner");var $pageWrapper=$bookInner.find(".page-wrapper");updateNavigationPosition();$bookInner.scrollTop(0);$bookBody.scrollTop(0);if(notify!==false)notifyPageChange()}function isLeftClickEvent(e){return e.button===0}function isModifiedEvent(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function handlePagination(e){if(isModifiedEvent(e)||!isLeftClickEvent(e)){return}e.stopPropagation();e.preventDefault();var url=$(this).attr("href");if(url)handleNavigation(url,true)}function goNext(){var url=$(".navigation-next").attr("href");if(url)handleNavigation(url,true)}function goPrev(){var url=$(".navigation-prev").attr("href");if(url)handleNavigation(url,true)}function init(){$.ajaxSetup({});if(location.protocol!=="file:"){history.replaceState({path:window.location.href},"")}window.onpopstate=function(event){if(event.state===null){return}return handleNavigation(event.state.path,false)};$(document).on("click",".navigation-prev",handlePagination);$(document).on("click",".navigation-next",handlePagination);$(document).on("click",".summary [data-path] a",handlePagination);$(window).resize(updateNavigationPosition);preparePage(false)}module.exports={init:init,goNext:goNext,goPrev:goPrev,notify:notifyPageChange}},{"./events":12,"./loading":15,"./state":19,jquery:1,url:10}],17:[function(require,module,exports){module.exports={isMobile:function(){return document.body.clientWidth<=600}}},{}],18:[function(require,module,exports){var $=require("jquery");var _=require("lodash");var storage=require("./storage");var platform=require("./platform");var state=require("./state");function toggleSidebar(_state,animation){if(state!=null&&isOpen()==_state)return;if(animation==null)animation=true;state.$book.toggleClass("without-animation",!animation);state.$book.toggleClass("with-summary",_state);storage.set("sidebar",isOpen())}function isOpen(){return state.$book.hasClass("with-summary")}function init(){if(platform.isMobile()){toggleSidebar(false,false)}else{toggleSidebar(storage.get("sidebar",true),false)}$(document).on("click",".book-summary li.chapter a",function(e){if(platform.isMobile())toggleSidebar(false,false)})}function filterSummary(paths){var $summary=$(".book-summary");$summary.find("li").each(function(){var path=$(this).data("path");var st=paths==null||_.contains(paths,path);$(this).toggle(st);if(st)$(this).parents("li").show()})}module.exports={init:init,isOpen:isOpen,toggle:toggleSidebar,filter:filterSummary}},{"./platform":17,"./state":19,"./storage":20,jquery:1,lodash:2}],19:[function(require,module,exports){var $=require("jquery");var url=require("url");var path=require("path");var state={};state.update=function(dom){var $book=$(dom.find(".book"));state.$book=$book;state.level=$book.data("level");state.basePath=$book.data("basepath");state.innerLanguage=$book.data("innerlanguage");state.revision=$book.data("revision");state.filepath=$book.data("filepath");state.chapterTitle=$book.data("chapter-title");state.root=url.resolve(location.protocol+"//"+location.host,path.dirname(path.resolve(location.pathname.replace(/\/$/,"/index.html"),state.basePath))).replace(/\/?$/,"/");state.bookRoot=state.innerLanguage?url.resolve(state.root,".."):state.root};state.update($);module.exports=state},{jquery:1,path:4,url:10}],20:[function(require,module,exports){var baseKey="";module.exports={setBaseKey:function(key){baseKey=key},set:function(key,value){key=baseKey+":"+key;try{sessionStorage[key]=JSON.stringify(value)}catch(e){}},get:function(key,def){key=baseKey+":"+key;if(sessionStorage[key]===undefined)return def;try{var v=JSON.parse(sessionStorage[key]);return v==null?def:v}catch(err){return sessionStorage[key]||def}},remove:function(key){key=baseKey+":"+key;sessionStorage.removeItem(key)}}},{}],21:[function(require,module,exports){var $=require("jquery");var _=require("lodash");var events=require("./events");var buttons=[];function insertAt(parent,selector,index,element){var lastIndex=parent.children(selector).size();if(index<0){index=Math.max(0,lastIndex+1+index)}parent.append(element);if(index",{class:"dropdown-menu",html:'
'});if(_.isString(dropdown)){$menu.append(dropdown)}else{var groups=_.map(dropdown,function(group){if(_.isArray(group))return group;else return[group]});_.each(groups,function(group){var $group=$("