From d5c1665f3bdaab97d94fafd03a3f875b3766c67e Mon Sep 17 00:00:00 2001 From: Stefan Lang Date: Fri, 26 Jan 2024 15:33:17 +0100 Subject: [PATCH] I really have problems with BD's test data --- .../BD_results/CanNotReproduceBDsResults.html | 18085 ++++++++++++++++ .../CanNotReproduceBDsResults.ipynb | 2336 ++ 2 files changed, 20421 insertions(+) create mode 100644 testData/BD_results/CanNotReproduceBDsResults.html create mode 100644 testData/BD_results/CanNotReproduceBDsResults.ipynb diff --git a/testData/BD_results/CanNotReproduceBDsResults.html b/testData/BD_results/CanNotReproduceBDsResults.html new file mode 100644 index 0000000..796173b --- /dev/null +++ b/testData/BD_results/CanNotReproduceBDsResults.html @@ -0,0 +1,18085 @@ + + + + + +CanNotReproduceBDsResults + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ +
+ + + + +
+
+ +
+ + + + +
+
+ +
+ + + + +
+
+ +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+
+ +
+ + +
+ + +
+ + + + + + + + + diff --git a/testData/BD_results/CanNotReproduceBDsResults.ipynb b/testData/BD_results/CanNotReproduceBDsResults.ipynb new file mode 100644 index 0000000..ae825d7 --- /dev/null +++ b/testData/BD_results/CanNotReproduceBDsResults.ipynb @@ -0,0 +1,2336 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c9699bc8-b919-4e52-9c26-0dd221dd882f", + "metadata": {}, + "source": [ + "# Compare Rustody - vs - BD Results\n", + "\n", + "I hope that this will now show that my tool does work..." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "de0cf2bb-1377-4a6b-a98e-64928f63a0fe", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[32mrustody\u001b[0m\u001b[0m \u001b[0m\u001b[0m1.2.5\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0mStefan L. \u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m\u001b[0m\u001b[0mQuantifies a DB Rhapsody experiment and creates sparse matrix outfiles. You need quite long R1 and\n", + "R2 reads for this! (>70R1 and >70R2 \\[v1\\] and 52 bp reads for v2.96 and v2.384)\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m\u001b[33mUSAGE:\u001b[0m\u001b[0m\n", + " \u001b[0m\u001b[0mquantify_rhapsody_multi [OPTIONS] --reads --file --specie --outpath --min-umi --version \u001b[0m\u001b[0m\n", + "\n", + "\u001b[0m\u001b[0m\u001b[33mOPTIONS:\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-a\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--antibody\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe fasta database containing the antibody tags\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-e\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--expression\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe fasta database containing the genes\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m--exp\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthis is a BD rhapsody or a 10x expression experiment?\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m[default: bd]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-f\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--file\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe input R2 samples file\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m--gene-kmers\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mminimal sequencing quality [default: 32]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-h\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--help\u001b[0m\u001b[0m \u001b[0m\u001b[0mPrint help information\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-i\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--index\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0ma pre-defined index folder produced by the cerateIndex scipt\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-m\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--min-umi\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe minimum (UMI) reads per cell (sample + genes + antibody\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0mcombined)\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m--max-reads\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mOptional: end the analysis after processing cell\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0mfastq entries [default: 18446744073709551615]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m--min-quality\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mminimal sequencing quality [default: 25]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-n\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--num-threads\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mhow many threads to use to analyze this (default max\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0mavailable)\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-o\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--outpath\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe outpath\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-r\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--reads\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe input R1 reads file\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-s\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--specie\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe specie of the library [mouse, human]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-v\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--version\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe version of beads you used v1, v2.96 or v2.384\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\n", + "\u001b[0m" + ] + } + ], + "source": [ + "! quantify_rhapsody_multi -h" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2b677599-cf11-424f-b6d3-a9f641a13061", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.32 s (started: 2024-01-26 15:24:48 +01:00)\n" + ] + } + ], + "source": [ + "%load_ext autotime\n", + "\n", + "import scvelo as scv\n", + "import loompy\n", + "import scanpy\n", + "import igraph\n", + "import phate\n", + "import glob, os\n", + "import pandas as pd\n", + "import os\n", + "import re\n", + "import subprocess\n", + "from collections import Counter\n", + "import numpy as np\n", + "from shutil import rmtree\n", + "import os\n", + "import anndata\n", + "\n", + "import h5py\n", + "from shutil import copyfile\n", + "\n", + "\n", + "def copyFiles(files, to):\n", + " for f in files:\n", + " name = os.path.basename( f )\n", + " print( f\"copy {f} to {to}\" )\n", + " copyfile( f, os.path.join(to, name ) )\n", + " print( \"all copied\" )" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dd1604b1-f703-4714-bbd4-ef43db21b9e8", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Analysis will stop after having processed 18446744073709551615 fastq entries containing a cell info\n", + "\n", + "init models\n", + "the log file: Mapping_log.txt\n", + "Changing the expression start gene id to 398\n", + "After indexing all fastq files we have the following indices:\n", + "the mRNA index:\n", + "I have 41210 kmers for 398 genes with 0.16652039% duplicate entries\n", + "gene names like 'phiX174'\n", + "gene_ids range from Some(0) to Some(397)\n", + "\n", + "the sample id index:\n", + "I have 384 kmers for 12 genes with 0% duplicate entries\n", + "gene names like 'Sample12'\n", + "gene_ids range from Some(398) to Some(409)\n", + "\n", + "and the antibodies index:\n", + "This index is empty\n", + "\n", + "Writing index version 6\n", + "with kmer_len 32\n", + "And a total of 41210 data entries\n", + "\n", + "Parsing file pair 1\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 1.90 mio reads (62.68% with cell_id, 61.58% with gene_id) \n", + "Parsing file pair 2\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 3.83 mio reads (64.21% with cell_id, 62.95% with gene_id) \n", + "Parsing file pair 3\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 5.79 mio reads (64.03% with cell_id, 62.81% with gene_id) \n", + "Parsing file pair 4\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 7.72 mio reads (63.68% with cell_id, 62.44% with gene_id) \n", + "\n", + "Writing outfiles ...\n", + "filtering cells\n", + "Dropping cell with too little counts (n=146275)\n", + "2768 cells have passed the cutoff of 200 umi counts per cell.\n", + "\n", + "\n", + "writing gene expression\n", + "sparse Matrix: 2768 cell(s), 367 gene(s) and 417924 entries written to path Ok(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_expression\"); \n", + "Writing Antibody counts\n", + "No genes to report on - no data written to path Some(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_antibodies\")\n", + "Writing samples table\n", + "dense matrix: 2768 cell written\n", + "\n", + "Summary:\n", + "cellular reads : 4915366 reads (63.68% of total)\n", + "no cell ID reads : 2288612 reads (29.65% of total)\n", + "no gene ID reads : 0 reads (0.00% of total)\n", + "filtered reads : 514614 reads (6.67% of total)\n", + " -> polyA : 0 reads (0.00% of total)\n", + " -> bad qualiity : 511637 reads (6.63% of total)\n", + " -> too short : 1009 reads (0.01% of total)\n", + " -> N's : 1968 reads (0.03% of total)\n", + "\n", + "total reads : 7718592 reads\n", + "\n", + "collected read counts:\n", + "expression reads : 4819359 reads (98.05% of cellular)\n", + "antibody reads : 0 reads (0.00% of cellular)\n", + "sample reads : 0 reads (0.00% of cellular)\n", + "\n", + "reported UMI counts:\n", + "expression reads : 2794452 UMIs (56.85% of cellular)\n", + "antibody reads : 0 UMIs (0.00% of cellular)\n", + "sample reads : 0 UMIs (0.00% of cellular)\n", + "\n", + "PCR duplicates or bad cells: 2120914 reads (43.15% of cellular)\n", + "\n", + "timings:\n", + " overall run time 0 h 1 min 43 sec 121 millisec\n", + " file-io run time 0 h 0 min 15 sec 191 millisec\n", + "single-cpu run time 0 h 0 min 2 sec 92 millisec\n", + " multi-cpu run time 0 h 1 min 24 sec 174 millisec\n", + "\n", + "\n", + "Cell->Sample table written to \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/SampleCounts.tsv\"\n", + "\n", + "quantify_rhapsody finished in 0h 1min 43 sec 122milli sec\n", + "\n", + "time: 1min 43s (started: 2024-01-26 15:24:50 +01:00)\n" + ] + } + ], + "source": [ + "exe = \"quantify_rhapsody_multi\"\n", + "R1 = [\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R1_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R1_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R1_001.fastq.gz\"\n", + " ]\n", + "r1 = \",\".join(R1)\n", + "R2 = [ \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R2_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R2_001.fastq.gz\"\n", + " ,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R2_001.fastq.gz\"\n", + "]\n", + "r2 = \",\".join(R2)\n", + "out = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result\"\n", + "exp = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/BD_Rhapsody_Immune_Response_Panel_Hs.fasta\"\n", + "\n", + "! {exe} -r {r1} -f {r2} -o {out} -s human -e {exp} -m 200 -v 'v1' 1>&2" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1439dfff-e57a-4a40-a168-86caffefeba7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 2723 × 367\n", + " obs: 'Cell_Type_Experimental', 'Total_VDJ_Read_Count', 'Total_VDJ_Molecule_Count', 'BCR_Heavy_V_gene_Dominant', 'BCR_Heavy_D_gene_Dominant', 'BCR_Heavy_J_gene_Dominant', 'BCR_Heavy_C_gene_Dominant', 'BCR_Heavy_CDR3_Nucleotide_Dominant', 'BCR_Heavy_CDR3_Translation_Dominant', 'BCR_Heavy_Read_Count', 'BCR_Heavy_Molecule_Count', 'BCR_Light_V_gene_Dominant', 'BCR_Light_J_gene_Dominant', 'BCR_Light_C_gene_Dominant', 'BCR_Light_CDR3_Nucleotide_Dominant', 'BCR_Light_CDR3_Translation_Dominant', 'BCR_Light_Read_Count', 'BCR_Light_Molecule_Count', 'TCR_Alpha_Gamma_V_gene_Dominant', 'TCR_Alpha_Gamma_J_gene_Dominant', 'TCR_Alpha_Gamma_C_gene_Dominant', 'TCR_Alpha_Gamma_CDR3_Nucleotide_Dominant', 'TCR_Alpha_Gamma_CDR3_Translation_Dominant', 'TCR_Alpha_Gamma_Read_Count', 'TCR_Alpha_Gamma_Molecule_Count', 'TCR_Beta_Delta_V_gene_Dominant', 'TCR_Beta_Delta_D_gene_Dominant', 'TCR_Beta_Delta_J_gene_Dominant', 'TCR_Beta_Delta_C_gene_Dominant', 'TCR_Beta_Delta_CDR3_Nucleotide_Dominant', 'TCR_Beta_Delta_CDR3_Translation_Dominant', 'TCR_Beta_Delta_Read_Count', 'TCR_Beta_Delta_Molecule_Count', 'BCR_Paired_Chains', 'TCR_Paired_Chains'\n", + " var: 'Raw_Reads', 'Raw_Molecules', 'Raw_Seq_Depth', 'RSEC_Adjusted_Molecules', 'RSEC_Adjusted_Reads_non-singleton', 'RSEC_Adjusted_Molecules_non-singleton'\n", + " uns: 'Pipeline_Inputs', 'Pipeline_Metrics'\n", + " obsm: 'X_tsne'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 96.1 ms (started: 2024-01-26 15:26:33 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data = anndata.read( 'BD-Demo-VDJ/RhapVDJDemo-BCR.h5ad')\n", + "BD_Data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aaa62a1a-860d-4b90-bde5-18c6f5f9cf32", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 670 µs (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "def readRustodyExpression(path, name):\n", + " print(f\"reading Rustody expression from path {path}/BD_Rhapsody_expression/\")\n", + " this = scanpy.read_10x_mtx( path+'/BD_Rhapsody_expression/' )\n", + " this.obs['sample'] = name\n", + " obs1 = pd.read_csv( path+'/SampleCounts.tsv', sep=\"\\t\")\n", + " this.obs = this.obs.merge( obs1, left_index= True, right_on = 'CellID' )\n", + " this.obs_names = this.obs['CellID'] + \"_\" + this.obs['sample']#\n", + " # we have no sample info here - this whole data is one sample!\n", + " #this = this[this.obs['AsignedSampleName'] != \"na\"]\n", + " this.obs['AsignedSampleName'] = this.obs['AsignedSampleName'] + \"_\" + this.obs['sample']\n", + " return(this)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2f442c85-cfba-4356-ad34-0e41e145fef7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 4.32 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "out = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2f0b9b21-b3e7-4c8a-a516-b5557c3bd130", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "reading Rustody expression from path /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result//BD_Rhapsody_expression/\n" + ] + }, + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 2768 × 367\n", + " obs: 'sample', 'CellID', 'Sample1', 'Sample2', 'Sample3', 'Sample4', 'Sample5', 'Sample6', 'Sample7', 'Sample8', 'Sample9', 'Sample10', 'Sample11', 'Sample12', 'AsignedSampleName', 'FractionTotal', 'n'\n", + " var: 'gene_ids', 'feature_types'" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 677 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = readRustodyExpression( out, 'VDJ_Example_Data')\n", + "Rustody_Data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "300ec4d2-0f7f-4c05-a4ca-80cce10435a5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 701 µs (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data.obs['source'] = \"Rustody_v1.2.5\"\n", + "BD_Data.obs['source'] = \"BD_version1\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fe1b254f-bbd5-449d-8836-2c161abe1d47", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['2758', '3516', '7707', '8497', '8834', '10464', '12348', '12375',\n", + " '13522'],\n", + " dtype='object')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 12.5 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data.obs_names[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "013f2e98-0901-4f6e-a924-5b51c85b3127", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Cell2758_VDJ_Example_Data', 'Cell3516_VDJ_Example_Data',\n", + " 'Cell7707_VDJ_Example_Data', 'Cell8497_VDJ_Example_Data',\n", + " 'Cell8834_VDJ_Example_Data', 'Cell10464_VDJ_Example_Data',\n", + " 'Cell12348_VDJ_Example_Data', 'Cell12375_VDJ_Example_Data',\n", + " 'Cell13522_VDJ_Example_Data'],\n", + " dtype='object')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.87 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data.obs_names[1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "a17c98aa-8bcd-49f6-83ef-daf474834c1a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.82 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "pattern = re.compile(r'-[01]$')\n", + "BD_Data.obs['Rustody_Names'] = [ \"Cell\"+str( int(pattern.sub('',BD_Data.obs_names.values[id]))) +\"_\"+ \"VDJ_Example_Data\" for id in range( len(BD_Data.obs_names))]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "47ae5756-f8b6-4364-9d4e-ff3f2581339e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2758 Cell2758_VDJ_Example_Data\n", + "3516 Cell3516_VDJ_Example_Data\n", + "7707 Cell7707_VDJ_Example_Data\n", + "8497 Cell8497_VDJ_Example_Data\n", + "8834 Cell8834_VDJ_Example_Data\n", + "10464 Cell10464_VDJ_Example_Data\n", + "12348 Cell12348_VDJ_Example_Data\n", + "12375 Cell12375_VDJ_Example_Data\n", + "13522 Cell13522_VDJ_Example_Data\n", + "Name: Rustody_Names, dtype: object" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.06 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data.obs['Rustody_Names'][1:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "13ae6006-6839-40e8-b9a1-9b9d7b7e0354", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({True: 2722, False: 1})" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 4.75 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Counter( [name in Rustody_Data.obs_names for name in BD_Data.obs['Rustody_Names']] )" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "73b85d2a-9613-4f5a-92d0-5dd2a29cb62d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Counter({True: 2722, False: 46})" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 108 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Counter( [name in BD_Data.obs['Rustody_Names'].values for name in Rustody_Data.obs_names ] )" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "87a79954-4ca7-44a1-93b9-29fdfdb59e16", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 8.1 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = Rustody_Data[[ name for name in BD_Data.obs['Rustody_Names'] if name in Rustody_Data.obs_names]]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "8ca6388c-ba67-40ab-b516-6816299bcc62", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 12.7 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data= BD_Data [BD_Data.obs['Rustody_Names'].isin( [ name for name in BD_Data.obs['Rustody_Names'] if name in Rustody_Data.obs_names] )]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "beb7d465-c0d4-45a8-b8ee-137ed034658c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['CCL1', 'CCL2', 'IL1RL1', 'IL5']" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 1.57 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "[name for name in BD_Data.var_names if name not in Rustody_Data.var_names ]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "4982368e-a8de-4010-8a45-d51ce289e4eb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['CHI3L1', 'IL22', 'ZBED2', 'phiX174']" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.24 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "[name for name in Rustody_Data.var_names if name not in BD_Data.var_names ]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "34f57d24-dec3-4372-ad80-03dd6747d8a1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.29 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "from scipy.stats.stats import pearsonr " + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "0d0ede43-a0d3-42e0-bd33-bb432bc9e402", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['1229', '2758', '3516', '7707', '8497', '8834', '10464', '12348',\n", + " '12375', '13522',\n", + " ...\n", + " '14019899', '14022966', '14030253', '14031393', '14032909', '14036049',\n", + " '14039502', '14042139', '14042509', '14043327'],\n", + " dtype='object', length=2722)" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.3 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data.obs_names" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "f64d8be3-f488-4349-a5fc-2eb65fd3d1c8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Cell1229_VDJ_Example_Data', 'Cell2758_VDJ_Example_Data',\n", + " 'Cell3516_VDJ_Example_Data', 'Cell7707_VDJ_Example_Data',\n", + " 'Cell8497_VDJ_Example_Data', 'Cell8834_VDJ_Example_Data',\n", + " 'Cell10464_VDJ_Example_Data', 'Cell12348_VDJ_Example_Data',\n", + " 'Cell12375_VDJ_Example_Data', 'Cell13522_VDJ_Example_Data',\n", + " ...\n", + " 'Cell14019899_VDJ_Example_Data', 'Cell14022966_VDJ_Example_Data',\n", + " 'Cell14030253_VDJ_Example_Data', 'Cell14031393_VDJ_Example_Data',\n", + " 'Cell14032909_VDJ_Example_Data', 'Cell14036049_VDJ_Example_Data',\n", + " 'Cell14039502_VDJ_Example_Data', 'Cell14042139_VDJ_Example_Data',\n", + " 'Cell14042509_VDJ_Example_Data', 'Cell14043327_VDJ_Example_Data'],\n", + " dtype='object', length=2722)" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.39 ms (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data.obs_names" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "1e0a1e9f-7957-4930-8e58-7bb7430db64d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
01gname
00.5710352.159968e-235ADA
10.5128231.739632e-182ADGRE1
20.4813097.171231e-158ADGRG3
30.4554301.686910e-139AIM2
40.7297370.000000e+00ANXA5
............
3580.7499730.000000e+00XBP1
3590.6890960.000000e+00YBX3
3600.3368093.458320e-73ZAP70
3610.4179281.516947e-115ZBTB16
3620.6233646.447084e-293ZNF683
\n", + "

363 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 gname\n", + "0 0.571035 2.159968e-235 ADA\n", + "1 0.512823 1.739632e-182 ADGRE1\n", + "2 0.481309 7.171231e-158 ADGRG3\n", + "3 0.455430 1.686910e-139 AIM2\n", + "4 0.729737 0.000000e+00 ANXA5\n", + ".. ... ... ...\n", + "358 0.749973 0.000000e+00 XBP1\n", + "359 0.689096 0.000000e+00 YBX3\n", + "360 0.336809 3.458320e-73 ZAP70\n", + "361 0.417928 1.516947e-115 ZBTB16\n", + "362 0.623364 6.447084e-293 ZNF683\n", + "\n", + "[363 rows x 3 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.51 s (started: 2024-01-26 15:26:34 +01:00)\n" + ] + } + ], + "source": [ + "cmp = pd.DataFrame(\n", + " [ pearsonr( np.array(BD_Data[:,gene].X.todense()).flatten(), np.array( Rustody_Data[:,gene].X.todense()).flatten() ) for gene in Rustody_Data.var_names if gene in BD_Data.var_names ] )\n", + "cmp['gname'] = [gene for gene in Rustody_Data.var_names if gene in BD_Data.var_names ]\n", + "cmp" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "cbd4c44e-45fb-4076-92cb-3b9f6ad04ca8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 104 ms (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "gname = \"ANXA5\"\n", + "import matplotlib.pyplot as plt\n", + "plt.figure(figsize=(8, 6))\n", + "plt.plot(Rustody_Data[:,gname].X.todense(), BD_Data[:,gname].X.todense(), 'o', color='blue') # 'o' represents marker style, you can change it as needed\n", + "plt.xlabel( f\"Rustody {gname}\" )\n", + "plt.ylabel( f\"BD {gname}\" )\n", + "plt.title( f\"XY Plot of Rustody {gname} vs BD {gname}\" )\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "f9613a96-0fd8-492d-90bd-5430c5d5f2a6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[43.]], dtype=float32)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 5.95 ms (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data [Rustody_Data[:, 'ADA'].X > 40,:'ADA'].X.todense()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "09827093-297d-40cb-a011-ccb668cbcda3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[1]])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 6.44 ms (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "BD_Data ['6206212',:'ADA'].X.todense()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "60d2cac6-5584-4ee9-803f-cf63c4f58ea5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['Cell6206212_VDJ_Example_Data'], dtype='object')" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 4.65 ms (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data [Rustody_Data[:, 'ADA'].X > 40].obs_names\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "541c4f9a-0d1b-4a9b-98e3-650d30279580", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[32mrustody\u001b[0m\u001b[0m \u001b[0m\u001b[0m0.1.1\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0mStefan L. \u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m\u001b[33mUSAGE:\u001b[0m\u001b[0m\n", + " \u001b[0m\u001b[0mbd_get_single_cell --reads --file --id --outpath --version \u001b[0m\u001b[0m\n", + "\n", + "\u001b[0m\u001b[0m\u001b[33mOPTIONS:\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-f\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--file\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe input R2 samples file\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-h\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--help\u001b[0m\u001b[0m \u001b[0m\u001b[0mPrint help information\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-i\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--id\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe specie of the library [mouse, human]\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-o\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--outpath\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe outpath\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-r\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--reads\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe input R1 reads file\u001b[0m\u001b[0m\n", + "\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m-v\u001b[0m\u001b[0m, \u001b[0m\u001b[0m\u001b[32m--version\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[32m\u001b[0m\u001b[0m \u001b[0m\u001b[0mthe version of beads you used v1, v2.96 or v2.384\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\u001b[0m\n", + "\u001b[0mtime: 127 ms (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "! bd_get_single_cell -hCTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGAACTCA" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "f2f18160-d5c2-4455-a3ae-ac7d9b4d3c37", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bd_get_single_cell -r /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz -f /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz -i 6206212 -o /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/ -v v1\n", + "writing all reads from the cell 6206212\n", + "\u001b[2K\u001b[1m\u001b[2m[100/?]\u001b[0m ⠠ cell read (any/6206212) 1200000/16720 here I have cell 3835448 I found 17348 reads for the cell 6206212\n", + "\u001b[2Ktime: 34.6 s (started: 2024-01-26 15:26:37 +01:00)\n" + ] + } + ], + "source": [ + "print ( f\"bd_get_single_cell -r {R1[0]} -f {R2[0]} -i 6206212 -o {out} -v v1\")\n", + "! bd_get_single_cell -r {R1[0]} -f {R2[0]} -i 6206212 -o {out} -v v1" + ] + }, + { + "cell_type": "markdown", + "id": "63319fb9-09b9-4a90-8d17-4bdd4b4be316", + "metadata": {}, + "source": [ + "# These likely contain something else\n", + "\n", + "Now Any gene detected. Likely the Igh and TCR reads." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "8a3ec561-1ec7-415d-8bce-0932aa209b87", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bd_get_single_cell -r /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz -f /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz -i 6206212 -o /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/ -v v1\n", + "writing all reads from the cell 6206212\n", + "\u001b[2K\u001b[1m\u001b[2m[100/?]\u001b[0m ⠐ cell read (any/6206212) 1300000/17426 here I have cell 596373 I found 17897 reads for the cell 6206212\n", + "\u001b[2Ktime: 31.9 s (started: 2024-01-26 15:27:12 +01:00)\n" + ] + } + ], + "source": [ + "print ( f\"bd_get_single_cell -r {R1[0]} -f {R2[0]} -i 6206212 -o {out} -v v1\")\n", + "! bd_get_single_cell -r {R1[1]} -f {R2[1]} -i 6206212 -o {out} -v v1" + ] + }, + { + "cell_type": "markdown", + "id": "e3a139a6-6de1-400a-a930-a8ec948c4be9", + "metadata": {}, + "source": [ + "## Finding matched to ADA\n", + "\n", + "I have modified my quantify_rhapsody_multi to report ADA matches and got these matches in the R1[1] R2[1] pair:\n", + "\n", + "```\n", + "\"CTGAGGAGTCACCCCAACTCTGTGCGCCTGAGCAACATTTTTACAATTATTCATACCAAGAAGACAAAGATATCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGGTCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATATTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACAATTATTCCTTCAAAGAATACAATGATATAA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGTAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAGCATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "```\n", + "\n", + "There are some single nucleotide polimorphisms - but the sequence matches to ADA using online NCBI-Blast.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "8684497e-bbe7-427e-8b92-2de5e4950409", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bd_get_single_cell -r /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R1_001.fastq.gz -f /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R2_001.fastq.gz -i 6206212 -o /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/ -v v1\n", + "writing all reads from the cell 6206212\n", + "\u001b[2K\u001b[1m\u001b[2m[100/?]\u001b[0m ⠐ cell read (any/6206212) 1300000/18899 here I have cell 8578256 I found 19115 reads for the cell 6206212\n", + "\u001b[2Ktime: 34.5 s (started: 2024-01-26 15:27:44 +01:00)\n" + ] + } + ], + "source": [ + "print ( f\"bd_get_single_cell -r {R1[2]} -f {R2[2]} -i 6206212 -o {out} -v v1\")\n", + "! bd_get_single_cell -r {R1[2]} -f {R2[2]} -i 6206212 -o {out} -v v1" + ] + }, + { + "cell_type": "markdown", + "id": "37b8c140-da52-4e66-82d0-fca13b04f52a", + "metadata": {}, + "source": [ + "# Only one read in there:\n", + "\n", + "```\n", + "CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\n", + "```\n", + "\n", + "Total of 25 reads - I can not collect the UMIs without changing a lot in the logics of my Rust project - so I am not going to do that." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "d234969f-1519-4985-956b-550659177191", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "bd_get_single_cell -r /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R1_001.fastq.gz -f /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R2_001.fastq.gz -i 6206212 -o /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/ -v v1\n", + "writing all reads from the cell 6206212\n", + "\u001b[2K\u001b[1m\u001b[2m[100/?]\u001b[0m ⠐ cell read (any/6206212) 1300000/18127 here I have cell 1784458 I found 18425 reads for the cell 6206212\n", + "\u001b[2Ktime: 32.1 s (started: 2024-01-26 15:28:18 +01:00)\n" + ] + } + ], + "source": [ + "print ( f\"bd_get_single_cell -r {R1[3]} -f {R2[3]} -i 6206212 -o {out} -v v1\")\n", + "! bd_get_single_cell -r {R1[3]} -f {R2[3]} -i 6206212 -o {out} -v v1" + ] + }, + { + "cell_type": "markdown", + "id": "e9bfd14d-6ae3-4918-92c6-1b3dfb9f6c00", + "metadata": {}, + "source": [ + "# And more once again:\n", + "\n", + "```\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGAACTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCAGTGGGGCTGAGCAAAATTTTTACATTTTATCCTTGGAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTAGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACAATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACGTTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCGAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCA\"\n", + "\"CTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACACTTTTACATTTATTCCTTCCAAGAAGACCATTATCTAA\"\n", + "```\n", + "To a total of 43 reads in total." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "c5390439-38f0-418c-91aa-077a82e4e3c7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 47M\n", + "-rw-rw-r-- 1 med-sal med-sal 20 Jan 26 13:07 OneSingleCell.6206211.R2.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 20 Jan 26 13:07 OneSingleCell.6206211.R1.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 356K Jan 26 13:51 f1_OneSingleCell.6206212.R2.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 414K Jan 26 13:51 f1_OneSingleCell.6206212.R1.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 3.6M Jan 26 15:24 index.1.Index\n", + "-rw-rw-r-- 1 med-sal med-sal 2.4K Jan 26 15:24 index.1.gene.txt\n", + "-rw-rw-r-- 1 med-sal med-sal 23M Jan 26 15:24 index.1.Index.txt\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(9).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(8).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(7).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(6).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(5).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(4).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(3).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(2).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(13).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(12).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(11).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 0 Jan 26 15:26 'Mapping_log_ThreadId(10).txt'\n", + "-rw-rw-r-- 1 med-sal med-sal 980K Jan 26 15:26 'Umapped_with_cellIDThreadId(2).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 496K Jan 26 15:26 'Umapped_with_cellIDThreadId(2).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 988K Jan 26 15:26 'Umapped_with_cellIDThreadId(5).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 500K Jan 26 15:26 'Umapped_with_cellIDThreadId(5).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.0M Jan 26 15:26 'Umapped_with_cellIDThreadId(10).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 524K Jan 26 15:26 'Umapped_with_cellIDThreadId(10).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.1M Jan 26 15:26 'Umapped_with_cellIDThreadId(4).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 564K Jan 26 15:26 'Umapped_with_cellIDThreadId(4).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 927K Jan 26 15:26 'Umapped_with_cellIDThreadId(6).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 472K Jan 26 15:26 'Umapped_with_cellIDThreadId(6).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 862K Jan 26 15:26 'Umapped_with_cellIDThreadId(12).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 443K Jan 26 15:26 'Umapped_with_cellIDThreadId(12).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.3M Jan 26 15:26 'Umapped_with_cellIDThreadId(3).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 654K Jan 26 15:26 'Umapped_with_cellIDThreadId(3).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1004K Jan 26 15:26 'Umapped_with_cellIDThreadId(9).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 503K Jan 26 15:26 'Umapped_with_cellIDThreadId(9).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.2M Jan 26 15:26 'Umapped_with_cellIDThreadId(7).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 605K Jan 26 15:26 'Umapped_with_cellIDThreadId(7).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.1M Jan 26 15:26 'Umapped_with_cellIDThreadId(11).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 570K Jan 26 15:26 'Umapped_with_cellIDThreadId(11).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 1.1M Jan 26 15:26 'Umapped_with_cellIDThreadId(13).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 544K Jan 26 15:26 'Umapped_with_cellIDThreadId(13).1.R1.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 893K Jan 26 15:26 'Umapped_with_cellIDThreadId(8).1.R2.fastq.gz'\n", + "-rw-rw-r-- 1 med-sal med-sal 453K Jan 26 15:26 'Umapped_with_cellIDThreadId(8).1.R1.fastq.gz'\n", + "drwxrwxr-x 2 med-sal med-sal 4.0K Jan 26 15:26 BD_Rhapsody_expression\n", + "-rw-rw-r-- 1 med-sal med-sal 123K Jan 26 15:26 SampleCounts.tsv\n", + "-rw-rw-r-- 1 med-sal med-sal 1.5K Jan 26 15:26 Mapping_log.txt\n", + "-rw-rw-r-- 1 med-sal med-sal 20 Jan 26 15:26 Umapped_with_cellID.1.R2.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 20 Jan 26 15:26 Umapped_with_cellID.1.R1.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 371K Jan 26 15:28 OneSingleCell.6206212.R2.fastq.gz\n", + "-rw-rw-r-- 1 med-sal med-sal 647K Jan 26 15:28 OneSingleCell.6206212.R1.fastq.gz\n", + "time: 134 ms (started: 2024-01-26 15:29:35 +01:00)\n" + ] + } + ], + "source": [ + "! ls -lhrt {out}" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "14bb4fe8-4d8f-481d-9b95-9e3482372bf4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 2., 1., ..., 0., 3., 1.]], dtype=float32)" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 8.06 ms (started: 2024-01-26 15:29:37 +01:00)\n" + ] + } + ], + "source": [ + "np.array(Rustody_Data[:, \"ADA\"].X.todense()[:,0].transpose())" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "5220fbff-c847-4d05-b7c3-4e70bb0dee5a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.12 s (started: 2024-01-26 15:29:38 +01:00)\n" + ] + } + ], + "source": [ + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Assuming Rustody_Data and BD_Data are pandas DataFrames\n", + "# Assuming you want to plot the \"ADA\" column from both DataFrames\n", + "\n", + "# Extracting data from the \"ADA\" column\n", + "rustody_x = np.array(Rustody_Data[:, \"ADA\"].X.todense()[:,0].transpose()).ravel()\n", + "bd_x = np.array(BD_Data[:, \"ADA\"].X.todense()[:,0].transpose()).ravel()\n", + "\n", + "# Creating the 2D density plot\n", + "plt.figure(figsize=(8, 6))\n", + "sns.kdeplot(rustody_x, bd_x, cmap=\"Blues\", shade=True, cbar=True)\n", + "plt.xlabel('Rustody ADA')\n", + "plt.ylabel('BD ADA')\n", + "plt.title('2D Density Plot of Rustody ADA vs BD ADA')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "50f67538-5a2f-41ff-9562-4fb07aa40c6e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 279 ms (started: 2024-01-26 15:29:40 +01:00)\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Assuming Rustody_Data and BD_Data are pandas DataFrames\n", + "# Assuming you want to plot the \"ADA\" column from both DataFrames\n", + "\n", + "# Extracting data from the \"ADA\" column\n", + "rustody_x = np.array(Rustody_Data[:, \"ADA\"].X.todense()[:,0].transpose()).ravel()\n", + "bd_x = np.array(BD_Data[:, \"ADA\"].X.todense()[:,0].transpose()).ravel()\n", + "\n", + "# Creating the hexbin plot\n", + "plt.figure(figsize=(8, 6))\n", + "plt.hexbin(rustody_x, bd_x, gridsize=50, cmap='Blues', bins='log')\n", + "plt.colorbar(label='log10(count)')\n", + "plt.xlabel('Rustody ADA')\n", + "plt.ylabel('BD ADA')\n", + "plt.title('Hexbin Plot of Rustody ADA vs BD ADA')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "28c098ff-dd5e-446a-8b56-c3d69fa32e50", + "metadata": {}, + "source": [ + "# So what if the data I got from BD is actually only looking into file 3 of 4?\n", + "\n", + "As the BD data reports 1 reads for ADA in the whole data, but I really really find 43 ones in all 4 files there is a possibility that the BD exmaple data is also only looking into this one file - right?\n", + "\n", + "This could hopefully also explain my horrible correlation values. Let's try with only file 3/4." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "5753a4f9-172d-4bfc-8b44-1bee2383f491", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Analysis will stop after having processed 18446744073709551615 fastq entries containing a cell info\n", + "\n", + "init models\n", + "the log file: Mapping_log.txt\n", + "Changing the expression start gene id to 398\n", + "After indexing all fastq files we have the following indices:\n", + "the mRNA index:\n", + "I have 41210 kmers for 398 genes with 0.16652039% duplicate entries\n", + "gene names like 'phiX174'\n", + "gene_ids range from Some(0) to Some(397)\n", + "\n", + "the sample id index:\n", + "I have 384 kmers for 12 genes with 0% duplicate entries\n", + "gene names like 'Sample12'\n", + "gene_ids range from Some(398) to Some(409)\n", + "\n", + "and the antibodies index:\n", + "This index is empty\n", + "\n", + "Writing index version 6\n", + "with kmer_len 32\n", + "And a total of 41210 data entries\n", + "\n", + "Parsing file pair 1\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 1.97 mio reads (63.67% with cell_id, 62.53% with gene_id) \n", + "\n", + "Writing outfiles ...\n", + "filtering cells\n", + "Dropping cell with too little counts (n=74294)\n", + "3015 cells have passed the cutoff of 20 umi counts per cell.\n", + "\n", + "\n", + "writing gene expression\n", + "sparse Matrix: 3015 cell(s), 357 gene(s) and 144862 entries written to path Ok(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_expression\"); \n", + "Writing Antibody counts\n", + "No genes to report on - no data written to path Some(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_antibodies\")\n", + "Writing samples table\n", + "dense matrix: 3015 cell written\n", + "\n", + "Summary:\n", + "cellular reads : 1251143 reads (63.67% of total)\n", + "no cell ID reads : 590727 reads (30.06% of total)\n", + "no gene ID reads : 0 reads (0.00% of total)\n", + "filtered reads : 123166 reads (6.27% of total)\n", + " -> polyA : 0 reads (0.00% of total)\n", + " -> bad qualiity : 122722 reads (6.25% of total)\n", + " -> too short : 90 reads (0.00% of total)\n", + " -> N's : 354 reads (0.02% of total)\n", + "\n", + "total reads : 1965036 reads\n", + "\n", + "collected read counts:\n", + "expression reads : 1228646 reads (98.20% of cellular)\n", + "antibody reads : 0 reads (0.00% of cellular)\n", + "sample reads : 0 reads (0.00% of cellular)\n", + "\n", + "reported UMI counts:\n", + "expression reads : 600164 UMIs (47.97% of cellular)\n", + "antibody reads : 0 UMIs (0.00% of cellular)\n", + "sample reads : 0 UMIs (0.00% of cellular)\n", + "\n", + "PCR duplicates or bad cells: 650979 reads (52.03% of cellular)\n", + "\n", + "timings:\n", + " overall run time 0 h 0 min 25 sec 686 millisec\n", + " file-io run time 0 h 0 min 3 sec 900 millisec\n", + "single-cpu run time 0 h 0 min 0 sec 317 millisec\n", + " multi-cpu run time 0 h 0 min 20 sec 729 millisec\n", + "\n", + "\n", + "Cell->Sample table written to \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/SampleCounts.tsv\"\n", + "\n", + "quantify_rhapsody finished in 0h 0min 25 sec 687milli sec\n", + "\n", + "time: 25.9 s (started: 2024-01-26 15:29:40 +01:00)\n" + ] + } + ], + "source": [ + "exe = \"quantify_rhapsody_multi\"\n", + "R1 = [#\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R1_001.fastq.gz\",\n", + " \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R1_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R1_001.fastq.gz\"\n", + " ]\n", + "r1 = \",\".join(R1)\n", + "R2 = [ #\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R2_001.fastq.gz\",\n", + " \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R2_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R2_001.fastq.gz\"\n", + "]\n", + "r2 = \",\".join(R2)\n", + "out = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result\"\n", + "exp = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/BD_Rhapsody_Immune_Response_Panel_Hs.fasta\"\n", + "\n", + "! {exe} -r {r1} -f {r2} -o {out} -s human -e {exp} -m 20 -v 'v1' 1>&2" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "c8037eca-bfd0-4a54-9b7d-53773774b235", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "reading Rustody expression from path /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_expression/\n" + ] + }, + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 3015 × 357\n", + " obs: 'sample', 'CellID', 'Sample1', 'Sample2', 'Sample3', 'Sample4', 'Sample5', 'Sample6', 'Sample7', 'Sample8', 'Sample9', 'Sample10', 'Sample11', 'Sample12', 'AsignedSampleName', 'FractionTotal', 'n'\n", + " var: 'gene_ids', 'feature_types'" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 254 ms (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = readRustodyExpression( out, 'VDJ_Example_Data')\n", + "Rustody_Data" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "e262f458-85bf-48dc-880c-45cdf0ba7ec1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 4.72 ms (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = Rustody_Data[[ name for name in BD_Data.obs['Rustody_Names'] if name in Rustody_Data.obs_names]]" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "b7e48d2c-e91c-4453-9e7f-e68c7cec7ad7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['CCL1',\n", + " 'CCL2',\n", + " 'CCL22',\n", + " 'CD80',\n", + " 'CTSG',\n", + " 'IL13',\n", + " 'IL1RL1',\n", + " 'IL5',\n", + " 'LRRC32',\n", + " 'MME',\n", + " 'MMP9']" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.57 ms (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "[name for name in BD_Data.var_names if name not in Rustody_Data.var_names ]" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "0d38d22e-13fa-4817-b143-4ac2892531bd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "View of AnnData object with n_obs × n_vars = 2722 × 357\n", + " obs: 'sample', 'CellID', 'Sample1', 'Sample2', 'Sample3', 'Sample4', 'Sample5', 'Sample6', 'Sample7', 'Sample8', 'Sample9', 'Sample10', 'Sample11', 'Sample12', 'AsignedSampleName', 'FractionTotal', 'n'\n", + " var: 'gene_ids', 'feature_types'\n", + "time: 2.13 ms (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "print(Rustody_Data)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "1f9c4099-9b51-4b8b-8b58-fdcd62f134d5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "View of AnnData object with n_obs × n_vars = 2722 × 367\n", + " obs: 'Cell_Type_Experimental', 'Total_VDJ_Read_Count', 'Total_VDJ_Molecule_Count', 'BCR_Heavy_V_gene_Dominant', 'BCR_Heavy_D_gene_Dominant', 'BCR_Heavy_J_gene_Dominant', 'BCR_Heavy_C_gene_Dominant', 'BCR_Heavy_CDR3_Nucleotide_Dominant', 'BCR_Heavy_CDR3_Translation_Dominant', 'BCR_Heavy_Read_Count', 'BCR_Heavy_Molecule_Count', 'BCR_Light_V_gene_Dominant', 'BCR_Light_J_gene_Dominant', 'BCR_Light_C_gene_Dominant', 'BCR_Light_CDR3_Nucleotide_Dominant', 'BCR_Light_CDR3_Translation_Dominant', 'BCR_Light_Read_Count', 'BCR_Light_Molecule_Count', 'TCR_Alpha_Gamma_V_gene_Dominant', 'TCR_Alpha_Gamma_J_gene_Dominant', 'TCR_Alpha_Gamma_C_gene_Dominant', 'TCR_Alpha_Gamma_CDR3_Nucleotide_Dominant', 'TCR_Alpha_Gamma_CDR3_Translation_Dominant', 'TCR_Alpha_Gamma_Read_Count', 'TCR_Alpha_Gamma_Molecule_Count', 'TCR_Beta_Delta_V_gene_Dominant', 'TCR_Beta_Delta_D_gene_Dominant', 'TCR_Beta_Delta_J_gene_Dominant', 'TCR_Beta_Delta_C_gene_Dominant', 'TCR_Beta_Delta_CDR3_Nucleotide_Dominant', 'TCR_Beta_Delta_CDR3_Translation_Dominant', 'TCR_Beta_Delta_Read_Count', 'TCR_Beta_Delta_Molecule_Count', 'BCR_Paired_Chains', 'TCR_Paired_Chains', 'source', 'Rustody_Names'\n", + " var: 'Raw_Reads', 'Raw_Molecules', 'Raw_Seq_Depth', 'RSEC_Adjusted_Molecules', 'RSEC_Adjusted_Reads_non-singleton', 'RSEC_Adjusted_Molecules_non-singleton'\n", + " uns: 'Pipeline_Inputs', 'Pipeline_Metrics'\n", + " obsm: 'X_tsne'\n", + "time: 3.48 ms (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "print(BD_Data)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "abf05230-73fa-4e4c-ada6-1ae5ad63f949", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
01gname
00.8599340.000000e+00ADA
10.7169710.000000e+00ADGRE1
20.6971560.000000e+00ADGRG3
30.6263441.577742e-296AIM2
40.8788970.000000e+00ANXA5
............
3510.8291470.000000e+00XBP1
3520.8751660.000000e+00YBX3
3530.6841850.000000e+00ZAP70
3540.5233392.716482e-191ZBTB16
3550.6930250.000000e+00ZNF683
\n", + "

356 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 gname\n", + "0 0.859934 0.000000e+00 ADA\n", + "1 0.716971 0.000000e+00 ADGRE1\n", + "2 0.697156 0.000000e+00 ADGRG3\n", + "3 0.626344 1.577742e-296 AIM2\n", + "4 0.878897 0.000000e+00 ANXA5\n", + ".. ... ... ...\n", + "351 0.829147 0.000000e+00 XBP1\n", + "352 0.875166 0.000000e+00 YBX3\n", + "353 0.684185 0.000000e+00 ZAP70\n", + "354 0.523339 2.716482e-191 ZBTB16\n", + "355 0.693025 0.000000e+00 ZNF683\n", + "\n", + "[356 rows x 3 columns]" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.29 s (started: 2024-01-26 15:30:06 +01:00)\n" + ] + } + ], + "source": [ + "cmp = pd.DataFrame(\n", + " [ pearsonr( np.array(BD_Data[:,gene].X.todense()).flatten(), np.array( Rustody_Data[:,gene].X.todense()).flatten() ) for gene in Rustody_Data.var_names if gene in BD_Data.var_names ] )\n", + "cmp['gname'] = [gene for gene in Rustody_Data.var_names if gene in BD_Data.var_names ]\n", + "cmp" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "3c936097-9d2a-4c17-a07c-1a5efe196711", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index([], dtype='object')" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.14 ms (started: 2024-01-26 15:30:09 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data [Rustody_Data[:, 'ADA'].X > 40].obs_names" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "af281118-7265-430d-a9d2-25944cd57d6c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 101 ms (started: 2024-01-26 15:30:09 +01:00)\n" + ] + } + ], + "source": [ + "gname = \"ADA\"\n", + "import matplotlib.pyplot as plt\n", + "plt.figure(figsize=(8, 6))\n", + "plt.plot(Rustody_Data[:,gname].X.todense(), BD_Data[:,gname].X.todense(), 'o', color='blue') # 'o' represents marker style, you can change it as needed\n", + "plt.xlabel( f\"Rustody {gname}\" )\n", + "plt.ylabel( f\"BD {gname}\" )\n", + "plt.title( f\"XY Plot of Rustody {gname} vs BD {gname}\" )\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "b6714c1e-180c-4d15-b48f-7768a20f6517", + "metadata": {}, + "source": [ + "# Next option : merge file 1/4 + file 3 of 4\n", + "\n", + "With 0 having no ADA reads for the cell of interest." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "983ea4a1-9e06-4628-bb94-8f724da68fa1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "quantify_rhapsody_multi -r /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz,/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R1_001.fastq.gz -f /mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz,/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R2_001.fastq.gz -o /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result -s human -e /mnt/data2/RhapsodyTest/VDJ_v1_example/BD_Rhapsody_Immune_Response_Panel_Hs.fasta -m 20 -v 'v1' 1>&2\n", + "Analysis will stop after having processed 18446744073709551615 fastq entries containing a cell info\n", + "\n", + "init models\n", + "the log file: Mapping_log.txt\n", + "Changing the expression start gene id to 398\n", + "After indexing all fastq files we have the following indices:\n", + "the mRNA index:\n", + "I have 41210 kmers for 398 genes with 0.16652039% duplicate entries\n", + "gene names like 'phiX174'\n", + "gene_ids range from Some(0) to Some(397)\n", + "\n", + "the sample id index:\n", + "I have 384 kmers for 12 genes with 0% duplicate entries\n", + "gene names like 'Sample12'\n", + "gene_ids range from Some(398) to Some(409)\n", + "\n", + "and the antibodies index:\n", + "This index is empty\n", + "\n", + "Writing index version 6\n", + "with kmer_len 32\n", + "And a total of 41210 data entries\n", + "\n", + "Parsing file pair 1\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 1.90 mio reads (62.68% with cell_id, 61.58% with gene_id) \n", + "Parsing file pair 2\n", + "\n", + "I am using 12 cpus\n", + "\u001b[2K\u001b[1m\u001b[2m\u001b[0m 3.86 mio reads (63.18% with cell_id, 62.06% with gene_id) \n", + "\n", + "Writing outfiles ...\n", + "filtering cells\n", + "Dropping cell with too little counts (n=105257)\n", + "3756 cells have passed the cutoff of 20 umi counts per cell.\n", + "\n", + "\n", + "writing gene expression\n", + "sparse Matrix: 3756 cell(s), 361 gene(s) and 173964 entries written to path Ok(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_expression\"); \n", + "Writing Antibody counts\n", + "No genes to report on - no data written to path Some(\"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_antibodies\")\n", + "Writing samples table\n", + "dense matrix: 3756 cell written\n", + "\n", + "Summary:\n", + "cellular reads : 2440902 reads (63.18% of total)\n", + "no cell ID reads : 1182320 reads (30.60% of total)\n", + "no gene ID reads : 0 reads (0.00% of total)\n", + "filtered reads : 239952 reads (6.21% of total)\n", + " -> polyA : 0 reads (0.00% of total)\n", + " -> bad qualiity : 238592 reads (6.18% of total)\n", + " -> too short : 365 reads (0.01% of total)\n", + " -> N's : 995 reads (0.03% of total)\n", + "\n", + "total reads : 3863174 reads\n", + "\n", + "collected read counts:\n", + "expression reads : 2397458 reads (98.22% of cellular)\n", + "antibody reads : 0 reads (0.00% of cellular)\n", + "sample reads : 0 reads (0.00% of cellular)\n", + "\n", + "reported UMI counts:\n", + "expression reads : 843659 UMIs (34.56% of cellular)\n", + "antibody reads : 0 UMIs (0.00% of cellular)\n", + "sample reads : 0 UMIs (0.00% of cellular)\n", + "\n", + "PCR duplicates or bad cells: 1597243 reads (65.44% of cellular)\n", + "\n", + "timings:\n", + " overall run time 0 h 0 min 50 sec 50 millisec\n", + " file-io run time 0 h 0 min 7 sec 758 millisec\n", + "single-cpu run time 0 h 0 min 0 sec 645 millisec\n", + " multi-cpu run time 0 h 0 min 40 sec 727 millisec\n", + "\n", + "\n", + "Cell->Sample table written to \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/SampleCounts.tsv\"\n", + "\n", + "quantify_rhapsody finished in 0h 0min 50 sec 51milli sec\n", + "\n", + "time: 50.3 s (started: 2024-01-26 15:30:09 +01:00)\n" + ] + } + ], + "source": [ + "exe = \"quantify_rhapsody_multi\"\n", + "R1 = [\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R1_001.fastq.gz\",\n", + " #\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R1_001.fastq.gz\",\n", + " \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R1_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R1_001.fastq.gz\"\n", + " ]\n", + "r1 = \",\".join(R1)\n", + "R2 = [ \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L004_R2_001.fastq.gz\",\n", + " #\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L002_R2_001.fastq.gz\",\n", + " \"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L001_R2_001.fastq.gz\"\n", + " #,\"/mnt/data2/RhapsodyTest/VDJ_v1_example/RhapVDJDemo-mRNA_S5_L003_R2_001.fastq.gz\"\n", + "]\n", + "r2 = \",\".join(R2)\n", + "out = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result\"\n", + "exp = \"/mnt/data2/RhapsodyTest/VDJ_v1_example/BD_Rhapsody_Immune_Response_Panel_Hs.fasta\"\n", + "\n", + "print( f\"{exe} -r {r1} -f {r2} -o {out} -s human -e {exp} -m 20 -v 'v1' 1>&2\" )\n", + "! {exe} -r {r1} -f {r2} -o {out} -s human -e {exp} -m 20 -v 'v1' 1>&2" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "2d091e1a-bdff-4a2a-99bc-aee52c90b091", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "reading Rustody expression from path /mnt/data2/RhapsodyTest/VDJ_v1_example/rustify_testData_result/BD_Rhapsody_expression/\n" + ] + }, + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 3756 × 361\n", + " obs: 'sample', 'CellID', 'Sample1', 'Sample2', 'Sample3', 'Sample4', 'Sample5', 'Sample6', 'Sample7', 'Sample8', 'Sample9', 'Sample10', 'Sample11', 'Sample12', 'AsignedSampleName', 'FractionTotal', 'n'\n", + " var: 'gene_ids', 'feature_types'" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 257 ms (started: 2024-01-26 15:30:59 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = readRustodyExpression( out, 'VDJ_Example_Data')\n", + "Rustody_Data" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "202fa93c-c1bd-4f00-b9d9-2dd0b5f7f32c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 4.9 ms (started: 2024-01-26 15:30:59 +01:00)\n" + ] + } + ], + "source": [ + "Rustody_Data = Rustody_Data[[ name for name in BD_Data.obs['Rustody_Names'] if name in Rustody_Data.obs_names]]" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "ba9cf171-19c3-4177-b893-6647cee96a23", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['CCL1', 'CCL2', 'CD80', 'CTSG', 'IL13', 'IL1RL1', 'IL5', 'LRRC32']" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 3.14 ms (started: 2024-01-26 15:30:59 +01:00)\n" + ] + } + ], + "source": [ + "[name for name in BD_Data.var_names if name not in Rustody_Data.var_names ]" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "a26d07b8-c736-4d45-a932-1c866ef362b8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
01gname
00.9158610.000000e+00ADA
10.8373860.000000e+00ADGRE1
20.7641030.000000e+00ADGRG3
30.7314990.000000e+00AIM2
40.9330870.000000e+00ANXA5
............
3540.8905070.000000e+00XBP1
3550.9334160.000000e+00YBX3
3560.8011910.000000e+00ZAP70
3570.6434305.186504e-318ZBTB16
3580.8344210.000000e+00ZNF683
\n", + "

359 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 gname\n", + "0 0.915861 0.000000e+00 ADA\n", + "1 0.837386 0.000000e+00 ADGRE1\n", + "2 0.764103 0.000000e+00 ADGRG3\n", + "3 0.731499 0.000000e+00 AIM2\n", + "4 0.933087 0.000000e+00 ANXA5\n", + ".. ... ... ...\n", + "354 0.890507 0.000000e+00 XBP1\n", + "355 0.933416 0.000000e+00 YBX3\n", + "356 0.801191 0.000000e+00 ZAP70\n", + "357 0.643430 5.186504e-318 ZBTB16\n", + "358 0.834421 0.000000e+00 ZNF683\n", + "\n", + "[359 rows x 3 columns]" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 2.32 s (started: 2024-01-26 15:30:59 +01:00)\n" + ] + } + ], + "source": [ + "cmp = pd.DataFrame(\n", + " [ pearsonr( np.array(BD_Data[:,gene].X.todense()).flatten(), np.array( Rustody_Data[:,gene].X.todense()).flatten() ) for gene in Rustody_Data.var_names if gene in BD_Data.var_names ] )\n", + "cmp['gname'] = [gene for gene in Rustody_Data.var_names if gene in BD_Data.var_names ]\n", + "cmp" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "d043e4ce-1512-44ec-b537-6203f9e9cdaa", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 101 ms (started: 2024-01-26 15:31:02 +01:00)\n" + ] + } + ], + "source": [ + "gname = \"ADA\"\n", + "import matplotlib.pyplot as plt\n", + "plt.figure(figsize=(8, 6))\n", + "plt.plot(Rustody_Data[:,gname].X.todense(), BD_Data[:,gname].X.todense(), 'o', color='blue') # 'o' represents marker style, you can change it as needed\n", + "plt.xlabel( f\"Rustody {gname}\" )\n", + "plt.ylabel( f\"BD {gname}\" )\n", + "plt.title( f\"XY Plot of Rustody {gname} vs BD {gname}\" )\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "c6bd2e70-1b34-40d8-9f2b-d8566952b679", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time: 331 ms (started: 2024-01-26 15:31:02 +01:00)\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "# Assuming Rustody_Data and BD_Data are pandas DataFrames\n", + "# Assuming you want to plot the \"ADA\" column from both DataFrames\n", + "\n", + "# Extracting data from the \"ADA\" column\n", + "rustody_x = np.array(Rustody_Data[:, gname].X.todense()[:,0].transpose()).ravel()\n", + "bd_x = np.array(BD_Data[:, gname].X.todense()[:,0].transpose()).ravel()\n", + "\n", + "# Creating the hexbin plot\n", + "plt.figure(figsize=(8, 6))\n", + "plt.hexbin(rustody_x, bd_x, gridsize=50, cmap='Blues', bins='log')\n", + "plt.colorbar(label='log10(count)')\n", + "plt.xlabel(f\"Rustody {gname}\")\n", + "plt.ylabel(f\"BD {gname}\")\n", + "plt.title('Hexbin Plot of Rustody vs BD')\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "58f090a4-aa23-4a47-8b3c-f27856d23bef", + "metadata": {}, + "source": [ + "# I need to pinch that back to BD\n", + "\n", + "I do not understand how they got this data!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d4b4aca1-cca1-4a55-b280-408e3e426da7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "73ded65a-f025-4c68-a9d0-a80900456ab7", + "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.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}