From e6e8daf5cf217f867dc651efaf536ba1d89c74be Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Wed, 20 May 2026 00:39:40 -0700 Subject: [PATCH 1/2] Make tutorials runnable and reproducible: portable kernel, local-data paths, optional ccflowR - Switch all three notebooks from the private `MultiNicheNet_v2` kernel to the portable `ir` IRkernel; normalize to nbformat 4.5 with cell ids. - Clear all executed outputs (removes stale private absolute paths). - Replace the cross-notebook /tmp/contextnet_network.rds dependency with a repo-local data/cache/ convention; tutorial 03 is now self-contained. - 01: replace "download-if-missing" with verify-local-priors; move the Zenodo download to an optional, non-executed cell. Fix defunct GetAssayData(slot=) -> layer= for Seurat 5. - 03: default N_CORES <- 1 to avoid FORK/socket failures. - Keep ccflowR optional everywhere; simplify dead-code ccflowR fallbacks. - Docs: notebooks/README data requirements + example-data strategy + troubleshooting; installation guide bootstrap + IRkernel registration; README notes full-local-data tutorials and optional ccflowR. All three notebooks execute end-to-end via nbconvert (ir kernel) against local data; targeted unit tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 4 +- notebooks/01-getting-started.ipynb | 239 +- notebooks/02-standard-workflow.ipynb | 2920 +------------------- notebooks/03-multicondition-workflow.ipynb | 244 +- notebooks/README.md | 56 +- vignettes/installation-micromamba.md | 38 + 6 files changed, 373 insertions(+), 3128 deletions(-) diff --git a/README.md b/README.md index 7ab7b7d..09358d9 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ ligand_activities(result) ### Sankey visualization with ccflowR -ContextNet pairs with [ccflowR](https://github.com/settylab/ccflowR) to render cell-cell communication as a Sankey diagram (sender → ligand → receptor → target → receiver). +ContextNet pairs with [ccflowR](https://github.com/settylab/ccflowR) to render cell-cell communication as a Sankey diagram (sender → ligand → receptor → target → receiver). ccflowR is an **optional** dependency: `prepare_for_ccflowr()` + `combine_sankey_data()` build the Sankey data table from base ContextNet, and only `sankey_flow()` requires ccflowR. The tutorials run end to end without it. ```r library(ccflowR) @@ -87,6 +87,8 @@ sankey_flow(sankey_data, cell_colors) | [02 - Standard Workflow](notebooks/02-standard-workflow.ipynb) | Full NicheNet workflow with Sankey visualization | | [03 - Multi-Condition Workflow](notebooks/03-multicondition-workflow.ipynb) | Differential analysis with MultiNicheNet and biological replicates | +These are full local-data tutorials: they read a context-specific GRN, a Seurat object, and the NicheNet priors from a local `data/` directory and do not download anything while running. See [notebooks/README.md](notebooks/README.md) for data requirements, kernel setup, and an example-data strategy. + ## Key Functions ### GRN Import diff --git a/notebooks/01-getting-started.ipynb b/notebooks/01-getting-started.ipynb index 6d40da6..8fe17fc 100644 --- a/notebooks/01-getting-started.ipynb +++ b/notebooks/01-getting-started.ipynb @@ -41,7 +41,8 @@ "> **Use another tutorial instead if:**\n", "> - You want full ccflowR visualization and export -> [02-standard-workflow](02-standard-workflow.ipynb)\n", "> - You have biological replicates and multiple conditions -> [03-multicondition-workflow](03-multicondition-workflow.ipynb)" - ] + ], + "id": "cell01-000" }, { "cell_type": "markdown", @@ -59,7 +60,8 @@ "| Coverage | Broad (all known interactions) | Focused (active in your context) |\n", "| Specificity | May include irrelevant edges | Reflects your cell types/conditions |\n", "| Result | Generic predictions | Context-relevant predictions |" - ] + ], + "id": "cell01-001" }, { "cell_type": "markdown", @@ -68,7 +70,8 @@ "## Setup\n", "\n", "Run this notebook from the ContextNet repository root or from the `notebooks/` directory. The setup cell below normalizes the working directory to the repository root so all paths are relative and portable." - ] + ], + "id": "cell01-002" }, { "cell_type": "code", @@ -88,7 +91,8 @@ "})\n", "\n", "theme_set(theme_minimal(base_family = \"sans\"))" - ] + ], + "id": "cell01-003" }, { "cell_type": "code", @@ -101,7 +105,8 @@ "outputs": [], "source": [ "check_ecosystem(verbose = TRUE)" - ] + ], + "id": "cell01-004" }, { "cell_type": "code", @@ -113,10 +118,10 @@ }, "outputs": [], "source": [ - "# \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n", - "# \u2551 USER CONFIGURATION \u2551\n", - "# \u2551 Paths are relative to the ContextNet project root. \u2551\n", - "# \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n", + "# ╔══════════════════════════════════════════════════════════════╗\n", + "# ║ USER CONFIGURATION ║\n", + "# ║ Paths are relative to the ContextNet project root. ║\n", + "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", "PROJECT_DIR <- normalizePath(getwd(), mustWork = TRUE)\n", "if (basename(PROJECT_DIR) == \"notebooks\" &&\n", @@ -151,7 +156,8 @@ "TOP_N_LIGANDS <- 20 # Number of ligands shown in the quick-start plot\n", "\n", "stopifnot(file.exists(GRN_FILE), file.exists(SEURAT_FILE))" - ] + ], + "id": "cell01-005" }, { "cell_type": "markdown", @@ -159,22 +165,20 @@ "source": [ "### NicheNet Prior Knowledge Networks\n", "\n", - "ContextNet keeps NicheNet's ligand-receptor and intracellular signaling priors, then replaces or augments the gene-regulatory layer with your context-specific GRN. You therefore need the NicheNet prior network `.rds` files before running `integrate_networks()`.\n", + "ContextNet keeps NicheNet's ligand-receptor and intracellular signaling priors, then replaces the gene-regulatory layer with your context-specific GRN. You therefore need NicheNet's prior network `.rds` files available locally before running `integrate_networks()`.\n", "\n", - "Required for this tutorial:\n", + "**Required inputs for this tutorial (already in `data/`):**\n", "\n", "- `lr_network_human_21122021.rds`: ligand-receptor interactions.\n", "- `weighted_networks_nsga2r_final.rds`: weighted signaling and regulatory prior networks.\n", - "- `ligand_target_matrix_nsga2r_final.rds`: the original NicheNet ligand-target matrix; not required for ContextNet integration, but useful as a reference and downloaded by the same helper.\n", "\n", - "The files are distributed with the official NicheNet v2 tutorials through Zenodo record 7074291:\n", + "**Optional reference (not used by the integration step):**\n", "\n", - "- NicheNet step-by-step Seurat tutorial: \n", - "- NicheNet wrapper tutorial: \n", - "- NicheNet v2 prior networks on Zenodo: \n", + "- `ligand_target_matrix_nsga2r_final.rds`: the original NicheNet ligand-target matrix, useful only if you want to compare ContextNet against generic NicheNet.\n", "\n", - "The next cell downloads the prior networks into `data/` if they are missing. If the files are already present, it reuses them. For a new analysis project, change `NICHENET_DB` to a persistent cache directory such as `\"~/.cache/nichenet\"`." - ] + "This is a **full local-data tutorial**: it reads the priors and a Seurat object already present under `data/` and does **not** download anything while running. The priors are distributed with the official NicheNet v2 tutorials (Zenodo record 7074291). If you are starting a new project and do not yet have them, see the optional one-time download cell below." + ], + "id": "cell01-006" }, { "cell_type": "code", @@ -182,26 +186,47 @@ "metadata": {}, "outputs": [], "source": [ - "# Download NicheNet prior networks if they are not already cached.\n", + "# Verify the NicheNet prior files needed for integration are present locally.\n", + "# This tutorial does NOT download anything during execution.\n", "required_nichenet_files <- c(\n", - " \"lr_network_human_21122021.rds\",\n", - " \"weighted_networks_nsga2r_final.rds\",\n", - " \"ligand_target_matrix_nsga2r_final.rds\"\n", + " \"lr_network_human_21122021.rds\", # ligand-receptor priors\n", + " \"weighted_networks_nsga2r_final.rds\" # signaling + regulatory priors\n", ")\n", - "missing_nichenet_files <- required_nichenet_files[\n", + "# Optional reference file (not required by integrate_networks()):\n", + "optional_nichenet_files <- c(\"ligand_target_matrix_nsga2r_final.rds\")\n", + "\n", + "missing_required <- required_nichenet_files[\n", " !file.exists(file.path(NICHENET_DB, required_nichenet_files))\n", "]\n", - "\n", - "if (length(missing_nichenet_files) > 0) {\n", - " cat(\"Downloading missing NicheNet prior files to\", NICHENET_DB, \"\\n\")\n", - " cat(\"Missing:\", paste(missing_nichenet_files, collapse = \", \"), \"\\n\")\n", - " nichenet_data <- load_nichenet_data(cache_dir = NICHENET_DB, version = \"v2\")\n", - "} else {\n", - " cat(\"All required NicheNet prior files are available in\", NICHENET_DB, \"\\n\")\n", + "if (length(missing_required) > 0) {\n", + " stop(\n", + " \"Missing required NicheNet prior files in '\", NICHENET_DB, \"': \",\n", + " paste(missing_required, collapse = \", \"),\n", + " \". See the optional download cell below to fetch them once.\"\n", + " )\n", "}\n", "\n", + "cat(\"Required NicheNet prior files are present in\", NICHENET_DB, \"\\n\")\n", "list.files(NICHENET_DB, pattern = \"(lr_network|weighted_networks|ligand_target_matrix).*\\\\.rds$\")" - ] + ], + "id": "cell01-007" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Optional: one-time download of the NicheNet priors\n", + "\n", + "If you do **not** already have the prior files, run the snippet below **once** in an R console to fetch them into your data directory. It is a setup step, not part of the executed tutorial, so it is shown as a non-executed code block.\n", + "\n", + "```r\n", + "# One-time setup (run in an R console, not as part of this tutorial):\n", + "nichenet_data <- load_nichenet_data(cache_dir = NICHENET_DB, version = \"v2\")\n", + "```\n", + "\n", + "For a persistent cache shared across projects, point `NICHENET_DB` at a directory such as `\"~/.cache/nichenet\"`. References: the [NicheNet step-by-step](https://github.com/saeyslab/nichenetr/blob/master/vignettes/seurat_steps.md) and [wrapper](https://github.com/saeyslab/nichenetr/blob/master/vignettes/seurat_wrapper.md) tutorials, and [Zenodo record 7074291](https://zenodo.org/record/7074291)." + ], + "id": "cell01-008" }, { "cell_type": "markdown", @@ -210,7 +235,8 @@ "### Reproducibility Checkpoint\n", "\n", "Record the exact prior files used in the analysis. File sizes and checksums are not biologically interesting, but they are useful when the same notebook is rerun months later or on another system.\n" - ] + ], + "id": "cell01-009" }, { "cell_type": "code", @@ -218,7 +244,11 @@ "metadata": {}, "outputs": [], "source": [ - "nichenet_prior_paths <- file.path(NICHENET_DB, required_nichenet_files)\n", + "# Record which prior files were used (handy when rerunning months later).\n", + "nichenet_used <- c(required_nichenet_files, optional_nichenet_files)\n", + "nichenet_used <- nichenet_used[file.exists(file.path(NICHENET_DB, nichenet_used))]\n", + "nichenet_prior_paths <- file.path(NICHENET_DB, nichenet_used)\n", + "\n", "prior_file_info <- data.frame(\n", " file = basename(nichenet_prior_paths),\n", " size_mb = round(file.info(nichenet_prior_paths)$size / 1024^2, 2),\n", @@ -236,8 +266,9 @@ "}\n", "cat(\"Ligand-receptor prior:\", nrow(lr_network), \"interactions,\",\n", " length(unique(lr_network$ligand)), \"ligands,\",\n", - " length(unique(lr_network$receptor)), \"receptors\\n\")\n" - ] + " length(unique(lr_network$receptor)), \"receptors\\n\")" + ], + "id": "cell01-010" }, { "cell_type": "markdown", @@ -262,7 +293,8 @@ "- a `ContextResult`, which stores ranked ligands, supporting targets, and the analysis parameters for this specific question.\n", "\n", "A high-ranking ligand should be read as a **communication hypothesis**: its predicted targets overlap the basal gene program in this context-specific network. It is not by itself proof that the ligand is secreted, that the receptor binds in vivo, or that the interaction is spatially proximal." - ] + ], + "id": "cell01-011" }, { "cell_type": "markdown", @@ -273,7 +305,8 @@ "The GRN is a gene x TF matrix where rows are target genes, columns are transcription factors, and values are regulatory weights inferred from matched scRNA-seq + scATAC-seq data.\n", "\n", "After import, inspect the object before moving on. A useful GRN should have enough TFs, target genes, and non-zero edges to support network propagation. If the GRN is very sparse or uses a different gene naming convention than the expression object, ligand-target propagation will be weak or empty." - ] + ], + "id": "cell01-012" }, { "cell_type": "code", @@ -297,7 +330,8 @@ "cat(\" Regulatory edges:\", nrow(grn_edges), \"\\n\")\n", "\n", "head(grn_edges)" - ] + ], + "id": "cell01-013" }, { "cell_type": "markdown", @@ -306,7 +340,8 @@ "### GRN Quality Control\n", "\n", "Before propagating ligand effects through the network, check whether the GRN has reasonable density and gene-symbol conventions. These checks catch common problems such as an all-zero matrix, lowercase symbols, or a GRN that contains very few target genes.\n" - ] + ], + "id": "cell01-014" }, { "cell_type": "code", @@ -329,14 +364,16 @@ "if (mean(grepl(\"^[A-Z0-9.-]+$\", rownames(gr_matrix))) < 0.5) {\n", " warning(\"Less than half of GRN target names look like uppercase HGNC-style symbols; check gene naming conventions.\")\n", "}\n" - ] + ], + "id": "cell01-015" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This output is the first quality-control checkpoint. The number of TFs, targets, and regulatory edges tells you whether the imported GRN has enough structure to support propagation. The previewed edge table shows the regulatory evidence ContextNet will use later; these rows are TF-target relationships, not ligand-target predictions yet." - ] + ], + "id": "cell01-016" }, { "cell_type": "markdown", @@ -353,7 +390,8 @@ "In `mode = \"replace\"`, ContextNet replaces NicheNet's generic GRN with your imported GRN. The output is a `ContextNetwork` containing a ligand-target matrix: rows are target genes, columns are ligands, and values are regulatory potential scores propagated through the integrated network.\n", "\n", "This object is reusable. Once built, the same `ContextNetwork` can be used for many sender/receiver questions on the same biological system." - ] + ], + "id": "cell01-017" }, { "cell_type": "code", @@ -379,14 +417,16 @@ "cat(\" Ligand-target matrix:\", nrow(ltm), \"targets x\", ncol(ltm), \"ligands\\n\")\n", "\n", "integration_params(network)" - ] + ], + "id": "cell01-018" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This output confirms that the GRN has been converted into a reusable signaling model. The ligand-target matrix is the central `ContextNetwork` data object: each column is a candidate ligand, each row is a possible receiver target gene, and each value is a propagated regulatory potential score. The integration parameters should be reported in methods because they define how the context-specific GRN was combined with NicheNet priors." - ] + ], + "id": "cell01-019" }, { "cell_type": "markdown", @@ -397,14 +437,16 @@ "Now we apply the reusable `ContextNetwork` to one biological question. We subset to contralateral tissue (`SUBSET_CATEGORY = \"C\"`) and compare basal cells against parabasal and suprabasal cells.\n", "\n", "Because `SENDER = NULL`, the tutorial automatically uses all cell types with at least `MIN_CELLS` cells as candidate sender populations. This keeps the quick start broad: it asks which ligands from the available cellular microenvironment could explain the basal epithelial program." - ] + ], + "id": "cell01-020" }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this quick start, `SENDER = NULL` deliberately uses all sufficiently abundant cell types as candidate senders. That is useful for discovery, but it is broader than a curated biological hypothesis. In a publication analysis, replace this automatic sender set with cell types that are anatomically and biologically plausible sources of the signal.\n" - ] + ], + "id": "cell01-021" }, { "cell_type": "code", @@ -439,14 +481,16 @@ "if (length(gr_targets_in_expr) < 100) {\n", " warning(\"Few GRN targets overlap the expression object; check species and gene-symbol conventions.\")\n", "}\n" - ] + ], + "id": "cell01-022" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This output defines the biological search space for the quick start. The sender list determines which cell types can contribute ligands. The receiver and comparison define the receiver-cell gene program that NicheNet will try to explain. If expected sender cell types are missing here, lower `MIN_CELLS` cautiously or inspect the cell-type labels in `GROUP_COL`." - ] + ], + "id": "cell01-023" }, { "cell_type": "markdown", @@ -455,7 +499,8 @@ "### Receiver Program Definition\n", "\n", "The ligand ranking is only interpretable if the receiver gene program is clear. Here we explicitly compute basal-enriched genes relative to parabasal and suprabasal cells, inspect the top markers, and pass the resulting `geneset_oi` into ContextNet.\n" - ] + ], + "id": "cell01-024" }, { "cell_type": "code", @@ -493,7 +538,8 @@ "if (length(geneset_oi) < 20) {\n", " warning(\"The receiver gene set is small; ligand activity rankings may be unstable.\")\n", "}\n" - ] + ], + "id": "cell01-025" }, { "cell_type": "code", @@ -523,7 +569,8 @@ "\n", "cat(\"Top ligands ranked by corrected AUPR (AUPR_c):\\n\")\n", "print(head(activities[, c(\"test_ligand\", \"aupr_corrected\")], TOP_N_LIGANDS))\n" - ] + ], + "id": "cell01-026" }, { "cell_type": "markdown", @@ -532,7 +579,8 @@ "### Sanity Checks on Top Ligands\n", "\n", "A high activity score means that a ligand's predicted targets recover the basal gene program. It does not guarantee that the ligand is expressed by a sender population or that a cognate receptor is expressed in the receiver. The next table adds those two checks for the top-ranked ligands.\n" - ] + ], + "id": "cell01-027" }, { "cell_type": "code", @@ -544,7 +592,7 @@ "cat(\"ContextResult stored geneset_oi:\", length(result_params$geneset_oi), \"genes\\n\")\n", "cat(\"Top genes in stored receiver program:\", paste(head(result_params$geneset_oi, 20), collapse = \", \"), \"\\n\\n\")\n", "\n", - "expr_mat <- Seurat::GetAssayData(seurat_c, assay = DefaultAssay(seurat_c), slot = \"data\")\n", + "expr_mat <- Seurat::GetAssayData(seurat_c, assay = DefaultAssay(seurat_c), layer = \"data\")\n", "cell_groups <- seurat_c[[GROUP_COL]][, 1]\n", "receiver_cells <- colnames(seurat_c)[cell_groups == RECEIVER]\n", "sender_cells <- colnames(seurat_c)[cell_groups %in% SENDER]\n", @@ -565,14 +613,16 @@ "lr_support <- lr_support[order(lr_support$ligand, -lr_support$sender_ligand_mean, -lr_support$receiver_receptor_mean), ]\n", "\n", "head(lr_support, 30)\n" - ] + ], + "id": "cell01-028" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This ranked table is the first biological result. `test_ligand` names the candidate ligand and `aupr_corrected` is the corrected ligand activity score (`AUPR_c`). Higher values mean better recovery of the basal-enriched target gene set. Treat this as a prioritized hypothesis list, then use the heatmap and ligand-target table to identify which genes support each ligand." - ] + ], + "id": "cell01-029" }, { "cell_type": "markdown", @@ -581,7 +631,8 @@ "### Step 4: Visualize Results\n", "\n", "The first plot ranks ligands by corrected AUPR (`AUPR_c`). This is the primary ligand activity score used for ordering. The y-axis is ordered from lower to higher rank so the strongest ligand appears at the top." - ] + ], + "id": "cell01-030" }, { "cell_type": "code", @@ -612,14 +663,16 @@ " ) +\n", " theme_minimal(base_family = \"sans\") +\n", " theme(plot.title = element_text(face = \"bold\"))" - ] + ], + "id": "cell01-031" }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Interpretation**: Each bar shows corrected AUPR (`AUPR_c`), which summarizes how well that ligand's predicted target genes recover the basal-enriched receiver program. The plot should be read as a ranking of candidate upstream signals. It does not show ligand expression by itself, and it does not prove direct cell-cell contact." - ] + ], + "id": "cell01-032" }, { "cell_type": "markdown", @@ -628,7 +681,8 @@ "The second plot asks a more mechanistic question: **which target genes connect the top ligands to the basal program?** We subset the context-specific ligand-target matrix to the top ligands and top predicted targets. Darker tiles indicate stronger propagated regulatory potential.\n", "\n", "`nichenetr::make_heatmap_ggplot()` requires a base R `matrix`. In some ContextNet installations, `ligand_target_matrix(network)` can be represented as a sparse matrix-like object after subsetting, so the plotting subset is explicitly converted with `as.matrix()` before plotting." - ] + ], + "id": "cell01-033" }, { "cell_type": "code", @@ -669,14 +723,16 @@ " color = \"purple\",\n", " x_axis_position = \"top\"\n", ")" - ] + ], + "id": "cell01-034" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This heatmap converts the ligand ranking into a mechanism-oriented view. Rows are predicted receiver target genes and columns are prioritized ligands. The color scale is regulatory potential from the ContextNet ligand-target matrix after light filtering for readability. Dense columns suggest broad regulatory programs; isolated tiles suggest more specific ligand-target hypotheses." - ] + ], + "id": "cell01-035" }, { "cell_type": "markdown", @@ -687,7 +743,8 @@ "The bar plot ranks ligands and the heatmap shows ligand-target support. ccflowR adds the path-level view: **which sender cell types, ligands, receptors, and basal target programs form the strongest communication hypotheses?**\n", "\n", "Read each path as `sender -> ligand -> receptor -> target program -> basal receiver`. Wider flows represent higher ContextNet-supported scores after expression and receptor support are folded into the visualization data. The plot is a prioritization device for follow-up biology, not direct proof of secretion, receptor binding, or spatial contact.\n" - ] + ], + "id": "cell01-036" }, { "cell_type": "code", @@ -695,20 +752,20 @@ "metadata": {}, "outputs": [], "source": [ + "# Build path-level Sankey data from the result, then scale + threshold it.\n", "sankey_raw <- prepare_for_ccflowr(\n", " result,\n", " expression_data = seurat_c,\n", " network = network,\n", " group_col = GROUP_COL,\n", - " top_n_ligands = TOP_N_LIGANDS,\n", - " min_cells = MIN_CELLS\n", + " top_n_ligands = TOP_N_LIGANDS\n", ")\n", - "\n", "sankey_data <- combine_sankey_data(sankey_raw, threshold_quantile = 0.95)\n", - "cat(\"ccflowR paths retained:\", nrow(sankey_data), \"\n", - "\")\n", - "head(sankey_data)\n" - ] + "\n", + "cat(\"ccflowR paths retained:\", nrow(sankey_data), \"\\n\")\n", + "head(sankey_data)" + ], + "id": "cell01-037" }, { "cell_type": "code", @@ -724,14 +781,16 @@ "} else {\n", " message(\"ccflowR is not installed. Install it to render the Sankey graph: remotes::install_github('settylab/ccflowR')\")\n", "}\n" - ] + ], + "id": "cell01-038" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the Sankey graph to choose a small number of interpretable paths for validation. For example, a wide fibroblast-to-basal path suggests a sender population and ligand-receptor pair to check against ligand expression, receptor expression in basal cells, spatial proximity, and perturbation evidence.\n" - ] + ], + "id": "cell01-039" }, { "cell_type": "markdown", @@ -786,7 +845,8 @@ "| `metadata(result)` | user/package metadata | additional annotations |\n", "\n", "All objects track **provenance** automatically, including creation time, package version, and source function." - ] + ], + "id": "cell01-040" }, { "cell_type": "code", @@ -807,21 +867,24 @@ "cat(\"ContextResult ligand-target link table:\", nrow(links_tbl), \"links\\n\")\n", "\n", "head(activities_tbl[order(activities_tbl$aupr_corrected, decreasing = TRUE), ], 5)" - ] + ], + "id": "cell01-041" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This final extraction cell shows the standard way to move from tutorial inspection to downstream analysis. The accessors return ordinary R objects: data frames for edges and ligand activities, a matrix for ligand-target regulatory potential, and a parameter list for reproducibility. Use these extracted objects for custom visualization, enrichment analysis, reporting tables, or direct calls into `nichenetr`." - ] + ], + "id": "cell01-042" }, { "cell_type": "markdown", "metadata": {}, "source": [ "The extracted objects are ordinary R objects: data frames, character vectors, lists, and matrices. This is the intended route for downstream work such as enrichment analysis, custom plotting, comparison to perturbation screens, or direct use of the context-specific matrix in `nichenetr`." - ] + ], + "id": "cell01-043" }, { "cell_type": "code", @@ -834,7 +897,8 @@ "outputs": [], "source": [ "sessionInfo()" - ] + ], + "id": "cell01-044" }, { "cell_type": "markdown", @@ -847,8 +911,8 @@ "| `sender` | Yes | Sender cell type(s) expressing ligands |\n", "| `receiver` | Yes | Receiver cell type expressing receptors and targets |\n", "| `ident_col` | Yes* | Metadata column for DE grouping |\n", - "| `ident_1` | Yes* | Value(s) for DE group 1 (upregulated genes) \u2014 can be a vector |\n", - "| `ident_2` | Yes* | Value(s) for DE group 2 (reference) \u2014 can be a vector |\n", + "| `ident_1` | Yes* | Value(s) for DE group 1 (upregulated genes) — can be a vector |\n", + "| `ident_2` | Yes* | Value(s) for DE group 2 (reference) — can be a vector |\n", "| `de_subset_receiver` | No | Whether to subset to receiver cells first (default: TRUE) |\n", "| `geneset_oi` | No | Custom gene set; auto-computed from DE if NULL |\n", "| `group_col` | No | Metadata column with cell type labels (default: \"cell_type\") |\n", @@ -885,7 +949,8 @@ " de_subset_receiver = FALSE\n", ")\n", "```" - ] + ], + "id": "cell01-045" }, { "cell_type": "markdown", @@ -905,29 +970,29 @@ "ltm <- ligand_target_matrix(network)\n", "\n", "# Use directly in nichenetr or multinichenetr workflows\n", - "# \u2014 replace the default ligand_target_matrix with ltm\n", + "# — replace the default ligand_target_matrix with ltm\n", "```\n", "\n", "- **nichenetr tutorials**: [Step-by-step analysis](https://github.com/saeyslab/nichenetr/blob/master/vignettes/seurat_steps.md) | [Seurat wrapper](https://github.com/saeyslab/nichenetr/blob/master/vignettes/seurat_wrapper.md) | [Circos visualization](https://github.com/saeyslab/nichenetr/blob/master/vignettes/seurat_wrapper_circos.md)\n", "- **multinichenetr tutorials**: [Basic analysis](https://github.com/saeyslab/multinichenetr/blob/main/vignettes/basic_analysis_steps_MISC.md) | [Pairwise comparison](https://github.com/saeyslab/multinichenetr/blob/main/vignettes/pairwise_analysis_MISC.md) | [Paired design](https://github.com/saeyslab/multinichenetr/blob/main/vignettes/paired_analysis_SCC.knit.md)" - ] + ], + "id": "cell01-046" } ], "metadata": { "kernelspec": { - "display_name": "MultiNicheNet_v2", + "display_name": "R", "language": "R", - "name": "multinichenet_v2" + "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", - "pygments_lexer": "r", - "version": "4.3.3" + "pygments_lexer": "r" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/notebooks/02-standard-workflow.ipynb b/notebooks/02-standard-workflow.ipynb index 0746d4f..fcfe713 100644 --- a/notebooks/02-standard-workflow.ipynb +++ b/notebooks/02-standard-workflow.ipynb @@ -47,10 +47,10 @@ }, "outputs": [], "source": [ - "# \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n", - "# \u2551 USER CONFIGURATION \u2551\n", - "# \u2551 Paths are relative to the ContextNet project root. \u2551\n", - "# \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n", + "# ╔══════════════════════════════════════════════════════════════╗\n", + "# ║ USER CONFIGURATION ║\n", + "# ║ Paths are relative to the ContextNet project root. ║\n", + "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", "PROJECT_DIR <- normalizePath(getwd(), mustWork = TRUE)\n", "if (basename(PROJECT_DIR) == \"notebooks\" &&\n", @@ -69,6 +69,11 @@ "SEURAT_FILE <- file.path(DATA_PATH, \"seurat_obj.rds\")\n", "NICHENET_DB <- DATA_PATH\n", "\n", + "# Repo-local cache for the reusable ContextNetwork (a derived object; data/ is\n", + "# gitignored). Tutorial 03 reuses this if present, skipping re-integration.\n", + "CACHE_DIR <- file.path(DATA_PATH, \"cache\")\n", + "NETWORK_CACHE <- file.path(CACHE_DIR, \"contextnet_network.rds\")\n", + "\n", "# Analysis parameters: condition comparison for basal cells\n", "SENDER <- NULL # Auto-detect: all cell types with >500 cells\n", "RECEIVER <- \"basal\"\n", @@ -89,64 +94,19 @@ "source": [ "## Step 1: Import GRN\n", "\n", - "The context-specific GRN is a gene \u00d7 TF matrix (CSV) where rows are target genes, columns are transcription factors, and values are regulatory weights inferred from matched scRNA-seq + scATAC-seq data." + "The context-specific GRN is a gene × TF matrix (CSV) where rows are target genes, columns are transcription factors, and values are regulatory weights inferred from matched scRNA-seq + scATAC-seq data." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "cell-5", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u2192 Loading GRN from: \u001b[34m\u001b[34m/fh/fast/setty_m/user/yhuang2/ContextNet/data/gene_x_tf.csv\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Matrix dimensions: 17226 genes x 701 TFs\n", - "\n", - "\u2192 Normalizing weights per TF...\n", - "\n", - "\u2192 Converting to edge list...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Imported GRN:\n", - "\n", - "TFs: \u001b[34m701\u001b[39m\n", - "\n", - "Targets: \u001b[34m11607\u001b[39m\n", - "\n", - "Edges: \u001b[34m\"2,334,753\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2500\u2500\u001b[39m \u001b[1mContextGRN\u001b[22m \u001b[36m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\n", - "\n", - "\n", - "\n", - "Edges: \u001b[34m\"2,334,753\"\u001b[39m\n", - "\n", - "TFs: \u001b[34m701\u001b[39m\n", - "\n", - "Targets: \u001b[34m11607\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Source: contextnet-pipeline\n", - "\n", - "\u001b[36m\u2139\u001b[39m Created: 2026-03-23 21:50:56\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Top TFs (by target count): \u001b[34m\u001b[34m\"SP1\"\u001b[34m\u001b[39m, \u001b[34m\u001b[34m\"ZNF543\"\u001b[34m\u001b[39m, \u001b[34m\u001b[34m\"ZSCAN22\"\u001b[34m\u001b[39m, \u001b[34m\u001b[34m\"ZNF770\"\u001b[34m\u001b[39m, and \u001b[34m\u001b[34m\"ZNF263\"\u001b[34m\u001b[39m\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "grn <- import_grn(GRN_FILE)\n", "grn" @@ -154,84 +114,14 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "cell-6", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "TFs: 701 \n", - "Targets: 11607 \n", - "Edges: 2334753 \n" - ] - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A data.frame: 6 \u00d7 3
fromtoweight
<chr><chr><dbl>
6ZNF496NOC2L 0.013845677
8ZNF496ISG15 0.043589601
9ZNF496C1orf1590.002842452
11ZNF496TNFRSF180.018544036
12ZNF496SDF4 0.016673121
16ZNF496PUSL1 0.006506393
\n" - ], - "text/latex": [ - "A data.frame: 6 \u00d7 3\n", - "\\begin{tabular}{r|lll}\n", - " & from & to & weight\\\\\n", - " & & & \\\\\n", - "\\hline\n", - "\t6 & ZNF496 & NOC2L & 0.013845677\\\\\n", - "\t8 & ZNF496 & ISG15 & 0.043589601\\\\\n", - "\t9 & ZNF496 & C1orf159 & 0.002842452\\\\\n", - "\t11 & ZNF496 & TNFRSF18 & 0.018544036\\\\\n", - "\t12 & ZNF496 & SDF4 & 0.016673121\\\\\n", - "\t16 & ZNF496 & PUSL1 & 0.006506393\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A data.frame: 6 \u00d7 3\n", - "\n", - "| | from <chr> | to <chr> | weight <dbl> |\n", - "|---|---|---|---|\n", - "| 6 | ZNF496 | NOC2L | 0.013845677 |\n", - "| 8 | ZNF496 | ISG15 | 0.043589601 |\n", - "| 9 | ZNF496 | C1orf159 | 0.002842452 |\n", - "| 11 | ZNF496 | TNFRSF18 | 0.018544036 |\n", - "| 12 | ZNF496 | SDF4 | 0.016673121 |\n", - "| 16 | ZNF496 | PUSL1 | 0.006506393 |\n", - "\n" - ], - "text/plain": [ - " from to weight \n", - "6 ZNF496 NOC2L 0.013845677\n", - "8 ZNF496 ISG15 0.043589601\n", - "9 ZNF496 C1orf159 0.002842452\n", - "11 ZNF496 TNFRSF18 0.018544036\n", - "12 ZNF496 SDF4 0.016673121\n", - "16 ZNF496 PUSL1 0.006506393" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Explore the GRN\n", "cat(\"TFs:\", length(tfs(grn)), \"\\n\")\n", @@ -250,7 +140,7 @@ "This replaces NicheNet's generic gene regulatory network with your context-specific GRN while preserving NicheNet's curated ligand-receptor interactions and signaling pathways. The result is a context-specific ligand-target matrix computed via Personalized PageRank.\n", "\n", "Three integration modes are available:\n", - "- **`replace`** (default): Completely replace NicheNet's GRN \u2014 most context-specific\n", + "- **`replace`** (default): Completely replace NicheNet's GRN — most context-specific\n", "- **`augment`**: Add your GRN edges to NicheNet's existing network\n", "- **`weighted`**: Weighted combination of both networks\n", "\n", @@ -260,93 +150,21 @@ { "cell_type": "markdown", "metadata": {}, - "source": "### What the `ContextNetwork` Represents\n\n`integrate_networks()` returns a `ContextNetwork`. This is the central reusable object in ContextNet: it stores a context-specific ligand-target matrix generated by propagating NicheNet ligand-receptor/signaling information through your GRN. A column is a ligand, a row is a target gene, and each entry is the regulatory potential connecting that ligand to that target in this biological context.\n\nBecause this object is independent of one sender/receiver contrast, you can save it once and reuse it across many downstream questions." + "source": "### What the `ContextNetwork` Represents\n\n`integrate_networks()` returns a `ContextNetwork`. This is the central reusable object in ContextNet: it stores a context-specific ligand-target matrix generated by propagating NicheNet ligand-receptor/signaling information through your GRN. A column is a ligand, a row is a target gene, and each entry is the regulatory potential connecting that ligand to that target in this biological context.\n\nBecause this object is independent of one sender/receiver contrast, you can save it once and reuse it across many downstream questions.", + "id": "cell02-008" }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "cell-8", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u2500\u2500 \u001b[1m\u001b[1mNetwork Integration\u001b[1m\u001b[22m \u2500\u2500\n", - "\n", - "\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u2192 Loading NicheNet networks...\n", - "\n", - "\u001b[36m\u2139\u001b[39m Loading from: \u001b[34m\u001b[34m/fh/fast/setty_m/user/yhuang2/ContextNet/data\u001b[34m\u001b[39m\n", - "\n", - "\u001b[32m\u2714\u001b[39m Loaded lr_network from \u001b[34m\u001b[34mlr_network_human_21122021.rds\u001b[34m\u001b[39m\n", - "\n", - "\u001b[32m\u2714\u001b[39m Loaded weighted_networks from \u001b[34m\u001b[34mweighted_networks_nsga2r_final.rds\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Ligands from lr_network: \u001b[34m\u001b[34m1226\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN edges: \u001b[34m\u001b[34m\"2,334,753\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN TFs: \u001b[34m\u001b[34m701\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN targets: \u001b[34m\u001b[34m11607\u001b[34m\u001b[39m\n", - "\n", - "\u2192 Integrating networks (mode: \u001b[34m\u001b[34m\"replace\"\u001b[34m\u001b[39m)...\n", - "\n", - "\u001b[36m\u2139\u001b[39m PPR damping_factor: \u001b[34m\u001b[34m0.7886\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m LTF cutoff: \u001b[34m\u001b[34m0.9256\u001b[34m\u001b[39m\n", - "\n", - "\u2192 Constructing ligand-target matrix (this may take a while)...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Constructed ligand-target matrix:\n", - "\n", - "Ligands: \u001b[34m1226\u001b[39m\n", - "\n", - "Targets: \u001b[34m25337\u001b[39m\n", - "\n", - "Non-zero entries: \u001b[34m\"14,217,826\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2500\u2500\u001b[39m \u001b[1mContextNetwork\u001b[22m \u001b[36m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\n", - "\n", - "\n", - "\n", - "Ligands: \u001b[34m\"1,226\"\u001b[39m\n", - "\n", - "Targets: \u001b[34m\"25,337\"\u001b[39m\n", - "\n", - "Integration mode: \u001b[34m\"replace\"\u001b[39m\n", - "\n", - "Signaling edges: \u001b[34m\"3,923,501\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Source GRN: 2334753 edges\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Created: 2026-03-23 22:02:00\n", - "\n" - ] - } - ], + "outputs": [], "source": [ - "# ~10 minutes \u2014 constructs context-specific ligand-target matrix\n", + "# ~10 minutes — constructs context-specific ligand-target matrix\n", "network <- integrate_networks(\n", " grn,\n", " nichenet_database = NICHENET_DB,\n", @@ -357,77 +175,20 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "cell-9", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\t
$mode
\n", - "\t\t
'replace'
\n", - "\t
$weights
\n", - "\t\t
NULL
\n", - "\t
$damping_factor
\n", - "\t\t
0.78857537733824
\n", - "\t
$ltf_cutoff
\n", - "\t\t
0.925586128312329
\n", - "\t
$algorithm
\n", - "\t\t
'PPR'
\n", - "
\n" - ], - "text/latex": [ - "\\begin{description}\n", - "\\item[\\$mode] 'replace'\n", - "\\item[\\$weights] NULL\n", - "\\item[\\$damping\\_factor] 0.78857537733824\n", - "\\item[\\$ltf\\_cutoff] 0.925586128312329\n", - "\\item[\\$algorithm] 'PPR'\n", - "\\end{description}\n" - ], - "text/markdown": [ - "$mode\n", - ": 'replace'\n", - "$weights\n", - ": NULL\n", - "$damping_factor\n", - ": 0.78857537733824\n", - "$ltf_cutoff\n", - ": 0.925586128312329\n", - "$algorithm\n", - ": 'PPR'\n", - "\n", - "\n" - ], - "text/plain": [ - "$mode\n", - "[1] \"replace\"\n", - "\n", - "$weights\n", - "NULL\n", - "\n", - "$damping_factor\n", - "[1] 0.7885754\n", - "\n", - "$ltf_cutoff\n", - "[1] 0.9255861\n", - "\n", - "$algorithm\n", - "[1] \"PPR\"\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "# Save network for reuse in Tutorial 03 (avoids rebuilding)\n", - "saveRDS(network, \"/tmp/contextnet_network.rds\")\n", + "# Cache the network for reuse (e.g. Tutorial 03) so the ~10 min integration is\n", + "# not repeated. The cache is a repo-local derived object under data/, not /tmp.\n", + "if (!dir.exists(CACHE_DIR)) dir.create(CACHE_DIR, recursive = TRUE)\n", + "saveRDS(network, NETWORK_CACHE)\n", + "cat(\"Cached ContextNetwork to:\", NETWORK_CACHE, \"\\n\")\n", "integration_params(network)" ] }, @@ -443,23 +204,14 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "cell-11", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cells: 74600 \n", - "Conditions: C, N \n" - ] - } - ], + "outputs": [], "source": [ "seurat_obj <- readRDS(SEURAT_FILE)\n", "seurat_cn <- subset(seurat_obj, subset = category %in% c(IDENT_1, IDENT_2))\n", @@ -469,30 +221,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "cell-12", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - " basal Endothelial T Cell suprabasal Myofibroblast \n", - " 16039 13538 13031 12471 5103 \n", - " parabasal Fibroblast dividing Myeloid transitioning \n", - " 3282 3109 2971 2698 1816 \n", - " Melanocyte B Cell Muscle Neuronal \n", - " 234 151 120 37 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "celltype_counts <- sort(table(seurat_cn[[GROUP_COL]][, 1]), decreasing = TRUE)\n", "celltype_counts" @@ -500,24 +236,14 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "cell-13", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Senders: basal, Endothelial, T Cell, suprabasal, Myofibroblast, parabasal, Fibroblast, dividing, Myeloid, transitioning \n", - "Receiver: basal \n", - "Comparison: C vs N \n" - ] - } - ], + "outputs": [], "source": [ "# Auto-detect senders if not specified\n", "if (is.null(SENDER)) {\n", @@ -536,7 +262,8 @@ "### Analysis Design Check\n", "\n", "This workflow asks whether condition-associated basal-cell programs can be explained by ligands from the surrounding cell types. Before scoring ligands, verify that the selected sender and receiver populations are represented in both conditions and that the context-specific network overlaps the expression object.\n" - ] + ], + "id": "cell02-015" }, { "cell_type": "code", @@ -558,7 +285,8 @@ "\")\n", "cat(\"Network ligands measured:\", length(intersect(ligands(network), expr_genes)), \"/\", length(ligands(network)), \"\n", "\")\n" - ] + ], + "id": "cell02-016" }, { "cell_type": "markdown", @@ -572,97 +300,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "cell-15", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\u001b[36m\u2500\u2500\u001b[39m \u001b[1mNicheNet Ligand Activity Prediction\u001b[22m \u001b[36m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Sender: \u001b[34m\u001b[34m\"basal, Endothelial, T Cell, suprabasal, Myofibroblast, parabasal, Fibroblast, dividing, Myeloid, transitioning\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Receiver: \u001b[34m\u001b[34m\"basal\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m DE comparison: \u001b[34m\u001b[34m\"C\"\u001b[34m\u001b[39m vs \u001b[34m\u001b[34m\"N\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m DE mode: within \u001b[34m\u001b[34m\"basal\"\u001b[34m\u001b[39m cells only\n", - "\n", - "\u2192 Computing DE genes: basal cells, (C) vs (N)\n", - "\n", - "Warning message:\n", - "\u201c\u001b[1m\u001b[22mThe `slot` argument of `GetAssayData()` is deprecated as of SeuratObject 5.0.0.\n", - "\u001b[36m\u2139\u001b[39m Please use the `layer` argument instead.\n", - "\u001b[36m\u2139\u001b[39m The deprecated feature was likely used in the \u001b[34mSeurat\u001b[39m package.\n", - " Please report the issue at \u001b[3m\u001b[34m\u001b[39m\u001b[23m.\u201d\n", - "Warning message:\n", - "\u201c\u001b[1m\u001b[22m`PackageCheck()` was deprecated in SeuratObject 5.0.0.\n", - "\u001b[36m\u2139\u001b[39m Please use `rlang::check_installed()` instead.\n", - "\u001b[36m\u2139\u001b[39m The deprecated feature was likely used in the \u001b[34mSeurat\u001b[39m package.\n", - " Please report the issue at \u001b[3m\u001b[34m\u001b[39m\u001b[23m.\u201d\n", - "\u001b[32m\u2714\u001b[39m Found \u001b[34m\u001b[34m4334\u001b[34m\u001b[39m DE genes\n", - "\n", - "\u001b[32m\u2714\u001b[39m Loaded lr_network from \u001b[34m\u001b[34mlr_network_human_21122021.rds\u001b[34m\u001b[39m\n", - "\n", - "\n", - "\n", - "\u2500\u2500 \u001b[1m\u001b[1mNicheNet Ligand Activity Analysis\u001b[1m\u001b[22m \u2500\u2500\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Sender: \u001b[34m\u001b[34m\"basal, Endothelial, T Cell, suprabasal, Myofibroblast, parabasal, Fibroblast, dividing, Myeloid, transitioning\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Receiver: \u001b[34m\u001b[34m\"basal\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Genes of interest: \u001b[34m\u001b[34m4334\u001b[34m\u001b[39m\n", - "\n", - "\u2192 Extracting expression data...\n", - "\n", - "\u001b[36m\u2139\u001b[39m Sender expressed genes: \u001b[34m\u001b[34m9569\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Receiver expressed genes: \u001b[34m\u001b[34m10141\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Potential ligands: \u001b[34m\u001b[34m275\u001b[34m\u001b[39m\n", - "\n", - "\u001b[33m!\u001b[39m Only 4134/4334 geneset genes in matrix\n", - "\n", - "\u2192 Predicting ligand activities...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Top 30 ligands identified\n", - "\n", - "\u2192 Extracting ligand-target regulatory potential...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Analysis complete\n", - "\n", - "Top ligand: \u001b[34m\"GJB6\"\u001b[39m (AUPR: 0.0075)\n", - "\n", - "Ligand-target links: \u001b[34m98009\u001b[39m\n", - "\n", - "\u2192 Extracting top targets...\n", - "\n", - "\u2192 Creating ContextResult object...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Analysis complete\n", - "\n", - "Top ligand: \u001b[34m\"GJB6\"\u001b[39m\n", - "\n", - "Ligands analyzed: \u001b[34m275\u001b[39m\n", - "\n", - "Targets identified: \u001b[34m100\u001b[39m\n", - "\n" - ] - } - ], + "outputs": [], "source": [ - "# ~2 minutes \u2014 condition comparison: DE within basal cells between C and N\n", + "# ~2 minutes — condition comparison: DE within basal cells between C and N\n", "result <- predict_ligand_activity_nichenet(\n", " object = seurat_cn,\n", " network = network,\n", @@ -684,7 +331,8 @@ "### Receiver Program\n", "\n", "ContextNet first defines the basal-cell C-vs-N gene program, then asks which ligands recover that program through the context-specific ligand-target matrix. Inspecting the receiver program is essential: the ligand ranking is only meaningful relative to these genes.\n" - ] + ], + "id": "cell02-019" }, { "cell_type": "code", @@ -700,7 +348,8 @@ "\")\n", "cat(\"Genes in ContextNetwork:\", length(intersect(geneset_oi, rownames(ligand_target_matrix(network)))), \"\n", "\")\n" - ] + ], + "id": "cell02-020" }, { "cell_type": "markdown", @@ -713,2445 +362,75 @@ { "cell_type": "markdown", "metadata": {}, - "source": "`result` is a `ContextResult`. It does not mean \"the communication network\" in general; it is the answer to the specific question encoded in the parameters: the selected senders, basal receiver cells, the C vs N contrast, and the filtering thresholds.\n\nThe most important accessors are:\n\n| Accessor | What to inspect | Interpretation |\n|----------|-----------------|----------------|\n| `ligand_activities(result)` | full ranked ligand table | candidate upstream signals ranked by target recovery |\n| `top_ligands(result)` | selected ligand names | ligands carried forward to plots and mechanism checks |\n| `top_targets(result)` | high-priority target genes | receiver genes driving the ligand ranking |\n| `ligand_target_links(result)` | ligand-target pairs | mechanistic hypotheses to validate |\n| `parameters(result)` | analysis settings | exact biological question and thresholds |\n| `as.data.frame(result)` | generic activity table | export to tidy workflows |" + "source": "`result` is a `ContextResult`. It does not mean \"the communication network\" in general; it is the answer to the specific question encoded in the parameters: the selected senders, basal receiver cells, the C vs N contrast, and the filtering thresholds.\n\nThe most important accessors are:\n\n| Accessor | What to inspect | Interpretation |\n|----------|-----------------|----------------|\n| `ligand_activities(result)` | full ranked ligand table | candidate upstream signals ranked by target recovery |\n| `top_ligands(result)` | selected ligand names | ligands carried forward to plots and mechanism checks |\n| `top_targets(result)` | high-priority target genes | receiver genes driving the ligand ranking |\n| `ligand_target_links(result)` | ligand-target pairs | mechanistic hypotheses to validate |\n| `parameters(result)` | analysis settings | exact biological question and thresholds |\n| `as.data.frame(result)` | generic activity table | export to tidy workflows |", + "id": "cell02-022" }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "cell-17", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
  1. 'GJB6'
  2. 'IGFBP3'
  3. 'BACE1'
  4. 'CTSD'
  5. 'NUCB2'
  6. 'SLPI'
  7. 'TGFBI'
  8. 'PLTP'
  9. 'TSPAN5'
  10. 'SPON2'
  11. 'LTBP1'
  12. 'JAG2'
  13. 'TIMP1'
  14. 'LAMC1'
  15. 'GSTP1'
  16. 'ICAM1'
  17. 'TNFSF10'
  18. 'KIAA0319L'
  19. 'ANXA1'
  20. 'TIMP3'
  21. 'FURIN'
  22. 'SERPINF1'
  23. 'TNXB'
  24. 'DLL1'
  25. 'GJB2'
  26. 'COL4A5'
  27. 'PTN'
  28. 'CHL1'
  29. 'EMC1'
  30. 'CADM1'
\n" - ], - "text/latex": [ - "\\begin{enumerate*}\n", - "\\item 'GJB6'\n", - "\\item 'IGFBP3'\n", - "\\item 'BACE1'\n", - "\\item 'CTSD'\n", - "\\item 'NUCB2'\n", - "\\item 'SLPI'\n", - "\\item 'TGFBI'\n", - "\\item 'PLTP'\n", - "\\item 'TSPAN5'\n", - "\\item 'SPON2'\n", - "\\item 'LTBP1'\n", - "\\item 'JAG2'\n", - "\\item 'TIMP1'\n", - "\\item 'LAMC1'\n", - "\\item 'GSTP1'\n", - "\\item 'ICAM1'\n", - "\\item 'TNFSF10'\n", - "\\item 'KIAA0319L'\n", - "\\item 'ANXA1'\n", - "\\item 'TIMP3'\n", - "\\item 'FURIN'\n", - "\\item 'SERPINF1'\n", - "\\item 'TNXB'\n", - "\\item 'DLL1'\n", - "\\item 'GJB2'\n", - "\\item 'COL4A5'\n", - "\\item 'PTN'\n", - "\\item 'CHL1'\n", - "\\item 'EMC1'\n", - "\\item 'CADM1'\n", - "\\end{enumerate*}\n" - ], - "text/markdown": [ - "1. 'GJB6'\n", - "2. 'IGFBP3'\n", - "3. 'BACE1'\n", - "4. 'CTSD'\n", - "5. 'NUCB2'\n", - "6. 'SLPI'\n", - "7. 'TGFBI'\n", - "8. 'PLTP'\n", - "9. 'TSPAN5'\n", - "10. 'SPON2'\n", - "11. 'LTBP1'\n", - "12. 'JAG2'\n", - "13. 'TIMP1'\n", - "14. 'LAMC1'\n", - "15. 'GSTP1'\n", - "16. 'ICAM1'\n", - "17. 'TNFSF10'\n", - "18. 'KIAA0319L'\n", - "19. 'ANXA1'\n", - "20. 'TIMP3'\n", - "21. 'FURIN'\n", - "22. 'SERPINF1'\n", - "23. 'TNXB'\n", - "24. 'DLL1'\n", - "25. 'GJB2'\n", - "26. 'COL4A5'\n", - "27. 'PTN'\n", - "28. 'CHL1'\n", - "29. 'EMC1'\n", - "30. 'CADM1'\n", - "\n", - "\n" - ], - "text/plain": [ - " [1] \"GJB6\" \"IGFBP3\" \"BACE1\" \"CTSD\" \"NUCB2\" \"SLPI\" \n", - " [7] \"TGFBI\" \"PLTP\" \"TSPAN5\" \"SPON2\" \"LTBP1\" \"JAG2\" \n", - "[13] \"TIMP1\" \"LAMC1\" \"GSTP1\" \"ICAM1\" \"TNFSF10\" \"KIAA0319L\"\n", - "[19] \"ANXA1\" \"TIMP3\" \"FURIN\" \"SERPINF1\" \"TNXB\" \"DLL1\" \n", - "[25] \"GJB2\" \"COL4A5\" \"PTN\" \"CHL1\" \"EMC1\" \"CADM1\" " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "top_ligands(result)" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "cell-18", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 10 \u00d7 5
test_ligandaurocaupraupr_correctedpearson
<chr><dbl><dbl><dbl><dbl>
GJB6 0.49754400.42572350.0074717590.017268851
IGFBP30.49808140.42555370.0073019630.016071132
BACE1 0.49992070.42552630.0072745940.014928150
CTSD 0.49849220.42483100.0065792550.014118206
NUCB2 0.49853440.42413670.0058849720.011959435
SLPI 0.49559920.42320190.0049502270.012940918
TGFBI 0.49514080.42313780.0048860800.011645399
PLTP 0.49794200.42293520.0046835020.008833459
TSPAN50.49660430.42243890.0041872010.008945359
SPON2 0.49361070.42219570.0039440000.014648662
\n" - ], - "text/latex": [ - "A tibble: 10 \u00d7 5\n", - "\\begin{tabular}{lllll}\n", - " test\\_ligand & auroc & aupr & aupr\\_corrected & pearson\\\\\n", - " & & & & \\\\\n", - "\\hline\n", - "\t GJB6 & 0.4975440 & 0.4257235 & 0.007471759 & 0.017268851\\\\\n", - "\t IGFBP3 & 0.4980814 & 0.4255537 & 0.007301963 & 0.016071132\\\\\n", - "\t BACE1 & 0.4999207 & 0.4255263 & 0.007274594 & 0.014928150\\\\\n", - "\t CTSD & 0.4984922 & 0.4248310 & 0.006579255 & 0.014118206\\\\\n", - "\t NUCB2 & 0.4985344 & 0.4241367 & 0.005884972 & 0.011959435\\\\\n", - "\t SLPI & 0.4955992 & 0.4232019 & 0.004950227 & 0.012940918\\\\\n", - "\t TGFBI & 0.4951408 & 0.4231378 & 0.004886080 & 0.011645399\\\\\n", - "\t PLTP & 0.4979420 & 0.4229352 & 0.004683502 & 0.008833459\\\\\n", - "\t TSPAN5 & 0.4966043 & 0.4224389 & 0.004187201 & 0.008945359\\\\\n", - "\t SPON2 & 0.4936107 & 0.4221957 & 0.003944000 & 0.014648662\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 10 \u00d7 5\n", - "\n", - "| test_ligand <chr> | auroc <dbl> | aupr <dbl> | aupr_corrected <dbl> | pearson <dbl> |\n", - "|---|---|---|---|---|\n", - "| GJB6 | 0.4975440 | 0.4257235 | 0.007471759 | 0.017268851 |\n", - "| IGFBP3 | 0.4980814 | 0.4255537 | 0.007301963 | 0.016071132 |\n", - "| BACE1 | 0.4999207 | 0.4255263 | 0.007274594 | 0.014928150 |\n", - "| CTSD | 0.4984922 | 0.4248310 | 0.006579255 | 0.014118206 |\n", - "| NUCB2 | 0.4985344 | 0.4241367 | 0.005884972 | 0.011959435 |\n", - "| SLPI | 0.4955992 | 0.4232019 | 0.004950227 | 0.012940918 |\n", - "| TGFBI | 0.4951408 | 0.4231378 | 0.004886080 | 0.011645399 |\n", - "| PLTP | 0.4979420 | 0.4229352 | 0.004683502 | 0.008833459 |\n", - "| TSPAN5 | 0.4966043 | 0.4224389 | 0.004187201 | 0.008945359 |\n", - "| SPON2 | 0.4936107 | 0.4221957 | 0.003944000 | 0.014648662 |\n", - "\n" - ], - "text/plain": [ - " test_ligand auroc aupr aupr_corrected pearson \n", - "1 GJB6 0.4975440 0.4257235 0.007471759 0.017268851\n", - "2 IGFBP3 0.4980814 0.4255537 0.007301963 0.016071132\n", - "3 BACE1 0.4999207 0.4255263 0.007274594 0.014928150\n", - "4 CTSD 0.4984922 0.4248310 0.006579255 0.014118206\n", - "5 NUCB2 0.4985344 0.4241367 0.005884972 0.011959435\n", - "6 SLPI 0.4955992 0.4232019 0.004950227 0.012940918\n", - "7 TGFBI 0.4951408 0.4231378 0.004886080 0.011645399\n", - "8 PLTP 0.4979420 0.4229352 0.004683502 0.008833459\n", - "9 TSPAN5 0.4966043 0.4224389 0.004187201 0.008945359\n", - "10 SPON2 0.4936107 0.4221957 0.003944000 0.014648662" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "head(ligand_activities(result), 10)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "cell-19", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
  1. 'CD83'
  2. 'CEBPB'
  3. 'SOCS3'
  4. 'PLEKHG2'
  5. 'ZFP36'
  6. 'NFKB2'
  7. 'NR4A1'
  8. 'ERICH1'
  9. 'ARAP1'
  10. 'FBXL15'
  11. 'CEBPA'
  12. 'P2RY2'
  13. 'IFI30'
  14. 'HUS1'
  15. 'ZFPM1'
  16. 'FOSB'
  17. 'NFIC'
  18. 'GRINA'
  19. 'BCL3'
  20. 'FOS'
\n" - ], - "text/latex": [ - "\\begin{enumerate*}\n", - "\\item 'CD83'\n", - "\\item 'CEBPB'\n", - "\\item 'SOCS3'\n", - "\\item 'PLEKHG2'\n", - "\\item 'ZFP36'\n", - "\\item 'NFKB2'\n", - "\\item 'NR4A1'\n", - "\\item 'ERICH1'\n", - "\\item 'ARAP1'\n", - "\\item 'FBXL15'\n", - "\\item 'CEBPA'\n", - "\\item 'P2RY2'\n", - "\\item 'IFI30'\n", - "\\item 'HUS1'\n", - "\\item 'ZFPM1'\n", - "\\item 'FOSB'\n", - "\\item 'NFIC'\n", - "\\item 'GRINA'\n", - "\\item 'BCL3'\n", - "\\item 'FOS'\n", - "\\end{enumerate*}\n" - ], - "text/markdown": [ - "1. 'CD83'\n", - "2. 'CEBPB'\n", - "3. 'SOCS3'\n", - "4. 'PLEKHG2'\n", - "5. 'ZFP36'\n", - "6. 'NFKB2'\n", - "7. 'NR4A1'\n", - "8. 'ERICH1'\n", - "9. 'ARAP1'\n", - "10. 'FBXL15'\n", - "11. 'CEBPA'\n", - "12. 'P2RY2'\n", - "13. 'IFI30'\n", - "14. 'HUS1'\n", - "15. 'ZFPM1'\n", - "16. 'FOSB'\n", - "17. 'NFIC'\n", - "18. 'GRINA'\n", - "19. 'BCL3'\n", - "20. 'FOS'\n", - "\n", - "\n" - ], - "text/plain": [ - " [1] \"CD83\" \"CEBPB\" \"SOCS3\" \"PLEKHG2\" \"ZFP36\" \"NFKB2\" \"NR4A1\" \n", - " [8] \"ERICH1\" \"ARAP1\" \"FBXL15\" \"CEBPA\" \"P2RY2\" \"IFI30\" \"HUS1\" \n", - "[15] \"ZFPM1\" \"FOSB\" \"NFIC\" \"GRINA\" \"BCL3\" \"FOS\" " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "head(top_targets(result), 20)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "cell-20", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "
A tibble: 6 \u00d7 3
ligandtargetweight
<chr><chr><dbl>
GJB6AAAS 0.0008408704
GJB6AAMP 0.0003621308
GJB6AARSD10.0005269753
GJB6AASDH 0.0003288502
GJB6ABAT 0.0003047685
GJB6ABCA1 0.0011211961
\n" - ], - "text/latex": [ - "A tibble: 6 \u00d7 3\n", - "\\begin{tabular}{lll}\n", - " ligand & target & weight\\\\\n", - " & & \\\\\n", - "\\hline\n", - "\t GJB6 & AAAS & 0.0008408704\\\\\n", - "\t GJB6 & AAMP & 0.0003621308\\\\\n", - "\t GJB6 & AARSD1 & 0.0005269753\\\\\n", - "\t GJB6 & AASDH & 0.0003288502\\\\\n", - "\t GJB6 & ABAT & 0.0003047685\\\\\n", - "\t GJB6 & ABCA1 & 0.0011211961\\\\\n", - "\\end{tabular}\n" - ], - "text/markdown": [ - "\n", - "A tibble: 6 \u00d7 3\n", - "\n", - "| ligand <chr> | target <chr> | weight <dbl> |\n", - "|---|---|---|\n", - "| GJB6 | AAAS | 0.0008408704 |\n", - "| GJB6 | AAMP | 0.0003621308 |\n", - "| GJB6 | AARSD1 | 0.0005269753 |\n", - "| GJB6 | AASDH | 0.0003288502 |\n", - "| GJB6 | ABAT | 0.0003047685 |\n", - "| GJB6 | ABCA1 | 0.0011211961 |\n", - "\n" - ], - "text/plain": [ - " ligand target weight \n", - "1 GJB6 AAAS 0.0008408704\n", - "2 GJB6 AAMP 0.0003621308\n", - "3 GJB6 AARSD1 0.0005269753\n", - "4 GJB6 AASDH 0.0003288502\n", - "5 GJB6 ABAT 0.0003047685\n", - "6 GJB6 ABCA1 0.0011211961" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "head(ligand_target_links(result))" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "cell-21", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\t
$sender
\n", - "\t\t
\n", - "
  1. 'basal'
  2. 'Endothelial'
  3. 'T Cell'
  4. 'suprabasal'
  5. 'Myofibroblast'
  6. 'parabasal'
  7. 'Fibroblast'
  8. 'dividing'
  9. 'Myeloid'
  10. 'transitioning'
\n", - "
\n", - "\t
$receiver
\n", - "\t\t
'basal'
\n", - "\t
$geneset_oi
\n", - "\t\t
\n", - "
  1. 'KCNQ5'
  2. 'KRT13'
  3. 'RPS10'
  4. 'FXYD3'
  5. 'BTF3'
  6. 'IGFBP6'
  7. 'GSTP1'
  8. 'CRIP1'
  9. 'SLC3A2'
  10. 'S100A11'
  11. 'PRDX1'
  12. 'TACSTD2'
  13. 'CSTA'
  14. 'PFN1'
  15. 'COX7C'
  16. 'CASC19'
  17. 'FTH1'
  18. 'NME2'
  19. 'SLC25A5'
  20. 'COX6A1'
  21. 'SLC25A6'
  22. 'ABCC3'
  23. 'TXN'
  24. 'PRDX5'
  25. 'HINT1'
  26. 'COX8A'
  27. 'PPIA'
  28. 'SNX29'
  29. 'RBMS3'
  30. 'S100A6'
  31. 'SERF2'
  32. 'ALDH3A1'
  33. 'TKT'
  34. 'COX4I1'
  35. 'LY6D'
  36. 'MYL12B'
  37. 'C19orf33'
  38. 'SPINT2'
  39. 'EIF3K'
  40. 'RPL36AL'
  41. 'CHCHD2'
  42. 'PDLIM1'
  43. 'S100A14'
  44. 'MOXD1'
  45. 'NACA'
  46. 'ATP5MC3'
  47. 'GPX4'
  48. 'ZFP36'
  49. 'IGFBP2'
  50. 'MT1X'
  51. 'H3F3A'
  52. 'GAPDH'
  53. 'UBA52'
  54. 'PDLIM3'
  55. 'BARX2'
  56. 'EEF1B2'
  57. 'RPSA'
  58. 'RPL27'
  59. 'RPL14'
  60. 'CD9'
  61. 'ADARB2'
  62. 'RPS5'
  63. 'FAU'
  64. 'RPL22'
  65. 'RPL15'
  66. 'EEF1G'
  67. 'RPS13'
  68. 'RPL38'
  69. 'RPL23A'
  70. 'NFKBIA'
  71. 'RACK1'
  72. 'RPL4'
  73. 'JUNB'
  74. 'RPL29'
  75. 'RPS7'
  76. 'H3F3B'
  77. 'RPL7'
  78. 'RPS4X'
  79. 'S100A2'
  80. 'EIF1'
  81. 'RPS25'
  82. 'RPL6'
  83. 'RPL5'
  84. 'RPL7A'
  85. 'RPL24'
  86. 'RPL10A'
  87. 'RPL17'
  88. 'RPLP0'
  89. 'RPL8'
  90. 'RPL31'
  91. 'RPL36A'
  92. 'RPL18'
  93. 'RPL9'
  94. 'RPL19'
  95. 'RPL18A'
  96. 'RPL12'
  97. 'RPS23'
  98. 'RPL35A'
  99. 'RPL30'
  100. 'RPL26'
  101. 'RPL23'
  102. 'RPS17'
  103. 'RPL21'
  104. 'RPS15'
  105. 'RPL32'
  106. 'RPS20'
  107. 'RPS3'
  108. 'RPS16'
  109. 'RPS9'
  110. 'RPS6'
  111. 'RPL27A'
  112. 'RPL10'
  113. 'RPL28'
  114. 'RPL3'
  115. 'RPS27A'
  116. 'RPS24'
  117. 'RPLP2'
  118. 'RPS14'
  119. 'RPS3A'
  120. 'RPS11'
  121. 'RPL11'
  122. 'RPS28'
  123. 'RPL34'
  124. 'RPS8'
  125. 'RPL13'
  126. 'RPS2'
  127. 'RPS19'
  128. 'RPL13A'
  129. 'KRT5'
  130. 'RPS12'
  131. 'RPLP1'
  132. 'RPL41'
  133. 'RPS18'
  134. 'EEF1A1'
  135. 'KRT4'
  136. 'TPT1'
  137. 'HNRNPA1'
  138. 'ATP5MC2'
  139. 'S100A10'
  140. 'LAMB3'
  141. 'PTMA'
  142. 'CD81'
  143. 'UQCRB'
  144. 'TRMT112'
  145. 'NOP53'
  146. 'ATP5F1D'
  147. 'PPDPF'
  148. 'IFITM3'
  149. 'TSPO'
  150. 'TOMM7'
  151. 'COX6B1'
  152. 'ENO1'
  153. 'FRAS1'
  154. 'SUMO2'
  155. 'CD63'
  156. 'HIGD2A'
  157. 'NDUFA4'
  158. 'PAMR1'
  159. 'CHCHD10'
  160. 'PEG3'
  161. 'CLIC1'
  162. 'CST3'
  163. 'CLU'
  164. 'SLC7A5'
  165. 'IER3'
  166. 'SFRP1'
  167. 'PDLIM4'
  168. 'LDHB'
  169. 'PLP2'
  170. 'PPIB'
  171. 'COX5B'
  172. 'PFDN5'
  173. 'PPP1R14B'
  174. 'MT2A'
  175. 'FTL'
  176. 'ITM2B'
  177. 'SFN'
  178. 'TMEM59'
  179. 'SNHG29'
  180. 'SRP14'
  181. 'BCAP31'
  182. 'HSPA2'
  183. 'SLC25A3'
  184. 'NPM1'
  185. 'EEF1D'
  186. 'UQCRH'
  187. 'DAD1'
  188. 'CUTA'
  189. 'RPL37'
  190. 'BTG2'
  191. 'CSTB'
  192. 'APRT'
  193. 'RPS15A'
  194. 'MIF'
  195. 'RPL39'
  196. 'PPP1R15A'
  197. 'AC098617.1'
  198. 'GABARAP'
  199. 'B2M'
  200. 'PITX1'
  201. \u22ef
  202. 'PTCD2'
  203. 'AC011444.3'
  204. 'MOB3C'
  205. 'ZNF14'
  206. 'TMEM254'
  207. 'PHC1'
  208. 'MAP1S'
  209. 'MEGF8'
  210. 'COG1'
  211. 'TMEM138'
  212. 'CRYL1'
  213. 'ULK3'
  214. 'CEP126'
  215. 'FDX2'
  216. 'RNF31'
  217. 'SEMA4C'
  218. 'ZNF487'
  219. 'RALGPS1'
  220. 'AC127502.2'
  221. 'MLST8'
  222. 'GET1'
  223. 'AC103591.3'
  224. 'CYB561D2'
  225. 'ZBTB16'
  226. 'ADGRF1'
  227. 'HMBS'
  228. 'CATSPERG'
  229. 'IFIT5'
  230. 'BAK1'
  231. 'SPATA2'
  232. 'RBBP9'
  233. 'PCIF1'
  234. 'AL049840.2'
  235. 'SPATA1'
  236. 'THAP6'
  237. 'AL450306.1'
  238. 'OXSR1'
  239. 'BCO2'
  240. 'TUT1'
  241. 'SPATA7'
  242. 'FBXO4'
  243. 'AC011997.1'
  244. 'MED9'
  245. 'AC073114.1'
  246. 'KLHL12'
  247. 'KLHL7'
  248. 'AC092683.1'
  249. 'ELN'
  250. 'IFI35'
  251. 'USP2'
  252. 'IDUA'
  253. 'SLC25A14'
  254. 'GALE'
  255. 'DENND2C'
  256. 'FKRP'
  257. 'ZNF672'
  258. 'KLC4'
  259. 'LINC01151'
  260. 'AL139351.3'
  261. 'TAOK2'
  262. 'AR'
  263. 'SHROOM4'
  264. 'RASD1'
  265. 'TMEM185A'
  266. 'FLG-AS1'
  267. 'GRAMD2A'
  268. 'SPATA18'
  269. 'NOTCH2NLC'
  270. 'AC126696.1'
  271. 'IFT122'
  272. 'VGLL3'
  273. 'PGAP3'
  274. 'FAM215B'
  275. 'ZSCAN25'
  276. 'IRF7'
  277. 'CCNE2'
  278. 'SIRT6'
  279. 'RBKS'
  280. 'CCDC24'
  281. 'CDC42EP5'
  282. 'IBA57'
  283. 'AC034195.1'
  284. 'KIT'
  285. 'CENPE'
  286. 'MALAT1'
  287. 'KAT2B'
  288. 'AP000692.2'
  289. 'PIK3C2B'
  290. 'SULT2B1'
  291. 'ASTE1'
  292. 'AC012459.1'
  293. 'TTC9C'
  294. 'PTCH1'
  295. 'PHKG2'
  296. 'AC105052.4'
  297. 'CRTC2'
  298. 'TUBGCP6'
  299. 'ZNF585A'
  300. 'HAUS8'
  301. 'ICAM1'
  302. 'AP002381.2'
  303. 'IDI2-AS1'
  304. 'ALDH1A3'
  305. 'SNX33'
  306. 'C14orf93'
  307. 'HS1BP3'
  308. 'SEC14L2'
  309. 'UCK1'
  310. 'ZSCAN16-AS1'
  311. 'MIR34AHG'
  312. 'PP2D1'
  313. 'RAB10'
  314. 'EGR2'
  315. 'RUNX2'
  316. 'Z95331.1'
  317. 'IQCK'
  318. 'TNFRSF21'
  319. 'ZBTB20-AS5'
  320. 'AC117834.1'
  321. 'TAPBPL'
  322. 'AC087190.1'
  323. 'ERCC2'
  324. 'FBXO44'
  325. 'ARHGAP11B'
  326. 'C1orf54'
  327. 'MEN1'
  328. 'FAXDC2'
  329. 'LRCH4'
  330. 'GPRC5A'
  331. 'RAB11B-AS1'
  332. 'OAS2'
  333. 'RSAD2'
  334. 'PARM1'
  335. 'CCDC15'
  336. 'SNX31'
  337. 'VSIG10'
  338. 'LINC01237'
  339. 'GLI2'
  340. 'AC138305.1'
  341. 'ARL6'
  342. 'OGG1'
  343. 'B9D1'
  344. 'KIF18A'
  345. 'AC026704.1'
  346. 'SCNN1B'
  347. 'STARD13-AS'
  348. 'TMEM201'
  349. 'SLC2A8'
  350. 'APOBEC3A'
  351. 'CNTN1'
  352. 'ASPM'
  353. 'ZNF771'
  354. 'ANKRD42'
  355. 'SEMA4A'
  356. 'EFCAB13'
  357. 'FTCDNL1'
  358. 'CENPF'
  359. 'APH1B'
  360. 'SARM1'
  361. 'IRX3'
  362. 'CCL20'
  363. 'XAF1'
  364. 'SOX12'
  365. 'DNAJA1'
  366. 'LCA5'
  367. 'AC019211.1'
  368. 'CTSS'
  369. 'ZNF503-AS1'
  370. 'ZNF274'
  371. 'UPRT'
  372. 'NFKB1'
  373. 'ANKZF1'
  374. 'FAM131A'
  375. 'SAMD5'
  376. 'MAGI1-AS1'
  377. 'PHF23'
  378. 'SHFL'
  379. 'ZNF836'
  380. 'DYNC1I1'
  381. 'TTC22'
  382. 'SATB1'
  383. 'HIST1H2BJ'
  384. 'SLC27A1'
  385. 'CYP2C18'
  386. 'LNX1-AS1'
  387. 'RB1CC1'
  388. 'STX17-AS1'
  389. 'CXCL3'
  390. 'AC011511.2'
  391. 'DIAPH3'
  392. 'ACSS1'
  393. 'FRMD4A'
  394. 'TJP1'
  395. 'KLF3-AS1'
  396. 'MECOM'
  397. 'NAPA-AS1'
  398. 'SLC44A3'
  399. 'AC096741.1'
  400. 'TRA2A'
  401. 'PHTF1'
\n", - "
\n", - "\t
$ident_col
\n", - "\t\t
'category'
\n", - "\t
$ident_1
\n", - "\t\t
'C'
\n", - "\t
$ident_2
\n", - "\t\t
'N'
\n", - "\t
$de_subset_receiver
\n", - "\t\t
TRUE
\n", - "\t
$group_col
\n", - "\t\t
'Fine_Cell_Types'
\n", - "\t
$assay
\n", - "\t\t
'RNA'
\n", - "\t
$min_cells
\n", - "\t\t
10
\n", - "\t
$min_pct
\n", - "\t\t
0.05
\n", - "\t
$logfc_threshold
\n", - "\t\t
0.25
\n", - "\t
$pval_threshold
\n", - "\t\t
0.05
\n", - "\t
$top_n_ligands
\n", - "\t\t
30
\n", - "\t
$top_n_targets
\n", - "\t\t
100
\n", - "\t
$ligand_target_cutoff
\n", - "\t\t
0
\n", - "
\n" - ], - "text/latex": [ - "\\begin{description}\n", - "\\item[\\$sender] \\begin{enumerate*}\n", - "\\item 'basal'\n", - "\\item 'Endothelial'\n", - "\\item 'T Cell'\n", - "\\item 'suprabasal'\n", - "\\item 'Myofibroblast'\n", - "\\item 'parabasal'\n", - "\\item 'Fibroblast'\n", - "\\item 'dividing'\n", - "\\item 'Myeloid'\n", - "\\item 'transitioning'\n", - "\\end{enumerate*}\n", - "\n", - "\\item[\\$receiver] 'basal'\n", - "\\item[\\$geneset\\_oi] \\begin{enumerate*}\n", - "\\item 'KCNQ5'\n", - "\\item 'KRT13'\n", - "\\item 'RPS10'\n", - "\\item 'FXYD3'\n", - "\\item 'BTF3'\n", - "\\item 'IGFBP6'\n", - "\\item 'GSTP1'\n", - "\\item 'CRIP1'\n", - "\\item 'SLC3A2'\n", - "\\item 'S100A11'\n", - "\\item 'PRDX1'\n", - "\\item 'TACSTD2'\n", - "\\item 'CSTA'\n", - "\\item 'PFN1'\n", - "\\item 'COX7C'\n", - "\\item 'CASC19'\n", - "\\item 'FTH1'\n", - "\\item 'NME2'\n", - "\\item 'SLC25A5'\n", - "\\item 'COX6A1'\n", - "\\item 'SLC25A6'\n", - "\\item 'ABCC3'\n", - "\\item 'TXN'\n", - "\\item 'PRDX5'\n", - "\\item 'HINT1'\n", - "\\item 'COX8A'\n", - "\\item 'PPIA'\n", - "\\item 'SNX29'\n", - "\\item 'RBMS3'\n", - "\\item 'S100A6'\n", - "\\item 'SERF2'\n", - "\\item 'ALDH3A1'\n", - "\\item 'TKT'\n", - "\\item 'COX4I1'\n", - "\\item 'LY6D'\n", - "\\item 'MYL12B'\n", - "\\item 'C19orf33'\n", - "\\item 'SPINT2'\n", - "\\item 'EIF3K'\n", - "\\item 'RPL36AL'\n", - "\\item 'CHCHD2'\n", - "\\item 'PDLIM1'\n", - "\\item 'S100A14'\n", - "\\item 'MOXD1'\n", - "\\item 'NACA'\n", - "\\item 'ATP5MC3'\n", - "\\item 'GPX4'\n", - "\\item 'ZFP36'\n", - "\\item 'IGFBP2'\n", - "\\item 'MT1X'\n", - "\\item 'H3F3A'\n", - "\\item 'GAPDH'\n", - "\\item 'UBA52'\n", - "\\item 'PDLIM3'\n", - "\\item 'BARX2'\n", - "\\item 'EEF1B2'\n", - "\\item 'RPSA'\n", - "\\item 'RPL27'\n", - "\\item 'RPL14'\n", - "\\item 'CD9'\n", - "\\item 'ADARB2'\n", - "\\item 'RPS5'\n", - "\\item 'FAU'\n", - "\\item 'RPL22'\n", - "\\item 'RPL15'\n", - "\\item 'EEF1G'\n", - "\\item 'RPS13'\n", - "\\item 'RPL38'\n", - "\\item 'RPL23A'\n", - "\\item 'NFKBIA'\n", - "\\item 'RACK1'\n", - "\\item 'RPL4'\n", - "\\item 'JUNB'\n", - "\\item 'RPL29'\n", - "\\item 'RPS7'\n", - "\\item 'H3F3B'\n", - "\\item 'RPL7'\n", - "\\item 'RPS4X'\n", - "\\item 'S100A2'\n", - "\\item 'EIF1'\n", - "\\item 'RPS25'\n", - "\\item 'RPL6'\n", - "\\item 'RPL5'\n", - "\\item 'RPL7A'\n", - "\\item 'RPL24'\n", - "\\item 'RPL10A'\n", - "\\item 'RPL17'\n", - "\\item 'RPLP0'\n", - "\\item 'RPL8'\n", - "\\item 'RPL31'\n", - "\\item 'RPL36A'\n", - "\\item 'RPL18'\n", - "\\item 'RPL9'\n", - "\\item 'RPL19'\n", - "\\item 'RPL18A'\n", - "\\item 'RPL12'\n", - "\\item 'RPS23'\n", - "\\item 'RPL35A'\n", - "\\item 'RPL30'\n", - "\\item 'RPL26'\n", - "\\item 'RPL23'\n", - "\\item 'RPS17'\n", - "\\item 'RPL21'\n", - "\\item 'RPS15'\n", - "\\item 'RPL32'\n", - "\\item 'RPS20'\n", - "\\item 'RPS3'\n", - "\\item 'RPS16'\n", - "\\item 'RPS9'\n", - "\\item 'RPS6'\n", - "\\item 'RPL27A'\n", - "\\item 'RPL10'\n", - "\\item 'RPL28'\n", - "\\item 'RPL3'\n", - "\\item 'RPS27A'\n", - "\\item 'RPS24'\n", - "\\item 'RPLP2'\n", - "\\item 'RPS14'\n", - "\\item 'RPS3A'\n", - "\\item 'RPS11'\n", - "\\item 'RPL11'\n", - "\\item 'RPS28'\n", - "\\item 'RPL34'\n", - "\\item 'RPS8'\n", - "\\item 'RPL13'\n", - "\\item 'RPS2'\n", - "\\item 'RPS19'\n", - "\\item 'RPL13A'\n", - "\\item 'KRT5'\n", - "\\item 'RPS12'\n", - "\\item 'RPLP1'\n", - "\\item 'RPL41'\n", - "\\item 'RPS18'\n", - "\\item 'EEF1A1'\n", - "\\item 'KRT4'\n", - "\\item 'TPT1'\n", - "\\item 'HNRNPA1'\n", - "\\item 'ATP5MC2'\n", - "\\item 'S100A10'\n", - "\\item 'LAMB3'\n", - "\\item 'PTMA'\n", - "\\item 'CD81'\n", - "\\item 'UQCRB'\n", - "\\item 'TRMT112'\n", - "\\item 'NOP53'\n", - "\\item 'ATP5F1D'\n", - "\\item 'PPDPF'\n", - "\\item 'IFITM3'\n", - "\\item 'TSPO'\n", - "\\item 'TOMM7'\n", - "\\item 'COX6B1'\n", - "\\item 'ENO1'\n", - "\\item 'FRAS1'\n", - "\\item 'SUMO2'\n", - "\\item 'CD63'\n", - "\\item 'HIGD2A'\n", - "\\item 'NDUFA4'\n", - "\\item 'PAMR1'\n", - "\\item 'CHCHD10'\n", - "\\item 'PEG3'\n", - "\\item 'CLIC1'\n", - "\\item 'CST3'\n", - "\\item 'CLU'\n", - "\\item 'SLC7A5'\n", - "\\item 'IER3'\n", - "\\item 'SFRP1'\n", - "\\item 'PDLIM4'\n", - "\\item 'LDHB'\n", - "\\item 'PLP2'\n", - "\\item 'PPIB'\n", - "\\item 'COX5B'\n", - "\\item 'PFDN5'\n", - "\\item 'PPP1R14B'\n", - "\\item 'MT2A'\n", - "\\item 'FTL'\n", - "\\item 'ITM2B'\n", - "\\item 'SFN'\n", - "\\item 'TMEM59'\n", - "\\item 'SNHG29'\n", - "\\item 'SRP14'\n", - "\\item 'BCAP31'\n", - "\\item 'HSPA2'\n", - "\\item 'SLC25A3'\n", - "\\item 'NPM1'\n", - "\\item 'EEF1D'\n", - "\\item 'UQCRH'\n", - "\\item 'DAD1'\n", - "\\item 'CUTA'\n", - "\\item 'RPL37'\n", - "\\item 'BTG2'\n", - "\\item 'CSTB'\n", - "\\item 'APRT'\n", - "\\item 'RPS15A'\n", - "\\item 'MIF'\n", - "\\item 'RPL39'\n", - "\\item 'PPP1R15A'\n", - "\\item 'AC098617.1'\n", - "\\item 'GABARAP'\n", - "\\item 'B2M'\n", - "\\item 'PITX1'\n", - "\\item \u22ef\n", - "\\item 'PTCD2'\n", - "\\item 'AC011444.3'\n", - "\\item 'MOB3C'\n", - "\\item 'ZNF14'\n", - "\\item 'TMEM254'\n", - "\\item 'PHC1'\n", - "\\item 'MAP1S'\n", - "\\item 'MEGF8'\n", - "\\item 'COG1'\n", - "\\item 'TMEM138'\n", - "\\item 'CRYL1'\n", - "\\item 'ULK3'\n", - "\\item 'CEP126'\n", - "\\item 'FDX2'\n", - "\\item 'RNF31'\n", - "\\item 'SEMA4C'\n", - "\\item 'ZNF487'\n", - "\\item 'RALGPS1'\n", - "\\item 'AC127502.2'\n", - "\\item 'MLST8'\n", - "\\item 'GET1'\n", - "\\item 'AC103591.3'\n", - "\\item 'CYB561D2'\n", - "\\item 'ZBTB16'\n", - "\\item 'ADGRF1'\n", - "\\item 'HMBS'\n", - "\\item 'CATSPERG'\n", - "\\item 'IFIT5'\n", - "\\item 'BAK1'\n", - "\\item 'SPATA2'\n", - "\\item 'RBBP9'\n", - "\\item 'PCIF1'\n", - "\\item 'AL049840.2'\n", - "\\item 'SPATA1'\n", - "\\item 'THAP6'\n", - "\\item 'AL450306.1'\n", - "\\item 'OXSR1'\n", - "\\item 'BCO2'\n", - "\\item 'TUT1'\n", - "\\item 'SPATA7'\n", - "\\item 'FBXO4'\n", - "\\item 'AC011997.1'\n", - "\\item 'MED9'\n", - "\\item 'AC073114.1'\n", - "\\item 'KLHL12'\n", - "\\item 'KLHL7'\n", - "\\item 'AC092683.1'\n", - "\\item 'ELN'\n", - "\\item 'IFI35'\n", - "\\item 'USP2'\n", - "\\item 'IDUA'\n", - "\\item 'SLC25A14'\n", - "\\item 'GALE'\n", - "\\item 'DENND2C'\n", - "\\item 'FKRP'\n", - "\\item 'ZNF672'\n", - "\\item 'KLC4'\n", - "\\item 'LINC01151'\n", - "\\item 'AL139351.3'\n", - "\\item 'TAOK2'\n", - "\\item 'AR'\n", - "\\item 'SHROOM4'\n", - "\\item 'RASD1'\n", - "\\item 'TMEM185A'\n", - "\\item 'FLG-AS1'\n", - "\\item 'GRAMD2A'\n", - "\\item 'SPATA18'\n", - "\\item 'NOTCH2NLC'\n", - "\\item 'AC126696.1'\n", - "\\item 'IFT122'\n", - "\\item 'VGLL3'\n", - "\\item 'PGAP3'\n", - "\\item 'FAM215B'\n", - "\\item 'ZSCAN25'\n", - "\\item 'IRF7'\n", - "\\item 'CCNE2'\n", - "\\item 'SIRT6'\n", - "\\item 'RBKS'\n", - "\\item 'CCDC24'\n", - "\\item 'CDC42EP5'\n", - "\\item 'IBA57'\n", - "\\item 'AC034195.1'\n", - "\\item 'KIT'\n", - "\\item 'CENPE'\n", - "\\item 'MALAT1'\n", - "\\item 'KAT2B'\n", - "\\item 'AP000692.2'\n", - "\\item 'PIK3C2B'\n", - "\\item 'SULT2B1'\n", - "\\item 'ASTE1'\n", - "\\item 'AC012459.1'\n", - "\\item 'TTC9C'\n", - "\\item 'PTCH1'\n", - "\\item 'PHKG2'\n", - "\\item 'AC105052.4'\n", - "\\item 'CRTC2'\n", - "\\item 'TUBGCP6'\n", - "\\item 'ZNF585A'\n", - "\\item 'HAUS8'\n", - "\\item 'ICAM1'\n", - "\\item 'AP002381.2'\n", - "\\item 'IDI2-AS1'\n", - "\\item 'ALDH1A3'\n", - "\\item 'SNX33'\n", - "\\item 'C14orf93'\n", - "\\item 'HS1BP3'\n", - "\\item 'SEC14L2'\n", - "\\item 'UCK1'\n", - "\\item 'ZSCAN16-AS1'\n", - "\\item 'MIR34AHG'\n", - "\\item 'PP2D1'\n", - "\\item 'RAB10'\n", - "\\item 'EGR2'\n", - "\\item 'RUNX2'\n", - "\\item 'Z95331.1'\n", - "\\item 'IQCK'\n", - "\\item 'TNFRSF21'\n", - "\\item 'ZBTB20-AS5'\n", - "\\item 'AC117834.1'\n", - "\\item 'TAPBPL'\n", - "\\item 'AC087190.1'\n", - "\\item 'ERCC2'\n", - "\\item 'FBXO44'\n", - "\\item 'ARHGAP11B'\n", - "\\item 'C1orf54'\n", - "\\item 'MEN1'\n", - "\\item 'FAXDC2'\n", - "\\item 'LRCH4'\n", - "\\item 'GPRC5A'\n", - "\\item 'RAB11B-AS1'\n", - "\\item 'OAS2'\n", - "\\item 'RSAD2'\n", - "\\item 'PARM1'\n", - "\\item 'CCDC15'\n", - "\\item 'SNX31'\n", - "\\item 'VSIG10'\n", - "\\item 'LINC01237'\n", - "\\item 'GLI2'\n", - "\\item 'AC138305.1'\n", - "\\item 'ARL6'\n", - "\\item 'OGG1'\n", - "\\item 'B9D1'\n", - "\\item 'KIF18A'\n", - "\\item 'AC026704.1'\n", - "\\item 'SCNN1B'\n", - "\\item 'STARD13-AS'\n", - "\\item 'TMEM201'\n", - "\\item 'SLC2A8'\n", - "\\item 'APOBEC3A'\n", - "\\item 'CNTN1'\n", - "\\item 'ASPM'\n", - "\\item 'ZNF771'\n", - "\\item 'ANKRD42'\n", - "\\item 'SEMA4A'\n", - "\\item 'EFCAB13'\n", - "\\item 'FTCDNL1'\n", - "\\item 'CENPF'\n", - "\\item 'APH1B'\n", - "\\item 'SARM1'\n", - "\\item 'IRX3'\n", - "\\item 'CCL20'\n", - "\\item 'XAF1'\n", - "\\item 'SOX12'\n", - "\\item 'DNAJA1'\n", - "\\item 'LCA5'\n", - "\\item 'AC019211.1'\n", - "\\item 'CTSS'\n", - "\\item 'ZNF503-AS1'\n", - "\\item 'ZNF274'\n", - "\\item 'UPRT'\n", - "\\item 'NFKB1'\n", - "\\item 'ANKZF1'\n", - "\\item 'FAM131A'\n", - "\\item 'SAMD5'\n", - "\\item 'MAGI1-AS1'\n", - "\\item 'PHF23'\n", - "\\item 'SHFL'\n", - "\\item 'ZNF836'\n", - "\\item 'DYNC1I1'\n", - "\\item 'TTC22'\n", - "\\item 'SATB1'\n", - "\\item 'HIST1H2BJ'\n", - "\\item 'SLC27A1'\n", - "\\item 'CYP2C18'\n", - "\\item 'LNX1-AS1'\n", - "\\item 'RB1CC1'\n", - "\\item 'STX17-AS1'\n", - "\\item 'CXCL3'\n", - "\\item 'AC011511.2'\n", - "\\item 'DIAPH3'\n", - "\\item 'ACSS1'\n", - "\\item 'FRMD4A'\n", - "\\item 'TJP1'\n", - "\\item 'KLF3-AS1'\n", - "\\item 'MECOM'\n", - "\\item 'NAPA-AS1'\n", - "\\item 'SLC44A3'\n", - "\\item 'AC096741.1'\n", - "\\item 'TRA2A'\n", - "\\item 'PHTF1'\n", - "\\end{enumerate*}\n", - "\n", - "\\item[\\$ident\\_col] 'category'\n", - "\\item[\\$ident\\_1] 'C'\n", - "\\item[\\$ident\\_2] 'N'\n", - "\\item[\\$de\\_subset\\_receiver] TRUE\n", - "\\item[\\$group\\_col] 'Fine\\_Cell\\_Types'\n", - "\\item[\\$assay] 'RNA'\n", - "\\item[\\$min\\_cells] 10\n", - "\\item[\\$min\\_pct] 0.05\n", - "\\item[\\$logfc\\_threshold] 0.25\n", - "\\item[\\$pval\\_threshold] 0.05\n", - "\\item[\\$top\\_n\\_ligands] 30\n", - "\\item[\\$top\\_n\\_targets] 100\n", - "\\item[\\$ligand\\_target\\_cutoff] 0\n", - "\\end{description}\n" - ], - "text/markdown": [ - "$sender\n", - ": 1. 'basal'\n", - "2. 'Endothelial'\n", - "3. 'T Cell'\n", - "4. 'suprabasal'\n", - "5. 'Myofibroblast'\n", - "6. 'parabasal'\n", - "7. 'Fibroblast'\n", - "8. 'dividing'\n", - "9. 'Myeloid'\n", - "10. 'transitioning'\n", - "\n", - "\n", - "\n", - "$receiver\n", - ": 'basal'\n", - "$geneset_oi\n", - ": 1. 'KCNQ5'\n", - "2. 'KRT13'\n", - "3. 'RPS10'\n", - "4. 'FXYD3'\n", - "5. 'BTF3'\n", - "6. 'IGFBP6'\n", - "7. 'GSTP1'\n", - "8. 'CRIP1'\n", - "9. 'SLC3A2'\n", - "10. 'S100A11'\n", - "11. 'PRDX1'\n", - "12. 'TACSTD2'\n", - "13. 'CSTA'\n", - "14. 'PFN1'\n", - "15. 'COX7C'\n", - "16. 'CASC19'\n", - "17. 'FTH1'\n", - "18. 'NME2'\n", - "19. 'SLC25A5'\n", - "20. 'COX6A1'\n", - "21. 'SLC25A6'\n", - "22. 'ABCC3'\n", - "23. 'TXN'\n", - "24. 'PRDX5'\n", - "25. 'HINT1'\n", - "26. 'COX8A'\n", - "27. 'PPIA'\n", - "28. 'SNX29'\n", - "29. 'RBMS3'\n", - "30. 'S100A6'\n", - "31. 'SERF2'\n", - "32. 'ALDH3A1'\n", - "33. 'TKT'\n", - "34. 'COX4I1'\n", - "35. 'LY6D'\n", - "36. 'MYL12B'\n", - "37. 'C19orf33'\n", - "38. 'SPINT2'\n", - "39. 'EIF3K'\n", - "40. 'RPL36AL'\n", - "41. 'CHCHD2'\n", - "42. 'PDLIM1'\n", - "43. 'S100A14'\n", - "44. 'MOXD1'\n", - "45. 'NACA'\n", - "46. 'ATP5MC3'\n", - "47. 'GPX4'\n", - "48. 'ZFP36'\n", - "49. 'IGFBP2'\n", - "50. 'MT1X'\n", - "51. 'H3F3A'\n", - "52. 'GAPDH'\n", - "53. 'UBA52'\n", - "54. 'PDLIM3'\n", - "55. 'BARX2'\n", - "56. 'EEF1B2'\n", - "57. 'RPSA'\n", - "58. 'RPL27'\n", - "59. 'RPL14'\n", - "60. 'CD9'\n", - "61. 'ADARB2'\n", - "62. 'RPS5'\n", - "63. 'FAU'\n", - "64. 'RPL22'\n", - "65. 'RPL15'\n", - "66. 'EEF1G'\n", - "67. 'RPS13'\n", - "68. 'RPL38'\n", - "69. 'RPL23A'\n", - "70. 'NFKBIA'\n", - "71. 'RACK1'\n", - "72. 'RPL4'\n", - "73. 'JUNB'\n", - "74. 'RPL29'\n", - "75. 'RPS7'\n", - "76. 'H3F3B'\n", - "77. 'RPL7'\n", - "78. 'RPS4X'\n", - "79. 'S100A2'\n", - "80. 'EIF1'\n", - "81. 'RPS25'\n", - "82. 'RPL6'\n", - "83. 'RPL5'\n", - "84. 'RPL7A'\n", - "85. 'RPL24'\n", - "86. 'RPL10A'\n", - "87. 'RPL17'\n", - "88. 'RPLP0'\n", - "89. 'RPL8'\n", - "90. 'RPL31'\n", - "91. 'RPL36A'\n", - "92. 'RPL18'\n", - "93. 'RPL9'\n", - "94. 'RPL19'\n", - "95. 'RPL18A'\n", - "96. 'RPL12'\n", - "97. 'RPS23'\n", - "98. 'RPL35A'\n", - "99. 'RPL30'\n", - "100. 'RPL26'\n", - "101. 'RPL23'\n", - "102. 'RPS17'\n", - "103. 'RPL21'\n", - "104. 'RPS15'\n", - "105. 'RPL32'\n", - "106. 'RPS20'\n", - "107. 'RPS3'\n", - "108. 'RPS16'\n", - "109. 'RPS9'\n", - "110. 'RPS6'\n", - "111. 'RPL27A'\n", - "112. 'RPL10'\n", - "113. 'RPL28'\n", - "114. 'RPL3'\n", - "115. 'RPS27A'\n", - "116. 'RPS24'\n", - "117. 'RPLP2'\n", - "118. 'RPS14'\n", - "119. 'RPS3A'\n", - "120. 'RPS11'\n", - "121. 'RPL11'\n", - "122. 'RPS28'\n", - "123. 'RPL34'\n", - "124. 'RPS8'\n", - "125. 'RPL13'\n", - "126. 'RPS2'\n", - "127. 'RPS19'\n", - "128. 'RPL13A'\n", - "129. 'KRT5'\n", - "130. 'RPS12'\n", - "131. 'RPLP1'\n", - "132. 'RPL41'\n", - "133. 'RPS18'\n", - "134. 'EEF1A1'\n", - "135. 'KRT4'\n", - "136. 'TPT1'\n", - "137. 'HNRNPA1'\n", - "138. 'ATP5MC2'\n", - "139. 'S100A10'\n", - "140. 'LAMB3'\n", - "141. 'PTMA'\n", - "142. 'CD81'\n", - "143. 'UQCRB'\n", - "144. 'TRMT112'\n", - "145. 'NOP53'\n", - "146. 'ATP5F1D'\n", - "147. 'PPDPF'\n", - "148. 'IFITM3'\n", - "149. 'TSPO'\n", - "150. 'TOMM7'\n", - "151. 'COX6B1'\n", - "152. 'ENO1'\n", - "153. 'FRAS1'\n", - "154. 'SUMO2'\n", - "155. 'CD63'\n", - "156. 'HIGD2A'\n", - "157. 'NDUFA4'\n", - "158. 'PAMR1'\n", - "159. 'CHCHD10'\n", - "160. 'PEG3'\n", - "161. 'CLIC1'\n", - "162. 'CST3'\n", - "163. 'CLU'\n", - "164. 'SLC7A5'\n", - "165. 'IER3'\n", - "166. 'SFRP1'\n", - "167. 'PDLIM4'\n", - "168. 'LDHB'\n", - "169. 'PLP2'\n", - "170. 'PPIB'\n", - "171. 'COX5B'\n", - "172. 'PFDN5'\n", - "173. 'PPP1R14B'\n", - "174. 'MT2A'\n", - "175. 'FTL'\n", - "176. 'ITM2B'\n", - "177. 'SFN'\n", - "178. 'TMEM59'\n", - "179. 'SNHG29'\n", - "180. 'SRP14'\n", - "181. 'BCAP31'\n", - "182. 'HSPA2'\n", - "183. 'SLC25A3'\n", - "184. 'NPM1'\n", - "185. 'EEF1D'\n", - "186. 'UQCRH'\n", - "187. 'DAD1'\n", - "188. 'CUTA'\n", - "189. 'RPL37'\n", - "190. 'BTG2'\n", - "191. 'CSTB'\n", - "192. 'APRT'\n", - "193. 'RPS15A'\n", - "194. 'MIF'\n", - "195. 'RPL39'\n", - "196. 'PPP1R15A'\n", - "197. 'AC098617.1'\n", - "198. 'GABARAP'\n", - "199. 'B2M'\n", - "200. 'PITX1'\n", - "201. \u22ef\n", - "202. 'PTCD2'\n", - "203. 'AC011444.3'\n", - "204. 'MOB3C'\n", - "205. 'ZNF14'\n", - "206. 'TMEM254'\n", - "207. 'PHC1'\n", - "208. 'MAP1S'\n", - "209. 'MEGF8'\n", - "210. 'COG1'\n", - "211. 'TMEM138'\n", - "212. 'CRYL1'\n", - "213. 'ULK3'\n", - "214. 'CEP126'\n", - "215. 'FDX2'\n", - "216. 'RNF31'\n", - "217. 'SEMA4C'\n", - "218. 'ZNF487'\n", - "219. 'RALGPS1'\n", - "220. 'AC127502.2'\n", - "221. 'MLST8'\n", - "222. 'GET1'\n", - "223. 'AC103591.3'\n", - "224. 'CYB561D2'\n", - "225. 'ZBTB16'\n", - "226. 'ADGRF1'\n", - "227. 'HMBS'\n", - "228. 'CATSPERG'\n", - "229. 'IFIT5'\n", - "230. 'BAK1'\n", - "231. 'SPATA2'\n", - "232. 'RBBP9'\n", - "233. 'PCIF1'\n", - "234. 'AL049840.2'\n", - "235. 'SPATA1'\n", - "236. 'THAP6'\n", - "237. 'AL450306.1'\n", - "238. 'OXSR1'\n", - "239. 'BCO2'\n", - "240. 'TUT1'\n", - "241. 'SPATA7'\n", - "242. 'FBXO4'\n", - "243. 'AC011997.1'\n", - "244. 'MED9'\n", - "245. 'AC073114.1'\n", - "246. 'KLHL12'\n", - "247. 'KLHL7'\n", - "248. 'AC092683.1'\n", - "249. 'ELN'\n", - "250. 'IFI35'\n", - "251. 'USP2'\n", - "252. 'IDUA'\n", - "253. 'SLC25A14'\n", - "254. 'GALE'\n", - "255. 'DENND2C'\n", - "256. 'FKRP'\n", - "257. 'ZNF672'\n", - "258. 'KLC4'\n", - "259. 'LINC01151'\n", - "260. 'AL139351.3'\n", - "261. 'TAOK2'\n", - "262. 'AR'\n", - "263. 'SHROOM4'\n", - "264. 'RASD1'\n", - "265. 'TMEM185A'\n", - "266. 'FLG-AS1'\n", - "267. 'GRAMD2A'\n", - "268. 'SPATA18'\n", - "269. 'NOTCH2NLC'\n", - "270. 'AC126696.1'\n", - "271. 'IFT122'\n", - "272. 'VGLL3'\n", - "273. 'PGAP3'\n", - "274. 'FAM215B'\n", - "275. 'ZSCAN25'\n", - "276. 'IRF7'\n", - "277. 'CCNE2'\n", - "278. 'SIRT6'\n", - "279. 'RBKS'\n", - "280. 'CCDC24'\n", - "281. 'CDC42EP5'\n", - "282. 'IBA57'\n", - "283. 'AC034195.1'\n", - "284. 'KIT'\n", - "285. 'CENPE'\n", - "286. 'MALAT1'\n", - "287. 'KAT2B'\n", - "288. 'AP000692.2'\n", - "289. 'PIK3C2B'\n", - "290. 'SULT2B1'\n", - "291. 'ASTE1'\n", - "292. 'AC012459.1'\n", - "293. 'TTC9C'\n", - "294. 'PTCH1'\n", - "295. 'PHKG2'\n", - "296. 'AC105052.4'\n", - "297. 'CRTC2'\n", - "298. 'TUBGCP6'\n", - "299. 'ZNF585A'\n", - "300. 'HAUS8'\n", - "301. 'ICAM1'\n", - "302. 'AP002381.2'\n", - "303. 'IDI2-AS1'\n", - "304. 'ALDH1A3'\n", - "305. 'SNX33'\n", - "306. 'C14orf93'\n", - "307. 'HS1BP3'\n", - "308. 'SEC14L2'\n", - "309. 'UCK1'\n", - "310. 'ZSCAN16-AS1'\n", - "311. 'MIR34AHG'\n", - "312. 'PP2D1'\n", - "313. 'RAB10'\n", - "314. 'EGR2'\n", - "315. 'RUNX2'\n", - "316. 'Z95331.1'\n", - "317. 'IQCK'\n", - "318. 'TNFRSF21'\n", - "319. 'ZBTB20-AS5'\n", - "320. 'AC117834.1'\n", - "321. 'TAPBPL'\n", - "322. 'AC087190.1'\n", - "323. 'ERCC2'\n", - "324. 'FBXO44'\n", - "325. 'ARHGAP11B'\n", - "326. 'C1orf54'\n", - "327. 'MEN1'\n", - "328. 'FAXDC2'\n", - "329. 'LRCH4'\n", - "330. 'GPRC5A'\n", - "331. 'RAB11B-AS1'\n", - "332. 'OAS2'\n", - "333. 'RSAD2'\n", - "334. 'PARM1'\n", - "335. 'CCDC15'\n", - "336. 'SNX31'\n", - "337. 'VSIG10'\n", - "338. 'LINC01237'\n", - "339. 'GLI2'\n", - "340. 'AC138305.1'\n", - "341. 'ARL6'\n", - "342. 'OGG1'\n", - "343. 'B9D1'\n", - "344. 'KIF18A'\n", - "345. 'AC026704.1'\n", - "346. 'SCNN1B'\n", - "347. 'STARD13-AS'\n", - "348. 'TMEM201'\n", - "349. 'SLC2A8'\n", - "350. 'APOBEC3A'\n", - "351. 'CNTN1'\n", - "352. 'ASPM'\n", - "353. 'ZNF771'\n", - "354. 'ANKRD42'\n", - "355. 'SEMA4A'\n", - "356. 'EFCAB13'\n", - "357. 'FTCDNL1'\n", - "358. 'CENPF'\n", - "359. 'APH1B'\n", - "360. 'SARM1'\n", - "361. 'IRX3'\n", - "362. 'CCL20'\n", - "363. 'XAF1'\n", - "364. 'SOX12'\n", - "365. 'DNAJA1'\n", - "366. 'LCA5'\n", - "367. 'AC019211.1'\n", - "368. 'CTSS'\n", - "369. 'ZNF503-AS1'\n", - "370. 'ZNF274'\n", - "371. 'UPRT'\n", - "372. 'NFKB1'\n", - "373. 'ANKZF1'\n", - "374. 'FAM131A'\n", - "375. 'SAMD5'\n", - "376. 'MAGI1-AS1'\n", - "377. 'PHF23'\n", - "378. 'SHFL'\n", - "379. 'ZNF836'\n", - "380. 'DYNC1I1'\n", - "381. 'TTC22'\n", - "382. 'SATB1'\n", - "383. 'HIST1H2BJ'\n", - "384. 'SLC27A1'\n", - "385. 'CYP2C18'\n", - "386. 'LNX1-AS1'\n", - "387. 'RB1CC1'\n", - "388. 'STX17-AS1'\n", - "389. 'CXCL3'\n", - "390. 'AC011511.2'\n", - "391. 'DIAPH3'\n", - "392. 'ACSS1'\n", - "393. 'FRMD4A'\n", - "394. 'TJP1'\n", - "395. 'KLF3-AS1'\n", - "396. 'MECOM'\n", - "397. 'NAPA-AS1'\n", - "398. 'SLC44A3'\n", - "399. 'AC096741.1'\n", - "400. 'TRA2A'\n", - "401. 'PHTF1'\n", - "\n", - "\n", - "\n", - "$ident_col\n", - ": 'category'\n", - "$ident_1\n", - ": 'C'\n", - "$ident_2\n", - ": 'N'\n", - "$de_subset_receiver\n", - ": TRUE\n", - "$group_col\n", - ": 'Fine_Cell_Types'\n", - "$assay\n", - ": 'RNA'\n", - "$min_cells\n", - ": 10\n", - "$min_pct\n", - ": 0.05\n", - "$logfc_threshold\n", - ": 0.25\n", - "$pval_threshold\n", - ": 0.05\n", - "$top_n_ligands\n", - ": 30\n", - "$top_n_targets\n", - ": 100\n", - "$ligand_target_cutoff\n", - ": 0\n", - "\n", - "\n" - ], - "text/plain": [ - "$sender\n", - " [1] \"basal\" \"Endothelial\" \"T Cell\" \"suprabasal\" \n", - " [5] \"Myofibroblast\" \"parabasal\" \"Fibroblast\" \"dividing\" \n", - " [9] \"Myeloid\" \"transitioning\"\n", - "\n", - "$receiver\n", - "[1] \"basal\"\n", - "\n", - "$geneset_oi\n", - " [1] \"KCNQ5\" \"KRT13\" \"RPS10\" \"FXYD3\" \n", - " [5] \"BTF3\" \"IGFBP6\" \"GSTP1\" \"CRIP1\" \n", - " [9] \"SLC3A2\" \"S100A11\" \"PRDX1\" \"TACSTD2\" \n", - " [13] \"CSTA\" \"PFN1\" \"COX7C\" \"CASC19\" \n", - " [17] \"FTH1\" \"NME2\" \"SLC25A5\" \"COX6A1\" \n", - " [21] \"SLC25A6\" \"ABCC3\" \"TXN\" \"PRDX5\" \n", - " [25] \"HINT1\" \"COX8A\" \"PPIA\" \"SNX29\" \n", - " [29] \"RBMS3\" \"S100A6\" \"SERF2\" \"ALDH3A1\" \n", - " [33] \"TKT\" \"COX4I1\" \"LY6D\" \"MYL12B\" \n", - " [37] \"C19orf33\" \"SPINT2\" \"EIF3K\" \"RPL36AL\" \n", - " [41] \"CHCHD2\" \"PDLIM1\" \"S100A14\" \"MOXD1\" \n", - " [45] \"NACA\" \"ATP5MC3\" \"GPX4\" \"ZFP36\" \n", - " [49] \"IGFBP2\" \"MT1X\" \"H3F3A\" \"GAPDH\" \n", - " [53] \"UBA52\" \"PDLIM3\" \"BARX2\" \"EEF1B2\" \n", - " [57] \"RPSA\" \"RPL27\" \"RPL14\" \"CD9\" \n", - " [61] \"ADARB2\" \"RPS5\" \"FAU\" \"RPL22\" \n", - " [65] \"RPL15\" \"EEF1G\" \"RPS13\" \"RPL38\" \n", - " [69] \"RPL23A\" \"NFKBIA\" \"RACK1\" \"RPL4\" \n", - " [73] \"JUNB\" \"RPL29\" \"RPS7\" \"H3F3B\" \n", - " [77] \"RPL7\" \"RPS4X\" \"S100A2\" \"EIF1\" \n", - " [81] \"RPS25\" \"RPL6\" \"RPL5\" \"RPL7A\" \n", - " [85] \"RPL24\" \"RPL10A\" \"RPL17\" \"RPLP0\" \n", - " [89] \"RPL8\" \"RPL31\" \"RPL36A\" \"RPL18\" \n", - " [93] \"RPL9\" \"RPL19\" \"RPL18A\" \"RPL12\" \n", - " [97] \"RPS23\" \"RPL35A\" \"RPL30\" \"RPL26\" \n", - " [101] \"RPL23\" \"RPS17\" \"RPL21\" \"RPS15\" \n", - " [105] \"RPL32\" \"RPS20\" \"RPS3\" \"RPS16\" \n", - " [109] \"RPS9\" \"RPS6\" \"RPL27A\" \"RPL10\" \n", - " [113] \"RPL28\" \"RPL3\" \"RPS27A\" \"RPS24\" \n", - " [117] \"RPLP2\" \"RPS14\" \"RPS3A\" \"RPS11\" \n", - " [121] \"RPL11\" \"RPS28\" \"RPL34\" \"RPS8\" \n", - " [125] \"RPL13\" \"RPS2\" \"RPS19\" \"RPL13A\" \n", - " [129] \"KRT5\" \"RPS12\" \"RPLP1\" \"RPL41\" \n", - " [133] \"RPS18\" \"EEF1A1\" \"KRT4\" \"TPT1\" \n", - " [137] \"HNRNPA1\" \"ATP5MC2\" \"S100A10\" \"LAMB3\" \n", - " [141] \"PTMA\" \"CD81\" \"UQCRB\" \"TRMT112\" \n", - " [145] \"NOP53\" \"ATP5F1D\" \"PPDPF\" \"IFITM3\" \n", - " [149] \"TSPO\" \"TOMM7\" \"COX6B1\" \"ENO1\" \n", - " [153] \"FRAS1\" \"SUMO2\" \"CD63\" \"HIGD2A\" \n", - " [157] \"NDUFA4\" \"PAMR1\" \"CHCHD10\" \"PEG3\" \n", - " [161] \"CLIC1\" \"CST3\" \"CLU\" \"SLC7A5\" \n", - " [165] \"IER3\" \"SFRP1\" \"PDLIM4\" \"LDHB\" \n", - " [169] \"PLP2\" \"PPIB\" \"COX5B\" \"PFDN5\" \n", - " [173] \"PPP1R14B\" \"MT2A\" \"FTL\" \"ITM2B\" \n", - " [177] \"SFN\" \"TMEM59\" \"SNHG29\" \"SRP14\" \n", - " [181] \"BCAP31\" \"HSPA2\" \"SLC25A3\" \"NPM1\" \n", - " [185] \"EEF1D\" \"UQCRH\" \"DAD1\" \"CUTA\" \n", - " [189] \"RPL37\" \"BTG2\" \"CSTB\" \"APRT\" \n", - " [193] \"RPS15A\" \"MIF\" \"RPL39\" \"PPP1R15A\" \n", - " [197] \"AC098617.1\" \"GABARAP\" \"B2M\" \"PITX1\" \n", - " [201] \"ATP1B3\" \"EIF3F\" \"FGFBP1\" \"RPS27\" \n", - " [205] \"IMPDH2\" \"MT1E\" \"MGST2\" \"NDUFB4\" \n", - " [209] \"PCSK5\" \"EFEMP1\" \"DEFB1\" \"IL1R2\" \n", - " [213] \"SNRPD2\" \"CCND1\" \"ATP5F1A\" \"CLTB\" \n", - " [217] \"C12orf57\" \"PARK7\" \"LY6E\" \"ACTB\" \n", - " [221] \"SNRPB\" \"EDF1\" \"CFL1\" \"TMA7\" \n", - " [225] \"TBX3\" \"MYL6\" \"PAX9\" \"CIRBP\" \n", - " [229] \"GAS5\" \"COX6C\" \"PEBP1\" \"DLGAP2\" \n", - " [233] \"ATP5F1B\" \"ANXA1\" \"COX5A\" \"SLC6A1\" \n", - " [237] \"RAN\" \"MYC\" \"SOD1\" \"NDUFS5\" \n", - " [241] \"COMMD6\" \"RNASEK\" \"NQO1\" \"COX7A2\" \n", - " [245] \"GRN\" \"NDUFB9\" \"BHLHE40\" \"DLK2\" \n", - " [249] \"SYT8\" \"COMT\" \"NDUFB10\" \"TAGLN2\" \n", - " [253] \"PERP\" \"MYADM\" \"RPL37A\" \"GPX2\" \n", - " [257] \"AQP3\" \"NDUFB11\" \"TXNDC17\" \"TBC1D2\" \n", - " [261] \"PRXL2A\" \"ATP5PO\" \"PHB2\" \"SSR4\" \n", - " [265] \"NDUFA13\" \"ATP5F1E\" \"ETFB\" \"ATP5PF\" \n", - " [269] \"RPL35\" \"GPNMB\" \"C1QBP\" \"UXT\" \n", - " [273] \"PRDX2\" \"ATP5MG\" \"SQSTM1\" \"MYL12A\" \n", - " [277] \"SPCS1\" \"CALML3\" \"HSPB1\" \"COX7B\" \n", - " [281] \"MDH2\" \"TUBB\" \"LAPTM4A\" \"OAZ1\" \n", - " [285] \"TFCP2L1\" \"CACNB2\" \"UBB\" \"SNHG7\" \n", - " [289] \"ALDH3A2\" \"OST4\" \"TPPP3\" \"RPL36\" \n", - " [293] \"EMP2\" \"PSMA7\" \"KRT15\" \"NPC2\" \n", - " [297] \"ALKBH7\" \"SERPINB5\" \"ITPKC\" \"ATP5PD\" \n", - " [301] \"LSP1\" \"CYC1\" \"AP001347.1\" \"ATP5MC1\" \n", - " [305] \"MZT2B\" \"CBR1\" \"ABHD2\" \"SF3B6\" \n", - " [309] \"SNRPE\" \"MGST3\" \"ANXA11\" \"CDK6\" \n", - " [313] \"NEDD8\" \"PKM\" \"KCNMA1\" \"NUPR1\" \n", - " [317] \"CALM2\" \"BSG\" \"BANF1\" \"PSMA2\" \n", - " [321] \"TUBA1B\" \"CLIP4\" \"CA12\" \"PSMB1\" \n", - " [325] \"TTC6\" \"LINC02006\" \"MARCKS\" \"ELOB\" \n", - " [329] \"POLR2L\" \"IER2\" \"MXRA5\" \"HS6ST2\" \n", - " [333] \"SERPINB1\" \"LSM3\" \"WDR83OS\" \"NDUFB7\" \n", - " [337] \"HCAR3\" \"HSBP1\" \"SNRPF\" \"CELF2\" \n", - " [341] \"ATP5PB\" \"TNS3\" \"SNCA\" \"GSTO1\" \n", - " [345] \"HLA-A\" \"DYNLL1\" \"HMGN2\" \"AL117329.1\" \n", - " [349] \"RGMA\" \"DUSP1\" \"MICOS10\" \"RNH1\" \n", - " [353] \"TOMM20\" \"LGALS3BP\" \"SELENOW\" \"EIF4A1\" \n", - " [357] \"TPI1\" \"TIMP1\" \"SLC1A5\" \"NDUFA1\" \n", - " [361] \"S100A16\" \"NDUFC2\" \"NDUFA11\" \"FAT1\" \n", - " [365] \"RBM3\" \"PLXNA2\" \"TMBIM6\" \"APEX1\" \n", - " [369] \"JUN\" \"CTSD\" \"ACTG1\" \"PSMB4\" \n", - " [373] \"SNHG32\" \"LGALS3\" \"DDT\" \"TMEM238\" \n", - " [377] \"RBM8A\" \"SH3BGRL3\" \"DHRS3\" \"NDUFS7\" \n", - " [381] \"PSME1\" \"EEF2\" \"KRTCAP2\" \"HSP90AB1\" \n", - " [385] \"ADIRF\" \"MRFAP1\" \"ATF4\" \"POLR1D\" \n", - " [389] \"KRT19\" \"FGF14\" \"RNF7\" \"PCED1B\" \n", - " [393] \"MRPL51\" \"SOX15\" \"ATF3\" \"ATP5MPL\" \n", - " [397] \"ARPC3\" \"PTMS\" \"SNRPD3\" \"TMEM14C\" \n", - " [401] \"EIF5A\" \"CCDC85B\" \"DBI\" \"LMAN2\" \n", - " [405] \"NCL\" \"SAP18\" \"CEBPD\" \"SLPI\" \n", - " [409] \"ADH7\" \"AC036176.3\" \"ATP6V0C\" \"SNHG5\" \n", - " [413] \"CRYAB\" \"SRSF9\" \"ATP5IF1\" \"AC008050.1\" \n", - " [417] \"PHLDA2\" \"SNHG6\" \"PSMB5\" \"NHP2\" \n", - " [421] \"FAR1\" \"SET\" \"POMP\" \"SLC20A1\" \n", - " [425] \"GUK1\" \"H2AFZ\" \"ZFP36L2\" \"EIF3G\" \n", - " [429] \"ATRAID\" \"ARL6IP4\" \"NDUFB8\" \"KRT18\" \n", - " [433] \"CYCS\" \"LAMTOR4\" \"UQCR11\" \"EMC4\" \n", - " [437] \"PDIA3\" \"COLEC12\" \"TRIR\" \"SEM1\" \n", - " [441] \"UQCRQ\" \"ADH5\" \"PRNP\" \"GJB6\" \n", - " [445] \"ATP5MF\" \"H1FX\" \"LAMB4\" \"ERP29\" \n", - " [449] \"BLVRB\" \"HMGN3\" \"VDAC2\" \"ERGIC3\" \n", - " [453] \"HSPE1\" \"CIAO2B\" \"GSR\" \"VAMP8\" \n", - " [457] \"PMAIP1\" \"IL18\" \"TSPAN3\" \"SNHG8\" \n", - " [461] \"HMGB1\" \"EPHX1\" \"GAS6\" \"MRPS24\" \n", - " [465] \"CALR\" \"SSR2\" \"ANAPC11\" \"SEC61B\" \n", - " [469] \"MRC2\" \"LDHA\" \"ATP5F1C\" \"FOS\" \n", - " [473] \"SPCS2\" \"RANBP1\" \"CCDC47\" \"GNG5\" \n", - " [477] \"UBL5\" \"TMSB4X\" \"CYP3A5\" \"KDELR1\" \n", - " [481] \"ANXA2\" \"FAM162A\" \"PSMB6\" \"ST3GAL1\" \n", - " [485] \"ATP1B1\" \"NFIA\" \"AL031073.2\" \"XRCC6\" \n", - " [489] \"CPNE8\" \"CALM1\" \"SAMD12\" \"FIS1\" \n", - " [493] \"PYCARD\" \"TACC1\" \"NDUFB5\" \"TUBB4B\" \n", - " [497] \"C19orf53\" \"TSTD1\" \"NME1\" \"CEBPB\" \n", - " [501] \"HNRNPF\" \"IFITM2\" \"UQCRFS1\" \"CES2\" \n", - " [505] \"RPL22L1\" \"SIPA1L2\" \"ATP6V1G1\" \"CSRP1\" \n", - " [509] \"TUFM\" \"ECH1\" \"HCAR2\" \"PCNA\" \n", - " [513] \"RPS21\" \"ATP6V1F\" \"SNRPG\" \"TOMM6\" \n", - " [517] \"EIF3E\" \"SYPL1\" \"NDUFAB1\" \"TMEM205\" \n", - " [521] \"HMGB2\" \"FOSB\" \"DHRS7\" \"UQCRC1\" \n", - " [525] \"RABAC1\" \"PHPT1\" \"BRI3\" \"DYNLT1\" \n", - " [529] \"FOXA1\" \"RAP2B\" \"SNRPD1\" \"ATP6V0E1\" \n", - " [533] \"SEC62\" \"KLK5\" \"TALDO1\" \"LAMP1\" \n", - " [537] \"ALCAM\" \"LGALS7B\" \"NDUFB3\" \"SLC7A1\" \n", - " [541] \"CRIP2\" \"CAPNS1\" \"EIF3I\" \"KLK10\" \n", - " [545] \"EGR1\" \"RPS27L\" \"CAPN1\" \"NENF\" \n", - " [549] \"CHMP2A\" \"UQCR10\" \"JTB\" \"NUCKS1\" \n", - " [553] \"NFKBIZ\" \"HNRNPA0\" \"PTTG1\" \"PSMC5\" \n", - " [557] \"ANP32B\" \"SERP1\" \"PRELID1\" \"HLA-B\" \n", - " [561] \"NDUFA6\" \"AURKAIP1\" \"EIF3M\" \"NDUFS6\" \n", - " [565] \"DLL1\" \"PPP1CA\" \"MMP28\" \"LSR\" \n", - " [569] \"BAG1\" \"PGK1\" \"GRINA\" \"SSBP1\" \n", - " [573] \"HSPB8\" \"MRPS21\" \"PTN\" \"ENY2\" \n", - " [577] \"RPS29\" \"CSNK2B\" \"NDUFA12\" \"EPB41L1\" \n", - " [581] \"SEC61G\" \"TRERF1\" \"EID1\" \"ZNHIT1\" \n", - " [585] \"THOC3\" \"PDIA6\" \"JPT1\" \"DNPH1\" \n", - " [589] \"AKR1A1\" \"HOPX\" \"PSMA4\" \"COX7A2L\" \n", - " [593] \"DUT\" \"PTGS2\" \"SELENOH\" \"SMDT1\" \n", - " [597] \"TMEM258\" \"PCBP1\" \"NDUFC1\" \"DANCR\" \n", - " [601] \"DYNLRB1\" \"NDUFAF8\" \"MDH1\" \"SLC25A21\" \n", - " [605] \"HNRNPL\" \"SF3B5\" \"NR1D2\" \"RSL24D1\" \n", - " [609] \"SLC43A3\" \"SYF2\" \"SPRR3\" \"PPP1R15B\" \n", - " [613] \"YBX1\" \"OCIAD2\" \"ATP6V0B\" \"PSMD8\" \n", - " [617] \"EPB41L4A-AS1\" \"SELENOP\" \"KRTCAP3\" \"CIB1\" \n", - " [621] \"ZFAS1\" \"DEPTOR\" \"SBDS\" \"DCTN3\" \n", - " [625] \"TIMM13\" \"AUP1\" \"NT5C\" \"PCBD1\" \n", - " [629] \"PSME2\" \"CHURC1\" \"SSB\" \"UBC\" \n", - " [633] \"TLE5\" \"OAT\" \"LSM8\" \"GNB2\" \n", - " [637] \"RBX1\" \"HSPA5\" \"NOP10\" \"ERH\" \n", - " [641] \"TMCO1\" \"COMTD1\" \"YWHAB\" \"IFI6\" \n", - " [645] \"MPZL2\" \"EPHA2\" \"IFNGR2\" \"MYDGF\" \n", - " [649] \"ZNF706\" \"UFC1\" \"GADD45GIP1\" \"TMED2\" \n", - " [653] \"MRPL41\" \"HES1\" \"LSM7\" \"SOCS3\" \n", - " [657] \"CD99\" \"DPYSL3\" \"SLC25A33\" \"NDUFV2\" \n", - " [661] \"ATP5MD\" \"PRDX4\" \"CAPNS2\" \"SDC4\" \n", - " [665] \"CAVIN1\" \"MICOS13\" \"REEP5\" \"GSTK1\" \n", - " [669] \"UBXN1\" \"DRAP1\" \"OCIAD1\" \"PRDX6\" \n", - " [673] \"PDCD4\" \"TMED3\" \"ECHS1\" \"SDR16C5\" \n", - " [677] \"EIF3L\" \"ATP5ME\" \"PIM3\" \"FERMT1\" \n", - " [681] \"UGDH\" \"TCEAL4\" \"ST6GALNAC2\" \"PPA1\" \n", - " [685] \"FAM189A2\" \"JUND\" \"APCDD1\" \"TRIP6\" \n", - " [689] \"CCT7\" \"LSM5\" \"EDIL3\" \"PSMA1\" \n", - " [693] \"CHMP3\" \"NDUFA8\" \"RHOC\" \"VPS28\" \n", - " [697] \"TMEM147\" \"BUD31\" \"RTRAF\" \"FSCN1\" \n", - " [701] \"ACADVL\" \"PSAP\" \"TMEM179B\" \"ZNF593\" \n", - " [705] \"NOL7\" \"PDCD5\" \"MRPL52\" \"FST\" \n", - " [709] \"GHITM\" \"TOMM22\" \"TMED10\" \"EIF6\" \n", - " [713] \"SNRPC\" \"CNPY2\" \"NBL1\" \"AKAP13\" \n", - " [717] \"MRPL57\" \"DEK\" \"SMIM26\" \"CDCA7L\" \n", - " [721] \"ANXA7\" \"ALDH2\" \"CDK2AP1\" \"RAC1\" \n", - " [725] \"HSD17B10\" \"NFIC\" \"TMBIM4\" \"SRP9\" \n", - " [729] \"DDR1\" \"PRMT1\" \"ANAPC16\" \"C11orf58\" \n", - " [733] \"EPHA6\" \"LINC02315\" \"DNAJA2\" \"RAB25\" \n", - " [737] \"NINJ1\" \"CLTA\" \"ELOC\" \"WNT9A\" \n", - " [741] \"NDUFS8\" \"ALDH7A1\" \"FBL\" \"SLIRP\" \n", - " [745] \"HLA-DRB1\" \"PSMB3\" \"MFGE8\" \"NDUFB6\" \n", - " [749] \"AP2S1\" \"OSTC\" \"CNBP\" \"PGLS\" \n", - " [753] \"NSA2\" \"LAMTOR5\" \"LMAN1\" \"RBIS\" \n", - " [757] \"MLF2\" \"LINC00910\" \"SPON2\" \"NDUFS4\" \n", - " [761] \"EBP\" \"GLTP\" \"HNRNPK\" \"PGRMC1\" \n", - " [765] \"KLF3\" \"CMTM8\" \"JAG2\" \"EIF3D\" \n", - " [769] \"MAP1LC3B\" \"BEX3\" \"PER3\" \"TRAPPC5\" \n", - " [773] \"TOMM5\" \"COPS9\" \"COPE\" \"FBXL7\" \n", - " [777] \"TAX1BP3\" \"SELENOK\" \"TEX264\" \"NR1D1\" \n", - " [781] \"BTBD19\" \"SIVA1\" \"PSMB2\" \"TNNT1\" \n", - " [785] \"RNPEP\" \"PPL\" \"NOB1\" \"CD59\" \n", - " [789] \"ARF5\" \"NDUFB2\" \"ATP6AP2\" \"TPRKB\" \n", - " [793] \"STOML2\" \"CCT8\" \"PLA2G4A\" \"PSMC3\" \n", - " [797] \"GRAMD2B\" \"ITM2A\" \"ALYREF\" \"UQCRC2\" \n", - " [801] \"PNKD\" \"SNRPA\" \"IER5\" \"ESD\" \n", - " [805] \"DDAH2\" \"HNMT\" \"NDUFV1\" \"HMGN1\" \n", - " [809] \"EMC7\" \"VSIR\" \"KLF10\" \"RAB5IF\" \n", - " [813] \"CYBA\" \"DPM1\" \"MRPL27\" \"VPS35\" \n", - " [817] \"ZNF460\" \"RCN2\" \"NDUFA2\" \"MAPK1IP1L\" \n", - " [821] \"BGN\" \"CRTAP\" \"HLA-C\" \"VSNL1\" \n", - " [825] \"HRAS\" \"BLOC1S1\" \"ANKH\" \"TUBA4A\" \n", - " [829] \"KLK11\" \"ARL5B\" \"RSL1D1\" \"PSMA6\" \n", - " [833] \"ATXN10\" \"PGAM1\" \"NFKBIB\" \"ADRM1\" \n", - " [837] \"MIDN\" \"EMC6\" \"CSRNP1\" \"CDH13\" \n", - " [841] \"SOX9\" \"CD151\" \"MZT2A\" \"FLRT3\" \n", - " [845] \"PPARGC1A\" \"SYTL1\" \"TRAPPC1\" \"NAA38\" \n", - " [849] \"PSMD7\" \"CYSTM1\" \"FOSL1\" \"NDUFS3\" \n", - " [853] \"MRPS33\" \"RER1\" \"RPP21\" \"ST13\" \n", - " [857] \"LRRC8A\" \"IFI27L2\" \"SUB1\" \"CCT6A\" \n", - " [861] \"MKNK2\" \"TAF10\" \"PABPC1\" \"RAD23A\" \n", - " [865] \"LAMTOR1\" \"EIF2S2\" \"PQBP1\" \"MRPS12\" \n", - " [869] \"SLC1A2\" \"CHCHD1\" \"KLF11\" \"HACD2\" \n", - " [873] \"GSTM3\" \"PHB\" \"TNFRSF10B\" \"PYURF\" \n", - " [877] \"POLR2G\" \"PPP4C\" \"BRK1\" \"CDC42\" \n", - " [881] \"YWHAE\" \"TP53TG1\" \"SAT2\" \"NME3\" \n", - " [885] \"CKS1B\" \"SLC27A6\" \"WNT10A\" \"MRPS18B\" \n", - " [889] \"RAB11A\" \"NONO\" \"CLNS1A\" \"PFDN2\" \n", - " [893] \"ISCU\" \"AC006115.2\" \"AIMP1\" \"SLC1A4\" \n", - " [897] \"ECI1\" \"SSNA1\" \"SRSF3\" \"MRPS5\" \n", - " [901] \"DPP7\" \"EFNB1\" \"CNIH1\" \"MRPS26\" \n", - " [905] \"PRDX3\" \"CAV1\" \"SCAND1\" \"HNRNPAB\" \n", - " [909] \"RTL8A\" \"FLOT1\" \"TRIM29\" \"EAPP\" \n", - " [913] \"DDIT3\" \"C4orf3\" \"ARF6\" \"CAPG\" \n", - " [917] \"DDOST\" \"CDK4\" \"IL4R\" \"MAGED2\" \n", - " [921] \"PLK3\" \"C1orf43\" \"ARL6IP5\" \"VPS29\" \n", - " [925] \"CHMP5\" \"UBE2B\" \"ILF2\" \"ZDHHC11\" \n", - " [929] \"MRPS34\" \"YIPF3\" \"TRIM47\" \"POLR2E\" \n", - " [933] \"CD164\" \"PKP3\" \"NDUFA7\" \"CLDN7\" \n", - " [937] \"PSMB8\" \"CHPT1\" \"HSP90B1\" \"SNU13\" \n", - " [941] \"FGFR3\" \"SUMO1\" \"HLA-DPA1\" \"DGUOK\" \n", - " [945] \"ITPA\" \"DUSP23\" \"MRPS18C\" \"ARPC1B\" \n", - " [949] \"IGBP1\" \"GPI\" \"CITED4\" \"TMEM50A\" \n", - " [953] \"KRT8\" \"BCAS2\" \"C9orf16\" \"EIF4H\" \n", - " [957] \"TMBIM1\" \"PUF60\" \"DNAJC8\" \"STUB1\" \n", - " [961] \"WNT4\" \"QARS\" \"EIF2S3\" \"FAM171A1\" \n", - " [965] \"MCF2L2\" \"TRMT9B\" \"PSMG2\" \"RASSF5\" \n", - " [969] \"SEMA5A\" \"NTN4\" \"MRPS36\" \"MRPL12\" \n", - " [973] \"ARPC2\" \"REX1BD\" \"PPIC\" \"SKP1\" \n", - " [977] \"METTL26\" \"GJB5\" \"SNHG16\" \"ISOC2\" \n", - " [981] \"FDPS\" \"ID1\" \"PDHA1\" \"EIF2A\" \n", - " [985] \"AP2M1\" \"SORBS2\" \"H2AFY\" \"RAB13\" \n", - " [989] \"MRPL34\" \"TMEM208\" \"LRPAP1\" \"SDHB\" \n", - " [993] \"COA3\" \"M6PR\" \"MRPL54\" \"SNRPB2\" \n", - " [997] \"H2AFV\" \"SDHD\" \"LSM2\" \"EIF1AX\" \n", - "[1001] \"TMEM237\" \"GABARAPL2\" \"KRT10\" \"PDAP1\" \n", - "[1005] \"HSBP1L1\" \"LTBP4\" \"PPP1CC\" \"KDSR\" \n", - "[1009] \"CANX\" \"IL31RA\" \"CHMP1B\" \"FAM174C\" \n", - "[1013] \"NGFR\" \"CTDNEP1\" \"SUCLG1\" \"GSN\" \n", - "[1017] \"THOC7\" \"HAX1\" \"NOTCH1\" \"COPS6\" \n", - "[1021] \"PARP1\" \"MRPL43\" \"BMP7\" \"TMEM109\" \n", - "[1025] \"NRAS\" \"PSMA5\" \"ABO\" \"VAV2\" \n", - "[1029] \"SERINC3\" \"VKORC1\" \"PSTPIP2\" \"VPS4B\" \n", - "[1033] \"EBPL\" \"CLDN4\" \"PRPF8\" \"ASPH\" \n", - "[1037] \"GJB3\" \"KIAA1522\" \"MRPL40\" \"SDF2\" \n", - "[1041] \"EFNA1\" \"GCLM\" \"GEM\" \"STMN1\" \n", - "[1045] \"FBXO33\" \"MSRB2\" \"YIF1A\" \"C17orf49\" \n", - "[1049] \"EIF4B\" \"LARP7\" \"ATP6V1E1\" \"CKMT1A\" \n", - "[1053] \"USP16\" \"CAMLG\" \"PA2G4\" \"TPM3\" \n", - "[1057] \"SLC39A1\" \"CHST9\" \"EI24\" \"DPY30\" \n", - "[1061] \"SF3B2\" \"C15orf61\" \"RASSF9\" \"FKBP3\" \n", - "[1065] \"MIB2\" \"SECISBP2\" \"EIF1B\" \"MIR4435-2HG\" \n", - "[1069] \"RWDD1\" \"TMX1\" \"LAD1\" \"RBMX\" \n", - "[1073] \"USP11\" \"NCOA7\" \"UBE2I\" \"SNTB1\" \n", - "[1077] \"GNAS\" \"COA4\" \"TMEM141\" \"ARF4\" \n", - "[1081] \"UBALD2\" \"AC068724.3\" \"MPC2\" \"METTL5\" \n", - "[1085] \"SYK\" \"TMEM9B\" \"PMVK\" \"SCP2\" \n", - "[1089] \"TNFRSF1A\" \"DAZAP2\" \"PLXNB2\" \"HCFC1R1\" \n", - "[1093] \"MIEN1\" \"CCT5\" \"TUBA1C\" \"ADAMTS14\" \n", - "[1097] \"PABPC4\" \"BEX2\" \"MYNN\" \"RNASET2\" \n", - "[1101] \"PSMA3\" \"IFNGR1\" \"CCT4\" \"DDB2\" \n", - "[1105] \"VDAC1\" \"MRPL21\" \"NANS\" \"NRP1\" \n", - "[1109] \"GTF3A\" \"CCNB1IP1\" \"ELF3\" \"STXBP3\" \n", - "[1113] \"SARAF\" \"MRPS16\" \"PSENEN\" \"UFD1\" \n", - "[1117] \"EBNA1BP2\" \"CHMP4A\" \"MAT2B\" \"TXN2\" \n", - "[1121] \"PTTG1IP\" \"ECI2\" \"TUBB2A\" \"IRF6\" \n", - "[1125] \"HDGF\" \"POLD4\" \"GTF2A2\" \"TARS\" \n", - "[1129] \"MRPL20\" \"BDKRB1\" \"LINC02057\" \"TMEM54\" \n", - "[1133] \"TM9SF1\" \"TMSB10\" \"NDUFA5\" \"ERCC1\" \n", - "[1137] \"DMAC1\" \"HLA-DRA\" \"PSIP1\" \"EIF5\" \n", - "[1141] \"NPNT\" \"CLPP\" \"ZBTB7C\" \"CDC37\" \n", - "[1145] \"BAX\" \"LAMTOR2\" \"ID4\" \"NET1\" \n", - "[1149] \"DDRGK1\" \"HNRNPA3\" \"GOT1\" \"ARF1\" \n", - "[1153] \"ADI1\" \"VAMP5\" \"ZFP36L1\" \"RPS26\" \n", - "[1157] \"TMEM160\" \"SSU72\" \"TP53AIP1\" \"SPAG7\" \n", - "[1161] \"VAV3\" \"HDDC2\" \"C19orf48\" \"CYP2S1\" \n", - "[1165] \"HOOK2\" \"MRPL18\" \"PTGES3\" \"SNF8\" \n", - "[1169] \"NUDC\" \"UBXN8\" \"RGS10\" \"BCL11B\" \n", - "[1173] \"NDUFB1\" \"MANBAL\" \"DTNB\" \"KIAA0040\" \n", - "[1177] \"GREB1L\" \"BCL3\" \"ALS2CL\" \"EPHB6\" \n", - "[1181] \"C11orf1\" \"SLC9A3R1\" \"SPINT1\" \"MAP2K2\" \n", - "[1185] \"MPLKIP\" \"GCH1\" \"CELSR2\" \"MEGF6\" \n", - "[1189] \"LSM4\" \"MFF\" \"PPP1R10\" \"TM4SF1\" \n", - "[1193] \"UNC5B\" \"TP53I13\" \"TMED4\" \"SDF4\" \n", - "[1197] \"NXT1\" \"TIMM8B\" \"EIF4E2\" \"GGCT\" \n", - "[1201] \"MRPL14\" \"PSAT1\" \"HSPB11\" \"EMC3\" \n", - "[1205] \"HAT1\" \"PLOD2\" \"MCM3\" \"VWA8\" \n", - "[1209] \"S100A13\" \"TPD52L1\" \"ZMAT2\" \"MRPL4\" \n", - "[1213] \"GRHPR\" \"FHOD3\" \"ASS1\" \"ZDHHC11B\" \n", - "[1217] \"BLOC1S2\" \"SLC6A4\" \"SEPTIN2\" \"TIMM10\" \n", - "[1221] \"TMEM159\" \"LSM6\" \"HNRNPH2\" \"TRIM28\" \n", - "[1225] \"DDX39B\" \"FJX1\" \"APH1A\" \"NUP50-DT\" \n", - "[1229] \"WBP11\" \"CFAP298\" \"LRRC75A\" \"RRAGC\" \n", - "[1233] \"RPS19BP1\" \"CENPX\" \"ATAD2\" \"TUSC1\" \n", - "[1237] \"AC245041.2\" \"PKD2\" \"AGPAT2\" \"MAGOH\" \n", - "[1241] \"ARHGDIA\" \"SUPT4H1\" \"PDIA4\" \"ETFA\" \n", - "[1245] \"GPAA1\" \"FLNA\" \"MT-ND4\" \"SHISA5\" \n", - "[1249] \"KARS\" \"ZNF395\" \"OXA1L\" \"SRSF1\" \n", - "[1253] \"LY75\" \"SFXN4\" \"F11R\" \"RHOD\" \n", - "[1257] \"TSKU\" \"ST3GAL5\" \"APOBEC3C\" \"RRM1\" \n", - "[1261] \"MRPL37\" \"SF1\" \"ITIH5\" \"PRKDC\" \n", - "[1265] \"KDELR2\" \"RTF2\" \"MRPS7\" \"FSTL4\" \n", - "[1269] \"AC019205.1\" \"HMGA1\" \"CDC26\" \"OS9\" \n", - "[1273] \"GLO1\" \"ARHGEF35\" \"GET3\" \"NDUFS2\" \n", - "[1277] \"DDX24\" \"SCNN1A\" \"LTA4H\" \"NDUFA9\" \n", - "[1281] \"SYNGR1\" \"LRP4\" \"SLC25A29\" \"SYNGR2\" \n", - "[1285] \"PRKCSH\" \"RCC2\" \"AHCY\" \"FUNDC2\" \n", - "[1289] \"EEF1E1\" \"TBRG1\" \"IMP3\" \"AFG3L2\" \n", - "[1293] \"WDR34\" \"TSEN34\" \"MRPL47\" \"POLR2I\" \n", - "[1297] \"EMG1\" \"EGOT\" \"SLCO3A1\" \"RBM23\" \n", - "[1301] \"SMIM19\" \"HS3ST3A1\" \"PAICS\" \"SS18L2\" \n", - "[1305] \"ABCF1\" \"PAIP2\" \"DNAJC19\" \"TFAP2C\" \n", - "[1309] \"UQCC3\" \"ARHGEF28\" \"CRYM\" \"HELLS\" \n", - "[1313] \"PGD\" \"SMIM7\" \"SDHC\" \"EYA2\" \n", - "[1317] \"GAMT\" \"GNG10\" \"COX16\" \"SERBP1\" \n", - "[1321] \"MRPL13\" \"FCGRT\" \"BNIP2\" \"SON\" \n", - "[1325] \"SLC1A3\" \"CHID1\" \"COQ10B\" \"LRP10\" \n", - "[1329] \"TMED9\" \"PLPP2\" \"CREG1\" \"TMEM14A\" \n", - "[1333] \"SLC38A5\" \"EMP3\" \"SRSF2\" \"NIFK\" \n", - "[1337] \"NCS1\" \"COPS5\" \"NRARP\" \"POLR2K\" \n", - "[1341] \"ARPC4\" \"TP53BP2\" \"SMC1A\" \"FAM177A1\" \n", - "[1345] \"MRPL32\" \"TBCB\" \"PSMD4\" \"C1orf122\" \n", - "[1349] \"RAPGEFL1\" \"RELB\" \"ESRRA\" \"PPP1CB\" \n", - "[1353] \"RGCC\" \"SLC6A11\" \"DHCR24\" \"HINT2\" \n", - "[1357] \"TSG101\" \"ACP1\" \"IFI27\" \"MCM4\" \n", - "[1361] \"GPR87\" \"MRPL11\" \"MXRA7\" \"UBE2L3\" \n", - "[1365] \"PTRHD1\" \"PROM2\" \"RPA3\" \"TCEAL9\" \n", - "[1369] \"TMEM134\" \"GTF3C6\" \"CCDC59\" \"MAFF\" \n", - "[1373] \"POLR2F\" \"IL1RN\" \"MPG\" \"TMED7\" \n", - "[1377] \"ANAPC15\" \"WDR91\" \"SCARA3\" \"BST2\" \n", - "[1381] \"NT5E\" \"MRPL3\" \"LAMB1\" \"IK\" \n", - "[1385] \"DCXR\" \"LAMA5\" \"CIR1\" \"DECR1\" \n", - "[1389] \"NOLC1\" \"OSER1\" \"GRB7\" \"PRPF6\" \n", - "[1393] \"ETHE1\" \"RNF207\" \"TRIOBP\" \"PPP2R1A\" \n", - "[1397] \"MTSS2\" \"SSR3\" \"FH\" \"SIGMAR1\" \n", - "[1401] \"CAVIN2\" \"LAMTOR3\" \"PSMC1\" \"MRPL24\" \n", - "[1405] \"MMADHC\" \"MRPL17\" \"PTPN14\" \"MT-CO1\" \n", - "[1409] \"MED30\" \"TGM1\" \"LIMCH1\" \"COX14\" \n", - "[1413] \"SERTAD1\" \"SNX3\" \"SPARC\" \"ARL4D\" \n", - "[1417] \"MRNIP\" \"TMEM18\" \"ECD\" \"MST1R\" \n", - "[1421] \"EDN1\" \"GADD45B\" \"PCF11\" \"AP1S1\" \n", - "[1425] \"IDH3A\" \"LFNG\" \"ADRB2\" \"ARL2\" \n", - "[1429] \"ZCRB1\" \"STARD7\" \"TXNDC12\" \"NUDT14\" \n", - "[1433] \"MMP14\" \"VDAC3\" \"TNS1\" \"CROT\" \n", - "[1437] \"BAG6\" \"POLR2A\" \"CPXM2\" \"OTUB1\" \n", - "[1441] \"ETF1\" \"AL136018.1\" \"B3GNT5\" \"ABRACL\" \n", - "[1445] \"NBDY\" \"DARS\" \"TNFAIP1\" \"ORMDL1\" \n", - "[1449] \"HSD17B8\" \"C18orf25\" \"JAGN1\" \"FAM200B\" \n", - "[1453] \"PMPCB\" \"CKB\" \"TNNI2\" \"NAMPT\" \n", - "[1457] \"NFKBID\" \"SYBU\" \"TPBG\" \"TRAF3IP3\" \n", - "[1461] \"CHCHD5\" \"SSRP1\" \"SRSF5\" \"ARL1\" \n", - "[1465] \"HYAL1\" \"ZBTB7A\" \"C14orf119\" \"PDCD6IP\" \n", - "[1469] \"GLRX5\" \"NMU\" \"CAMSAP2\" \"FAM118A\" \n", - "[1473] \"SUMO3\" \"CBWD1\" \"TFG\" \"SLC26A3\" \n", - "[1477] \"EIF4EBP2\" \"TCEAL8\" \"DCTN2\" \"MTCH2\" \n", - "[1481] \"AC113383.1\" \"SOX2\" \"CKMT1B\" \"C18orf32\" \n", - "[1485] \"METTL7A\" \"PTGR1\" \"VAMP2\" \"CDK11B\" \n", - "[1489] \"H2AFJ\" \"CDKN2B\" \"HR\" \"CAT\" \n", - "[1493] \"SERINC1\" \"ANAPC1\" \"PDZRN4\" \"PCNP\" \n", - "[1497] \"CBWD5\" \"ZNF273\" \"SLU7\" \"NAXE\" \n", - "[1501] \"TFAM\" \"PTAFR\" \"FRY\" \"TSTA3\" \n", - "[1505] \"CDKN2A\" \"THRAP3\" \"SH3TC1\" \"HSPA9\" \n", - "[1509] \"SRI\" \"ZDHHC12\" \"LTBR\" \"KCNMB2-AS1\" \n", - "[1513] \"UMPS\" \"DERL2\" \"PHLDA3\" \"RTL8C\" \n", - "[1517] \"NSMCE1\" \"RBM4\" \"TRAF4\" \"H1F0\" \n", - "[1521] \"COPZ1\" \"UPF3A\" \"TENM4\" \"SCPEP1\" \n", - "[1525] \"DNAJC4\" \"NUCB1\" \"CHAMP1\" \"PLEKHG3\" \n", - "[1529] \"UBAC1\" \"RAD9A\" \"PPP1R16A\" \"SAMM50\" \n", - "[1533] \"HIST1H1C\" \"MED28\" \"PSMG3\" \"MPST\" \n", - "[1537] \"TMEM126A\" \"TXNDC11\" \"TMEM230\" \"EIF4EBP3\" \n", - "[1541] \"ATP2C2\" \"KLF9\" \"DOCK9\" \"POLD2\" \n", - "[1545] \"KRT14\" \"ABI3BP\" \"FAM83F\" \"POP7\" \n", - "[1549] \"CHD9\" \"SMIM30\" \"SCOC\" \"TICAM1\" \n", - "[1553] \"TTC1\" \"IDI1\" \"FBXL5\" \"DNAJB11\" \n", - "[1557] \"PDCD2\" \"NR4A1\" \"TMEM106C\" \"RAB34\" \n", - "[1561] \"CCNI\" \"CRYBG1\" \"PDCL3\" \"SRRM1\" \n", - "[1565] \"MTR\" \"NOP16\" \"EYA1\" \"GBP6\" \n", - "[1569] \"RARG\" \"GLOD4\" \"MED10\" \"SHMT2\" \n", - "[1573] \"NFATC1\" \"AC093535.1\" \"STK38\" \"PSMD2\" \n", - "[1577] \"EPCAM\" \"PHYHD1\" \"ETFDH\" \"RAB11B\" \n", - "[1581] \"HEXB\" \"GLUD1\" \"AP003498.2\" \"YBX3\" \n", - "[1585] \"COMMD3\" \"REEP4\" \"WNT7B\" \"NAA10\" \n", - "[1589] \"TRIM16\" \"BCAM\" \"HPF1\" \"SH2D4A\" \n", - "[1593] \"YME1L1\" \"NAPA\" \"ANXA8\" \"ADM\" \n", - "[1597] \"C1D\" \"AC026333.3\" \"NUDT1\" \"NNT\" \n", - "[1601] \"CD82\" \"RNF44\" \"FZD7\" \"RPP25L\" \n", - "[1605] \"TNFRSF12A\" \"TATDN1\" \"TIMMDC1\" \"CTSB\" \n", - "[1609] \"IDH3B\" \"MRPL33\" \"LPGAT1\" \"ZBTB5\" \n", - "[1613] \"KHSRP\" \"EXOSC7\" \"PABPN1\" \"MTLN\" \n", - "[1617] \"MANF\" \"UBE2S\" \"FPGS\" \"MGAT4B\" \n", - "[1621] \"LGALSL\" \"UNC50\" \"MRPS2\" \"RAB9A\" \n", - "[1625] \"TRAPPC6A\" \"VARS\" \"ADIPOR1\" \"HM13\" \n", - "[1629] \"IDH3G\" \"SMARCD2\" \"PET100\" \"RRAGA\" \n", - "[1633] \"CD40\" \"ANGPTL2\" \"LUC7L2\" \"WASHC3\" \n", - "[1637] \"ANO1\" \"PSMC4\" \"BSCL2\" \"ERBB2\" \n", - "[1641] \"MRPL22\" \"TIMM9\" \"TRAPPC2L\" \"SF3B4\" \n", - "[1645] \"NASP\" \"DLD\" \"ZDHHC7\" \"SNX5\" \n", - "[1649] \"MAOA\" \"ATP6V1D\" \"KLF4\" \"AC079781.5\" \n", - "[1653] \"MRPL48\" \"RBM42\" \"ADNP2\" \"PPT1\" \n", - "[1657] \"TCEA1\" \"PLXNB1\" \"SRPRA\" \"KNOP1\" \n", - "[1661] \"BHLHE41\" \"SNRPA1\" \"TERF1\" \"ELP5\" \n", - "[1665] \"COQ4\" \"NT5DC2\" \"HEBP1\" \"ITGB1BP1\" \n", - "[1669] \"TSPAN1\" \"TMEM256\" \"PLEKHA4\" \"NCALD\" \n", - "[1673] \"MCTS1\" \"KIF22\" \"FAM210B\" \"ABCC10\" \n", - "[1677] \"MFAP1\" \"GMPR2\" \"MCM5\" \"GALNT5\" \n", - "[1681] \"SLC12A8\" \"MRPL23\" \"FDFT1\" \"AC010168.1\" \n", - "[1685] \"DSN1\" \"PTS\" \"MVB12B\" \"SLC66A2\" \n", - "[1689] \"RLIM\" \"ABCA1\" \"PSMC6\" \"C16orf74\" \n", - "[1693] \"GGA2\" \"CPT1A\" \"HSD17B12\" \"ZNF195\" \n", - "[1697] \"TMEM35B\" \"PNRC1\" \"RNF181\" \"F12\" \n", - "[1701] \"STOM\" \"TWISTNB\" \"AC092155.1\" \"MRPS31\" \n", - "[1705] \"PDCD6\" \"SURF2\" \"MVP\" \"RAB1B\" \n", - "[1709] \"LINC02541\" \"DHRS4L2\" \"COA1\" \"ANP32A\" \n", - "[1713] \"LPCAT3\" \"PDLIM2\" \"AC127526.5\" \"H2AFX\" \n", - "[1717] \"SLC48A1\" \"MRPL9\" \"FKBP4\" \"PRPF19\" \n", - "[1721] \"HBEGF\" \"NDUFA3\" \"AJUBA\" \"NAPRT\" \n", - "[1725] \"AVPI1\" \"SERPINB6\" \"PLCH2\" \"POLE4\" \n", - "[1729] \"TLCD3A\" \"NELFE\" \"INPP4B\" \"NGRN\" \n", - "[1733] \"MVB12A\" \"LLPH\" \"ARHGAP23\" \"YJU2\" \n", - "[1737] \"HPRT1\" \"SF3A1\" \"MINDY2\" \"DCTN1\" \n", - "[1741] \"PIN1\" \"BLVRA\" \"MRPS9\" \"SNX17\" \n", - "[1745] \"MRPS23\" \"HAUS4\" \"OTUD1\" \"FBXL12\" \n", - "[1749] \"CCDC14\" \"COPS3\" \"POLR2J\" \"CDK2AP2\" \n", - "[1753] \"DPM3\" \"PSMD3\" \"JOSD1\" \"PITX2\" \n", - "[1757] \"CCNL1\" \"NDUFAF3\" \"TXNL4A\" \"PHF5A\" \n", - "[1761] \"PSMD6\" \"GPN3\" \"SLC9A8\" \"SYAP1\" \n", - "[1765] \"EPS8L2\" \"HNRNPLL\" \"MPHOSPH8\" \"RALGDS\" \n", - "[1769] \"PFDN4\" \"OOEP\" \"LSM1\" \"GIT1\" \n", - "[1773] \"CDIPT\" \"RHOV\" \"RBBP7\" \"SKA2\" \n", - "[1777] \"CHTOP\" \"MAPK13\" \"SDK2\" \"DCTN6\" \n", - "[1781] \"SCMH1\" \"CNST\" \"ATP1A1\" \"ZBTB10\" \n", - "[1785] \"ST6GALNAC1\" \"STXBP6\" \"TMEM30B\" \"IAH1\" \n", - "[1789] \"ACO2\" \"GOLGA8B\" \"AKAP1\" \"VAMP3\" \n", - "[1793] \"CXCL2\" \"FKBP1A\" \"PPP1R7\" \"RIN2\" \n", - "[1797] \"MACROD1\" \"SLC25A39\" \"NUTF2\" \"BCL7C\" \n", - "[1801] \"CMTM6\" \"ACYP1\" \"AHSA1\" \"MCM7\" \n", - "[1805] \"PPP2CA\" \"SHMT1\" \"XPO1\" \"CYB5B\" \n", - "[1809] \"PHGDH\" \"YPEL3\" \"PSMC2\" \"INO80C\" \n", - "[1813] \"CSDE1\" \"RNF167\" \"RPL26L1\" \"TMEM219\" \n", - "[1817] \"SCAMP2\" \"SORL1\" \"P4HB\" \"ZNHIT3\" \n", - "[1821] \"AGL\" \"CCDC12\" \"WDR66\" \"CENPW\" \n", - "[1825] \"AC009271.1\" \"FIBP\" \"FLII\" \"MRPL36\" \n", - "[1829] \"COX17\" \"MRPS30\" \"SFT2D1\" \"RAB4A\" \n", - "[1833] \"ORMDL2\" \"PTOV1\" \"PIGA\" \"MRPS15\" \n", - "[1837] \"BUD23\" \"DCTPP1\" \"ELOF1\" \"MRPS10\" \n", - "[1841] \"UTP3\" \"TPGS2\" \"PTGES2\" \"MTHFD1\" \n", - "[1845] \"AKR1B1\" \"LINC00958\" \"NUCB2\" \"TXLNA\" \n", - "[1849] \"IL10RB\" \"BOLA3\" \"EBAG9\" \"BMP2\" \n", - "[1853] \"ZNF561\" \"SMU1\" \"SENP2\" \"GNAI3\" \n", - "[1857] \"FBXO7\" \"ARHGEF10\" \"ATP6AP1\" \"MRPS18A\" \n", - "[1861] \"SRP19\" \"CCDC25\" \"TCP11L1\" \"GNL1\" \n", - "[1865] \"RHOG\" \"TK1\" \"MICU2\" \"PDE4DIP\" \n", - "[1869] \"PAK1IP1\" \"PDHB\" \"SH3BP1\" \"AASDHPPT\" \n", - "[1873] \"ACKR3\" \"CRLS1\" \"ADGRG1\" \"MIPOL1\" \n", - "[1877] \"ATG13\" \"GNA11\" \"HPGD\" \"CUEDC2\" \n", - "[1881] \"POLE3\" \"ALG5\" \"MORF4L2\" \"CORO1B\" \n", - "[1885] \"CIAO2A\" \"STMP1\" \"RTCB\" \"NIT2\" \n", - "[1889] \"HEBP2\" \"ZMIZ1\" \"CHST15\" \"AC090115.1\" \n", - "[1893] \"SLC25A11\" \"TFB1M\" \"CARD10\" \"SNHG15\" \n", - "[1897] \"DHPS\" \"EVPL\" \"MRPL16\" \"STRBP\" \n", - "[1901] \"HEG1\" \"ZNF331\" \"SDCBP2\" \"ANXA4\" \n", - "[1905] \"ACAT2\" \"KCNS3\" \"LRP5\" \"METTL23\" \n", - "[1909] \"GSTO2\" \"HIGD1A\" \"VPS51\" \"HADHB\" \n", - "[1913] \"HLA-DQB1\" \"ARL3\" \"HPS1\" \"FAM83H\" \n", - "[1917] \"MRPL15\" \"PLEKHH3\" \"MRPS11\" \"CFL2\" \n", - "[1921] \"DNAJC9\" \"PSMD13\" \"AKR7A2\" \"CWC15\" \n", - "[1925] \"ITGB3BP\" \"PATL1\" \"PPIE\" \"TIMM17B\" \n", - "[1929] \"MBOAT1\" \"UPF3B\" \"PNRC2\" \"CHMP2B\" \n", - "[1933] \"MYL6B\" \"KLHL24\" \"MRPS25\" \"DISC1\" \n", - "[1937] \"EXOSC3\" \"COA6\" \"LARGE2\" \"ROMO1\" \n", - "[1941] \"RNF5\" \"ZNF335\" \"UFL1\" \"HMCES\" \n", - "[1945] \"MED31\" \"SYDE2\" \"TLR3\" \"HEXA\" \n", - "[1949] \"PGAP2\" \"DAG1\" \"PXDC1\" \"CDIP1\" \n", - "[1953] \"RBPMS\" \"SREBF1\" \"NGDN\" \"KEAP1\" \n", - "[1957] \"TRIAP1\" \"TMEM242\" \"ZNF622\" \"LIPA\" \n", - "[1961] \"TIPRL\" \"RABGGTB\" \"SLBP\" \"CCBE1\" \n", - "[1965] \"AC008892.1\" \"THYN1\" \"TWF2\" \"TMPRSS4\" \n", - "[1969] \"EMC2\" \"SLC6A8\" \"MCM6\" \"SNHG3\" \n", - "[1973] \"PIH1D1\" \"MED11\" \"CDC42SE1\" \"ASAH1\" \n", - "[1977] \"HSF2\" \"SH2D3A\" \"DEPDC5\" \"ATOX1\" \n", - "[1981] \"HIKESHI\" \"FAIM\" \"TRAF7\" \"SLC25A25\" \n", - "[1985] \"UBXN6\" \"SLC10A3\" \"C5orf66-AS1\" \"STAP2\" \n", - "[1989] \"ABHD11\" \"ZNRD2\" \"ATXN2L\" \"RAI1\" \n", - "[1993] \"AC096564.1\" \"MAST2\" \"CEBPG\" \"CTBP1\" \n", - "[1997] \"OTUD6B-AS1\" \"ARCN1\" \"ALDH1A1\" \"EIF2AK1\" \n", - "[2001] \"HLA-DPB1\" \"TYW3\" \"SRM\" \"SF3A2\" \n", - "[2005] \"DUSP2\" \"DAP\" \"TINCR\" \"PIN4\" \n", - "[2009] \"SLC25A24\" \"HAPLN3\" \"NBR1\" \"MAZ\" \n", - "[2013] \"SLC27A3\" \"TMEM189\" \"BECN1\" \"MPC1\" \n", - "[2017] \"ATG101\" \"SMIM15\" \"FAM114A1\" \"PBDC1\" \n", - "[2021] \"FGF13\" \"COMMD4\" \"MAF1\" \"COPRS\" \n", - "[2025] \"RUVBL2\" \"SLC35F6\" \"TIMM50\" \"UROD\" \n", - "[2029] \"KAT8\" \"URM1\" \"NIPSNAP2\" \"EPHX2\" \n", - "[2033] \"UBA1\" \"FAM207A\" \"CD2BP2\" \"EIF2D\" \n", - "[2037] \"TSR3\" \"RAB17\" \"RUVBL1\" \"TMEM79\" \n", - "[2041] \"VDR\" \"RBCK1\" \"COMMD8\" \"CCDC51\" \n", - "[2045] \"BUB3\" \"MARVELD2\" \"FAR2\" \"CDKN1A\" \n", - "[2049] \"ZC3H12A\" \"CACYBP\" \"C20orf27\" \"INTS11\" \n", - "[2053] \"TRAPPC2B\" \"P4HA2\" \"AP003500.1\" \"GAS2L1\" \n", - "[2057] \"UTP18\" \"CERS6\" \"MINK1\" \"RAB30\" \n", - "[2061] \"PLEKHA7\" \"PAFAH1B3\" \"PLEKHA3\" \"HLA-F\" \n", - "[2065] \"GNPTAB\" \"MRPL28\" \"SMC4\" \"SLC25A4\" \n", - "[2069] \"ECSIT\" \"DGCR6L\" \"PISD\" \"TOX4\" \n", - "[2073] \"MFSD10\" \"SNRNP40\" \"NMT1\" \"MED19\" \n", - "[2077] \"PCLAF\" \"AL606489.1\" \"GUSB\" \"SLC35C2\" \n", - "[2081] \"ODR4\" \"ALG13\" \"ATIC\" \"MCCC1\" \n", - "[2085] \"CRMP1\" \"NUDT22\" \"MT-CO2\" \"RFC2\" \n", - "[2089] \"CDC42EP4\" \"BEX4\" \"ZBTB11\" \"EXOSC5\" \n", - "[2093] \"HLA-DRB5\" \"CPPED1\" \"UBQLN2\" \"PLAT\" \n", - "[2097] \"BCLAF1\" \"TAF9\" \"FAM89B\" \"LAMC2\" \n", - "[2101] \"HERPUD1\" \"LRATD1\" \"RAB32\" \"NUDT8\" \n", - "[2105] \"TMEM60\" \"TYMS\" \"PDGFA\" \"EMD\" \n", - "[2109] \"RFT1\" \"KCNK5\" \"AC091078.1\" \"MATN2\" \n", - "[2113] \"NPM3\" \"ALG3\" \"POLDIP2\" \"HNRNPA1P48\" \n", - "[2117] \"LTBP3\" \"PROSER2\" \"GGH\" \"PEMT\" \n", - "[2121] \"HMGN4\" \"MRPL1\" \"CHRAC1\" \"ADORA2A-AS1\" \n", - "[2125] \"SUSD4\" \"PRR7\" \"GDE1\" \"ZNRD1\" \n", - "[2129] \"CTSA\" \"AC004889.1\" \"KCNN4\" \"H6PD\" \n", - "[2133] \"JUP\" \"ARHGEF26\" \"RNASEH2C\" \"TTF1\" \n", - "[2137] \"ILKAP\" \"BRINP1\" \"C3orf52\" \"DNASE2\" \n", - "[2141] \"RAB5C\" \"ARL2BP\" \"RRAD\" \"PLEKHM1\" \n", - "[2145] \"MRPL2\" \"MAPK14\" \"C11orf49\" \"LRP11\" \n", - "[2149] \"C9orf78\" \"IRF2BPL\" \"NTN1\" \"EXOSC6\" \n", - "[2153] \"EXOSC4\" \"MT1G\" \"NSMCE4A\" \"NR2F6\" \n", - "[2157] \"TRIM26\" \"CRIPT\" \"HNRNPA2B1\" \"ZNF830\" \n", - "[2161] \"CTBS\" \"HYAL2\" \"ZNF524\" \"AK2\" \n", - "[2165] \"AL139383.1\" \"TADA3\" \"ZNF704\" \"RCBTB1\" \n", - "[2169] \"XPC\" \"ERICH1\" \"STX5\" \"SDF2L1\" \n", - "[2173] \"PITHD1\" \"GSS\" \"MKNK1\" \"KDM6B\" \n", - "[2177] \"ETV3\" \"TEF\" \"NPDC1\" \"ZNF83\" \n", - "[2181] \"PLRG1\" \"DHRS1\" \"EXOSC8\" \"MRPL35\" \n", - "[2185] \"RMDN1\" \"PTPMT1\" \"PSMB10\" \"MRPL46\" \n", - "[2189] \"ABHD14A\" \"GNAI2\" \"NQO2\" \"FRRS1\" \n", - "[2193] \"RBM7\" \"MLF1\" \"TJAP1\" \"RBM15B\" \n", - "[2197] \"CYP4X1\" \"NUP37\" \"MKRN1\" \"TP53I11\" \n", - "[2201] \"NUDCD2\" \"NECTIN1\" \"CTDSPL\" \"AIFM2\" \n", - "[2205] \"MTCH1\" \"ZNF511\" \"RNF165\" \"RBM22\" \n", - "[2209] \"CCDC58\" \"RNF39\" \"ACADM\" \"BCL10\" \n", - "[2213] \"KLC3\" \"HSD17B7\" \"LATS2\" \"AAMP\" \n", - "[2217] \"TEN1\" \"AC106799.2\" \"CERS2\" \"FRA10AC1\" \n", - "[2221] \"FKBP8\" \"TSPYL1\" \"KDM5A\" \"AL139807.1\" \n", - "[2225] \"ATP6V0D1\" \"MRPL39\" \"SERTAD3\" \"SNIP1\" \n", - "[2229] \"GPATCH4\" \"STXBP2\" \"CBR3-AS1\" \"PLEKHJ1\" \n", - "[2233] \"ANP32E\" \"GRPEL1\" \"EFNB2\" \"CD14\" \n", - "[2237] \"OSBPL3\" \"RIOK3\" \"CETN2\" \"CLCF1\" \n", - "[2241] \"PFDN6\" \"KAT5\" \"FMR1\" \"LAMB2\" \n", - "[2245] \"PIGT\" \"ATF6B\" \"PRXL2C\" \"SURF1\" \n", - "[2249] \"HIST1H1D\" \"CCZ1\" \"VMA21\" \"BMP4\" \n", - "[2253] \"RAB5A\" \"TIMP3\" \"WASHC5\" \"RAB7A\" \n", - "[2257] \"ILVBL\" \"BABAM1\" \"STK17A\" \"SNHG19\" \n", - "[2261] \"CCM2\" \"YEATS4\" \"ELF4\" \"CISD3\" \n", - "[2265] \"HTATSF1\" \"MALSU1\" \"NUBP2\" \"SDCBP\" \n", - "[2269] \"TUBA1A\" \"CLPTM1L\" \"KIF9\" \"IFI27L1\" \n", - "[2273] \"PRPF31\" \"SPACA6\" \"GCSH\" \"LINC00486\" \n", - "[2277] \"TP53INP2\" \"MARVELD1\" \"MTX1\" \"RYR1\" \n", - "[2281] \"ANXA8L1\" \"FAAP20\" \"HACL1\" \"C1orf74\" \n", - "[2285] \"CDH8\" \"TMEM167A\" \"NUDT5\" \"PRCP\" \n", - "[2289] \"PDCD7\" \"SNRNP27\" \"SMIM12\" \"SAR1B\" \n", - "[2293] \"PRELID3B\" \"PCID2\" \"HORMAD1\" \"DAB2IP\" \n", - "[2297] \"BNIP3L\" \"PAM16\" \"NSFL1C\" \"TMEFF2\" \n", - "[2301] \"SEC11C\" \"AC023590.1\" \"RCC1L\" \"ARL14EP\" \n", - "[2305] \"BCL6\" \"NEDD9\" \"DUSP11\" \"TRAPPC3\" \n", - "[2309] \"ZFYVE27\" \"PLGRKT\" \"SUGT1\" \"SNRK\" \n", - "[2313] \"MRPL38\" \"PEF1\" \"LANCL2\" \"COPZ2\" \n", - "[2317] \"HMGB3\" \"CCDC90B\" \"TRMO\" \"RNF187\" \n", - "[2321] \"ABHD16A\" \"MAP3K11\" \"ZMPSTE24\" \"WARS2\" \n", - "[2325] \"ABT1\" \"NR1H2\" \"SLC9A1\" \"TP53\" \n", - "[2329] \"MTIF3\" \"MRPL45\" \"PPP1R35\" \"HMGN5\" \n", - "[2333] \"FLYWCH2\" \"BLNK\" \"NECAP2\" \"CYB561\" \n", - "[2337] \"MT-ND2\" \"ATG3\" \"AIP\" \"SH3GL3\" \n", - "[2341] \"SELENBP1\" \"UBE2A\" \"EZR\" \"LIME1\" \n", - "[2345] \"PPCS\" \"CALCOCO2\" \"ZFYVE21\" \"PAF1\" \n", - "[2349] \"PLAAT4\" \"PLCD3\" \"RCOR3\" \"ADSL\" \n", - "[2353] \"GTF2H5\" \"SLC35B3\" \"ZFAND5\" \"SPG21\" \n", - "[2357] \"SLC25A36\" \"RBMS3-AS2\" \"PRPF38A\" \"SLC2A4RG\" \n", - "[2361] \"PBK\" \"C1orf35\" \"FMC1\" \"RPS6KA1\" \n", - "[2365] \"IMP4\" \"TBRG4\" \"HK1\" \"RAB8A\" \n", - "[2369] \"SNX7\" \"FRG1\" \"MYO5C\" \"SEC23B\" \n", - "[2373] \"INPP1\" \"ZYX\" \"MT-CYB\" \"ARV1\" \n", - "[2377] \"MACO1\" \"DNPEP\" \"GABARAPL1\" \"NOA1\" \n", - "[2381] \"MLH1\" \"TGIF2\" \"MGME1\" \"MAFG\" \n", - "[2385] \"SRSF8\" \"CCDC174\" \"MMAB\" \"MEA1\" \n", - "[2389] \"CS\" \"DDX59\" \"C1GALT1C1\" \"SCN11A\" \n", - "[2393] \"CLASP1\" \"AC015849.3\" \"HES2\" \"TMEM241\" \n", - "[2397] \"PPIH\" \"DUSP16\" \"SBSPON\" \"DTYMK\" \n", - "[2401] \"OFD1\" \"GID8\" \"SHARPIN\" \"FAM32A\" \n", - "[2405] \"TG\" \"HAUS1\" \"GPS2\" \"TSPAN6\" \n", - "[2409] \"PAGR1\" \"GOLPH3L\" \"TCEAL1\" \"CFAP20\" \n", - "[2413] \"FAM83E\" \"AZI2\" \"ASPSCR1\" \"DUSP5\" \n", - "[2417] \"PTPN4\" \"DBNDD2\" \"BCL9L\" \"ISCA1\" \n", - "[2421] \"GGNBP2\" \"MTIF2\" \"PITPNA-AS1\" \"MRPS17\" \n", - "[2425] \"VBP1\" \"HAS3\" \"BCL7A\" \"LAGE3\" \n", - "[2429] \"SLC22A15\" \"CIART\" \"DBP\" \"IFITM1\" \n", - "[2433] \"DIS3\" \"MRPL10\" \"ALDOA\" \"FAM110A\" \n", - "[2437] \"WDR74\" \"ASCL2\" \"INPP5K\" \"RPA2\" \n", - "[2441] \"CTSL\" \"CTSF\" \"GUCD1\" \"LETMD1\" \n", - "[2445] \"GSTZ1\" \"PC\" \"PKIG\" \"PYCR2\" \n", - "[2449] \"DIS3L\" \"AMOTL2\" \"BFAR\" \"P2RY2\" \n", - "[2453] \"HIVEP3\" \"PVR\" \"TMEM98\" \"AC245297.3\" \n", - "[2457] \"PRKRA\" \"ARHGEF10L\" \"ADAMTSL5\" \"SELENOO\" \n", - "[2461] \"NECTIN2\" \"AKT1\" \"GOLGA5\" \"RPAIN\" \n", - "[2465] \"BAD\" \"SNAPIN\" \"TMEM223\" \"ACY1\" \n", - "[2469] \"XPA\" \"DPM2\" \"DHRS4\" \"RBL1\" \n", - "[2473] \"RIN1\" \"UFSP2\" \"PLSCR1\" \"HDAC1\" \n", - "[2477] \"ASH2L\" \"MRPL50\" \"FARSA\" \"VPS25\" \n", - "[2481] \"TLCD1\" \"UTP14A\" \"HES4\" \"YRDC\" \n", - "[2485] \"AGAP3\" \"C21orf91\" \"CCNK\" \"CCDC82\" \n", - "[2489] \"GPR108\" \"KLHDC3\" \"FBXO2\" \"AC104041.1\" \n", - "[2493] \"APEH\" \"FAM43A\" \"ID2\" \"KHDC1\" \n", - "[2497] \"UQCC2\" \"ZBTB21\" \"ARHGAP1\" \"LNX1\" \n", - "[2501] \"USE1\" \"SPINT1-AS1\" \"C12orf10\" \"TMEM184A\" \n", - "[2505] \"KIAA1143\" \"NR2C2AP\" \"RILPL1\" \"TMEM99\" \n", - "[2509] \"CASP2\" \"ZNF641\" \"VPS26C\" \"PPIL3\" \n", - "[2513] \"NARS2\" \"EBLN3P\" \"TMEM173\" \"MTA3\" \n", - "[2517] \"SCAMP3\" \"CKS2\" \"BOLA2\" \"HTATIP2\" \n", - "[2521] \"CEBPA\" \"ZNF410\" \"AC006206.2\" \"CYTH2\" \n", - "[2525] \"CYB5A\" \"TMCO4\" \"SIPA1L3\" \"SAMHD1\" \n", - "[2529] \"CARD19\" \"NUP62\" \"CITED2\" \"GSTM4\" \n", - "[2533] \"UCKL1\" \"AC010642.2\" \"TRABD\" \"WDR18\" \n", - "[2537] \"CDC23\" \"ZFAND1\" \"MED6\" \"ST14\" \n", - "[2541] \"ITGBL1\" \"PI4KB\" \"ERG28\" \"SNRPN\" \n", - "[2545] \"SUMF1\" \"EIF2B3\" \"ELOVL1\" \"ABHD14B\" \n", - "[2549] \"PSME3\" \"PRC1\" \"CDK5RAP2\" \"NIPAL2\" \n", - "[2553] \"LPCAT2\" \"ZNF805\" \"TLNRD1\" \"SMIM29\" \n", - "[2557] \"MRPS14\" \"BCL2L11\" \"LNPK\" \"HPS5\" \n", - "[2561] \"PIM1\" \"AGA\" \"PART1\" \"PNPLA8\" \n", - "[2565] \"CCDC124\" \"PSMG4\" \"ABHD17A\" \"ZDHHC8\" \n", - "[2569] \"WEE1\" \"SETD7\" \"CCNG1\" \"PDSS2\" \n", - "[2573] \"PPID\" \"KIAA0753\" \"GALK2\" \"DBNL\" \n", - "[2577] \"ZNF503\" \"MMP24OS\" \"NFU1\" \"PDZD11\" \n", - "[2581] \"RAD51C\" \"TSR2\" \"GAA\" \"TFE3\" \n", - "[2585] \"SHANK2\" \"TMEM11\" \"MDFI\" \"RBBP6\" \n", - "[2589] \"BCL7B\" \"MASTL\" \"DDX39A\" \"RBMX2\" \n", - "[2593] \"NT5C3B\" \"MTA1\" \"MAGEF1\" \"DESI1\" \n", - "[2597] \"RABL3\" \"ECE1\" \"ANKRA2\" \"EHD2\" \n", - "[2601] \"BDH2\" \"NRM\" \"KXD1\" \"TINF2\" \n", - "[2605] \"SP100\" \"COQ7\" \"INVS\" \"VIPR1\" \n", - "[2609] \"TMEM128\" \"GMNN\" \"ANKRD9\" \"FXYD5\" \n", - "[2613] \"NLRP1\" \"CACNG4\" \"LYRM4\" \"LAMP3\" \n", - "[2617] \"THG1L\" \"RPP30\" \"TBL2\" \"RETSAT\" \n", - "[2621] \"INKA1\" \"MITD1\" \"SEPHS2\" \"KLF16\" \n", - "[2625] \"ADIRF-AS1\" \"CHPF\" \"CENPK\" \"STARD13\" \n", - "[2629] \"FASTKD1\" \"ERF\" \"HS3ST3B1\" \"TMEM70\" \n", - "[2633] \"ALG14\" \"ZNF428\" \"NCBP2AS2\" \"ATAD5\" \n", - "[2637] \"TPGS1\" \"PITPNM1\" \"SLC52A2\" \"EMC10\" \n", - "[2641] \"SAC3D1\" \"HIST1H2BD\" \"GLT8D1\" \"MCEE\" \n", - "[2645] \"SLC39A3\" \"SLC35B2\" \"TMCO3\" \"ZCCHC17\" \n", - "[2649] \"TMUB1\" \"DUSP7\" \"BMP1\" \"CDCA4\" \n", - "[2653] \"FEN1\" \"CHP1\" \"ITGAE\" \"PAXX\" \n", - "[2657] \"RETREG2\" \"WDHD1\" \"SLC31A2\" \"EVPLL\" \n", - "[2661] \"THOC6\" \"KLHDC2\" \"LRFN4\" \"SLC7A6\" \n", - "[2665] \"FAAH\" \"GTF2B\" \"GM2A\" \"MIS18A\" \n", - "[2669] \"ERVK3-1\" \"SLC41A3\" \"GSDMD\" \"CDKN2B-AS1\" \n", - "[2673] \"LZIC\" \"ZNF600\" \"SERINC2\" \"SRA1\" \n", - "[2677] \"AK6\" \"IFI30\" \"UBE2L6\" \"SDHAF2\" \n", - "[2681] \"RASEF\" \"RIPK1\" \"ZNF219\" \"CTSZ\" \n", - "[2685] \"MRPL55\" \"BAIAP2L1\" \"CCNDBP1\" \"C1orf131\" \n", - "[2689] \"DDX19B\" \"TRADD\" \"PCCB\" \"OVOL2\" \n", - "[2693] \"PEX6\" \"GNPTG\" \"CLTCL1\" \"AC006001.2\" \n", - "[2697] \"AARSD1\" \"PACSIN3\" \"NUDT15\" \"CD83\" \n", - "[2701] \"RFXANK\" \"POLR3GL\" \"MCM2\" \"HCFC1\" \n", - "[2705] \"COA8\" \"IL6ST\" \"PPFIBP2\" \"C22orf39\" \n", - "[2709] \"NDN\" \"PER2\" \"CDC20\" \"GPRC5B\" \n", - "[2713] \"ARL17A\" \"ZCCHC10\" \"IGSF8\" \"ZNF675\" \n", - "[2717] \"BSDC1\" \"CFAP36\" \"BCAR3\" \"CEP57\" \n", - "[2721] \"CPEB4\" \"FKBP11\" \"DELE1\" \"SNAP29\" \n", - "[2725] \"PRRC2A\" \"LXN\" \"LMF2\" \"MTRES1\" \n", - "[2729] \"UNK\" \"NELFCD\" \"ITGA6\" \"C20orf194\" \n", - "[2733] \"CAP2\" \"POP5\" \"NOSIP\" \"SLC39A9\" \n", - "[2737] \"TSFM\" \"PYM1\" \"CCAR2\" \"FANCA\" \n", - "[2741] \"WBP4\" \"FAHD1\" \"NFKB2\" \"ETNK2\" \n", - "[2745] \"SLC35B1\" \"CCDC43\" \"EPN3\" \"IRF4\" \n", - "[2749] \"PRKAG1\" \"SMG9\" \"TMEM69\" \"HSPBP1\" \n", - "[2753] \"TIMM8A\" \"SMIM20\" \"ARHGEF5\" \"PPIP5K1\" \n", - "[2757] \"INF2\" \"SAP30\" \"NKAIN3\" \"CRLF1\" \n", - "[2761] \"AC068282.1\" \"LTB4R2\" \"BRAT1\" \"ARL4A\" \n", - "[2765] \"PIGX\" \"YIF1B\" \"HIST3H2A\" \"JKAMP\" \n", - "[2769] \"ZBTB43\" \"PRSS22\" \"LSM12\" \"SLC39A7\" \n", - "[2773] \"ALDH4A1\" \"SLC25A43\" \"PLBD1\" \"TMEM161A\" \n", - "[2777] \"PES1\" \"ZFPM1\" \"LMCD1-AS1\" \"STX10\" \n", - "[2781] \"CCDC115\" \"ENTPD5\" \"STK19\" \"UBE2Z\" \n", - "[2785] \"TFPI\" \"SEC22C\" \"PRR13\" \"PNP\" \n", - "[2789] \"SORBS3\" \"SIN3A\" \"MTA2\" \"ZNF519\" \n", - "[2793] \"COA5\" \"DUSP10\" \"ESYT1\" \"TRIP10\" \n", - "[2797] \"CHAF1A\" \"OVOL1\" \"ESPL1\" \"LINC01572\" \n", - "[2801] \"TRIM7\" \"MCRIP2\" \"C8orf82\" \"UBE2C\" \n", - "[2805] \"CSTF1\" \"IRF1\" \"MTG1\" \"PLEKHB2\" \n", - "[2809] \"SNAPC2\" \"ODF3B\" \"NME4\" \"CKAP2\" \n", - "[2813] \"TAF12\" \"CAVIN3\" \"CLN5\" \"EXOSC1\" \n", - "[2817] \"DYRK2\" \"CBWD3\" \"C3orf14\" \"TRIM8\" \n", - "[2821] \"NECTIN4\" \"NFYB\" \"PIGP\" \"CAST\" \n", - "[2825] \"ARRDC1\" \"PNPLA4\" \"SWAP70\" \"F2RL1\" \n", - "[2829] \"POLR2H\" \"CD320\" \"COQ9\" \"TRABD2B\" \n", - "[2833] \"OARD1\" \"PPP2R3C\" \"NRXN3\" \"TMEM115\" \n", - "[2837] \"CREBRF\" \"NPPC\" \"UBE2T\" \"LIG1\" \n", - "[2841] \"SAYSD1\" \"RPP38\" \"AL355612.1\" \"AEN\" \n", - "[2845] \"LENG8\" \"AL031058.1\" \"SIRT2\" \"SPRED2\" \n", - "[2849] \"DNAJC27\" \"LINC00640\" \"GTF2IRD2B\" \"CLCN6\" \n", - "[2853] \"CNTRL\" \"DMKN\" \"OAZ2\" \"FAM120AOS\" \n", - "[2857] \"COPS7A\" \"ARL16\" \"C9orf72\" \"SNRNP35\" \n", - "[2861] \"CHEK1\" \"MBOAT2\" \"ITPRIP\" \"TM2D2\" \n", - "[2865] \"SAMD12-AS1\" \"TSPAN4\" \"GGT6\" \"WNT5B\" \n", - "[2869] \"HSD17B11\" \"SSBP4\" \"HYI\" \"TFIP11\" \n", - "[2873] \"AC243964.3\" \"FILIP1\" \"DHX57\" \"BOD1\" \n", - "[2877] \"DRAM2\" \"UBE4B\" \"NKAP\" \"COMMD7\" \n", - "[2881] \"NPIPA1\" \"TRUB2\" \"IFT22\" \"DUS3L\" \n", - "[2885] \"CZIB\" \"SHROOM2\" \"PCMTD2\" \"B3GAT3\" \n", - "[2889] \"RMND5B\" \"BPGM\" \"ANTKMT\" \"NIPSNAP3A\" \n", - "[2893] \"SMPDL3A\" \"PPP1R2\" \"ALKBH2\" \"POLB\" \n", - "[2897] \"TNKS1BP1\" \"ATP6V1C1\" \"NIPAL3\" \"NAGLU\" \n", - "[2901] \"TRMT5\" \"NCAPG2\" \"C3orf38\" \"BCL2L1\" \n", - "[2905] \"CTR9\" \"IFITM10\" \"MRFAP1L1\" \"MAPKAPK5-AS1\"\n", - "[2909] \"RNASE4\" \"SGMS2\" \"WDR13\" \"ZBED2\" \n", - "[2913] \"THBS2\" \"TMEM101\" \"YDJC\" \"MPP5\" \n", - "[2917] \"EXOSC9\" \"AC015802.6\" \"MECR\" \"SP4\" \n", - "[2921] \"SEC16A\" \"HINT3\" \"CTU1\" \"FBXO8\" \n", - "[2925] \"MPV17\" \"TMEM132A\" \"RNF227\" \"VANGL2\" \n", - "[2929] \"OXLD1\" \"AL132857.1\" \"NMNAT3\" \"BCKDHA\" \n", - "[2933] \"TMED5\" \"DNAJB9\" \"SNAI2\" \"TIFA\" \n", - "[2937] \"ARFIP2\" \"VPS72\" \"MYO3A\" \"SSH3\" \n", - "[2941] \"QDPR\" \"SPRYD7\" \"SRGAP3\" \"DISP1\" \n", - "[2945] \"GLRX2\" \"CNPY3\" \"PIGS\" \"LOXL1\" \n", - "[2949] \"FAM111A\" \"WDR48\" \"RRNAD1\" \"HIRIP3\" \n", - "[2953] \"DDIT4\" \"CCZ1B\" \"ZCCHC9\" \"XRCC1\" \n", - "[2957] \"CMC1\" \"ZCCHC4\" \"UBE2J2\" \"NDUFAF4\" \n", - "[2961] \"CC2D2A\" \"TOP1MT\" \"JPH1\" \"SCNM1\" \n", - "[2965] \"NSMCE3\" \"TMEM185B\" \"PIGF\" \"COMMD9\" \n", - "[2969] \"WWC1\" \"RTKN\" \"MPPE1\" \"TRIM37\" \n", - "[2973] \"FAM76B\" \"LONRF3\" \"POLG2\" \"APMAP\" \n", - "[2977] \"MRPL58\" \"UTP15\" \"UPK3BL1\" \"C12orf45\" \n", - "[2981] \"WDR45\" \"CADPS2\" \"HDHD5\" \"REEP1\" \n", - "[2985] \"ASF1A\" \"NMRAL1\" \"FUNDC1\" \"LRRC42\" \n", - "[2989] \"RNF113A\" \"SLC44A2\" \"ARHGAP27\" \"CYP4V2\" \n", - "[2993] \"RGS12\" \"CORO2A\" \"PAOX\" \"NCEH1\" \n", - "[2997] \"DHX16\" \"NSUN6\" \"RIPK4\" \"TMEM167B\" \n", - "[3001] \"PLPP5\" \"SNHG18\" \"ECT2\" \"SYS1\" \n", - "[3005] \"CIZ1\" \"AKIRIN1\" \"C16orf91\" \"BRMS1\" \n", - "[3009] \"PXMP2\" \"LENG1\" \"PBXIP1\" \"CENPU\" \n", - "[3013] \"C16orf87\" \"CLN3\" \"RMND1\" \"SOX13\" \n", - "[3017] \"EIF2B2\" \"TRIQK\" \"ODC1\" \"KHDC4\" \n", - "[3021] \"SETD4\" \"SWI5\" \"BORCS7\" \"CAD\" \n", - "[3025] \"TCEA3\" \"POLD1\" \"ID3\" \"NOCT\" \n", - "[3029] \"ZFPL1\" \"COX19\" \"ZNF32\" \"PDPK1\" \n", - "[3033] \"SAP30BP\" \"DPCD\" \"ITGA9-AS1\" \"CINP\" \n", - "[3037] \"UHRF1\" \"STK35\" \"MFSD5\" \"ZNF639\" \n", - "[3041] \"AC005920.2\" \"DPH5\" \"CKLF\" \"CNN3\" \n", - "[3045] \"TVP23B\" \"HIST1H4H\" \"THAP11\" \"CYHR1\" \n", - "[3049] \"ZDHHC4\" \"TULP2\" \"PHF19\" \"DCK\" \n", - "[3053] \"MCRS1\" \"RHEB\" \"LSM10\" \"WASHC2C\" \n", - "[3057] \"NMI\" \"EBF4\" \"ARAP1\" \"VEGFB\" \n", - "[3061] \"TYSND1\" \"RNF11\" \"B4GALT4\" \"OTUD5\" \n", - "[3065] \"NUSAP1\" \"RELT\" \"AL138689.2\" \"ARHGEF11\" \n", - "[3069] \"TUBG1\" \"NFKBIL1\" \"CD3EAP\" \"AP1G1\" \n", - "[3073] \"ZNF385A\" \"LRRC28\" \"PIGC\" \"TRPV4\" \n", - "[3077] \"DMAC2\" \"ALG2\" \"RRAS\" \"MR1\" \n", - "[3081] \"LDLRAP1\" \"OBSL1\" \"MAD2L1\" \"MIS12\" \n", - "[3085] \"PER1\" \"CDK2\" \"LY6K\" \"LINC01133\" \n", - "[3089] \"TMX4\" \"FAM111B\" \"ATP6V0A1\" \"PLEKHG2\" \n", - "[3093] \"SLC38A1\" \"SMIM4\" \"HIST2H2BE\" \"SLC25A23\" \n", - "[3097] \"PTPN6\" \"AC092567.1\" \"NAGK\" \"GUCY2C\" \n", - "[3101] \"CGRRF1\" \"ELMO3\" \"BOLA1\" \"AC063960.1\" \n", - "[3105] \"AMIGO2\" \"RAP2C\" \"GCA\" \"EMB\" \n", - "[3109] \"FAM104B\" \"LIPI\" \"QRSL1\" \"VPS26B\" \n", - "[3113] \"HPS4\" \"CXCL16\" \"HDAC3\" \"SCEL\" \n", - "[3117] \"ADCK2\" \"SKIL\" \"SLC22A18\" \"VWA2\" \n", - "[3121] \"CETN3\" \"DCAKD\" \"HBP1\" \"ZBTB2\" \n", - "[3125] \"JMJD8\" \"GATAD1\" \"DLEU1\" \"GEMIN2\" \n", - "[3129] \"GAL3ST4\" \"MPZL3\" \"CSTF2T\" \"CASP1\" \n", - "[3133] \"DONSON\" \"COX7A1\" \"AC020916.1\" \"PRPF4\" \n", - "[3137] \"STARD10\" \"TRIM39\" \"THSD7B\" \"TSTD2\" \n", - "[3141] \"TMED1\" \"TSSC4\" \"ZNF544\" \"SPSB3\" \n", - "[3145] \"AK1\" \"CYSLTR1\" \"EIF4EBP1\" \"CMTM7\" \n", - "[3149] \"IQANK1\" \"LYPD3\" \"FN3KRP\" \"ALKBH5\" \n", - "[3153] \"RAVER1\" \"B3GLCT\" \"TRIM2\" \"CYP24A1\" \n", - "[3157] \"LCMT1\" \"TPMT\" \"PLCD1\" \"PHF1\" \n", - "[3161] \"HACD4\" \"RRM2\" \"KLHL20\" \"BRCA2\" \n", - "[3165] \"NEK1\" \"SGCB\" \"KBTBD2\" \"SULT1A1\" \n", - "[3169] \"NIF3L1\" \"ZNF846\" \"TSEN54\" \"YIPF2\" \n", - "[3173] \"GEN1\" \"CASP4\" \"MAN2B1\" \"TIMM10B\" \n", - "[3177] \"NT5DC3\" \"AKT1S1\" \"FAM76A\" \"TMEM203\" \n", - "[3181] \"MZT1\" \"MAD2L2\" \"BTBD6\" \"GPC4\" \n", - "[3185] \"MAGOHB\" \"TLE2\" \"ACOT13\" \"ILF3-DT\" \n", - "[3189] \"GLA\" \"FASTK\" \"IFIT1\" \"DTWD1\" \n", - "[3193] \"KLHL2\" \"MYCBP\" \"SPRTN\" \"CENPA\" \n", - "[3197] \"GTPBP3\" \"RNF26\" \"RAB3D\" \"GPRC5C\" \n", - "[3201] \"ROGDI\" \"CGAS\" \"FANCD2\" \"LTO1\" \n", - "[3205] \"METTL3\" \"NDRG2\" \"COMMD5\" \"LTBP2\" \n", - "[3209] \"NOL12\" \"NUF2\" \"STOX2\" \"TMEM40\" \n", - "[3213] \"SREK1IP1\" \"PLAU\" \"AC068587.4\" \"LINC01001\" \n", - "[3217] \"RFC5\" \"AC011379.1\" \"GPANK1\" \"PRMT5\" \n", - "[3221] \"CPEB3\" \"MARVELD3\" \"NR4A2\" \"INO80E\" \n", - "[3225] \"TMEM129\" \"EMC8\" \"SCRIB\" \"UNG\" \n", - "[3229] \"SVBP\" \"ZNF480\" \"PLEKHG6\" \"MED24\" \n", - "[3233] \"CLEC2D\" \"FZD10\" \"MOCOS\" \"HACD1\" \n", - "[3237] \"AIFM1\" \"SPNS1\" \"LRATD2\" \"ALDH16A1\" \n", - "[3241] \"ECHDC3\" \"AP1M2\" \"RDH14\" \"ZNF581\" \n", - "[3245] \"AKAP6\" \"ZNF266\" \"SLC31A1\" \"TSPAN12\" \n", - "[3249] \"AF233439.1\" \"IER5L\" \"LZTS1\" \"HTRA2\" \n", - "[3253] \"H2AFY2\" \"IMPDH1\" \"FAM3A\" \"PPP2R3B\" \n", - "[3257] \"CENPH\" \"AC007384.1\" \"ZBTB4\" \"RHCG\" \n", - "[3261] \"LZTS2\" \"TUSC2\" \"NEK8\" \"CDKN2AIPNL\" \n", - "[3265] \"SNAPC5\" \"DEPDC7\" \"CBWD6\" \"BIRC5\" \n", - "[3269] \"SPSB1\" \"ISG20\" \"NEURL1\" \"FRAT2\" \n", - "[3273] \"FDXR\" \"GTF2IRD2\" \"PLS1\" \"TRNP1\" \n", - "[3277] \"ING3\" \"DTL\" \"POLR2C\" \"ZNF720\" \n", - "[3281] \"SEMA3F\" \"AP5Z1\" \"TRIM62\" \"NCR3LG1\" \n", - "[3285] \"MTERF4\" \"NLRX1\" \"COASY\" \"AC105916.1\" \n", - "[3289] \"FABP5\" \"SLC16A2\" \"WDR76\" \"TXNIP\" \n", - "[3293] \"HAGH\" \"SELENON\" \"ARHGAP8\" \"FBXL15\" \n", - "[3297] \"SETMAR\" \"PLLP\" \"IFT81\" \"NDRG3\" \n", - "[3301] \"AP002495.1\" \"LINC00623\" \"TBK1\" \"UBE3D\" \n", - "[3305] \"DPP3\" \"AC092329.4\" \"STEAP3\" \"ORAI3\" \n", - "[3309] \"ZNF28\" \"PPIL1\" \"KIAA2013\" \"BLOC1S4\" \n", - "[3313] \"SLC4A2\" \"MLX\" \"OLFML2A\" \"SP2\" \n", - "[3317] \"AP3M1\" \"FLOT2\" \"ZNF765\" \"SIK1B\" \n", - "[3321] \"DLG3\" \"AGTRAP\" \"HOMER2\" \"RFC4\" \n", - "[3325] \"POLR3D\" \"ENPP2\" \"AC112220.2\" \"TMEM246\" \n", - "[3329] \"DCTD\" \"RNPEPL1\" \"TMEM265\" \"ADAM23\" \n", - "[3333] \"NOP14-AS1\" \"POT1\" \"ANKRD13D\" \"NTPCR\" \n", - "[3337] \"AQP4-AS1\" \"RELA\" \"TAF9B\" \"FHL1\" \n", - "[3341] \"TST\" \"PIGH\" \"SORD\" \"CNOT3\" \n", - "[3345] \"NCAPH2\" \"CDK16\" \"THSD4\" \"AL354740.1\" \n", - "[3349] \"PFN2\" \"MAU2\" \"THOP1\" \"EIF2AK2\" \n", - "[3353] \"LYSMD3\" \"CEP95\" \"GSK3A\" \"Z98884.1\" \n", - "[3357] \"LYPLA2\" \"SLC25A1\" \"TPRG1L\" \"ARHGEF16\" \n", - "[3361] \"SDE2\" \"GYPC\" \"NAB2\" \"CCDC120\" \n", - "[3365] \"GINS2\" \"STX4\" \"XAB2\" \"IFT20\" \n", - "[3369] \"NCAPG\" \"MAPKAPK3\" \"BNIP3\" \"AIMP2\" \n", - "[3373] \"ELP6\" \"ZNF680\" \"REPIN1\" \"NCKAP5L\" \n", - "[3377] \"KATNA1\" \"SPICE1\" \"TSEN15\" \"PGF\" \n", - "[3381] \"MTMR4\" \"MZF1\" \"AC100810.1\" \"ISG15\" \n", - "[3385] \"PPP1R11\" \"ACP5\" \"SERPINE1\" \"CEP55\" \n", - "[3389] \"THAP9-AS1\" \"IRF9\" \"NTHL1\" \"SH3GLB2\" \n", - "[3393] \"CEP120\" \"ALOX12-AS1\" \"NDUFAF1\" \"SPDL1\" \n", - "[3397] \"TOR3A\" \"ICA1L\" \"DHX35\" \"CPT2\" \n", - "[3401] \"ANKRD22\" \"CRKL\" \"MELTF\" \"AC011476.3\" \n", - "[3405] \"JOSD2\" \"N4BP1\" \"MID1IP1\" \"ZNF318\" \n", - "[3409] \"SLC23A2\" \"CYB561A3\" \"TMEM42\" \"GIGYF1\" \n", - "[3413] \"CACNA1D\" \"WDR54\" \"UBL7\" \"TMEM94\" \n", - "[3417] \"CCDC32\" \"KIZ-AS1\" \"P4HTM\" \"RASSF6\" \n", - "[3421] \"NSUN3\" \"AC008982.2\" \"RNF114\" \"UNC93B1\" \n", - "[3425] \"TNFAIP3\" \"TSBP1-AS1\" \"PRKCD\" \"AAAS\" \n", - "[3429] \"DNAH11\" \"FAM136A\" \"GNB5\" \"SLC39A4\" \n", - "[3433] \"KPNA2\" \"DDA1\" \"ZNF862\" \"GRTP1\" \n", - "[3437] \"CSMD1\" \"TBP\" \"RGS14\" \"CRY2\" \n", - "[3441] \"HIST1H2BC\" \"PFKM\" \"NUDT16L1\" \"PTPRN2\" \n", - "[3445] \"CDC34\" \"MYCL\" \"TP53RK\" \"MX1\" \n", - "[3449] \"PPARG\" \"ZMYM5\" \"ABAT\" \"RAB2B\" \n", - "[3453] \"LINC00963\" \"YBEY\" \"MELK\" \"TMEM209\" \n", - "[3457] \"ETV7\" \"KDM7A-DT\" \"PTCH2\" \"TET1\" \n", - "[3461] \"MDC1\" \"THAP7\" \"ZFAND2B\" \"PPP4R3A\" \n", - "[3465] \"SPRY1\" \"CDK9\" \"PRKD2\" \"AMZ2\" \n", - "[3469] \"C14orf132\" \"LINC01138\" \"AC058791.1\" \"PIR\" \n", - "[3473] \"SLC16A5\" \"FAF1\" \"ERAL1\" \"ARAF\" \n", - "[3477] \"WDR55\" \"ATAT1\" \"EID2\" \"TMEM161B-AS1\"\n", - "[3481] \"EMP1\" \"ZNF787\" \"PIK3R4\" \"TMEM9\" \n", - "[3485] \"ITGA9\" \"NYNRIN\" \"STIL\" \"AADACL2-AS1\" \n", - "[3489] \"TEX261\" \"AKTIP\" \"CASP9\" \"LHFPL2\" \n", - "[3493] \"SRGAP2\" \"MARCH1\" \"TBCC\" \"NOTCH4\" \n", - "[3497] \"TIMM21\" \"PUS3\" \"PAK6\" \"UGT8\" \n", - "[3501] \"SLC25A38\" \"IQCB1\" \"EXOG\" \"AC091563.1\" \n", - "[3505] \"NABP2\" \"IVL\" \"ARHGEF19\" \"C5orf51\" \n", - "[3509] \"ALKBH3\" \"GATD3B\" \"CDKN2C\" \"ARPIN\" \n", - "[3513] \"TTC32\" \"SIRT7\" \"AP000873.2\" \"PPP1R18\" \n", - "[3517] \"ATP10A\" \"FBXO27\" \"TMEM97\" \"RNF103\" \n", - "[3521] \"OSTM1\" \"CHKA\" \"FAM83C\" \"NSUN5\" \n", - "[3525] \"XG\" \"SGO2\" \"PRR14\" \"TPX2\" \n", - "[3529] \"ZNF133\" \"SOCS1\" \"TMUB2\" \"PLB1\" \n", - "[3533] \"CKAP2L\" \"DLGAP5\" \"GALNT12\" \"CEP152\" \n", - "[3537] \"AC079921.1\" \"LPCAT4\" \"HCCS\" \"COQ5\" \n", - "[3541] \"INAVA\" \"MRM3\" \"TMEM192\" \"MIR924HG\" \n", - "[3545] \"FAM122B\" \"GGT7\" \"CCNB2\" \"WDTC1\" \n", - "[3549] \"WBP2\" \"GSDME\" \"AL161430.1\" \"PARVB\" \n", - "[3553] \"ZNF473\" \"RHBDD2\" \"TRIM16L\" \"SBF2-AS1\" \n", - "[3557] \"RPUSD3\" \"ZNF34\" \"AC092287.1\" \"BRCC3\" \n", - "[3561] \"PROSER3\" \"BCKDK\" \"AASDH\" \"NADSYN1\" \n", - "[3565] \"KIFC1\" \"ASB1\" \"GTF3C5\" \"MCRIP1\" \n", - "[3569] \"RRS1\" \"CALM3\" \"TACC3\" \"ZNF224\" \n", - "[3573] \"RP9\" \"AL590006.1\" \"FOXRED1\" \"C1orf56\" \n", - "[3577] \"LYSMD4\" \"MFSD3\" \"C6orf226\" \"RABGGTA\" \n", - "[3581] \"EAF1\" \"ZDHHC24\" \"PJA1\" \"QTRT1\" \n", - "[3585] \"LACTB2\" \"METAP1D\" \"PRKCQ\" \"ITSN2\" \n", - "[3589] \"DCPS\" \"MOCS2\" \"ABCF3\" \"GEMIN8\" \n", - "[3593] \"FAM98C\" \"ZNF580\" \"DEAF1\" \"ATG4D\" \n", - "[3597] \"STK11\" \"MTMR8\" \"TCEAL3\" \"FZD5\" \n", - "[3601] \"TSC22D4\" \"DNAJC24\" \"IRAK3\" \"SLC35D1\" \n", - "[3605] \"TRAPPC4\" \"SUGP1\" \"ING4\" \"RAC3\" \n", - "[3609] \"SLC35A2\" \"DPH7\" \"ZNF440\" \"PARP2\" \n", - "[3613] \"CUL9\" \"USP19\" \"TMEM39B\" \"SLC19A2\" \n", - "[3617] \"C18orf21\" \"ARMC5\" \"GATB\" \"JAZF1\" \n", - "[3621] \"ATF5\" \"GNPDA1\" \"ORC6\" \"CHCHD7\" \n", - "[3625] \"PEX16\" \"PDE1C\" \"SIPA1\" \"DDX41\" \n", - "[3629] \"NEU1\" \"EDEM2\" \"RNFT1\" \"ZMYND19\" \n", - "[3633] \"ENDOG\" \"RPAP1\" \"FBRS\" \"TICRR\" \n", - "[3637] \"POC5\" \"YAE1\" \"AP000763.3\" \"SEPSECS\" \n", - "[3641] \"TEFM\" \"DRG2\" \"FAM50A\" \"TSPAN31\" \n", - "[3645] \"ZNF768\" \"SIGIRR\" \"HUS1\" \"EFCAB7\" \n", - "[3649] \"PTPA\" \"ZNF44\" \"PKIA\" \"LSM14B\" \n", - "[3653] \"GTPBP8\" \"PROCR\" \"TRPM4\" \"CYSRT1\" \n", - "[3657] \"BUD13\" \"IFT27\" \"VPS11\" \"XRCC3\" \n", - "[3661] \"DEDD\" \"MKI67\" \"ZFYVE26\" \"LYPD5\" \n", - "[3665] \"PRICKLE3\" \"MT-ND5\" \"PCNX3\" \"CHST12\" \n", - "[3669] \"UBE2M\" \"ZNF367\" \"CDH3\" \"BOP1\" \n", - "[3673] \"HAUS3\" \"ILK\" \"SLC35A4\" \"TOLLIP\" \n", - "[3677] \"RNF146\" \"POLQ\" \"LMTK3\" \"WRAP73\" \n", - "[3681] \"FAM92A\" \"SNX16\" \"DYRK4\" \"CTTNBP2\" \n", - "[3685] \"DUSP12\" \"TRPT1\" \"KCTD5\" \"ASB8\" \n", - "[3689] \"MAD2L1BP\" \"AP001816.1\" \"LGALS1\" \"CASKIN2\" \n", - "[3693] \"CAMTA1-DT\" \"MLYCD\" \"RRP9\" \"BUB1\" \n", - "[3697] \"SLC50A1\" \"ACD\" \"ECM1\" \"AGPAT1\" \n", - "[3701] \"CDT1\" \"JMJD6\" \"DAXX\" \"RWDD3\" \n", - "[3705] \"TBXAS1\" \"MON1B\" \"BBS7\" \"SCYL2\" \n", - "[3709] \"C11orf68\" \"SMUG1\" \"GMEB2\" \"AMACR\" \n", - "[3713] \"KIF15\" \"BBC3\" \"YIPF1\" \"G6PD\" \n", - "[3717] \"POMGNT1\" \"ETV5\" \"CDK1\" \"CMYA5\" \n", - "[3721] \"PDK2\" \"APTR\" \"AP001442.1\" \"SYNJ2BP\" \n", - "[3725] \"PRDM11\" \"OMG\" \"IL1A\" \"LPIN3\" \n", - "[3729] \"PRSS8\" \"FAM149B1\" \"ARFRP1\" \"ZNF263\" \n", - "[3733] \"FAHD2A\" \"ABHD3\" \"MTFMT\" \"ZWINT\" \n", - "[3737] \"CLPB\" \"ADNP-AS1\" \"STAMBPL1\" \"POLR2M\" \n", - "[3741] \"MTRF1\" \"AC025263.1\" \"C12orf73\" \"PCGF2\" \n", - "[3745] \"DRAM1\" \"METTL17\" \"MDK\" \"RIPK2\" \n", - "[3749] \"ALG12\" \"CENPN\" \"ACTR1B\" \"NUDT2\" \n", - "[3753] \"WDR62\" \"AC092821.3\" \"BYSL\" \"MIR4713HG\" \n", - "[3757] \"CCNB1\" \"HIST1H2AC\" \"R3HCC1\" \"BCAT2\" \n", - "[3761] \"MANEA\" \"AMN\" \"NDC80\" \"C15orf40\" \n", - "[3765] \"LINC01315\" \"RAB33B\" \"IFT88\" \"PRMT7\" \n", - "[3769] \"ZNF664\" \"GPX8\" \"SMARCAL1\" \"CENPQ\" \n", - "[3773] \"DALRD3\" \"TMEM250\" \"NELL2\" \"CIT\" \n", - "[3777] \"SYVN1\" \"PARP9\" \"MRPL49\" \"ISCA2\" \n", - "[3781] \"TMEM126B\" \"C6orf136\" \"GCAT\" \"ARSA\" \n", - "[3785] \"RCCD1\" \"TBC1D17\" \"FA2H\" \"NRG2\" \n", - "[3789] \"FAM221A\" \"NOL3\" \"ARHGAP6\" \"DPF2\" \n", - "[3793] \"PPP1R9B\" \"SLC27A5\" \"POLH\" \"POP4\" \n", - "[3797] \"PTK6\" \"RASSF10\" \"ARHGAP30\" \"HDHD3\" \n", - "[3801] \"ATPAF1\" \"FZD1\" \"SDR42E1\" \"LINC01578\" \n", - "[3805] \"RGS3\" \"B4GALT3\" \"ZNF611\" \"ZNF845\" \n", - "[3809] \"BTBD2\" \"AC087286.2\" \"LPXN\" \"MICA\" \n", - "[3813] \"CEACAM19\" \"PTRH1\" \"DUSP3\" \"TPM1\" \n", - "[3817] \"EEF1AKMT4\" \"VRK3\" \"SMO\" \"HNRNPU\" \n", - "[3821] \"POFUT1\" \"LINC02345\" \"CEP162\" \"ZNF433\" \n", - "[3825] \"TCTN1\" \"MEF2D\" \"CLSPN\" \"FAM53C\" \n", - "[3829] \"UBL7-AS1\" \"SCLY\" \"AC005523.2\" \"CYLD\" \n", - "[3833] \"SEPTIN1\" \"L3HYPDH\" \"SESN2\" \"SASS6\" \n", - "[3837] \"MRS2\" \"POLA2\" \"CNPPD1\" \"SEPTIN8\" \n", - "[3841] \"MRM2\" \"PTDSS2\" \"MTFP1\" \"LTC4S\" \n", - "[3845] \"MDP1\" \"SNUPN\" \"BBIP1\" \"CXCL8\" \n", - "[3849] \"LINC01128\" \"AL450992.1\" \"STK16\" \"BNIP1\" \n", - "[3853] \"IRGQ\" \"ZNF414\" \"FAM81A\" \"DPH3\" \n", - "[3857] \"GPR157\" \"NIPSNAP1\" \"COQ8A\" \"PICK1\" \n", - "[3861] \"NBR2\" \"GTF2H4\" \"ZSCAN31\" \"HILPDA\" \n", - "[3865] \"DENND2D\" \"CPNE2\" \"LINC02605\" \"KIF23\" \n", - "[3869] \"OPLAH\" \"PABPC1L\" \"HLA-F-AS1\" \"ACOT8\" \n", - "[3873] \"MTUS2\" \"THAP5\" \"RBM39\" \"GPD1L\" \n", - "[3877] \"AC008957.2\" \"AC022137.4\" \"GEMIN4\" \"SCRN2\" \n", - "[3881] \"TRAFD1\" \"TMC4\" \"PIP4P1\" \"KNL1\" \n", - "[3885] \"SLC25A20\" \"INSIG2\" \"COPG2\" \"HIC2\" \n", - "[3889] \"MRI1\" \"TMEM38B\" \"CHEK2\" \"ALG6\" \n", - "[3893] \"LRRC57\" \"ZC3HC1\" \"TMEM199\" \"TBC1D8B\" \n", - "[3897] \"RIC8A\" \"PAQR7\" \"RASSF7\" \"C1orf174\" \n", - "[3901] \"SLC35E2A\" \"C7orf26\" \"MTFR1L\" \"NSUN7\" \n", - "[3905] \"RNF220\" \"KIF14\" \"ABTB1\" \"KCNMB2\" \n", - "[3909] \"GPKOW\" \"ARHGAP22\" \"C12orf76\" \"CARD16\" \n", - "[3913] \"CCDC122\" \"NUP210\" \"DLC1\" \"CCDC167\" \n", - "[3917] \"HAP1\" \"TRIM65\" \"VLDLR\" \"ZNF337\" \n", - "[3921] \"SLC66A3\" \"SERPINI2\" \"ESPN\" \"HYLS1\" \n", - "[3925] \"DBN1\" \"SLC1A1\" \"PIGM\" \"SPATA20\" \n", - "[3929] \"RFX5\" \"METRN\" \"ABHD6\" \"ARHGDIB\" \n", - "[3933] \"AC020978.5\" \"AP000442.1\" \"ACP2\" \"SLC25A25-AS1\"\n", - "[3937] \"SYNGAP1\" \"CTSH\" \"PCED1A\" \"MAPK3\" \n", - "[3941] \"CYB5D1\" \"GRAMD1C\" \"POLE2\" \"SDR39U1\" \n", - "[3945] \"SCART1\" \"RASIP1\" \"LRRC37A2\" \"RHOBTB3\" \n", - "[3949] \"PAAF1\" \"ANKAR\" \"ELK1\" \"C17orf75\" \n", - "[3953] \"IKBKG\" \"RRP8\" \"TTK\" \"PMS2\" \n", - "[3957] \"PHF8\" \"OAS1\" \"ZXDB\" \"SYTL4\" \n", - "[3961] \"CREB3\" \"RCAN3\" \"LENG9\" \"SMAGP\" \n", - "[3965] \"MIR3936HG\" \"PMM1\" \"KIF4A\" \"AC009133.1\" \n", - "[3969] \"LINC00265\" \"POFUT2\" \"ICOSLG\" \"IRAK1BP1\" \n", - "[3973] \"MXD3\" \"KIF2C\" \"SLC25A10\" \"RNF128\" \n", - "[3977] \"THAP9\" \"PLAUR\" \"MUL1\" \"DDX5\" \n", - "[3981] \"ZNF521\" \"GINS1\" \"ETFRF1\" \"MSH5\" \n", - "[3985] \"C15orf39\" \"KDF1\" \"CCDC102A\" \"NIT1\" \n", - "[3989] \"CCL2\" \"ZNF688\" \"LINC02542\" \"AL118516.1\" \n", - "[3993] \"GAS8\" \"TMEM17\" \"DHRS4-AS1\" \"GCDH\" \n", - "[3997] \"C4orf33\" \"ADGRE5\" \"SHKBP1\" \"HSCB\" \n", - "[4001] \"PAK3\" \"PRKAB1\" \"ANAPC13\" \"ABRAXAS1\" \n", - "[4005] \"SRGAP2B\" \"CFAP410\" \"KIAA1324L\" \"GALNS\" \n", - "[4009] \"FTSJ1\" \"NRSN2-AS1\" \"POLRMT\" \"FAM161A\" \n", - "[4013] \"XYLT2\" \"TSPAN17\" \"TSPYL4\" \"TBL3\" \n", - "[4017] \"ZBTB47\" \"FBXL8\" \"BTN2A2\" \"MAN2C1\" \n", - "[4021] \"SLC9B2\" \"RIDA\" \"PLCB3\" \"TMEM214\" \n", - "[4025] \"TFAP4\" \"AGRN\" \"TIPARP\" \"TUBG2\" \n", - "[4029] \"HIST1H2BG\" \"TRAF5\" \"ZNF821\" \"KAT14\" \n", - "[4033] \"OSGIN2\" \"HAUS5\" \"ABCG1\" \"KCNJ14\" \n", - "[4037] \"NAAA\" \"SLC13A3\" \"STPG1\" \"PRKAR1B\" \n", - "[4041] \"NIBAN1\" \"SETD1A\" \"UGDH-AS1\" \"TCEA2\" \n", - "[4045] \"FAM219B\" \"TRIP13\" \"HS3ST1\" \"KCTD18\" \n", - "[4049] \"ARL17B\" \"TK2\" \"FBN2\" \"B4GALT1\" \n", - "[4053] \"COL10A1\" \"STRADA\" \"SNHG9\" \"ZFYVE28\" \n", - "[4057] \"OASL\" \"BCL2L12\" \"ARMCX6\" \"HMGCL\" \n", - "[4061] \"KLF6\" \"HIST1H2AE\" \"JMJD7\" \"ENTPD1-AS1\" \n", - "[4065] \"AGAP4\" \"B4GALT7\" \"GPR137\" \"MAN2B2\" \n", - "[4069] \"ZNF362\" \"IVD\" \"SRRD\" \"ZBTB48\" \n", - "[4073] \"FAM189B\" \"LYSMD2\" \"TMEM88\" \"GLI4\" \n", - "[4077] \"EXTL2\" \"MRGBP\" \"PIK3CD\" \"AC016745.1\" \n", - "[4081] \"AL035071.2\" \"PBX2\" \"ZNF839\" \"ZNF322\" \n", - "[4085] \"AC027117.2\" \"REL\" \"SLC25A42\" \"C16orf58\" \n", - "[4089] \"TOR1A\" \"RTN2\" \"HELB\" \"FAM184B\" \n", - "[4093] \"ZNF57\" \"ANLN\" \"NNT-AS1\" \"SLC35D2\" \n", - "[4097] \"RCE1\" \"MND1\" \"TMC1\" \"MAGI3\" \n", - "[4101] \"HIRA\" \"AMOT\" \"DOHH\" \"AC005480.1\" \n", - "[4105] \"MEPCE\" \"TMEM80\" \"MITF\" \"N4BP2L1\" \n", - "[4109] \"HINFP\" \"PRKG1\" \"CRABP2\" \"AC009630.1\" \n", - "[4113] \"HMCN1\" \"SPRYD4\" \"ZNF76\" \"GGPS1\" \n", - "[4117] \"PINLYP\" \"IL20RA\" \"LRRC37A3\" \"FGF12\" \n", - "[4121] \"PRKACA\" \"BAMBI\" \"DENND4B\" \"ALG13-AS1\" \n", - "[4125] \"WSB1\" \"CA11\" \"MGAT2\" \"LINC00106\" \n", - "[4129] \"PIGZ\" \"BET1L\" \"TKFC\" \"CBY1\" \n", - "[4133] \"ZNF823\" \"RSAD1\" \"PTCD2\" \"AC011444.3\" \n", - "[4137] \"MOB3C\" \"ZNF14\" \"TMEM254\" \"PHC1\" \n", - "[4141] \"MAP1S\" \"MEGF8\" \"COG1\" \"TMEM138\" \n", - "[4145] \"CRYL1\" \"ULK3\" \"CEP126\" \"FDX2\" \n", - "[4149] \"RNF31\" \"SEMA4C\" \"ZNF487\" \"RALGPS1\" \n", - "[4153] \"AC127502.2\" \"MLST8\" \"GET1\" \"AC103591.3\" \n", - "[4157] \"CYB561D2\" \"ZBTB16\" \"ADGRF1\" \"HMBS\" \n", - "[4161] \"CATSPERG\" \"IFIT5\" \"BAK1\" \"SPATA2\" \n", - "[4165] \"RBBP9\" \"PCIF1\" \"AL049840.2\" \"SPATA1\" \n", - "[4169] \"THAP6\" \"AL450306.1\" \"OXSR1\" \"BCO2\" \n", - "[4173] \"TUT1\" \"SPATA7\" \"FBXO4\" \"AC011997.1\" \n", - "[4177] \"MED9\" \"AC073114.1\" \"KLHL12\" \"KLHL7\" \n", - "[4181] \"AC092683.1\" \"ELN\" \"IFI35\" \"USP2\" \n", - "[4185] \"IDUA\" \"SLC25A14\" \"GALE\" \"DENND2C\" \n", - "[4189] \"FKRP\" \"ZNF672\" \"KLC4\" \"LINC01151\" \n", - "[4193] \"AL139351.3\" \"TAOK2\" \"AR\" \"SHROOM4\" \n", - "[4197] \"RASD1\" \"TMEM185A\" \"FLG-AS1\" \"GRAMD2A\" \n", - "[4201] \"SPATA18\" \"NOTCH2NLC\" \"AC126696.1\" \"IFT122\" \n", - "[4205] \"VGLL3\" \"PGAP3\" \"FAM215B\" \"ZSCAN25\" \n", - "[4209] \"IRF7\" \"CCNE2\" \"SIRT6\" \"RBKS\" \n", - "[4213] \"CCDC24\" \"CDC42EP5\" \"IBA57\" \"AC034195.1\" \n", - "[4217] \"KIT\" \"CENPE\" \"MALAT1\" \"KAT2B\" \n", - "[4221] \"AP000692.2\" \"PIK3C2B\" \"SULT2B1\" \"ASTE1\" \n", - "[4225] \"AC012459.1\" \"TTC9C\" \"PTCH1\" \"PHKG2\" \n", - "[4229] \"AC105052.4\" \"CRTC2\" \"TUBGCP6\" \"ZNF585A\" \n", - "[4233] \"HAUS8\" \"ICAM1\" \"AP002381.2\" \"IDI2-AS1\" \n", - "[4237] \"ALDH1A3\" \"SNX33\" \"C14orf93\" \"HS1BP3\" \n", - "[4241] \"SEC14L2\" \"UCK1\" \"ZSCAN16-AS1\" \"MIR34AHG\" \n", - "[4245] \"PP2D1\" \"RAB10\" \"EGR2\" \"RUNX2\" \n", - "[4249] \"Z95331.1\" \"IQCK\" \"TNFRSF21\" \"ZBTB20-AS5\" \n", - "[4253] \"AC117834.1\" \"TAPBPL\" \"AC087190.1\" \"ERCC2\" \n", - "[4257] \"FBXO44\" \"ARHGAP11B\" \"C1orf54\" \"MEN1\" \n", - "[4261] \"FAXDC2\" \"LRCH4\" \"GPRC5A\" \"RAB11B-AS1\" \n", - "[4265] \"OAS2\" \"RSAD2\" \"PARM1\" \"CCDC15\" \n", - "[4269] \"SNX31\" \"VSIG10\" \"LINC01237\" \"GLI2\" \n", - "[4273] \"AC138305.1\" \"ARL6\" \"OGG1\" \"B9D1\" \n", - "[4277] \"KIF18A\" \"AC026704.1\" \"SCNN1B\" \"STARD13-AS\" \n", - "[4281] \"TMEM201\" \"SLC2A8\" \"APOBEC3A\" \"CNTN1\" \n", - "[4285] \"ASPM\" \"ZNF771\" \"ANKRD42\" \"SEMA4A\" \n", - "[4289] \"EFCAB13\" \"FTCDNL1\" \"CENPF\" \"APH1B\" \n", - "[4293] \"SARM1\" \"IRX3\" \"CCL20\" \"XAF1\" \n", - "[4297] \"SOX12\" \"DNAJA1\" \"LCA5\" \"AC019211.1\" \n", - "[4301] \"CTSS\" \"ZNF503-AS1\" \"ZNF274\" \"UPRT\" \n", - "[4305] \"NFKB1\" \"ANKZF1\" \"FAM131A\" \"SAMD5\" \n", - "[4309] \"MAGI1-AS1\" \"PHF23\" \"SHFL\" \"ZNF836\" \n", - "[4313] \"DYNC1I1\" \"TTC22\" \"SATB1\" \"HIST1H2BJ\" \n", - "[4317] \"SLC27A1\" \"CYP2C18\" \"LNX1-AS1\" \"RB1CC1\" \n", - "[4321] \"STX17-AS1\" \"CXCL3\" \"AC011511.2\" \"DIAPH3\" \n", - "[4325] \"ACSS1\" \"FRMD4A\" \"TJP1\" \"KLF3-AS1\" \n", - "[4329] \"MECOM\" \"NAPA-AS1\" \"SLC44A3\" \"AC096741.1\" \n", - "[4333] \"TRA2A\" \"PHTF1\" \n", - "\n", - "$ident_col\n", - "[1] \"category\"\n", - "\n", - "$ident_1\n", - "[1] \"C\"\n", - "\n", - "$ident_2\n", - "[1] \"N\"\n", - "\n", - "$de_subset_receiver\n", - "[1] TRUE\n", - "\n", - "$group_col\n", - "[1] \"Fine_Cell_Types\"\n", - "\n", - "$assay\n", - "[1] \"RNA\"\n", - "\n", - "$min_cells\n", - "[1] 10\n", - "\n", - "$min_pct\n", - "[1] 0.05\n", - "\n", - "$logfc_threshold\n", - "[1] 0.25\n", - "\n", - "$pval_threshold\n", - "[1] 0.05\n", - "\n", - "$top_n_ligands\n", - "[1] 30\n", - "\n", - "$top_n_targets\n", - "[1] 100\n", - "\n", - "$ligand_target_cutoff\n", - "[1] 0\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "parameters(result)" ] @@ -3161,12 +440,14 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# Extract ordinary R objects for downstream analysis\nactivities_tbl <- ligand_activities(result)\nlinks_tbl <- ligand_target_links(result)\nltm <- ligand_target_matrix(network)\nanalysis_params <- parameters(result)\n\ncat(\"Activity table:\", nrow(activities_tbl), \"ligands\\n\")\ncat(\"Ligand-target links:\", nrow(links_tbl), \"rows\\n\")\ncat(\"Ligand-target matrix:\", nrow(ltm), \"targets x\", ncol(ltm), \"ligands\\n\")\n\nhead(activities_tbl, 5)" + "source": "# Extract ordinary R objects for downstream analysis\nactivities_tbl <- ligand_activities(result)\nlinks_tbl <- ligand_target_links(result)\nltm <- ligand_target_matrix(network)\nanalysis_params <- parameters(result)\n\ncat(\"Activity table:\", nrow(activities_tbl), \"ligands\\n\")\ncat(\"Ligand-target links:\", nrow(links_tbl), \"rows\\n\")\ncat(\"Ligand-target matrix:\", nrow(ltm), \"targets x\", ncol(ltm), \"ligands\\n\")\n\nhead(activities_tbl, 5)", + "id": "cell02-028" }, { "cell_type": "markdown", "metadata": {}, - "source": "These extracted tables are the recommended interface for interpretation and reporting. For example, use `activities_tbl` for a ranked ligand table, `links_tbl` to explain which target genes support each ligand, and `ltm` if you want to rerun custom nichenetr analyses outside the ContextNet wrapper." + "source": "These extracted tables are the recommended interface for interpretation and reporting. For example, use `activities_tbl` for a ranked ligand table, `links_tbl` to explain which target genes support each ligand, and `ltm` if you want to rerun custom nichenetr analyses outside the ContextNet wrapper.", + "id": "cell02-029" }, { "cell_type": "markdown", @@ -3180,30 +461,14 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "cell-23", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAPACAIAAACAZs45AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde3wTZd7//6s5NGmatDQUe6CLbVEobLGcqSwnxV1ERVQUFFjFsh5uDiLeuMWFvYXFGxEVUcEDAi4q6Oqyq3hYgRbltIKcBCqCeECEikhpE9KkOc18/5jf5te7h9BCc+jk9fyDRzJzzcznStLMm2smM3GyLAsAAAC0fppIFwAAAICWQbADAABQCYIdAACAShDsAAAAVIJgBwAAoBIEOwAAAJUg2AEAAKgEwQ7AhZg+ffqgQYOmT5+uPH3ggQdqPw3z1psrzNXWd5H1y7J87733Dho0aNasWS1b2IUJw+tZZxMRfwfD7JFHHhk0aNCkSZO49CzOi2AH/B933XVXXON69+4dio3W1NTMnz+/W7duFovFZDL17NnzxRdfrP0Nvn79+oEDByYmJppMpoEDB5aUlDS2qt69e9ep2Ww29+zZc8GCBTU1NS1Y88GDB7du3Xrw4EHl6YEDB2o/DU6W5csuuyw7O7ultl6H8iIEebOaVW0oBK//vFasWPHKK6/s3r37nnvuEQ296W3atOnSpct//dd/nThxokULb1hTXs/S0tLRo0d36NDBaDQmJCR06dLlwQcf/PHHHy9sEy3+Dl5keRcj8PY9/vjjtafPnj07Li6usLBQCHHPPfd8/vnnL7744htvvBGGktC6yQBqufPOO4P8vfTq1avFt+j3+6+++ur62youLlYalJaWarXa2rN0Ot22bdsaXFuvXr0aK37IkCGSJLVU2UOHDhVCDB069AKWLS0tFUJceumlIdq68iKE4s1qKRfz6vn9/ksvvVQIMXnyZGVKkDc9MzPz7NmzLVp7AwYPHhy8O1OnTm2wvLZt2+7bt+8CNnHeLTbLxZd3MQJvn8lkOnbsWGC6Mhzbr18/5em9994rhOjUqVML/hVDlRixA/6PVatWBf486ueD3bt3K82OHj165513ZmZmxsfHp6Wl3Xbbbfv37w+spLCwMC4ubsKECZ988km/fv0SEhLat29f57/jATt27CgrKzMYDAsXLqyurj527FiPHj2EECtWrFAazJkzx+/39+rV6/jx48ePH+/evbvP55s7d26QXgRq9vl833777ciRI4UQn3766ZYtW4QQffv2jYuLmzJlyptv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g1XV1dW7du2aPHlynU0nJSU12Jc6lPGG+tOD7AgD7Zuy42/xrTdXg0G59kZPnTo1dOjQd955RxltbWw9tc+nrH2uWFPqv/fee3fu3PmHP/xBOd/r8OHDs2bNUkaD6izocDiUB8r5kbXVftNdLte///3vDh06vPfee8OHD5ck6by9CFJDE1+BBilrE0IExuQaFPwzcN6tNP0FvLDy6hs1apROp6uurt68efPGjRtrampMJpPyK6WLqWfu3LkZGRlut3vKlCmB/xYGBP5mAx8DoD6CHdA8yglwQojaI2qBn8RefvnlgYkHDx4M5LlDhw4pD5TTuRqj1Wo7duyonON17ty5HTt2dO7cWUkJR48eVdp89dVXQoj4+Pja27pIyknZQojXX3+9zqj+HXfcoRw3DGxaCFFTU1P7V8B1BC5QF+h1gwI7uZbdenPVX7/H4ykrKws0WLdu3S+//CKEeP755x0OhyzLv/3tby9m/Q3W37dv31deeeW77747ceKEcmT/k08+CfwAIsBisSgPgu/ajUbjlVdeOW7cOCHEkSNHjh071pReNFbDxbwCGRkZygmXq1atqqysrD3r+PHjnTt3fvDBB7/99tvgn4GmbKiJL+CFlVd/wbZt2ypHYz/66KP3339fCDFy5MjExMSLrMdisTz55JNCiA0bNnz66ad15trt9kCz4OtBLCPYAc1z6aWX9u3bVwjx8ssvb9iwobq6+sMPP3z55ZeFEP3796+d206ePPmnP/3Jbrf/+9//Vq5d0r1793bt2tVZ4fLlyzMzM00m09tvv+1yuSoqKpYvX67MateunclkUvYfL7300o8//njs2LFly5YJIa6//vr4+PiW6tRll12mBNannnrqq6++qqqqeuKJJ5KSkn79619XVlb+6le/ys3NFUIsW7Zs586dNpttxowZFRUVQdamHHp++eWXd+7cWVlZuWzZMr1en5ycrFwjQ4mqp06dOnr0qMvlatmtN1dWVpYyrLJs2bLPPvvMbrcXFxf//PPP9VumpqZKkrRy5UrluNvp06ebMiR53vq//vrrvn37pqenb9682ev1XnLJJcOGDWtsbYmJicr7XlVVFWSjXq933759b775phBCq9XW/hF3g71oYg0X9gr8z//8j1JwYWFhSUmJ0+msrKxct27d1Vdf/fXXXy9fvlz5mXCQz0Dw9Z+3eOXqNo1d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BwAAQCRFxS3Fjh07lpqampOTcwHL2u320tLSvn371pnu8/nKyspOnjyZm5trNpuVux07HI7169f369evBYoGAACIMlER7CorK5OTk5XHDodj7NixyuOJEyfecMMNQoiioqJA4969e8+aNav2xKysrMAigekajSYjI2Pq1Knp6enK9FdeeeX999/v2rWrsnhj3G63y+Vqqa41SJIkp9MZ6q0AAICWUlVVFekS/j8ajSYpKamxuVER7Nq2bVtRUaE8NpvN69atE0IsXbo00KD+OXaBiW63e9++fcXFxc8++6ySDus0DrjnnnvGjRv38ccfz5o169lnn42Li2uwGEmSfD5fy3WuYUoXAABAqxCGbNBEWq02yNyoCHY5OTnnzp07dOhQ165dAxNlWW7KsgaDobCwcM2aNYcPH27sGGt5ebnL5erYsaPJZBo5cuSqVauqqqpSUlIabKzT6RISEi6gF01XU1Oj1+uDvzHqIMtyTU1NpKsAAOBihTobNJ1GE+wHElER7Mxm85gxYxYuXDhp0qT8/Hy327158+Zt27bNnj37vMv6fL79+/eXl5dnZ2c31ub48ePLli179NFH09PTS0tLk5OTg1zuRK/X6/X6C+tIE3k8HoPBYDAYQrqVaECwAwCoQ2JiYqRLaJKoCHZCiFtuuSUhIeG1114rLy9PSEjIz89//PHHc3JyghyyVM6l02q1mZmZ06ZNy8zMbKxxYWHh8ePH586da7fbs7KyZs6c2dhxWAAAgNYrrolHPNGCKisrTSZTjIzYVVRUXLV4V6QLAQDgohx8bHikS2iSqLiOHQAAAC4ewQ4AAEAlCHYAAAAqQbADAABQCYIdAACAShDsAAAAVIJgBwAAoBIEOwAAAJUg2AEAAKgEd56IgFi784QQwmKxxE5/rVZr8Ds0q4PH47Hb7UKI2Omvw+GwWq2RLiQcnE6n0+nUarUpKSmRriUcqqurJUmyWCyRLiQcbDab1+s1Go1msznStYRDVVWV0Wg0Go2RLiR81P91DAAAECN0kS4A6se9YgEArVdruUusghE7AAAAlSDYAQAAqATBDgAAQCUIdgAAACpBsAMAAFAJgh0AAIBKEOwAAABUIvLXsZMk6cUXX1Qex8fHp6enDxo0KDk5OdDgnXfe8Xg848aNC0yRZXn//v1ffvnluXPn4uPj27dv369fvzZt2siy/MIL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76DVanNyciorK20DWL58+fDqEwA4hMIOAJxddXX1v/71ryNHjkyfPj0kJOT1119nqze2Kysra8qUKUqlcseOHR0dHY2NjYQQiqISExOXLVumUCh27NghEonq6+uvXbt2586d1NTUadOmzZo1Kzk5ebR7/999993Vq1fPnDlz+vTpGzduPHXqFNteV1dXUVGRlpbm6+vr6en5+9///h//+AdFUSO+iVqt1mq11korOztbo9GIRCNfddVqNU3Tubm57MucnJytW7cO37m2tjYyMnI8oY7T2bNn2VvoXFxcYmNjXVxcLl68aF3ntfZSFOXm5nby5MnMzMwf/vCH1sMjIyNra2sf6owAMKlQ2AGAs2tpaSGEWKeRlixZYu2qqKhYvny5t7e3VCp94oknCCEDAwNsV3BwMLtB07RcLtfr9c3NzYSQkJAQtj00NHTE07W3txcUFFjLlz179ly4cIGN4c6dO4SQwMDA8YTt5eW1atWqnJwcQsjt27dra2tffPHF0XZ2dXXdsmULe5Nca2vrlStXhj9NYjAY+vr62NXeB4Y6Tta76CwWS1tbW05Oju10ne0deAEBAVFRURqNxvbwadOm9fb2mkym8Z8RACYVCjsAcHbsvJp1Ysw6j9XU1LRixYp58+ZVVVX19vYOmTqiaXrI+wwODhJCrLN9ts8f2Dp9+rTRaFy7di07U/X000+bzebTp09bYxj/Z3xoNJrCwkKDwXDu3Lno6GhrTTmiXbt2VVRUNDQ05ObmxsfHj1Y+2k4QjhEqIUQikVjXdq26u7vlcvk447eSSCSpqamnT5+ur6+3bZ/wLX0AMElQ2AGAs/P19SWEfPXVV+zL6upqduPatWt6vT4tLW327Nkymcz65MRoZs6cSQhpampiX464hmg0GjMzM48ePcrYSE9PP3PmjNFonDdvHiFkSHEzhnXr1hFCysvL//SnP23dunXsnaOioqKionJycrKysmwfpLCSSCTu7u7Wp1DHDpUQEhYWVl1dbVt73bt375///GdUVNQ447f1/e9/f+HChfv377dt7Orqcnd3H61EBgDHQ2EHAM4uOjrax8cnJSWlu7v7yy+/fPPNN9lJu4CAAELIxYsX79+/f/78+fz8fELIv//979Fm1JYsWeLt7Z2SktLV1dXS0pKSkjK8Ivnoo4/u3r07ZBlUo9H09PTk5+eHhYU99dRTP/3pT5ubm7/55ptXXnklICCAXYh0dXVtamoyGAy2hZRUKt20adPx48cbGxvVavXwkIYctWvXrl//+td37tyxftTcEAsXLrTWo2OHSgg5cuRIc3Pzyy+/3NLSotfrq6urExMTQ0ND9+zZM9o/9Rgoijp69GhxcfEnn3xibRx+zx8AcAuFHQA4Bdv79CmKsr0BTiwWf/TRR7du3fL399+yZcuRI0coihKJRFFRUeyjr/7+/ufOncvKylqzZs33vve9P//5zyOeQiKRfPLJJy0tLbNmzUpISNi9e7eHh8eQDyjOyMhYt26dj4+PbaNKpUpMTGSfSygoKPD19Q0PDw8JCbl169b58+fZ6vCll17Kysry8fEZsvqp0WhKS0vXrVvn6ek5PKQhR23ZsqWnp2fz5s0KhWLEFFasWFFcXDzOUIOCgq5cudLd3R0TE+Pl5aXRaGJjY8vKymQy2Yhv/kArVqxISEj4yU9+Yr2prqSkZMhTugDALQp3SACA8xsYGGAYhr05rL293c/Pr6qq6tvf/jbXcdnZ119/HRgY+Nlnny1atGjEHTo6OubOnXvhwoUhH2XHiZKSksTExIaGhunTp3MdCwD8Dwo7AHgMLFiwIDQ09L333hOJRD/+8Y8rKyvr6+ulUinXcdmN2Wzu7OzUaDQqlYp9kHY0hw8fLikpqaysHP50iCOZTKbY2Ng1a9YcPnyYwzAAYAgsxQLAYyA/P//+/ftBQUHz5s3r6Oj4+OOP+VTVEULeeOONoKAgDw+PB36Rw89//nOFQnHw4EHHBDaagwcPurm5cR4GAAyBGTsAAAAAnsCMHQAAAABPoLADAAAA4AkUdgAAAAA8gcIOAAAAgCdQ2AEAAADwBAo7AAAAAJ5AYQcAAADAEyjsAAAAAHgChR0AAAAAT/wXPJ9/BErQDQUAAAAASUVORK5CYII=", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 480, - "width": 420 - } - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "options(repr.plot.width = 7, repr.plot.height = 8)\n", "\n", @@ -3239,46 +504,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "cell-26", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Warning message:\n", - "\u201c\u001b[1m\u001b[22mUsing `size` aesthetic for lines was deprecated in ggplot2 3.4.0.\n", - "\u001b[36m\u2139\u001b[39m Please use `linewidth` instead.\n", - "\u001b[36m\u2139\u001b[39m The deprecated feature was likely used in the \u001b[34mnichenetr\u001b[39m package.\n", - " Please report the issue at \u001b[3m\u001b[34m\u001b[39m\u001b[23m.\u201d\n", - "Warning message:\n", - "\u201c\u001b[1m\u001b[22mThe `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.\n", - "\u001b[36m\u2139\u001b[39m Please use the `linewidth` argument instead.\n", - "\u001b[36m\u2139\u001b[39m The deprecated feature was likely used in the \u001b[34mnichenetr\u001b[39m package.\n", - " Please report the issue at \u001b[3m\u001b[34m\u001b[39m\u001b[23m.\u201d\n" - ] - }, - { - "data": { - "image/png": "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rRseHi6E8Pf3z83NPXXqVE5OTsmbDBkyxNPTc/r06X5+fv37979nDSXv0KRJk379+s2fP79ly5aO34YstswVK1acPXs2PDw8Li4uLy8vLy/vxIkTzz///O7du2fOnFm7du0HV/7uu+8mJib+6U9/unHjxo0bN95+++2DBw++++679/tg33333bS0tGeffTY9Pf3OnTuLFi1as2aNWt4jjzxisVhGjx6dnJxcWFh44cKFhQsXNm3atFWrVve7GwAAcDLl/Csf1Zr6M3Ylffzxx8ovf74tNzf3ueee8/b29vLy6tu378GDB7t37961a1e1Ny4urmvXrh4eHvXr13/++eezsrIWL17s5eVVo0YNi8USGhrarl07x3lDQ0PbtGmjHhcUFLz66qt169Z1dXVt3779F198ER4e3qFDh5LVBgcHe3t7FxQUlOyyWCz16tULDg5WT7ds2dK1a1d3d/f69etHRERcvHhRbb98+XJQUJDRaOzWrVuxBaoiIiKEEC+//LJjo+OwYndQrV+/Xgjx1ltvPfjTTkhIePrppxs3bmw0Go1Go7+//5NPPvnVV185jrlf5YqifPXVV927d/fw8PD09Ozdu/c333xj7yr5CSuKsmvXrpCQEC8vLzc3t4cffviLL76wdyUnJ48YMaJevXqurq6NGjUaPXr0+fPnH1w8AABwIjqF3weolAIDA/39/ffu3at1IdpbvXr1888/f+HCBftTeQAAAA2xhaNS2Lp165IlS+ynt2/fvnTpUqdOnTQsqZKw2WwrVqwYMmQI6RkAAFQSLloXACGEuHjx4rRp0wwGw4QJE+7cufPKK6/o9Xr1S2nVls1my8nJmTlzZnJy8qZNm7QuBwAA4Cc8ga4UpkyZsmzZsk8//bRevXpt27Y1m83fffdd69atta5LS2vXrvX29v722293795tfwsgAACA5tgDDQAAAEjgCTQAAAAggQANAAAASCBAAwAAABII0AAAAIAEAjQAAAAggQANAAAASCBAAwAAABII0AAAAIAEAjQAAAAggQANAAAASCBAAwAAABII0AAAAIAEAjQAAAAggQANAAAASCBAAwAAABII0AAAAIAEAjQAAAAggQANAAAASHDRugAAwK9hs9kK8vN1wiYURafYhKIIYROKIhSbTgih2NttOqGopwavWkpRnlKQKxRF99/Baq9NpyhCUYRQ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85//PHr0qBBi8uTJJpPpvffeU9tdXV0DAgLCwsK8vb2FECdPnty3b9/du3fr168/aNAgHx8frZYDAACAykCnKIrWNZSXzz77bP/+/ZMmTWrdunVBQcH+/ft37NixZMkST09P+5ghQ4ZER0d7e3sPHTo0Ojra19c3Ozt7zZo1mZmZc+bMSUlJmTp16uzZs1u0aPH555+fPXt2/vz5Gq5IW1ZLEa/yBgAAJfEq7yoiKytr69atM2bMCAoK8vDwqF279hNPPPHxxx87pud7MplMffr0SUtLE0J4e3svXLiwbdu2bm5uwcHBqampFVI7AAAAKq8qG6AvXbrk6+vbrFkz2QvNZnNsbGy3bt2EEJ6enk2aNFHbDx8+3L59+zKuEgAAAM6myu6Bvn37dq1atdTj7OzsZ555Rj0eP378k08+ec9LoqKi1IOAgAD7eNWBAwd2795t3ycNAACAaqvKBmgfH5/MzEz12GQybd++XQixYsWKB1yi7oEuKCg4evToG2+88cEHH9SpU0cIsWfPnpiYmLfffptvEAIAAKDKbuFo1qzZ3bt3T5065dhY7BuThYWFQgh3d3fHRjc3tx49enh7e58+fVoIsX///u3bt8+fP79+/frlXzUAAAAquyoboE0mU0RExMKFCxMSEnJzc2/fvr1169a4uLgWLVqsWLHi448/Ligo2LNnT8OGDU0mk+OFFovl8OHDqampTZs2NZvNq1ev/vOf/6z+pB0AAABQlX/GTgjxz3/+85tvvklNTfXw8Gjfvv2oUaOaNWuWlpb2/vvvnz9/vn79+i+99FKbNm2sVuvQoUPVSwwGg7+//6hRo4KDg/fs2fPhhx863vDzzz/38vLSYina42fsAADAPVW3n7Gr4gEaZYgADQAA7qm6Begqu4UDAAAAKA8EaAAAAEACARoAAACQQIAGAAAAJBCgAQAAAAkEaAAAAEACARoAAACQQIAGAAAAJBCgAQAAAAkEaAAAAEACr/JGaSmKzWa1al0FAACodPQGg05XjR7LEqABAAAACS5aFwAnovDnFgAAKEmn0wmh07qKikOARmlZLZaivGytqwAAAJWO0cNkcDFqXUXFqUa7VQAAAIDfjgANAAAASCBAAwAAABII0AAAAIAEAjQAAAAggQANAAAASCBAAwAAABII0AAAAIAEAjQAAAAgocq+idBms82fP189dnd3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", - "text/plain": [ - "plot without title" - ] - }, - "metadata": { - "image/png": { - "height": 600, - "width": 480 - } - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "options(repr.plot.width = 8, repr.plot.height = 10)\n", "\n", @@ -3333,7 +566,8 @@ " legend_title = \"Regulatory\\nPotential\",\n", " color = \"purple\"\n", ")" - ] + ], + "id": "cell02-036" }, { "cell_type": "markdown", @@ -3373,22 +607,19 @@ }, "outputs": [], "source": [ + "# Build path-level Sankey data, then scale + threshold across receivers.\n", "sankey_raw <- prepare_for_ccflowr(\n", " result,\n", " expression_data = seurat_cn,\n", " network = network,\n", " group_col = GROUP_COL,\n", - " top_n_ligands = 50,\n", - " min_cells = MIN_CELLS\n", + " top_n_ligands = 50\n", ")\n", - "\n", "sankey_data <- combine_sankey_data(sankey_raw, threshold_quantile = 0.95)\n", "\n", - "cat(\"Raw ccflowR path rows:\", nrow(sankey_raw), \"\n", - "\")\n", - "cat(\"Rows after thresholding:\", nrow(sankey_data), \"\n", - "\")\n", - "head(sankey_data)\n" + "cat(\"Raw ccflowR path rows:\", nrow(sankey_raw), \"\\n\")\n", + "cat(\"Rows after thresholding:\", nrow(sankey_data), \"\\n\")\n", + "head(sankey_data)" ] }, { @@ -3507,19 +738,18 @@ ], "metadata": { "kernelspec": { - "display_name": "MultiNicheNet_v2", + "display_name": "R", "language": "R", - "name": "multinichenet_v2" + "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", - "pygments_lexer": "r", - "version": "4.3.3" + "pygments_lexer": "r" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/notebooks/03-multicondition-workflow.ipynb b/notebooks/03-multicondition-workflow.ipynb index 65f6b73..58c54ee 100644 --- a/notebooks/03-multicondition-workflow.ipynb +++ b/notebooks/03-multicondition-workflow.ipynb @@ -64,10 +64,10 @@ }, "outputs": [], "source": [ - "# \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n", - "# \u2551 USER CONFIGURATION \u2551\n", - "# \u2551 Paths are relative to the ContextNet project root. \u2551\n", - "# \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n", + "# ╔══════════════════════════════════════════════════════════════╗\n", + "# ║ USER CONFIGURATION ║\n", + "# ║ Paths are relative to the ContextNet project root. ║\n", + "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", "PROJECT_DIR <- normalizePath(getwd(), mustWork = TRUE)\n", "if (basename(PROJECT_DIR) == \"notebooks\" &&\n", @@ -86,6 +86,10 @@ "SEURAT_FILE <- file.path(DATA_PATH, \"seurat_obj.rds\")\n", "NICHENET_DB <- DATA_PATH\n", "\n", + "# Repo-local cache for the reusable ContextNetwork (shared with Tutorial 02).\n", + "CACHE_DIR <- file.path(DATA_PATH, \"cache\")\n", + "NETWORK_CACHE <- file.path(CACHE_DIR, \"contextnet_network.rds\")\n", + "\n", "# Analysis parameters: replicate-aware multi-condition comparison\n", "SENDER <- NULL # Auto-detect: all cell types with >500 cells\n", "RECEIVER <- c(\"basal\", \"parabasal\", \"suprabasal\", \"dividing\")\n", @@ -96,7 +100,9 @@ "SAMPLE_COL <- \"sample\" # REQUIRED for pseudobulk DE\n", "MIN_CELLS <- 500 # Minimum cells for sender cell types\n", "TOP_N_LIGANDS <- 30\n", - "N_CORES <- 20 # Parallel cores for multinichenetr\n", + "N_CORES <- 1 # Serial by default to avoid FORK/socket failures;\n", + " # raise only if your platform runs parallel\n", + " # MultiNicheNet reliably.\n", "\n", "stopifnot(file.exists(GRN_FILE), file.exists(SEURAT_FILE))\n" ] @@ -113,28 +119,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "cell-6", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "An object of class Seurat \n", - "16524 features across 145769 samples within 1 assay \n", - "Active assay: RNA (16524 features, 0 variable features)\n", - " 2 layers present: counts, data\n", - " 2 dimensional reductions calculated: pca, umap" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "seurat_obj <- readRDS(SEURAT_FILE)\n", "seurat_obj" @@ -142,35 +134,14 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "cell-7", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/plain": [ - " \n", - " Pt32C Pt32M Pt33C Pt33M Pt44C Pt44N Pt44M Pt45C Pt45N Pt45T Pt50C Pt50N\n", - " C 6182 0 2498 0 6444 0 0 6534 0 0 942 0\n", - " M 0 9236 0 3959 0 0 6860 0 0 0 0 0\n", - " N 0 0 0 0 0 14515 0 0 4210 0 0 2239\n", - " T 0 0 0 0 0 0 0 0 0 16104 0 0\n", - " \n", - " Pt50T Pt51C Pt51N Pt51M Pt56C Pt56N Pt56T Pt59C Pt59N Pt59T\n", - " C 0 5439 0 0 6071 0 0 4716 0 0\n", - " M 0 0 0 6596 0 0 0 0 0 0\n", - " N 0 0 5580 0 0 1055 0 0 8175 0\n", - " T 7463 0 0 0 0 0 8201 0 0 12750" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Verify replicates: each condition must have multiple samples\n", "table(seurat_obj$category, seurat_obj[[SAMPLE_COL]][, 1])" @@ -183,37 +154,19 @@ "### Replicate Design Check\n", "\n", "MultiNicheNet treats samples, not cells, as the experimental units. The table above should show multiple samples per condition; otherwise the workflow cannot support replicate-aware differential communication claims.\n" - ] + ], + "id": "cell03-008" }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "cell-8", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cells: 74600 \n" - ] - }, - { - "data": { - "text/plain": [ - "\n", - " C N \n", - "38826 35774 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Subset to conditions of interest\n", "seurat_cn <- subset(seurat_obj, subset = category %in% c(IDENT_1, IDENT_2))\n", @@ -226,30 +179,14 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "cell-9", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "\n", - " basal Endothelial T Cell suprabasal Myofibroblast \n", - " 16039 13538 13031 12471 5103 \n", - " parabasal Fibroblast dividing Myeloid transitioning \n", - " 3282 3109 2971 2698 1816 \n", - " Melanocyte B Cell Muscle Neuronal \n", - " 234 151 120 37 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "celltype_counts <- sort(table(seurat_cn[[GROUP_COL]][, 1]), decreasing = TRUE)\n", "celltype_counts" @@ -262,7 +199,8 @@ "### Sender and Receiver Universe\n", "\n", "The analysis tests communication from abundant sender populations to epithelial receiver states. The sender list controls the source populations considered; the receiver vector controls where condition-specific target programs are evaluated.\n" - ] + ], + "id": "cell03-011" }, { "cell_type": "code", @@ -280,7 +218,8 @@ "\")\n", "cat(\"Comparison:\", IDENT_1, \"vs\", IDENT_2, \"\n", "\")\n" - ] + ], + "id": "cell03-012" }, { "cell_type": "markdown", @@ -289,110 +228,29 @@ "source": [ "## Step 2: Import GRN and Integrate\n", "\n", - "Same as the standard workflow \u2014 the context-specific ligand-target matrix is shared across NicheNet and MultiNicheNet. If you ran Tutorial 02 first, the saved network is loaded to skip the ~10 min integration step.\n", + "Same as the standard workflow — the context-specific ligand-target matrix is shared across NicheNet and MultiNicheNet. This notebook is self-contained: it builds the context-specific network from the GRN. If a cached network from Tutorial 02 exists at the repo-local cache path, it is reused to skip the ~10 min integration step.\n", "\n", "> **Bring your own workflow:** You can extract the ligand-target matrix with `ligand_target_matrix(network)` and use it directly in a [multinichenetr workflow](https://github.com/saeyslab/multinichenetr/blob/main/vignettes/basic_analysis_steps_MISC.md). ContextNet's wrapper (Step 3) handles gene name sanitization, bidirectional contrasts, and LR network loading automatically, but is optional." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "cell-11", "metadata": { "vscode": { "languageId": "r" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\u2192 Loading GRN from: \u001b[34m\u001b[34m/fh/fast/setty_m/user/yhuang2/ContextNet/data/gene_x_tf.csv\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Matrix dimensions: 17226 genes x 701 TFs\n", - "\n", - "\u2192 Normalizing weights per TF...\n", - "\n", - "\u2192 Converting to edge list...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Imported GRN:\n", - "\n", - "TFs: \u001b[34m701\u001b[39m\n", - "\n", - "Targets: \u001b[34m11607\u001b[39m\n", - "\n", - "Edges: \u001b[34m\"2,334,753\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u2500\u2500 \u001b[1m\u001b[1mNetwork Integration\u001b[1m\u001b[22m \u2500\u2500\n", - "\n", - "\n", - "\n", - "\u2192 Loading NicheNet networks...\n", - "\n", - "\u001b[36m\u2139\u001b[39m Loading from: \u001b[34m\u001b[34m/fh/fast/setty_m/user/yhuang2/ContextNet/data\u001b[34m\u001b[39m\n", - "\n", - "\u001b[32m\u2714\u001b[39m Loaded lr_network from \u001b[34m\u001b[34mlr_network_human_21122021.rds\u001b[34m\u001b[39m\n", - "\n", - "\u001b[32m\u2714\u001b[39m Loaded weighted_networks from \u001b[34m\u001b[34mweighted_networks_nsga2r_final.rds\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m Ligands from lr_network: \u001b[34m\u001b[34m1226\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN edges: \u001b[34m\u001b[34m\"2,334,753\"\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN TFs: \u001b[34m\u001b[34m701\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m GRN targets: \u001b[34m\u001b[34m11607\u001b[34m\u001b[39m\n", - "\n", - "\u2192 Integrating networks (mode: \u001b[34m\u001b[34m\"replace\"\u001b[34m\u001b[39m)...\n", - "\n", - "\u001b[36m\u2139\u001b[39m PPR damping_factor: \u001b[34m\u001b[34m0.7886\u001b[34m\u001b[39m\n", - "\n", - "\u001b[36m\u2139\u001b[39m LTF cutoff: \u001b[34m\u001b[34m0.9256\u001b[34m\u001b[39m\n", - "\n", - "\u2192 Constructing ligand-target matrix (this may take a while)...\n", - "\n", - "\u001b[32m\u2714\u001b[39m Constructed ligand-target matrix:\n", - "\n", - "Ligands: \u001b[34m1226\u001b[39m\n", - "\n", - "Targets: \u001b[34m25337\u001b[39m\n", - "\n", - "Non-zero entries: \u001b[34m\"14,217,826\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2500\u2500\u001b[39m \u001b[1mContextNetwork\u001b[22m \u001b[36m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\n", - "\n", - "\n", - "\n", - "Ligands: \u001b[34m\"1,226\"\u001b[39m\n", - "\n", - "Targets: \u001b[34m\"25,337\"\u001b[39m\n", - "\n", - "Integration mode: \u001b[34m\"replace\"\u001b[39m\n", - "\n", - "Signaling edges: \u001b[34m\"3,923,501\"\u001b[39m\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Source GRN: 2334753 edges\n", - "\n", - "\n", - "\n", - "\u001b[36m\u2139\u001b[39m Created: 2026-03-23 22:03:47\n", - "\n" - ] - } - ], + "outputs": [], "source": [ - "# Reuse network from Tutorial 02 if available (saves ~10 min)\n", - "if (file.exists(\"/tmp/contextnet_network.rds\")) {\n", - " network <- readRDS(\"/tmp/contextnet_network.rds\")\n", - " cat(\"Loaded pre-built network\\n\")\n", + "# Self-contained: build the network from the GRN, or reuse the repo-local cache\n", + "# from Tutorial 02 if present (saves ~10 min).\n", + "if (file.exists(NETWORK_CACHE)) {\n", + " network <- readRDS(NETWORK_CACHE)\n", + " cat(\"Loaded cached ContextNetwork from:\", NETWORK_CACHE, \"\\n\")\n", "} else {\n", + " cat(\"No cached network found; building from the GRN (~10 min)...\\n\")\n", " grn <- import_grn(GRN_FILE)\n", " network <- integrate_networks(grn, nichenet_database = NICHENET_DB, mode = \"replace\")\n", "}\n", @@ -408,7 +266,7 @@ "\n", "Key differences from NicheNet:\n", "- `sample_col` is **required** for pseudobulk differential expression\n", - "- `receiver` can be a vector \u2014 MultiNicheNet analyzes all sender-receiver pairs simultaneously\n", + "- `receiver` can be a vector — MultiNicheNet analyzes all sender-receiver pairs simultaneously\n", "- ContextNet automatically handles cell type name sanitization (spaces to dots), gene alias conversion, and bidirectional contrast computation" ] }, @@ -453,14 +311,16 @@ { "cell_type": "markdown", "metadata": {}, - "source": "`result` is still a `ContextResult`, but its primary table comes from MultiNicheNet prioritization rather than a simple NicheNet ligand-activity ranking. The object records the sender/receiver universe, condition contrast, sample column, and thresholds used to generate the prioritization.\n\nUse the same accessors where possible:\n\n| Accessor | What it returns here | Interpretation |\n|----------|----------------------|----------------|\n| `ligand_activities(result)` | activity/prioritization-associated ligand table | differential candidate signals |\n| `top_ligands(result)` | prioritized ligands | ligands to carry into plots and validation |\n| `ligand_target_links(result)` | ligand-target evidence where available | mechanistic target support |\n| `parameters(result)` | sample-aware analysis settings | exact replicate-aware contrast |\n| `as.data.frame(result)` | exportable result table | generic table for filtering/reporting |\n\nFor MultiNicheNet, always interpret results at the sender-receiver-condition level. A high-scoring ligand can reflect a combination of ligand expression, receptor expression, ligand activity, and condition-specific changes; it is not equivalent to a ligand-only DE result." + "source": "`result` is still a `ContextResult`, but its primary table comes from MultiNicheNet prioritization rather than a simple NicheNet ligand-activity ranking. The object records the sender/receiver universe, condition contrast, sample column, and thresholds used to generate the prioritization.\n\nUse the same accessors where possible:\n\n| Accessor | What it returns here | Interpretation |\n|----------|----------------------|----------------|\n| `ligand_activities(result)` | activity/prioritization-associated ligand table | differential candidate signals |\n| `top_ligands(result)` | prioritized ligands | ligands to carry into plots and validation |\n| `ligand_target_links(result)` | ligand-target evidence where available | mechanistic target support |\n| `parameters(result)` | sample-aware analysis settings | exact replicate-aware contrast |\n| `as.data.frame(result)` | exportable result table | generic table for filtering/reporting |\n\nFor MultiNicheNet, always interpret results at the sender-receiver-condition level. A high-scoring ligand can reflect a combination of ligand expression, receptor expression, ligand activity, and condition-specific changes; it is not equivalent to a ligand-only DE result.", + "id": "cell03-018" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": "# Extract exportable data from the MultiNicheNet ContextResult\nmulti_tbl <- as.data.frame(result)\nactivity_tbl <- ligand_activities(result)\nlinks_tbl <- ligand_target_links(result)\nanalysis_params <- parameters(result)\n\ncat(\"Result rows:\", nrow(multi_tbl), \"\\n\")\ncat(\"Activity rows:\", nrow(activity_tbl), \"\\n\")\ncat(\"Ligand-target links:\", nrow(links_tbl), \"\\n\")\n\nhead(multi_tbl, 5)" + "source": "# Extract exportable data from the MultiNicheNet ContextResult\nmulti_tbl <- as.data.frame(result)\nactivity_tbl <- ligand_activities(result)\nlinks_tbl <- ligand_target_links(result)\nanalysis_params <- parameters(result)\n\ncat(\"Result rows:\", nrow(multi_tbl), \"\\n\")\ncat(\"Activity rows:\", nrow(activity_tbl), \"\\n\")\ncat(\"Ligand-target links:\", nrow(links_tbl), \"\\n\")\n\nhead(multi_tbl, 5)", + "id": "cell03-019" }, { "cell_type": "code", @@ -499,7 +359,8 @@ "### Reading the MultiNicheNet Table\n", "\n", "For this workflow, a high-ranked row should be read as a **sample-aware differential communication program**. The score is not only ligand activity; it combines ligand/receptor expression, differential regulation, target activity, and sender-receiver context. Use the table to identify which component supports the path before making a biological claim.\n" - ] + ], + "id": "cell03-021" }, { "cell_type": "code", @@ -612,22 +473,20 @@ }, "outputs": [], "source": [ + "# Map the MultiNicheNet prioritization table into path rows, then scale + threshold.\n", "sankey_raw <- prepare_for_ccflowr(\n", " result,\n", " expression_data = seurat_cn,\n", " network = network,\n", " group_col = GROUP_COL,\n", - " top_n_ligands = 50,\n", - " framework = \"multinichenet\"\n", + " framework = \"multinichenet\",\n", + " top_n_ligands = 50\n", ")\n", - "\n", "sankey_data <- combine_sankey_data(sankey_raw, threshold_quantile = 0.95)\n", "\n", - "cat(\"Raw ccflowR path rows:\", nrow(sankey_raw), \"\n", - "\")\n", - "cat(\"Rows after thresholding:\", nrow(sankey_data), \"\n", - "\")\n", - "head(sankey_data)\n" + "cat(\"Raw ccflowR path rows:\", nrow(sankey_raw), \"\\n\")\n", + "cat(\"Rows after thresholding:\", nrow(sankey_data), \"\\n\")\n", + "head(sankey_data)" ] }, { @@ -699,19 +558,18 @@ ], "metadata": { "kernelspec": { - "display_name": "MultiNicheNet_v2", + "display_name": "R", "language": "R", - "name": "multinichenet_v2" + "name": "ir" }, "language_info": { "codemirror_mode": "r", "file_extension": ".r", "mimetype": "text/x-r-source", "name": "R", - "pygments_lexer": "r", - "version": "4.3.3" + "pygments_lexer": "r" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 5 } diff --git a/notebooks/README.md b/notebooks/README.md index 67f7aef..8a97a52 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -10,6 +10,48 @@ The tutorials are organized around biological questions rather than package func | [02 Standard Workflow](02-standard-workflow.ipynb) | Which sender ligands may explain basal-cell changes between C and N tissue? | Within-receiver condition comparison | ligand activity, target heatmaps, ccflowR Sankey paths | You have a single contrast and want full interpretation/visualization | | [03 Multi-Condition Workflow](03-multicondition-workflow.ipynb) | Which communication programs change reproducibly across samples? | Replicate-aware MultiNicheNet pseudobulk | prioritization table and ccflowR Sankey paths | You have biological replicates and need sample-aware inference | +## Running the Notebooks + +- **Kernel.** The notebooks use the standard IRkernel, registered under the name `ir`. Install it once from R with `IRkernel::installspec()` (see the [micromamba installation guide](../vignettes/installation-micromamba.md)). If your kernel has a different name, either select it in Jupyter or override it on the command line: + + ```bash + jupyter nbconvert --to notebook --execute \ + --ExecutePreprocessor.kernel_name=ir \ + notebooks/01-getting-started.ipynb + ``` + +- **Working directory.** Run a notebook from the repository root or from the `notebooks/` directory. The first setup cell normalizes the working directory to the repository root, so all data paths are relative and portable. + +- **Optional visualization.** [ccflowR](https://github.com/settylab/ccflowR) is optional. Every notebook builds the Sankey *data table* with `prepare_for_ccflowr()` + `combine_sankey_data()` and prints it, then only renders the diagram when ccflowR is installed (`requireNamespace("ccflowR")`). The tutorials run end to end without it. + +- **Outputs are not committed.** Notebooks are stored without executed outputs, so the repository never carries stale results or private absolute paths. Run a notebook locally to regenerate plots and tables. + +## Data Requirements and Example-Data Strategy + +These are **full local-data tutorials**: they read inputs that are present locally rather than shipping a bundled toy dataset. To run them as written you need, under `data/`: + +| Input | File (as used in the tutorials) | Purpose | +|-------|----------------------------------|---------| +| Context-specific GRN | `gene_x_tf.csv` | gene × TF regulatory weights from a GRN inference workflow | +| Seurat object | `seurat_obj.rds` | expression + cell-type / condition / sample metadata | +| NicheNet L-R prior | `lr_network_human_21122021.rds` | ligand-receptor interactions | +| NicheNet weighted prior | `weighted_networks_nsga2r_final.rds` | signaling + regulatory priors for propagation | +| NicheNet L-T matrix (optional) | `ligand_target_matrix_nsga2r_final.rds` | reference only; not used by integration | + +The NicheNet priors are distributed with the official NicheNet v2 tutorials ([Zenodo 7074291](https://zenodo.org/record/7074291)) and can be fetched once with `load_nichenet_data(cache_dir = "data", version = "v2")`. The GRN and Seurat object are your own data; the tutorials use a head-and-neck squamous cell carcinoma (HNSCC) dataset as the worked example. + +**Why no bundled example data?** A realistic run requires a multi-cell-type Seurat object plus the full NicheNet priors (>250 MB for the ligand-target matrix alone), which is too large to ship in the package. If you want a fast smoke test, subset your own Seurat object before running, for example: + +```r +# Small, fast example: keep a few cell types and down-sample cells. +keep <- WhichCells(seurat_obj, expression = Fine_Cell_Types %in% + c("basal", "parabasal", "suprabasal", "Fibroblast", "Myeloid")) +small <- subset(seurat_obj, cells = sample(keep, min(8000, length(keep)))) +saveRDS(small, "data/seurat_obj_small.rds") +``` + +Point `SEURAT_FILE` at the subset. Ligand activity rankings from a small subset are for pipeline testing only, not biological interpretation. + ## How to Interpret the Object Model ContextNet separates the analysis into three object classes: @@ -53,9 +95,19 @@ ccflowR::sankey_flow(sankey_data, cell_colors) Read a ccflowR path as a prioritized model-supported route from sender to receiver. It is not direct proof of secretion, receptor binding, or spatial contact. The strongest interpretation comes when the same path is supported by ligand expression, receptor expression, target-gene changes, regulatory potential, and external biological evidence. +## Troubleshooting + +| Symptom | Likely cause | What to try | +|---------|--------------|-------------| +| Few GRN targets overlap the expression object | Species or gene-symbol mismatch (e.g. mouse vs human, Ensembl IDs vs symbols) | Harmonize gene naming before `import_grn()`; the notebooks warn when overlap is low | +| Empty or near-empty ligand-target matrix | GRN is too sparse or all-zero | Inspect `edges(grn)` density; relax GRN inference thresholds upstream | +| Tiny receiver gene set / unstable ranking | DE contrast yields few genes | Loosen `logfc_threshold` / `pval_threshold`, or pass a curated `geneset_oi` | +| No receptors for top ligands | Receptors not expressed in the receiver, or absent from the L-R prior | Check receptor expression; confirm the correct NicheNet prior version | +| ccflowR Sankey is empty | Threshold too strict | Lower `threshold_quantile` in `combine_sankey_data()` | +| MultiNicheNet FORK/socket errors | Parallel backend issues on the platform | Set `n_cores = 1` (Tutorial 03 default) | + ## Remaining Documentation Gaps to Address Next -- Add small bundled example data so the notebooks can run without private local paths. - Add a dedicated GRN-input tutorial covering contextnet-pipeline, SCENIC+, Pando, and custom edge tables. -- Add a troubleshooting section for gene-name mismatches, sparse GRNs, missing receptors, and empty ccflowR outputs. - Add a comparison tutorial that runs the same contrast with the default NicheNet matrix and the ContextNet matrix to show what biological specificity changes. +- Consider a packaged minimal example object (`inst/extdata/`) once a sufficiently small, shareable dataset is available. diff --git a/vignettes/installation-micromamba.md b/vignettes/installation-micromamba.md index f1b0c20..872de63 100644 --- a/vignettes/installation-micromamba.md +++ b/vignettes/installation-micromamba.md @@ -64,6 +64,22 @@ micromamba create -n contextnet -f environment.yml --override-channels -y Some packages are not available via conda and must be installed from R or GitHub. +### Recommended: one-shot bootstrap + +The package ships an idempotent bootstrap script that installs the Bioconductor +and GitHub-only dependencies that `environment.yml` cannot supply, then installs +ContextNet itself and runs `check_ecosystem()`. Run it once after creating the +environment: + +```bash +micromamba activate contextnet +Rscript inst/bootstrap.R +``` + +It is safe to re-run after upgrading any single dependency; packages already at a +compatible version are skipped. If you prefer to install the pieces by hand, the +manual steps below do the same thing. + ### Activate the environment ```bash @@ -111,6 +127,28 @@ micromamba run -n contextnet R -e " " ``` +### Register the Jupyter R kernel (for the tutorials) + +The tutorial notebooks reference the standard IRkernel under the name `ir`. +Register it once so Jupyter (and `nbconvert`) can find it: + +```bash +micromamba run -n contextnet R -e "IRkernel::installspec(name = 'ir', displayname = 'R')" +``` + +If you run the notebooks under a different kernel name, either select it in +Jupyter or override it on the command line: + +```bash +jupyter nbconvert --to notebook --execute \ + --ExecutePreprocessor.kernel_name=ir \ + notebooks/01-getting-started.ipynb +``` + +The tutorials read data from a local `data/` directory and do not download +anything while running; see [notebooks/README.md](../notebooks/README.md) for the +exact data requirements and an example-data strategy. + ## Verify the Installation ```bash From cfffd018932be2c7f5da344a957122670069d2e1 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Wed, 20 May 2026 10:35:21 -0700 Subject: [PATCH 2/2] Tutorials: apply review #27 nice-to-haves (cosmetic/prose polish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses the 5 nice-to-haves from the independent review (review-27); no must-fix items, no behavior change (notebooks not re-executed). - NB02/NB03: replace literal newlines embedded in cat() strings with "\n" (7 in NB02, 4 in NB03) to match NB01's style; output is byte-identical. - NB02: harmonize the metric name to corrected AUPR / AUPR_c (bar-plot axis, interpretation prose, and heatmap column/legend) — the plotted column is aupr_corrected. - notebooks/README: state the full ~1.8 GB data/ footprint (Seurat ~1.2 GB; LT matrix >250 MB), not just the LT-matrix size. - NB03: drop the dead `contrast_col` variable in the ligand-summary cell. - All notebooks: realign the USER CONFIGURATION ASCII box right border, and note that the abundance-based auto-sender set can include the receiver cell type itself (autocrine). Verified: nbformat 4.5 valid, all code cells R-parse, 0 residual cat bugs, cat() output confirmed identical. Co-Authored-By: Claude Opus 4.7 (1M context) --- notebooks/01-getting-started.ipynb | 5 +++- notebooks/02-standard-workflow.ipynb | 34 ++++++++++------------ notebooks/03-multicondition-workflow.ipynb | 18 +++++------- notebooks/README.md | 2 +- 4 files changed, 28 insertions(+), 31 deletions(-) diff --git a/notebooks/01-getting-started.ipynb b/notebooks/01-getting-started.ipynb index 8fe17fc..2bb3e90 100644 --- a/notebooks/01-getting-started.ipynb +++ b/notebooks/01-getting-started.ipynb @@ -119,7 +119,7 @@ "outputs": [], "source": [ "# ╔══════════════════════════════════════════════════════════════╗\n", - "# ║ USER CONFIGURATION ║\n", + "# ║ USER CONFIGURATION ║\n", "# ║ Paths are relative to the ContextNet project root. ║\n", "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", @@ -459,6 +459,9 @@ "\n", "celltype_counts <- sort(table(seurat_c[[GROUP_COL]][, 1]), decreasing = TRUE)\n", "if (is.null(SENDER)) {\n", + " # Abundance-based, so the auto-set can include the receiver cell type\n", + " # itself as a candidate sender (autocrine); curate SENDER for a\n", + " # focused hypothesis.\n", " SENDER <- names(celltype_counts)[celltype_counts > MIN_CELLS]\n", "}\n", "\n", diff --git a/notebooks/02-standard-workflow.ipynb b/notebooks/02-standard-workflow.ipynb index fcfe713..59759e6 100644 --- a/notebooks/02-standard-workflow.ipynb +++ b/notebooks/02-standard-workflow.ipynb @@ -48,7 +48,7 @@ "outputs": [], "source": [ "# ╔══════════════════════════════════════════════════════════════╗\n", - "# ║ USER CONFIGURATION ║\n", + "# ║ USER CONFIGURATION ║\n", "# ║ Paths are relative to the ContextNet project root. ║\n", "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", @@ -61,8 +61,7 @@ " stop(\"Run this notebook from the ContextNet repository root or from the notebooks/ directory.\")\n", "}\n", "setwd(PROJECT_DIR)\n", - "cat(\"Working directory:\", getwd(), \"\n", - "\")\n", + "cat(\"Working directory:\", getwd(), \"\\n\")\n", "\n", "DATA_PATH <- \"data\"\n", "GRN_FILE <- file.path(DATA_PATH, \"gene_x_tf.csv\")\n", @@ -247,6 +246,9 @@ "source": [ "# Auto-detect senders if not specified\n", "if (is.null(SENDER)) {\n", + " # Abundance-based, so the auto-set can include the receiver cell type\n", + " # itself as a candidate sender (autocrine); curate SENDER for a\n", + " # focused hypothesis.\n", " SENDER <- names(celltype_counts)[celltype_counts > MIN_CELLS]\n", "}\n", "\n", @@ -279,12 +281,9 @@ "head(design_counts[order(design_counts$cell_type, design_counts$condition), ], 20)\n", "\n", "expr_genes <- rownames(seurat_cn)\n", - "cat(\"GRN targets measured:\", length(intersect(targets(grn), expr_genes)), \"/\", length(targets(grn)), \"\n", - "\")\n", - "cat(\"Network targets measured:\", length(intersect(targets(network), expr_genes)), \"/\", length(targets(network)), \"\n", - "\")\n", - "cat(\"Network ligands measured:\", length(intersect(ligands(network), expr_genes)), \"/\", length(ligands(network)), \"\n", - "\")\n" + "cat(\"GRN targets measured:\", length(intersect(targets(grn), expr_genes)), \"/\", length(targets(grn)), \"\\n\")\n", + "cat(\"Network targets measured:\", length(intersect(targets(network), expr_genes)), \"/\", length(targets(network)), \"\\n\")\n", + "cat(\"Network ligands measured:\", length(intersect(ligands(network), expr_genes)), \"/\", length(ligands(network)), \"\\n\")\n" ], "id": "cell02-016" }, @@ -342,12 +341,9 @@ "source": [ "result_params <- parameters(result)\n", "geneset_oi <- result_params$geneset_oi\n", - "cat(\"Receiver genes used for ligand activity:\", length(geneset_oi), \"\n", - "\")\n", - "cat(\"First receiver genes:\", paste(head(geneset_oi, 25), collapse = \", \"), \"\n", - "\")\n", - "cat(\"Genes in ContextNetwork:\", length(intersect(geneset_oi, rownames(ligand_target_matrix(network)))), \"\n", - "\")\n" + "cat(\"Receiver genes used for ligand activity:\", length(geneset_oi), \"\\n\")\n", + "cat(\"First receiver genes:\", paste(head(geneset_oi, 25), collapse = \", \"), \"\\n\")\n", + "cat(\"Genes in ContextNetwork:\", length(intersect(geneset_oi, rownames(ligand_target_matrix(network)))), \"\\n\")\n" ], "id": "cell02-020" }, @@ -480,7 +476,7 @@ "\n", "ggplot(top_act, aes(x = aupr_corrected, y = test_ligand)) +\n", " geom_col(fill = \"#2C7BB6\") +\n", - " labs(x = \"Ligand Activity (AUPR)\", y = NULL,\n", + " labs(x = \"Corrected ligand activity (AUPR_c)\", y = NULL,\n", " title = \"Top 30 Predicted Ligands (Basal Cells, C vs N)\") +\n", " theme_minimal() +\n", " theme(plot.title = element_text(hjust = 0.5, face = \"bold\"))" @@ -491,7 +487,7 @@ "id": "cell-24", "metadata": {}, "source": [ - "**Interpretation**: AUPR (area under precision-recall curve) measures how well a ligand's predicted targets overlap with the condition-specific DE genes in basal cells. Higher AUPR indicates the ligand is more likely driving the gene expression changes observed between contralateral and normal adjacent tissue." + "**Interpretation**: The corrected AUPR (`AUPR_c`) is the area under the precision-recall curve for recovering the condition-specific basal DE genes, corrected against a null distribution of random ligands. Higher `AUPR_c` indicates that the ligand's predicted targets better overlap the genes changing between contralateral and normal adjacent tissue — a stronger candidate upstream regulator (a hypothesis, not proof)." ] }, { @@ -518,14 +514,14 @@ "activity_scores <- activities[activities$test_ligand %in% best_ligands, ]\n", "activity_matrix <- as.matrix(activity_scores[, \"aupr_corrected\", drop = FALSE])\n", "rownames(activity_matrix) <- activity_scores$test_ligand\n", - "colnames(activity_matrix) <- \"AUPR\"\n", + "colnames(activity_matrix) <- \"AUPR_c\"\n", "activity_matrix <- activity_matrix[best_ligands, , drop = FALSE]\n", "\n", "nichenetr::make_heatmap_ggplot(\n", " activity_matrix,\n", " y_name = \"Predicted Ligand\",\n", " x_name = \"\",\n", - " legend_title = \"AUPR\",\n", + " legend_title = \"AUPR_c\",\n", " color = \"darkorange\"\n", ") + ggtitle(\"Ligand Activity Scores\")" ] diff --git a/notebooks/03-multicondition-workflow.ipynb b/notebooks/03-multicondition-workflow.ipynb index 58c54ee..1b72b29 100644 --- a/notebooks/03-multicondition-workflow.ipynb +++ b/notebooks/03-multicondition-workflow.ipynb @@ -65,7 +65,7 @@ "outputs": [], "source": [ "# ╔══════════════════════════════════════════════════════════════╗\n", - "# ║ USER CONFIGURATION ║\n", + "# ║ USER CONFIGURATION ║\n", "# ║ Paths are relative to the ContextNet project root. ║\n", "# ╚══════════════════════════════════════════════════════════════╝\n", "\n", @@ -78,8 +78,7 @@ " stop(\"Run this notebook from the ContextNet repository root or from the notebooks/ directory.\")\n", "}\n", "setwd(PROJECT_DIR)\n", - "cat(\"Working directory:\", getwd(), \"\n", - "\")\n", + "cat(\"Working directory:\", getwd(), \"\\n\")\n", "\n", "DATA_PATH <- \"data\"\n", "GRN_FILE <- file.path(DATA_PATH, \"gene_x_tf.csv\")\n", @@ -209,15 +208,15 @@ "outputs": [], "source": [ "if (is.null(SENDER)) {\n", + " # Abundance-based, so the auto-set can include the receiver cell type\n", + " # itself as a candidate sender (autocrine); curate SENDER for a\n", + " # focused hypothesis.\n", " SENDER <- names(celltype_counts)[celltype_counts > MIN_CELLS]\n", "}\n", "\n", - "cat(\"Senders:\", paste(SENDER, collapse = \", \"), \"\n", - "\")\n", - "cat(\"Receivers:\", paste(RECEIVER, collapse = \", \"), \"\n", - "\")\n", - "cat(\"Comparison:\", IDENT_1, \"vs\", IDENT_2, \"\n", - "\")\n" + "cat(\"Senders:\", paste(SENDER, collapse = \", \"), \"\\n\")\n", + "cat(\"Receivers:\", paste(RECEIVER, collapse = \", \"), \"\\n\")\n", + "cat(\"Comparison:\", IDENT_1, \"vs\", IDENT_2, \"\\n\")\n" ], "id": "cell03-012" }, @@ -337,7 +336,6 @@ "\n", "ligand_col <- if (\"ligand\" %in% colnames(activities)) \"ligand\" else \"test_ligand\"\n", "activity_col <- if (\"activity_scaled\" %in% colnames(activities)) \"activity_scaled\" else \"aupr_corrected\"\n", - "contrast_col <- intersect(c(\"contrast\", \"group\", \"direction_regulation\"), colnames(activities))\n", "\n", "ligand_summary <- activities %>%\n", " group_by(.data[[ligand_col]]) %>%\n", diff --git a/notebooks/README.md b/notebooks/README.md index 8a97a52..e438aa1 100644 --- a/notebooks/README.md +++ b/notebooks/README.md @@ -40,7 +40,7 @@ These are **full local-data tutorials**: they read inputs that are present local The NicheNet priors are distributed with the official NicheNet v2 tutorials ([Zenodo 7074291](https://zenodo.org/record/7074291)) and can be fetched once with `load_nichenet_data(cache_dir = "data", version = "v2")`. The GRN and Seurat object are your own data; the tutorials use a head-and-neck squamous cell carcinoma (HNSCC) dataset as the worked example. -**Why no bundled example data?** A realistic run requires a multi-cell-type Seurat object plus the full NicheNet priors (>250 MB for the ligand-target matrix alone), which is too large to ship in the package. If you want a fast smoke test, subset your own Seurat object before running, for example: +**Why no bundled example data?** A realistic run requires a multi-cell-type Seurat object plus the full NicheNet priors — the local `data/` directory these tutorials read is **~1.8 GB in total** (the Seurat object alone is ~1.2 GB; the optional NicheNet ligand-target matrix is >250 MB), far too large to ship in the package. Provision this space before you start. If you want a fast smoke test, subset your own Seurat object before running, for example: ```r # Small, fast example: keep a few cell types and down-sample cells.