├── .DS_Store ├── ._.DS_Store ├── R ├── FCM_Functions.R ├── FCM_Workflows.R ├── Load_Environment.R ├── Single_Cell_Functions.R └── seurat_to_uwot.R ├── README.md ├── gene_sets ├── ._GBM_stem_cell_markers.txt ├── ._GO_term_summary_20200909_144436_BMP1.txt ├── ._GO_term_summary_20200909_144538_BMPALL.txt ├── ._gs_KEGG_MTOR_SIGNALING.txt ├── ._gs_M_PHASE.txt ├── ._gs_Reelin.txt ├── ._gs_Reelin2.txt ├── ._gs_Reelin_PID.txt ├── ._gs_Reelin_Reactome.txt ├── ._gs_SCZ2014_108loci.txt ├── ._gs_SCZ2020.txt ├── ._gs_SCZ2020_Prioritized.txt ├── GO_term_summary_20200909_144436_BMP1.txt ├── GO_term_summary_20200909_144538_BMPALL.txt ├── geneset_TF_all.txt ├── gs_KEGG_CELL_CYCLE.txt ├── gs_KEGG_MTOR_SIGNALING.txt ├── gs_MITOTIC_CELL_CYCLE.txt ├── gs_M_PHASE.txt ├── gs_Reelin.txt ├── gs_Reelin2.txt ├── gs_Reelin_PID.txt ├── gs_Reelin_Reactome.txt ├── gs_SCZ2014_108loci.txt ├── gs_SCZ2020.txt └── gs_SCZ2020_Prioritized.txt ├── get_data.sh ├── links.txt └── misc ├── ._colorpals.ai.csv ├── ._sfari_gene.csv ├── colorpals.ai.csv └── sfari_gene.csv /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/.DS_Store -------------------------------------------------------------------------------- /._.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/._.DS_Store -------------------------------------------------------------------------------- /R/FCM_Functions.R: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Fuzzy C-means (FCM) Clustering Functions 4 | # 5 | # Written or adapted by Alexandro E. Trevino 2017-2020 6 | # Stanford University 7 | # special mention to Fabian Mueller as the source of some key functions 8 | # 9 | ############################################################################### 10 | 11 | 12 | 13 | ############################################################################### 14 | #' Set paramters for fuzzy clustering 15 | #' 16 | #' @param c The number of centers 17 | #' @param m The fuzziness parameter 18 | #' @param object an FCM project object 19 | setFuzzyParameters <- function(c, m, object) { 20 | object[['Parameters']] <- list(centers = c, m = m) 21 | return(object) 22 | } 23 | 24 | 25 | ############################################################################### 26 | #' Get centers 27 | getNumCenters <- function(object) { 28 | return(object[['Parameters']][['centers']]) 29 | } 30 | 31 | 32 | ############################################################################### 33 | #' Get fuzziness parameter 34 | getM <- function(object) { 35 | return(object[['Parameters']][['m']]) 36 | } 37 | 38 | 39 | ############################################################################### 40 | #' Get data matrix from FCM object 41 | #' 42 | #' @param object 43 | getDataMatrix <- function(object) { 44 | if (is.null(object[['Data.Matrix']])) { 45 | stop("No data matrix!") 46 | } 47 | return(object[['Data.Matrix']]) 48 | } 49 | 50 | ############################################################################### 51 | #' Function to perform fuzzy C-means clustering. This is the e1071 52 | #' implementation. 53 | #' 54 | #' @param object An FCM object 55 | #' @param iter.max The max number of iterations 56 | #' @param verbose To print iteration info 57 | #' @param dist The distance metric used 58 | #' @param method Cmeans 59 | doFuzzyClustering <- function(object, 60 | iter.max = 30, 61 | verbose = T, 62 | dist = 'euclidean', 63 | method = 'cmeans') { 64 | 65 | if (is.null(object[['Parameters']])) { 66 | stop("Set parameters first") 67 | } 68 | 69 | if (is.null(object[['Data.Matrix']])) { 70 | stop("No data matrix") 71 | } 72 | 73 | mat <- getDataMatrix(object) 74 | c <- getNumCenters(object) 75 | m <- getM(object) 76 | 77 | fuzz <- e1071::cmeans( 78 | x = mat, 79 | centers = c, 80 | iter.max = iter.max, 81 | verbose = verbose, 82 | dist = dist, 83 | method = method, 84 | m = m 85 | ) 86 | 87 | object[['FCM.Result']] <- fuzz 88 | 89 | return(object) 90 | } 91 | 92 | 93 | ############################################################################### 94 | getFclustObject <- function(object) { 95 | if (is.null(object[['FCM.Result']])) { 96 | stop('No FCM result found. Have you run doFuzzyClustering?') 97 | } 98 | 99 | return(object[['FCM.Result']]) 100 | } 101 | 102 | 103 | ############################################################################### 104 | #' Get centers from FCM project 105 | #' 106 | #' @param object An FCM object 107 | getCenterMatrix <- function(object) { 108 | return(object[['FCM.Result']][['centers']]) 109 | } 110 | 111 | 112 | ############################################################################### 113 | #' Get membership matrix from FCM project 114 | #' 115 | #' @param object An FCM object 116 | getMembership <- function(object) { 117 | return(object[['FCM.Result']][['membership']]) 118 | } 119 | 120 | 121 | ############################################################################### 122 | #' Get trial/project name from FCM project 123 | #' 124 | #' @param object An FCM object 125 | getTrialName <- function(object) { 126 | return(object[['Trial.Name']]) 127 | } 128 | 129 | 130 | ############################################################################### 131 | #' Plot a heatmap of gene membership by FCM module 132 | #' 133 | #' Also plots the corresponding heatmap of binarized membership, given a 134 | #' threshold value 135 | #' 136 | #' @param object A FCM project object 137 | plotMembershipHeatmap <- function(object, threshold = NULL) { 138 | 139 | fuzz.membership <- getMembership(object) 140 | trial.name <- getTrialName(object) 141 | 142 | if (is.null(threshold)) { 143 | threshold <- getThreshold(object) 144 | } 145 | 146 | threshold.char <- as.character(threshold) 147 | 148 | ms1 <- Heatmap( 149 | matrix = t(fuzz.membership), 150 | col = plant_palettes$`Jasminium polyanthum A`, 151 | show_column_names = F, 152 | name = "Membership" 153 | ) 154 | 155 | ms2 <- Heatmap( 156 | matrix = t(binarize(fuzz.membership, threshold)), 157 | col = c("white", "black"), 158 | show_column_names = F, 159 | column_order = column_order(ms1), 160 | cluster_columns = column_dend(ms1), 161 | name = sprintf("Threshold %s", threshold.char) 162 | ) 163 | 164 | pdf.name <- sprintf( 165 | "fuzzy_clusters/%s/MembershipHeatmap_thres%s.pdf", 166 | trial.name, 167 | threshold.char 168 | ) 169 | 170 | pdf( 171 | file = pdf.name, 172 | width = 9, 173 | height = 4 174 | ) 175 | patch <- ms1 + ms2 176 | print(patch) 177 | dev.off() 178 | 179 | } 180 | 181 | 182 | plotNumGenesInNModules <- function(object) { 183 | 184 | m.matrix <- getMembership(object) 185 | threshold <- getThreshold(object) 186 | trial.name <- getTrialName(object) 187 | 188 | df <- apply( 189 | X = binarize(m.matrix, threshold), 190 | MARGIN = 1, 191 | FUN ='sum' 192 | ) 193 | 194 | df <- data.frame(n = factor(df)) 195 | gg <- ggplot(df, aes(x = n)) + 196 | geom_bar(color = 'black', fill = 'grey') + 197 | theme_classic() + 198 | theme(aspect.ratio = 1, 199 | title = element_text(hjust = 0.5)) + 200 | labs(title = "Num. genes belonging to n modules") 201 | 202 | pdf.name <- sprintf( 203 | 'fuzzy_clusters/%s/Genes_Belonging_To_N_Modules_thres%s.pdf', 204 | trial.name, 205 | as.character(threshold) 206 | ) 207 | pdf( 208 | file = pdf.name, 209 | width = 4.5, 210 | height = 4.5 211 | ) 212 | print(gg) 213 | dev.off() 214 | } 215 | # apply(binarize(getMembership(fuzz), getThreshold(fuzz)), 1, 'sum') 216 | 217 | 218 | ############################################################################### 219 | #' Get a list of genes belonging to each fuzzy cluster / module 220 | #' 221 | #' Expects ensemble gene IDs 222 | #' @param object A FCM project object 223 | addMemberGeneList <- function(object) { 224 | 225 | fuzz.membership <- getMembership(object) 226 | threshold <- getThreshold(object) 227 | 228 | fcm.membership <- apply( 229 | X = fuzz.membership, 230 | MARGIN = 2, 231 | FUN = function(x) { 232 | convertGeneIDs(rownames(fuzz.membership)[x > threshold], ensembl2name) 233 | } 234 | ) 235 | 236 | object[['Member.Genes']] <- fcm.membership 237 | return(object) 238 | } 239 | 240 | 241 | ############################################################################### 242 | getMemberGeneList <- function(object) { 243 | return(object[['Member.Genes']]) 244 | } 245 | 246 | 247 | ############################################################################### 248 | getMemberGeneDF <- function(object) { 249 | 250 | fcm <- object[['Member.Genes']] 251 | 252 | df <- do.call( 253 | rbind, 254 | lapply( 255 | seq_along(fcm), 256 | function(x) { 257 | mname <- paste0('m', as.character(x)) 258 | genes <- fcm[[x]] 259 | ids <- names(fcm[[x]]) 260 | out <- data.frame( 261 | cbind( 262 | module = mname, 263 | gene.symbol = genes, 264 | gene.id = ids 265 | ) 266 | ) 267 | return(out) 268 | } 269 | ) 270 | ) 271 | 272 | df$module <- factor( 273 | x = df$module, 274 | levels = paste0('m', as.character(names(sort(object[['Module.Pseudotime']])))) 275 | ) 276 | return(df) 277 | } 278 | 279 | ############################################################################### 280 | addMemberGeneWeights <- function(object) { 281 | 282 | fcm.membership <- getMemberGeneList(object) 283 | fuzz.membership <- getMembership(object) 284 | 285 | fcm.weights <- lapply( 286 | seq_along(fcm.membership), 287 | function(x) { 288 | genes <- names(fcm.membership[[x]]) 289 | memberships <- fuzz.membership[genes, x] 290 | return(memberships) 291 | } 292 | ) 293 | 294 | object[['Member.Gene.Weights']] <- fcm.weights 295 | return(object) 296 | } 297 | 298 | 299 | ############################################################################### 300 | getMemberGeneWeights <- function(object) { 301 | return(object[['Member.Gene.Weights']]) 302 | } 303 | 304 | 305 | ############################################################################### 306 | #' Returns the current threshold 307 | #' 308 | #' @param object 309 | getThreshold <- function(object) { 310 | if (is.null(object[['Threshold']])) { 311 | stop("Threshold has not been set") 312 | } else { 313 | return(object[['Threshold']]) 314 | } 315 | } 316 | 317 | 318 | ############################################################################### 319 | #' Sets the current threshold 320 | #' 321 | #' @param object 322 | setThreshold <- function(threshold, object) { 323 | 324 | maxm <- maxMemberhip(object, threshold = threshold) 325 | 326 | if (any(maxm < threshold)) { 327 | print('Empty clusters found') 328 | } 329 | 330 | object[['Threshold']] <- threshold 331 | 332 | return(object) 333 | } 334 | 335 | 336 | ############################################################################### 337 | #' Computes overlaps from a fuzzy clustering object 338 | #' 339 | #' If n is the number of centers, the result will be an n x n matrix describing 340 | #' the extent of overlap between the clusters. N[i,j] != N[j, i]. This is based 341 | #' on ratios by default. However, Jaccard and scaled Jaccard indices are also 342 | #' available (in dev) 343 | #' 344 | #' @param object An FCM object 345 | #' @param method If 'ratio' (default) then the output is the fraction of genes 346 | #' in cluster C_i that overlap with cluster C_j. If 'number', the raw number 347 | #' of genes is returned. If 'jaccard', a Jaccard index is computed. If 348 | #' 'scaled', then a scaled Jaccard is returned 349 | #' @pre.filter An expression which will be evaluated and passed to lapply() as 350 | #' the argument FUN = . 351 | computeOverlaps <- function(object, method = 'ratio', pre.filter = NULL) { 352 | 353 | fcm.obj <- getFclustObject(object) 354 | 355 | if (method == 'ratio') { 356 | overlaps <- overlap(fcm.obj) 357 | } else if (method == 'number') { 358 | 359 | if (is.null(getMemberGeneList(object))) { 360 | stop('No gene list added. Run addMemberGeneList()') 361 | } 362 | 363 | fcm.membership <- getMemberGeneList(object) 364 | 365 | overlaps <- lapply( 366 | fcm.membership, 367 | function(i) { 368 | lapply( 369 | fcm.membership, 370 | function(j) { 371 | length(intersect(i, j)) 372 | } 373 | ) %>% Reduce('cbind', .) 374 | } 375 | ) %>% Reduce('rbind', .) 376 | 377 | colnames(overlaps) <- rownames(overlaps) <- names(fcm.membership) 378 | 379 | } else if (method == 'jaccard' || method == 'scaled' || method == 'filter') { 380 | 381 | fcm.membership <- getMemberGeneList(object) 382 | 383 | if (!is.null(pre.filter)) { 384 | fcm.membership <- lapply(fcm.membership, pre.filter) 385 | } 386 | 387 | overlaps <- lapply( 388 | fcm.membership, 389 | function(i) { 390 | lapply( 391 | fcm.membership, 392 | function(j) { 393 | length(intersect(i, j)) / length(union(i, j)) 394 | } 395 | ) %>% Reduce('cbind', .) 396 | } 397 | ) %>% Reduce('rbind', .) 398 | 399 | colnames(overlaps) <- rownames(overlaps) <- names(fcm.membership) 400 | 401 | if (method == 'scaled') { 402 | overlaps <- zeroOne(overlaps) 403 | } 404 | 405 | } else { 406 | stop("Not a valid overlap method") 407 | } 408 | 409 | object[['Overlaps']][[method]] <- overlaps 410 | return(object) 411 | } 412 | 413 | 414 | ############################################################################### 415 | #' Get overlaps computed from FCM object 416 | #' 417 | #' @param object An FCM object 418 | getOverlaps <- function(object, method = 'ratio') { 419 | return(object[['Overlaps']][[method]]) 420 | } 421 | 422 | 423 | ############################################################################### 424 | #' Plot connections between fuzzy modules, using the Mfuzz ratio product 425 | #' overlaps, and using the Mfuzz overlap PCA plotting method 426 | #' 427 | #' @param object An FCM object 428 | #' @param threshold Whether to override the current threshold in the FCM object 429 | plotOverlapPCA <- function(object, threshold = NULL, method = 'ratio') { 430 | 431 | if (is.null(getOverlaps(object, method = 'ratio'))) { 432 | stop('No overlap product matrix computed. Run computeOverlaps first.') 433 | } 434 | 435 | if (is.null(threshold)) { 436 | threshold <- getThreshold(object) 437 | } else { 438 | threshold <- threshold 439 | } 440 | 441 | pdf.name <- sprintf( 442 | "fuzzy_clusters/%s/OverlapPCA_thres%s.pdf", 443 | getTrialName(object), 444 | as.character(threshold) 445 | ) 446 | 447 | pdf( 448 | file = pdf.name, 449 | height = 5, 450 | width = 5, 451 | useDingbats = F 452 | ) 453 | overlap.plot( 454 | cl = getFclustObject(object), 455 | overlap = getOverlaps(object, method = method), 456 | thres = threshold 457 | ) 458 | 459 | dev.off() 460 | } 461 | 462 | 463 | ############################################################################### 464 | #' Plot the number of genes in each module, and the number of genes belonging 465 | #' to any module, at a given threshold. Helps find the membership value 466 | #' threshold such that every gene is included downstream, or not. 467 | #' 468 | #' @param object An FCM project 469 | #' @param threshold Whether to override the current threshold in the FCM object 470 | plotGenesAtThreshold <- function(object, threshold = NULL) { 471 | 472 | if (is.null(threshold)) { 473 | threshold <- getThreshold(object) 474 | } else { 475 | threshold <- threshold 476 | } 477 | 478 | fuzz.membership <- getMembership(object) 479 | trial.name <- getTrialName(object) 480 | 481 | max.membership <- sort(apply(fuzz.membership, 1, function(x) { max(x) })) 482 | genes.per.module <- apply(fuzz.membership, 2, function(x) { sum(x > threshold) }) 483 | 484 | pdf.name <- sprintf( 485 | "fuzzy_clusters/%s/GenesAtThreshold_%s.pdf", 486 | getTrialName(object), 487 | as.character(threshold) 488 | ) 489 | pdf(pdf.name, width = 8, height = 4) 490 | 491 | par(mfrow = c(1,2)) 492 | 493 | plot(max.membership, ylim = c(0,1)) 494 | abline(h = threshold) 495 | barplot(genes.per.module) 496 | dev.off() 497 | 498 | return(NULL) 499 | } 500 | 501 | 502 | ############################################################################### 503 | #' Plot GO enrichments 504 | #' 505 | #' @param object An FCM object 506 | #' @param max.terms The max number of Go terms to plot per cluster 507 | plotGOfcm <- function(object, 508 | ontology = 'MF', 509 | max.terms = 6, 510 | color.pal = viridis_pal(option = 'E')(100), 511 | ncol = 1, 512 | width = 7, 513 | height = 12, 514 | sel.clusters = NULL, 515 | facet = TRUE, 516 | make.file = TRUE) { 517 | 518 | fcm.go <- getGOEnrichments(object, ontology = ontology) 519 | 520 | # Subset to top enrichments and compute odds ratio 521 | 522 | gg.fcm.go <- fcm.go@compareClusterResult %>% 523 | rowwise() %>% 524 | mutate(gene.ratio = eval(parse(text = GeneRatio)), 525 | bg.ratio = eval(parse(text = BgRatio)), 526 | Fold.Enrichment = gene.ratio / bg.ratio) %>% 527 | group_by(Cluster) %>% 528 | slice_head(n = max.terms) 529 | 530 | if (! is.null(sel.clusters)) { 531 | gg.fcm.go %<>% filter(Cluster %in% sel.clusters) 532 | } 533 | 534 | go.gg <- ggplot(gg.fcm.go, aes(x = -log10(p.adjust), y = Description, fill = log2(Fold.Enrichment))) + 535 | geom_bar(stat = 'identity') + 536 | theme_classic() + 537 | scale_fill_gradientn(colors = color.pal, limits = c(0,NA)) + 538 | scale_y_discrete(position = 'right') 539 | 540 | go.gg2 <- ggplot(gg.fcm.go, aes(x = -log10(p.adjust), y = Description, fill = log2(Fold.Enrichment), size = Count)) + 541 | geom_point(shape = 21) + 542 | theme_classic() + 543 | 544 | scale_fill_viridis(option = 'A') 545 | 546 | if (facet == T) { 547 | go.gg <- go.gg + facet_wrap(~ Cluster, ncol = ncol, scales = "free_y", strip.position = 'left') 548 | go.gg2 <- go.gg + facet_wrap(~ Cluster, ncol = ncol, scales = 'free_y') 549 | } 550 | 551 | 552 | if (make.file == T) { 553 | pdf.name <- sprintf( 554 | "fuzzy_clusters/%s/GeneOntologies_%s_thres%s.pdf", 555 | getTrialName(object), 556 | ontology, 557 | as.character(getThreshold(object)) 558 | ) 559 | 560 | pdf(pdf.name, width = width, height = height, useDingbats = F) 561 | print(go.gg) 562 | print(go.gg2) 563 | dev.off() 564 | } else { 565 | print(go.gg) 566 | print(go.gg2) 567 | } 568 | 569 | } 570 | 571 | 572 | #' Add GO enrichments to FCM object. 573 | #' 574 | #' Uses the gene memberships computed by getMemberGeneList 575 | #' @param object An FCM object 576 | #' @param fun clusterProfiler parameter, which function to use for terms 577 | #' @param org.db clusterProfiler parameter, OrgDb to use for terms 578 | #' @param key.type clusterProfiler parameter, SYMBOL or ENSEMBL etc. 579 | #' @param ontology clusterProfiler parameter, BP/MF/CC 580 | #' @param universe clusterProfiler parameter, the background of genes to use 581 | addGOEnrichments <- function(object, 582 | fun = 'enrichGO', 583 | org.db = org.Hs.eg.db, 584 | key.type = 'SYMBOL', 585 | ontology = 'MF', 586 | universe = NULL) { 587 | 588 | fcm.membership <- getMemberGeneList(object) 589 | 590 | if (!is.null(universe)) { 591 | universe <- do.call(c, fcm.membership) %>% unique() 592 | } 593 | if (is.null(object[['Ontology.Enrichments']])) { 594 | object[['Ontology.Enrichments']] <- list() 595 | } 596 | 597 | fcm.go <- compareCluster( 598 | geneClusters = fcm.membership, 599 | fun = fun, 600 | OrgDb = org.db, 601 | keyType = key.type, 602 | universe = universe 603 | ) 604 | 605 | object[['Ontology.Enrichments']][[ontology]] <- fcm.go 606 | return(object) 607 | } 608 | 609 | 610 | ############################################################################### 611 | #' Get GO enrichments from FCM object 612 | #' 613 | #' @param object 614 | #' @param ontology The ontology name 615 | getGOEnrichments <- function(object, ontology = 'MF') { 616 | 617 | if (is.null(object[['Ontology.Enrichments']][[ontology]])) { 618 | stop("No ontology enrichments computed. Run addGOEnrichments") 619 | } 620 | 621 | return(object[['Ontology.Enrichments']][[ontology]]) 622 | 623 | } 624 | 625 | 626 | ############################################################################### 627 | #' This function plots the module gene expression in a projection of choice, 628 | #' from an expression dataset of choice 629 | #' 630 | #' @param object An FCM object 631 | #' @param plot.object A matrix, SCE, or otherwise expression data set 632 | #' @param plot.object.class A character vector specifying what class dataset it 633 | #' is 634 | #' @param objection A projection, e.g. the coordinates of a UMAP, with rows 635 | #' corresponding to the columns of the expression object 636 | #' @param objection.name A name for the projection 637 | #' @param dir.name The output directory name. 638 | #' @param weight.expression Whether or not to weight the gene expression by 639 | #' cluster membership 640 | #' @param scale.expression Whether or not to scale expression prior to plotting 641 | #' @param ... Additional arguments passed to geneSetAveragePlot() 642 | plotModuleExpression <- function(object, 643 | plot.object = sce, 644 | plot.object.class = 'sce', 645 | proj.name = 'SCE', 646 | dir.name = NULL, 647 | weight.expression = F, 648 | scale.expression = T, 649 | ...) { 650 | 651 | trial.name <- getTrialName(object) 652 | threshold.char <- as.character(getThreshold(object)) 653 | 654 | if (is.null(dir.name)) { 655 | dir.name <- sprintf( 656 | "fuzzy_clusters/%s/ModuleExpression_%s_thres%s", 657 | trial.name, 658 | proj.name, 659 | threshold.char 660 | ) 661 | } 662 | 663 | dir.create(dir.name, showWarnings = F) 664 | 665 | fcm.membership <- getMemberGeneList(object) 666 | if (weight.expression == T) { 667 | fcm.weights <- getMemberGeneWeights(object) 668 | } else { 669 | fcm.weights <- NULL 670 | } 671 | 672 | projection <- object[['Projections']][[proj.name]][['DF']] 673 | 674 | lapply( 675 | seq_along(fcm.membership), 676 | function(X) { 677 | 678 | genes <- fcm.membership[[X]] 679 | weights <- fcm.weights[[X]] 680 | module <- names(fcm.membership)[X] 681 | 682 | cat(sprintf("Plotting module %s\n", module)) 683 | 684 | pdf.name <- sprintf( 685 | "%s/%s_Module_%s.pdf", 686 | dir.name, 687 | proj.name, 688 | module 689 | ) 690 | 691 | pdf(file = pdf.name, useDingbats = F) 692 | geneSetAveragePlot( 693 | genes = genes, 694 | w = weights, 695 | object = plot.object, 696 | object.class = plot.object.class, 697 | projection = projection, 698 | scaled = scale.expression, 699 | plot.type = 'averages', 700 | plot.title = sprintf("Fuzzy Module %s Expression", module), 701 | ... 702 | ) 703 | dev.off() 704 | } 705 | ) 706 | } 707 | 708 | 709 | ############################################################################### 710 | #' For each FCM gene module, compute the weighted mean of gene-wise pseudotimes 711 | #' in the module. The weights are gene memberships in the module. Pseudotime 712 | #' is first computed on pseudobulks if not already done 713 | #' 714 | #' @param object An FCM object 715 | computeModulePseudotime <- function(object) { 716 | 717 | if (is.null(object[['sc.pseudotime']])) { 718 | stop("No pseudotime added") 719 | } 720 | 721 | if (is.null(object[['Pseudobulks']])) { 722 | stop("No pseudobulk information") 723 | } 724 | 725 | pseudotime <- object[['sc.pseudotime']] 726 | pseudobulks <- object[['Pseudobulks']][['sampleIdxL']] 727 | 728 | # Calculate bulk pseudotimes (from pseudobulk indices and SC pseudotime) 729 | if (is.null(object[['pb.pseudotime']])) { 730 | pb.pseudotimes <- lapply( 731 | pseudobulks, 732 | function(x) { 733 | mean(pseudotime[x]) 734 | } 735 | ) %>% Reduce(c, .) %>% zeroOne(.) 736 | } else { 737 | pb.pseudotimes <- object[['pb.pseudotime']] 738 | } 739 | 740 | # Get relevant objects 741 | fcm.membership <- getMemberGeneList(object) 742 | fcm.weights <- getMemberGeneWeights(object) 743 | mat <- getDataMatrix(object) 744 | 745 | module.pseudotime <- lapply( 746 | seq_along(fcm.membership), 747 | function(x) { 748 | 749 | genes <- names(fcm.membership[[x]]) 750 | weights <- fcm.weights[[x]] 751 | 752 | mpt <- genePseudotimes( 753 | genes = genes, 754 | object = logcounts(sce), 755 | pseudotimes = pseudotime, 756 | cell.subset = rownames(object[['sc.colData']]), 757 | id.type = 'ensembl' 758 | ) 759 | 760 | out <- weighted.mean(mpt, w = weights) 761 | return(out) 762 | } 763 | ) 764 | 765 | module.pseudotime <- Reduce(c, module.pseudotime) 766 | names(module.pseudotime) <- names(fcm.membership) 767 | 768 | object[['Module.Pseudotime']] <- module.pseudotime 769 | return(object) 770 | 771 | } 772 | 773 | 774 | ############################################################################### 775 | #' Reproject samples into Fuzzy Clustering space, using the centers matrix 776 | #' 777 | #' UMAP version 778 | #' @param object An FCM object 779 | #' @param objection.name A name for this projection 780 | #' @param umap.configuration A umap::umap() configuration object 781 | fcmUMAP <- function(object, 782 | proj.name = 'UMAP', 783 | umap.configuration) { 784 | 785 | centers <- getCenterMatrix(object) 786 | 787 | object[['UMAP']] <- umap::umap( 788 | t(centers), 789 | config = umap.configuration, 790 | method = 'naive' 791 | ) 792 | 793 | umap.df <- data.frame( 794 | UMAP1 = object[['UMAP']][['layout']][ , 1], 795 | UMAP2 = object[['UMAP']][['layout']][ , 2] 796 | ) 797 | 798 | if (is.null(object[['Projections']])) { 799 | object[['Projections']] <- list() 800 | } 801 | 802 | object[['Projections']][[proj.name]][['DF']] <- umap.df 803 | object[['Projections']][[proj.name]][['subspace']] <- centers 804 | 805 | return(object) 806 | } 807 | 808 | 809 | ############################################################################### 810 | #' Reproject samples into Fuzzy Clustering space, using the centers matrix 811 | #' 812 | #' PCA version 813 | #' @param object An FCM object 814 | #' @param umap.configuration A umap::umap() configuration object 815 | fcmPCA <- function(object) { 816 | 817 | centers <- getCenterMatrix(object) 818 | 819 | object[['PCA']] <- prcomp(t(centers)) 820 | 821 | pca.df <- data.frame( 822 | PC1 = object[['PCA']][['x']][ , 1], 823 | PC2 = object[['PCA']][['x']][ , 2] 824 | ) 825 | 826 | if (is.null(object[['Projections']])) { 827 | object[['Projections']] <- list() 828 | } 829 | 830 | object[['Projections']][[proj.name]][['DF']] <- pca.df 831 | object[['Projections']][[proj.name]][['subspace']] <- centers 832 | 833 | return(object) 834 | } 835 | 836 | 837 | ############################################################################### 838 | #' Perform clustering in FCM space on the pseudobulks or cells 839 | #' 840 | #' Takes the object, resolutions, and automatically performs at several 841 | #' resolutions. Can also be used to find reclustering centroids, if a 842 | #' resolution has already been set. 843 | fcmProjectionReclustering <- function(object, 844 | proj.name = 'UMAP', 845 | resolutions = seq(0.2,1.2, 0.2), 846 | find.centroids = T) { 847 | 848 | projection <- object[['Projections']][[proj.name]] 849 | 850 | if (is.null(projection)) { 851 | stop('Projection not found.') 852 | } 853 | 854 | if (find.centroids == F) { 855 | 856 | subspace <- projection[['subspace']] 857 | rownames(subspace) <- paste0("module", 1:nrow(subspace)) 858 | colnames(subspace) <- paste0("cell", 1:ncol(subspace)) 859 | 860 | clusts <- do.call( 861 | "data.frame", 862 | lapply( 863 | X = resolutions, 864 | FUN = function(cr) { 865 | clust.assignments <- clusterSeurat(subspace, resolution = cr) 866 | return(clust.assignments) 867 | } 868 | ) 869 | ) 870 | colnames(clusts) <- paste0('cr_', resolutions) 871 | 872 | clusterings <- as.list(clusts) 873 | 874 | object[['Projections']][[proj.name]][['Reclustering']] <- clusterings 875 | 876 | print(apply(clusts, 2, table)) 877 | } 878 | 879 | if (find.centroids == T) { 880 | 881 | clusterings <- projection[['Reclustering']] 882 | resolution <- clusterings[['Resolution']] 883 | 884 | if (is.null(resolution)) { 885 | stop("No resolution set. \n") 886 | } 887 | 888 | if (is.null(clusterings)) { 889 | stop("No reclustering performed. Run first with find.centroids = F") 890 | } 891 | 892 | clust.result <- clusterings[[ resolution ]] 893 | 894 | if (is.null(clust.result)) { 895 | stop("Resolution not found...") 896 | } 897 | 898 | dim1 <- projection[['DF']][ , 1] 899 | dim2 <- projection[['DF']][ , 2] 900 | 901 | cluster.centroids <- do.call( 902 | rbind, 903 | lapply( 904 | X = levels(clust.result), 905 | FUN = function(x) { 906 | 907 | cells <- which(clust.result == x) 908 | x0 <- mean(dim1[cells]) 909 | y0 <- mean(dim2[cells]) 910 | 911 | return(c(x0,y0)) 912 | } 913 | ) 914 | ) 915 | colnames(cluster.centroids) <- c("UMAP1", "UMAP2") 916 | cluster.centroids <- as.data.frame(cluster.centroids) 917 | nclust <- nrow(cluster.centroids) 918 | 919 | cluster.centroids$clusters <- paste0("c", seq(0, nclust - 1) ) 920 | 921 | # Add to object. 922 | object[['Projections']][[proj.name]][['Reclustering']][['Centroids']] <- cluster.centroids 923 | } 924 | 925 | return(object) 926 | } 927 | 928 | 929 | ############################################################################### 930 | #' Make a tidy dataframe from UMAP and PCA projections. 931 | #' 932 | #' Takes the pseudobulk colData, the UMAP and PCA projections, and a Louvain 933 | #' reclustering of the UMAP space, with resolution 934 | addFCMProjectionDataFrame <- function(object, 935 | metadata, 936 | proj.name = 'UMAP') { 937 | 938 | projection <- object[['Projections']][[proj.name]] 939 | reclustering <- projection[['Reclustering']] 940 | cluster.resolution <- reclustering[['Resolution']] 941 | clusters <- reclustering[[cluster.resolution]] 942 | 943 | if (is.null(clusters)) { 944 | stop('No reclustering added yet.') 945 | } 946 | 947 | proj.df <- projection[['DF']] 948 | out.df <- cbind( 949 | proj.df, 950 | metadata, 951 | clusters = clusters 952 | ) 953 | 954 | out.df <- out.df[ , !duplicated(colnames(out.df))] 955 | 956 | object[['Projections']][[proj.name]][['DF']] <- out.df 957 | return(object) 958 | } 959 | 960 | 961 | ############################################################################### 962 | #' Set Louvain reclustering resolution 963 | #' 964 | #' @param object AN FCM object 965 | #' @param clustering.name The name of the clustering 966 | #' @param resolution A character vector or index specifying the resolution, 967 | #' should correspond to the names or indices of object[['Reclustering']]. 968 | setReclusterResolution <- function(object, proj.name, resolution) { 969 | object[['Projections']][[proj.name]][['Reclustering']][['Resolution']] <- resolution 970 | l <- 971 | length( 972 | unique( 973 | object[['Projections']][[proj.name]][['Reclustering']][[resolution]] 974 | ) 975 | ) 976 | object[['Projections']][[proj.name]][['Reclustering']][['nclust']] <- l 977 | return(object) 978 | } 979 | 980 | 981 | ############################################################################### 982 | #' Compute the expression-based centroids of each module 983 | #' 984 | #' Finds the 'average cell' of a cluster and finds its projection into pre- 985 | #' computed module UMAP space. Also connects each module by the extent of 986 | #' overlap with other modules, from fuzzy clustering 987 | #' 988 | #' Think of modules as a PCA 989 | #' 990 | #' Centroids: [Modules X Cells] * T[Genes * Cells] * [GeneMembership X Modules] 991 | #' result: A 14 x 14 matrix 992 | computeModuleExpressionCentroids <- function(object, scale.basis = T, threshold = NULL) { 993 | 994 | # Get objects 995 | 996 | centers <- getCenterMatrix(object) 997 | membership <- getMembership(object) 998 | 999 | if (scale.bases == T) { 1000 | mat <- getDataMatrix(object) 1001 | } else { 1002 | mat <- object[['Counts.Matrix']] 1003 | if (is.null(mat)) { 1004 | stop('No counts matrix located ( object[[\'Counts.Matrix\']]') 1005 | } 1006 | } 1007 | 1008 | if (!is.null(threshold)) { 1009 | membership[membership < threshold] <- 0 1010 | } 1011 | 1012 | # Compute projection 1013 | 1014 | module.space <- scale(centers %*% t(mat) %*% membership) 1015 | centroid.proj <- predict(object[['UMAP']], module.space) 1016 | colnames(centroid.proj) <- c('UMAP1', 'UMAP2') 1017 | 1018 | # Make data frame 1019 | 1020 | module.pseudotime <- object[['Module.Pseudotime']] 1021 | 1022 | centroid.df <- data.frame( 1023 | centroid.proj, 1024 | pseudotime = module.pseudotime, 1025 | module.name = names(module.pseudotime) 1026 | ) 1027 | rownames(centroid.df) <- centroid.df$module.name 1028 | 1029 | object[['Module.Centroids']] <- centroid.df 1030 | return(object) 1031 | } 1032 | 1033 | 1034 | ############################################################################### 1035 | #' Draw a connectivity graph. 1036 | #' 1037 | #' using the specified overlap method, makes a dataframe connecting module 1038 | #' centroids. 1039 | #' @param object An FCM object 1040 | #' @param overlap.method Which overlap calculation to use. See computeOverlap. 1041 | drawModuleConnectivity <- function(object, overlap.method = 'ratio') { 1042 | 1043 | if (is.null(object[['Module.Centroids']])) { 1044 | stop('No module centroids computed. Run computeModuleExpressionCentroids') 1045 | } 1046 | 1047 | centroid.df <- object[['Module.Centroids']] 1048 | 1049 | fuzz.overlap <- object[['Overlaps']][[overlap.method]] 1050 | 1051 | overlap.df <- fuzz.overlap %>% 1052 | melt(value.name = 'overlap', varnames = c('from', 'to')) 1053 | 1054 | overlap.df$x1 <- centroid.df[overlap.df$from, 'UMAP1'] 1055 | overlap.df$x2 <- centroid.df[overlap.df$to, 'UMAP1'] 1056 | overlap.df$y1 <- centroid.df[overlap.df$from, 'UMAP2'] 1057 | overlap.df$y2 <- centroid.df[overlap.df$to, 'UMAP2'] 1058 | 1059 | object[['Overlap.Segments']][[overlap.method]] <- overlap.df 1060 | return(object) 1061 | } 1062 | 1063 | 1064 | ############################################################################### 1065 | #' Filter module connectivity by a threshold, and weight the connectivity 1066 | #' between the modules. Prepares an object for easy plotting. 1067 | #' 1068 | #' @param threshold Whether or not to override the object membership threshold 1069 | weightModuleConnectivity <- function(object, overlap.method, threshold = NULL) { 1070 | 1071 | if (is.null(threshold)) { 1072 | threshold <- getThreshold(object) 1073 | } 1074 | 1075 | if (is.null(object[['Overlap.Segments']][[overlap.method]])) { 1076 | stop('No overlap segments found for method. Run drawModuleConnectivity') 1077 | } 1078 | 1079 | overlap.df <- object[['Overlap.Segments']][[overlap.method]] 1080 | 1081 | filt.overlap.df <- overlap.df %>% filter(from != to & overlap > threshold) 1082 | filt.overlap.df$alpha <- filt.overlap.df$overlap 1083 | 1084 | object[['Overlap.Segments.Filtered']][[overlap.method]] <- filt.overlap.df 1085 | return(object) 1086 | } 1087 | 1088 | 1089 | ############################################################################### 1090 | #' Plot connectivity between module expression centroids 1091 | #' 1092 | #' @param object An FCM project 1093 | #' @param overlap.method The method used to compute overlaps 1094 | #' @param color.varaible The covariate used to color points underneath the 1095 | #' module connectivity graph. 1096 | plotModuleConnectivity <- function(object, 1097 | overlap.method = 'ratio', 1098 | proj.name = 'UMAP', 1099 | color.variable = 'pseudotime') { 1100 | 1101 | if (is.null(object[['Projections']][[proj.name]][['DF']])) { 1102 | stop('No tidy projection data found.') 1103 | } 1104 | 1105 | if (is.null(object[['Module.Centroids']])) { 1106 | stop('No module centroids found.') 1107 | } 1108 | 1109 | if (is.null(object[['Overlap.Segments.Filtered']][[overlap.method]])) { 1110 | stop('No overlap segments found.') 1111 | } 1112 | 1113 | projections <- object[['Projections']][[proj.name]][['DF']] 1114 | centroid.df <- object[['Module.Centroids']] 1115 | overlap.df <- object[['Overlap.Segments.Filtered']][[overlap.method]] 1116 | trial.name <- object[['Trial.Name']] 1117 | 1118 | cp <- ggplot(projections, aes_string(x = 'UMAP1', y = 'UMAP2', color = color.variable)) + 1119 | geom_point(alpha = 0.2, size = 2, shape = 16) + 1120 | guides(color = guide_legend(override.aes = list(alpha = 1)), 1121 | alpha = guide_legend(title = str_to_title(overlap.method))) + 1122 | geom_point(data = centroid.df, color = 'black', shape = 8, size = 1.5) + 1123 | geom_label_repel(data = centroid.df, color = 'black', aes(label = paste0('m', module.name)), size = 3, label.padding = 0.1) + 1124 | geom_segment(data = overlap.df, inherit.aes = F, aes(x = x1, y = y1, xend = x2, yend = y2, alpha = alpha)) + 1125 | theme_classic() + 1126 | umap.theme + 1127 | theme(aspect.ratio = 1, 1128 | legend.position = "right") + 1129 | scale_color_viridis(option = "C") + 1130 | labs(title = "Module centroids and connectivity") 1131 | 1132 | pdf.name <- sprintf( 1133 | 'fuzzy_clusters/%s/Projected_Module_Connectivity_%s.pdf', 1134 | trial.name, 1135 | overlap.method 1136 | ) 1137 | pdf( 1138 | file = pdf.name, 1139 | width = 5, 1140 | height = 5, 1141 | useDingbats = F 1142 | ) 1143 | print(cp) 1144 | dev.off() 1145 | return(cp) 1146 | } 1147 | 1148 | 1149 | ############################################################################### 1150 | #' Plot covariates in the FCM projection 1151 | #' 1152 | #' Covariates should come from the projection data frame. You can pass titles 1153 | #' and color palettes and alphas in, and you can specify *which* projection 1154 | #' gets used. For instance, single cell, or pseudobulk. 1155 | #' @param object an FCM object 1156 | #' @param covariate A metadata column 1157 | #' @param plot.title A character string 1158 | #' @param color.palette A vector of colors. If the covariate is identified as 1159 | #' a factor, it will use the vector as is. If the covariate is identified as 1160 | #' numeric / continuous, it will interpolate the colors. 1161 | #' @param alpha Plot point alpha 1162 | #' @param objection Name (in the FCM object) of the projection to use 1163 | #' @param add.layers A dataframe that can be concisely passed to 1164 | #' additional.geoms. 1165 | #' @param add.geoms Character strings that explicitly define additional 1166 | #' ggproto objects, which will be parsed and added to the output ggplot. 1167 | plotProjection <- function(object, 1168 | proj.name = 'UMAP', 1169 | covariate = c('group', 'age', 'pseudotime', 'clusters'), 1170 | plot.title = c('Original cluster', 'Age', 'Pseudotime', 'Reclustering'), 1171 | color.palette, 1172 | alpha = 1, 1173 | point.size = 1, 1174 | add.layers = NULL, 1175 | add.geoms = NULL) { 1176 | 1177 | DF <- object[['Projections']][[proj.name]][['DF']] 1178 | 1179 | if (is.null(DF)) { 1180 | stop('No tidy projection data frame found.') 1181 | } 1182 | 1183 | if (is.null(DF[[covariate]])) { 1184 | stop('Covariate not found in projection data frame.') 1185 | } 1186 | 1187 | if (grepl('umap', tolower(proj.name))) { 1188 | dim1 <- 'UMAP1' 1189 | dim2 <- 'UMAP2' 1190 | } else if (grepl('pc', tolower(proj.name))) { 1191 | dim1 <- 'PC1' 1192 | dim2 <- 'PC2' 1193 | } else { 1194 | dim1 <- 'UMAP1' 1195 | dim2 <- 'UMAP2' 1196 | } 1197 | 1198 | if (class(DF[[covariate]]) == 'factor' | class(DF[[covariate]]) == 'character') { 1199 | color <- 'scale_color_manual(values = color.palette)' 1200 | color.expr <- eval(parse(text = color)) 1201 | } 1202 | 1203 | if (class(DF[[covariate]]) == 'numeric') { 1204 | color <- 'scale_color_gradientn(colors = color.palette)' 1205 | color.expr <- eval(parse(text = color)) 1206 | } 1207 | 1208 | p <- ggplot(DF, aes_string(x = dim1, y = dim2, color = covariate)) + 1209 | geom_point(alpha = alpha, size = point.size, shape = 16) + 1210 | theme_classic() + 1211 | umap.theme + 1212 | theme(aspect.ratio = 1, 1213 | legend.position = "right") + 1214 | labs(title = plot.title) + 1215 | color.expr 1216 | 1217 | if (!is.null(add.geoms)) { 1218 | 1219 | geom.expr <- lapply(add.geoms, function(x) { 1220 | eval(parse(text = x)) 1221 | }) 1222 | 1223 | p <- p + geom.expr 1224 | } 1225 | 1226 | return(p) 1227 | } 1228 | 1229 | 1230 | ############################################################################### 1231 | addLinkedATACModules <- function(object, 1232 | link.object, 1233 | bg.link.object = NULL, 1234 | make.unique = F) { 1235 | 1236 | fcm.membership <- getMemberGeneList(object) 1237 | 1238 | fcm.atac <- lapply( 1239 | fcm.membership, 1240 | function(x) { 1241 | findLinkedPeaks(genes = x, object = link.object, make.unique = make.unique) 1242 | } 1243 | ) 1244 | 1245 | if (!is.null(bg.link.object)) { 1246 | fcm.background.atac <- lapply( 1247 | fcm.membership, 1248 | function(x) { 1249 | findLinkedPeaks(genes = x, object = bg.link.object, make.unique = make.unique) 1250 | } 1251 | ) 1252 | 1253 | object[['Module.Background.Linked.Peaks']] <- fcm.background.atac 1254 | } 1255 | 1256 | object[['Module.Linked.Peaks']] <- fcm.atac 1257 | 1258 | return(object) 1259 | } 1260 | 1261 | 1262 | 1263 | 1264 | 1265 | 1266 | 1267 | ############################################################################### 1268 | #' Impute missing features from an orthogonal dataset 1269 | #' 1270 | #' Allows easy projection into the FCM space. Number of features must match. 1271 | #' Function also outputs the list of genes that needed imputing (that were 1272 | #' missing from the new query dataset). Returns the actual matrix. 1273 | #' 1274 | #' @param object An FCM object 1275 | #' @param newdata.matrix A new data matrix to project (missing values will be 1276 | #' imputed) 1277 | #' @param convert.ids Whether or not to convert IDs from symbols to ENSEMBL 1278 | #' @param impute.fun Not fully implemented -- a function to use for imputation 1279 | #' @param verbose Whether to print the genes that are being imputed 1280 | imputeMissingFeatures <- function(object = NULL, 1281 | mat = NULL, 1282 | newdata.matrix, 1283 | convert.ids = T, 1284 | impute.fun = 'median', 1285 | verbose = T) { 1286 | 1287 | if (is.null(object)) { 1288 | mat <- mat 1289 | } else { 1290 | mat <- getDataMatrix(object) 1291 | } 1292 | 1293 | mat2 <- newdata.matrix 1294 | 1295 | if (convert.ids == T) { 1296 | rownames(mat2) <- convertGeneIDs(rownames(mat2), name2ensembl) 1297 | } 1298 | 1299 | missing.data <- rownames(mat)[! rownames(mat) %in% rownames(mat2)] 1300 | 1301 | fix.mat <- do.call( 1302 | rbind, 1303 | lapply(seq_along(rownames(mat)), function(x) { 1304 | 1305 | id <- rownames(mat)[x] 1306 | 1307 | if (! id %in% rownames(mat2)) { 1308 | 1309 | if (impute.fun == 'median') { 1310 | out <- rep(median(mat2), ncol(mat2)) 1311 | } else if (impute.fun == 'zero') { 1312 | out <- rep(0, ncol(mat2)) 1313 | } 1314 | 1315 | } else { 1316 | out <- mat2[id, ] 1317 | } 1318 | 1319 | return(out) 1320 | }) 1321 | ) 1322 | rownames(fix.mat) <- rownames(mat) 1323 | 1324 | if (convert.ids == T) { 1325 | missing.data <- convertGeneIDs(missing.data, ensembl2name) 1326 | } 1327 | 1328 | if (verbose == T) { 1329 | cat( 1330 | sprintf( 1331 | 'Imputed genes not found in query: %s\n\n', 1332 | as.character(length(missing.data)) 1333 | ) 1334 | ) 1335 | if (length(missing.data) == 0) { 1336 | report <- 'None.' 1337 | } else { 1338 | report <- paste0(missing.data, collapse = ', ') 1339 | } 1340 | cat(report) 1341 | cat('\n') 1342 | } 1343 | 1344 | return(fix.mat) 1345 | } 1346 | 1347 | 1348 | ############################################################################### 1349 | #' Project data into the FCM space. 1350 | #' 1351 | #' This could be single cell RNA seq or ATAC seq data, or something else that 1352 | #' can be coerced to match the features of the FCM object. This function adds 1353 | #' an element to the FCM object [['Projections']][[output.name]] 1354 | #' 1355 | #' The goal is a module X cell matrix, where each row (module) is scaled across 1356 | #' all the cells. For single cells: 1357 | #' [Modules X Genes] * [Genes X Cells] = [Modules X Cells] 1358 | #' 1359 | projectCells <- function(object, 1360 | cell.matrix, 1361 | proj.name, 1362 | metadata, 1363 | add.matrix = T, 1364 | as.separate.object = F) { 1365 | 1366 | # get matrices 1367 | gene.ids <- rownames(getDataMatrix(object)) 1368 | membership <- getMembership(object) 1369 | 1370 | # calculate membership matrix product 1371 | filt.cell.matrix <- cell.matrix[gene.ids, ] 1372 | product.mat <- rowScale(t(membership) %*% filt.cell.matrix) 1373 | 1374 | pred <- predict(object[['UMAP']], t(product.mat)) 1375 | 1376 | # add matrix 1377 | 1378 | if (is.null(object[['Projections']][[proj.name]])) { 1379 | object[['Projections']][[proj.name]] <- list() 1380 | } 1381 | 1382 | if (add.matrix == T) { 1383 | 1384 | object[['Projections']][[proj.name]][['Data.Matrix']] <- filt.cell.matrix 1385 | object[['Projections']][[proj.name]][['subspace']] <- product.mat 1386 | 1387 | } 1388 | 1389 | pred.df <- data.frame( 1390 | UMAP1 = pred[ ,1], 1391 | UMAP2 = pred[ ,2] 1392 | ) 1393 | 1394 | proj.df <- cbind( 1395 | pred.df, 1396 | metadata 1397 | ) 1398 | 1399 | object[['Projections']][[proj.name]][['DF']] <- proj.df 1400 | 1401 | if (as.separate.object == F) { 1402 | return(object) 1403 | } else { 1404 | return(list( 1405 | Data.Matrix = filt.cell.matrix, 1406 | subspace = product.mat, 1407 | DF = proj.df 1408 | )) 1409 | } 1410 | } 1411 | 1412 | ############################################################################### 1413 | #' Project data from a subset of genes into the FCM space. 1414 | #' 1415 | #' Other features will be zeroed out ~ note that this is a kind of trick 1416 | #' 1417 | #' Projection mat could be single cell RNA seq or ATAC seq data, or something 1418 | #' else that can be coerced to match the features of the FCM object. This 1419 | #' function can add elements to the FCM object [['Projections']][[output.name]] 1420 | #' 1421 | projectSubset <- function(genes, 1422 | object = fuzz, 1423 | base.matrix, 1424 | proj.name, 1425 | metadata, 1426 | reference.metadata, 1427 | impute.function = 'zero', 1428 | plot.density = .5, 1429 | add.matrix = F, 1430 | as.separate.object = T) { 1431 | 1432 | cat('Imputing...\n') 1433 | imputed.matrix <- imputeMissingFeatures( 1434 | object = object, 1435 | newdata.matrix = base.matrix[genes, ], 1436 | convert.ids = T, 1437 | impute.fun = impute.function, 1438 | verbose = F 1439 | ) 1440 | 1441 | cat('Projecting...\n') 1442 | projection <- projectCells( 1443 | object = object, 1444 | cell.matrix = imputed.matrix, 1445 | proj.name = proj.name, 1446 | metadata = metadata, 1447 | add.matrix = F, 1448 | as.separate.object = F 1449 | ) 1450 | 1451 | out <- projection[['Projections']][[proj.name]][['DF']] 1452 | 1453 | cat('Joining with reference...\n') 1454 | plot.df <- out %>% 1455 | inner_join(reference.metadata, by = c('pseudotime', 'group')) 1456 | 1457 | cat('Plotting...\n') 1458 | 1459 | # From here this code is hard-written for our particular application... 1460 | 1461 | pdf.name <- sprintf('fuzzy_clusters/%s/%s_projection.pdf', getTrialName(object), proj.name) 1462 | plot.name1 <- sprintf('Gene subset projection, all samples: %s', proj.name) 1463 | plot.name2 <- sprintf('Gene subset projection, branches: %s', proj.name) 1464 | 1465 | pdf(pdf.name, useDingbats = F, width = 5.5, height = 4.5) 1466 | 1467 | pr1 <- plotProjection( 1468 | object = projection, 1469 | proj.name = proj.name, 1470 | covariate = 'group', 1471 | plot.title = plot.name1, 1472 | color.palette = glial.colors.atac$color 1473 | ) 1474 | pr2 <- plotProjection( 1475 | object = projection, 1476 | proj.name = proj.name, 1477 | covariate = 'is.Branch', 1478 | plot.title = plot.name2, 1479 | color.palette = c(glial.colors.atac$color[c(6,5,3)], 'grey67') 1480 | ) 1481 | 1482 | # Arrows 1483 | pr3 <- ggplot(plot.df, aes(x = UMAP1.y, y = UMAP2.y)) + 1484 | geom_point(color = 'grey67') + 1485 | geom_segment(data = plot.df %>% filter(is.Branch != 'Not Branch'), 1486 | arrow = arrow(length = unit(.1, 'inches')), 1487 | aes(x = UMAP1.y, xend = UMAP1.x, y = UMAP2.y, yend = UMAP2.x, color = is.Branch), 1488 | alpha = .5) + 1489 | geom_point(data = plot.df %>% filter(is.Branch != 'Not Branch'), 1490 | aes(x = UMAP1.x, y = UMAP2.x, color = is.Branch)) + 1491 | theme_classic() + 1492 | theme(aspect.ratio = 1) + 1493 | scale_color_manual(values = glial.colors.atac$color[c(6,5,3)]) + 1494 | labs(title = plot.name1) 1495 | 1496 | sampled.plot.df <- plot.df %>% 1497 | sample_n(ceiling(nrow(plot.df) * plot.density), replace = F) 1498 | 1499 | pr4 <- ggplot(sampled.plot.df, aes(x = UMAP1.y, y = UMAP2.y)) + 1500 | geom_point(color = 'grey67') + 1501 | geom_segment(data = sampled.plot.df, 1502 | arrow = arrow(length = unit(.1, 'inches')), 1503 | aes(x = UMAP1.y, xend = UMAP1.x, y = UMAP2.y, yend = UMAP2.x, color = group), 1504 | alpha = .5) + 1505 | theme_classic() + 1506 | theme(aspect.ratio = 1) + 1507 | scale_color_manual(values = glial.colors.atac$color) + 1508 | labs(title = plot.name2) 1509 | 1510 | print(pr1) 1511 | print(pr2) 1512 | print(pr3) 1513 | print(pr4) 1514 | 1515 | dev.off() 1516 | 1517 | return(plot.df) 1518 | 1519 | } 1520 | 1521 | ############################################################################### 1522 | #' Quick save function 1523 | #' 1524 | #' @param object FCM object 1525 | #' @param file A character file name. Defaults to trial name 1526 | saveFCM <- function(object, file = NULL) { 1527 | 1528 | if (is.null(file)) { 1529 | trial.name <- object[['Trial.Name']] 1530 | file <- sprintf('fuzzy_clusters/%s/FCM_Object.RDS', trial.name) 1531 | } 1532 | saveRDS(object, file) 1533 | } 1534 | 1535 | 1536 | ############################################################################### 1537 | #' Get genes in a particular module 1538 | #' 1539 | #' Quickly access genes from a module. Takes integer input, where integers 1540 | #' correspond to module names as well (1 = m1) 1541 | getModules <- function(module, object = fuzz) { 1542 | return(getMemberGeneList(object)[[module]]) 1543 | } 1544 | 1545 | 1546 | ############################################################################### 1547 | #' Which genes are transcription factors in a list? 1548 | #' 1549 | #' @param genes A vector of genes 1550 | #' @param return What to return. Logical, or names 1551 | transcriptionFactors <- function(genes, return = 'names') { 1552 | if (return == 'names') { 1553 | return(genes[genes %in% tfs]) 1554 | } else { 1555 | return(genes %in% tfs) 1556 | } 1557 | } 1558 | 1559 | 1560 | ############################################################################### 1561 | #' Plot gene expression in the FCM object. 1562 | #' 1563 | #' Convenience function for quick access to data. 1564 | #' Parameters follow geneSetAveragePlot so they won't be listed here. 1565 | plotExpression <- function(genes, 1566 | project = fuzz, 1567 | plot.object = fuzz[['Data.Matrix']], 1568 | plot.object.class = 'matrix', 1569 | proj.name = 'UMAP', 1570 | scale.expression = F, 1571 | plot.type = NULL, 1572 | convert = T, 1573 | point.size = 2, 1574 | aspectratio = 1, 1575 | trim = NULL, 1576 | color.palette = plant_palettes[['Iris']], 1577 | print = T, 1578 | facet.rows = NULL) { 1579 | 1580 | projection <- fuzz[['Projections']][[proj.name]][['DF']] 1581 | 1582 | if (is.null(plot.type)) { 1583 | if (length(genes) == 1) { 1584 | plot.type = 'single' 1585 | } else { 1586 | plot.type <- 'panels' 1587 | if (is.null(facet.rows)) { 1588 | facet.rows <- floor(length(genes)/3) 1589 | } 1590 | } 1591 | } 1592 | 1593 | geneSetAveragePlot( 1594 | genes = genes, 1595 | object = plot.object, 1596 | object.class = plot.object.class, 1597 | projection = projection, 1598 | scaled = scale.expression, 1599 | trim = trim, 1600 | plot.type = plot.type, 1601 | convert = convert, 1602 | point.size = point.size, 1603 | aspectratio = aspectratio, 1604 | color.palette = color.palette, 1605 | print = print, 1606 | num.panel.rows = facet.rows 1607 | ) 1608 | 1609 | 1610 | } 1611 | 1612 | ############################################################################### 1613 | #' Plot gene score in the FCM object. 1614 | #' 1615 | #' Convenience function for quick access to data. 1616 | #' Parameters follow geneSetAveragePlot so they won't be listed here. 1617 | plotActivity <- function(genes, 1618 | project = fuzz, 1619 | plot.object = fuzz[['Projections']][['ATAC.UMAP']][['Data.Matrix']], 1620 | plot.object.class = 'matrix', 1621 | proj.name = 'ATAC.UMAP', 1622 | scale.expression = F, 1623 | plot.title = 'ATAC Gene Scores', 1624 | plot.type = NULL, 1625 | convert = T, 1626 | point.size = 2, 1627 | aspectratio = 1, 1628 | guide.name = 'Gene score', 1629 | color.palette = rev(brewer.pal(9, 'YlGnBu')), 1630 | trim = NULL) { 1631 | 1632 | projection <- fuzz[['Projections']][[proj.name]][['DF']] 1633 | 1634 | if (is.null(plot.type)) { 1635 | if (length(genes) == 1) { 1636 | plot.type = 'single' 1637 | plot.title = genes 1638 | } else { 1639 | plot.type <- 'panels' 1640 | } 1641 | } 1642 | 1643 | geneSetAveragePlot( 1644 | genes = genes, 1645 | object = plot.object, 1646 | object.class = plot.object.class, 1647 | projection = projection, 1648 | scaled = scale.expression, 1649 | plot.title = plot.title, 1650 | plot.type = plot.type, 1651 | guide.name = guide.name, 1652 | convert = convert, 1653 | point.size = point.size, 1654 | aspectratio = aspectratio, 1655 | color.palette = color.palette, 1656 | trim = trim 1657 | ) 1658 | } 1659 | 1660 | ############################################################################### 1661 | #' Plot gene score in the FCM object. 1662 | #' 1663 | #' Convenience function for quick access to data. 1664 | #' Parameters follow geneSetAveragePlot so they won't be listed here. 1665 | plotCvar <- function(motifs, 1666 | project = fuzz, 1667 | plot.object = glial.pb.cvar.mat, 1668 | plot.object.class = 'matrix', 1669 | proj.name = 'ATAC.UMAP', 1670 | scale.expression = T, 1671 | plot.title = 'ATAC ChromVAR deviations', 1672 | plot.type = NULL, 1673 | convert = F, 1674 | point.size = 2, 1675 | aspectratio = 1, 1676 | guide.name = 'Deviation', 1677 | color.palette = viridis_pal()(100), 1678 | trim = NULL) { 1679 | 1680 | projection <- fuzz[['Projections']][[proj.name]][['DF']] 1681 | 1682 | motifs <- toupper(motifs) 1683 | motifs <- grep(motifs, toupper(rownames(plot.object)), value = T) 1684 | 1685 | if (is.null(plot.type)) { 1686 | if (length(motifs) == 1) { 1687 | plot.type = 'single' 1688 | plot.title = motifs 1689 | } else { 1690 | plot.type <- 'panels' 1691 | } 1692 | } 1693 | print(motifs) 1694 | geneSetAveragePlot( 1695 | genes = motifs, 1696 | object = plot.object, 1697 | object.class = plot.object.class, 1698 | projection = projection, 1699 | scaled = scale.expression, 1700 | plot.title = plot.title, 1701 | plot.type = plot.type, 1702 | guide.name = guide.name, 1703 | convert = convert, 1704 | point.size = point.size, 1705 | aspectratio = aspectratio, 1706 | color.palette = color.palette, 1707 | trim = trim 1708 | ) 1709 | 1710 | 1711 | } 1712 | 1713 | 1714 | ############################################################################### 1715 | addModuleIgraph <- function(object, 1716 | overlap.method = 'ratio', 1717 | threshold = NULL, 1718 | graph.mode = 'undirected') { 1719 | 1720 | if (is.null(threshold)) { 1721 | threshold <- getThreshold(object) 1722 | } 1723 | 1724 | adjacency.matrix <- getOverlaps(object, overlap.method) 1725 | adjacency.matrix[adjacency.matrix < threshold] <- 0 1726 | 1727 | graph <- igraph::graph_from_adjacency_matrix( 1728 | adjmatrix = adjacency.matrix, 1729 | mode = graph.mode, 1730 | weighted = T, 1731 | diag = F 1732 | ) 1733 | 1734 | set.vertex.attribute(graph, 'pseudotime', value = fuzz[['Module.Pseudotime']]) 1735 | 1736 | object[['Graph']][[overlap.method]] <- graph 1737 | plot.igraph(graph) 1738 | return(object) 1739 | } 1740 | 1741 | 1742 | 1743 | 1744 | 1745 | ############################################################################### 1746 | #' Export lists of genes belonging to each module as TSV 1747 | #' 1748 | #' @param object FCM object 1749 | #' @param table.name The name of the table. Defaults to Module_Gene_Lists 1750 | exportModuleGeneLists <- function(object, 1751 | core.only = F, 1752 | table.name = NULL, 1753 | return = F) { 1754 | 1755 | trial.name <- getTrialName(object) 1756 | membership <- getMemberGeneList(object) 1757 | 1758 | df <- do.call( 1759 | rbind, 1760 | lapply(seq_along(membership), function(x) { 1761 | 1762 | genes <- membership[[x]] 1763 | 1764 | if (core.only == T) { 1765 | other.mod.i <- seq_along(membership)[seq_along(membership) != x] 1766 | other.mods <- Reduce('c', membership[other.mod.i]) 1767 | genes <- genes[!genes %in% other.mods] 1768 | } 1769 | 1770 | ids <- names(genes) 1771 | 1772 | if (length(genes) == 0) { 1773 | genes <- NA 1774 | ids <- NA 1775 | } 1776 | 1777 | data.frame( 1778 | cbind( 1779 | module = paste0('m', as.character(x)), 1780 | gene.symbol = genes, 1781 | gene.id = ids 1782 | ) 1783 | ) 1784 | }) 1785 | ) 1786 | 1787 | if (is.null(table.name)) { 1788 | if (core.only == T) { 1789 | core <- "Core_" 1790 | } else { 1791 | core <- "" 1792 | } 1793 | table.name <- sprintf('fuzzy_clusters/%s/%sModule_Gene_Lists.txt', trial.name, core) 1794 | } 1795 | 1796 | if (return == T) { 1797 | return(df) 1798 | } else { 1799 | 1800 | write.table( 1801 | x = df, 1802 | file = table.name, 1803 | quote = F, 1804 | sep = "\t", 1805 | row.names = F, 1806 | col.names = T 1807 | ) 1808 | 1809 | } 1810 | 1811 | } 1812 | 1813 | exportModuleOverlaps <- function(object, return = F) { 1814 | 1815 | trial.name = getTrialName(object) 1816 | 1817 | membership <- getMemberGeneList(object) 1818 | 1819 | df <- 1820 | lapply(seq_along(membership), function(i) { 1821 | lapply(seq_along(membership), function(j) { 1822 | 1823 | intersections <- intersect(getModules(i), getModules(j)) 1824 | intersect.ids <- convertGeneIDs(intersections, name2ensembl) 1825 | 1826 | data.frame( 1827 | cbind( 1828 | module1 = paste0('m', as.character(i)), 1829 | module2 = paste0('m', as.character(j)), 1830 | gene.symbol = intersections, 1831 | gene.id = intersect.ids 1832 | ) 1833 | ) 1834 | }) %>% Reduce('rbind', .) 1835 | }) %>% Reduce('rbind', .) 1836 | 1837 | df %<>% filter(module1 != module2) 1838 | 1839 | table.name <- sprintf('fuzzy_clusters/%s/Module_Gene_Overlaps.txt', trial.name) 1840 | if (return == T) { 1841 | return(df) 1842 | } else { 1843 | 1844 | write.table( 1845 | x = df, 1846 | file = table.name, 1847 | quote = F, 1848 | sep = "\t", 1849 | row.names = F, 1850 | col.names = T 1851 | ) 1852 | 1853 | } 1854 | } 1855 | 1856 | maxMemberhip <- function(object, threshold = NULL) { 1857 | 1858 | if (is.null(threshold)) { 1859 | threshold <- getThreshold(object) 1860 | } 1861 | 1862 | mm <- getMembership(object) 1863 | 1864 | apply(mm, 2, max) 1865 | 1866 | } 1867 | 1868 | overlap.plot.2 <- function(object, 1869 | overlap.method) { 1870 | 1871 | centers <- getCenterMatrix(object) 1872 | fcm <- getMemberGeneList(object) 1873 | fuzz.overlap <- object[['Overlaps']][[overlap.method]] 1874 | threshold <- getThreshold(object) 1875 | 1876 | pca <- prcomp(centers, scale = TRUE) 1877 | 1878 | pcs <- t(t(pca[[2]]) %*% t(centers)) 1879 | pc.df <- data.frame(PC1 = pcs[ , 1], PC2 = pcs[ , 2]) 1880 | 1881 | pc.df$n.genes <- do.call(c, lapply(fcm, length)) 1882 | pc.df$module <- paste0('m', seq_len(nrow(pc.df))) 1883 | 1884 | overlap.df <- fuzz.overlap %>% 1885 | melt(value.name = 'overlap', varnames = c('from' ,'to')) %>% 1886 | filter(from != to, overlap > threshold) 1887 | 1888 | overlap.df$x1 <- pc.df[overlap.df$from, 'PC1'] 1889 | overlap.df$x2 <- pc.df[overlap.df$to, 'PC1'] 1890 | overlap.df$y1 <- pc.df[overlap.df$from, 'PC2'] 1891 | overlap.df$y2 <- pc.df[overlap.df$to, 'PC2'] 1892 | 1893 | gg <- ggplot(pc.df, aes(x = PC1, y = PC2, size = n.genes)) + 1894 | geom_segment(data = overlap.df, inherit.aes = F, aes(x = x1, y = y1, xend = x2, yend = y2, alpha = overlap)) + 1895 | geom_point(color = 'black', fill = '#FF3300', shape = 21) + 1896 | theme_classic() + 1897 | theme(aspect.ratio = 1) + 1898 | geom_text_repel(aes(label = module), size = 3, point.padding = .3, min.segment.length = 1.5) + 1899 | labs(title = 'Relationships between modules') 1900 | print(gg) 1901 | } 1902 | 1903 | plotModuleHeatmap <- function(object) { 1904 | 1905 | dat <- getDataMatrix(object) 1906 | fcm <- getMemberGeneList(object) 1907 | col.data <- object[['colData']] 1908 | 1909 | mod.order <- order(object[['Module.Pseudotime']]) 1910 | row.order <- names(fcm[mod.order]) 1911 | col.order <- order(col.data[['pseudotime']], decreasing = F) 1912 | 1913 | dat <- dat[] 1914 | 1915 | } 1916 | 1917 | isInModule <- function(gene, object = fuzz) { 1918 | 1919 | fcm <- getMemberGeneList(object) 1920 | 1921 | is.in <- do.call(c, lapply(seq_along(fcm), function(x) { gene %in% fcm[[x]] } )) 1922 | 1923 | return(names(fcm)[is.in]) 1924 | 1925 | } 1926 | 1927 | 1928 | ############################################################################### 1929 | #' Plot membership extent in modules 1930 | #' 1931 | #' I use this to get color scales which can be arranged as a graph by module 1932 | #' connectivity 1933 | #' @param genes 1934 | #' @param object 1935 | #' @param ORD the order of the factors/modules in the plot 1936 | plotGeneMembership <- function(gene, 1937 | object = fuzz, 1938 | membership.quantiles = c(0, 0.06, 0.12, 0.24, 0.48, 1), 1939 | quantile.color.vals = colorRampPalette(plant_palettes$`Jasminium polyanthum A`[1:8])(5)) { 1940 | 1941 | df <- cbind(fuzz$Module.Centroids, geneMembershipDF(genes = gene)) 1942 | 1943 | df %<>% 1944 | mutate(Membership.Score = cut( 1945 | x = Membership, 1946 | breaks = membership.quantiles, labels = c(1,2,3,4,5), 1947 | ordered_result = T 1948 | )) 1949 | 1950 | gg <- plotExpression( 1951 | genes = gene, 1952 | color.palette = brewer.pal(9, "Greys")[2:8], 1953 | plot.object = fuzz$Counts.Matrix, 1954 | print = F, 1955 | point.size = 2 1956 | ) + 1957 | theme(aspect.ratio = 1, 1958 | panel.background = element_blank(), 1959 | panel.border = element_rect(fill = NA), 1960 | axis.line = element_blank(), 1961 | axis.text = element_blank(), 1962 | axis.ticks = element_blank(), 1963 | axis.title = element_blank()) + 1964 | geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2), 1965 | data = segments, 1966 | inherit.aes = F, 1967 | color = 'black') + 1968 | geom_point(inherit.aes = F, size = 8, data = df, shape = 21, aes(x = UMAP1, y = UMAP2, fill = Membership.Score)) + 1969 | geom_text(inherit.aes = F, size = 3, data = df, aes(x = UMAP1, y = UMAP2, label = Module)) + 1970 | scale_fill_manual(values = quantile.color.vals, drop = F) + 1971 | labs(title = gene) 1972 | print(gg) 1973 | 1974 | } 1975 | 1976 | 1977 | ############################################################################### 1978 | #' Plot motif enrichments between modules 1979 | #' 1980 | #' I use this to get color scales which can be arranged as a graph by module 1981 | #' connectivity 1982 | plotMotifsInModules <- function(motif, 1983 | enr = mod.motif.enr, 1984 | to.plot = 'pval', 1985 | color.pal = brewer.pal(9, 'Blues'), 1986 | ORD = c(6,9,11,5,14,2,10,3,8,12,1,7,4,13)) { 1987 | 1988 | titles <- paste0(toupper(motif), collapse = ' ') 1989 | motif %<>% toupper(.) 1990 | 1991 | if (grepl('pval|p.val', to.plot)) { 1992 | to.plot <- 'neg.log10.p' 1993 | } else { 1994 | to.plot <- 'log2FoldEnrichment' 1995 | } 1996 | 1997 | df <- mod.motif.enr %>% 1998 | filter(short.name == motif) %>% 1999 | mutate(neg.log10.p = ifelse(log2FoldEnrichment < 0, 0, neg.log10.p)) 2000 | 2001 | if (! is.null(ORD)) { 2002 | df$group <- factor(df$group, levels = paste0('m', as.character(ORD))) 2003 | } 2004 | 2005 | gg <- ggplot(df, aes_string(x = 'group', y = '1', fill = to.plot)) + 2006 | geom_point(size = 9, shape = 21) + 2007 | scale_fill_gradientn(colors = color.pal) 2008 | 2009 | # pdf(sprintf("fuzzy_clusters/redo_0813_14cl_1.25_noCC/Motif_Module_Plots/%s.pdf", titles), 2010 | # height = 1, 2011 | # width = 4, 2012 | # useDingbats = F) 2013 | print(gg) 2014 | # dev.off() 2015 | } 2016 | 2017 | 2018 | ############################################################################### 2019 | #' Return gene membership in modules as DF 2020 | #' 2021 | #' I use this to get color scales which can be arranged as a graph by module 2022 | #' connectivity 2023 | #' @param genes 2024 | #' @param object 2025 | geneMembershipDF <- function(genes, object = fuzz) { 2026 | 2027 | titles <- paste0(toupper(genes), collapse = ' ') 2028 | membership <- getMembership(object) 2029 | gene.ids <- convertGeneIDs(toupper(genes), name2ensembl) 2030 | 2031 | if (is.null(membership)) { 2032 | stop('No membership matrix detected.') 2033 | } 2034 | if (! all(gene.ids %in% rownames(membership))) { 2035 | stop('Genes not found in membership matrix') 2036 | } 2037 | mmat <- matrix(membership[gene.ids, ], ncol = ncol(membership)) 2038 | m <- apply(mmat, 2, mean) 2039 | 2040 | df <- data.frame( 2041 | Module = paste0('m', colnames(membership)), 2042 | Membership = m 2043 | ) 2044 | 2045 | return(df) 2046 | } 2047 | 2048 | 2049 | ############################################################################### 2050 | #' Return motif enrichment in modules as DF 2051 | #' 2052 | #' I use this to get color scales which can be arranged as a graph by module 2053 | #' connectivity 2054 | #' @param motif 2055 | #' @param object 2056 | motifModuleDF <- function(motif, object = fuzz, to.plot = 'pval') { 2057 | titles <- paste0(toupper(motif), collapse = ' ') 2058 | motif %<>% toupper(.) 2059 | 2060 | df <- mod.motif.enr %>% 2061 | filter(motif.name == motif) %>% 2062 | mutate(neg.log10.p = ifelse(log2FoldEnrichment < 0, 0, 2 * neg.log10.p)) 2063 | 2064 | return(df) 2065 | } 2066 | 2067 | 2068 | 2069 | 2070 | 2071 | 2072 | 2073 | 2074 | 2075 | 2076 | 2077 | 2078 | 2079 | 2080 | 2081 | 2082 | 2083 | 2084 | 2085 | 2086 | 2087 | 2088 | -------------------------------------------------------------------------------- /R/FCM_Workflows.R: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Fuzzy C-means clustering implementation on scRNA-seq data (or pseudo-bulk) 4 | # Figure 4, 5, 6 Trevino et al 2020 (bioRxiv) 5 | # 6 | # Alexandro E. Trevino 2020 7 | # Stanford University 8 | # 9 | ############################################################################### 10 | 11 | ############################################################################### 12 | # Import Functions 13 | ############################################################################### 14 | 15 | source('R/Single_Cell_Functions.R') 16 | source('R/FCM_Functions.R') 17 | source('R/Load_Environment.R') 18 | 19 | ############################################################################### 20 | # 1. Set up the analysis 21 | ############################################################################### 22 | 23 | # Read our main fuzzy clustering object 24 | fuzz <- readRDS('data_files/rds/FCM_Object.RDS') 25 | 26 | # ~OR~ # 27 | 28 | # Create a fresh one from the data: 29 | # you can also compute your own pseudobulks from your own clusters etc. 30 | 31 | trial.seed <- 2 32 | set.seed(trial.seed) 33 | 34 | pseudo.bulks <- readRDS("data_files/rds/RNA_GlialPseudobulks.RDS") 35 | pbcounts <- pseudo.bulks$matrix 36 | mat <- cleanMatrix(pbcounts, scaling = "row", trim = NULL) 37 | 38 | 39 | # Set up the project "object" 40 | 41 | fuzz <- list() 42 | 43 | fuzz[['Trial.Name']] <- 'descriptive_trial_name' 44 | fuzz[['Random.Seed']] <- trial.seed 45 | fuzz[['Data.Matrix']] <- mat 46 | fuzz[['Counts.Matrix']] <- pbcounts 47 | # fuzz[['colData']] <- glia.colData 48 | fuzz[['Pseudobulks']] <- pseudo.bulks[c("sampleIdxL", "grouping")] 49 | 50 | # You can put the main UMAP or anything else here: 51 | #fuzz[['Projections']][['SCE']][['DF']] <- rna.umap 52 | 53 | # Create a dir for this project 54 | dir.create(sprintf("fuzzy_clusters/%s", fuzz[['Trial.Name']]), showWarnings = F) 55 | 56 | ############################################################################### 57 | # 2. Do fuzzy clustering 58 | ############################################################################### 59 | 60 | # Define parameters 61 | 62 | fuzz <- setFuzzyParameters( 63 | c = 14, 64 | m = 1.25, 65 | object = fuzz 66 | ) 67 | 68 | # Fuzzy clustering 69 | 70 | fuzz <- doFuzzyClustering(fuzz, iter.max = 50) 71 | 72 | ############################################################################### 73 | # 3. Set threshold, get module overlaps, and get module gene memberships 74 | ############################################################################### 75 | 76 | # Set overlap threshold 77 | 78 | fuzz <- setThreshold(0.2, fuzz) 79 | print(min(maxMemberhip(fuzz))) 80 | 81 | # Plot membership heatmap 82 | 83 | plotMembershipHeatmap(fuzz) 84 | plotGenesAtThreshold(fuzz) 85 | plotGeneMembership(fuzz) 86 | 87 | # Get thresholded membership in modules - and respective weights from FCM 88 | # membership matrix 89 | 90 | fuzz <- addMemberGeneList(fuzz) 91 | 92 | fuzz <- addMemberGeneWeights(fuzz) 93 | 94 | # Compute overlaps 95 | 96 | fuzz <- computeOverlaps(fuzz, method = 'ratio') 97 | fuzz <- computeOverlaps(fuzz, method = 'number') 98 | fuzz <- computeOverlaps(fuzz, method = 'jaccard') 99 | fuzz <- computeOverlaps(fuzz, method = 'scaled') 100 | 101 | plotOverlapPCA(fuzz) 102 | 103 | ############################################################################### 104 | # 4. Compute GO enrichments 105 | ############################################################################### 106 | 107 | fuzz <- addGOEnrichments(fuzz, universe = 'glia') 108 | fuzz <- addGOEnrichments(fuzz) 109 | 110 | # can also use BP if you want 111 | 112 | fuzz <- addGOEnrichments(fuzz, universe = 'glia', ontology = 'BP') 113 | fuzz <- addGOEnrichments(fuzz, ontology = 'BP') 114 | 115 | plotGOfcm(object = fuzz, max.terms = 6, ontology = 'MF') 116 | plotGOfcm(object = fuzz, max.terms = 6, ontology = 'BP') 117 | 118 | ############################################################################### 119 | # 6. Add pseudotime and plot heatmaps 120 | # 121 | # Calculate PT for each module 122 | # Get pseudotime from URD (c8, glia only) 123 | # 124 | ############################################################################### 125 | 126 | fuzz <- computeModulePseudotime(fuzz) 127 | 128 | # Sort samples and modules by pseudotime, and plot a heatmap of the centers mat 129 | 130 | mod.sample.mat <- cleanMatrix( 131 | mat = getCenterMatrix(fuzz), 132 | scaling = 'none', 133 | cuts = c(0.05,0.95) 134 | ) 135 | 136 | # Metadata & colors for the heatmap 137 | 138 | ca <- HeatmapAnnotation( 139 | df = fuzz$colData[ , 2:4], 140 | col = list( 141 | group = glia.color.rna.vector, 142 | age = time.colors, 143 | pseudotime = circlize::colorRamp2( 144 | breaks = seq(0,1, 0.1), 145 | colors = viridis_pal(option = 'C')(11) 146 | ) 147 | ) 148 | ) 149 | 150 | # could order by other metadata here 151 | 152 | cl.pt.ord <- fuzz$colData %>% 153 | group_by(group) %>% 154 | summarize(mean.pseudotime = mean(pseudotime)) %>% 155 | arrange(mean.pseudotime) %>% 156 | mutate(ord.group = factor(group, levels = group)) %>% 157 | pull(ord.group) 158 | 159 | ord.ind <- fuzz$colData %>% 160 | mutate(group = factor(group, levels = cl.pt.ord), 161 | ord = seq_len(n())) %>% 162 | arrange(group, pseudotime) %>% 163 | pull(ord) 164 | 165 | # just automate 166 | mod.order <- c(10,3,8,12,6,9,11,5,14,2,13,4,1,7) 167 | 168 | pdf( 169 | file = 'fuzzy_clusters/Module_by_Sample_Heatmap.pdf', 170 | height = 4.5, 171 | width = 6.5 172 | ) 173 | 174 | Heatmap( 175 | matrix = mod.sample.mat, 176 | row_order = mod.order, 177 | column_order = ord.ind, 178 | width = unit(7, 'cm'), height = unit(7, 'cm'), 179 | top_annotation = ca, 180 | use_raster = T 181 | ) 182 | dev.off() 183 | 184 | # Plot select genes in the heatmap 185 | 186 | select.genes <- c('top2a', 'nfic', 'nr2f1', 'lmo2', 'foxj1', 'aqp4', 'MBP') %>% 187 | toupper() 188 | 189 | sel.gene.ids <- select.genes %>% convertGeneIDs(., name2ensembl) 190 | 191 | hm.name <- sprintf('fuzzy_clusters/%s/Select_Genes_Sample_Heatmap.pdf', fuzz$Trial.Name) 192 | pdf( 193 | file = hm.name, 194 | height = 3, 195 | width = 6.5 196 | ) 197 | Heatmap( 198 | matrix = trimQuantiles(fuzz$Data.Matrix[sel.gene.ids, ]), 199 | cluster_rows = F, 200 | row_labels = select.genes, 201 | column_order = ord.ind, 202 | width = unit(7, 'cm'), 203 | height = unit(3, 'cm'), 204 | use_raster = T, 205 | col = brewer.pal(9,'Reds') 206 | ) 207 | dev.off() 208 | 209 | # Gene version of heatmap 210 | 211 | gene.order <- do.call(c, getMemberGeneList(fuzz)[order(fuzz$Module.Pseudotime)]) 212 | names(gene.order) <- NULL 213 | 214 | id.order <- convertGeneIDs(genes.order, name2ensembl) 215 | module.df <- getMemberGeneDF(fuzz) 216 | 217 | genemod.sample.mat <- cleanMatrix( 218 | mat = getDataMatrix(fuzz)[id.order, ], 219 | scaling = 'none', 220 | cuts = c(0.05, 0.95) 221 | ) 222 | 223 | pdf( 224 | file = sprintf('fuzzy_clusters/%s/Genes_and_Modules_by_Sample_Heatmap.pdf', fuzz$Trial.Name), 225 | height = 6.5, 226 | width = 6.5 227 | ) 228 | Heatmap( 229 | matrix = genemod.sample.mat, 230 | row_order = id.order, 231 | show_row_names = F, 232 | split = module.df[,1], 233 | column_order = order(fuzz$colData$pseudotime), 234 | width = unit(7, 'cm'), height = unit(12, 'cm'), 235 | top_annotation = ca, 236 | use_raster = T 237 | ) 238 | dev.off() 239 | 240 | # saveFCM(fuzz) 241 | 242 | ############################################################################### 243 | # 7. Re-project pseudobulks from FCM space 244 | ############################################################################### 245 | 246 | # UMAP (optimization elsewhere) 247 | my.umap.config <- umap::umap.defaults 248 | my.umap.config[["min_dist"]] <- 0.4 249 | 250 | # Adds 'UMAP' and 'Projections'[['UMAP']] 251 | fuzz <- fcmUMAP(fuzz, proj.name = 'UMAP', my.umap.config) 252 | 253 | ############################################################################### 254 | # 8. Re-cluster projected data (fuzz$centers). 255 | # With Seurat code assist from Fabian 256 | ############################################################################### 257 | 258 | resolutions <- c(0.2, 0.3, 0.4, 0.6, 0.8, 1.0, 1.2) 259 | 260 | fuzz <- fcmProjectionReclustering( 261 | object = fuzz, 262 | proj.name = 'UMAP', 263 | resolutions = resolutions, 264 | find.centroids = F 265 | ) 266 | 267 | fuzz <- setReclusterResolution( 268 | object = fuzz, 269 | proj.name = 'UMAP', 270 | resolution = 'cr_0.8' 271 | ) 272 | 273 | fuzz <- fcmProjectionReclustering(fuzz, find.centroids = T) 274 | 275 | fuzz <- addFCMProjectionDataFrame( 276 | object = fuzz, 277 | proj.name = 'UMAP', 278 | metadata = fuzz$colData 279 | ) 280 | 281 | # Plot all the covariates till now 282 | 283 | p1 <- plotProjection( 284 | object = fuzz, 285 | proj.name = 'UMAP', 286 | covariate = 'group', 287 | plot.title = 'Original clusters', 288 | color.palette = glial.colors$color 289 | ) 290 | p2 <- plotProjection( 291 | object = fuzz, 292 | covariate = 'age', 293 | plot.title = 'Sample age', 294 | color.palette = time.colors 295 | ) 296 | p3 <- plotProjection( 297 | object = fuzz, 298 | covariate = 'pseudotime', 299 | plot.title = 'Pseudotime', 300 | color.palette = viridis_pal(option = 'C')(100) 301 | ) 302 | p4 <- plotProjection( 303 | object = fuzz, 304 | covariate = 'clusters', 305 | plot.title = 'Louvain reclustering', 306 | color.palette = stata_pal()(fuzz$Projections$UMAP$Reclustering$nclust), 307 | alpha = 0.3, 308 | add.layers = fuzz$Projections$UMAP$Reclustering$Centroids, 309 | add.geoms = c( 310 | 'geom_point(data = add.layers, shape = 8, size = 3, color = \'black\')', 311 | 'geom_label_repel(data = add.layers, aes(label = clusters), size = 2, box.padding = .05, show.legend = F)', 312 | 'guides(color = guide_legend(override.aes = list(alpha = 1)))' 313 | ) 314 | ) 315 | 316 | patch <- (p1 + p2) / (p3 + p4) 317 | pdf( 318 | file = sprintf("fuzzy_clusters/%s/UMAP.pdf", fuzz[['Trial.Name']]), 319 | width = 9, 320 | height = 9, 321 | useDingbats = F 322 | ) 323 | print(patch) 324 | dev.off() 325 | 326 | ############################################################################### 327 | # 9. Project ***module*** centroids: 328 | ############################################################################### 329 | 330 | fuzz <- computeModuleExpressionCentroids(fuzz, threshold = .1) 331 | 332 | fuzz <- drawModuleConnectivity(fuzz, overlap.method = 'ratio') 333 | fuzz <- drawModuleConnectivity(fuzz, overlap.method = 'number') 334 | fuzz <- drawModuleConnectivity(fuzz, overlap.method = 'jaccard') 335 | fuzz <- drawModuleConnectivity(fuzz, overlap.method = 'filter') 336 | 337 | fuzz <- weightModuleConnectivity(fuzz, 'ratio', threshold = .08) 338 | fuzz <- weightModuleConnectivity(fuzz, 'number', threshold = 80) 339 | fuzz <- weightModuleConnectivity(fuzz, 'jaccard', threshold = .2) 340 | fuzz <- weightModuleConnectivity(fuzz, 'filter', threshold = .1) 341 | 342 | plotModuleConnectivity(fuzz, 'ratio') 343 | plotModuleConnectivity(fuzz, 'number') 344 | plotModuleConnectivity(fuzz, 'jaccard') 345 | plotModuleConnectivity(fuzz, 'filter') 346 | 347 | # Elbow test to find a cutoff / threshold. Jaccard probably the most sensible 348 | # metric here 349 | 350 | connections <- lapply(seq(0,1,.025), function(x) { 351 | sum(fuzz$Overlaps$jaccard > x) 352 | }) %>% Reduce('c', .) 353 | 354 | pdf( 355 | file = sprintf("fuzzy_clusters/%s/Jaccard_Threshold_Elbow_Test.pdf", trial.name), 356 | width = 4.5, 357 | height = 4.5, 358 | useDingbats = F 359 | ) 360 | plot(seq(0,1,.025), connections) 361 | abline(v = 0.2, col = 'red') 362 | dev.off() 363 | 364 | ############################################################################### 365 | # 10. Plot module expression, in FCM space (see how modules are expressed) 366 | ############################################################################### 367 | 368 | plotModuleExpression( 369 | object = fuzz, 370 | plot.object = fuzz[['Data.Matrix']], 371 | plot.object.class = 'matrix', 372 | proj.name = 'UMAP', 373 | dir.name = NULL, 374 | weight.expression = T, 375 | scale.expression = T, 376 | convert = T, 377 | point.size = 2, 378 | aspectratio = 1 379 | ) 380 | 381 | # in the Main UMAP now 382 | 383 | plotModuleExpression( 384 | object = fuzz, 385 | plot.object = sce, 386 | plot.object.class = 'sce', 387 | proj.name = 'SCE', 388 | dir.name = NULL, 389 | weight.expression = T, 390 | scale.expression = T 391 | ) 392 | 393 | ############################################################################### 394 | # 11. Project other data into the FCM space 395 | ############################################################################### 396 | 397 | # Wrangle data matrices and metadata 398 | 399 | # ATAC PB metadata 400 | 401 | atac.pb.colData <- data.frame( 402 | pseudotime = pb.pseudotimes, 403 | group = factor(glial.groupings.atac, levels = glial.colors.atac$cluster) 404 | ) 405 | fuzz[['pb.ATAC.colData']] <- atac.pb.colData 406 | 407 | # Fix matrices of ATAC-seq data, which don't quite match features. 408 | # --> missing some lincRNA from gene activity calculation. 409 | atac.matrix <- imputeMissingFeatures( 410 | object = fuzz, 411 | newdata.matrix = glial.pb.ga.mat, 412 | newdata.name = 'Gene.Activity.Matrix', 413 | convert.ids = T, 414 | impute.fun = 'median' 415 | ) 416 | 417 | # Project the data 418 | 419 | fuzz <- projectCells( 420 | object = fuzz, 421 | proj.name = 'ATAC.UMAP', 422 | cell.matrix = atac.matrix, 423 | metadata = atac.pb.colData, 424 | add.matrix = T 425 | ) 426 | 427 | # Add projection dataframes to plot these new projections 428 | a.p1 <- plotProjection( 429 | object = fuzz, 430 | proj.name = 'ATAC.UMAP', 431 | covariate = 'group', 432 | plot.title = 'ATAC-seq clusters -- pseudobulk gene score NNs', 433 | color.palette = glial.colors.atac$color 434 | ) 435 | 436 | pdf( 437 | file = sprintf('fuzzy_clusters/%s/ATAC_UMAP.pdf', fuzz[['Trial.Name']]), 438 | width = 9, height = 5 , 439 | useDingbats = F 440 | ) 441 | 442 | print(a.p1) 443 | 444 | dev.off() 445 | 446 | # Plot these new projections 447 | 448 | # Also, add linked peaks to each module - Regulatory information 449 | 450 | fuzz <- addLinkedATACModules( 451 | object = fuzz, 452 | link.object = sig.links, 453 | bg.link.object = all.links, 454 | make.unique = F 455 | ) 456 | 457 | # Plot peak accessibility in the main UMAP 458 | 459 | fcm.atac.dir <- sprintf( 460 | "fuzzy_clusters/%s/ModuleAccessibility_thres%s/", 461 | fuzz$Trial.Name, 462 | as.character(fuzz$Threshold) 463 | ) 464 | 465 | dir.create(fcm.atac.dir, showWarnings = F) 466 | fcm.atac <- fuzz$Module.Linked.Peaks 467 | fcm.background.atac <- fuzz$Module.Background.Linked.Peaks 468 | 469 | lapply( 470 | seq_along(fcm.atac), 471 | function(X) { 472 | pdf(sprintf("%s/Module_%s.pdf", fcm.atac.dir, names(fcm.atac)[X])) 473 | plotAccessibility( 474 | peaks = fcm.atac[[X]], 475 | background.peaks = fcm.background.atac[[X]] 476 | ) 477 | dev.off() 478 | } 479 | ) 480 | 481 | # see plotExpression; plotActivity; plotCvar to plot specific genes / loci / 482 | # motifs with a "fuzz" object (or any object) 483 | 484 | ############################################################################### 485 | # 12. Plot motif enrichments (in linked peaks) across modules 486 | ############################################################################### 487 | 488 | # Construct a base plot as a backdrop - to plot this other data on the centroids 489 | 490 | segments <- fuzz$Overlap.Segments.Filtered$jaccard 491 | base.df <- fuzz$Projections$UMAP$DF 492 | 493 | base.gg <- ggplot(base.df, aes(x = UMAP1, y = UMAP2)) + 494 | geom_point(size = 2, shape = 16, color = 'grey') + 495 | guides(color = guide_legend(override.aes = list(alpha = 1)), 496 | alpha = guide_legend(title = str_to_title('Jaccard index'))) + 497 | geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2), 498 | data = segments, 499 | inherit.aes = F, 500 | color = 'black') + 501 | theme_classic() + 502 | theme(axis.line = element_blank(), 503 | panel.border = element_rect(fill = NA)) + 504 | theme(aspect.ratio = 1) 505 | 506 | # 507 | 508 | fcm <- getMemberGeneList(fuzz) 509 | 510 | # Find linked peaks within the modules 511 | 512 | mod.peaks <- do.call( 513 | rbind, 514 | lapply(seq_along(fcm), function(x) { 515 | mname <- paste0('m', as.character(x)) 516 | genes <- fcm[[x]] 517 | pks <- findLinkedPeaks(genes, object = sig.links, make.unique = T) 518 | out <- data.frame( 519 | cbind( 520 | module = mname, 521 | peaks = pks 522 | ) 523 | ) 524 | }) 525 | ) 526 | 527 | # Find linked peaks *to top ranked genes* within the modules 528 | 529 | num.genes.to.rank <- 50 530 | 531 | mod.peaks <- do.call( 532 | rbind, 533 | lapply(seq_along(fuzz$Member.Gene.Weights), function(x) { 534 | 535 | mname <- paste0('m', as.character(x)) 536 | weights <- sort(fuzz$Member.Gene.Weights[[x]], decreasing = T)[1:num.genes.to.rank] 537 | genes <- convertGeneIDs(names(weights), ensembl2name) 538 | 539 | pks <- findLinkedPeaks(genes, object = sig.links, make.unique = T) 540 | 541 | out <- data.frame( 542 | cbind( 543 | module = mname, 544 | peaks = pks 545 | ) 546 | ) 547 | 548 | }) 549 | ) 550 | 551 | 552 | # Compute enrichments across these clusters 553 | 554 | mod.motif.enr <- hypergeometricTestList( 555 | groupings = mod.peaks$module, 556 | match_matrix = motif.mat[mod.peaks$peaks, ], 557 | lower_tail = 'both' 558 | ) %>% mutate(p.value = pmin(enrichment.p, depletion.p)/2, 559 | p.adj = p.adjust(p.value, method = 'bonf'), 560 | neg.log10.p = -log10(p.adj), 561 | log2FoldEnrichment = log2((matches / draws) / (bg.matches / bg.non.matches)), 562 | motif.name = add_split_name_vector(names, "_", 2)) 563 | 564 | match.mod.motif.enr <- mod.motif.enr %>% 565 | group_by(group) %>% 566 | slice_min(enrichment.p, n = 3) %>% 567 | inner_join(tf.match.possibilities, by = c("motif.name", "names" = "motif.id")) %>% 568 | group_by(group, motif.name) %>% 569 | slice_max(glia.pb.rho) %>% 570 | dplyr::select(group, motif.name, gene.symbol, glia.pb.rho, log2FoldEnrichment, enrichment.p, p.adj, neg.log10.p) 571 | 572 | memmotif.dir <- sprintf('fuzzy_clusters/%s/Motif_Module_Plots/', getTrialName(fuzz)) 573 | dir.create(memmotif.dir, showWarnings = F) 574 | 575 | # Selected motifs of interest here 576 | 577 | sel.motif.ids <- c('ID4', 'NFIA', 'ASCL1', 'EGR1', 'FOS', 'HES5', 'OLIG2', 578 | 'MEIS2', 'NHLH1', 'SOX21', 'SOX10', 'PBX1', 'NEUROD1', 579 | 'NEUROG2', 'EOMES') 580 | 581 | motif.dfs <- lapply(sel.motif.ids, function(x) { 582 | df <- motifModuleDF(x) 583 | out <- cbind(fuzz$Module.Centroids, df) 584 | } 585 | ) 586 | 587 | pdf( 588 | file = sprintf('fuzzy_clusters/%s/Motif_Module_Plots/Structured.pdf', fuzz$Trial.Name), 589 | width = 5.5, 590 | height = 4, 591 | useDingbats = F 592 | ) 593 | 594 | lapply( 595 | seq_along(motif.dfs), 596 | function(x) { 597 | gg <- base.gg + 598 | geom_point(size = 7, data = motif.dfs[[x]], shape = 21, aes(fill = neg.log10.p)) + 599 | # geom_blank(data = motif.dfs[[x]], aes(fill = -neg.log10.)) + 600 | geom_text(size = 3, data = motif.dfs[[x]], aes(label = group)) + 601 | scale_fill_gradientn(colors = rev(brewer.pal(9, 'BrBG'))) + 602 | labs(title = sel.motif.ids[x]) 603 | # xlim(c(-8,-1)) + 604 | # ylim(c(4,11)) 605 | } 606 | ) 607 | 608 | dev.off() 609 | 610 | 611 | # Plot enrichments 612 | 613 | plotMotifsInModules('ASCL1') 614 | plotMotifsInModules('OLIG2') 615 | plotMotifsInModules('HES5') 616 | plotMotifsInModules('EGR1') 617 | plotMotifsInModules('FOS') 618 | plotMotifsInModules('NFIA') 619 | plotMotifsInModules('ID4') 620 | 621 | 622 | 623 | 624 | 625 | -------------------------------------------------------------------------------- /R/Load_Environment.R: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # Set up global R environment for single cell analysis of human corticogenesis 4 | # 5 | # Alexandro E. Trevino, Stanford University 2020 6 | # 7 | ############################################################################### 8 | 9 | ############################################################################### 10 | # Import packages 11 | ############################################################################### 12 | 13 | # Color packages 14 | 15 | library(viridis) 16 | library(wesanderson) 17 | library(RColorBrewer) 18 | 19 | # Plotting packages 20 | 21 | library(circlize) 22 | library(ComplexHeatmap) 23 | library(patchwork) 24 | library(gplots) 25 | library(grid) 26 | library(ggplot2) 27 | library(ggrepel) 28 | library(ggrastr) 29 | library(ggdendro) 30 | library(ggthemes) 31 | library(gghighlight) 32 | 33 | # Tidy data packages 34 | 35 | library(dplyr) 36 | library(magrittr) 37 | library(reshape2) 38 | library(splitstackshape) 39 | library(broom) 40 | library(stringr) 41 | library(binr) 42 | library(tibbletime) 43 | 44 | # Statistics packages 45 | 46 | library(e1071) 47 | library(fclust) 48 | 49 | # Bioinformatics packages 50 | 51 | library(org.Hs.eg.db) 52 | library(clusterProfiler) 53 | library(SingleCellExperiment) 54 | library(GenomicInteractions) 55 | library(GenomicRanges) 56 | library(motifmatchr) 57 | library(JASPAR2018) 58 | library(TFBSTools) 59 | library(BSgenome.Hsapiens.UCSC.hg38) 60 | library(URD) 61 | library(Seurat) 62 | 63 | ############################################################################### 64 | # Set working directory 65 | ############################################################################### 66 | 67 | # Make it the cloned git directory 68 | setwd("brainchromatin") 69 | 70 | ############################################################################### 71 | # Import functions 72 | ############################################################################### 73 | 74 | source("R/Single_Cell_Functions.R") 75 | source("R/FCM_Functions.R") 76 | 77 | ############################################################################### 78 | # Define any visualization themes and color palettes 79 | ############################################################################### 80 | 81 | # My custom color palettes 82 | 83 | pals <- read.table( 84 | file = "misc/colorpals.ai.csv", 85 | header = T , 86 | sep = ",", 87 | fill = T, 88 | comment.char = "" 89 | ) 90 | 91 | # Define and name 92 | 93 | plant_palettes <- lapply( 94 | levels(pals$palette.name), 95 | function(x) { 96 | 97 | pal = pals %>% 98 | filter(palette.name == x) %>% 99 | pull(hex) %>% 100 | as.character() 101 | 102 | return(pal) 103 | } 104 | ) 105 | names(plant_palettes) <- levels(pals$palette.name) 106 | 107 | # Cluster colors for scRNA and scATAC datasets 108 | 109 | color.rna <- read.table( 110 | file = "data_files/tsv/scRNA_Colors.txt", 111 | header = T, 112 | sep = "\t", 113 | fill = NA, 114 | comment.char = "", 115 | stringsAsFactors = F 116 | ) 117 | 118 | color.atac <- read.table( 119 | file = "data_files/tsv/scATAC_Colors.txt", 120 | header = T, 121 | sep = "\t", 122 | fill = NA, 123 | comment.char = "", 124 | stringsAsFactors = F 125 | ) 126 | 127 | # Vector format 128 | 129 | color.rna.vector <- color.rna$color 130 | names(color.rna.vector) <- color.rna$cluster 131 | 132 | rownames(color.atac) <- color.atac$cluster 133 | 134 | color.atac.vector <- color.atac$color 135 | names(color.atac.vector) <- rownames(color.atac) 136 | 137 | # Sample age colors 138 | 139 | time.colors <- c('#D7496E', '#FAAD6C', '#D84C27', '#7E2B18') 140 | names(time.colors) <- c('pcw16', 'pcw20', 'pcw21', 'pcw24') 141 | 142 | ############################################################################### 143 | # Import scRNA-seq data 144 | ############################################################################### 145 | 146 | # Processed SingleCellExperiments (expression) 147 | sce <- readRDS('data_files/rds/scRNA_SCE.RDS') 148 | 149 | # scRNA-seq metadata 150 | colData <- colData(sce) %>% as.data.frame() 151 | 152 | # scRNA-seq UMAP 153 | rna.umap <- data.frame(sce@int_colData$reducedDims$UMAP) 154 | 155 | # Marker genes (Seurat) 156 | markers <- readRDS('data_files/rds/scRNA_Cluster_Markers.RDS') 157 | 158 | # Basic unfiltered gene annotations 159 | gene.gr <- readRDS('data_files/rds/AllGenes_GenomicRanges.RDS') 160 | 161 | ############################################################################### 162 | # Some useful genes 163 | ############################################################################### 164 | 165 | gs.cellcycle <- read.table( 166 | file = "gene_sets/gs_KEGG_CELL_CYCLE.txt", 167 | skip = 2, 168 | stringsAsFactors = F 169 | )[[1]] 170 | 171 | sfari.db <- read.table( 172 | file = "misc/sfari_gene.csv", 173 | header = T, 174 | sep = ",", 175 | stringsAsFactors = F 176 | ) 177 | 178 | # Table of TFs 179 | tfs <- read.table( 180 | file = "gene_sets/geneset_TF_all.txt", 181 | header = F, 182 | skip = 2, 183 | sep = "\t", 184 | stringsAsFactors = F 185 | ) %>% pull(V1) 186 | 187 | # Quickly find any TFs 188 | transcriptionFactors(c('EOMES', 'GAPDH', 'VIM', 'NEUROG2')) 189 | 190 | # Flexible or quick plotting functions, e.g.: 191 | geneSetAveragePlot(gs.cellcycle, plot.type = 'averages') 192 | plotrna(c('hopx', 'cryab')) 193 | 194 | ############################################################################### 195 | # Gene ID mapping 196 | ############################################################################### 197 | 198 | # Mapping gene IDs and gene symbols (for easier use of gene symbols) 199 | # This annotation file contains metadata about each gene, including the Ensembl 200 | # ID and the gene symbol 201 | 202 | name2ensembl <- names(gene.gr) 203 | 204 | # Something funny about this one, unsure why yet 205 | name2ensembl['CDR1'] <- 'ENSG00000281508' 206 | 207 | names(name2ensembl) <- elementMetadata(gene.gr)[ ,'gene_name'] 208 | 209 | ensembl2name <- elementMetadata(gene.gr)[ ,'gene_name'] 210 | names(ensembl2name) <- names(gene.gr) 211 | 212 | # A quick function to interconvert, e.g.: 213 | convertGeneIDs('NEUROD2', name2ensembl) 214 | 215 | ############################################################################### 216 | # Import scATAC-seq data 217 | ############################################################################### 218 | 219 | # SCE object 220 | atac.sce <- readRDS('data_files/rds/scATAC_SCE.RDS') 221 | 222 | # Cell metadata 223 | atac.colData <- colData(atac.sce) %>% as.data.frame() 224 | 225 | # Integration mapping to RNA 226 | cca <- readRDS('data_files/rds/CCA_Matching.RDS') 227 | 228 | # ChromVAR results 229 | cvar <- readRDS('data_files/rds/scATAC_ChromVAR_SCE.RDS') 230 | 231 | # Gene activity 232 | ga <- readRDS('data_files/rds/scATAC_GeneActivity.RDS') 233 | 234 | # Motif matrix 235 | motif.mat <- readRDS('data_files/rds/scATAC_MotifMatchMatrix.RDS') 236 | 237 | # Peak gene linkages 238 | 239 | sig.links <- readRDS('data_files/rds/PeakGeneLinks_Significant.RDS') 240 | all.links <- readRDS('data_files/rds/PeakGeneLinks_All.RDS') 241 | 242 | ############################################################################### 243 | # Import multiome data (scATAC + scRNA) 244 | ############################################################################### 245 | 246 | multi.metadata <- read.table( 247 | file = 'multiome_cell_metadata.txt', 248 | header = T, 249 | sep = "\t", 250 | stringsAsFactors = F 251 | ) 252 | multi.ga <- readRDS('Multiome_ATAC_GeneActivity.RDS') 253 | multi.atac <- readRDS('Multiome_ATAC_SCE.RDS') 254 | multi.seu <- readRDS('Multiome_RNA_SCE.RDS') 255 | 256 | ############################################################################### 257 | # Read the CCA data (currently ChrAccR gene scores) 258 | ############################################################################### 259 | 260 | # get a vector that maps accessibility cells to RNA cells 261 | acc2expr <- cca %>% filter(mapping == "nearest_expr_for_acc") 262 | map.acc2expr <- acc2expr$cell_expr 263 | names(map.acc2expr) <- acc2expr$cell_acc 264 | 265 | # and vice versa 266 | expr2acc <- cca %>% filter(mapping == "nearest_acc_for_expr") 267 | map.expr2acc <- expr2acc$cell_acc 268 | names(map.expr2acc) <- expr2acc$cell_expr 269 | 270 | ############################################################################### 271 | # Glia / Fuzzy Clustering 272 | ############################################################################### 273 | 274 | # URD object to flood / pseudotime stage + var genes 275 | # Nice functions in URD to get variable genes and pseudotime. 276 | glial.urd <- readRDS('data_files/rds/scRNA_URD_GlialCells.RDS') 277 | 278 | # 279 | var.glial.gene.ids <- glial.urd@var.genes 280 | var.glial.genes <- convertGeneIDs(var.glial.gene.ids, ensembl2name) 281 | pseudotime <- glial.urd@pseudotime$pseudotime # associated PT 282 | 283 | # Sampled pseudobulks (From KNN graph) for RNA: 284 | # a. read 285 | spb.rna.glia.nn <- readRDS('data_files/rds/RNA_GlialPseudobulks.RDS') 286 | glial.pb.mat <- spb.rna.glia.nn$matrix 287 | 288 | # b. Function to scale, remove NA, etc with matrices 289 | clean.glia.pb <- cleanMatrix( 290 | glial.pb.mat, 291 | scaling = "row", 292 | cuts = NULL 293 | ) 294 | 295 | # c. Subtract cell cycle genes (for fuzzy clusters) 296 | no.cc <- (!var.glial.genes %in% gs.cellcycle) 297 | 298 | # d. define metadata for pseudobulk aggregates 299 | glia.colData <- glial.urd@meta 300 | 301 | glial.groupings <- lapply( 302 | X = spb.rna.glia.nn$sampleIdxL, 303 | FUN = dominantCluster, 304 | groupings = glial.urd@meta$seurat_clusters 305 | ) %>% Reduce('c', .) 306 | 307 | glial.ages <- lapply( 308 | X = spb.rna.glia.nn$sampleIdxL, 309 | FUN = dominantCluster, 310 | groupings = glial.urd@meta$Age 311 | ) %>% Reduce('c', .) 312 | 313 | glial.ages <- factor(glial.ages, levels = names(time.colors)) 314 | glial.colors <- color.rna %>% filter(cluster %in% glial.groupings) 315 | 316 | # This matrix just includes all genes - not just variable-in-glia genes 317 | # For more plotting flexibility 318 | full.glial.pb.mat <- readRDS('data_files/rds/Matrix_Glial_KNNpseudoBulk_RNA_Full.RDS') 319 | 320 | ############################################################################### 321 | # And ATAC pseudobulks 322 | ############################################################################### 323 | 324 | spb.cca.atac <- readRDS('data_files/rds/SamplePseudoBulk_Glial_KNNpseudobulk_ATAC_GA.RDS') 325 | glial.pb.ga.mat <- readRDS('data_files/rds/Matrix_Glial_KNNpseudoBulk_ATAC_GeneActivity.RDS') 326 | glial.pb.atac.mat <- readRDS('data_files/rds/Matrix_Glial_KNNpseudoBulk_ATAC_Accessibility.RDS') 327 | glial.pb.cvar.mat <- readRDS('data_files/rds/Matrix_Glial_KNNpseudoBulk_ATAC_ChromVAR.RDS') 328 | 329 | atac.nn.glia <- findNearestNeighbor(rownames(glial.urd@meta), nn.mapping = map.expr2acc) 330 | pre.grouping <- atac.colData[atac.nn.glia, ][['Iterative.LSI.Clusters']] 331 | names(pre.grouping) <- atac.nn.glia 332 | 333 | glial.groupings.atac <- lapply( 334 | X = spb.cca.atac, 335 | FUN = dominantCluster, 336 | groupings = pre.grouping 337 | ) %>% Reduce('c', .) 338 | 339 | glial.colors.atac <- color.atac %>% filter(cluster %in% glial.groupings.atac) 340 | 341 | 342 | ############################################################################### 343 | # TF match possibilities and correlations table 344 | ############################################################################### 345 | 346 | tf.match.possibilities <- readRDS('data_files/rds/TF_MotifExpressionCorrelation.RDS') 347 | 348 | ############################################################################### 349 | ############################################################################### 350 | ############################################################################### 351 | 352 | 353 | 354 | 355 | -------------------------------------------------------------------------------- /R/seurat_to_uwot.R: -------------------------------------------------------------------------------- 1 | 2 | # assuming RunUMAP was with 'dims!=NULL', i.e. the umap was based on another reduction 3 | getUwotModelFromSeurat <- function(seu, assayUsed=DefaultAssay(seu), reductionUsed="pca", ...){ 4 | require(uwot) 5 | paramL <- seu@commands[[paste0("RunUMAP.",assayUsed,".",reductionUsed)]]@params 6 | if (is.null(paramL[["dims"]])) logger.error("Invalid dims") 7 | 8 | reqParamNames <- c( 9 | "n.neighbors", "n.components", "metric", "n.epochs", "learning.rate", "min.dist", 10 | "spread", "set.op.mix.ratio", "local.connectivity", "repulsion.strength", 11 | "negative.sample.rate", "a", "b", "uwot.sgd", "seed.use" 12 | ) 13 | # assign NULL to missing parameters 14 | for (pn in reqParamNames){ 15 | if (!is.element(pn, names(paramL))) paramL[pn] <- list(NULL) 16 | } 17 | 18 | X <- Embeddings(seu[[reductionUsed]])[, paramL[["dims"]]] 19 | 20 | # make sure to use the same 'random' numbers 21 | if (!is.null(paramL$seed.use)) { 22 | set.seed(seed = paramL$seed.use) 23 | } 24 | 25 | umapRes <- umap( 26 | X = X, 27 | n_neighbors = as.integer(paramL$n.neighbors), 28 | n_components = as.integer(paramL$n.components), 29 | metric = paramL$metric, 30 | n_epochs = paramL$n.epochs, 31 | learning_rate = paramL$learning.rate, 32 | min_dist = paramL$min.dist, 33 | spread = paramL$spread, 34 | set_op_mix_ratio = paramL$set.op.mix.ratio, 35 | local_connectivity = paramL$local.connectivity, 36 | repulsion_strength = paramL$repulsion.strength, 37 | negative_sample_rate = paramL$negative.sample.rate, 38 | a = paramL$a, 39 | b = paramL$b, 40 | fast_sgd = paramL$uwot.sgd, 41 | ret_model=TRUE, # this is the important part 42 | ... 43 | ) 44 | return(umapRes) 45 | } 46 | 47 | projectMatrix_SeuratUMAP <- function(X, seu, assayUsed=DefaultAssay(seu), dataType="counts") { 48 | # X <- GetAssayData(object=seu[["RNA"]], slot="counts") # for testing 49 | # colnames(X) <- paste0("cell", 1:ncol(X)) 50 | if (!is.element(dataType, c("counts", "normalized", "scaled", "PCA"))){ 51 | logger.error(c("Invalid dataType:", dataType)) 52 | } 53 | 54 | paramL_norm <- seu@commands[[paste0("NormalizeData.",assayUsed)]]@params 55 | paramL_scale <- seu@commands[[paste0("ScaleData.",assayUsed)]]@params 56 | if (!paramL_scale[["do.scale"]]) logger.error("Don't know how to deal with unscaled data yet") 57 | paramL_pca <- seu@commands[[paste0("RunPCA.",assayUsed)]]@params 58 | paramL_umap <- seu@commands[[paste0("RunUMAP.",assayUsed,".",paramL_pca[["reduction.name"]])]]@params 59 | 60 | seuQ <- X # query seurat dataset 61 | if (class(X)!="Seurat"){ 62 | seuQ <- CreateSeuratObject(counts=X, project="SEUQ", assay=assayUsed) 63 | } 64 | if (is.element(dataType, c("counts"))){ 65 | logger.status("Normalizing ...") 66 | seuQ <- NormalizeData( 67 | seuQ, 68 | assay=paramL_norm$assay, 69 | normalization.method=paramL_norm$normalization.method, 70 | scale.factor=paramL_norm$scale.factor, 71 | verbose=FALSE 72 | ) 73 | } 74 | if (!is.element(dataType, c("scaled", "PCA"))){ 75 | logger.status("Scaling ...") 76 | seuQ <- ScaleData( 77 | seuQ, 78 | assay=paramL_scale$assay, 79 | features=paramL_scale$features, 80 | do.scale=paramL_scale$do.scale, 81 | do.center=paramL_scale$do.center, 82 | model.use=paramL_scale$model.use, 83 | verbose=FALSE 84 | ) 85 | } 86 | 87 | if (!is.element(dataType, c("PCA"))){ 88 | logger.status("PC projection ...") 89 | X <- GetAssayData(seuQ[[assayUsed]], slot="scale.data") 90 | if (!all(paramL_pca[["features"]] %in% rownames(X))){ 91 | logger.error("Could not find all features in X for the PC projection") 92 | } 93 | X <- t(X[paramL_pca[["features"]],]) 94 | } 95 | 96 | projM <- Loadings(seu, reduction=paramL_pca[["reduction.name"]]) 97 | pcaCoord_proj <- X %*% projM 98 | # pcaCoord_orig <- Embeddings(seu[[paramL_pca[["reduction.name"]]]]) # compare the original 99 | 100 | logger.status("Retrieving UMAP model ...") 101 | umapRes <- getUwotModelFromSeurat(seu, assayUsed=assayUsed, reductionUsed=paramL_pca[["reduction.name"]]) 102 | 103 | logger.status("UMAP projection ...") 104 | umapCoord_orig <- Embeddings(seu[[paramL_umap[["reduction.name"]]]]) 105 | umapCoord_proj <- uwot::umap_transform(pcaCoord_proj[,paramL_umap[["dims"]]], umapRes) 106 | rownames(umapCoord_proj) <- rownames(pcaCoord_proj) 107 | colnames(umapCoord_proj) <- colnames(umapCoord_orig) 108 | res <- list( 109 | pcaCoord=pcaCoord_proj, 110 | pcsUsed=paramL_umap[["dims"]], 111 | umapCoord=umapCoord_proj 112 | ) 113 | class(res) <- "SeuUMAPProjection" 114 | return(res) 115 | } 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # brainchromatin 2 | Code used to analyze single cell RNA and ATAC sequencing in developing human cerebral cortex. 3 | 4 | Publication DOI: https://doi.org/10.1016/j.cell.2021.07.039 5 | 6 | Data files can be accessed here using get_data.sh and links.txt, or just by pulling the files from links.txt. Note that their combined size exceeds 10 Gb! 7 | 8 | In R, you can `setwd` to the cloned repository and run `source('R/Load_Environment.R')` to get started quickly, or you can just explore on your own. 9 | 10 | Please drop a message if you need any other files or information. A number of additional CellRanger and velocyto outputs have recently been added. 11 | 12 | -Alexandro 13 | 14 | -------------------------------------------------------------------------------- /gene_sets/._GBM_stem_cell_markers.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._GBM_stem_cell_markers.txt -------------------------------------------------------------------------------- /gene_sets/._GO_term_summary_20200909_144436_BMP1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._GO_term_summary_20200909_144436_BMP1.txt -------------------------------------------------------------------------------- /gene_sets/._GO_term_summary_20200909_144538_BMPALL.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._GO_term_summary_20200909_144538_BMPALL.txt -------------------------------------------------------------------------------- /gene_sets/._gs_KEGG_MTOR_SIGNALING.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_KEGG_MTOR_SIGNALING.txt -------------------------------------------------------------------------------- /gene_sets/._gs_M_PHASE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_M_PHASE.txt -------------------------------------------------------------------------------- /gene_sets/._gs_Reelin.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_Reelin.txt -------------------------------------------------------------------------------- /gene_sets/._gs_Reelin2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_Reelin2.txt -------------------------------------------------------------------------------- /gene_sets/._gs_Reelin_PID.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_Reelin_PID.txt -------------------------------------------------------------------------------- /gene_sets/._gs_Reelin_Reactome.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_Reelin_Reactome.txt -------------------------------------------------------------------------------- /gene_sets/._gs_SCZ2014_108loci.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_SCZ2014_108loci.txt -------------------------------------------------------------------------------- /gene_sets/._gs_SCZ2020.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_SCZ2020.txt -------------------------------------------------------------------------------- /gene_sets/._gs_SCZ2020_Prioritized.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/gene_sets/._gs_SCZ2020_Prioritized.txt -------------------------------------------------------------------------------- /gene_sets/GO_term_summary_20200909_144436_BMP1.txt: -------------------------------------------------------------------------------- 1 | MGI Gene/Marker ID Symbol Name Chr Qualifier Annotated Term Context Proteoform Evidence Inferred From Reference(s) 2 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 positive regulation of BMP signaling pathway IDA J:164086 3 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 positive regulation of BMP signaling pathway ISO P37023 J:164563 4 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 positive regulation of BMP signaling pathway IDA J:156015 5 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 positive regulation of BMP signaling pathway ISO Q13873 J:164563 6 | MGI:88613 Ccn1 cellular communication network factor 1 3 positive regulation of BMP signaling pathway ISO O00622 J:164563 7 | MGI:105057 Cdh5 cadherin 5 8 positive regulation of BMP signaling pathway ISO P33151 J:164563 8 | MGI:2679260 Crb2 crumbs family member 2 2 positive regulation of BMP signaling pathway uses UniProtKB:P21275 IMP J:177837 9 | MGI:2443264 Elapor2 endosome-lysosome associated apoptosis and autophagy regulator family member 2 5 positive regulation of BMP signaling pathway IDA J:285010 10 | MGI:95392 Eng endoglin 2 positive regulation of BMP signaling pathway ISO P17813 J:164563 11 | MGI:1915681 Fbxl15 F-box and leucine-rich repeat protein 15 19 positive regulation of BMP signaling pathway ISO Q9H469 J:164563 12 | MGI:1341070 Fkbp8 FK506 binding protein 8 8 positive regulation of BMP signaling pathway regulates a function/process that happens in neural tube IMP MGI:3042750 J:138713 13 | MGI:1347463 Foxd1 forkhead box D1 13 positive regulation of BMP signaling pathway IMP J:95358 14 | MGI:95664 Gata4 GATA binding protein 4 14 positive regulation of BMP signaling pathway ISO RGD:2665 J:155856 15 | MGI:107516 Gata6 GATA binding protein 6 18 positive regulation of BMP signaling pathway ISO RGD:2666 J:155856 16 | MGI:1321394 Gdf2 growth differentiation factor 2 14 positive regulation of BMP signaling pathway IDA J:164086 17 | MGI:95688 Gdf5 growth differentiation factor 5 2 positive regulation of BMP signaling pathway ISO P43026 J:164563 18 | MGI:104903 Gpc3 glypican 3 X positive regulation of BMP signaling pathway IMP MGI:2159356 J:99651 19 | MGI:104853 Hes1 hes family bHLH transcription factor 1 16 positive regulation of BMP signaling pathway regulates a function/process that happens in choroid invagination IGI MGI:104876 J:139170 20 | MGI:104876 Hes5 hes family bHLH transcription factor 5 4 positive regulation of BMP signaling pathway regulates a function/process that happens in choroid invagination IGI MGI:104853 J:139170 21 | MGI:1195267 Ilk integrin linked kinase 7 positive regulation of BMP signaling pathway IMP J:172937 22 | MGI:2141640 Kcp kielin/chordin-like protein 6 positive regulation of BMP signaling pathway IDA J:97529 23 | MGI:96683 Kdr kinase insert domain protein receptor 5 positive regulation of BMP signaling pathway IDA J:164086 24 | MGI:97168 Msx1 msh homeobox 1 5 positive regulation of BMP signaling pathway regulates a function/process that happens in heart IGI MGI:97169 J:139946 25 | MGI:97169 Msx2 msh homeobox 2 13 positive regulation of BMP signaling pathway regulates a function/process that happens in heart IGI MGI:97168 J:139946 26 | MGI:1097159 Neo1 neogenin 9 positive regulation of BMP signaling pathway IGI MGI:88177 J:160796 27 | MGI:97363 Notch1 notch 1 2 positive regulation of BMP signaling pathway IDA J:166398 28 | MGI:97364 Notch2 notch 2 3 positive regulation of BMP signaling pathway regulates a function/process that happens in eye IMP MGI:3617328 J:197419 29 | MGI:2443665 Numa1 nuclear mitotic apparatus protein 1 7 positive regulation of BMP signaling pathway IMP J:229900 30 | MGI:2145154 Pelo pelota mRNA surveillance and ribosome rescue factor 13 positive regulation of BMP signaling pathway IMP MGI:2450933 J:228122 31 | MGI:96522 Rbpj recombination signal binding protein for immunoglobulin kappa J region 5 positive regulation of BMP signaling pathway IMP J:119151 32 | MGI:2444521 Rnf165 ring finger protein 165 18 positive regulation of BMP signaling pathway IBA PTN001007268 J:265628 33 | MGI:2444521 Rnf165 ring finger protein 165 18 positive regulation of BMP signaling pathway IMP MGI:5516581 J:198828 34 | MGI:108051 Smad2 SMAD family member 2 18 positive regulation of BMP signaling pathway ISO Q15796 J:164563 35 | MGI:894293 Smad4 SMAD family member 4 18 positive regulation of BMP signaling pathway ISO Q13485 J:164563 36 | MGI:98359 Sox11 SRY (sex determining region Y)-box 11 12 positive regulation of BMP signaling pathway IMP J:136878 37 | MGI:2138563 Sulf1 sulfatase 1 1 positive regulation of BMP signaling pathway ISO Q8IWU6 J:164563 38 | MGI:104637 Tgfbr3 transforming growth factor, beta receptor III 5 positive regulation of BMP signaling pathway regulates a function/process that happens in palatal shelf,regulates a function/process that has the participant Bmp2,regulates a function/process that has the participant Bmp4,regulates a function/process that has the participant Acvr1,regulates a function/process that has the participant Bmpr1a IMP J:218259 39 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 positive regulation of BMP signaling pathway IMP MGI:2655736 J:82738 40 | MGI:2444266 Ube2o ubiquitin-conjugating enzyme E2O 11 positive regulation of BMP signaling pathway ISO Q9C0C9 J:164563 41 | MGI:1921298 Vsir V-set immunoregulatory receptor 10 positive regulation of BMP signaling pathway regulates a function/process that happens in stem cell IGI MGI:1338938 J:193667 42 | MGI:1921298 Vsir V-set immunoregulatory receptor 10 positive regulation of BMP signaling pathway regulates a function/process that happens in stem cell IMP J:193667 43 | MGI:1891217 Zfp423 zinc finger protein 423 8 positive regulation of BMP signaling pathway IDA J:166398 44 | 45 | -------------------------------------------------------------------------------- /gene_sets/GO_term_summary_20200909_144538_BMPALL.txt: -------------------------------------------------------------------------------- 1 | MGI Gene/Marker ID Symbol Name Chr Qualifier Annotated Term Context Proteoform Evidence Inferred From Reference(s) 2 | MGI:87859 Abl1 c-abl oncogene 1, non-receptor tyrosine kinase 2 negative regulation of BMP signaling pathway regulates a function/process that happens in duct epithelial cell IMP MGI:104738 J:190763 3 | MGI:87911 Acvr1 activin A receptor, type 1 2 BMP signaling pathway IBA PTN001147404 J:265628 4 | MGI:87911 Acvr1 activin A receptor, type 1 2 BMP signaling pathway ISO Q04771 J:164563 5 | MGI:87911 Acvr1 activin A receptor, type 1 2 BMP signaling pathway involved in heart development IMP J:103532 6 | MGI:102806 Acvr2a activin receptor IIA 2 BMP signaling pathway IMP J:229306 7 | MGI:102806 Acvr2a activin receptor IIA 2 BMP signaling pathway happens in smooth muscle cell IMP J:123381 8 | MGI:102806 Acvr2a activin receptor IIA 2 BMP signaling pathway ISO P27037 J:123381 J:164563 9 | MGI:87912 Acvr2b activin receptor IIB 9 BMP signaling pathway ISO Q13705 J:164563 10 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 BMP signaling pathway IBA PTN001147404 J:265628 11 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 BMP signaling pathway IMP MGI:3604490 J:186473 12 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 BMP signaling pathway ISO P37023 J:164563 13 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 positive regulation of BMP signaling pathway IDA J:164086 14 | MGI:1338946 Acvrl1 activin A receptor, type II-like 1 15 positive regulation of BMP signaling pathway ISO P37023 J:164563 15 | MGI:1915260 Bambi BMP and activin membrane-bound inhibitor 18 negative regulation of BMP signaling pathway ISO Q13145 J:164563 16 | MGI:5590788 Bmncr bone marrow associated noncoding RNA 1 BMP signaling pathway IDA J:270992 17 | MGI:5590788 Bmncr bone marrow associated noncoding RNA 1 BMP signaling pathway IMP J:270992 18 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway IBA PTN000218210 J:265628 19 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway IDA J:86665 J:146446 J:154664 J:160796 J:217224 20 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway IGI MGI:2679262 J:101046 21 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway ISO RGD:2211 J:155856 22 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway ISO P12643 J:123381 J:164563 23 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 BMP signaling pathway involved in heart induction ISO P12643 J:164563 24 | MGI:88177 Bmp2 bone morphogenetic protein 2 2 positive regulation of Wnt signaling pathway by BMP signaling pathway regulates a function/process that happens in osteoblast IDA J:150546 25 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway IDA J:86665 26 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway happens in smooth muscle cell IDA J:123381 27 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway IGI MGI:2679262 J:101046 28 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway ISO P12644 J:123381 J:164563 29 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway involved in heart development IMP J:89237 30 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway involved in heart induction ISO P12644 J:164563 31 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway involved in nephric duct formation ISO P12644 J:164563 32 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway involved in renal system segmentation IMP J:121412 33 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 BMP signaling pathway involved in ureter morphogenesis IDA J:121412 34 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 negative regulation of branch elongation involved in ureteric bud branching by BMP signaling pathway ISO P12644 J:164563 35 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 positive regulation of BMP signaling pathway IDA J:156015 36 | MGI:88180 Bmp4 bone morphogenetic protein 4 14 specification of ureteric bud anterior/posterior symmetry by BMP signaling pathway ISO P12644 J:164563 37 | MGI:88181 Bmp5 bone morphogenetic protein 5 9 BMP signaling pathway IBA PTN000932183 J:265628 38 | MGI:88182 Bmp6 bone morphogenetic protein 6 13 BMP signaling pathway IBA PTN000932183 J:265628 39 | MGI:88182 Bmp6 bone morphogenetic protein 6 13 BMP signaling pathway IDA J:86665 J:154664 40 | MGI:88182 Bmp6 bone morphogenetic protein 6 13 BMP signaling pathway happens in liver IMP J:151027 41 | MGI:88182 Bmp6 bone morphogenetic protein 6 13 BMP signaling pathway ISO P22004 J:164563 42 | MGI:103302 Bmp7 bone morphogenetic protein 7 2 BMP signaling pathway IBA PTN000932183 J:265628 43 | MGI:103302 Bmp7 bone morphogenetic protein 7 2 BMP signaling pathway IDA J:86665 44 | MGI:103302 Bmp7 bone morphogenetic protein 7 2 BMP signaling pathway ISO P18075 J:164563 45 | MGI:104515 Bmp8a bone morphogenetic protein 8a 4 BMP signaling pathway IBA PTN000932183 J:265628 46 | MGI:107335 Bmp8b bone morphogenetic protein 8b 4 BMP signaling pathway IBA PTN000932183 J:265628 47 | MGI:1338820 Bmp10 bone morphogenetic protein 10 6 BMP signaling pathway ISO O95393 J:73065 48 | MGI:1316745 Bmp15 bone morphogenetic protein 15 X BMP signaling pathway IBA PTN000218210 J:265628 49 | MGI:1920480 Bmper BMP-binding endothelial regulator 9 negative regulation of BMP signaling pathway IDA J:84799 50 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IBA PTN001147404 J:265628 51 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IDA J:42602 52 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IGI MGI:1916835 MGI:88177 J:109016 53 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IGI MGI:95689 MGI:95690 J:101432 54 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IMP J:101432 J:229306 55 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway happens in embryo|happens in extraembryonic visceral endoderm IMP MGI:2158342 J:124681 56 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway IMP MGI:2158343 J:119568 57 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway ISO P36894 J:164563 58 | MGI:1338938 Bmpr1a bone morphogenetic protein receptor, type 1A 14 BMP signaling pathway involved in heart development IC GO:0003203 J:89521 59 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway IBA PTN001147404 J:265628 60 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway IDA J:229366 61 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway IGI MGI:109452 MGI:1916835 MGI:88177 J:109016 62 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway IGI MGI:95689 MGI:95690 J:101432 63 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway IMP J:69633 64 | MGI:107191 Bmpr1b bone morphogenetic protein receptor, type 1B 3 BMP signaling pathway ISO O00238 J:164563 65 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 BMP signaling pathway IBA PTN001147423 J:265628 66 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 BMP signaling pathway IMP J:137457 J:229306 67 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 BMP signaling pathway happens in smooth muscle cell IMP J:123381 68 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 BMP signaling pathway ISO Q13161 J:123381 69 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 BMP signaling pathway ISO Q13873 J:164563 70 | MGI:1095407 Bmpr2 bone morphogenetic protein receptor, type II (serine/threonine kinase) 1 positive regulation of BMP signaling pathway ISO Q13873 J:164563 71 | MGI:102709 Cav1 caveolin 1, caveolae protein 6 negative regulation of BMP signaling pathway ISO Q03135 J:164563 72 | MGI:88613 Ccn1 cellular communication network factor 1 3 positive regulation of BMP signaling pathway ISO O00622 J:164563 73 | MGI:105057 Cdh5 cadherin 5 8 positive regulation of BMP signaling pathway ISO P33151 J:164563 74 | MGI:1201414 Cer1 cerberus 1, DAN family BMP antagonist 4 negative regulation of BMP signaling pathway IDA J:44900 J:46377 75 | MGI:1201414 Cer1 cerberus 1, DAN family BMP antagonist 4 sequestering of BMP in extracellular matrix IBA PTN000392278 J:265628 76 | MGI:1201414 Cer1 cerberus 1, DAN family BMP antagonist 4 sequestering of BMP in extracellular matrix IDA J:62082 77 | MGI:1201414 Cer1 cerberus 1, DAN family BMP antagonist 4 sequestering of BMP in extracellular matrix ISO O95813 J:164563 78 | MGI:1313268 Chrd chordin 16 BMP signaling pathway involved in spinal cord dorsal/ventral patterning ISO Q9H2X0 J:164563 79 | MGI:1313268 Chrd chordin 16 negative regulation of BMP signaling pathway IDA J:98069 J:157031 80 | MGI:1313268 Chrd chordin 16 negative regulation of BMP signaling pathway ISO Q9H2X0 J:164563 81 | MGI:1933172 Chrdl1 chordin-like 1 X negative regulation of BMP signaling pathway IDA J:197419 82 | MGI:1916371 Chrdl2 chordin-like 2 7 negative regulation of BMP signaling pathway IDA J:87049 83 | MGI:88469 Comp cartilage oligomeric matrix protein 8 BMP signaling pathway IMP J:183590 84 | MGI:2679260 Crb2 crumbs family member 2 2 positive regulation of BMP signaling pathway uses UniProtKB:P21275 IMP J:177837 85 | MGI:1354756 Crim1 cysteine rich transmembrane BMP regulator 1 (chordin like) 17 negative regulation of BMP signaling pathway ISO Q9NZV1 J:164563 86 | MGI:1196405 Ctdspl2 CTD (carboxy-terminal domain, RNA polymerase II, polypeptide A) small phosphatase like 2 2 negative regulation of BMP signaling pathway IMP J:217224 87 | MGI:1344365 Dand5 DAN domain family member 5, BMP antagonist 8 negative regulation of BMP signaling pathway IDA J:93051 88 | MGI:1344365 Dand5 DAN domain family member 5, BMP antagonist 8 sequestering of BMP in extracellular matrix IBA PTN000392278 J:265628 89 | MGI:105037 Ddx5 DEAD box helicase 5 11 BMP signaling pathway ISO P17844 J:164563 90 | MGI:1329040 Dkk1 dickkopf WNT signaling pathway inhibitor 1 19 negative regulation of BMP signaling pathway IDA J:157031 91 | MGI:94901 Dlx1 distal-less homeobox 1 2 negative regulation of BMP signaling pathway ISO P56177 J:164563 92 | MGI:101926 Dlx5 distal-less homeobox 5 6 BMP signaling pathway IMP J:196266 93 | MGI:2661061 Dsg4 desmoglein 4 18 BMP signaling pathway IDA J:142136 94 | MGI:1349469 Ecsit ECSIT signalling integrator 9 BMP signaling pathway IDA J:86912 95 | MGI:95295 Egr1 early growth response 1 18 BMP signaling pathway IDA J:33445 96 | MGI:2443264 Elapor2 endosome-lysosome associated apoptosis and autophagy regulator family member 2 5 positive regulation of BMP signaling pathway IDA J:285010 97 | MGI:95392 Eng endoglin 2 positive regulation of BMP signaling pathway ISO P17813 J:164563 98 | MGI:99253 Etv2 ets variant 2 7 BMP signaling pathway involved in mesodermal cell fate specification IDA J:155850 99 | MGI:894663 Ext1 exostosin glycosyltransferase 1 15 BMP signaling pathway is a part of mesodermal cell differentiation,is a part of stem cell differentiation IDA J:286754 100 | MGI:894663 Ext1 exostosin glycosyltransferase 1 15 BMP signaling pathway is a part of mesodermal cell differentiation,is a part of stem cell differentiation IMP J:286754 101 | MGI:894663 Ext1 exostosin glycosyltransferase 1 15 BMP signaling pathway is a part of cellular response to BMP stimulus IMP J:196289 102 | MGI:894663 Ext1 exostosin glycosyltransferase 1 15 BMP signaling pathway IMP J:242977 J:286759 103 | MGI:1916890 Fam83g family with sequence similarity 83, member G 11 BMP signaling pathway IBA PTN000415270 J:265628 104 | MGI:1916890 Fam83g family with sequence similarity 83, member G 11 BMP signaling pathway ISO A6ND36 J:164563 105 | MGI:95489 Fbn1 fibrillin 1 2 sequestering of BMP in extracellular matrix IMP J:165256 106 | MGI:1915681 Fbxl15 F-box and leucine-rich repeat protein 15 19 positive regulation of BMP signaling pathway ISO Q9H469 J:164563 107 | MGI:1341070 Fkbp8 FK506 binding protein 8 8 positive regulation of BMP signaling pathway regulates a function/process that happens in neural tube IMP MGI:3042750 J:138713 108 | MGI:1341070 Fkbp8 FK506 binding protein 8 8 regulation of BMP signaling pathway regulates a function/process that happens in neural tube IGI MGI:95728 J:138713 109 | MGI:1347463 Foxd1 forkhead box D1 13 positive regulation of BMP signaling pathway IMP J:95358 110 | MGI:95586 Fst follistatin 13 BMP signaling pathway happens in lower jaw incisor epithelium,happens in ameloblast IGI MGI:88180 J:94518 111 | MGI:95586 Fst follistatin 13 regulation of BMP signaling pathway IBA PTN001657053 J:265628 112 | MGI:102793 Fstl1 follistatin-like 1 16 regulation of BMP signaling pathway IBA PTN002588888 J:265628 113 | MGI:1890391 Fstl3 follistatin-like 3 10 negative regulation of BMP signaling pathway IDA J:66713 114 | MGI:1890391 Fstl3 follistatin-like 3 10 negative regulation of BMP signaling pathway ISO O95633 J:164563 115 | MGI:1890391 Fstl3 follistatin-like 3 10 regulation of BMP signaling pathway IBA PTN001657053 J:265628 116 | MGI:1196625 Fzd1 frizzled class receptor 1 5 negative regulation of BMP signaling pathway IDA J:88480 117 | MGI:95664 Gata4 GATA binding protein 4 14 positive regulation of BMP signaling pathway ISO RGD:2665 J:155856 118 | MGI:107516 Gata6 GATA binding protein 6 18 positive regulation of BMP signaling pathway ISO RGD:2666 J:155856 119 | MGI:95683 Gdf1 growth differentiation factor 1 8 BMP signaling pathway IBA PTN000218210 J:265628 120 | MGI:1321394 Gdf2 growth differentiation factor 2 14 BMP signaling pathway ISO Q9UK05 J:164563 121 | MGI:1321394 Gdf2 growth differentiation factor 2 14 positive regulation of BMP signaling pathway IDA J:164086 122 | MGI:95686 Gdf3 growth differentiation factor 3 6 BMP signaling pathway IBA PTN000218210 J:265628 123 | MGI:95686 Gdf3 growth differentiation factor 3 6 negative regulation of BMP signaling pathway ISO Q9NR23 J:164563 124 | MGI:95688 Gdf5 growth differentiation factor 5 2 BMP signaling pathway IBA PTN000218210 J:265628 125 | MGI:95688 Gdf5 growth differentiation factor 5 2 positive regulation of BMP signaling pathway ISO P43026 J:164563 126 | MGI:95689 Gdf6 growth differentiation factor 6 4 BMP signaling pathway IDA J:101432 127 | MGI:95689 Gdf6 growth differentiation factor 6 4 BMP signaling pathway IGI MGI:107191 MGI:1338938 J:101432 128 | MGI:95689 Gdf6 growth differentiation factor 6 4 BMP signaling pathway IMP J:229306 129 | MGI:95689 Gdf6 growth differentiation factor 6 4 BMP signaling pathway ISO Q6KF10 J:164563 130 | MGI:95690 Gdf7 growth differentiation factor 7 12 BMP signaling pathway IBA PTN000218210 J:265628 131 | MGI:95690 Gdf7 growth differentiation factor 7 12 BMP signaling pathway IDA J:101432 132 | MGI:95690 Gdf7 growth differentiation factor 7 12 BMP signaling pathway IGI MGI:107191 MGI:1338938 J:101432 133 | MGI:95690 Gdf7 growth differentiation factor 7 12 BMP signaling pathway ISO Q7Z4P5 J:164563 134 | MGI:95692 Gdf9 growth differentiation factor 9 11 BMP signaling pathway IBA PTN000218210 J:265628 135 | MGI:1346047 Gdf15 growth differentiation factor 15 8 BMP signaling pathway IBA PTN000932183 J:265628 136 | MGI:104903 Gpc3 glypican 3 X positive regulation of BMP signaling pathway IMP MGI:2159356 J:99651 137 | MGI:1344337 Grem1 gremlin 1, DAN family BMP antagonist 2 negative regulation of BMP signaling pathway regulates a function/process that has the participant Bmp4 IMP MGI:3046937 J:122530 138 | MGI:1344337 Grem1 gremlin 1, DAN family BMP antagonist 2 negative regulation of BMP signaling pathway ISO O60565 J:164563 139 | MGI:1344337 Grem1 gremlin 1, DAN family BMP antagonist 2 sequestering of BMP from receptor via BMP binding IBA PTN002309998 J:265628 140 | MGI:1344367 Grem2 gremlin 2, DAN family BMP antagonist 1 negative regulation of BMP signaling pathway uses UniProtKB:P21274 IMP J:200257 141 | MGI:1344367 Grem2 gremlin 2, DAN family BMP antagonist 1 sequestering of BMP from receptor via BMP binding IBA PTN002309998 J:265628 142 | MGI:1344367 Grem2 gremlin 2, DAN family BMP antagonist 1 sequestering of BMP from receptor via BMP binding IMP J:200257 143 | MGI:104853 Hes1 hes family bHLH transcription factor 1 16 positive regulation of BMP signaling pathway regulates a function/process that happens in choroid invagination IGI MGI:104876 J:139170 144 | MGI:104876 Hes5 hes family bHLH transcription factor 5 4 positive regulation of BMP signaling pathway regulates a function/process that happens in choroid invagination IGI MGI:104853 J:139170 145 | MGI:109191 Hfe homeostatic iron regulator 13 BMP signaling pathway ISO Q30201 J:164563 146 | MGI:1314872 Hipk2 homeodomain interacting protein kinase 2 6 negative regulation of BMP signaling pathway ISO Q9H2X6 J:164563 147 | MGI:96100 Hivep1 human immunodeficiency virus type I enhancer binding protein 1 13 BMP signaling pathway ISO P15822 J:164563 148 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway IBA PTN001265550 J:265628 149 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway IGI MGI:107191 MGI:109452 MGI:1338938 MGI:88177 J:109016 150 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway happens in hepatocyte IGI MGI:1321394 MGI:88177 MGI:88180 J:182123 151 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway IMP MGI:3587746 J:212210 152 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway happens in liver IMP MGI:3587746 J:109016 153 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 BMP signaling pathway ISO Q6ZVN8 J:164563 154 | MGI:1916835 Hjv hemojuvelin BMP co-receptor 3 negative regulation of BMP signaling pathway IGI MGI:88177 J:160796 155 | MGI:96173 Hoxa13 homeobox A13 6 regulation of BMP signaling pathway regulates a function/process that happens in genital tubercle,regulates a function/process that happens in mesenchymal stem cell IMP MGI:2152356 J:83431 156 | MGI:1929076 Htra1 HtrA serine peptidase 1 7 negative regulation of BMP signaling pathway IDA J:88556 157 | MGI:1925808 Htra3 HtrA serine peptidase 3 5 negative regulation of BMP signaling pathway IDA J:91306 158 | MGI:96396 Id1 inhibitor of DNA binding 1, HLH protein 2 BMP signaling pathway IDA J:97303 159 | MGI:1195267 Ilk integrin linked kinase 7 positive regulation of BMP signaling pathway IMP J:172937 160 | MGI:96602 Itga3 integrin alpha 3 11 regulation of BMP signaling pathway ISO P26006 J:164563 161 | MGI:2141640 Kcp kielin/chordin-like protein 6 positive regulation of BMP signaling pathway IDA J:97529 162 | MGI:96683 Kdr kinase insert domain protein receptor 5 positive regulation of BMP signaling pathway IDA J:164086 163 | MGI:96770 Lef1 lymphoid enhancer binding factor 1 3 BMP signaling pathway IDA J:50462 164 | MGI:107405 Lefty1 left right determination factor 1 1 BMP signaling pathway IBA PTN000932183 J:265628 165 | MGI:2443573 Lefty2 left-right determination factor 2 1 BMP signaling pathway IBA PTN000932183 J:265628 166 | MGI:2385045 Lemd2 LEM domain containing 2 17 negative regulation of BMP signaling pathway IBA PTN000334938 J:265628 167 | MGI:3580376 Lemd3 LEM domain containing 3 10 negative regulation of BMP signaling pathway IBA PTN000334938 J:265628 168 | MGI:3580376 Lemd3 LEM domain containing 3 10 negative regulation of BMP signaling pathway ISO Q9Y2U8 J:164563 169 | MGI:95794 Lrp2 low density lipoprotein receptor-related protein 2 2 negative regulation of BMP signaling pathway IMP J:243398 170 | MGI:1346859 Mapk3 mitogen-activated protein kinase 3 7 BMP signaling pathway ISO P27361 J:164563 171 | MGI:2446294 Megf8 multiple EGF-like-domains 8 7 BMP signaling pathway results in the morphogenesis of trigeminal nerve ophthalmic division IGI O35607 J:206541 172 | MGI:2676843 Mir16-1 microRNA 16-1 14 BMP signaling pathway IDA J:150848 173 | MGI:2676897 Mir23a microRNA 23a 8 BMP signaling pathway IDA J:150848 174 | MGI:2676805 Mir122 microRNA 122 18 BMP signaling pathway IDA J:150848 175 | MGI:2676809 Mir125a microRNA 125a 17 BMP signaling pathway happens in embryonic stem cell IGI MGI:1338938 J:192401 176 | MGI:2676832 Mir147 microRNA 147 2 BMP signaling pathway IDA J:150848 177 | MGI:2676886 Mir210 microRNA 210 7 BMP signaling pathway IDA J:150848 178 | MGI:3619341 Mir329 microRNA 329 12 BMP signaling pathway IDA J:150848 179 | MGI:3629709 Mir675 microRNA 675 7 negative regulation of BMP signaling pathway IMP J:209142 180 | MGI:2676793 Mirlet7a-1 microRNA let7a-1 13 BMP signaling pathway IDA J:150848 181 | MGI:2676794 Mirlet7b microRNA let7b 15 BMP signaling pathway IDA J:150848 182 | MGI:2676796 Mirlet7d microRNA let7d 13 BMP signaling pathway IDA J:150848 183 | MGI:2676798 Mirlet7f-1 microRNA let7f-1 13 BMP signaling pathway IDA J:150848 184 | MGI:2676799 Mirlet7f-2 microRNA let7f-2 X BMP signaling pathway IDA J:150848 185 | MGI:97168 Msx1 msh homeobox 1 5 BMP signaling pathway happens in neural tube IDA J:138713 186 | MGI:97168 Msx1 msh homeobox 1 5 BMP signaling pathway happens in outflow tract,has the participant Bmp2|happens in outflow tract,has the participant Bmp4|happens in outflow tract,has the participant Smad1|happens in outflow tract,has the participant Smad5|happens in outflow tract,has the participant Smad9 IGI MGI:1926386 J:124119 187 | MGI:97168 Msx1 msh homeobox 1 5 BMP signaling pathway ISO P28361 J:157031 188 | MGI:97168 Msx1 msh homeobox 1 5 BMP signaling pathway involved in heart development happens in heart IGI MGI:97169 J:139946 189 | MGI:97168 Msx1 msh homeobox 1 5 positive regulation of BMP signaling pathway regulates a function/process that happens in heart IGI MGI:97169 J:139946 190 | MGI:97169 Msx2 msh homeobox 2 13 BMP signaling pathway happens in neural tube IDA J:138713 191 | MGI:97169 Msx2 msh homeobox 2 13 BMP signaling pathway happens in outflow tract,has the participant Bmp2|happens in outflow tract,has the participant Bmp4|happens in outflow tract,has the participant Smad1|happens in outflow tract,has the participant Smad5|happens in outflow tract,has the participant Smad9 IGI MGI:97168 J:124119 192 | MGI:97169 Msx2 msh homeobox 2 13 BMP signaling pathway involved in heart development happens in heart IGI MGI:97168 J:139946 193 | MGI:97169 Msx2 msh homeobox 2 13 positive regulation of BMP signaling pathway regulates a function/process that happens in heart IGI MGI:97168 J:139946 194 | MGI:1919200 Nanog Nanog homeobox 6 negative regulation of BMP signaling pathway regulates a function/process that happens in epiblast cell IDA J:111703 195 | MGI:104591 Nbl1 NBL1, DAN family BMP antagonist 4 negative regulation of BMP signaling pathway IDA J:197419 196 | MGI:104591 Nbl1 NBL1, DAN family BMP antagonist 4 sequestering of BMP from receptor via BMP binding IBA PTN002309998 J:265628 197 | MGI:104591 Nbl1 NBL1, DAN family BMP antagonist 4 sequestering of BMP in extracellular matrix IDA J:47309 198 | MGI:1097159 Neo1 neogenin 9 positive regulation of BMP signaling pathway IGI MGI:88177 J:160796 199 | MGI:97359 Nodal nodal 10 BMP signaling pathway IBA PTN000218210 J:265628 200 | MGI:104327 Nog noggin 11 BMP signaling pathway involved in heart development IMP J:133691 201 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway IBA PTN000827385 J:265628 202 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway IDA J:90643 J:101046 J:120067 J:122704 J:157031 203 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway regulates a function/process that happens in embryonic stem cell IDA J:155850 204 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway IGI MGI:88177 MGI:88182 J:154664 205 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway IMP MGI:1862000 J:110617 206 | MGI:104327 Nog noggin 11 negative regulation of BMP signaling pathway ISO Q13253 J:164563 207 | MGI:104327 Nog noggin 11 regulation of BMP signaling pathway IMP MGI:1862000 J:121318 208 | MGI:97363 Notch1 notch 1 2 negative regulation of BMP signaling pathway IMP J:155019 209 | MGI:97363 Notch1 notch 1 2 positive regulation of BMP signaling pathway IDA J:166398 210 | MGI:97364 Notch2 notch 2 3 positive regulation of BMP signaling pathway regulates a function/process that happens in eye IMP MGI:3617328 J:197419 211 | MGI:2443665 Numa1 nuclear mitotic apparatus protein 1 7 positive regulation of BMP signaling pathway IMP J:229900 212 | MGI:107490 Pdcd4 programmed cell death 4 19 BMP signaling pathway ISO Q53EL6 J:164563 213 | MGI:2145154 Pelo pelota mRNA surveillance and ribosome rescue factor 13 positive regulation of BMP signaling pathway IMP MGI:2450933 J:228122 214 | MGI:101893 Pou5f1 POU domain, class 5, transcription factor 1 17 BMP signaling pathway involved in heart induction ISO Q01860 J:164563 215 | MGI:97747 Pparg peroxisome proliferator activated receptor gamma 6 negative regulation of BMP signaling pathway ISO P37231 J:164563 216 | MGI:99878 Ppm1a protein phosphatase 1A, magnesium dependent, alpha isoform 12 negative regulation of BMP signaling pathway IMP J:217224 217 | MGI:96522 Rbpj recombination signal binding protein for immunoglobulin kappa J region 5 positive regulation of BMP signaling pathway IMP J:119151 218 | MGI:2679262 Rgma repulsive guidance molecule family member A 7 BMP signaling pathway IBA PTN001265550 J:265628 219 | MGI:2679262 Rgma repulsive guidance molecule family member A 7 BMP signaling pathway IGI MGI:88177 MGI:88181 J:101046 220 | MGI:2679262 Rgma repulsive guidance molecule family member A 7 regulation of BMP signaling pathway regulates a function/process that happens in smooth muscle cell IDA J:123381 221 | MGI:2679262 Rgma repulsive guidance molecule family member A 7 regulation of BMP signaling pathway regulates a function/process that happens in smooth muscle cell IMP J:123381 222 | MGI:2679262 Rgma repulsive guidance molecule family member A 7 regulation of BMP signaling pathway ISO NP_064596 J:123381 223 | MGI:1916049 Rgmb repulsive guidance molecule family member B 17 BMP signaling pathway IBA PTN001265550 J:265628 224 | MGI:1916049 Rgmb repulsive guidance molecule family member B 17 BMP signaling pathway IDA J:98740 225 | MGI:2444521 Rnf165 ring finger protein 165 18 positive regulation of BMP signaling pathway IBA PTN001007268 J:265628 226 | MGI:2444521 Rnf165 ring finger protein 165 18 positive regulation of BMP signaling pathway IMP MGI:5516581 J:198828 227 | MGI:1347521 Ror2 receptor tyrosine kinase-like orphan receptor 2 13 BMP signaling pathway IMP MGI:3793279 J:163602 228 | MGI:99829 Runx2 runt related transcription factor 2 17 BMP signaling pathway IMP J:196266 229 | MGI:102934 Scx scleraxis 15 BMP signaling pathway IMP J:156015 230 | MGI:892014 Sfrp1 secreted frizzled-related protein 1 8 negative regulation of BMP signaling pathway regulates a function/process that happens in neural tube IGI MGI:108078 J:157031 231 | MGI:108078 Sfrp2 secreted frizzled-related protein 2 3 negative regulation of BMP signaling pathway IDA J:157031 232 | MGI:108078 Sfrp2 secreted frizzled-related protein 2 3 negative regulation of BMP signaling pathway regulates a function/process that happens in neural tube IGI MGI:892014 J:157031 233 | MGI:892010 Sfrp4 secreted frizzled-related protein 4 13 regulation of BMP signaling pathway IMP J:234467 234 | MGI:1860298 Sfrp5 secreted frizzled-related sequence protein 5 19 regulation of BMP signaling pathway IEA IPR034860 J:72247 235 | MGI:98310 Ski ski sarcoma viral oncogene homolog (avian) 4 negative regulation of BMP signaling pathway IBA PTN000000299 J:265628 236 | MGI:98310 Ski ski sarcoma viral oncogene homolog (avian) 4 negative regulation of BMP signaling pathway IGI MGI:88177 J:178818 237 | MGI:98310 Ski ski sarcoma viral oncogene homolog (avian) 4 negative regulation of BMP signaling pathway ISO P12755 J:164563 238 | MGI:106203 Skil SKI-like 3 negative regulation of BMP signaling pathway IBA PTN000000299 J:265628 239 | MGI:2443473 Skor1 SKI family transcriptional corepressor 1 9 negative regulation of BMP signaling pathway IBA PTN000000299 J:265628 240 | MGI:3645984 Skor2 SKI family transcriptional corepressor 2 18 negative regulation of BMP signaling pathway IBA PTN000000299 J:265628 241 | MGI:3645984 Skor2 SKI family transcriptional corepressor 2 18 negative regulation of BMP signaling pathway IGI MGI:88177 J:178818 242 | MGI:1332247 Slc33a1 solute carrier family 33 (acetyl-CoA transporter), member 1 3 BMP signaling pathway ISO O00400 J:164563 243 | MGI:1919336 Slc39a5 solute carrier family 39 (metal ion transporter), member 5 10 BMP signaling pathway IBA PTN002638841 J:265628 244 | MGI:1919336 Slc39a5 solute carrier family 39 (metal ion transporter), member 5 10 BMP signaling pathway ISO Q6ZMH5 J:164563 245 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IBA PTN000344419 J:265628 246 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IDA J:217224 247 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IGI MGI:107191 MGI:1916835 MGI:88177 J:109016 248 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IGI MGI:1328787 MGI:1859993 J:147287 249 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway happens in liver IGI P20722 J:151027 250 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IGI P97454 J:196266 251 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway IMP MGI:3045218 J:90769 252 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway ISO RGD:3030 J:155856 253 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway ISO Q15797 J:164563 254 | MGI:109452 Smad1 SMAD family member 1 8 BMP signaling pathway TAS J:79484 255 | MGI:108051 Smad2 SMAD family member 2 18 BMP signaling pathway IBA PTN000344419 J:265628 256 | MGI:108051 Smad2 SMAD family member 2 18 positive regulation of BMP signaling pathway ISO Q15796 J:164563 257 | MGI:1201674 Smad3 SMAD family member 3 9 BMP signaling pathway IBA PTN000344419 J:265628 258 | MGI:894293 Smad4 SMAD family member 4 18 BMP signaling pathway IBA PTN000344419 J:265628 259 | MGI:894293 Smad4 SMAD family member 4 18 BMP signaling pathway happens in hepatocyte IMP J:129666 260 | MGI:894293 Smad4 SMAD family member 4 18 BMP signaling pathway ISO Q13485 J:164563 261 | MGI:894293 Smad4 SMAD family member 4 18 positive regulation of BMP signaling pathway ISO Q13485 J:164563 262 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway IBA PTN000344419 J:265628 263 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway happens in neural tube IDA J:138713 264 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway IGI P70340 J:196266 265 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway IGI MGI:109452 MGI:1859993 J:147287 266 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway happens in liver IGI P20722 J:151027 267 | MGI:1328787 Smad5 SMAD family member 5 13 BMP signaling pathway TAS J:79484 268 | MGI:1336883 Smad6 SMAD family member 6 9 BMP signaling pathway IBA PTN000344419 J:265628 269 | MGI:1336883 Smad6 SMAD family member 6 9 BMP signaling pathway ISO O43541 J:164563 270 | MGI:1336883 Smad6 SMAD family member 6 9 negative regulation of BMP signaling pathway ISO O43541 J:164563 271 | MGI:1100518 Smad7 SMAD family member 7 18 BMP signaling pathway IBA PTN000344419 J:265628 272 | MGI:1100518 Smad7 SMAD family member 7 18 negative regulation of BMP signaling pathway IDA J:157031 273 | MGI:1100518 Smad7 SMAD family member 7 18 negative regulation of BMP signaling pathway ISO O15105 J:164563 274 | MGI:1859993 Smad9 SMAD family member 9 3 BMP signaling pathway IBA PTN000344419 J:265628 275 | MGI:1859993 Smad9 SMAD family member 9 3 BMP signaling pathway happens in neural tube IDA J:138713 276 | MGI:1859993 Smad9 SMAD family member 9 3 BMP signaling pathway IGI MGI:109452 MGI:1328787 J:147287 277 | MGI:1859993 Smad9 SMAD family member 9 3 BMP signaling pathway happens in liver IGI P20722 J:151027 278 | MGI:1927578 Smpd3 sphingomyelin phosphodiesterase 3, neutral 8 BMP signaling pathway IDA J:212995 279 | MGI:1923038 Smurf1 SMAD specific E3 ubiquitin protein ligase 1 5 BMP signaling pathway ISO Q9HCE7 J:164563 280 | MGI:1923038 Smurf1 SMAD specific E3 ubiquitin protein ligase 1 5 negative regulation of BMP signaling pathway IBA PTN002258298 J:265628 281 | MGI:1923038 Smurf1 SMAD specific E3 ubiquitin protein ligase 1 5 negative regulation of BMP signaling pathway ISO Q9HCE7 J:164563 282 | MGI:1913563 Smurf2 SMAD specific E3 ubiquitin protein ligase 2 11 negative regulation of BMP signaling pathway IBA PTN002258298 J:265628 283 | MGI:1202296 Sorl1 sortilin-related receptor, LDLR class A repeats-containing 9 negative regulation of BMP signaling pathway IMP J:228024 284 | MGI:1921749 Sost sclerostin 11 negative regulation of BMP signaling pathway IBA PTN001028853 J:265628 285 | MGI:1921749 Sost sclerostin 11 negative regulation of BMP signaling pathway regulates a function/process that happens in osteoblast IDA J:128100 286 | MGI:1921749 Sost sclerostin 11 negative regulation of BMP signaling pathway ISO Q9BQB4 J:86838 287 | MGI:1913292 Sostdc1 sclerostin domain containing 1 12 negative regulation of BMP signaling pathway IBA PTN001028853 J:265628 288 | MGI:1913292 Sostdc1 sclerostin domain containing 1 12 negative regulation of BMP signaling pathway regulates a function/process that happens in lower jaw molar epithelium,regulates a function/process that happens in epithelial cell IDA J:101382 289 | MGI:1913292 Sostdc1 sclerostin domain containing 1 12 negative regulation of BMP signaling pathway IDA J:86665 290 | MGI:1913292 Sostdc1 sclerostin domain containing 1 12 negative regulation of BMP signaling pathway regulates a function/process that happens in lower jaw molar epithelium,regulates a function/process that happens in epithelial cell IGI MGI:88180 J:101382 291 | MGI:1913292 Sostdc1 sclerostin domain containing 1 12 negative regulation of BMP signaling pathway ISO Q6X4U4 J:164563 292 | MGI:98359 Sox11 SRY (sex determining region Y)-box 11 12 positive regulation of BMP signaling pathway IMP J:136878 293 | MGI:2139806 Spg20 spastic paraplegia 20, spartin (Troyer syndrome) homolog (human) 3 negative regulation of BMP signaling pathway IBA PTN000472066 J:265628 294 | MGI:2139806 Spg20 spastic paraplegia 20, spartin (Troyer syndrome) homolog (human) 3 negative regulation of BMP signaling pathway regulates a function/process that happens in fibroblast IMP MGI:5430946 J:185987 295 | MGI:2138563 Sulf1 sulfatase 1 1 positive regulation of BMP signaling pathway ISO Q8IWU6 J:164563 296 | MGI:1202879 Tcf7l2 transcription factor 7 like 2, T cell specific, HMG box 19 negative regulation of BMP signaling pathway regulates a function/process that happens in Rathke's pouch IMP MGI:1926344 J:127546 297 | MGI:104672 Tfap2b transcription factor AP-2 beta 1 regulation of BMP signaling pathway IMP J:175832 298 | MGI:98725 Tgfb1 transforming growth factor, beta 1 7 BMP signaling pathway IBA PTN000932183 J:265628 299 | MGI:98726 Tgfb2 transforming growth factor, beta 2 1 BMP signaling pathway IBA PTN000932183 J:265628 300 | MGI:98727 Tgfb3 transforming growth factor, beta 3 12 BMP signaling pathway IBA PTN000932183 J:265628 301 | MGI:104637 Tgfbr3 transforming growth factor, beta receptor III 5 BMP signaling pathway ISO Q03167 J:164563 302 | MGI:104637 Tgfbr3 transforming growth factor, beta receptor III 5 positive regulation of BMP signaling pathway regulates a function/process that happens in palatal shelf,regulates a function/process that has the participant Bmp2,regulates a function/process that has the participant Bmp4,regulates a function/process that has the participant Acvr1,regulates a function/process that has the participant Bmpr1a IMP J:218259 303 | MGI:1915138 Tmem100 transmembrane protein 100 11 BMP signaling pathway ISO Q9NV29 J:164563 304 | MGI:1919003 Tmprss6 transmembrane serine protease 6 15 negative regulation of BMP signaling pathway regulates a function/process that happens in hepatocyte IGI MGI:1321394 MGI:1916835 MGI:88177 MGI:88180 J:182123 305 | MGI:1349721 Tob1 transducer of ErbB-2.1 11 negative regulation of BMP signaling pathway IDA J:66504 306 | MGI:2137357 Trim33 tripartite motif-containing 33 3 negative regulation of BMP signaling pathway ISO Q9UPN9 J:164563 307 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 BMP signaling pathway IGI MGI:88180 J:90398 308 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 negative regulation of BMP signaling pathway IDA J:98069 309 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 negative regulation of BMP signaling pathway IMP MGI:2655736 J:82738 310 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 positive regulation of BMP signaling pathway IMP MGI:2655736 J:82738 311 | MGI:2137520 Twsg1 twisted gastrulation BMP signaling modulator 1 17 regulation of BMP signaling pathway IBA PTN000267834 J:265628 312 | MGI:2444266 Ube2o ubiquitin-conjugating enzyme E2O 11 positive regulation of BMP signaling pathway ISO Q9C0C9 J:164563 313 | MGI:894681 Usp9x ubiquitin specific peptidase 9, X chromosome X BMP signaling pathway ISO Q93008 J:164563 314 | MGI:101857 Usp15 ubiquitin specific peptidase 15 10 BMP signaling pathway ISO Q9Y4E8 J:164563 315 | MGI:1921298 Vsir V-set immunoregulatory receptor 10 BMP signaling pathway happens in embryonic stem cell IGI MGI:2676809 J:192401 316 | MGI:1921298 Vsir V-set immunoregulatory receptor 10 positive regulation of BMP signaling pathway regulates a function/process that happens in stem cell IGI MGI:1338938 J:193667 317 | MGI:1921298 Vsir V-set immunoregulatory receptor 10 positive regulation of BMP signaling pathway regulates a function/process that happens in stem cell IMP J:193667 318 | MGI:2442987 Vwc2 von Willebrand factor C domain containing 2 11 negative regulation of BMP signaling pathway IBA PTN002921765 J:265628 319 | MGI:2442987 Vwc2 von Willebrand factor C domain containing 2 11 negative regulation of BMP signaling pathway IDA J:122704 320 | MGI:2444069 Vwc2l von Willebrand factor C domain-containing protein 2-like 1 negative regulation of BMP signaling pathway IBA PTN002921765 J:265628 321 | MGI:2444069 Vwc2l von Willebrand factor C domain-containing protein 2-like 1 negative regulation of BMP signaling pathway IGI MGI:88177 MGI:88182 J:154664 322 | MGI:98953 Wnt1 wingless-type MMTV integration site family, member 1 15 BMP signaling pathway ISO Q91029 J:157031 323 | MGI:98953 Wnt1 wingless-type MMTV integration site family, member 1 15 negative regulation of BMP signaling pathway ISO P04628 J:164563 324 | MGI:98956 Wnt3a wingless-type MMTV integration site family, member 3A 11 BMP signaling pathway ISO Q2LMP1 J:157031 325 | MGI:98958 Wnt5a wingless-type MMTV integration site family, member 5A 14 negative regulation of BMP signaling pathway regulates a function/process that happens in diencephalon IMP MGI:1857617 J:132979 326 | MGI:1919943 Zcchc12 zinc finger, CCHC domain containing 12 X BMP signaling pathway IDA J:152281 327 | MGI:2389445 Zfp128 zinc finger protein 128 7 BMP signaling pathway IMP J:79484 328 | MGI:1891217 Zfp423 zinc finger protein 423 8 positive regulation of BMP signaling pathway IDA J:166398 329 | 330 | -------------------------------------------------------------------------------- /gene_sets/geneset_TF_all.txt: -------------------------------------------------------------------------------- 1 | GO_DNA_BINDING_TRANSCRIPTION_FACTOR_ACTIVITY 2 | > A protein or a member of a complex that interacts selectively and non-covalently with a specific DNA sequence (sometimes referred to as a motif) within the regulatory region of a gene to modulate transcription. Regulatory regions include promoters (proximal and distal) and enhancers. Genes are transcriptional units, and include bacterial operons. [GOC:txnOH-2018] 3 | AC005747.1 4 | AC010326.1 5 | AC092279.1 6 | AC118549.1 7 | ADNP 8 | ADNP2 9 | AEBP1 10 | AEBP2 11 | AFF1 12 | AFF3 13 | AFF4 14 | AHCTF1 15 | AHR 16 | AHRR 17 | AIRE 18 | AKNA 19 | AKNAD1 20 | ALX1 21 | ALX3 22 | ALX4 23 | ANHX 24 | ANKRD30A 25 | AR 26 | ARGFX 27 | ARHGAP35 28 | ARID3A 29 | ARID3B 30 | ARID3C 31 | ARID5A 32 | ARID5B 33 | ARNT 34 | ARNT2 35 | ARNTL 36 | ARNTL2 37 | ARX 38 | ASCL1 39 | ASCL2 40 | ASCL3 41 | ASCL4 42 | ASCL5 43 | ASH1L 44 | ATF1 45 | ATF2 46 | ATF3 47 | ATF4 48 | ATF5 49 | ATF6 50 | ATF6B 51 | ATF7 52 | ATOH1 53 | ATOH7 54 | ATOH8 55 | BACH1 56 | BACH2 57 | BARHL1 58 | BARHL2 59 | BARX1 60 | BARX2 61 | BATF 62 | BATF2 63 | BATF3 64 | BBX 65 | BCL11A 66 | BCL11B 67 | BCL3 68 | BCL6 69 | BCL6B 70 | BHLHA15 71 | BHLHA9 72 | BHLHE22 73 | BHLHE23 74 | BHLHE40 75 | BHLHE41 76 | BLZF1 77 | BMPR1A 78 | BNC1 79 | BORCS8-MEF2B 80 | BRD8 81 | BSX 82 | BTAF1 83 | BTG2 84 | CAMTA1 85 | CAMTA2 86 | CARF 87 | CARHSP1 88 | CBFA2T2 89 | CBFA2T3 90 | CBFB 91 | CC2D1A 92 | CC2D1B 93 | CDC5L 94 | CDX1 95 | CDX2 96 | CDX4 97 | CEBPA 98 | CEBPB 99 | CEBPD 100 | CEBPE 101 | CEBPG 102 | CEBPZ 103 | CENPT 104 | CERS3 105 | CERS6 106 | CGGBP1 107 | CHCHD3 108 | CHRAC1 109 | CIC 110 | CIR1 111 | CITED1 112 | CITED2 113 | CLOCK 114 | CNBP 115 | CNOT8 116 | CRAMP1 117 | CREB1 118 | CREB3 119 | CREB3L1 120 | CREB3L2 121 | CREB3L3 122 | CREB3L4 123 | CREB5 124 | CREBL2 125 | CREBRF 126 | CREBZF 127 | CREM 128 | CRX 129 | CSRNP1 130 | CSRNP2 131 | CSRNP3 132 | CTCF 133 | CTCFL 134 | CTNNB1 135 | CUX2 136 | DACH1 137 | DACH2 138 | DBP 139 | DBX1 140 | DBX2 141 | DDIT3 142 | DEAF1 143 | DLX1 144 | DLX2 145 | DLX3 146 | DLX4 147 | DLX5 148 | DLX6 149 | DMBX1 150 | DMRT1 151 | DMRT2 152 | DMRT3 153 | DMRTA1 154 | DMRTA2 155 | DMRTB1 156 | DMRTC1 157 | DMRTC1B 158 | DMRTC2 159 | DMTF1 160 | DNAJC2 161 | DPF2 162 | DPRX 163 | DR1 164 | DRAP1 165 | DRGX 166 | DUX4 167 | DUXA 168 | E2F1 169 | E2F2 170 | E2F3 171 | E2F4 172 | E2F5 173 | E2F6 174 | E2F7 175 | E2F8 176 | E4F1 177 | EAF2 178 | EBF1 179 | EBF2 180 | EBF3 181 | EBF4 182 | EGR1 183 | EGR2 184 | EGR3 185 | EGR4 186 | EHF 187 | ELF1 188 | ELF2 189 | ELF3 190 | ELF4 191 | ELF5 192 | ELK1 193 | ELK3 194 | ELK4 195 | ELMSAN1 196 | EMX1 197 | EMX2 198 | EN1 199 | EN2 200 | ENO1 201 | EOMES 202 | EPAS1 203 | ERF 204 | ERFL 205 | ERG 206 | ESR1 207 | ESR2 208 | ESRRA 209 | ESRRB 210 | ESRRG 211 | ESX1 212 | ETS1 213 | ETS2 214 | ETV1 215 | ETV2 216 | ETV3 217 | ETV3L 218 | ETV4 219 | ETV5 220 | ETV6 221 | ETV7 222 | EVX1 223 | EVX2 224 | EZH1 225 | EZH2 226 | FERD3L 227 | FEV 228 | FEZF1 229 | FEZF2 230 | FIGLA 231 | FLI1 232 | FOS 233 | FOSB 234 | FOSL1 235 | FOSL2 236 | FOXA1 237 | FOXA2 238 | FOXA3 239 | FOXB1 240 | FOXB2 241 | FOXC1 242 | FOXC2 243 | FOXD1 244 | FOXD2 245 | FOXD3 246 | FOXD4 247 | FOXD4L1 248 | FOXD4L3 249 | FOXD4L4 250 | FOXD4L5 251 | FOXD4L6 252 | FOXE1 253 | FOXE3 254 | FOXF1 255 | FOXF2 256 | FOXG1 257 | FOXH1 258 | FOXI1 259 | FOXI2 260 | FOXI3 261 | FOXJ1 262 | FOXJ2 263 | FOXJ3 264 | FOXK1 265 | FOXK2 266 | FOXL1 267 | FOXL2 268 | FOXM1 269 | FOXN1 270 | FOXN2 271 | FOXN3 272 | FOXN4 273 | FOXO1 274 | FOXO3 275 | FOXO3B 276 | FOXO4 277 | FOXO6 278 | FOXP1 279 | FOXP2 280 | FOXP3 281 | FOXP4 282 | FOXQ1 283 | FOXR1 284 | FOXR2 285 | FOXS1 286 | FUBP1 287 | FUBP3 288 | GABPA 289 | GABPB1 290 | GATA1 291 | GATA2 292 | GATA3 293 | GATA4 294 | GATA5 295 | GATA6 296 | GATAD1 297 | GBX1 298 | GBX2 299 | GCFC2 300 | GCM1 301 | GCM2 302 | GFI1 303 | GFI1B 304 | GLI1 305 | GLI2 306 | GLI3 307 | GLI4 308 | GLIS1 309 | GLIS2 310 | GLMP 311 | GMEB1 312 | GMEB2 313 | GOLGB1 314 | GON4L 315 | GPBP1 316 | GPBP1L1 317 | GRHL1 318 | GRHL2 319 | GRHL3 320 | GSC 321 | GSC2 322 | GSX1 323 | GSX2 324 | GTF2I 325 | GTF2IRD1 326 | GZF1 327 | HAND1 328 | HAND2 329 | HBP1 330 | HDX 331 | HELT 332 | HES1 333 | HES2 334 | HES3 335 | HES4 336 | HES5 337 | HES6 338 | HES7 339 | HESX1 340 | HEY1 341 | HEY2 342 | HEYL 343 | HHEX 344 | HIC1 345 | HIC2 346 | HIF1A 347 | HIF3A 348 | HINFP 349 | HIRA 350 | HIVEP1 351 | HIVEP2 352 | HIVEP3 353 | HLF 354 | HLTF 355 | HLX 356 | HMBOX1 357 | HMG20A 358 | HMGA1 359 | HMGA2 360 | HMX1 361 | HMX2 362 | HMX3 363 | HNF1A 364 | HNF1B 365 | HNF4A 366 | HNF4G 367 | HNRNPAB 368 | HNRNPK 369 | HOMEZ 370 | HOPX 371 | HOXA1 372 | HOXA10 373 | HOXA11 374 | HOXA13 375 | HOXA2 376 | HOXA3 377 | HOXA4 378 | HOXA5 379 | HOXA6 380 | HOXA7 381 | HOXA9 382 | HOXB1 383 | HOXB13 384 | HOXB2 385 | HOXB3 386 | HOXB4 387 | HOXB5 388 | HOXB6 389 | HOXB7 390 | HOXB8 391 | HOXB9 392 | HOXC10 393 | HOXC11 394 | HOXC12 395 | HOXC13 396 | HOXC4 397 | HOXC5 398 | HOXC6 399 | HOXC8 400 | HOXC9 401 | HOXD1 402 | HOXD10 403 | HOXD11 404 | HOXD12 405 | HOXD13 406 | HOXD3 407 | HOXD4 408 | HOXD8 409 | HOXD9 410 | HR 411 | HSF1 412 | HSF2 413 | HSF4 414 | HSF5 415 | HSFX1 416 | HSFX2 417 | HSFX3 418 | HSFX4 419 | HSFY1 420 | HSFY2 421 | ID1 422 | ID2 423 | ID3 424 | ID4 425 | IER2 426 | IFI16 427 | IKZF1 428 | IKZF2 429 | IKZF3 430 | IKZF4 431 | IKZF5 432 | INSM1 433 | INSM2 434 | IRF1 435 | IRF2 436 | IRF2BP1 437 | IRF2BP2 438 | IRF2BPL 439 | IRF3 440 | IRF4 441 | IRF5 442 | IRF6 443 | IRF7 444 | IRF8 445 | IRF9 446 | IRX1 447 | IRX2 448 | IRX3 449 | IRX4 450 | IRX5 451 | IRX6 452 | ISL1 453 | ISL2 454 | ISX 455 | JARID2 456 | JAZF1 457 | JDP2 458 | JUN 459 | JUNB 460 | JUND 461 | KAT7 462 | KCNIP3 463 | KDM3A 464 | KDM5A 465 | KDM5B 466 | KLF1 467 | KLF10 468 | KLF11 469 | KLF12 470 | KLF13 471 | KLF14 472 | KLF15 473 | KLF16 474 | KLF17 475 | KLF18 476 | KLF2 477 | KLF3 478 | KLF4 479 | KLF5 480 | KLF6 481 | KLF7 482 | KLF8 483 | KLF9 484 | KMT2A 485 | KMT2B 486 | KMT2D 487 | L3MBTL1 488 | L3MBTL3 489 | L3MBTL4 490 | LBX1 491 | LBX2 492 | LCOR 493 | LCORL 494 | LEF1 495 | LEUTX 496 | LHX1 497 | LHX2 498 | LHX3 499 | LHX4 500 | LHX5 501 | LHX6 502 | LHX8 503 | LHX9 504 | LITAF 505 | LMO2 506 | LMO4 507 | LMX1A 508 | LMX1B 509 | LRRFIP1 510 | LYL1 511 | LZTR1 512 | LZTS1 513 | MACC1 514 | MAEL 515 | MAF 516 | MAFA 517 | MAFB 518 | MAFF 519 | MAFG 520 | MAFK 521 | MAX 522 | MAZ 523 | MECOM 524 | MECP2 525 | MEF2A 526 | MEF2B 527 | MEF2C 528 | MEF2D 529 | MEIS1 530 | MEIS2 531 | MEIS3 532 | MEOX1 533 | MEOX2 534 | MESP1 535 | MESP2 536 | MGA 537 | MIER1 538 | MIER3 539 | MIS18BP1 540 | MITF 541 | MIXL1 542 | MKX 543 | MLLT1 544 | MLLT10 545 | MLLT3 546 | MLX 547 | MLXIP 548 | MLXIPL 549 | MNT 550 | MNX1 551 | MSC 552 | MSGN1 553 | MSX1 554 | MSX2 555 | MTF1 556 | MTF2 557 | MXD1 558 | MXD3 559 | MXD4 560 | MXI1 561 | MYB 562 | MYBL1 563 | MYBL2 564 | MYC 565 | MYCL 566 | MYCN 567 | MYEF2 568 | MYF5 569 | MYF6 570 | MYNN 571 | MYOCD 572 | MYOD1 573 | MYOG 574 | MYPOP 575 | MYRF 576 | MYRFL 577 | MYSM1 578 | MYT1 579 | MYT1L 580 | MZF1 581 | NANOG 582 | NANOGNB 583 | NANOGP1 584 | NANOGP8 585 | NCOA1 586 | NCOA2 587 | NCOA3 588 | NDN 589 | NEUROD1 590 | NEUROD2 591 | NEUROD4 592 | NEUROD6 593 | NEUROG1 594 | NEUROG2 595 | NEUROG3 596 | NFAT5 597 | NFATC1 598 | NFATC2 599 | NFATC3 600 | NFATC4 601 | NFE2 602 | NFE2L1 603 | NFE2L2 604 | NFE2L3 605 | NFE4 606 | NFIA 607 | NFIB 608 | NFIC 609 | NFIL3 610 | NFIX 611 | NFKB1 612 | NFKB2 613 | NFX1 614 | NFXL1 615 | NFYA 616 | NFYB 617 | NFYC 618 | NHLH1 619 | NHLH2 620 | NKRF 621 | NKX1-1 622 | NKX1-2 623 | NKX2-1 624 | NKX2-2 625 | NKX2-3 626 | NKX2-4 627 | NKX2-5 628 | NKX2-6 629 | NKX2-8 630 | NKX3-1 631 | NKX3-2 632 | NKX6-1 633 | NKX6-2 634 | NKX6-3 635 | NOBOX 636 | NOC4L 637 | NOLC1 638 | NOTCH1 639 | NOTO 640 | NPAS1 641 | NPAS2 642 | NPAS3 643 | NPAS4 644 | NR0B1 645 | NR0B2 646 | NR1D1 647 | NR1D2 648 | NR1H2 649 | NR1H3 650 | NR1H4 651 | NR1I2 652 | NR1I3 653 | NR2C1 654 | NR2C2 655 | NR2E1 656 | NR2E3 657 | NR2F1 658 | NR2F2 659 | NR2F6 660 | NR3C1 661 | NR3C2 662 | NR4A1 663 | NR4A2 664 | NR4A3 665 | NR5A1 666 | NR5A2 667 | NR6A1 668 | NRF1 669 | NRL 670 | NSD2 671 | NUCKS1 672 | OLIG1 673 | OLIG2 674 | OLIG3 675 | ONECUT1 676 | ONECUT2 677 | ONECUT3 678 | OSR1 679 | OTP 680 | OTX1 681 | OTX2 682 | OVOL1 683 | OVOL2 684 | OVOL3 685 | PA2G4 686 | PARP1 687 | PATZ1 688 | PAX1 689 | PAX2 690 | PAX3 691 | PAX4 692 | PAX5 693 | PAX6 694 | PAX7 695 | PAX8 696 | PAX9 697 | PAXBP1 698 | PBX1 699 | PBX2 700 | PBX3 701 | PBX4 702 | PCBP1 703 | PCBP3 704 | PCGF2 705 | PCGF3 706 | PCGF5 707 | PCGF6 708 | PDX1 709 | PEG3 710 | PFDN1 711 | PGBD1 712 | PGR 713 | PHF1 714 | PHF19 715 | PHF20 716 | PHF5A 717 | PHF6 718 | PHOX2A 719 | PHOX2B 720 | PHTF1 721 | PITX1 722 | PITX2 723 | PITX3 724 | PKNOX1 725 | PKNOX2 726 | PLAG1 727 | PLAGL1 728 | PLAGL2 729 | PLSCR1 730 | POLE4 731 | POU1F1 732 | POU2F1 733 | POU2F2 734 | POU2F3 735 | POU3F1 736 | POU3F2 737 | POU3F3 738 | POU3F4 739 | POU4F1 740 | POU4F2 741 | POU4F3 742 | POU5F1 743 | POU5F1B 744 | POU5F2 745 | POU6F1 746 | POU6F2 747 | PPARA 748 | PPARD 749 | PPARG 750 | PRDM1 751 | PRDM11 752 | PRDM12 753 | PRDM13 754 | PRDM14 755 | PRDM15 756 | PRDM2 757 | PRDM4 758 | PRDM5 759 | PRDM6 760 | PRDM7 761 | PRDM9 762 | PRKN 763 | PROP1 764 | PROX1 765 | PROX2 766 | PRRX1 767 | PRRX2 768 | PTF1A 769 | PTH 770 | PTTG1 771 | PURA 772 | PURB 773 | PURG 774 | QRICH1 775 | RAI1 776 | RARA 777 | RARB 778 | RARG 779 | RAX 780 | RAX2 781 | RB1 782 | RBAK 783 | RBPJ 784 | RBPJL 785 | RC3H2 786 | RCAN1 787 | RCOR1 788 | RCOR2 789 | RCOR3 790 | REL 791 | RELA 792 | RELB 793 | RERE 794 | REST 795 | RFX1 796 | RFX2 797 | RFX3 798 | RFX4 799 | RFX5 800 | RFX6 801 | RFX7 802 | RFX8 803 | RFXANK 804 | RFXAP 805 | RHOXF1 806 | RHOXF2 807 | RHOXF2B 808 | RORA 809 | RORB 810 | RORC 811 | RREB1 812 | RUNX1 813 | RUNX1T1 814 | RUNX2 815 | RUNX3 816 | RXRA 817 | RXRB 818 | RXRG 819 | SALL1 820 | SALL2 821 | SARNP 822 | SATB1 823 | SATB2 824 | SCAND1 825 | SCAND2P 826 | SCML1 827 | SCML2 828 | SCRT1 829 | SCRT2 830 | SCX 831 | SETBP1 832 | SHOX 833 | SHOX2 834 | SIM1 835 | SIM2 836 | SIN3A 837 | SIRT1 838 | SIX1 839 | SIX2 840 | SIX3 841 | SIX4 842 | SIX5 843 | SIX6 844 | SKI 845 | SKIL 846 | SKOR1 847 | SKOR2 848 | SLC26A3 849 | SLC2A4RG 850 | SLC30A9 851 | SMAD1 852 | SMAD2 853 | SMAD3 854 | SMAD4 855 | SMAD5 856 | SMAD6 857 | SMAD7 858 | SMAD9 859 | SNAI1 860 | SNAI2 861 | SNAI3 862 | SNAPC2 863 | SNAPC4 864 | SNAPC5 865 | SOHLH1 866 | SOHLH2 867 | SOX1 868 | SOX10 869 | SOX11 870 | SOX12 871 | SOX13 872 | SOX14 873 | SOX15 874 | SOX17 875 | SOX18 876 | SOX2 877 | SOX21 878 | SOX3 879 | SOX30 880 | SOX4 881 | SOX5 882 | SOX6 883 | SOX7 884 | SOX8 885 | SOX9 886 | SP1 887 | SP100 888 | SP110 889 | SP140 890 | SP140L 891 | SP2 892 | SP3 893 | SP4 894 | SP5 895 | SP6 896 | SP7 897 | SP8 898 | SP9 899 | SPDEF 900 | SPI1 901 | SPIB 902 | SPIC 903 | SREBF1 904 | SREBF2 905 | SRF 906 | SRY 907 | ST18 908 | STAT1 909 | STAT2 910 | STAT3 911 | STAT4 912 | STAT5A 913 | STAT5B 914 | STAT6 915 | STK16 916 | SUPT4H1 917 | SUPT6H 918 | TADA2B 919 | TAF12 920 | TAF13 921 | TAF4 922 | TAF4B 923 | TAF5 924 | TAF6 925 | TAF7 926 | TAL1 927 | TAL2 928 | TARDBP 929 | TBP 930 | TBPL1 931 | TBPL2 932 | TBR1 933 | TBX1 934 | TBX10 935 | TBX15 936 | TBX18 937 | TBX19 938 | TBX2 939 | TBX20 940 | TBX21 941 | TBX22 942 | TBX3 943 | TBX4 944 | TBX5 945 | TBX6 946 | TBXT 947 | TCEAL1 948 | TCF12 949 | TCF15 950 | TCF19 951 | TCF20 952 | TCF21 953 | TCF23 954 | TCF25 955 | TCF3 956 | TCF4 957 | TCF7 958 | TCF7L1 959 | TCF7L2 960 | TCFL5 961 | TEAD1 962 | TEAD2 963 | TEAD3 964 | TEAD4 965 | TEF 966 | TERF1 967 | TERF2 968 | TFAM 969 | TFAP2A 970 | TFAP2B 971 | TFAP2C 972 | TFAP2D 973 | TFAP2E 974 | TFAP4 975 | TFCP2 976 | TFCP2L1 977 | TFDP1 978 | TFDP2 979 | TFDP3 980 | TFE3 981 | TFEB 982 | TFEC 983 | TGIF1 984 | TGIF2 985 | TGIF2LX 986 | TGIF2LY 987 | THAP1 988 | THAP10 989 | THAP11 990 | THAP12 991 | THAP2 992 | THAP3 993 | THAP4 994 | THAP5 995 | THAP6 996 | THAP7 997 | THAP8 998 | THAP9 999 | THRA 1000 | THRB 1001 | TLE4 1002 | TLX1 1003 | TLX2 1004 | TLX3 1005 | TOX2 1006 | TOX3 1007 | TOX4 1008 | TP53 1009 | TP63 1010 | TP73 1011 | TPRX1 1012 | TRERF1 1013 | TRIM29 1014 | TRPS1 1015 | TSC22D1 1016 | TSC22D2 1017 | TSC22D3 1018 | TSC22D4 1019 | TSHZ1 1020 | TSHZ2 1021 | TSHZ3 1022 | TWIST1 1023 | TXK 1024 | UBN1 1025 | UBP1 1026 | UBTF 1027 | UNCX 1028 | USF1 1029 | USF2 1030 | USF3 1031 | VAX1 1032 | VAX2 1033 | VDR 1034 | VENTX 1035 | VEZF1 1036 | VRTN 1037 | VSX1 1038 | VSX2 1039 | WDHD1 1040 | WIZ 1041 | WNT5A 1042 | WT1 1043 | XBP1 1044 | YBX1 1045 | YBX3 1046 | YEATS2 1047 | YEATS4 1048 | YY1 1049 | YY2 1050 | ZBED1 1051 | ZBED2 1052 | ZBED3 1053 | ZBED4 1054 | ZBED5 1055 | ZBED6 1056 | ZBED9 1057 | ZBTB12 1058 | ZBTB14 1059 | ZBTB16 1060 | ZBTB17 1061 | ZBTB18 1062 | ZBTB2 1063 | ZBTB20 1064 | ZBTB22 1065 | ZBTB24 1066 | ZBTB25 1067 | ZBTB26 1068 | ZBTB32 1069 | ZBTB33 1070 | ZBTB34 1071 | ZBTB37 1072 | ZBTB38 1073 | ZBTB4 1074 | ZBTB43 1075 | ZBTB45 1076 | ZBTB46 1077 | ZBTB48 1078 | ZBTB5 1079 | ZBTB6 1080 | ZBTB7A 1081 | ZBTB7B 1082 | ZBTB8B 1083 | ZC3H3 1084 | ZC3H4 1085 | ZC3H6 1086 | ZC3H8 1087 | ZEB1 1088 | ZEB2 1089 | ZFAT 1090 | ZFHX2 1091 | ZFHX3 1092 | ZFHX4 1093 | ZFP3 1094 | ZFP36L1 1095 | ZFP36L2 1096 | ZFP37 1097 | ZFP41 1098 | ZFP42 1099 | ZFP69 1100 | ZFP69B 1101 | ZFP90 1102 | ZFPM1 1103 | ZFPM2 1104 | ZFX 1105 | ZFY 1106 | ZGLP1 1107 | ZGPAT 1108 | ZHX1 1109 | ZHX2 1110 | ZHX3 1111 | ZIC1 1112 | ZIC2 1113 | ZIC3 1114 | ZIC4 1115 | ZIC5 1116 | ZIM2 1117 | ZKSCAN1 1118 | ZKSCAN2 1119 | ZKSCAN3 1120 | ZKSCAN4 1121 | ZKSCAN5 1122 | ZKSCAN7 1123 | ZKSCAN8 1124 | ZMYM1 1125 | ZMYM2 1126 | ZMYM3 1127 | ZMYM4 1128 | ZMYM5 1129 | ZMYM6 1130 | ZNF10 1131 | ZNF117 1132 | ZNF12 1133 | ZNF124 1134 | ZNF131 1135 | ZNF132 1136 | ZNF133 1137 | ZNF134 1138 | ZNF135 1139 | ZNF138 1140 | ZNF14 1141 | ZNF140 1142 | ZNF143 1143 | ZNF146 1144 | ZNF148 1145 | ZNF154 1146 | ZNF155 1147 | ZNF157 1148 | ZNF16 1149 | ZNF160 1150 | ZNF165 1151 | ZNF174 1152 | ZNF175 1153 | ZNF177 1154 | ZNF18 1155 | ZNF180 1156 | ZNF181 1157 | ZNF182 1158 | ZNF189 1159 | ZNF19 1160 | ZNF197 1161 | ZNF20 1162 | ZNF200 1163 | ZNF202 1164 | ZNF205 1165 | ZNF207 1166 | ZNF213 1167 | ZNF215 1168 | ZNF217 1169 | ZNF219 1170 | ZNF22 1171 | ZNF221 1172 | ZNF224 1173 | ZNF23 1174 | ZNF230 1175 | ZNF232 1176 | ZNF236 1177 | ZNF239 1178 | ZNF24 1179 | ZNF25 1180 | ZNF26 1181 | ZNF263 1182 | ZNF266 1183 | ZNF267 1184 | ZNF268 1185 | ZNF273 1186 | ZNF274 1187 | ZNF28 1188 | ZNF280A 1189 | ZNF280B 1190 | ZNF280C 1191 | ZNF280D 1192 | ZNF281 1193 | ZNF282 1194 | ZNF284 1195 | ZNF287 1196 | ZNF292 1197 | ZNF296 1198 | ZNF3 1199 | ZNF30 1200 | ZNF300 1201 | ZNF32 1202 | ZNF322 1203 | ZNF329 1204 | ZNF335 1205 | ZNF33A 1206 | ZNF341 1207 | ZNF35 1208 | ZNF350 1209 | ZNF367 1210 | ZNF37A 1211 | ZNF382 1212 | ZNF384 1213 | ZNF385A 1214 | ZNF391 1215 | ZNF394 1216 | ZNF395 1217 | ZNF396 1218 | ZNF397 1219 | ZNF398 1220 | ZNF404 1221 | ZNF410 1222 | ZNF414 1223 | ZNF423 1224 | ZNF43 1225 | ZNF439 1226 | ZNF44 1227 | ZNF440 1228 | ZNF444 1229 | ZNF445 1230 | ZNF446 1231 | ZNF449 1232 | ZNF45 1233 | ZNF451 1234 | ZNF483 1235 | ZNF487 1236 | ZNF491 1237 | ZNF496 1238 | ZNF497 1239 | ZNF500 1240 | ZNF501 1241 | ZNF511 1242 | ZNF524 1243 | ZNF529 1244 | ZNF536 1245 | ZNF541 1246 | ZNF550 1247 | ZNF551 1248 | ZNF554 1249 | ZNF555 1250 | ZNF556 1251 | ZNF557 1252 | ZNF558 1253 | ZNF559 1254 | ZNF559-ZNF177 1255 | ZNF56 1256 | ZNF560 1257 | ZNF564 1258 | ZNF566 1259 | ZNF567 1260 | ZNF580 1261 | ZNF582 1262 | ZNF589 1263 | ZNF593 1264 | ZNF597 1265 | ZNF599 1266 | ZNF613 1267 | ZNF614 1268 | ZNF619 1269 | ZNF620 1270 | ZNF622 1271 | ZNF628 1272 | ZNF639 1273 | ZNF644 1274 | ZNF646 1275 | ZNF648 1276 | ZNF649 1277 | ZNF653 1278 | ZNF668 1279 | ZNF669 1280 | ZNF684 1281 | ZNF688 1282 | ZNF69 1283 | ZNF691 1284 | ZNF692 1285 | ZNF7 1286 | ZNF70 1287 | ZNF705A 1288 | ZNF708 1289 | ZNF711 1290 | ZNF740 1291 | ZNF746 1292 | ZNF750 1293 | ZNF75A 1294 | ZNF75D 1295 | ZNF76 1296 | ZNF768 1297 | ZNF77 1298 | ZNF778 1299 | ZNF785 1300 | ZNF79 1301 | ZNF80 1302 | ZNF821 1303 | ZNF835 1304 | ZNF846 1305 | ZNF85 1306 | ZNF891 1307 | ZNF90 1308 | ZNF91 1309 | ZNF92 1310 | ZNF93 1311 | ZNFX1 1312 | ZRANB2 1313 | ZSCAN1 1314 | ZSCAN10 1315 | ZSCAN12 1316 | ZSCAN16 1317 | ZSCAN18 1318 | ZSCAN2 1319 | ZSCAN20 1320 | ZSCAN21 1321 | ZSCAN22 1322 | ZSCAN23 1323 | ZSCAN25 1324 | ZSCAN26 1325 | ZSCAN29 1326 | ZSCAN30 1327 | ZSCAN31 1328 | ZSCAN32 1329 | ZSCAN4 1330 | ZSCAN5A 1331 | ZSCAN5B 1332 | ZSCAN5C 1333 | ZSCAN5DP 1334 | ZSCAN9 1335 | ZXDA 1336 | ZXDC -------------------------------------------------------------------------------- /gene_sets/gs_KEGG_CELL_CYCLE.txt: -------------------------------------------------------------------------------- 1 | KEGG_CELL_CYCLE 2 | > Cell cycle 3 | ABL1 4 | ANAPC1 5 | ANAPC10 6 | ANAPC11 7 | ANAPC13 8 | ANAPC2 9 | ANAPC4 10 | ANAPC5 11 | ANAPC7 12 | ATM 13 | ATR 14 | BUB1 15 | BUB1B 16 | BUB3 17 | CCNA1 18 | CCNA2 19 | CCNB1 20 | CCNB2 21 | CCNB3 22 | CCND1 23 | CCND2 24 | CCND3 25 | CCNE1 26 | CCNE2 27 | CCNH 28 | CDC14A 29 | CDC14B 30 | CDC16 31 | CDC20 32 | CDC23 33 | CDC25A 34 | CDC25B 35 | CDC25C 36 | CDC26 37 | CDC27 38 | CDC45 39 | CDC6 40 | CDC7 41 | CDK1 42 | CDK2 43 | CDK4 44 | CDK6 45 | CDK7 46 | CDKN1A 47 | CDKN1B 48 | CDKN1C 49 | CDKN2A 50 | CDKN2B 51 | CDKN2C 52 | CDKN2D 53 | CHEK1 54 | CHEK2 55 | CREBBP 56 | CUL1 57 | DBF4 58 | E2F1 59 | E2F2 60 | E2F3 61 | E2F4 62 | E2F5 63 | EP300 64 | ESPL1 65 | FZR1 66 | GADD45A 67 | GADD45B 68 | GADD45G 69 | GSK3B 70 | HDAC1 71 | HDAC2 72 | MAD1L1 73 | MAD2L1 74 | MAD2L2 75 | MCM2 76 | MCM3 77 | MCM4 78 | MCM5 79 | MCM6 80 | MCM7 81 | MDM2 82 | MYC 83 | ORC1 84 | ORC2 85 | ORC3 86 | ORC4 87 | ORC5 88 | ORC6 89 | PCNA 90 | PKMYT1 91 | PLK1 92 | PRKDC 93 | PTTG1 94 | PTTG2 95 | RAD21 96 | RB1 97 | RBL1 98 | RBL2 99 | RBX1 100 | SFN 101 | SKP1 102 | SKP2 103 | SMAD2 104 | SMAD3 105 | SMAD4 106 | SMC1A 107 | SMC1B 108 | SMC3 109 | STAG1 110 | STAG2 111 | TFDP1 112 | TFDP2 113 | TGFB1 114 | TGFB2 115 | TGFB3 116 | TP53 117 | TTK 118 | WEE1 119 | WEE2 120 | YWHAB 121 | YWHAE 122 | YWHAG 123 | YWHAH 124 | YWHAQ 125 | YWHAZ 126 | ZBTB17 -------------------------------------------------------------------------------- /gene_sets/gs_KEGG_MTOR_SIGNALING.txt: -------------------------------------------------------------------------------- 1 | KEGG_MTOR_SIGNALING_PATHWAY 2 | > mTOR signaling pathway 3 | AC091230.1 4 | AKT1 5 | AKT2 6 | AKT3 7 | BRAF 8 | CAB39 9 | CAB39L 10 | DDIT4 11 | EIF4B 12 | EIF4E 13 | EIF4E1B 14 | EIF4E2 15 | EIF4EBP1 16 | HIF1A 17 | IGF1 18 | INS 19 | MAPK1 20 | MAPK3 21 | MLST8 22 | MTOR 23 | PDPK1 24 | PGF 25 | PIK3CA 26 | PIK3CB 27 | PIK3CD 28 | PIK3CG 29 | PIK3R1 30 | PIK3R2 31 | PIK3R3 32 | PIK3R5 33 | PRKAA1 34 | PRKAA2 35 | RHEB 36 | RICTOR 37 | RPS6 38 | RPS6KA1 39 | RPS6KA2 40 | RPS6KA3 41 | RPS6KA6 42 | RPS6KB1 43 | RPS6KB2 44 | RPTOR 45 | STK11 46 | STRADA 47 | TSC1 48 | TSC2 49 | ULK1 50 | ULK2 51 | VEGFA 52 | VEGFB 53 | VEGFC 54 | VEGFD -------------------------------------------------------------------------------- /gene_sets/gs_MITOTIC_CELL_CYCLE.txt: -------------------------------------------------------------------------------- 1 | MITOTIC_CELL_CYCLE 2 | > Genes annotated by the GO term GO:0000278. Progression through the phases of the mitotic cell cycle, the most common eukaryotic cell cycle, which canonically comprises four successive phases called G1, S, G2, and M and includes replication of the genome and the subsequent segregation of chromosomes into daughter cells. In some variant cell cycles nuclear replication or nuclear division may not be followed by cell division, or G1 and G2 phases may be absent. 3 | ABL1 4 | ACVR1 5 | ACVR1B 6 | AFAP1L2 7 | AKAP8 8 | ANAPC10 9 | ANAPC11 10 | ANAPC4 11 | ANAPC5 12 | ANLN 13 | APBB1 14 | APBB2 15 | ASNS 16 | ATM 17 | AURKA 18 | BCAT1 19 | BIRC5 20 | BRSK1 21 | BTG3 22 | BUB1 23 | BUB1B 24 | CCNA2 25 | CD28 26 | CDC123 27 | CDC16 28 | CDC23 29 | CDC25B 30 | CDC25C 31 | CDC27 32 | CDC6 33 | CDC7 34 | CDCA5 35 | CDK10 36 | CDK13 37 | CDK2 38 | CDK2AP1 39 | CDK4 40 | CDK6 41 | CDKN1A 42 | CDKN1B 43 | CDKN1C 44 | CDKN2A 45 | CDKN2B 46 | CDKN2C 47 | CDKN2D 48 | CDKN3 49 | CENPE 50 | CENPF 51 | CEP250 52 | CETN1 53 | CHFR 54 | CHMP1A 55 | CIT 56 | CLIP1 57 | CUL1 58 | CUL2 59 | CUL3 60 | CUL4A 61 | CUL5 62 | DBF4 63 | DCTN2 64 | DCTN3 65 | DDX11 66 | DLG1 67 | DLGAP5 68 | E2F1 69 | EGF 70 | EPGN 71 | EREG 72 | ESPL1 73 | FBXO5 74 | FOXC1 75 | FOXN3 76 | FOXO4 77 | GFI1 78 | GFI1B 79 | GML 80 | GSPT1 81 | INHBA 82 | KATNA1 83 | KHDRBS1 84 | KIF11 85 | KIF15 86 | KIF22 87 | KIF23 88 | KIF25 89 | KIF2C 90 | KNTC1 91 | KPNA2 92 | LATS1 93 | LATS2 94 | MAD2L1 95 | MAD2L2 96 | MAP3K11 97 | MPHOSPH6 98 | MPHOSPH9 99 | MYO16 100 | NBN 101 | NCAPH 102 | NDC80 103 | NEK2 104 | NEK6 105 | NOLC1 106 | NPM2 107 | NUMA1 108 | NUSAP1 109 | PAFAH1B1 110 | PAM 111 | PBRM1 112 | PCBP4 113 | PDS5B 114 | PIN1 115 | PKMYT1 116 | PLK1 117 | PML 118 | POLA1 119 | POLD1 120 | POLE 121 | PPP5C 122 | PPP6C 123 | PRC1 124 | PRMT5 125 | RAD17 126 | RAN 127 | RCC1 128 | RINT1 129 | SIK1 130 | SKP2 131 | SMAD3 132 | SMC1A 133 | SMC3 134 | SMC4 135 | SPDYA 136 | SPHK1 137 | STMN1 138 | SUGT1 139 | SUN2 140 | TAF1 141 | TARDBP 142 | TBRG4 143 | TGFA 144 | TGFB1 145 | TMEM8B 146 | TPD52L1 147 | TPX2 148 | TRIAP1 149 | TTK 150 | TTN 151 | UBE2C 152 | USH1C 153 | ZNRD2 154 | ZW10 155 | ZWINT -------------------------------------------------------------------------------- /gene_sets/gs_M_PHASE.txt: -------------------------------------------------------------------------------- 1 | M_PHASE 2 | > Genes annotated by the GO term GO:0000279. Progression through M phase, the part of the cell cycle comprising nuclear division. 3 | AKAP8 4 | ANAPC10 5 | ANAPC11 6 | ANAPC4 7 | ANAPC5 8 | ANLN 9 | ATM 10 | AURKA 11 | BIRC5 12 | BOLL 13 | BRSK1 14 | BUB1 15 | BUB1B 16 | CCNA1 17 | CCNA2 18 | CD28 19 | CDC16 20 | CDC23 21 | CDC25B 22 | CDC25C 23 | CDC27 24 | CDCA5 25 | CDK13 26 | CDKN2B 27 | CENPE 28 | CETN1 29 | CHEK1 30 | CHFR 31 | CHMP1A 32 | CIT 33 | CLIP1 34 | DCTN2 35 | DCTN3 36 | DDX11 37 | DLGAP5 38 | DMC1 39 | DUSP13 40 | EGF 41 | EPGN 42 | EREG 43 | ESPL1 44 | GML 45 | HSPA2 46 | KIF11 47 | KIF15 48 | KIF22 49 | KIF25 50 | KIF2C 51 | KNTC1 52 | KPNA2 53 | LIG3 54 | MAD2L1 55 | MAD2L2 56 | MPHOSPH6 57 | MPHOSPH9 58 | MRE11 59 | MSH4 60 | MSH5 61 | NBN 62 | NCAPH 63 | NDC80 64 | NEK2 65 | NEK6 66 | NOLC1 67 | NPM2 68 | NUMA1 69 | NUSAP1 70 | P3H4 71 | PAM 72 | PBRM1 73 | PCBP4 74 | PDS5B 75 | PIM2 76 | PIN1 77 | PKMYT1 78 | PLK1 79 | PML 80 | PPP5C 81 | PRMT5 82 | RAD1 83 | RAD17 84 | RAD21 85 | RAD50 86 | RAD51 87 | RAD51B 88 | RAD51D 89 | RAD52 90 | RAD54B 91 | RAD54L 92 | RAN 93 | RCC1 94 | REC8 95 | RINT1 96 | SMC1A 97 | SMC3 98 | SMC4 99 | SPO11 100 | STAG3 101 | SUGT1 102 | SYCP1 103 | TAF1L 104 | TARDBP 105 | TGFA 106 | TGFB1 107 | TOP3A 108 | TPX2 109 | TRIAP1 110 | TTK 111 | TTN 112 | UBE2C 113 | XRCC2 114 | ZNRD2 115 | ZW10 116 | ZWINT -------------------------------------------------------------------------------- /gene_sets/gs_Reelin.txt: -------------------------------------------------------------------------------- 1 | GO_REELIN_MEDIATED_SIGNALING_PATHWAY 2 | > A series of molecular signals initiated by the binding of reelin (a secreted glycoprotein) to a receptor on the surface of a target cell, and ending with regulation of a downstream cellular process, e.g. transcription. [GOC:bf, PMID:12827279, PMID:20223215, PR:000013879] 3 | CRK 4 | CRKL 5 | DAB2IP 6 | LRP8 7 | RELN 8 | STAT5A 9 | VLDLR -------------------------------------------------------------------------------- /gene_sets/gs_Reelin2.txt: -------------------------------------------------------------------------------- 1 | BIOCARTA_REELIN_PATHWAY 2 | > Reelin Signaling Pathway 3 | CDK5 4 | CDK5R1 5 | DAB1 6 | FYN 7 | LRP8 8 | RELN 9 | VLDLR -------------------------------------------------------------------------------- /gene_sets/gs_Reelin_PID.txt: -------------------------------------------------------------------------------- 1 | PID_REELIN_PATHWAY 2 | > Reelin signaling pathway 3 | AKT1 4 | ARHGEF2 5 | CBL 6 | CDK5 7 | CDK5R1 8 | CRKL 9 | DAB1 10 | FYN 11 | GRIN2A 12 | GRIN2B 13 | GSK3B 14 | ITGA3 15 | ITGB1 16 | LRP8 17 | LRPAP1 18 | MAP1B 19 | MAP2K7 20 | MAP3K11 21 | MAPK8 22 | MAPT 23 | NCK2 24 | PAFAH1B1 25 | PIK3CA 26 | PIK3R1 27 | RAP1A 28 | RAPGEF1 29 | RELN 30 | VLDLR -------------------------------------------------------------------------------- /gene_sets/gs_Reelin_Reactome.txt: -------------------------------------------------------------------------------- 1 | REACTOME_REELIN_SIGNALLING_PATHWAY 2 | > Reelin signalling pathway 3 | DAB1 4 | FYN 5 | RELN 6 | SH3KBP1 7 | VLDLR -------------------------------------------------------------------------------- /gene_sets/gs_SCZ2014_108loci.txt: -------------------------------------------------------------------------------- 1 | CCDC152 2 | NDRG1 3 | TOB2 4 | TCERG1 5 | ATF7 6 | KLHDC3 7 | AFMID 8 | MOB3A 9 | PTPDC1 10 | IGSF11 11 | LDHD 12 | FLCN 13 | ENSA 14 | ETS2 15 | AMER2 16 | FDPS 17 | FER 18 | FGF13 19 | KAZN 20 | HMHA1 21 | SH3BP1 22 | METTL7A 23 | CNNM3 24 | NAP1L5 25 | CRCP 26 | GNAS 27 | GPM6B 28 | NKIRAS2 29 | FRYL 30 | PRR18 31 | TAGLN3 32 | GTF2E1 33 | FAM216A 34 | HIP1 35 | ICA1 36 | ZNF546 37 | IDH1 38 | KCNJ2 39 | C2orf68 40 | LIMK1 41 | DBX2 42 | NDUFA4 43 | NEO1 44 | PCDH9 45 | PDK4 46 | GPRC5B 47 | PFKFB4 48 | PIP4K2A 49 | PMP22 50 | SYTL2 51 | DNAAF5 52 | GEMIN8 53 | LRRC1 54 | CHDH 55 | DHTKD1 56 | UBE2Q1 57 | SLC48A1 58 | BEX1 59 | BBX 60 | KIAA1161 61 | MTUS1 62 | SORCS2 63 | SEMA6A 64 | TNRC6C 65 | RALB 66 | RDX 67 | ARIH2OS 68 | AIDA 69 | VWA1 70 | SLC22A5 71 | SUMO3 72 | SOX10 73 | TAT 74 | DYNLT3 75 | TNFAIP2 76 | BEST1 77 | TRPV1 78 | RNF103 79 | ADIPOR2 80 | CLMN 81 | SCD5 82 | MLF2 83 | TSPAN14 84 | FAM161A 85 | YIPF4 86 | ZNF527 87 | JAGN1 88 | ARHGAP19 89 | CBR1 90 | NAV1 91 | CBFA2T2 92 | KCNAB3 93 | MTA2 94 | CCDC64 95 | TTYH2 96 | CREB5 97 | FAM53B 98 | RNF144A 99 | MED12 -------------------------------------------------------------------------------- /gene_sets/gs_SCZ2020.txt: -------------------------------------------------------------------------------- 1 | PLCH2 2 | RERE 3 | PDE4B 4 | NEGR1 5 | MYT1L 6 | AC068490.2 7 | ZNF804A 8 | CNTN4 9 | FHIT 10 | FOXP1 11 | PCGF3 12 | LINC01088 13 | SLC39A8 14 | GPM6A 15 | MAN2A1 16 | SGCD 17 | CUL9 18 | EYS 19 | BAI3 20 | SNAP91 21 | FOXO3 22 | PTPRK 23 | GRM1 24 | MAD1L1 25 | NXPH1 26 | SP4 27 | WBSCR17 28 | CALN1 29 | IMMP2L 30 | KIAA1549 31 | CSMD1 32 | TSNARE1 33 | RP11-399D6.2 34 | GABBR2 35 | KLF6 36 | NEBL 37 | GRAMD1B 38 | OPCML 39 | CACNA1C 40 | TMTC1 41 | NAB2 42 | R3HDM2 43 | RP11-2H8.3 44 | TXNRD1 45 | WSCD2 46 | ATP2A2 47 | TRPC4 48 | ENOX1 49 | BCL11B 50 | PAK6 51 | RP11-507B12.2 52 | FURIN 53 | GRIN2A 54 | EPN2 55 | MSI2 56 | DCC 57 | CTD-2008L17.2 58 | ZNF823 59 | LRRC4B 60 | NRIP1 61 | LINC00320 62 | CACNA1I 63 | NLGN4X 64 | IL1RAPL1 65 | PJA1 -------------------------------------------------------------------------------- /gene_sets/gs_SCZ2020_Prioritized.txt: -------------------------------------------------------------------------------- 1 | ENSG00000142599 2 | ENSG00000112659 3 | ENSG00000197933 4 | ENSG00000065609 5 | ENSG00000140564 6 | ENSG00000100346 7 | ENSG00000256500 8 | ENSG00000172817 9 | ENSG00000138821 10 | ENSG00000103037 11 | ENSG00000067082 12 | ENSG00000149564 13 | ENSG00000126456 14 | ENSG00000181191 15 | ENSG00000115524 16 | ENSG00000075035 17 | ENSG00000169592 18 | ENSG00000224924 19 | ENSG00000197136 20 | ENSG00000109572 21 | ENSG00000117020 22 | ENSG00000227603 23 | ENSG00000159640 24 | ENSG00000164037 25 | ENSG00000166589 26 | ENSG00000103423 27 | ENSG00000102471 28 | ENSG00000115540 29 | ENSG00000163016 30 | ENSG00000163673 31 | ENSG00000172922 32 | ENSG00000183117 33 | ENSG00000170571 34 | ENSG00000204969 35 | ENSG00000143578 36 | ENSG00000185274 37 | ENSG00000122778 38 | ENSG00000151067 39 | ENSG00000198431 40 | ENSG00000136928 41 | ENSG00000172260 42 | ENSG00000120658 43 | ENSG00000170396 44 | ENSG00000122584 45 | ENSG00000146938 46 | ENSG00000175224 47 | ENSG00000257991 48 | ENSG00000170624 49 | ENSG00000231200 50 | ENSG00000152894 51 | ENSG00000171045 52 | ENSG00000127152 53 | ENSG00000144619 54 | ENSG00000167491 55 | ENSG00000253553 56 | ENSG00000133107 57 | ENSG00000183715 58 | ENSG00000078114 59 | ENSG00000118689 60 | ENSG00000152822 61 | ENSG00000126453 62 | ENSG00000131409 63 | ENSG00000120071 64 | ENSG00000120088 65 | ENSG00000186868 66 | ENSG00000249307 67 | ENSG00000092470 68 | ENSG00000167004 69 | ENSG00000183166 70 | ENSG00000166886 71 | ENSG00000112893 72 | ENSG00000259616 73 | ENSG00000185619 74 | ENSG00000104765 75 | ENSG00000161277 76 | ENSG00000184903 77 | ENSG00000072134 78 | ENSG00000150625 79 | ENSG00000187323 80 | ENSG00000174437 81 | ENSG00000153944 82 | ENSG00000234840 83 | ENSG00000137843 84 | ENSG00000002822 85 | ENSG00000169306 86 | ENSG00000114861 87 | ENSG00000117593 88 | ENSG00000179912 89 | ENSG00000184588 90 | ENSG00000149527 91 | ENSG00000186487 92 | ENSG00000145354 93 | ENSG00000188107 94 | ENSG00000163634 95 | ENSG00000206129 96 | ENSG00000133687 97 | ENSG00000006744 98 | ENSG00000114054 99 | ENSG00000115073 100 | ENSG00000127903 101 | ENSG00000023171 102 | ENSG00000105866 103 | ENSG00000085788 104 | ENSG00000135298 105 | ENSG00000227676 106 | ENSG00000189283 107 | ENSG00000183454 108 | ENSG00000180530 109 | ENSG00000135638 110 | ENSG00000144040 111 | ENSG00000041357 112 | ENSG00000055147 113 | ENSG00000101447 114 | ENSG00000102882 115 | ENSG00000122687 116 | ENSG00000147905 117 | ENSG00000170802 118 | ENSG00000174939 119 | ENSG00000175324 120 | ENSG00000175727 121 | ENSG00000178922 122 | ENSG00000182858 123 | ENSG00000204856 124 | ENSG00000204962 125 | ENSG00000246560 126 | ENSG00000250091 127 | ENSG00000259946 128 | ENSG00000262319 129 | ENSG00000270028 130 | ENSG00000272335 131 | ENSG00000151883 132 | ENSG00000164588 133 | ENSG00000213956 134 | ENSG00000248148 135 | ENSG00000249405 136 | ENSG00000250122 137 | ENSG00000271455 138 | ENSG00000271752 139 | ENSG00000081842 140 | ENSG00000204965 141 | ENSG00000204967 142 | ENSG00000204970 143 | ENSG00000239389 144 | ENSG00000243232 145 | ENSG00000248106 146 | ENSG00000248383 147 | ENSG00000249158 148 | ENSG00000250515 149 | ENSG00000251664 150 | ENSG00000255408 151 | ENSG00000253107 152 | ENSG00000253122 153 | ENSG00000112981 154 | ENSG00000112983 155 | ENSG00000113013 156 | ENSG00000120705 157 | ENSG00000120709 158 | ENSG00000120733 159 | ENSG00000132563 160 | ENSG00000146013 161 | ENSG00000158402 162 | ENSG00000271196 163 | ENSG00000143570 164 | ENSG00000143614 165 | ENSG00000160741 166 | ENSG00000198837 167 | ENSG00000231827 168 | ENSG00000258028 169 | ENSG00000155511 170 | ENSG00000249484 171 | ENSG00000121621 172 | ENSG00000169519 173 | ENSG00000254606 174 | ENSG00000255094 175 | ENSG00000255322 176 | ENSG00000139323 177 | ENSG00000270344 178 | ENSG00000075413 179 | ENSG00000088808 180 | ENSG00000100664 181 | ENSG00000100711 182 | ENSG00000126214 183 | ENSG00000126215 184 | ENSG00000156411 185 | ENSG00000156414 186 | ENSG00000166165 187 | ENSG00000166166 188 | ENSG00000166170 189 | ENSG00000166183 190 | ENSG00000207568 191 | ENSG00000227729 192 | ENSG00000239117 193 | ENSG00000240624 194 | ENSG00000242837 195 | ENSG00000243904 196 | ENSG00000252469 197 | ENSG00000256053 198 | ENSG00000258534 199 | ENSG00000258735 200 | ENSG00000258851 201 | ENSG00000259428 202 | ENSG00000259775 203 | ENSG00000270705 204 | ENSG00000270938 205 | ENSG00000242673 206 | ENSG00000180828 207 | ENSG00000254377 208 | ENSG00000003249 209 | ENSG00000015413 210 | ENSG00000126856 211 | ENSG00000140995 212 | ENSG00000141002 213 | ENSG00000141013 214 | ENSG00000167522 215 | ENSG00000167526 216 | ENSG00000178773 217 | ENSG00000185324 218 | ENSG00000187741 219 | ENSG00000197912 220 | ENSG00000223959 221 | ENSG00000258839 222 | ENSG00000258947 223 | ENSG00000261118 224 | ENSG00000261812 225 | ENSG00000007923 226 | ENSG00000041988 227 | ENSG00000116273 228 | ENSG00000162413 229 | ENSG00000204859 230 | ENSG00000228750 231 | ENSG00000179950 232 | ENSG00000180900 233 | ENSG00000185189 234 | ENSG00000264144 235 | ENSG00000066135 236 | ENSG00000126091 237 | ENSG00000142949 238 | ENSG00000081189 239 | ENSG00000164180 240 | ENSG00000206958 241 | ENSG00000245526 242 | ENSG00000247828 243 | ENSG00000248309 244 | ENSG00000250156 245 | ENSG00000250831 246 | ENSG00000271904 247 | ENSG00000136383 248 | ENSG00000140612 249 | ENSG00000166716 250 | ENSG00000176371 251 | ENSG00000176700 252 | ENSG00000177082 253 | ENSG00000197696 254 | ENSG00000254779 255 | ENSG00000259415 256 | ENSG00000124212 257 | ENSG00000158445 258 | ENSG00000037749 259 | ENSG00000164574 260 | ENSG00000251710 261 | ENSG00000233107 262 | ENSG00000188641 263 | ENSG00000225206 264 | ENSG00000233557 265 | ENSG00000212366 266 | ENSG00000223479 267 | ENSG00000225087 268 | ENSG00000227016 269 | ENSG00000229636 270 | ENSG00000233973 271 | ENSG00000251825 272 | ENSG00000023902 273 | ENSG00000136631 274 | ENSG00000223945 275 | ENSG00000110492 276 | ENSG00000110497 277 | ENSG00000149091 278 | ENSG00000157613 279 | ENSG00000175220 280 | ENSG00000180423 281 | ENSG00000119242 282 | ENSG00000179195 283 | ENSG00000197653 284 | ENSG00000258923 285 | ENSG00000259012 286 | ENSG00000158019 287 | ENSG00000171174 288 | ENSG00000205334 289 | ENSG00000243147 290 | ENSG00000151320 291 | ENSG00000070366 292 | ENSG00000167720 293 | ENSG00000169554 294 | ENSG00000157680 295 | ENSG00000228031 296 | ENSG00000149970 297 | ENSG00000109956 298 | ENSG00000149328 299 | ENSG00000065000 300 | ENSG00000104885 301 | ENSG00000104897 302 | ENSG00000248685 303 | ENSG00000250723 304 | ENSG00000250954 305 | ENSG00000251755 306 | ENSG00000257237 307 | ENSG00000258144 308 | ENSG00000144642 309 | ENSG00000264178 310 | ENSG00000266546 311 | ENSG00000103034 312 | ENSG00000125107 313 | ENSG00000206818 314 | ENSG00000230853 315 | ENSG00000224865 316 | ENSG00000233263 317 | ENSG00000236386 318 | ENSG00000252811 319 | ENSG00000114439 320 | ENSG00000273125 321 | ENSG00000198797 322 | ENSG00000129933 323 | ENSG00000160161 324 | ENSG00000178093 325 | ENSG00000250067 326 | ENSG00000156103 327 | ENSG00000250962 328 | ENSG00000251904 329 | ENSG00000019102 330 | ENSG00000120458 331 | ENSG00000154146 332 | ENSG00000245498 333 | ENSG00000182732 334 | ENSG00000266869 335 | ENSG00000009307 336 | ENSG00000052723 337 | ENSG00000134198 338 | ENSG00000198765 339 | ENSG00000227970 340 | ENSG00000140521 341 | ENSG00000140522 342 | ENSG00000140525 343 | ENSG00000140526 344 | ENSG00000207819 345 | ENSG00000255571 346 | ENSG00000005483 347 | ENSG00000135250 348 | ENSG00000228393 349 | ENSG00000237513 350 | ENSG00000126461 351 | ENSG00000137075 352 | ENSG00000215283 353 | ENSG00000080644 354 | ENSG00000117971 355 | ENSG00000169684 356 | ENSG00000184349 357 | ENSG00000073969 358 | ENSG00000108379 359 | ENSG00000185294 360 | ENSG00000204650 361 | ENSG00000204652 362 | ENSG00000214401 363 | ENSG00000225190 364 | ENSG00000228696 365 | ENSG00000238723 366 | ENSG00000256762 367 | ENSG00000260075 368 | ENSG00000261575 369 | ENSG00000262500 370 | ENSG00000262539 371 | ENSG00000263715 372 | ENSG00000264070 373 | ENSG00000264589 374 | ENSG00000265547 375 | ENSG00000265964 376 | ENSG00000028116 377 | ENSG00000055813 378 | ENSG00000115392 379 | ENSG00000225226 380 | ENSG00000233426 381 | ENSG00000233723 382 | ENSG00000271615 383 | ENSG00000273063 384 | ENSG00000242586 385 | ENSG00000242781 386 | ENSG00000242828 387 | ENSG00000243694 388 | ENSG00000229565 389 | ENSG00000115520 390 | ENSG00000115541 391 | ENSG00000144381 392 | ENSG00000162944 393 | ENSG00000206836 394 | ENSG00000213104 395 | ENSG00000270757 396 | ENSG00000128886 397 | ENSG00000140259 398 | ENSG00000140264 399 | ENSG00000166762 400 | ENSG00000168781 401 | ENSG00000171877 402 | ENSG00000184716 403 | ENSG00000205771 404 | ENSG00000242866 405 | ENSG00000268488 406 | ENSG00000130167 407 | ENSG00000169933 408 | ENSG00000223197 409 | ENSG00000230991 410 | ENSG00000004059 411 | ENSG00000106331 412 | ENSG00000128594 413 | ENSG00000197157 414 | ENSG00000240790 415 | ENSG00000145335 416 | ENSG00000247775 417 | ENSG00000251095 418 | ENSG00000131558 419 | ENSG00000237821 420 | ENSG00000136828 421 | ENSG00000108953 422 | ENSG00000003509 423 | ENSG00000008869 424 | ENSG00000115808 425 | ENSG00000115825 426 | ENSG00000115828 427 | ENSG00000207364 428 | ENSG00000218739 429 | ENSG00000232028 430 | ENSG00000253430 431 | ENSG00000075702 432 | ENSG00000205138 433 | ENSG00000149927 434 | ENSG00000149930 435 | ENSG00000149932 436 | ENSG00000145632 437 | ENSG00000271955 438 | ENSG00000103723 439 | ENSG00000214575 440 | ENSG00000162702 441 | ENSG00000230623 442 | ENSG00000255344 443 | ENSG00000119121 444 | ENSG00000050405 445 | ENSG00000066117 446 | ENSG00000110881 447 | ENSG00000185958 448 | ENSG00000092847 449 | ENSG00000092853 450 | ENSG00000126070 451 | ENSG00000134698 452 | ENSG00000142686 453 | ENSG00000172977 454 | ENSG00000173039 455 | ENSG00000173327 456 | ENSG00000213445 457 | ENSG00000214659 458 | ENSG00000239356 459 | ENSG00000254470 460 | ENSG00000255557 461 | ENSG00000117569 462 | ENSG00000137970 463 | ENSG00000223229 464 | ENSG00000251322 465 | ENSG00000101445 466 | ENSG00000137601 467 | ENSG00000116329 468 | ENSG00000120656 469 | ENSG00000130772 470 | ENSG00000162419 471 | ENSG00000180098 472 | ENSG00000180198 473 | ENSG00000188060 474 | ENSG00000197989 475 | ENSG00000198492 476 | ENSG00000204138 477 | ENSG00000206779 478 | ENSG00000229388 479 | ENSG00000238821 480 | ENSG00000242125 481 | ENSG00000076321 482 | ENSG00000116161 483 | ENSG00000117601 484 | ENSG00000120333 485 | ENSG00000120334 486 | ENSG00000152061 487 | ENSG00000162753 488 | ENSG00000183831 489 | ENSG00000185278 490 | ENSG00000225713 491 | ENSG00000227373 492 | ENSG00000054282 493 | ENSG00000143702 494 | ENSG00000212230 495 | ENSG00000214837 496 | ENSG00000226828 497 | ENSG00000231512 498 | ENSG00000234116 499 | ENSG00000253326 500 | ENSG00000115844 501 | ENSG00000144355 502 | ENSG00000236651 503 | ENSG00000261038 504 | ENSG00000048828 505 | ENSG00000188938 506 | ENSG00000197724 507 | ENSG00000237385 508 | ENSG00000165995 509 | ENSG00000165997 510 | ENSG00000241058 511 | ENSG00000228979 512 | ENSG00000116127 513 | ENSG00000131374 514 | ENSG00000233133 515 | ENSG00000109323 516 | ENSG00000109332 517 | ENSG00000164038 518 | ENSG00000250651 519 | ENSG00000227455 520 | ENSG00000172461 521 | ENSG00000219941 522 | ENSG00000198822 523 | ENSG00000226965 524 | ENSG00000253413 525 | ENSG00000155090 526 | ENSG00000163635 527 | ENSG00000257860 528 | ENSG00000160563 529 | ENSG00000036257 530 | ENSG00000122490 531 | ENSG00000178342 532 | ENSG00000267780 533 | ENSG00000120885 534 | ENSG00000120899 535 | ENSG00000120903 536 | ENSG00000120915 537 | ENSG00000168077 538 | ENSG00000234770 539 | ENSG00000006740 540 | ENSG00000118007 541 | ENSG00000075568 542 | ENSG00000144199 543 | ENSG00000168754 544 | ENSG00000168763 545 | ENSG00000270748 546 | ENSG00000268352 547 | ENSG00000168016 548 | ENSG00000177565 549 | ENSG00000231888 550 | ENSG00000130449 551 | ENSG00000135720 552 | ENSG00000159593 553 | ENSG00000168748 554 | ENSG00000249961 555 | ENSG00000261088 556 | ENSG00000077782 557 | ENSG00000147535 558 | ENSG00000147548 559 | ENSG00000165046 560 | ENSG00000138311 561 | ENSG00000105926 562 | ENSG00000105928 563 | ENSG00000156599 564 | ENSG00000156603 565 | ENSG00000198561 566 | ENSG00000211450 567 | ENSG00000213593 568 | ENSG00000233436 569 | ENSG00000089486 570 | ENSG00000103415 571 | ENSG00000103426 572 | ENSG00000153406 573 | ENSG00000138430 574 | ENSG00000201088 575 | ENSG00000227180 576 | ENSG00000237804 577 | ENSG00000146416 578 | ENSG00000139746 579 | ENSG00000227354 580 | ENSG00000232132 581 | ENSG00000118946 582 | ENSG00000202422 583 | ENSG00000214335 584 | ENSG00000222733 585 | ENSG00000232954 586 | ENSG00000131508 587 | ENSG00000171604 588 | ENSG00000207020 589 | ENSG00000249526 590 | ENSG00000272255 591 | ENSG00000154822 592 | ENSG00000128487 593 | ENSG00000261033 594 | ENSG00000016864 595 | ENSG00000050130 596 | ENSG00000101104 597 | ENSG00000105186 598 | ENSG00000111325 599 | ENSG00000112855 600 | ENSG00000113141 601 | ENSG00000114446 602 | ENSG00000114904 603 | ENSG00000131495 604 | ENSG00000132394 605 | ENSG00000141140 606 | ENSG00000142233 607 | ENSG00000146007 608 | ENSG00000146830 609 | ENSG00000150967 610 | ENSG00000163938 611 | ENSG00000164091 612 | ENSG00000164241 613 | ENSG00000165912 614 | ENSG00000166913 615 | ENSG00000168237 616 | ENSG00000176681 617 | ENSG00000177096 618 | ENSG00000185829 619 | ENSG00000187664 620 | ENSG00000198951 621 | ENSG00000204852 622 | ENSG00000204963 623 | ENSG00000205704 624 | ENSG00000213533 625 | ENSG00000214425 626 | ENSG00000225151 627 | ENSG00000232300 628 | ENSG00000238083 629 | ENSG00000249839 630 | ENSG00000259404 631 | ENSG00000259511 632 | ENSG00000259683 633 | ENSG00000259726 634 | ENSG00000259728 635 | ENSG00000259774 636 | ENSG00000262881 637 | ENSG00000263503 638 | ENSG00000265315 639 | ENSG00000265411 640 | ENSG00000266497 641 | ENSG00000266504 642 | ENSG00000267246 643 | ENSG00000278770 -------------------------------------------------------------------------------- /get_data.sh: -------------------------------------------------------------------------------- 1 | mkdir data_files 2 | mkdir data_files/tsv 3 | mkdir data_files/rds 4 | 5 | while IFS= read -r link; do 6 | 7 | if [[ $link == *".RDS"* ]] 8 | then 9 | wget -P data_files/rds $link 10 | else 11 | wget -P data_files/tsv $link 12 | fi 13 | 14 | done < links.txt 15 | -------------------------------------------------------------------------------- /links.txt: -------------------------------------------------------------------------------- 1 | # R binaries ----------- 2 | 3 | https://atrev.s3.amazonaws.com/brainchromatin/AllGenes_GenomicRanges.RDS 4 | https://atrev.s3.amazonaws.com/brainchromatin/CCA_Matching.RDS 5 | https://atrev.s3.amazonaws.com/brainchromatin/GA_RNA_Correlations.RDS 6 | https://atrev.s3.amazonaws.com/brainchromatin/Matrix_Glial_KNNpseudoBulk_ATAC_Accessibility.RDS 7 | https://atrev.s3.amazonaws.com/brainchromatin/Matrix_Glial_KNNpseudoBulk_ATAC_ChromVAR.RDS 8 | https://atrev.s3.amazonaws.com/brainchromatin/Matrix_Glial_KNNpseudoBulk_ATAC_GeneActivity.RDS 9 | https://atrev.s3.amazonaws.com/brainchromatin/Matrix_Glial_KNNpseudoBulk_RNA_Full.RDS 10 | https://atrev.s3.amazonaws.com/brainchromatin/PeakGeneLinks_All.RDS 11 | https://atrev.s3.amazonaws.com/brainchromatin/PeakGeneLinks_Significant.RDS 12 | https://atrev.s3.amazonaws.com/brainchromatin/RNA_GlialPseudobulks.RDS 13 | https://atrev.s3.amazonaws.com/brainchromatin/SamplePseudoBulk_Glial_KNNpseudobulk_ATAC_GA.RDS 14 | https://atrev.s3.amazonaws.com/brainchromatin/FCM_Object.RDS 15 | https://atrev.s3.amazonaws.com/brainchromatin/scATAC_Colors.txt # (Color scheme) 16 | https://atrev.s3.amazonaws.com/brainchromatin/scATAC_ChromVAR_SCE.RDS 17 | https://atrev.s3.amazonaws.com/brainchromatin/scATAC_GeneActivity.RDS 18 | https://atrev.s3.amazonaws.com/brainchromatin/scATAC_MotifMatchMatrix.RDS 19 | https://atrev.s3.amazonaws.com/brainchromatin/scATAC_SCE.RDS 20 | https://atrev.s3.amazonaws.com/brainchromatin/scRNA_Cluster_Markers.RDS 21 | https://atrev.s3.amazonaws.com/brainchromatin/scRNA_Colors.txt 22 | https://atrev.s3.amazonaws.com/brainchromatin/scRNA_SCE2.RDS 23 | https://atrev.s3.amazonaws.com/brainchromatin/scRNA_URD_GlialCells.RDS 24 | https://atrev.s3.amazonaws.com/brainchromatin/TF_MotifExpressionCorrelation.RDS 25 | https://atrev.s3.amazonaws.com/brainchromatin/Multiome_RNA_SCE.RDS 26 | https://atrev.s3.amazonaws.com/brainchromatin/Multiome_ATAC_SCE.RDS 27 | https://atrev.s3.amazonaws.com/brainchromatin/Multiome_ATAC_GeneActivity.RDS 28 | https://atrev.s3.amazonaws.com/brainchromatin/scRNA_Seurat.RDS 29 | 30 | # Processed Data Files: Counts, peaks, links, ChromVAR, and cell metadata ------- 31 | # -- ATAC 32 | https://atrev.s3.amazonaws.com/brainchromatin/atac_cell_metadata.txt 33 | https://atrev.s3.amazonaws.com/brainchromatin/atac_chromVAR_TF_activities.tsv.gz 34 | https://atrev.s3.amazonaws.com/brainchromatin/atac_consensus_peaks.bed.gz 35 | https://atrev.s3.amazonaws.com/brainchromatin/atac_counts.tsv.gz 36 | https://atrev.s3.amazonaws.com/brainchromatin/atac_gene_activities.tsv.gz 37 | 38 | # -- RNA 39 | https://atrev.s3.amazonaws.com/brainchromatin/peak_gene_links.tsv.gz 40 | https://atrev.s3.amazonaws.com/brainchromatin/rna_cell_metadata.txt 41 | https://atrev.s3.amazonaws.com/brainchromatin/velo_colData.txt 42 | https://atrev.s3.amazonaws.com/brainchromatin/rna_cell_names.txt 43 | https://atrev.s3.amazonaws.com/brainchromatin/rna_counts.tsv.gz 44 | https://atrev.s3.amazonaws.com/brainchromatin/umapModel_rna_hft_uwot 45 | 46 | # -- Multiome 47 | # RNA 48 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_cell_metadata.txt 49 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_cluster_names.txt 50 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_rna_counts.tsv 51 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_spliced_rna_counts.tsv.gz 52 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_unspliced_rna_counts.tsv.gz 53 | # ATAC 54 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_atac_consensus_peaks.txt.gz 55 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_atac_gene_activities.tsv 56 | https://atrev.s3.amazonaws.com/brainchromatin/multiome_atac_counts.tsv.gz 57 | 58 | # ATAC cluster-specific BigWigs --------------- 59 | # Used to train ATAC-seq models 60 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c0.bw 61 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c10.bw 62 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c11.bw 63 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c13.bw 64 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c14.bw 65 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c15.bw 66 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c1.bw 67 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c2.bw 68 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c3.bw 69 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c4.bw 70 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c5.bw 71 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c6.bw 72 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c7.bw 73 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c8.bw 74 | https://atrev.s3.amazonaws.com/brainchromatin/hft_c9.bw 75 | 76 | # Singleome ATAC Fragments Files ---------- 77 | # -- Singleome 78 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r1_fragments.tsv.gz 79 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r1_fragments.tsv.gz.tbi 80 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r2_fragments.tsv.gz 81 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r2_fragments.tsv.gz.tbi 82 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r3_fragments.tsv.gz 83 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w16_p7_r3_fragments.tsv.gz.tbi 84 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w20_p3_r1_fragments.tsv.gz 85 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w20_p3_r1_fragments.tsv.gz.tbi 86 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w20_p3_r2_fragments.tsv.gz 87 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w20_p3_r2_fragments.tsv.gz.tbi 88 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r1_fragments.tsv.gz 89 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r1_fragments.tsv.gz.tbi 90 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r2_fragments.tsv.gz 91 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r2_fragments.tsv.gz.tbi 92 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r3_fragments.tsv.gz 93 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r3_fragments.tsv.gz.tbi 94 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r4_fragments.tsv.gz 95 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w21_p5_r4_fragments.tsv.gz.tbi 96 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r1_fragments.tsv.gz 97 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r1_fragments.tsv.gz.tbi 98 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r2_fragments.tsv.gz 99 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r2_fragments.tsv.gz.tbi 100 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r3_fragments.tsv.gz 101 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r3_fragments.tsv.gz.tbi 102 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r4_fragments.tsv.gz 103 | https://atrev.s3.amazonaws.com/brainchromatin/hft_w24_p6_r4_fragments.tsv.gz.tbi 104 | 105 | # ---- Multiome CellRanger output 106 | # -- Prefixes 107 | # https://atrev.s3.amazonaws.com/brainchromatin/hft_ctx_w21_dc1r3_r1/outs/* 108 | # https://atrev.s3.amazonaws.com/brainchromatin/hft_ctx_w21_dc2r2_r1/outs/* 109 | # https://atrev.s3.amazonaws.com/brainchromatin/hft_ctx_w21_dc2r2_r2/outs/* 110 | 111 | # -- Suffixes (BAM files have been removed) 112 | # atac_cut_sites.bigwig 113 | # atac_fragments.tsv.gz 114 | # atac_fragments.tsv.gz.tbi 115 | # atac_peak_annotation.tsv 116 | # atac_peaks.bed 117 | # filtered_feature_bc_matrix.h5 118 | # filtered_feature_bc_matrix/barcodes.tsv.gz 119 | # filtered_feature_bc_matrix/features.tsv.gz 120 | # filtered_feature_bc_matrix/matrix.mtx.gz 121 | # per_barcode_metrics.csv 122 | # raw_feature_bc_matrix.h5 123 | # raw_feature_bc_matrix/barcodes.tsv.gz 124 | # raw_feature_bc_matrix/features.tsv.gz 125 | # raw_feature_bc_matrix/matrix.mtx.gz 126 | # summary.csv 127 | 128 | 129 | -------------------------------------------------------------------------------- /misc/._colorpals.ai.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/misc/._colorpals.ai.csv -------------------------------------------------------------------------------- /misc/._sfari_gene.csv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GreenleafLab/brainchromatin/f8f509b5d811c9f0577f6c7c2ddbcb5ca8d68d14/misc/._sfari_gene.csv -------------------------------------------------------------------------------- /misc/colorpals.ai.csv: -------------------------------------------------------------------------------- 1 | palette.name,palette.type,color.id,C,M,Y,K,hex,R,G,B 2 | Jasminium polyanthum B,Continuous,JasminiumB01,2,0,0,11,#dde2e6,221,226,230 3 | Jasminium polyanthum B,Continuous,JasminiumB02,0,4,0,11,#e3dce0,227,220,224 4 | Jasminium polyanthum B,Continuous,JasminiumB03,0,20,0,8,#e7c5d5,231,197,213 5 | Jasminium polyanthum B,Continuous,JasminiumB04,0,32,0,0,#f8bdd7,248,189,215 6 | Jasminium polyanthum B,Continuous,JasminiumB05,14,78,10,0,#d35c95,211,92,149 7 | Jasminium polyanthum B,Continuous,JasminiumB06,28,97,40,6,#af2963,175,41,99 8 | Jasminium polyanthum B,Continuous,JasminiumB07,31,100,68,34,#821434,130,20,52 9 | Jasminium polyanthum B,Continuous,JasminiumB08,45,89,69,67,#45101b,69,16,27 10 | Jasminium polyanthum B,Continuous,JasminiumB09,60,75,64,82,#230c11,35,12,17 11 | Jasminium polyanthum A,Continuous,Jasminium01,2,0,0,0,#f7fcfe,247,252,254 12 | Jasminium polyanthum A,Continuous,Jasminium02,0,4,0,0,#fef5f9,254,245,249 13 | Jasminium polyanthum A,Continuous,Jasminium03,0,20,0,0,#fad5e5,250,213,229 14 | Jasminium polyanthum A,Continuous,Jasminium04,0,32,0,0,#f8bdd7,248,189,215 15 | Jasminium polyanthum A,Continuous,Jasminium05,14,78,10,0,#d35c95,211,92,149 16 | Jasminium polyanthum A,Continuous,Jasminium06,28,97,40,6,#af2963,175,41,99 17 | Jasminium polyanthum A,Continuous,Jasminium07,31,100,68,34,#821434,130,20,52 18 | Jasminium polyanthum A,Continuous,Jasminium08,45,89,69,67,#45101b,69,16,27 19 | Jasminium polyanthum A,Continuous,Jasminium09,60,75,64,82,#230c11,35,12,17 20 | Miniblaze,Discrete,Miniblaze01,15,47,48,0,#d6947f,214,148,127 21 | Miniblaze,Discrete,Miniblaze02,39,16,74,0,#a6b769,166,183,105 22 | Miniblaze,Discrete,Miniblaze03,67,50,50,22,#566466,86,100,102 23 | Miniblaze,Discrete,Miniblaze04,62,38,0,0,#668ec9,102,142,201 24 | Miniblaze,Discrete,Miniblaze05,100,95,36,41,#191e4c,25,30,76 25 | Miniblaze,Discrete,Miniblaze06,44,67,45,16,#875b68,135,91,104 26 | Moonblaze,Discrete,Moonblaze01,17,41,38,0,#d29e92,210,158,146 27 | Moonblaze,Discrete,Moonblaze02,36,79,85,44,#6d3423,109,52,35 28 | Moonblaze,Discrete,Moonblaze03,15,47,48,0,#d6947f,214,148,127 29 | Moonblaze,Discrete,Moonblaze04,2,31,32,0,#f4baa3,244,186,163 30 | Moonblaze,Discrete,Moonblaze05,12,13,43,0,#e1d29e,225,210,158 31 | Moonblaze,Discrete,Moonblaze06,63,55,68,45,#48483d,72,72,61 32 | Moonblaze,Discrete,Moonblaze07,2,0,10,0,#f9fae8,249,250,232 33 | Moonblaze,Discrete,Moonblaze08,39,16,74,0,#a6b769,166,183,105 34 | Moonblaze,Discrete,Moonblaze09,64,48,83,41,#4a5233,74,82,51 35 | Moonblaze,Discrete,Moonblaze10,25,10,28,0,#c1cfbb,193,207,187 36 | Moonblaze,Discrete,Moonblaze11,67,50,50,22,#566466,86,100,102 37 | Moonblaze,Discrete,Moonblaze12,62,38,0,0,#668ec9,102,142,201 38 | Moonblaze,Discrete,Moonblaze13,100,95,36,41,#191e4c,25,30,76 39 | Moonblaze,Discrete,Moonblaze14,44,67,45,16,#875b68,135,91,104 40 | Moonblaze,Discrete,Moonblaze15,69,67,66,77,#1f1b1a,31,27,26 41 | Photinia fraseri A,Continuous,Photinia A 01,62,43,94,32,#57612f,87,97,47 42 | Photinia fraseri A,Continuous,Photinia A 02,34,20,100,0,#b5b335,181,179,53 43 | Photinia fraseri A,Continuous,Photinia A 03,23,9,100,0,#cecc2a,206,204,42 44 | Photinia fraseri A,Continuous,Photinia A 04,4,0,48,0,#f8f39e,248,243,158 45 | Photinia fraseri A,Continuous,Photinia A 05,1,0,16,0,#fdfadd,253,250,221 46 | Photinia fraseri A,Continuous,Photinia A 06,0,41,23,0,#f7a9a8,247,169,168 47 | Photinia fraseri A,Continuous,Photinia A 07,4,62,70,0,#ea7e57,234,126,87 48 | Photinia fraseri A,Continuous,Photinia A 08,13,68,98,2,#d46d2a,212,109,42 49 | Photinia fraseri A,Continuous,Photinia A 09,30,91,99,39,#7c2717,124,39,23 50 | Photinia fraseri B,Continuous,Photinia B 01,62,43,94,32,#57612f,87,97,47 51 | Photinia fraseri B,Continuous,Photinia B 02,34,20,100,0,#b5b335,181,179,53 52 | Photinia fraseri B,Continuous,Photinia B 03,23,9,100,0,#cecc2a,206,204,42 53 | Photinia fraseri B,Continuous,Photinia B 04,4,0,48,0,#f8f39e,248,243,158 54 | Photinia fraseri B,Continuous,Photinia B 05,1,0,16,0,#fdfadd,253,250,221 55 | Photinia fraseri B,Continuous,Photinia B 06,0,15,8,0,#fddedb,253,222,219 56 | Photinia fraseri B,Continuous,Photinia B 07,0,41,23,0,#f7a9a8,247,169,168 57 | Photinia fraseri B,Continuous,Photinia B 08,5,85,70,0,#e54e4d,229,78,77 58 | Photinia fraseri B,Continuous,Photinia B 09,24,99,100,19,#a32122,163,33,34 59 | Strelitzia reginae,Discrete,Strelitzia A 01,49,6,92,0,#90bd4b,144,189,75 60 | Strelitzia reginae,Discrete,Strelitzia A 02,0,52,100,0,#f7901e,247,144,30 61 | Strelitzia reginae,Discrete,Strelitzia A 03,45,25,0,0,#8aaad9,138,170,217 62 | Strelitzia reginae,Discrete,Strelitzia A 04,15,69,36,0,#d36f80,211,111,128 63 | Strelitzia reginae,Discrete,Strelitzia B 01,78,41,84,37,#325939,50,89,57 64 | Strelitzia reginae,Discrete,Strelitzia B 02,12,64,100,1,#d87528,216,117,40 65 | Strelitzia reginae,Discrete,Strelitzia B 03,87,75,37,24,#344365,52,67,101 66 | Strelitzia reginae,Discrete,Strelitzia B 04,27,100,83,28,#90192b,144,25,43 67 | Strelitzia reginae,Discrete,Strelitzia C 01,49,30,48,3,#899987,137,153,135 68 | Strelitzia reginae,Discrete,Strelitzia C 02,20,51,79,4,#c5844b,197,132,75 69 | Strelitzia reginae,Discrete,Strelitzia C 03,68,56,54,32,#4d5356,77,83,86 70 | Strelitzia reginae,Discrete,Strelitzia C 04,46,50,33,4,#907d8c,144,125,140 71 | Iris,Continuous,Iris 01,NA,NA,NA,NA,#B0A1AF,NA,NA,NA 72 | Iris,Continuous,Iris 02,NA,NA,NA,NA,#441F26,NA,NA,NA 73 | Iris,Continuous,Iris 04,NA,NA,NA,NA,#7D56AA,NA,NA,NA 74 | Iris,Continuous,Iris 05,NA,NA,NA,NA,#A176CF,NA,NA,NA 75 | Iris,Continuous,Iris 06,NA,NA,NA,NA,#DF9418,NA,NA,NA 76 | Iris,Continuous,Iris 07,NA,NA,NA,NA,#E5C252,NA,NA,NA 77 | Unnamed,Continuous,Unnamed 01,NA,NA,NA,NA,#B0A1AF,NA,NA,NA 78 | Unnamed,Continuous,Unnamed 02,NA,NA,NA,NA,#371410,NA,NA,NA 79 | Unnamed,Continuous,Unnamed 03,NA,NA,NA,NA,#BD3B26,NA,NA,NA 80 | Unnamed,Continuous,Unnamed 04,NA,NA,NA,NA,#EA7B24,NA,NA,NA 81 | Unnamed,Continuous,Unnamed 05,NA,NA,NA,NA,#EEEA88,NA,NA,NA --------------------------------------------------------------------------------