{ "cells": [ { "cell_type": "markdown", "id": "427422b0-4404-488c-8d58-0d44562f3ff7", "metadata": {}, "source": [ "# Alignment and analysis of single-cell RNA-seq data\n", "\n", "The kallisto, bustools and kb-python programs are free, open-source software tools for performing this analysis that together can produce gene expression quantification from raw sequencing reads. In this tutorial, we pre-processed the [pbmc_1k v3 dataset](https://support.10xgenomics.com/single-cell-gene-expression/datasets/3.0.0/pbmc_1k_v3) from 10X Genomics with kallisto and bustools, and then performed an basic analysis.\n", "\n", "We made an improvement in integrating the kallisto, bustools and kb-python program in OmicVerse:\n", "\n", "* **More user-friendly function implementation**: we automated their encapsulation into the ```omicverse.alignment``` class.\n", "\n", "If you found this tutorial helpful, please cite kb-python and OmicVerse:\n", "\n", "* Sullivan, D.K., Min, K.H.(., Hjörleifsson, K.E. et al. kallisto, bustools and kb-python for quantifying bulk, single-cell and single-nucleus RNA-seq. Nature Protocol (2025).\n", "https://doi.org/10.1038/s41596-024-01057-0\n", "\n", "* Melsted, P., Booeshaghi, A.S., Liu, L. et al. Modular, efficient and constant-memory single-cell RNA-seq preprocessing. Nature Biotechnology (2021). https://doi.org/10.1038/s41587-021-00870-2" ] }, { "cell_type": "code", "execution_count": 15, "id": "1174705e-de02-4184-8fc4-9dfeb9f1171b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "🔬 Starting plot initialization...\n", "Using already downloaded Arial font from: /tmp/omicverse_arial.ttf\n", "Registered as: Arial\n", "🧬 Detecting GPU devices…\n", "✅ NVIDIA CUDA GPUs detected: 8\n", " • [CUDA 0] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 1] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 2] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 3] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 4] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 5] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 6] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", " • [CUDA 7] NVIDIA GeForce RTX 4090 D\n", " Memory: 23.6 GB | Compute: 8.9\n", "✅ plot_set complete.\n", "\n" ] } ], "source": [ "import omicverse as ov\n", "import scanpy as sc\n", "import pandas as pd\n", "import numpy as np\n", "ov.plot_set(font_path='Arial')" ] }, { "cell_type": "markdown", "id": "047254b1-607f-4b78-a30a-eb30b2555fd7", "metadata": {}, "source": [ "## Download human reference files and build the index\n", "We build a human cDNA and intron index from the human genome and annotations provided by Ensembl." ] }, { "cell_type": "code", "execution_count": 2, "id": "8e9113bf-c455-4e70-85a1-d99ec7234f12", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2025-10-23 10:16:40-- ftp://ftp.ensembl.org/pub/release-108/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz\n", " => ‘pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz’\n", "Resolving ftp.ensembl.org (ftp.ensembl.org)... 193.62.193.169\n", "Connecting to ftp.ensembl.org (ftp.ensembl.org)|193.62.193.169|:21... connected.\n", "Logging in as anonymous ... Logged in!\n", "==> SYST ... done. ==> PWD ... done.\n", "==> TYPE I ... done. ==> CWD (1) /pub/release-108/fasta/homo_sapiens/dna ... done.\n", "==> SIZE Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz ... 881211416\n", "==> PASV ... done. ==> RETR Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz ... done.\n", "Length: 881211416 (840M) (unauthoritative)\n", "\n", "Homo_sapiens.GRCh38 100%[===================>] 840.39M 360KB/s in 13m 48s \n", "\n", "2025-10-23 10:30:32 (1.02 MB/s) - ‘pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz’ saved [881211416]\n", "\n", "--2025-10-23 10:30:32-- ftp://ftp.ensembl.org/pub/release-108/gtf/homo_sapiens/Homo_sapiens.GRCh38.108.gtf.gz\n", " => ‘pbmc_1k_v3/Homo_sapiens.GRCh38.108.gtf.gz’\n", "Resolving ftp.ensembl.org (ftp.ensembl.org)... 193.62.193.169\n", "Connecting to ftp.ensembl.org (ftp.ensembl.org)|193.62.193.169|:21... connected.\n", "Logging in as anonymous ... Logged in!\n", "==> SYST ... done. ==> PWD ... done.\n", "==> TYPE I ... done. ==> CWD (1) /pub/release-108/gtf/homo_sapiens ... done.\n", "==> SIZE Homo_sapiens.GRCh38.108.gtf.gz ... 54107597\n", "==> PASV ... done. ==> RETR Homo_sapiens.GRCh38.108.gtf.gz ... done.\n", "Length: 54107597 (52M) (unauthoritative)\n", "\n", "Homo_sapiens.GRCh38 100%[===================>] 51.60M 1.26MB/s in 46s \n", "\n", "2025-10-23 10:31:22 (1.12 MB/s) - ‘pbmc_1k_v3/Homo_sapiens.GRCh38.108.gtf.gz’ saved [54107597]\n", "\n", "CPU times: user 16.4 s, sys: 4.12 s, total: 20.5 s\n", "Wall time: 14min 42s\n" ] } ], "source": [ "%%time\n", "!wget -P pbmc_1k_v3 ftp://ftp.ensembl.org/pub/release-108/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz\n", "!wget -P pbmc_1k_v3 ftp://ftp.ensembl.org/pub/release-108/gtf/homo_sapiens/Homo_sapiens.GRCh38.108.gtf.gz" ] }, { "cell_type": "code", "execution_count": 5, "id": "7fad1afc-907c-4c31-bc3e-7874e4f880c8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[95m🚀 Starting ref workflow: standard\u001b[0m\n", "\u001b[96m>> /opt/miniforge/envs/omicverse_working/bin/kb ref -i pbmc_1k_v3/index.idx -g pbmc_1k_v3/t2g.txt -t 8 --d-list-overhang 1 -f1 pbmc_1k_v3/cdna.fa pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz pbmc_1k_v3/Homo_sapiens.GRCh38.108.gtf.gz\u001b[0m\n", "[2025-10-29 06:28:04,671] INFO [ref] Preparing pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz, pbmc_1k_v3/Homo_sapiens.GRCh38.108.gtf.gz\n", "[2025-10-29 06:29:09,670] INFO [ref] Splitting genome pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz into cDNA at /data/hulei/Projects/Omicverse_2/omicverse_update/tmp/tmpggg2bozs\n", "[2025-10-29 06:30:43,695] INFO [ref] Concatenating 1 cDNAs to pbmc_1k_v3/cdna.fa\n", "[2025-10-29 06:30:48,774] INFO [ref] Creating transcript-to-gene mapping at pbmc_1k_v3/t2g.txt\n", "[2025-10-29 06:30:51,120] INFO [ref] Indexing pbmc_1k_v3/cdna.fa to pbmc_1k_v3/index.idx\n", "\u001b[92m✓ ref workflow completed!\u001b[0m\n", "dict_keys(['workflow', 'technology', 'parameters', 'index_path', 't2g_path', 'cdna_path'])\n" ] } ], "source": [ "result = ov.alignment.single.ref(\n", " fasta_paths='pbmc_1k_v3/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz', #input\n", " gtf_paths='pbmc_1k_v3/Homo_sapiens.GRCh38.108.gtf.gz', #input\n", " index_path='pbmc_1k_v3/index.idx', #output\n", " t2g_path='pbmc_1k_v3/t2g.txt', #output\n", " cdna_path='pbmc_1k_v3/cdna.fa', #output\n", ")\n", "print(result.keys())" ] }, { "cell_type": "markdown", "id": "f5f55d4a-d4ce-46e8-861d-ca275e9c81cc", "metadata": {}, "source": [ "## Generate RNA count matrices\n", "The following command will generate an RNA count matrix of cells (rows) by genes (columns) in H5AD format, which is a binary format used to store Anndata objects. Notice that this requires providing the index and transcript-to-gene mapping downloaded in the previous step to the ```index_path``` and ```t2g_path``` arguments respectively. Also, since the reads were generated with the 10x Genomics Chromium Single Cell v3 Chemistry, the technology ```10xv3``` argument is used.\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "4690d72f-4f47-4292-a637-69c7507fdeb2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m\u001b[95m🚀 Starting count workflow: standard\u001b[0m\n", "\u001b[96m Technology: 10XV3\u001b[0m\n", "\u001b[96m Output directory: pbmc_1k_v3\u001b[0m\n", "\u001b[96m>> /opt/miniforge/envs/omicverse_working/bin/kb count -i pbmc_1k_v3/index.idx -g pbmc_1k_v3/t2g.txt -x 10XV3 -o pbmc_1k_v3 -t 2 -m 2G --filter bustools --h5ad pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R1_001.fastq.gz pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R2_001.fastq.gz pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R1_001.fastq.gz pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R2_001.fastq.gz\u001b[0m\n", "[2025-10-29 06:39:41,021] INFO [count] Using index pbmc_1k_v3/index.idx to generate BUS file to pbmc_1k_v3 from\n", "[2025-10-29 06:39:41,022] INFO [count] pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R1_001.fastq.gz\n", "[2025-10-29 06:39:41,022] INFO [count] pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R2_001.fastq.gz\n", "[2025-10-29 06:39:41,022] INFO [count] pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R1_001.fastq.gz\n", "[2025-10-29 06:39:41,022] INFO [count] pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R2_001.fastq.gz\n", "[2025-10-29 06:54:09,339] INFO [count] Sorting BUS file pbmc_1k_v3/output.bus to pbmc_1k_v3/tmp/output.s.bus\n", "[2025-10-29 06:54:20,157] INFO [count] On-list not provided\n", "[2025-10-29 06:54:20,158] INFO [count] Copying pre-packaged 10XV3 on-list to pbmc_1k_v3\n", "[2025-10-29 06:54:21,859] INFO [count] Inspecting BUS file pbmc_1k_v3/tmp/output.s.bus\n", "[2025-10-29 06:54:29,973] INFO [count] Correcting BUS records in pbmc_1k_v3/tmp/output.s.bus to pbmc_1k_v3/tmp/output.s.c.bus with on-list pbmc_1k_v3/10x_version3_whitelist.txt\n", "[2025-10-29 06:54:44,096] INFO [count] Sorting BUS file pbmc_1k_v3/tmp/output.s.c.bus to pbmc_1k_v3/output.unfiltered.bus\n", "[2025-10-29 06:54:52,412] INFO [count] Generating count matrix pbmc_1k_v3/counts_unfiltered/cells_x_genes from BUS file pbmc_1k_v3/output.unfiltered.bus\n", "[2025-10-29 06:55:00,914] INFO [count] Writing gene names to file pbmc_1k_v3/counts_unfiltered/cells_x_genes.genes.names.txt\n", "[2025-10-29 06:55:01,271] WARNING [count] 22736 gene IDs do not have corresponding valid gene names. These genes will use their gene IDs instead.\n", "[2025-10-29 06:55:01,314] INFO [count] Reading matrix pbmc_1k_v3/counts_unfiltered/cells_x_genes.mtx\n", "[2025-10-29 06:55:05,177] INFO [count] Writing matrix to h5ad pbmc_1k_v3/counts_unfiltered/adata.h5ad\n", "[2025-10-29 06:55:05,880] INFO [count] Filtering with bustools\n", "[2025-10-29 06:55:05,880] INFO [count] Generating on-list pbmc_1k_v3/filter_barcodes.txt from BUS file pbmc_1k_v3/output.unfiltered.bus\n", "[2025-10-29 06:55:07,084] INFO [count] Correcting BUS records in pbmc_1k_v3/output.unfiltered.bus to pbmc_1k_v3/tmp/output.unfiltered.c.bus with on-list pbmc_1k_v3/filter_barcodes.txt\n", "[2025-10-29 06:55:14,096] INFO [count] Sorting BUS file pbmc_1k_v3/tmp/output.unfiltered.c.bus to pbmc_1k_v3/output.filtered.bus\n", "[2025-10-29 06:55:21,810] INFO [count] Generating count matrix pbmc_1k_v3/counts_filtered/cells_x_genes from BUS file pbmc_1k_v3/output.filtered.bus\n", "[2025-10-29 06:55:28,532] INFO [count] Writing gene names to file pbmc_1k_v3/counts_filtered/cells_x_genes.genes.names.txt\n", "[2025-10-29 06:55:28,914] WARNING [count] 22736 gene IDs do not have corresponding valid gene names. These genes will use their gene IDs instead.\n", "[2025-10-29 06:55:28,959] INFO [count] Reading matrix pbmc_1k_v3/counts_filtered/cells_x_genes.mtx\n", "[2025-10-29 06:55:31,769] INFO [count] Writing matrix to h5ad pbmc_1k_v3/counts_filtered/adata.h5ad\n", "\u001b[92m✓ count workflow completed!\u001b[0m\n", "dict_keys(['workflow', 'technology', 'output_path', 'parameters'])\n" ] } ], "source": [ "result = ov.alignment.single.count(\n", " fastq_paths=['pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R1_001.fastq.gz', #input\n", " 'pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L001_R2_001.fastq.gz', #input\n", " 'pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R1_001.fastq.gz', #input\n", " 'pbmc_1k_v3/pbmc_1k_v3_fastqs/pbmc_1k_v3_S1_L002_R2_001.fastq.gz'], #input\n", " index_path='pbmc_1k_v3/index.idx', #input\n", " t2g_path='pbmc_1k_v3/t2g.txt', #input\n", " technology='10XV3', # technology\n", " output_path='pbmc_1k_v3', #output\n", " h5ad=True,\n", " filter_barcodes=True,\n", " threads=2\n", ")\n", "print(result.keys())" ] }, { "cell_type": "markdown", "id": "dcc415f1-16ed-40f4-a004-6617a50b309f", "metadata": {}, "source": [ "## Analysis\n", "\n", "In this part of the tutorial, we will load the RNA count matrix generated by kb count into Python and analyse them using the omicverse pipeline.\n", "\n", "You can find detailed information about these codes in this [website](https://omicverse.readthedocs.io/en/latest/Tutorials-single/t_preprocess_cpu).\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "b0c76128-bfba-4e83-892c-f09a1281fa31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1194 × 62703" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata = sc.read_h5ad(\"pbmc_1k_v3/counts_filtered/adata.h5ad\")\n", "var_names = pd.read_csv(\"pbmc_1k_v3/counts_filtered/cells_x_genes.genes.names.txt\",\n", " index_col=[0],header=None)\n", "adata.var_names = var_names.index.tolist()\n", "adata" ] }, { "cell_type": "code", "execution_count": 9, "id": "81061850-0a6f-413c-9703-635e19f7f8c7", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[95m\u001b[1m🖥️ Using CPU mode for QC...\u001b[0m\n", "\n", "\u001b[95m\u001b[1m📊 Step 1: Calculating QC Metrics\u001b[0m\n", " \u001b[96mMitochondrial genes (prefix 'MT-'): \u001b[1m37\u001b[0m\u001b[96m found\u001b[0m\n", " \u001b[92m✓ QC metrics calculated:\u001b[0m\n", " \u001b[94m• Mean nUMIs: \u001b[1m8081\u001b[0m\u001b[94m (range: 845-59145)\u001b[0m\n", " \u001b[94m• Mean genes: \u001b[1m2222\u001b[0m\u001b[94m (range: 21-6863)\u001b[0m\n", " \u001b[94m• Mean mitochondrial %: \u001b[1m13.7%\u001b[0m\u001b[94m (max: 98.6%)\u001b[0m\n", " \u001b[96m📈 Original cell count: \u001b[1m1,194\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔧 Step 2: Quality Filtering (SEURAT)\u001b[0m\n", " \u001b[96mThresholds: mito≤0.2, nUMIs≥500, genes≥250\u001b[0m\n", " \u001b[94m📊 Seurat Filter Results:\u001b[0m\n", " \u001b[96m• nUMIs filter (≥500): \u001b[1m0\u001b[0m\u001b[96m cells failed (0.0%)\u001b[0m\n", " \u001b[96m• Genes filter (≥250): \u001b[1m15\u001b[0m\u001b[96m cells failed (1.3%)\u001b[0m\n", " \u001b[96m• Mitochondrial filter (≤0.2): \u001b[1m89\u001b[0m\u001b[96m cells failed (7.5%)\u001b[0m\n", " \u001b[92m✓ Filters applied successfully\u001b[0m\n", " \u001b[92m✓ Combined QC filters: \u001b[1m89\u001b[0m\u001b[92m cells removed (7.5%)\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🎯 Step 3: Final Filtering\u001b[0m\n", " \u001b[96mParameters: min_genes=200, min_cells=3\u001b[0m\n", " \u001b[96mRatios: max_genes_ratio=1, max_cells_ratio=1\u001b[0m\n", "filtered out 43156 genes that are detected in less than 3 cells\n", " \u001b[92m✓ Final filtering: \u001b[1m0\u001b[0m\u001b[92m cells, \u001b[1m43,156\u001b[0m\u001b[92m genes removed\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Step 4: Doublet Detection\u001b[0m\n", " \u001b[93m⚠️ Note: 'scrublet' detection is too old and may not work properly\u001b[0m\n", " \u001b[96m💡 Consider using 'doublets_method=sccomposite' for better results\u001b[0m\n", " \u001b[92m🔍 Running scrublet doublet detection...\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Running Scrublet Doublet Detection:\u001b[0m\n", " \u001b[96mMode: \u001b[1mcpu\u001b[0m\n", " \u001b[96mComputing doublet prediction using Scrublet algorithm\u001b[0m\n", " \u001b[92m🔍 Filtering genes and cells...\u001b[0m\n", " \u001b[92m🔍 Normalizing data and selecting highly variable genes...\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Count Normalization:\u001b[0m\n", " \u001b[96mTarget sum: \u001b[1mmedian\u001b[0m\n", " \u001b[96mExclude highly expressed: \u001b[1mFalse\u001b[0m\n", "\n", "\u001b[92m✅ Count Normalization Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Processed: \u001b[1m1,105\u001b[0m\u001b[92m cells × \u001b[1m19,547\u001b[0m\u001b[92m genes\u001b[0m\n", " \u001b[92m✓ Runtime: \u001b[1m0.00s\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Highly Variable Genes Selection:\u001b[0m\n", " \u001b[96mMethod: \u001b[1mseurat\u001b[0m\n", " ⚠️ \u001b[93mGene indices \u001b[1m[3676]\u001b[0m\u001b[93m fell into a single bin: normalized dispersion set to 1\u001b[0m\n", " \u001b[93m💡 Consider decreasing `n_bins` to avoid this effect\u001b[0m\n", "\n", "\u001b[92m✅ HVG Selection Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Selected: \u001b[1m2,865\u001b[0m\u001b[92m highly variable genes out of \u001b[1m19,547\u001b[0m\u001b[92m total (14.7%)\u001b[0m\n", " \u001b[92m✓ Results added to AnnData object:\u001b[0m\n", " \u001b[96m• 'highly_variable': \u001b[1mBoolean vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'means': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'dispersions': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'dispersions_norm': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[92m🔍 Simulating synthetic doublets...\u001b[0m\n", " \u001b[92m🔍 Normalizing observed and simulated data...\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Count Normalization:\u001b[0m\n", " \u001b[96mTarget sum: \u001b[1m1000000.0\u001b[0m\n", " \u001b[96mExclude highly expressed: \u001b[1mFalse\u001b[0m\n", "\n", "\u001b[92m✅ Count Normalization Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Processed: \u001b[1m1,105\u001b[0m\u001b[92m cells × \u001b[1m2,865\u001b[0m\u001b[92m genes\u001b[0m\n", " \u001b[92m✓ Runtime: \u001b[1m0.00s\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Count Normalization:\u001b[0m\n", " \u001b[96mTarget sum: \u001b[1m1000000.0\u001b[0m\n", " \u001b[96mExclude highly expressed: \u001b[1mFalse\u001b[0m\n", "\n", "\u001b[92m✅ Count Normalization Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Processed: \u001b[1m2,210\u001b[0m\u001b[92m cells × \u001b[1m2,865\u001b[0m\u001b[92m genes\u001b[0m\n", " \u001b[92m✓ Runtime: \u001b[1m0.01s\u001b[0m\n", " \u001b[92m🔍 Embedding transcriptomes using PCA...\u001b[0m\n", " \u001b[92m🔍 Calculating doublet scores...\u001b[0m\n", " using data matrix X directly\n", " \u001b[92m🔍 Calling doublets with threshold detection...\u001b[0m\n", " \u001b[96m📊 Automatic threshold: \u001b[1m0.192\u001b[0m\n", " \u001b[96m📈 Detected doublet rate: \u001b[1m1.0%\u001b[0m\n", " \u001b[96m🔍 Detectable doublet fraction: \u001b[1m51.4%\u001b[0m\n", " \u001b[94m📊 Overall doublet rate comparison:\u001b[0m\n", " \u001b[96m• Expected: \u001b[1m5.0%\u001b[0m\n", " \u001b[96m• Estimated: \u001b[1m1.9%\u001b[0m\n", "\n", "\u001b[92m✅ Scrublet Analysis Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Results added to AnnData object:\u001b[0m\n", " \u001b[96m• 'doublet_score': \u001b[1mDoublet scores\u001b[0m\u001b[96m (adata.obs)\u001b[0m\n", " \u001b[96m• 'predicted_doublet': \u001b[1mBoolean predictions\u001b[0m\u001b[96m (adata.obs)\u001b[0m\n", " \u001b[96m• 'scrublet': \u001b[1mParameters and metadata\u001b[0m\u001b[96m (adata.uns)\u001b[0m\n", " \u001b[92m✓ Scrublet completed: \u001b[1m11\u001b[0m\u001b[92m doublets removed (1.0%)\u001b[0m\n", "CPU times: user 22.8 s, sys: 16.7 s, total: 39.5 s\n", "Wall time: 3.98 s\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1094 × 19547\n", " obs: 'nUMIs', 'mito_perc', 'detected_genes', 'cell_complexity', 'passing_mt', 'passing_nUMIs', 'passing_ngenes', 'n_genes', 'doublet_score', 'predicted_doublet'\n", " var: 'mt', 'n_cells'\n", " uns: 'scrublet', 'status', 'status_args', 'REFERENCE_MANU'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "adata=ov.pp.qc(adata,\n", " tresh={'mito_perc': 0.2, 'nUMIs': 500, 'detected_genes': 250},\n", " doublets_method='scrublet',\n", " batch_key=None)\n", "adata" ] }, { "cell_type": "code", "execution_count": 10, "id": "2195e675-45ab-476b-997f-29004fef3f62", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "🔍 [2025-10-29 06:55:37] Running preprocessing in 'cpu' mode...\n", "\u001b[96mBegin robust gene identification\u001b[0m\n", "\u001b[94m After filtration, 19547/19547 genes are kept.\u001b[0m\n", "\u001b[94m Among 19547 genes, 19547 genes are robust.\u001b[0m\n", "✅ Robust gene identification completed successfully.\n", "\u001b[96mBegin size normalization: shiftlog and HVGs selection pearson\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Count Normalization:\u001b[0m\n", " \u001b[96mTarget sum: \u001b[1m500000.0\u001b[0m\n", " \u001b[96mExclude highly expressed: \u001b[1mTrue\u001b[0m\n", " \u001b[96mMax fraction threshold: \u001b[1m0.2\u001b[0m\n", " ⚠️ \u001b[93mExcluding \u001b[1m1\u001b[0m\u001b[93m highly-expressed genes from normalization computation\u001b[0m\n", " \u001b[93mExcluded genes: \u001b[1m['IGKC']\u001b[0m\n", "\n", "\u001b[92m✅ Count Normalization Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Processed: \u001b[1m1,094\u001b[0m\u001b[92m cells × \u001b[1m19,547\u001b[0m\u001b[92m genes\u001b[0m\n", " \u001b[92m✓ Runtime: \u001b[1m0.16s\u001b[0m\n", "\n", "\u001b[95m\u001b[1m🔍 Highly Variable Genes Selection (Experimental):\u001b[0m\n", " \u001b[96mMethod: \u001b[1mpearson_residuals\u001b[0m\n", " \u001b[96mTarget genes: \u001b[1m2,000\u001b[0m\n", " \u001b[96mTheta (overdispersion): \u001b[1m100\u001b[0m\n", "\n", "\u001b[92m✅ Experimental HVG Selection Completed Successfully!\u001b[0m\n", " \u001b[92m✓ Selected: \u001b[1m2,000\u001b[0m\u001b[92m highly variable genes out of \u001b[1m19,547\u001b[0m\u001b[92m total (10.2%)\u001b[0m\n", " \u001b[92m✓ Results added to AnnData object:\u001b[0m\n", " \u001b[96m• 'highly_variable': \u001b[1mBoolean vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'highly_variable_rank': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'highly_variable_nbatches': \u001b[1mInt vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'highly_variable_intersection': \u001b[1mBoolean vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'means': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'variances': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", " \u001b[96m• 'residual_variances': \u001b[1mFloat vector\u001b[0m\u001b[96m (adata.var)\u001b[0m\n", "\u001b[94m Time to analyze data in cpu: 2.02 seconds.\u001b[0m\n", "✅ Preprocessing completed successfully.\n", "\u001b[92m Added:\u001b[0m\n", "\u001b[96m 'highly_variable_features', boolean vector (adata.var)\u001b[0m\n", "\u001b[96m 'means', float vector (adata.var)\u001b[0m\n", "\u001b[96m 'variances', float vector (adata.var)\u001b[0m\n", "\u001b[96m 'residual_variances', float vector (adata.var)\u001b[0m\n", "\u001b[96m 'counts', raw counts layer (adata.layers)\u001b[0m\n", "\u001b[94m End of size normalization: shiftlog and HVGs selection pearson\u001b[0m\n", "CPU times: user 4.49 s, sys: 6.26 s, total: 10.8 s\n", "Wall time: 2.08 s\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1094 × 19547\n", " obs: 'nUMIs', 'mito_perc', 'detected_genes', 'cell_complexity', 'passing_mt', 'passing_nUMIs', 'passing_ngenes', 'n_genes', 'doublet_score', 'predicted_doublet'\n", " var: 'mt', 'n_cells', 'percent_cells', 'robust', 'means', 'variances', 'residual_variances', 'highly_variable_rank', 'highly_variable_features'\n", " uns: 'scrublet', 'status', 'status_args', 'REFERENCE_MANU', 'log1p', 'hvg'\n", " layers: 'counts'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "adata=ov.pp.preprocess(adata,mode='shiftlog|pearson',n_HVGs=2000,\n", " target_sum=50*1e4)\n", "adata" ] }, { "cell_type": "code", "execution_count": 11, "id": "41137826-0d26-4f6a-b1f3-09d2d90c5acb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.04 ms, sys: 4.04 ms, total: 8.07 ms\n", "Wall time: 7.41 ms\n" ] }, { "data": { "text/plain": [ "View of AnnData object with n_obs × n_vars = 1094 × 2000\n", " obs: 'nUMIs', 'mito_perc', 'detected_genes', 'cell_complexity', 'passing_mt', 'passing_nUMIs', 'passing_ngenes', 'n_genes', 'doublet_score', 'predicted_doublet'\n", " var: 'mt', 'n_cells', 'percent_cells', 'robust', 'means', 'variances', 'residual_variances', 'highly_variable_rank', 'highly_variable_features'\n", " uns: 'scrublet', 'status', 'status_args', 'REFERENCE_MANU', 'log1p', 'hvg'\n", " layers: 'counts'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "adata.raw = adata\n", "adata = adata[:, adata.var.highly_variable_features]\n", "adata" ] }, { "cell_type": "code", "execution_count": 12, "id": "9be1d0c7-2032-4a00-89d8-c2881baffe37", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1.46 s, sys: 4.36 s, total: 5.82 s\n", "Wall time: 715 ms\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1094 × 2000\n", " obs: 'nUMIs', 'mito_perc', 'detected_genes', 'cell_complexity', 'passing_mt', 'passing_nUMIs', 'passing_ngenes', 'n_genes', 'doublet_score', 'predicted_doublet'\n", " var: 'mt', 'n_cells', 'percent_cells', 'robust', 'means', 'variances', 'residual_variances', 'highly_variable_rank', 'highly_variable_features'\n", " uns: 'scrublet', 'status', 'status_args', 'REFERENCE_MANU', 'log1p', 'hvg'\n", " layers: 'counts', 'scaled'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "ov.pp.scale(adata)\n", "adata" ] }, { "cell_type": "code", "execution_count": 13, "id": "de5b829a-578c-4394-af6d-046930816922", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "computing PCA🔍\n", " with n_comps=50\n", " 🖥️ Using sklearn PCA for CPU computation\n", " \u001b[96m🖥️ sklearn PCA backend: CPU computation\u001b[0m\n", " finished✅ (0:00:00)\n", "CPU times: user 5.97 s, sys: 23.4 s, total: 29.3 s\n", "Wall time: 593 ms\n" ] }, { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 1094 × 2000\n", " obs: 'nUMIs', 'mito_perc', 'detected_genes', 'cell_complexity', 'passing_mt', 'passing_nUMIs', 'passing_ngenes', 'n_genes', 'doublet_score', 'predicted_doublet'\n", " var: 'mt', 'n_cells', 'percent_cells', 'robust', 'means', 'variances', 'residual_variances', 'highly_variable_rank', 'highly_variable_features'\n", " uns: 'scrublet', 'status', 'status_args', 'REFERENCE_MANU', 'log1p', 'hvg', 'pca', 'scaled|original|pca_var_ratios', 'scaled|original|cum_sum_eigenvalues'\n", " obsm: 'X_pca', 'scaled|original|X_pca'\n", " varm: 'PCs', 'scaled|original|pca_loadings'\n", " layers: 'counts', 'scaled'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "ov.pp.pca(adata,layer='scaled',n_pcs=50)\n", "adata" ] }, { "cell_type": "code", "execution_count": 14, "id": "8d0164e5-b466-44b1-9e80-250502f1e3cf", "metadata": {}, "outputs": [ { "data": { "image/png": "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Pf/euXNnFfaEiOo6Bi+iWuLqq6/2/Pvbb79FYWGh5n1o06aN59+5ubmaP395XC6X59+SJFVhT4iormPwIqolxo8f79n8OTc3F88//7zf17Db7ZUKJmlpaZ5/B6qkRSCUHH1r0KBBFfaEiOo6Bi+iWsJkMuG1117zfP7uu+/is88+U33+kSNH0LdvX08trszMTGzbtk31+ZmZmfj11189n/fq1Uv1ucGUlpaGGTNmeD6/7LLLqrA3RFTXMXgR1SITJkzApEmTALi3zrn77rsxceJEnDhxotxzTp8+jSeffBIdOnQoFbTS09NxySWXYOTIkfj5559ht9vLvcb+/ftxxRVXeFZThoaG4oYbbgjQV1XWsWPHMHr0aKxevdpTysKbrVu3YsiQIcjIyADg3gap5C1ZIiKtsY4XUS3z8ccfw2Kx4P333wcAzJo1C1999RW6d++Onj17Ii4uDoA7cG3duhVbt271hBdBECCKpf8eW7x4MRYvXoyQkBB0794dnTp1QlxcHPR6PdLS0rB161asX78esix7rvHee+8hISEhaF+joihYsGABFixYgPj4ePTu3RutWrVCZGQkXC4XTp8+7ak1dk54eDhmz54Ns9kctH4REVWEwYuoltHpdHjvvfcwYMAAPP/88/j3338hyzI2b96MzZs3l3vepZdeijfeeAPh4eEAgMjISPTo0QNbtmwBABQWFmLVqlVYtWpVuddISEjA+++/jzFjxgT2i7pAyXB4+vTpUrc4venZsydmzpxZanUjEVFVYPAiqqXGjRuH6667DkuWLMEff/yBdevW4fTp08jIyIBer0dMTAzat2+Pvn374sYbb0TLli1LnR8fH4/NmzcjJSUFf/31F9atW4fdu3fj8OHDyMnJgaIoCAsLQ1JSEjp16oSRI0fi6quvhtVqDfrX1qhRIxw9ehRLlizB+vXrsWvXLhw7dgx5eXnQ6XSIiIhAs2bN0L17d4wdOxYDBw6EIAhB7xcRUUUExdcECSIiIiIKGE6uJyIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0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+cDgRURENV5kmBXP33t1he0u69MeI/qzOj1VHZaTICKiGkl2OlC4fSNsyXsByQV9dBy+Oy7jqS+Ww+kquzn2qMFd8fX/7kaIxVQFvSVyY/AiIqIap2D7JmT+/CXkooLSBwQBujZd8Z2zMdbsPAKnS0LrJgm4c8wgdGndqGo6S1QCgxcREdUohTu3IO2b9wEfb1/mlu0RP+kJCDpWpKfqhXO8iIioxlAkCZm/feMzdAFAcfIeFO7aolGviNRj8CIiohqjaO82SLnZqtrmr/8ryL0h8h+DFxER1RjFh/9V3/ZoMjibhqobBi8iIqo5ZFl9W0Wp8JYkkdYYvIiIqMYw1EtQ3za2PgSRb3NUvfAnkoiIaozQbv0gGNRVqA/rNSTIvSHyH4MXERHVGKLFivCBwytsp4uMQWjPQRr0iMg/DF5ERFSjRA0fi7A+Q8s9ro+KRfzdT0FnDdGwV0TqsIAqERHVSMVHk5G3fhmKk3dDcbmgj6mHsF6DEdqtL0STuaq7R+QVgxcRERGRRnirkYiIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINMLgRURERKQRBi8iIiIijTB4EREREWmEwYuIiIhIIwxeRERERBph8CIiIiLSCIMXERERkUYYvIiIiIg0wuBFREREpBEGLyIiIiKNMHgRERERaYTBi4iIiEgjDF5EREREGmHwIiIiItIIgxcRERGRRhi8iIiIiDTC4EVERESkEQYvIiIiIo0weBERERFphMGLiIiISCMMXkREREQaYfAiIiIi0giDFxEREZFGGLyIiIiINKKv6g4QERER4Mw4A9v+7VDsxdCFhsPSsQd01tCq7hYFmKAoilLVnSAiIqqrXDmZyP7taxQf3AOUeEsW9AZYu/RF5JU3QjQY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", "text/plain": [ "
" ] }, "metadata": { "image/png": { "height": 287, "width": 303 } }, "output_type": "display_data" } ], "source": [ "adata.obsm['X_pca']=adata.obsm['scaled|original|X_pca']\n", "ov.pl.embedding(adata,\n", " basis='X_pca',\n", " color='CST3',\n", " frameon='small')" ] }, { "cell_type": "code", "execution_count": null, "id": "d31ac1ba-fcea-447b-a3b9-235e77e0dc3a", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }