{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Attribution and Motifs Detection with Decima" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This documentation demonstrates how to use Decima's attribution analysis capabilities to identify important regulatory regions in genomic sequences and discover transcription factor binding motifs within those regions. Attribution analysis helps reveal which parts of the DNA sequence most strongly influence gene expression predictions, while **motif scanning** can identify specific transcription factor binding sites in these regions of interest." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## CLI API" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at a simple example using Decima's CLI API to analyze the SPI1 and BRD3 genes. SPI1 is a key transcription factor in myeloid cell development. We'll examine its regulation across different monocyte and macrophage cell types where it is known to be important." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:24:58.683436Z", "iopub.status.busy": "2025-11-21T06:24:58.683299Z", "iopub.status.idle": "2025-11-21T06:25:56.147216Z", "shell.execute_reply": "2025-11-21T06:25:56.146610Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Usage: decima attributions [OPTIONS]\r\n", "\r\n", " Generate and save attribution analysis results for a gene or a set of\r\n", " sequences and perform seqlet calling on the attributions.\r\n", "\r\n", " Output files:\r\n", "\r\n", " ├── {output_prefix}.attributions.h5 # Raw attribution score matrix\r\n", " per gene.\r\n", "\r\n", " ├── {output_prefix}.attributions.bigwig # Genome browser track of\r\n", " attribution as bigwig file.\r\n", "\r\n", " ├── {output_prefix}.seqlets.bed # List of attribution peaks in\r\n", " BED format.\r\n", "\r\n", " ├── {output_prefix}.motifs.tsv # Detected motifs in peak\r\n", " regions.\r\n", "\r\n", " └── {output_prefix}.warnings.qc.log # QC warnings about prediction\r\n", " reliability.\r\n", "\r\n", " Examples:\r\n", "\r\n", " >>> decima attributions -o output_prefix -g SPI1\r\n", "\r\n", " >>> decima attributions -o output_prefix -g SPI1,CD68 --tasks \"cell_type\r\n", " == 'classical monocyte'\" --device 0\r\n", "\r\n", " >>> decima attributions -o output_prefix --seqs tests/data/seqs.fasta\r\n", " --tasks \"cell_type == 'classical monocyte'\" --device 0\r\n", "\r\n", "Options:\r\n", " -o, --output-prefix TEXT Prefix path to the output files [required]\r\n", " -g, --genes TEXT Comma-separated list of gene symbols or IDs\r\n", " to analyze.\r\n", " --seqs TEXT Path to a file containing sequences to\r\n", " analyze\r\n", " --tasks TEXT Query string to filter cell types to analyze\r\n", " attributions for (e.g. 'cell_type ==\r\n", " 'classical monocyte'')\r\n", " --off-tasks TEXT Optional query string to filter cell types\r\n", " to contrast against.\r\n", " --model TEXT Model to use for attribution analysis either\r\n", " replicate number or path to the model.\r\n", " [default: ensemble]\r\n", " --metadata TEXT Path to the metadata anndata file or name of\r\n", " the model. If not provided, the compabilite\r\n", " metadata for the model will be used.\r\n", " --method TEXT Method to use for attribution analysis.\r\n", " --transform [specificity|aggregate]\r\n", " Transform to use for attribution analysis.\r\n", " --num-workers INTEGER Number of workers for attribution analysis.\r\n", " --tss-distance INTEGER TSS distance for attribution analysis.\r\n", " --batch-size INTEGER Batch size for attribution analysis.\r\n", " --top-n-markers INTEGER Top n markers to predict. If not provided,\r\n", " all markers will be predicted.\r\n", " --threshold FLOAT Threshold for attribution analysis.\r\n", " --min-seqlet-len INTEGER Minimum length for seqlet calling.\r\n", " --max-seqlet-len INTEGER Maximum length for seqlet calling.\r\n", " --additional-flanks INTEGER Additional flanks for seqlet calling.\r\n", " --pattern-type [both|pos|neg] Type of pattern to call.\r\n", " --meme-motif-db TEXT Path to the MEME motif database. [default:\r\n", " hocomoco_v13]\r\n", " --device TEXT Device to use for attribution analysis.\r\n", " --genome TEXT Genome name or path to the genome fasta\r\n", " file. [default: hg38]\r\n", " --help Show this message and exit.\r\n", "\u001b[0m" ] } ], "source": [ "! decima attributions --help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This decima command analyzes gene attributions: `--genes \"SPI1,BRD3\"` specifies focusing on SPI1 and BRD3; `--tasks \"cell_type == 'classical monocyte'\"` filters the analysis to classical monocytes only; and `--output_prefix` output_classical_monoctypes/ designates the output directory for the results. You can also pass `--off-tasks` that are cell types used as a contrast group when analyzing cell type specificity - they represent the cell types you want to compare against when determining. If you do not pass, `--tasks` argument all avaliable cells will be used for attribution calculation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:25:56.149231Z", "iopub.status.busy": "2025-11-21T06:25:56.149075Z", "iopub.status.idle": "2025-11-21T06:26:54.297385Z", "shell.execute_reply": "2025-11-21T06:26:54.296708Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "decima - INFO - Using device: 0\r\n", "decima - INFO - Loading model v1_rep0 and metadata to compute attributions...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmhcelik\u001b[0m (\u001b[33mmhcw\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'rep0:latest', 720.03MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:01.6 (445.8MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:07.1 (437.5MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/Projects/decima/src/decima/interpret/attributer.py:66: UserWarning: `off_tasks` is not provided. Using all other tasks as off_tasks.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Computing attributions...: 0%| | 0/2 [00:00" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "\n", "Image(\"example/output_classical_monoctypes_plots/SPI1_seqlogos/SPI1@267.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Querying Cells" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To obtain attributions, cells of interest must be selected using the query API. We support Pandas' query API functionality on the cell metadata DataFrame. Here are examples of how to write queries:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:28:53.788330Z", "iopub.status.busy": "2025-11-21T06:28:53.788190Z", "iopub.status.idle": "2025-11-21T06:29:05.164957Z", "shell.execute_reply": "2025-11-21T06:29:05.164317Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Usage: decima query-cell [OPTIONS] [QUERY]\r\n", "\r\n", " Query a cell using query string\r\n", "\r\n", " Examples:\r\n", "\r\n", " >>> decima query-cell 'cell_type == \"classical monocyte\"' ...\r\n", "\r\n", " >>> decima query-cell 'cell_type == \"classical monocyte\" and disease ==\r\n", " \"healthy\" and tissue == \"blood\"' ...\r\n", "\r\n", " >>> decima query-cell 'cell_type.str.contains(\"monocyte\") and disease ==\r\n", " \"healthy\"' ...\r\n", "\r\n", "Options:\r\n", " --metadata TEXT Path to the metadata anndata file or name of the model.\r\n", " Default: ensemble.\r\n", " --help Show this message and exit.\r\n", "\u001b[0m" ] } ], "source": [ "! decima query-cell --help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Query cells of type \"classical monocyte\" using Pandas query syntax: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.query.html" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:29:05.166830Z", "iopub.status.busy": "2025-11-21T06:29:05.166668Z", "iopub.status.idle": "2025-11-21T06:29:20.089279Z", "shell.execute_reply": "2025-11-21T06:29:20.088698Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmhcelik\u001b[0m (\u001b[33mmhcw\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:01.8 (1700.8MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " cell_type tissue organ disease study dataset region subregion celltype_coarse n_cells total_counts n_genes size_factor train_pearson val_pearson test_pearson\r\n", "agg_4705 classical monocyte alveolar system lung COVID-19 GSE155249 scimilarity nan nan 7244 26544273.0 15325 34749.092791034054 0.946616874183219 0.8437000068912937 0.8506571540216992\r\n", "agg_4706 classical monocyte alveolar system lung healthy GSE155249 scimilarity nan nan 72 218105.0 9142 30484.31888978114 0.9102228263646758 0.8083487523192785 0.8047828694155461\r\n", "agg_4707 classical monocyte ampulla of uterine tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 78 550950.0 9639 30719.377971431015 0.9077670011915634 0.8045070167513724 0.7896845423359651\r\n", "agg_4708 classical monocyte aorta vasculature Abdominal Aortic Aneurysm GSE166676 scimilarity nan nan 432 1091075.0 11192 32981.443348717905 0.9389265854768138 0.8357299205241656 0.830575965756882\r\n", "agg_4709 classical monocyte aorta vasculature healthy GSE166676 scimilarity nan nan 25 162858.0 8859 31216.275954364824 0.8819013257206973 0.7821403055329706 0.7646999711802146\r\n", "agg_4710 classical monocyte apex of heart heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 397 1226515.0 12369 32022.563851814968 0.9469178617442242 0.8326145310572417 0.8365506153530168\r\n", "agg_4711 classical monocyte blood blood COVID-19 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 17462 78882609.0 15711 33080.17541357136 0.9536210517623883 0.8539379752673611 0.8485800714004562\r\n", "agg_4712 classical monocyte blood blood COVID-19 7d7cabfd-1d1f-40af-96b7-26a0825a306d scimilarity nan nan 141914 659177004.0 15175 32282.29230923367 0.9575085257562032 0.8570056960758388 0.8507770895392532\r\n", "agg_4713 classical monocyte blood blood COVID-19 GSE154567 scimilarity nan nan 8613 40239000.0 16023 34450.628692057784 0.9605287026438375 0.8551842525202262 0.8491670381176235\r\n", "agg_4714 classical monocyte blood blood COVID-19 GSE158034 scimilarity nan nan 35 91390.0 7372 27446.425385592618 0.8476138307738649 0.7606096001026369 0.7256993661246048\r\n", "agg_4715 classical monocyte blood blood COVID-19 GSE161918 scimilarity nan nan 163244 1023475761.0 15929 31151.84947891148 0.9361102289470363 0.8261601916328626 0.8168421752771801\r\n", "agg_4716 classical monocyte blood blood COVID-19 GSE163668 scimilarity nan nan 8399 55036800.0 15792 33644.10626885235 0.9571638472088531 0.8529462339847145 0.8506441761860545\r\n", "agg_4717 classical monocyte blood blood COVID-19 GSE166992 scimilarity nan nan 2238 12283507.0 14186 32596.636302802952 0.9567710210039843 0.8531485173368566 0.8416173697367906\r\n", "agg_4718 classical monocyte blood blood COVID-19 ddfad306-714d-4cc0-9985-d9072820c530 scimilarity nan nan 61002 230056884.0 16484 32520.14418628346 0.9487335053479237 0.8533686239486711 0.8454541123444707\r\n", "agg_4719 classical monocyte blood blood COVID-19 eb735cc9-d0a7-48fa-b255-db726bf365af scimilarity nan nan 19777 105875381.0 15812 32330.088619084574 0.9558882745902155 0.8545238316898663 0.8468877639468763\r\n", "agg_4720 classical monocyte blood blood HIV enteropathy GSE157829 scimilarity nan nan 491 1449812.0 12290 33110.90004135926 0.9412108394642186 0.8352699509238034 0.8345507070277177\r\n", "agg_4721 classical monocyte blood blood Myelofibrosis GSE117824 scimilarity nan nan 357 1492491.0 11548 32726.985198452294 0.9446223529088382 0.8417521390049872 0.8328218073658378\r\n", "agg_4722 classical monocyte blood blood NA GSE132950 scimilarity nan nan 146 784054.0 10913 30417.15641845661 0.9276395863920666 0.8264978172767997 0.8176327551177259\r\n", "agg_4723 classical monocyte blood blood NA GSE135325 scimilarity nan nan 232 633533.0 11129 31159.105128910356 0.9369963391148282 0.8254811186623798 0.8207578599532835\r\n", "agg_4724 classical monocyte blood blood NA GSE150233 scimilarity nan nan 1141 2453545.0 12228 32204.245569759012 0.9354773292749718 0.8333534679658088 0.8202743631285762\r\n", "agg_4725 classical monocyte blood blood NA GSE151310 scimilarity nan nan 48 151358.0 8028 27001.118740317568 0.8873812787091045 0.7886356061906991 0.766461694552445\r\n", "agg_4726 classical monocyte blood blood NA GSE164378 scimilarity nan nan 54305 476237982.0 17463 34023.11682209347 0.9636663701487779 0.856267291847072 0.8496477594095655\r\n", "agg_4727 classical monocyte blood blood NA GSE164402 scimilarity nan nan 6577 33889420.0 14992 33855.14311643263 0.9502216042319906 0.846017695872854 0.8447747394204608\r\n", "agg_4728 classical monocyte blood blood Sezary's disease GSE122703 scimilarity nan nan 35 148650.0 8487 29592.979037498706 0.8928094999389883 0.7911806688728295 0.7911936593448785\r\n", "agg_4729 classical monocyte blood blood dengue disease GSE145307 scimilarity nan nan 785 7639702.0 13722 33610.52078618725 0.9561427618691068 0.8544883780028308 0.8514781068765508\r\n", "agg_4730 classical monocyte blood blood dengue disease GSE154386 scimilarity nan nan 19173 143929741.0 16877 34242.50262506596 0.9586193824399223 0.8509705295166231 0.8546685528097621\r\n", "agg_4731 classical monocyte blood blood drug hypersensitivity syndrome GSE132802 scimilarity nan nan 1269 7314697.0 13270 32574.34811388645 0.9570929839341253 0.8466339050741839 0.8442788242172967\r\n", "agg_4732 classical monocyte blood blood fibrosis GSE136103 scimilarity nan nan 1774 5003888.0 13389 31155.271000486402 0.9562933985421416 0.8435982250231042 0.8386367834560556\r\n", "agg_4733 classical monocyte blood blood healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 32464 109280914.0 16158 33646.02843110038 0.9568728712803031 0.8545324533535094 0.8487445540580735\r\n", "agg_4734 classical monocyte blood blood healthy 436154da-bcf1-4130-9c8b-120ff9a888f2 scimilarity nan nan 76800 206490628.0 16683 30736.453324546856 0.955313650235467 0.8494127267867799 0.84210567312908\r\n", "agg_4735 classical monocyte blood blood healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 1044 3638976.0 12306 30542.8977364245 0.9465384578921433 0.851991795617166 0.8308191715256182\r\n", "agg_4736 classical monocyte blood blood healthy DS000010023 scimilarity nan nan 243 362606.0 8414 25201.261024165953 0.8865446516098515 0.7621391376670988 0.7681818769796727\r\n", "agg_4737 classical monocyte blood blood healthy GSE122703 scimilarity nan nan 18 83417.0 7546 28194.725173315186 0.859225612396475 0.7640890699253299 0.7443681539461423\r\n", "agg_4738 classical monocyte blood blood healthy GSE130117 scimilarity nan nan 2017 7130588.0 13535 33078.53692191542 0.9553673450160365 0.851402109626239 0.8385936100758409\r\n", "agg_4739 classical monocyte blood blood healthy GSE132802 scimilarity nan nan 1601 9955248.0 13132 32063.630951743195 0.9478882791739611 0.8391025143866828 0.8303465877530952\r\n", "agg_4740 classical monocyte blood blood healthy GSE139324 scimilarity nan nan 2333 8331045.0 13985 31135.881287246768 0.9608208780142045 0.8473885992448625 0.8432790193723467\r\n", "agg_4741 classical monocyte blood blood healthy GSE145809 scimilarity nan nan 69 245221.0 8962 29135.67197629852 0.8825701041728526 0.7811799267734735 0.7818647625179129\r\n", "agg_4742 classical monocyte blood blood healthy GSE149313 scimilarity nan nan 2420 6974751.0 13143 29560.496854576566 0.9574598613513423 0.8505290963248237 0.8379199735887167\r\n", "agg_4743 classical monocyte blood blood healthy GSE153421 scimilarity nan nan 3691 15561725.0 14569 34377.465875728165 0.9636686704566925 0.8576434473562725 0.8511814190737197\r\n", "agg_4744 classical monocyte blood blood healthy GSE156989 scimilarity nan nan 13554 160011485.0 16915 34135.439844737564 0.9640667421350761 0.8577967800377495 0.8517975138366085\r\n", "agg_4745 classical monocyte blood blood healthy GSE157829 scimilarity nan nan 1619 6957811.0 13507 30199.39288988673 0.9484019976492215 0.8436979316400604 0.8347196616710685\r\n", "agg_4746 classical monocyte blood blood healthy GSE159113 scimilarity nan nan 1025 6298250.0 12083 27477.50809897617 0.9078020151513733 0.8121457150205226 0.7980372877810575\r\n", "agg_4747 classical monocyte blood blood healthy GSE161329 scimilarity nan nan 5654 25653579.0 14349 28848.0539929647 0.9549801428956252 0.8450430950674043 0.8406188789518544\r\n", "agg_4748 classical monocyte blood blood healthy GSE161738 scimilarity nan nan 2676 13801473.0 12825 33337.477050230416 0.9541962906717452 0.8512846409758499 0.8485408028961247\r\n", "agg_4749 classical monocyte blood blood healthy GSE163668 scimilarity nan nan 2644 10486314.0 14049 33786.96584264489 0.9597801578342394 0.8560775485935677 0.8512149509551471\r\n", "agg_4750 classical monocyte blood blood healthy GSE166992 scimilarity nan nan 7501 28033216.0 15079 33455.367364577316 0.9622273594219685 0.8558958139235102 0.8495571689751152\r\n", "agg_4751 classical monocyte blood blood healthy GSE167363 scimilarity nan nan 3135 14722635.0 14375 29977.24002819913 0.942417448875388 0.8368071803109702 0.8258536430202982\r\n", "agg_4752 classical monocyte blood blood healthy GSE168710 scimilarity nan nan 16484 104881872.0 16223 34107.336261357574 0.9398282119039322 0.8424821834537695 0.8372971004604842\r\n", "agg_4753 classical monocyte blood blood healthy GSE168732 scimilarity nan nan 770 2548822.0 12508 33411.30103713399 0.9552513581030765 0.8508279875038706 0.847461536110767\r\n", "agg_4754 classical monocyte blood blood healthy b0cf0afa-ec40-4d65-b570-ed4ceacc6813 scimilarity nan nan 40975 300555227.0 15784 35938.85772500803 0.9622425892039956 0.853424173800979 0.8508714303589978\r\n", "agg_4755 classical monocyte blood blood healthy ddfad306-714d-4cc0-9985-d9072820c530 scimilarity nan nan 8827 36073928.0 15131 33208.591584008376 0.9546118779961532 0.8543086616569785 0.8462739374830107\r\n", "agg_4756 classical monocyte blood blood intracranial hypotension GSE138266 scimilarity nan nan 2503 9675804.0 14485 30160.767605621222 0.9452052724479383 0.8423537848756032 0.8326629487875993\r\n", "agg_4757 classical monocyte blood blood mucocutaneous lymph node syndrome GSE168732 scimilarity nan nan 5745 25930751.0 14822 33366.18751424575 0.9564515409367231 0.8556431530577528 0.8540185868162636\r\n", "agg_4758 classical monocyte blood blood multiple sclerosis GSE138266 scimilarity nan nan 3988 13926825.0 14991 31442.03464388843 0.9522779953120408 0.847799219646348 0.8382058078578654\r\n", "agg_4759 classical monocyte blood blood non-alcoholic fatty liver disease GSE136103 scimilarity nan nan 8306 29424841.0 15410 32004.200489375227 0.9619190264492873 0.8478709124980346 0.8451242436776344\r\n", "agg_4760 classical monocyte blood blood rheumatoid arthritis GSE159117 scimilarity nan nan 834 4637566.0 12079 31364.847230552205 0.9356058277176598 0.8232134520999813 0.8176333921128414\r\n", "agg_4761 classical monocyte blood blood septic shock GSE167363 scimilarity nan nan 3860 51041813.0 15830 31688.79561595612 0.948652055959824 0.8541736693569211 0.8427375237296424\r\n", "agg_4762 classical monocyte blood blood systemic lupus erythematosus 436154da-bcf1-4130-9c8b-120ff9a888f2 scimilarity nan nan 200468 516575809.0 16896 30011.373010792136 0.9562030923644677 0.8480520393236465 0.844052374052952\r\n", "agg_4763 classical monocyte blood blood systemic lupus erythematosus GSE142016 scimilarity nan nan 8268 22146620.0 14873 30889.72528098081 0.9588937962174496 0.8480448150326806 0.8395981302528143\r\n", "agg_4764 classical monocyte blood blood systemic lupus erythematosus GSE153765 scimilarity nan nan 42 109982.0 7500 27335.812367044335 0.8566470004710053 0.7665719714665945 0.7374607536624445\r\n", "agg_4765 classical monocyte blood blood systemic lupus erythematosus GSE156989 scimilarity nan nan 30367 310637290.0 17082 33485.308563356346 0.9623402060903008 0.8532487075078466 0.8473526649094757\r\n", "agg_4766 classical monocyte blood blood thrombocytopenia GSE149313 scimilarity nan nan 2724 15059814.0 14328 30599.80301260898 0.9543473550386421 0.8520722945129096 0.8417995728182829\r\n", "agg_4767 classical monocyte bone bone Langerhans Cell Histiocytosis GSE133704 scimilarity nan nan 439 1404680.0 11388 30817.807833507268 0.9358504157466769 0.830348562008033 0.826566269904344\r\n", "agg_4769 classical monocyte bone marrow bone marrow NA GSE162692 scimilarity nan nan 1234 4757721.0 13466 31707.380952189662 0.953852620063789 0.8503857428588029 0.8377674131460707\r\n", "agg_4770 classical monocyte bone marrow bone marrow essential thrombocythemia GSE117824 scimilarity nan nan 1649 7825780.0 13487 32454.468003620656 0.9503614540027875 0.8479601234457582 0.838408163377457\r\n", "agg_4772 classical monocyte bone marrow bone marrow healthy GSE132509 scimilarity nan nan 610 2315570.0 12950 31768.06513427212 0.95159369508558 0.8517118261701931 0.836658919433696\r\n", "agg_4773 classical monocyte bone marrow bone marrow healthy GSE154109 scimilarity nan nan 531 1431388.0 11793 31377.450948003392 0.9490546933955852 0.8431566630120637 0.8370883160295727\r\n", "agg_4774 classical monocyte bone marrow bone marrow healthy GSE163278 scimilarity nan nan 1119 3970394.0 13361 32081.93302956569 0.9620394897163868 0.8531148861215617 0.8426785397396367\r\n", "agg_4775 classical monocyte bone marrow bone marrow healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 151 8025584.0 12883 29444.78352863075 0.8440608178227607 0.740574910750325 0.7417328577454956\r\n", "agg_4776 classical monocyte bone marrow bone marrow monoclonal gammopathy GSE163278 scimilarity nan nan 1010 3124102.0 12959 30344.72094719757 0.9581906874137958 0.8503948562041261 0.8391672246132192\r\n", "agg_4777 classical monocyte breast breast healthy GSE164898 scimilarity nan nan 136 641471.0 12971 34463.52724138501 0.9163324788498406 0.8116274576633968 0.7978555908123931\r\n", "agg_4778 classical monocyte breast breast healthy c9706a92-0e5f-46c1-96d8-20e42467f287 scimilarity nan nan 98 1444245.0 13491 30678.263421880285 0.9165520953567395 0.8162053142576849 0.7994301225229256\r\n", "agg_4779 classical monocyte bronchus airway COVID-19 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 104 270108.0 8816 27933.501359354133 0.8884582873892427 0.7928474093439662 0.786626157931558\r\n", "agg_4780 classical monocyte bronchus airway COVID-19 GSE168215 scimilarity nan nan 90 217928.0 8444 27417.845704249117 0.880738805029126 0.7855823736726739 0.7798557380738542\r\n", "agg_4782 classical monocyte bronchus airway healthy GSE158127 scimilarity nan nan 158 1158198.0 12643 34764.50196701077 0.9364512338084163 0.8259291909369686 0.8266638555276521\r\n", "agg_4783 classical monocyte cardiac muscle of left ventricle heart healthy GSE156703 scimilarity nan nan 13 116181.0 9463 35695.66320276271 0.8542740960069863 0.7515621053395214 0.7561639038477878\r\n", "agg_4784 classical monocyte carotid artery segment vasculature atherosclerosis GSE155512 scimilarity nan nan 58 515211.0 10839 32837.84505237503 0.9343565353773022 0.8190650931322585 0.8202426969221358\r\n", "agg_4785 classical monocyte caudate lobe of liver liver healthy 44531dd9-1388-4416-a117-af0a99de2294 scimilarity nan nan 238 730016.0 11505 31342.386314731422 0.9217674983890346 0.8140551552218395 0.8040417787954989\r\n", "agg_4786 classical monocyte cortex of kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 79 323010.0 10939 32378.76683324232 0.9028856137251035 0.7978822439778066 0.7839454035009307\r\n", "agg_4787 classical monocyte cortex of kidney kidney healthy a98b828a-622a-483a-80e0-15703678befd scimilarity nan nan 91 477355.0 10898 32358.068865763344 0.9328436291917394 0.8237810319569842 0.8195391931798526\r\n", "agg_4789 classical monocyte digestive tract gut healthy DS000011665 scimilarity nan nan 347 1679116.0 12155 33347.55517047197 0.9422556928648441 0.8417267634096297 0.84018452536733\r\n", "agg_4790 classical monocyte exocrine pancreas pancreas healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 821 7824069.0 14847 36135.64587109593 0.9493709998172055 0.8440837716099078 0.8410246939313819\r\n", "agg_4791 classical monocyte fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 131 734093.0 11240 33115.640434504094 0.9359103734457376 0.8339026306142181 0.8225901799509813\r\n", "agg_4792 classical monocyte fimbria of uterine tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 34 209362.0 7663 27635.733860508328 0.8560416684135254 0.7382997749370328 0.7459235366949488\r\n", "agg_4794 classical monocyte gingiva mouth periodontitis GSE152042 scimilarity nan nan 198 879477.0 11312 32107.813302914532 0.9416262876541264 0.8333723697695014 0.8279530215775117\r\n", "agg_4795 classical monocyte head of femur bone healthy GSE169396 scimilarity nan nan 450 3669304.0 13216 33082.323604222154 0.9529417082022753 0.8522346343107771 0.8359032081996703\r\n", "agg_4797 classical monocyte heart left ventricle heart NA ENCODE scimilarity nan nan 50 138407.30523254164 11428 41105.63651890687 0.8614790128015358 0.7843765107548858 0.7889308929671582\r\n", "agg_4798 classical monocyte heart left ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 192 585001.0 11159 31422.874036870588 0.9363985001217598 0.8226438123601741 0.8283173244446851\r\n", "agg_4799 classical monocyte heart right ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 316 936263.0 11904 32002.67227624691 0.9425900348990802 0.8306128730459813 0.8308116461021977\r\n", "agg_4800 classical monocyte ileum gut Crohn's disease 17481d16-ee44-49e5-bcf0-28c0780d8c4a scimilarity nan nan 76 311515.0 9984 29687.611679190355 0.9103310804624617 0.8063080284939284 0.7916226068478351\r\n", "agg_4801 classical monocyte ileum gut Crohn's disease DS000011665 scimilarity nan nan 119 298206.0 8021 26013.286557459236 0.880272438867354 0.7572099232100128 0.7459713937143965\r\n", "agg_4802 classical monocyte inferior nasal concha bone chronic rhinosinusitis with nasal polyps GSE156285 scimilarity nan nan 241 1048981.0 12463 35082.083353928334 0.9475981193848912 0.8330375982148592 0.833114773003936\r\n", "agg_4803 classical monocyte interventricular septum heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 442 1322725.0 12418 32235.5434681197 0.94751399102473 0.8340623939411483 0.8353858365852226\r\n", "agg_4804 classical monocyte isthmus of fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 62 318330.0 8642 29768.198512126502 0.8846027131590791 0.784220371073871 0.7739277341448829\r\n", "agg_4805 classical monocyte kidney kidney NA GSE145927 scimilarity nan nan 1789 6957949.0 15145 34853.400215205314 0.9586386429540185 0.8579622487738222 0.8524123833700197\r\n", "agg_4806 classical monocyte kidney kidney acute kidney failure bcb61471-2a44-4d00-a0af-ff085512674c scimilarity nan nan 587 1589224.0 12335 32471.78147434854 0.9513927341618255 0.84278469020191 0.8402011848101985\r\n", "agg_4807 classical monocyte kidney kidney chronic kidney disease bcb61471-2a44-4d00-a0af-ff085512674c scimilarity nan nan 134 440788.0 10831 32410.84600407974 0.9323603662663799 0.8153954443953603 0.8190416636069936\r\n", "agg_4808 classical monocyte kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 762 4034828.0 14946 34015.00816823295 0.9520640694425091 0.848205266473767 0.836085027208869\r\n", "agg_4809 classical monocyte kidney kidney healthy DS000010415 scimilarity nan nan 55 127079.0 8055 27206.419037355434 0.8216238135756493 0.7570847030479543 0.72524174726152\r\n", "agg_4810 classical monocyte kidney kidney healthy GSE140989 scimilarity nan nan 174 563438.0 11016 29887.593299155575 0.914390252807459 0.8069762795735104 0.8086759072557722\r\n", "agg_4811 classical monocyte left cardiac atrium heart NA ENCODE scimilarity nan nan 59 225070.96128814947 12831 43727.214042795575 0.8938217272345973 0.8048974803645641 0.8168195119621123\r\n", "agg_4812 classical monocyte left cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 450 1446734.0 12669 32433.20393285361 0.9467532324494885 0.8378571513042986 0.8360845068688169\r\n", "agg_4813 classical monocyte left lung lung NA ENCODE scimilarity nan nan 16 40636.89964582212 7786 32627.503591080356 0.7956982592153874 0.7257891637293196 0.6945729831399207\r\n", "agg_4814 classical monocyte liver liver Alagille syndrome GSE163650 scimilarity nan nan 92 188745.0 7678 24676.271768005652 0.8778490663838523 0.7727787177978541 0.7475297818459176\r\n", "agg_4815 classical monocyte liver liver Biliary atresia GSE163650 scimilarity nan nan 367 1615410.0 11423 31280.031237098276 0.9308940943983487 0.8275363405345841 0.8098394949074608\r\n", "agg_4816 classical monocyte liver liver fibrosis GSE136103 scimilarity nan nan 1053 5824229.0 14559 31950.801484792315 0.9632028296773183 0.8486875622591808 0.8450295232730788\r\n", "agg_4817 classical monocyte liver liver healthy GSE136103 scimilarity nan nan 2036 7668787.0 14818 32446.71686472893 0.9614468191909097 0.8455504517344443 0.8464065028454753\r\n", "agg_4818 classical monocyte liver liver healthy GSE159977 scimilarity nan nan 584 4703990.0 13644 34306.87421529999 0.9580119653448788 0.8463006395755477 0.8456137609888349\r\n", "agg_4819 classical monocyte liver liver healthy GSE163650 scimilarity nan nan 440 4840312.0 12272 31180.407161439263 0.9312379663603724 0.8198899526213368 0.8071334502842269\r\n", "agg_4820 classical monocyte liver liver non-alcoholic fatty liver disease GSE136103 scimilarity nan nan 675 3625081.0 13858 31875.772311414476 0.9607644852684971 0.8451153856892568 0.8434410362324897\r\n", "agg_4821 classical monocyte liver liver non-alcoholic steatohepatitis GSE159977 scimilarity nan nan 818 5328417.0 13712 34244.79288663241 0.9625204736588413 0.8495046961098656 0.843851264103893\r\n", "agg_4822 classical monocyte lower lobe of left lung lung NA ENCODE scimilarity nan nan 119 332235.9213328175 13992 45607.18635453728 0.9075609223976155 0.8257092626936027 0.8254709531577699\r\n", "agg_4823 classical monocyte lower lobe of lung lung healthy GSE169471 scimilarity nan nan 305 1224338.0 11342 28255.985922767635 0.9404343350984603 0.8261785132237449 0.8150341534919611\r\n", "agg_4824 classical monocyte lung lung COVID-19 GSE145926 scimilarity nan nan 6755 29326462.0 15670 32143.238185602037 0.9347325303698273 0.8382075353537076 0.8350131792189084\r\n", "agg_4825 classical monocyte lung lung COVID-19 GSE149878 scimilarity nan nan 1388 17477477.0 15453 32118.37391645824 0.9547396360778304 0.8488321261303191 0.8334226404565429\r\n", "agg_4826 classical monocyte lung lung COVID-19 covid scimilarity nan nan 87 182436.0 8979 30922.571470240666 0.8944321462094855 0.7906545756360502 0.7941388516891991\r\n", "agg_4827 classical monocyte lung lung Idiopathic pulmonary arterial hypertension GSE169471 scimilarity nan nan 338 1099281.0 11441 29048.65706098467 0.9394268881459132 0.8205211245968264 0.8008915371926529\r\n", "agg_4828 classical monocyte lung lung NA GSE122960 scimilarity nan nan 2035 4747594.0 13592 31170.75054081323 0.947029489389696 0.8239671657460403 0.8229589179837169\r\n", "agg_4829 classical monocyte lung lung NA GSE150708 scimilarity nan nan 1711 18922764.0 15768 34651.58457127426 0.9197817700449655 0.8258478966731367 0.8332402246613281\r\n", "agg_4830 classical monocyte lung lung NA GSE159354 scimilarity nan nan 804 1319717.0 12267 30466.67987009986 0.9289888078126158 0.8179900347657229 0.8046761734394422\r\n", "agg_4831 classical monocyte lung lung chronic obstructive pulmonary disease DS000011735 scimilarity nan nan 1757 5736362.0 16385 37750.32029026267 0.8922650938609307 0.8174310943962452 0.7970204631208431\r\n", "agg_4832 classical monocyte lung lung healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 1254 5397217.0 13298 31013.01576531177 0.9490555294982109 0.8457060773457411 0.8329330004620054\r\n", "agg_4833 classical monocyte lung lung healthy DS000011735 scimilarity nan nan 4653 16523051.0 17066 37593.98867222708 0.8985708908575675 0.8260014412964971 0.8051199142820423\r\n", "agg_4834 classical monocyte lung lung healthy GSE128033 scimilarity nan nan 1047 3646581.0 13185 29331.2035341724 0.9513045959002788 0.837770557527153 0.8238987539695043\r\n", "agg_4835 classical monocyte lung lung healthy GSE128169 scimilarity nan nan 1732 11798577.0 15051 32941.755873862814 0.9636814596401634 0.8539834251349044 0.8457626672394015\r\n", "agg_4836 classical monocyte lung lung healthy GSE132771 scimilarity nan nan 1601 4614408.0 13275 29761.03818692572 0.9531291409651284 0.8457644131717956 0.8310980214000753\r\n", "agg_4837 classical monocyte lung lung healthy GSE169471 scimilarity nan nan 498 1613976.0 11886 28956.213107123967 0.9433400854993297 0.8271067022019086 0.815595680192867\r\n", "agg_4838 classical monocyte lung lung hypersensitivity pneumonitis GSE122960 scimilarity nan nan 374 1513589.0 11850 30594.494180377842 0.9436379625667726 0.8236248274374875 0.8201281668004226\r\n", "agg_4839 classical monocyte lung lung idiopathic pulmonary fibrosis DS000011735 scimilarity nan nan 3273 11098539.0 16692 36983.80245044498 0.9002060376489591 0.825628591643822 0.8057309447193657\r\n", "agg_4840 classical monocyte lung lung idiopathic pulmonary fibrosis GSE122960 scimilarity nan nan 795 2302741.0 12763 31758.949309599942 0.9481965424789537 0.8315974088368188 0.8291678346888611\r\n", "agg_4841 classical monocyte lung lung idiopathic pulmonary fibrosis GSE128033 scimilarity nan nan 264 892053.0 10997 28549.410927787198 0.9388857876621541 0.8259212982973368 0.8088642639807162\r\n", "agg_4842 classical monocyte lung lung idiopathic pulmonary fibrosis GSE132771 scimilarity nan nan 562 1301612.0 12354 30446.385456748263 0.9469963680992495 0.8353213795556867 0.820474733820443\r\n", "agg_4844 classical monocyte lung lung idiopathic pulmonary fibrosis GSE143706 scimilarity nan nan 28 77859.0 5999 21933.076720558005 0.8162248508692449 0.6872290766118224 0.6675933221673609\r\n", "agg_4845 classical monocyte lung lung idiopathic pulmonary fibrosis GSE146981 scimilarity nan nan 28 77859.0 5999 21933.076720558005 0.8151661654118738 0.6848887765520302 0.667713152235204\r\n", "agg_4846 classical monocyte lung lung idiopathic pulmonary fibrosis GSE159354 scimilarity nan nan 963 1825354.0 12518 29731.366588446697 0.9431677835768482 0.8335606700375219 0.8147956336542009\r\n", "agg_4847 classical monocyte lung lung interstitial lung disease GSE122960 scimilarity nan nan 255 622277.0 10480 29149.028142322823 0.9283467350849584 0.8054016349869099 0.8007862785744999\r\n", "agg_4848 classical monocyte lung lung interstitial lung disease GSE128169 scimilarity nan nan 697 1972432.0 12243 29254.839846468705 0.9423878335093786 0.8300974626358707 0.8196994274197087\r\n", "agg_4849 classical monocyte lung lung scleroderma GSE128169 scimilarity nan nan 108 906362.0 11850 32908.696557354284 0.9438117150692724 0.8371885386238901 0.8225520820106291\r\n", "agg_4850 classical monocyte lung lung scleroderma GSE132771 scimilarity nan nan 98 335776.0 9515 28212.056049440183 0.9149834322044056 0.8124364794406282 0.7889831369493125\r\n", "agg_4851 classical monocyte lung lung systemic scleroderma;interstitial lung disease GSE159354 scimilarity nan nan 680 1244200.0 11364 27669.832360293723 0.9311681193836778 0.8218066897336025 0.801632654842017\r\n", "agg_4852 classical monocyte lung parenchyma lung COVID-19 GSE158127 scimilarity nan nan 1028 2949423.0 13468 33486.58561312063 0.9573331305866764 0.8476148647425674 0.8402420746316328\r\n", "agg_4853 classical monocyte lung parenchyma lung healthy GSE158127 scimilarity nan nan 791 2735456.0 13260 33646.87553319058 0.9544351950657847 0.8399981618864122 0.8327646420552953\r\n", "agg_4854 classical monocyte lymph node lymph node Langerhans Cell Histiocytosis GSE133704 scimilarity nan nan 41 112531.0 7250 25404.282603262254 0.8424914182716917 0.7490029862443883 0.7315420690462492\r\n", "agg_4855 classical monocyte mesenteric artery vasculature healthy GSE156341 scimilarity nan nan 49 408553.0 10083 30979.99239432764 0.9337200372314851 0.8169964046619824 0.8163109060481625\r\n", "agg_4856 classical monocyte mesenteric artery vasculature type II diabetes mellitus GSE156341 scimilarity nan nan 107 869426.0 11343 33124.102127533 0.9473048055491107 0.8341783608252021 0.8308049817701406\r\n", "agg_4857 classical monocyte mesenteric lymph node lymph node healthy 7681c7d7-0168-4892-a547-6f02a6430ace scimilarity nan nan 23 211416.0 9219 31018.02041830142 0.9058403141644794 0.7914556298280883 0.7867496166249129\r\n", "agg_4858 classical monocyte muscle tissue muscle healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 1800 50754027.0 16141 33323.26969602708 0.9316672745867468 0.8348295016474899 0.8219918807835366\r\n", "agg_4859 classical monocyte nasal cavity airway COVID-19 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 2907 12130592.0 15268 34541.15937505348 0.9398365208964624 0.8399826209015534 0.8406896100498221\r\n", "agg_4860 classical monocyte nasal cavity airway healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 129 319231.0 10961 33948.695520725145 0.908031594986554 0.802885512146251 0.7998873890770253\r\n", "agg_4861 classical monocyte nasopharynx airway nasopharyngeal neoplasm GSE150825 scimilarity nan nan 248 919710.0 11652 32725.826204558824 0.9483756316738621 0.8416477499125612 0.8434913191320811\r\n", "agg_4862 classical monocyte nose airway chronic rhinosinusitis with nasal polyps GSE156285 scimilarity nan nan 89 407982.0 10658 32874.53627471163 0.9356986809715955 0.8282644612568757 0.8193450383260489\r\n", "agg_4863 classical monocyte olfactory epithelium airway NA GSE139522 scimilarity nan nan 152 645745.0 11496 32760.770927681508 0.9344670047519139 0.8326335387583638 0.8215291009295241\r\n", "agg_4864 classical monocyte omental fat pad peritoneum obesity GSE163830 scimilarity nan nan 248 603440.0 11376 33014.67391159742 0.9276969765366693 0.8135481953870003 0.8105166731324462\r\n", "agg_4865 classical monocyte omentum peritoneum NA GSE151889 scimilarity nan nan 106 233037.0 9833 30451.216970905818 0.9023265636700606 0.794410906944691 0.7787417127899898\r\n", "agg_4868 classical monocyte peritoneum peritoneum NA GSE130888 scimilarity nan nan 20547 75515682.0 16606 31611.601467579523 0.9640573553126023 0.8513803623213743 0.8467189186177884\r\n", "agg_4869 classical monocyte peritoneum peritoneum healthy GSE130888 scimilarity nan nan 297 509237.0 11456 32213.169493243313 0.9218188146119148 0.8055575625334659 0.8039145027939639\r\n", "agg_4870 classical monocyte prostate gland prostate healthy GSE145843 scimilarity nan nan 24 87555.0 5997 21432.99958526179 0.816337811891654 0.7246769991610698 0.6943045232082502\r\n", "agg_4871 classical monocyte prostate gland prostate healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 220 2445216.0 12460 33911.259081133416 0.9301914834403244 0.8259560877683964 0.824440772955729\r\n", "agg_4872 classical monocyte renal medulla kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 21 101089.0 7354 26191.96315382653 0.8491245141516279 0.751292403843078 0.7310820608427115\r\n", "agg_4873 classical monocyte respiratory airway airway COVID-19 29f92179-ca10-4309-a32b-d383d80347c1 scimilarity nan nan 24222 187246624.0 17810 38621.12130270373 0.911673853186318 0.8025805020768422 0.8054824859649656\r\n", "agg_4874 classical monocyte respiratory tract epithelium airway NA GSE139522 scimilarity nan nan 69 371203.0 11152 33714.18718588416 0.9189481336748234 0.8044925205508522 0.8036843863420214\r\n", "agg_4875 classical monocyte right cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 311 977934.0 11891 31570.89048372305 0.9357294628028995 0.8260631626226992 0.8224053236502149\r\n", "agg_4876 classical monocyte sigmoid colon gut ulcerative colitis DS000010618 scimilarity nan nan 56 157830.0 7772 25795.237651990203 0.8795503731261843 0.7579451181338609 0.7495331251552053\r\n", "agg_4877 classical monocyte spleen spleen HIV infection GSE148796 scimilarity nan nan 48 118392.0 7120 25206.082214526155 0.8589535988735265 0.7723626781751426 0.7544543625246387\r\n", "agg_4878 classical monocyte spleen spleen healthy 4d74781b-8186-4c9a-b659-ff4dc4601d91 scimilarity nan nan 2166 7905128.0 13952 30832.98149016589 0.957626764427953 0.8498277489734691 0.8368540073560422\r\n", "agg_4879 classical monocyte spleen spleen healthy GSE148796 scimilarity nan nan 49 99684.0 6785 24492.260723886982 0.8477188947186437 0.7504685014947085 0.7295165069095441\r\n", "agg_4880 classical monocyte spleen spleen healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 3483 86078540.0 17775 36266.36759486 0.9100465322095738 0.8097019968114763 0.8081945289287479\r\n", "agg_4881 classical monocyte subcutaneous adipose tissue adipose healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 2019 27914261.0 15739 35142.992419516115 0.9421666034710219 0.8357406603138717 0.8249091266671545\r\n", "agg_4882 classical monocyte synovial fluid synovial joint juvenile idiopathic arthritis GSE160097 scimilarity nan nan 68 430194.0 9771 30748.449183442222 0.9095023395695137 0.8036624580038914 0.8039477211085259\r\n", "agg_4883 classical monocyte synovial fluid synovial joint psoriatic arthritis GSE161500 scimilarity nan nan 675 4107697.0 12980 33508.9642503863 0.9516464026609945 0.8477381221507095 0.8460202124356817\r\n", "agg_4884 classical monocyte tertiary ovarian follicle ovary NA GSE146512 scimilarity nan nan 100 296748.0 10411 33084.00694991347 0.9139378500397654 0.8064064097295065 0.8023402394768804\r\n", "agg_4885 classical monocyte testis testis NA GSE153819 scimilarity nan nan 17 97625.0 7958 29072.297180853668 0.855345538109863 0.764463114789657 0.7520891122089112\r\n", "agg_4886 classical monocyte thoracic lymph node lymph node healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 20194 147502356.0 17156 34278.43204322054 0.9584542376154844 0.8568164088302802 0.8468420651789338\r\n", "agg_4887 classical monocyte thymus thymus healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 487 2692133.0 12969 33549.45213075861 0.9497232200872254 0.8549259958290932 0.843613914494647\r\n", "agg_4888 classical monocyte thymus thymus healthy 83ed3be8-4cb9-43e6-9aaa-3fbbf5d1bd3a scimilarity nan nan 27 80042.0 6527 23800.833698344715 0.8448423801602987 0.7347769941739797 0.7181319535525903\r\n", "agg_4889 classical monocyte thymus thymus healthy de13e3e2-23b6-40ed-a413-e9e12d7d3910 scimilarity nan nan 52 298983.0 9582 30002.684399867492 0.9175531872094376 0.8185046437128072 0.8176606503789746\r\n", "agg_4890 classical monocyte tonsil tonsil healthy GSE119506 scimilarity nan nan 321 1114339.0 11546 30516.473940957327 0.936749794981687 0.8307356996245999 0.8215841775914924\r\n", "agg_4893 classical monocyte trachea airway healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 126 457580.0 11135 33734.327765812595 0.9299687996532033 0.8279876048002456 0.8230768581762299\r\n", "agg_4894 classical monocyte trachea airway healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 130 8245622.0 13663 32584.555010387805 0.859406194907081 0.7522520630806427 0.7550758397192211\r\n", "agg_4895 classical monocyte transition zone of prostate prostate prostatic hypertrophy 4b54248f-2165-477c-a027-dd55082e8818 scimilarity nan nan 520 2949099.0 13618 29095.077520604846 0.9205242051339535 0.807648434373933 0.7862293702463532\r\n", "agg_4896 classical monocyte transverse colon gut healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 503 2932999.0 12868 33265.22762476361 0.9476555210791636 0.8481166846094836 0.8392740144102075\r\n", "agg_4897 classical monocyte tympanic membrane ear NA GSE128892 scimilarity nan nan 33 153723.0 7971 26217.848855873086 0.8515891731868822 0.7526405790618411 0.7328434865867175\r\n", "agg_4899 classical monocyte upper lobe of lung lung healthy GSE169471 scimilarity nan nan 180 594059.0 10222 27881.011904781462 0.9248153838159024 0.8106326147324702 0.8003438801026445\r\n", "agg_4900 classical monocyte urine urinary healthy GSE165396 scimilarity nan nan 20 109197.0 7299 25505.26771828214 0.8530560359297166 0.7505269381795711 0.7350625083451162\r\n", "agg_4901 classical monocyte uterus uterus healthy 32f2fd23-ec74-486f-9544-e5b2f41725f5 scimilarity nan nan 18 189472.0 9397 30891.07905591756 0.8870309576225303 0.7796319609750195 0.7827462282311286\r\n", "agg_4902 classical monocyte vasculature vasculature healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 14537 224206261.0 17922 36651.90273209977 0.9438232475974557 0.8425086108952623 0.8343079266995497\r\n", "agg_4903 classical monocyte visceral fat adipose obesity GSE128518 scimilarity nan nan 74 196657.0 9100 28836.082756573305 0.8890453654508667 0.7810993233599736 0.7788838086708725\r\n" ] } ], "source": [ "! decima query-cell 'cell_type == \"classical monocyte\"' | column -t -s $'\\t'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Query cells that:\n", "- have \"monocyte\" in their cell type name (cell_type.str.contains(\"monocyte\"))\n", "- are from healthy donors (disease == \"healthy\")" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:29:20.091032Z", "iopub.status.busy": "2025-11-21T06:29:20.090868Z", "iopub.status.idle": "2025-11-21T06:29:35.058170Z", "shell.execute_reply": "2025-11-21T06:29:35.057422Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmhcelik\u001b[0m (\u001b[33mmhcw\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:01.9 (1657.8MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " cell_type tissue organ disease study dataset region subregion celltype_coarse n_cells total_counts n_genes size_factor train_pearson val_pearson test_pearson\r\n", "agg_4706 classical monocyte alveolar system lung healthy GSE155249 scimilarity nan nan 72 218105.0 9142 30484.31888978114 0.9102228263646758 0.8083487523192785 0.8047828694155461\r\n", "agg_4707 classical monocyte ampulla of uterine tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 78 550950.0 9639 30719.377971431015 0.9077670011915634 0.8045070167513724 0.7896845423359651\r\n", "agg_4709 classical monocyte aorta vasculature healthy GSE166676 scimilarity nan nan 25 162858.0 8859 31216.275954364824 0.8819013257206973 0.7821403055329706 0.7646999711802146\r\n", "agg_4710 classical monocyte apex of heart heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 397 1226515.0 12369 32022.563851814968 0.9469178617442242 0.8326145310572417 0.8365506153530168\r\n", "agg_4733 classical monocyte blood blood healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 32464 109280914.0 16158 33646.02843110038 0.9568728712803031 0.8545324533535094 0.8487445540580735\r\n", "agg_4734 classical monocyte blood blood healthy 436154da-bcf1-4130-9c8b-120ff9a888f2 scimilarity nan nan 76800 206490628.0 16683 30736.453324546856 0.955313650235467 0.8494127267867799 0.84210567312908\r\n", "agg_4735 classical monocyte blood blood healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 1044 3638976.0 12306 30542.8977364245 0.9465384578921433 0.851991795617166 0.8308191715256182\r\n", "agg_4736 classical monocyte blood blood healthy DS000010023 scimilarity nan nan 243 362606.0 8414 25201.261024165953 0.8865446516098515 0.7621391376670988 0.7681818769796727\r\n", "agg_4737 classical monocyte blood blood healthy GSE122703 scimilarity nan nan 18 83417.0 7546 28194.725173315186 0.859225612396475 0.7640890699253299 0.7443681539461423\r\n", "agg_4738 classical monocyte blood blood healthy GSE130117 scimilarity nan nan 2017 7130588.0 13535 33078.53692191542 0.9553673450160365 0.851402109626239 0.8385936100758409\r\n", "agg_4739 classical monocyte blood blood healthy GSE132802 scimilarity nan nan 1601 9955248.0 13132 32063.630951743195 0.9478882791739611 0.8391025143866828 0.8303465877530952\r\n", "agg_4740 classical monocyte blood blood healthy GSE139324 scimilarity nan nan 2333 8331045.0 13985 31135.881287246768 0.9608208780142045 0.8473885992448625 0.8432790193723467\r\n", "agg_4741 classical monocyte blood blood healthy GSE145809 scimilarity nan nan 69 245221.0 8962 29135.67197629852 0.8825701041728526 0.7811799267734735 0.7818647625179129\r\n", "agg_4742 classical monocyte blood blood healthy GSE149313 scimilarity nan nan 2420 6974751.0 13143 29560.496854576566 0.9574598613513423 0.8505290963248237 0.8379199735887167\r\n", "agg_4743 classical monocyte blood blood healthy GSE153421 scimilarity nan nan 3691 15561725.0 14569 34377.465875728165 0.9636686704566925 0.8576434473562725 0.8511814190737197\r\n", "agg_4744 classical monocyte blood blood healthy GSE156989 scimilarity nan nan 13554 160011485.0 16915 34135.439844737564 0.9640667421350761 0.8577967800377495 0.8517975138366085\r\n", "agg_4745 classical monocyte blood blood healthy GSE157829 scimilarity nan nan 1619 6957811.0 13507 30199.39288988673 0.9484019976492215 0.8436979316400604 0.8347196616710685\r\n", "agg_4746 classical monocyte blood blood healthy GSE159113 scimilarity nan nan 1025 6298250.0 12083 27477.50809897617 0.9078020151513733 0.8121457150205226 0.7980372877810575\r\n", "agg_4747 classical monocyte blood blood healthy GSE161329 scimilarity nan nan 5654 25653579.0 14349 28848.0539929647 0.9549801428956252 0.8450430950674043 0.8406188789518544\r\n", "agg_4748 classical monocyte blood blood healthy GSE161738 scimilarity nan nan 2676 13801473.0 12825 33337.477050230416 0.9541962906717452 0.8512846409758499 0.8485408028961247\r\n", "agg_4749 classical monocyte blood blood healthy GSE163668 scimilarity nan nan 2644 10486314.0 14049 33786.96584264489 0.9597801578342394 0.8560775485935677 0.8512149509551471\r\n", "agg_4750 classical monocyte blood blood healthy GSE166992 scimilarity nan nan 7501 28033216.0 15079 33455.367364577316 0.9622273594219685 0.8558958139235102 0.8495571689751152\r\n", "agg_4751 classical monocyte blood blood healthy GSE167363 scimilarity nan nan 3135 14722635.0 14375 29977.24002819913 0.942417448875388 0.8368071803109702 0.8258536430202982\r\n", "agg_4752 classical monocyte blood blood healthy GSE168710 scimilarity nan nan 16484 104881872.0 16223 34107.336261357574 0.9398282119039322 0.8424821834537695 0.8372971004604842\r\n", "agg_4753 classical monocyte blood blood healthy GSE168732 scimilarity nan nan 770 2548822.0 12508 33411.30103713399 0.9552513581030765 0.8508279875038706 0.847461536110767\r\n", "agg_4754 classical monocyte blood blood healthy b0cf0afa-ec40-4d65-b570-ed4ceacc6813 scimilarity nan nan 40975 300555227.0 15784 35938.85772500803 0.9622425892039956 0.853424173800979 0.8508714303589978\r\n", "agg_4755 classical monocyte blood blood healthy ddfad306-714d-4cc0-9985-d9072820c530 scimilarity nan nan 8827 36073928.0 15131 33208.591584008376 0.9546118779961532 0.8543086616569785 0.8462739374830107\r\n", "agg_4772 classical monocyte bone marrow bone marrow healthy GSE132509 scimilarity nan nan 610 2315570.0 12950 31768.06513427212 0.95159369508558 0.8517118261701931 0.836658919433696\r\n", "agg_4773 classical monocyte bone marrow bone marrow healthy GSE154109 scimilarity nan nan 531 1431388.0 11793 31377.450948003392 0.9490546933955852 0.8431566630120637 0.8370883160295727\r\n", "agg_4774 classical monocyte bone marrow bone marrow healthy GSE163278 scimilarity nan nan 1119 3970394.0 13361 32081.93302956569 0.9620394897163868 0.8531148861215617 0.8426785397396367\r\n", "agg_4775 classical monocyte bone marrow bone marrow healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 151 8025584.0 12883 29444.78352863075 0.8440608178227607 0.740574910750325 0.7417328577454956\r\n", "agg_4777 classical monocyte breast breast healthy GSE164898 scimilarity nan nan 136 641471.0 12971 34463.52724138501 0.9163324788498406 0.8116274576633968 0.7978555908123931\r\n", "agg_4778 classical monocyte breast breast healthy c9706a92-0e5f-46c1-96d8-20e42467f287 scimilarity nan nan 98 1444245.0 13491 30678.263421880285 0.9165520953567395 0.8162053142576849 0.7994301225229256\r\n", "agg_4782 classical monocyte bronchus airway healthy GSE158127 scimilarity nan nan 158 1158198.0 12643 34764.50196701077 0.9364512338084163 0.8259291909369686 0.8266638555276521\r\n", "agg_4783 classical monocyte cardiac muscle of left ventricle heart healthy GSE156703 scimilarity nan nan 13 116181.0 9463 35695.66320276271 0.8542740960069863 0.7515621053395214 0.7561639038477878\r\n", "agg_4785 classical monocyte caudate lobe of liver liver healthy 44531dd9-1388-4416-a117-af0a99de2294 scimilarity nan nan 238 730016.0 11505 31342.386314731422 0.9217674983890346 0.8140551552218395 0.8040417787954989\r\n", "agg_4786 classical monocyte cortex of kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 79 323010.0 10939 32378.76683324232 0.9028856137251035 0.7978822439778066 0.7839454035009307\r\n", "agg_4787 classical monocyte cortex of kidney kidney healthy a98b828a-622a-483a-80e0-15703678befd scimilarity nan nan 91 477355.0 10898 32358.068865763344 0.9328436291917394 0.8237810319569842 0.8195391931798526\r\n", "agg_4789 classical monocyte digestive tract gut healthy DS000011665 scimilarity nan nan 347 1679116.0 12155 33347.55517047197 0.9422556928648441 0.8417267634096297 0.84018452536733\r\n", "agg_4790 classical monocyte exocrine pancreas pancreas healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 821 7824069.0 14847 36135.64587109593 0.9493709998172055 0.8440837716099078 0.8410246939313819\r\n", "agg_4791 classical monocyte fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 131 734093.0 11240 33115.640434504094 0.9359103734457376 0.8339026306142181 0.8225901799509813\r\n", "agg_4792 classical monocyte fimbria of uterine tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 34 209362.0 7663 27635.733860508328 0.8560416684135254 0.7382997749370328 0.7459235366949488\r\n", "agg_4795 classical monocyte head of femur bone healthy GSE169396 scimilarity nan nan 450 3669304.0 13216 33082.323604222154 0.9529417082022753 0.8522346343107771 0.8359032081996703\r\n", "agg_4798 classical monocyte heart left ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 192 585001.0 11159 31422.874036870588 0.9363985001217598 0.8226438123601741 0.8283173244446851\r\n", "agg_4799 classical monocyte heart right ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 316 936263.0 11904 32002.67227624691 0.9425900348990802 0.8306128730459813 0.8308116461021977\r\n", "agg_4803 classical monocyte interventricular septum heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 442 1322725.0 12418 32235.5434681197 0.94751399102473 0.8340623939411483 0.8353858365852226\r\n", "agg_4804 classical monocyte isthmus of fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 62 318330.0 8642 29768.198512126502 0.8846027131590791 0.784220371073871 0.7739277341448829\r\n", "agg_4808 classical monocyte kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 762 4034828.0 14946 34015.00816823295 0.9520640694425091 0.848205266473767 0.836085027208869\r\n", "agg_4809 classical monocyte kidney kidney healthy DS000010415 scimilarity nan nan 55 127079.0 8055 27206.419037355434 0.8216238135756493 0.7570847030479543 0.72524174726152\r\n", "agg_4810 classical monocyte kidney kidney healthy GSE140989 scimilarity nan nan 174 563438.0 11016 29887.593299155575 0.914390252807459 0.8069762795735104 0.8086759072557722\r\n", "agg_4812 classical monocyte left cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 450 1446734.0 12669 32433.20393285361 0.9467532324494885 0.8378571513042986 0.8360845068688169\r\n", "agg_4817 classical monocyte liver liver healthy GSE136103 scimilarity nan nan 2036 7668787.0 14818 32446.71686472893 0.9614468191909097 0.8455504517344443 0.8464065028454753\r\n", "agg_4818 classical monocyte liver liver healthy GSE159977 scimilarity nan nan 584 4703990.0 13644 34306.87421529999 0.9580119653448788 0.8463006395755477 0.8456137609888349\r\n", "agg_4819 classical monocyte liver liver healthy GSE163650 scimilarity nan nan 440 4840312.0 12272 31180.407161439263 0.9312379663603724 0.8198899526213368 0.8071334502842269\r\n", "agg_4823 classical monocyte lower lobe of lung lung healthy GSE169471 scimilarity nan nan 305 1224338.0 11342 28255.985922767635 0.9404343350984603 0.8261785132237449 0.8150341534919611\r\n", "agg_4832 classical monocyte lung lung healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 1254 5397217.0 13298 31013.01576531177 0.9490555294982109 0.8457060773457411 0.8329330004620054\r\n", "agg_4833 classical monocyte lung lung healthy DS000011735 scimilarity nan nan 4653 16523051.0 17066 37593.98867222708 0.8985708908575675 0.8260014412964971 0.8051199142820423\r\n", "agg_4834 classical monocyte lung lung healthy GSE128033 scimilarity nan nan 1047 3646581.0 13185 29331.2035341724 0.9513045959002788 0.837770557527153 0.8238987539695043\r\n", "agg_4835 classical monocyte lung lung healthy GSE128169 scimilarity nan nan 1732 11798577.0 15051 32941.755873862814 0.9636814596401634 0.8539834251349044 0.8457626672394015\r\n", "agg_4836 classical monocyte lung lung healthy GSE132771 scimilarity nan nan 1601 4614408.0 13275 29761.03818692572 0.9531291409651284 0.8457644131717956 0.8310980214000753\r\n", "agg_4837 classical monocyte lung lung healthy GSE169471 scimilarity nan nan 498 1613976.0 11886 28956.213107123967 0.9433400854993297 0.8271067022019086 0.815595680192867\r\n", "agg_4853 classical monocyte lung parenchyma lung healthy GSE158127 scimilarity nan nan 791 2735456.0 13260 33646.87553319058 0.9544351950657847 0.8399981618864122 0.8327646420552953\r\n", "agg_4855 classical monocyte mesenteric artery vasculature healthy GSE156341 scimilarity nan nan 49 408553.0 10083 30979.99239432764 0.9337200372314851 0.8169964046619824 0.8163109060481625\r\n", "agg_4857 classical monocyte mesenteric lymph node lymph node healthy 7681c7d7-0168-4892-a547-6f02a6430ace scimilarity nan nan 23 211416.0 9219 31018.02041830142 0.9058403141644794 0.7914556298280883 0.7867496166249129\r\n", "agg_4858 classical monocyte muscle tissue muscle healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 1800 50754027.0 16141 33323.26969602708 0.9316672745867468 0.8348295016474899 0.8219918807835366\r\n", "agg_4860 classical monocyte nasal cavity airway healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 129 319231.0 10961 33948.695520725145 0.908031594986554 0.802885512146251 0.7998873890770253\r\n", "agg_4869 classical monocyte peritoneum peritoneum healthy GSE130888 scimilarity nan nan 297 509237.0 11456 32213.169493243313 0.9218188146119148 0.8055575625334659 0.8039145027939639\r\n", "agg_4870 classical monocyte prostate gland prostate healthy GSE145843 scimilarity nan nan 24 87555.0 5997 21432.99958526179 0.816337811891654 0.7246769991610698 0.6943045232082502\r\n", "agg_4871 classical monocyte prostate gland prostate healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 220 2445216.0 12460 33911.259081133416 0.9301914834403244 0.8259560877683964 0.824440772955729\r\n", "agg_4872 classical monocyte renal medulla kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 21 101089.0 7354 26191.96315382653 0.8491245141516279 0.751292403843078 0.7310820608427115\r\n", "agg_4875 classical monocyte right cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 311 977934.0 11891 31570.89048372305 0.9357294628028995 0.8260631626226992 0.8224053236502149\r\n", "agg_4878 classical monocyte spleen spleen healthy 4d74781b-8186-4c9a-b659-ff4dc4601d91 scimilarity nan nan 2166 7905128.0 13952 30832.98149016589 0.957626764427953 0.8498277489734691 0.8368540073560422\r\n", "agg_4879 classical monocyte spleen spleen healthy GSE148796 scimilarity nan nan 49 99684.0 6785 24492.260723886982 0.8477188947186437 0.7504685014947085 0.7295165069095441\r\n", "agg_4880 classical monocyte spleen spleen healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 3483 86078540.0 17775 36266.36759486 0.9100465322095738 0.8097019968114763 0.8081945289287479\r\n", "agg_4881 classical monocyte subcutaneous adipose tissue adipose healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 2019 27914261.0 15739 35142.992419516115 0.9421666034710219 0.8357406603138717 0.8249091266671545\r\n", "agg_4886 classical monocyte thoracic lymph node lymph node healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 20194 147502356.0 17156 34278.43204322054 0.9584542376154844 0.8568164088302802 0.8468420651789338\r\n", "agg_4887 classical monocyte thymus thymus healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 487 2692133.0 12969 33549.45213075861 0.9497232200872254 0.8549259958290932 0.843613914494647\r\n", "agg_4888 classical monocyte thymus thymus healthy 83ed3be8-4cb9-43e6-9aaa-3fbbf5d1bd3a scimilarity nan nan 27 80042.0 6527 23800.833698344715 0.8448423801602987 0.7347769941739797 0.7181319535525903\r\n", "agg_4889 classical monocyte thymus thymus healthy de13e3e2-23b6-40ed-a413-e9e12d7d3910 scimilarity nan nan 52 298983.0 9582 30002.684399867492 0.9175531872094376 0.8185046437128072 0.8176606503789746\r\n", "agg_4890 classical monocyte tonsil tonsil healthy GSE119506 scimilarity nan nan 321 1114339.0 11546 30516.473940957327 0.936749794981687 0.8307356996245999 0.8215841775914924\r\n", "agg_4893 classical monocyte trachea airway healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 126 457580.0 11135 33734.327765812595 0.9299687996532033 0.8279876048002456 0.8230768581762299\r\n", "agg_4894 classical monocyte trachea airway healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 130 8245622.0 13663 32584.555010387805 0.859406194907081 0.7522520630806427 0.7550758397192211\r\n", "agg_4896 classical monocyte transverse colon gut healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 503 2932999.0 12868 33265.22762476361 0.9476555210791636 0.8481166846094836 0.8392740144102075\r\n", "agg_4899 classical monocyte upper lobe of lung lung healthy GSE169471 scimilarity nan nan 180 594059.0 10222 27881.011904781462 0.9248153838159024 0.8106326147324702 0.8003438801026445\r\n", "agg_4900 classical monocyte urine urinary healthy GSE165396 scimilarity nan nan 20 109197.0 7299 25505.26771828214 0.8530560359297166 0.7505269381795711 0.7350625083451162\r\n", "agg_4901 classical monocyte uterus uterus healthy 32f2fd23-ec74-486f-9544-e5b2f41725f5 scimilarity nan nan 18 189472.0 9397 30891.07905591756 0.8870309576225303 0.7796319609750195 0.7827462282311286\r\n", "agg_4902 classical monocyte vasculature vasculature healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 14537 224206261.0 17922 36651.90273209977 0.9438232475974557 0.8425086108952623 0.8343079266995497\r\n", "agg_6287 intermediate monocyte head of femur bone healthy GSE169396 scimilarity nan nan 102 191075.0 7853 26179.035956297153 0.8330771518439726 0.7503209876663273 0.7113081302663875\r\n", "agg_6289 intermediate monocyte lung lung healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 178 1172582.0 11314 30515.569680815937 0.9409051040470379 0.8435279441582394 0.8229749449946738\r\n", "agg_6290 intermediate monocyte spleen spleen healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 60 252220.0 8236 26163.955486425446 0.836498746238646 0.7439980946911184 0.7168040239671246\r\n", "agg_6291 intermediate monocyte thymus thymus healthy GSE159745 scimilarity nan nan 29 82115.0 5987 22540.234815420707 0.7817665678679913 0.7043553158094606 0.6760717657015229\r\n", "agg_6292 intermediate monocyte vasculature vasculature healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 162 1525515.0 11980 32186.1781582846 0.9269571292216415 0.8224395619954739 0.8055668264019443\r\n", "agg_7919 non-classical monocyte apex of heart heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 158 675731.0 11222 30876.899222310585 0.9301440448035162 0.8258961291954683 0.824159827752181\r\n", "agg_7939 non-classical monocyte blood blood healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 7359 36418526.0 14851 33258.733090217436 0.9519276590597959 0.8501060197631037 0.850960653386464\r\n", "agg_7940 non-classical monocyte blood blood healthy 436154da-bcf1-4130-9c8b-120ff9a888f2 scimilarity nan nan 14619 54479703.0 15493 30191.499157063707 0.9490211472741342 0.8448211022633122 0.8418061408505518\r\n", "agg_7941 non-classical monocyte blood blood healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 195 1239240.0 11002 30223.31815928311 0.9379359624101378 0.8397815574875395 0.8299059656859994\r\n", "agg_7942 non-classical monocyte blood blood healthy GSE130117 scimilarity nan nan 322 1200290.0 11182 31409.27333671809 0.9418345510352945 0.8405863822794143 0.8304108431330093\r\n", "agg_7943 non-classical monocyte blood blood healthy GSE132802 scimilarity nan nan 102 726593.0 10232 30435.311954214158 0.9262718659348109 0.8186907385315048 0.8147462064075649\r\n", "agg_7944 non-classical monocyte blood blood healthy GSE134004 scimilarity nan nan 21 123360.0 6990 24135.62187154626 0.8660944307658819 0.7608357820845066 0.7535994530765779\r\n", "agg_7945 non-classical monocyte blood blood healthy GSE139324 scimilarity nan nan 435 2395489.0 12428 30987.28210955269 0.9487843521961865 0.8347185640893492 0.8386196076774184\r\n", "agg_7946 non-classical monocyte blood blood healthy GSE149313 scimilarity nan nan 567 2445950.0 11737 29144.914765151065 0.9480753865144765 0.8398428245307203 0.8354975068540325\r\n", "agg_7947 non-classical monocyte blood blood healthy GSE153421 scimilarity nan nan 441 2114891.0 11966 32647.54233438482 0.9524227157990666 0.8453840087915955 0.8445318485082767\r\n", "agg_7948 non-classical monocyte blood blood healthy GSE156989 scimilarity nan nan 3151 40420221.0 15662 32233.769948686153 0.9558775883405131 0.8527879494870606 0.8461332941066178\r\n", "agg_7949 non-classical monocyte blood blood healthy GSE157829 scimilarity nan nan 144 890675.0 10657 29172.377435644317 0.9302786443476869 0.8283014100006509 0.8220722486967346\r\n", "agg_7950 non-classical monocyte blood blood healthy GSE161329 scimilarity nan nan 1118 7175719.0 12865 29244.857112487658 0.9476682128749678 0.8393859845018986 0.8392730294908749\r\n", "agg_7951 non-classical monocyte blood blood healthy GSE161738 scimilarity nan nan 1497 12143757.0 12362 32632.110821778042 0.9476207444575895 0.8463853459866758 0.8490136875251815\r\n", "agg_7952 non-classical monocyte blood blood healthy GSE163668 scimilarity nan nan 323 1716760.0 11769 32812.39505818172 0.9472316303194352 0.8438698542111769 0.8424970169398833\r\n", "agg_7953 non-classical monocyte blood blood healthy GSE166992 scimilarity nan nan 1613 7143035.0 13383 32605.389353410996 0.9532209129181096 0.8486599938147087 0.8451557766892072\r\n", "agg_7954 non-classical monocyte blood blood healthy GSE167363 scimilarity nan nan 458 3094035.0 12228 29678.03739631962 0.9435654504659038 0.8379948419319221 0.8241961683725367\r\n", "agg_7955 non-classical monocyte blood blood healthy GSE168710 scimilarity nan nan 75 701113.0 10776 32559.49721301115 0.9233871475920297 0.8250528447177075 0.8185333840139741\r\n", "agg_7956 non-classical monocyte blood blood healthy GSE168732 scimilarity nan nan 229 1242404.0 11269 31965.299177754878 0.9416742339845935 0.8377482237588458 0.8415500681607002\r\n", "agg_7957 non-classical monocyte blood blood healthy b0cf0afa-ec40-4d65-b570-ed4ceacc6813 scimilarity nan nan 5897 43180935.0 14970 35595.18649267558 0.9543288699936718 0.8496535044071925 0.8536782531653531\r\n", "agg_7970 non-classical monocyte bone marrow bone marrow healthy GSE132509 scimilarity nan nan 28 86280.0 7085 25870.53624683356 0.8392355979135352 0.755387271124993 0.7303317003908475\r\n", "agg_7971 non-classical monocyte bone marrow bone marrow healthy GSE154109 scimilarity nan nan 50 289907.0 9147 28526.85661530531 0.9070952567396775 0.808361820498357 0.7964598438037417\r\n", "agg_7972 non-classical monocyte bone marrow bone marrow healthy GSE163278 scimilarity nan nan 127 682328.0 10897 31202.529821716787 0.9358619814006104 0.8294675777784289 0.8230468472234642\r\n", "agg_7974 non-classical monocyte breast breast healthy GSE164898 scimilarity nan nan 54 120275.0 7652 26423.010551181265 0.8534343500588628 0.755424451856796 0.7230125883881353\r\n", "agg_7976 non-classical monocyte cortex of kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 63 401864.0 11464 32990.96311584531 0.9014527631813947 0.7931942866954178 0.7865930763896118\r\n", "agg_7977 non-classical monocyte cortex of kidney kidney healthy a98b828a-622a-483a-80e0-15703678befd scimilarity nan nan 161 772141.0 11062 31056.660350613587 0.9346806312815913 0.8317520409566359 0.8313984606487961\r\n", "agg_7979 non-classical monocyte fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 16 222500.0 7755 27898.660349927846 0.8621134765305163 0.7601890611687369 0.744729424431635\r\n", "agg_7980 non-classical monocyte fimbria of uterine tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 28 244266.0 7735 27678.814270356754 0.8734809587140066 0.7648153554084077 0.76608428730196\r\n", "agg_7982 non-classical monocyte heart left ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 57 213565.0 9322 29851.355460106315 0.8978296307325292 0.7939956162210045 0.776120799756924\r\n", "agg_7983 non-classical monocyte heart right ventricle heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 124 613752.0 10880 30311.360727579897 0.9311389328985725 0.8253171421863371 0.8219320702682233\r\n", "agg_7985 non-classical monocyte interventricular septum heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 144 524658.0 10853 31170.857886799495 0.9241302459076691 0.8138209035301205 0.8224136632163046\r\n", "agg_7986 non-classical monocyte isthmus of fallopian tube fallopian tube healthy fc77d2ae-247d-44d7-aa24-3f4859254c2c scimilarity nan nan 12 86198.0 5668 23558.81110396413 0.793224614700874 0.7114672551137675 0.6825985710920001\r\n", "agg_7990 non-classical monocyte kidney kidney healthy 120e86b4-1195-48c5-845b-b98054105eec scimilarity nan nan 214 1788808.0 13749 33794.71179753717 0.9324162382479619 0.8250902105825786 0.818301334304562\r\n", "agg_7991 non-classical monocyte kidney kidney healthy GSE140989 scimilarity nan nan 473 1769375.0 13008 31797.13462972748 0.9190676320157254 0.8182361375222441 0.8172110487458264\r\n", "agg_7992 non-classical monocyte left cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 82 357018.0 10073 29995.2881818953 0.916928150799629 0.8074046233049013 0.808753490409063\r\n", "agg_7995 non-classical monocyte liver liver healthy GSE136103 scimilarity nan nan 423 2383574.0 13122 31645.435149503457 0.9524231389227664 0.8376748793878739 0.8415142758287522\r\n", "agg_7996 non-classical monocyte liver liver healthy GSE159977 scimilarity nan nan 473 4877555.0 13370 33200.636271185205 0.9498326621251537 0.8392029926705806 0.8469259328198118\r\n", "agg_7997 non-classical monocyte liver liver healthy GSE163650 scimilarity nan nan 10 96148.0 6782 24958.605923030595 0.844996457443227 0.7380858347163884 0.7209649786125333\r\n", "agg_8007 non-classical monocyte lung lung healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 576 3313836.0 12566 30969.255628748215 0.9438879246302309 0.8444989044016609 0.8358111974870654\r\n", "agg_8008 non-classical monocyte lung lung healthy DS000011735 scimilarity nan nan 169 779577.0 12885 36247.76234710614 0.8808886302153663 0.8102555656654346 0.7948721237235893\r\n", "agg_8009 non-classical monocyte lung lung healthy GSE128033 scimilarity nan nan 79 343546.0 9330 27406.22701580364 0.9035509606166174 0.7968173004217675 0.7863212826693502\r\n", "agg_8010 non-classical monocyte lung lung healthy GSE128169 scimilarity nan nan 276 2433151.0 12769 32027.902610765417 0.9547437308289124 0.8449880167209973 0.8438649522788478\r\n", "agg_8011 non-classical monocyte lung lung healthy GSE132771 scimilarity nan nan 37 151922.0 7860 26295.743163049112 0.8838770944570796 0.790431305730734 0.7607028661311058\r\n", "agg_8012 non-classical monocyte lung lung healthy GSE169471 scimilarity nan nan 27 103204.0 6854 23947.65597317191 0.8348392917103126 0.7488344663849291 0.7237935010019484\r\n", "agg_8024 non-classical monocyte lung parenchyma lung healthy GSE158127 scimilarity nan nan 309 1788828.0 12136 32078.56380429425 0.9418105467635777 0.8295808338281161 0.831837004521098\r\n", "agg_8026 non-classical monocyte muscle tissue muscle healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 321 23778338.0 13169 27977.08919973388 0.8814221140322411 0.7869360982600341 0.7677337716492793\r\n", "agg_8034 non-classical monocyte right cardiac atrium heart healthy b52eb423-5d0d-4645-b217-e1c6d38b2e72 scimilarity nan nan 70 408965.0 10146 29746.121058681525 0.9252128588702657 0.8186384457806745 0.8103901461358153\r\n", "agg_8036 non-classical monocyte spleen spleen healthy 4d74781b-8186-4c9a-b659-ff4dc4601d91 scimilarity nan nan 336 1586973.0 11934 30580.798338873254 0.9471354298985436 0.8378586626071394 0.8322814736104384\r\n", "agg_8039 non-classical monocyte thoracic lymph node lymph node healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 1950 18888557.0 15221 33581.76389036113 0.9559331607078543 0.8537562341521224 0.8469325123405803\r\n", "agg_8040 non-classical monocyte thymus thymus healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 68 441502.0 10301 31247.452676451114 0.917407487628822 0.8223254514108821 0.8197270854172879\r\n", "agg_8041 non-classical monocyte trachea airway healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 12 97840.0 7863 29204.083428972655 0.8702163087134754 0.7685799000235117 0.7716054237714325\r\n", "agg_8042 non-classical monocyte trachea airway healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 16 534304.0 8970 24807.157880956805 0.8232311272852844 0.7180336962121132 0.7003798955542161\r\n", "agg_8044 non-classical monocyte transverse colon gut healthy 62ef75e4-cbea-454e-a0ce-998ec40223d3 scimilarity nan nan 135 908452.0 11380 32804.296806012215 0.933818206129888 0.8353788654625934 0.8345447172426862\r\n", "agg_8045 non-classical monocyte upper lobe of lung lung healthy GSE169471 scimilarity nan nan 32 143341.0 7269 24395.316476390286 0.8673226900308589 0.7523857428733156 0.7403920706432944\r\n", "agg_8046 non-classical monocyte vasculature vasculature healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan 987 10267209.0 15019 35019.47682838501 0.9379668399645168 0.8304128458333673 0.8283221722893935\r\n" ] } ], "source": [ "! decima query-cell 'cell_type.str.contains(\"monocyte\") and disease == \"healthy\"' | column -t -s $'\\t'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This query selects cells that are:\n", "- classical monocytes (cell_type == \"classical monocyte\")\n", "- from healthy donors (disease == \"healthy\")\n", "- from blood tissue (tissue == \"blood\")" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:29:35.059952Z", "iopub.status.busy": "2025-11-21T06:29:35.059766Z", "iopub.status.idle": "2025-11-21T06:29:49.968177Z", "shell.execute_reply": "2025-11-21T06:29:49.967575Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmhcelik\u001b[0m (\u001b[33mmhcw\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:01.9 (1663.1MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " cell_type tissue organ disease study dataset region subregion celltype_coarse n_cells total_counts n_genes size_factor train_pearson val_pearson test_pearson\r\n", "agg_4733 classical monocyte blood blood healthy 03f821b4-87be-4ff4-b65a-b5fc00061da7 scimilarity nan nan 32464 109280914.0 16158 33646.02843110038 0.9568728712803031 0.8545324533535094 0.8487445540580735\r\n", "agg_4734 classical monocyte blood blood healthy 436154da-bcf1-4130-9c8b-120ff9a888f2 scimilarity nan nan 76800 206490628.0 16683 30736.453324546856 0.955313650235467 0.8494127267867799 0.84210567312908\r\n", "agg_4735 classical monocyte blood blood healthy 5d445965-6f1a-4b68-ba3a-b8f765155d3a scimilarity nan nan 1044 3638976.0 12306 30542.8977364245 0.9465384578921433 0.851991795617166 0.8308191715256182\r\n", "agg_4736 classical monocyte blood blood healthy DS000010023 scimilarity nan nan 243 362606.0 8414 25201.261024165953 0.8865446516098515 0.7621391376670988 0.7681818769796727\r\n", "agg_4737 classical monocyte blood blood healthy GSE122703 scimilarity nan nan 18 83417.0 7546 28194.725173315186 0.859225612396475 0.7640890699253299 0.7443681539461423\r\n", "agg_4738 classical monocyte blood blood healthy GSE130117 scimilarity nan nan 2017 7130588.0 13535 33078.53692191542 0.9553673450160365 0.851402109626239 0.8385936100758409\r\n", "agg_4739 classical monocyte blood blood healthy GSE132802 scimilarity nan nan 1601 9955248.0 13132 32063.630951743195 0.9478882791739611 0.8391025143866828 0.8303465877530952\r\n", "agg_4740 classical monocyte blood blood healthy GSE139324 scimilarity nan nan 2333 8331045.0 13985 31135.881287246768 0.9608208780142045 0.8473885992448625 0.8432790193723467\r\n", "agg_4741 classical monocyte blood blood healthy GSE145809 scimilarity nan nan 69 245221.0 8962 29135.67197629852 0.8825701041728526 0.7811799267734735 0.7818647625179129\r\n", "agg_4742 classical monocyte blood blood healthy GSE149313 scimilarity nan nan 2420 6974751.0 13143 29560.496854576566 0.9574598613513423 0.8505290963248237 0.8379199735887167\r\n", "agg_4743 classical monocyte blood blood healthy GSE153421 scimilarity nan nan 3691 15561725.0 14569 34377.465875728165 0.9636686704566925 0.8576434473562725 0.8511814190737197\r\n", "agg_4744 classical monocyte blood blood healthy GSE156989 scimilarity nan nan 13554 160011485.0 16915 34135.439844737564 0.9640667421350761 0.8577967800377495 0.8517975138366085\r\n", "agg_4745 classical monocyte blood blood healthy GSE157829 scimilarity nan nan 1619 6957811.0 13507 30199.39288988673 0.9484019976492215 0.8436979316400604 0.8347196616710685\r\n", "agg_4746 classical monocyte blood blood healthy GSE159113 scimilarity nan nan 1025 6298250.0 12083 27477.50809897617 0.9078020151513733 0.8121457150205226 0.7980372877810575\r\n", "agg_4747 classical monocyte blood blood healthy GSE161329 scimilarity nan nan 5654 25653579.0 14349 28848.0539929647 0.9549801428956252 0.8450430950674043 0.8406188789518544\r\n", "agg_4748 classical monocyte blood blood healthy GSE161738 scimilarity nan nan 2676 13801473.0 12825 33337.477050230416 0.9541962906717452 0.8512846409758499 0.8485408028961247\r\n", "agg_4749 classical monocyte blood blood healthy GSE163668 scimilarity nan nan 2644 10486314.0 14049 33786.96584264489 0.9597801578342394 0.8560775485935677 0.8512149509551471\r\n", "agg_4750 classical monocyte blood blood healthy GSE166992 scimilarity nan nan 7501 28033216.0 15079 33455.367364577316 0.9622273594219685 0.8558958139235102 0.8495571689751152\r\n", "agg_4751 classical monocyte blood blood healthy GSE167363 scimilarity nan nan 3135 14722635.0 14375 29977.24002819913 0.942417448875388 0.8368071803109702 0.8258536430202982\r\n", "agg_4752 classical monocyte blood blood healthy GSE168710 scimilarity nan nan 16484 104881872.0 16223 34107.336261357574 0.9398282119039322 0.8424821834537695 0.8372971004604842\r\n", "agg_4753 classical monocyte blood blood healthy GSE168732 scimilarity nan nan 770 2548822.0 12508 33411.30103713399 0.9552513581030765 0.8508279875038706 0.847461536110767\r\n", "agg_4754 classical monocyte blood blood healthy b0cf0afa-ec40-4d65-b570-ed4ceacc6813 scimilarity nan nan 40975 300555227.0 15784 35938.85772500803 0.9622425892039956 0.853424173800979 0.8508714303589978\r\n", "agg_4755 classical monocyte blood blood healthy ddfad306-714d-4cc0-9985-d9072820c530 scimilarity nan nan 8827 36073928.0 15131 33208.591584008376 0.9546118779961532 0.8543086616569785 0.8462739374830107\r\n" ] } ], "source": [ "! decima query-cell 'cell_type == \"classical monocyte\" and disease == \"healthy\" and tissue == \"blood\"' | column -t -s $'\\t'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Attribution calling with custom genes and sequences" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this section, we demonstrate how to call attributions using custom gene sequences.\n", "You can provide your own FASTA file containing sequences of interest and run attribution analysis\n", "for any set of genes or genomic regions, using the Decima command-line interface.\n", "The following examples show how to inspect your FASTA file, run attributions, and explore the output files.\n", "The FASTA header line for each sequence contains the gene name and the coordinates of the masked region used for attribution analysis. \n", "For example, in the header:\n", "\n", " CD68|gene_mask_start=163840|gene_mask_end=166460\n", "\"CD68\" is the gene name, \"gene_mask_start\" and \"gene_mask_end\" specify the start and end positions (relative to the input sequence) of the region that was masked and analyzed for attributions." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:29:49.970038Z", "iopub.status.busy": "2025-11-21T06:29:49.969871Z", "iopub.status.idle": "2025-11-21T06:29:50.102142Z", "shell.execute_reply": "2025-11-21T06:29:50.101542Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cat: ../tests/data/seqs.fasta: No such file or directory\r\n" ] } ], "source": [ "! cat ../tests/data/seqs.fasta | cut -c 1-200" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:29:50.103740Z", "iopub.status.busy": "2025-11-21T06:29:50.103580Z", "iopub.status.idle": "2025-11-21T06:30:36.906607Z", "shell.execute_reply": "2025-11-21T06:30:36.905975Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'repr' attribute with value False was provided to the `Field()` function, which has no effect in the context it was used. 'repr' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n", "/home/celikm5/miniforge3/envs/decima2/lib/python3.11/site-packages/pydantic/_internal/_generate_schema.py:2249: UnsupportedFieldAttributeWarning: The 'frozen' attribute with value True was provided to the `Field()` function, which has no effect in the context it was used. 'frozen' is field-specific metadata, and can only be attached to a model field using `Annotated` metadata or by assignment. This may have happened because an `Annotated` type alias using the `type` statement was used, or if the `Field()` function was attached to a single member of a union type.\r\n", " warnings.warn(\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "decima - INFO - Using device: 0\r\n", "decima - INFO - Loading model v1_rep0 and metadata to compute attributions...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mmhcelik\u001b[0m (\u001b[33mmhcw\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'rep0:latest', 720.03MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:00.9 (837.1MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \r\n", "Done. 00:00:02.0 (1562.9MB/s)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "/home/celikm5/Projects/decima/src/decima/interpret/attributer.py:66: UserWarning: `off_tasks` is not provided. Using all other tasks as off_tasks.\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "Computing attributions...: 0%| | 0/2 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "attribution.plot_seqlogo(relative_loc=291)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:30:56.744352Z", "iopub.status.busy": "2025-11-21T06:30:56.744216Z", "iopub.status.idle": "2025-11-21T06:31:03.814731Z", "shell.execute_reply": "2025-11-21T06:31:03.814125Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAB9AAAAGQCAYAAAD2sPsvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAewgAAHsIBbtB1PgAAjtRJREFUeJzs3XmcjeX/x/H3mX3mDMY+wxi7hLFvlS0q2XcVKlLalJQWaUO0iG+UUigkUpaolEKoGGSnrNGMZQxmM2f2OffvD835zZjFrOfM8no+HvNw5r6v5XO2a273576vy2QYhiEAAAAAAAAAAAAAAEo5J0cHAAAAAAAAAAAAAABAUUACHQAAAAAAAAAAAAAAkUAHAAAAAAAAAAAAAEASCXQAAAAAAAAAAAAAACSRQAcAAAAAAAAAAAAAQBIJdAAAAAAAAAAAAAAAJJFABwAAAAAAAAAAAABAEgl0AAAAAAAAAAAAAAAkkUAHAAAAAAAAAAAAAEASCXQAAAAAAAAAAAAAACSRQAcAAAAAAAAAAAAAQBIJdAAAAAAAAAAAAAAAJJFABwAAAAAAAAAAAABAEgl0AAAAAAAAAAAAAAAkkUAHAAAAAAAAAAAAAEASCXQAAAAAAAAAAAAAACSRQAcAAAAAAAAAAAAAQBIJdAAAAAAAAAAAAAAAJJFARwFo3bq1/P391bp1a0eHAgAAAAAAAAAAAAB55uLoAFD8hYaG6ty5c44OAwAAAAAAAAAAAADyhTvQAQAAAAAAAAAAAAAQCXQAAAAAAAAAAAAAACSRQAcAAAAAAAAAAAAAQBIJdAAAAAAAAAAAAAAAJJFABwAAAAAAAAAAAABAEgl0AAAAAAAAAAAAAAAkkUAHAAAAAAAAAAAAAEASCXQAAAAAAAAAAAAAACSRQAcAAAAAAAAAAAAAQJLk4ugAAAAAgAKVnCxZLNcem82Si0v67Wm35aXdvNbPj7TPKSccEWNBuv755vT5ZPXeAwBQEjjyWAQAAAAoRTjaBgAAQMmRnCzt2CGlpFz73dlZuuWWa49Tt6duy82J57Tt5qV+fiQna+mTT+rU8eN67rnn5O3tfeM69o6xIF3/Hko5ez5ZvffF8TUAAOB6jjwWAQAAAEoZjrQBAABwY1FR0r591x63aCGVK1c0+7FYrp1Y3r//2u/Nm///Hcmp21O3ZdV2ZjGkbfdG9QtY2OnTWvDpp2ou6aekJA0ePPjGlewcY4G6/j2UcvZ8snrv8/oa5OazaK/vB4DSh/EFqRx4LAIAAACUNiTQAQAAgCLs6tWrtsd7Ll7U4Hr1si4cHy+dPWuHqOykYkXpyhVHRwEAAAAAAIBShAQ6AAAAUEwkODlJOZnCvaRwc3N0BAAAAAAAAChlnBwdAAAAAAAAAAAAAAAARQEJdAAAAAAAAAAAAAAARAIdAAAAAAAAAAAAAABJJNABAAAAAAAAAAAAAJBEAh0AAAAAAAAAAAAAAEkk0AEAAAAAAAAAAAAAkEQCHQAAAAAAAAAAAAAASSTQAQAAAAAAAAAAAACQRAIdAAAAAAAAAAAAAABJJNABAAAAAAAAAAAAAJBEAh0AAAAo0gzDcHQIAAAAAAAAQKlBAh0AAAAAAAAAAAAAAJFABwAAAAAAAAAAAABAEgl0AAAAoNgwmUyODgEAAAAAAAAo0UigAwAAAAAAAAAAAAAgEugAAAAAAAAAAAAAAEgigQ4AAAAAAAAAAAAAgCQS6AAAAAAAAAAAAAAASCKBDgAAAAAAAAAAAACAJBLoAAAAAAAAAAAAAABIIoEOAAAAAAAAAAAAAIAkEugAAAAAAAAAAAAAAEgigQ4AAAAAAAAAAAAAgCQS6AAAAECRZhiG7fHRY8ccGAkAAAAAAABQ8pFABwAAAAAAAAAAAABAJNABAAAAAAAAAAAAAJBEAh0AAAAAAAAAAAAAAEkk0AEAAAAAAAAAAAAAkEQCHQAAAAAAAAAAAAAASSTQAQAAAAAAAAAAAACQRAIdAAAAKNJMJpOjQwAAAAAAAABKDRLoAAAAAAAAAAAAAACIBDoAAAAAAAAAAAAAAJJIoAMAAAAAAAAAAAAAIIkEOgAAAAAAAAAAAAAAkkigAwAAAAAAAAAAAAAgiQQ6AAAAUKQZhuHoEAAAAAAAAIBSgwQ6AAAAAAAAAAAAAAAigQ4AAAAAAAAAAAAAgCQS6AAAAAAAAAAAAAAASCKBDgAAAAAAAAAAAACAJBLoAAAAAAAAAAAAAABIklwcHUBJEhUVpZUrV2rXrl26cuWK3N3dVbduXfXs2VPt27fPdXuxsbHauXOn9u/fr5MnTyosLExWq1Xly5dXw4YN1aNHDzVu3DjL+u+//742b96cbR8BAQH68MMPcx0bAAAAAAAAAAAAAJQ0JNALSHBwsCZNmqSoqChJkqenpywWi/bv36/9+/erT58+euSRR3LV5vjx43XhwgXb725ubnJyclJYWJjCwsK0bds2DRgwQKNGjcq2HTc3N3l5eWW6r2zZsrmKCQAAAAAAAAAAAABKKhLoBSApKUlvvvmmoqKiVLNmTT377LOqXbu2EhIStHbtWn355Zf67rvvVLt2bd1xxx05bjclJUW1atXSXXfdpVatWsnPz0+GYej8+fNasmSJduzYoTVr1sjX11c9evTIsp0OHTromWeeKYBnCgAAAAAAAAAAAAAlF2ugF4ANGzYoNDRU7u7ueu2111S7dm1Jkru7u4YOHWpLbi9dulTJyck5bveZZ57RnDlz1Lt3b/n5+UmSTCaTqlevrhdffFGBgYGSpDVr1hTwMwIAAAAAAAAAAACA0sehd6BfuHBBhw8fVkREhOLj43NU54EHHijkqHJvy5YtkqROnTqpcuXKGfYPGjRIP/74o8LDw3Xo0CG1aNEiR+02adIky31OTk7q2rWrDh06pNDQUMXExMjb2ztP8QMAAAAAAAAAAAAAHJRA/+qrr/T222/r0KFDuapnMpmKXAI9Li5OJ06ckCS1bNky0zKVK1eWv7+/QkJCdODAgRwn0G8k7frlKSkpBdImAAAAAAAAAAAAAJRWdk+gP/3005o7d64kyTAMe3df4M6ePWt7HjVr1syyXM2aNRUSEqKQkJAC6/vw4cOSJB8fn3TJ9OsdPHhQjz76qC5duiQ3Nzf5+fmpVatW6tWrl8qXL19g8QAAAAAAAAAAAABAcWbXBPq6dev04Ycf2n5v166d7rzzTvn7+8vd3d2eoRSY8PBw2+MKFSpkWS51X0RERIH0e/nyZf3000+SpG7duslkMmVb1tnZWZ6enoqNjdWpU6d06tQp/fjjj3rhhRfUrFmzAokJAAAABa8kXHQKAAAAAAAAFBd2TaB/8sknkiRnZ2ctWrRIw4cPt2f3hSLt2u3ZXQSQui8uLi7ffSYnJ+u9995TXFycqlSposGDB2darm7dumrQoIHatGmjihUrysnJSbGxsdq1a5cWLVqk8PBwTZ8+XbNmzVL16tWz7XPp0qVatmxZpvsuX76c7+cEAAAAAAAAAAAAAI5m1wT6n3/+KZPJpBEjRpSI5LkjGIahDz/8UH/99Zfc3Nw0YcIEmc3mTMv26dMnwzYvLy916dJFjRo10jPPPKOYmBgtX75cEyZMyLZfi8WisLCwTPdZrdbcPxEAAAAAAAAAAAAAKGLsmkCPioqSdG3K8ZLCw8PD9jghIUFeXl6ZlktISJAkeXp65qu/Tz/9VJs3b5azs7NeeOEFNWzYME/tVKlSRb169dKKFSv0559/ymq1ysnJKcvyZrNZVapUyXRfdvUAAAAAAAAAAAAAoLiwawK9atWqOnv2rFxdXe3ZbaFKu+55eHh4lgn01LXSy5cvn+e+PvvsM/3www9ycnLSs88+q7Zt2+a5LUlq0KCBJCk2NlZXr15VuXLlsiw7YsQIjRgxItN9/v7+OnfuXL5iAQAAAAAAAAAAAABHs+utw+3atZMk/f333/bstlD5+/vLZDJJkoKDg7Msl7qvRo0aeepnyZIl+vbbb2UymfTUU0+pY8eOeWoHAAAAAAAAAAAAAJA5uybQH3/8cRmGoaVLlyopKcmeXRcaT09P1a9fX5K0d+/eTMtcvnxZISEhkqRmzZrluo9ly5Zp5cqVkqTHHnuswKbAP378uKRrz6FMmTIF0iYAAAAAAAAAAAAAFFd2TaDffvvtGjt2rP755x+NHDmyxCTRu3TpIknatm2bLl26lGH/6tWrZRiGKlSooMDAwFy1vXLlSn311VeSpNGjR6tHjx45qmcYRrb7L126pPXr10uSWrduzTrmAAAAAAAAAAAAAEo9u66BHhwcrOeee07h4eFatmyZ9u7dqyeeeEK33HKLKlWqlKMkbkBAgB0izZ3u3btr3bp1Cg0N1dSpUzV+/HjVrl1bCQkJ+u677/TDDz9IuraOuItL+pf84YcfVlhYmLp27apnnnkm3b5169ZpyZIlkqQHH3xQ/fr1y3FMW7ZsUVBQkG6//XY1atRIZcuWlSTFxcVp165dWrx4sa5evSpPT0/dd999+Xj2AAAAAAAAAAAAAFAy2DWBXqtWLdt64SaTScePH8+QNM6OyWRScnJyIUWXd66urnrllVc0adIknTlzRuPGjZOXl5fi4+NltVolSb1799Ydd9yRq3YXLlwo6drzXrt2rdauXZtl2YkTJ+rmm2+2/W61WrVjxw7t2LFD0rVp2l1cXGSxWGwxlStXTs8//7z8/f1zFRcAAAAAAAAAAAAAlER2TaBLN55avLgKCAjQBx98oFWrVmnXrl26fPmyzGaz6tSpo169eql9+/a5bjP1tTIMQ5GRkdmWvf7CgsDAQI0YMUJ///23zp07p+joaMXGxspsNqtGjRpq3bq1unfvztrnAAAAAAAAAAAAAPAfuybQH3zwQXt2Z3c+Pj4aPXq0Ro8eneM6CxYsyHLfunXr8hxLlSpVNHTo0DzXBwAAAAAAAAAAAIDSxq4J9M8//9ye3QEAAAAlTkpKipydnR0dBgAAAAAAAFAiOTk6AAAAAAA5t2HDBkeHAAAAAAAAAJRYJNABAACAYuSHH35wdAgAAAAAAABAiUUCHQAAAAAAAAAAAAAAOTiB/t1332nUqFG6+eab5ePjIxcXF/n4+KhRo0YaNWqUvv/+e0eGBwAAABQ5JpPJ0SEAAAAAAAAAJZaLIzo9fPiwhg8frsOHD9u2GYYhSYqOjtbVq1d17NgxLVmyRIGBgfryyy/VuHFjR4QKAAAAAAAAAAAAACgl7H4H+p49e3Trrbfq8OHDMgzD9lOuXDlVr15d5cqVS7f94MGDuuWWW7R37157hwoAAAAAAAAAAAAAKEXsmkCPj4/XwIEDFRMTI8MwFBgYqCVLlujixYuKiIhQSEiIIiIidPHiRS1evFhNmzaVJMXExGjgwIFKSEiwZ7gAAABAkcMU7gAAAAAAAEDhsWsCfcGCBQoJCZHJZNLo0aO1d+9ejRgxQpUrV05XrnLlyrr//vu1Z88ePfzww5KkkJAQLViwwJ7hAgAAAAAAAAAAAABKEbsm0NeuXStJaty4sT755BM5OztnW97Z2Vkff/yxmjRpIkn69ttvCztEAAAAAAAAAAAAAEApZdcE+pEjR2QymXT//ffLySlnXTs7O+uBBx6QYRg6cuRIIUcIAAAAAAAAAAAAACit7JpADw8PlyTVqlUrV/Vq1qyZrj4AAABQWpw5cybd76yBDgAAAAAAABQeuybQy5QpI0m6cuVKruqllk+tDwAAAJQWXEQKAAAAAAAA2I9dE+h16tSR9P9roedUavnU+gAAAEBpxR3oAAAAAAAAQOGxawL9rrvukmEY+vnnn7V48eIc1VmyZIk2bNggk8mk7t27F3KEAAAAQNFiGIajQwAAAAAAAABKDbsm0J944gl5eXlJkkaPHq2nn35aISEhmZYNCQnR008/rdGjR0uSvLy89MQTT9gtVgAAAKAo4g50AAAAAAAAoPC42LMzPz8/zZkzRw8//LAkae7cufroo4/UoEEDNWjQQGazWRaLRSdOnNCxY8dkGIYMw5DJZNKcOXPk6+trz3ABAAAAAAAAAAAAAKWIXRPokvTQQw/JMAyNGzdOsbGxMgxDx44d07Fjx9KVS52q0svLS3PmzNGoUaPsHSoAAAAAAAAAAAAAoBSx6xTuqUaPHq2//vpL48ePV61atWx3mqf9qVWrlp577jn99ddfeuihhxwRJgAAAOBwrIEOAAAAAAAA2I/d70BPFRAQoJkzZ2rmzJm6dOmSLly4oKtXr6pMmTLy8/NT5cqVHRUaAAAAAAAAAAAAAKAUclgCPa3KlSuTMAcAAECRduXKFYXs369GjRrJzYFxmEwmB/YOAAAAAAAAlGxFIoEOAAAAFHUPPvig6lksqhcTo7Ht2jk6HAAAAAAAAACFwCFroAMAAADFTYzFIklauWqVQ+PgDnQAAAAAAACg8BTKHejbtm2zPe7UqVOm2/MqbXsAAABAaUMCHQAAAAAAACg8hZJA79Kli0wmk0wmk5KTkzNsz6vr2wMAAAAAAAAAAAAAoKAU2hrohmHkajsAAACAjDh+BgAAAAAAAOynUBLor7/+eq62AwAAAMiZ1BmdkpOTNX78eKWkpOj999+Xm5ubgyMDAAAAAAAAij8S6AAAAEAR1rhx40y3b9q0SYcOH5Ykff/99xo4cKA9wwIAAAAAAABKJCdHBwAAAAAga66urul+T70DPSYmxrYtOjrarjEBAAAAAAAAJRUJdAAAAKAYSk2kAwAAAAAAACg4dk2g16lTR3Xr1tXGjRtzVW/btm22ugAAAEBplpo4T5tANwzDUeEAAAAAAAAAJUqhrIGelTNnzshkMik2NjZX9eLi4mx1AQAAgBsJDw/X+fPndXNgoJwdHYwdkEAHAAAAAAAACoZdE+gAAACAPUyZOlWSdKubm4a2bu3gaPInq+Q4d6ADAAAAAAAABa9YrIGekJAgSXJzc3NwJAAAAChOFi5c6OgQCg2zMwEAAAAAAAAFr1gk0A8cOCBJqlSpkoMjAQAAQHFSEpLMWT0H7kAHAAAAAAAACl6hTeEeHBysM2fOZLrv8OHD8vHxyba+YRiyWCzau3evZsyYIZPJpObNmxd4nAAAACi5SkIC/XoxMTEZtpFABwAAAAAAAApGoSXQP//8c02ZMiXDdsMw9Oqrr+aqLcMwZDKZNGrUqIIKDwAAACgWLly4kO73v/7+WxJ3oAMAAAAAAACFodAS6FLWJ/Jye4LPzc1NL7zwggYOHFgQYQEAAKCUKAl3oP/vf//LdHva5xYeHm6vcAAAAAAAAIASrdAS6F26dMmwbfLkyTKZTBo6dKgaNmyYbX0nJyd5e3urdu3a6tSpkypUqFBIkQIAAKCkKgkJ9KxcuXLF9vinDRv00ksvOTCaouPMmTN6f/Zs1e7fX+MWLXJ0OAAAAAAAAChmCi2B3rlzZ3Xu3DndtsmTJ0uS7rvvPvXt27ewugYAAEAplna2o5KQQM9q9qbExEQ7R1I8vD97tiRpzbffapyDYwEAAAAAAEDxU6hTuF/v9ddfl6Qb3n0OAAAAFISSnEC/3l9//aUZb7yh+1q31l3NmxduUAAAAAAAAEAJ5ZAEOgAAAFBYSssd6Nc/t6eeekoeVqvW//ij7nrhBXuEBgAAAAAAAJQ4To4OAAAAAChIaRPO0VevOjCSgpHZVO1Wq1V///13um0pVqu9QgIAAAAAAABKLBLoAAAAQBG2Z+/eDNvefvvtTLcDAAAAAAAAyB+7TuFep06dfNU3mUw6depUAUUDAAAAFE8///KLo0MoVKGhoYo/c0Y1fX2Vn0n4IyIjVb5cuQKLCwAAAAAAACWfXRPoZ86ckclkynIdx1Sp6zleX64krGEJAACAwmUthKnMrz8uNQwjX4ldZM1iseje++5Tc0mjy5RRYMWKeW4rKjJS5WvWLLDYAMARoqKilJycrLyPhihJOAYBAAAACp9dE+gBAQE3TIKnpKQoPDxcsbGxkq4lzatVqyYXF7uGCgAAgGLqRhdrFkSb8fHx8izwXiBJR48etT3+/rvvFDhyZI7rnjt3rhAiAgDHiYqK0uDBg5WUnKxlf/2lasyqUarNmDFDsdu3a9Ts2Qpo0cLR4QAAAAAlll3XQD9z5oxOnz6d7U9wcLBiYmK0d+9eDR8+XIZhqH79+tq3b59Onz5tz3ABAAAASRnvai/qMyOFh4c7OoQ8S/da5+J13rZtm4aPGJFuW8FfSgEA9vXtt98qKTlZkjRv3jwHRwNHSkhI0A/r1ysiMlJvv/22o8MBAAAASjS7JtBzo3nz5vriiy80a9YsbdmyRQMHDiyUu4kAAABQstjjDnQnpyJ7GC1JGjdunKNDyLO0CfTcXKgwduzYwggHABxq7759tscrV650YCRwtKSkJNvjixcvOjASAAAAoOQr8vOiP/PMM/r666+1detWLV68WCNzMYWjvUVFRWnlypXatWuXrly5Ind3d9WtW1c9e/ZU+/bt89xucnKyvv/+e23dulXnz5+XJFWvXl2dO3dWr169bji9/T///KM1a9bo0KFDio6OVrly5dSkSRMNHDhQtWvXznNcAIDiw2q1avfu3WrWrJk8PDwcHQ5QqLJKoCcmJmr3H3+oitms+rmc9rS43YEecvaso0PIs7TvX24uVEibWEhliYkpkJgAwFFOHD9ue3zuv/MBKJ1SUlJsj68U45lmAAAAgOKgaN86858hQ4bIMAwtXrzY0aFkKTg4WGPHjtXatWt14cIFOTs7y2KxaP/+/Zo+fbrmz5+fp3bj4uL00ksv6bPPPtOpU6eUkpKilJQUnTx5UgsXLtTLL7+s+Pj4LOtv3bpVEyZM0NatWxUeHi53d3dduXJFW7du1XPPPafffvstr08ZAFCMPProo2rfvr369+/v6FCAQnd9An3Dhg16+OGHNWrUKH2zcqUeGTMm322eOnUqXzEia8eOHbM9zs2FCjGZJMv37t1bIDEBgKMcT5NAR+l2/cV8AAAAAApPsUig16hRQ5L0119/OTiSzCUlJenNN99UVFSUatasqdmzZ2vFihVasWKFRowYIZPJpO+++04bN27MddsfffSRjh8/LrPZrIkTJ+qbb77RN998o4kTJ8psNuvo0aP6+OOPM60bHBys2bNnKzk5WR06dNCiRYu0fPlyLVq0SLfddpuSk5P1/vvv62wxvkMJAHBjV69e1YIFCyRdSyQCeZGcnKx9+/bprbfe0uOPP57uLqiibug99+iblSvzdefejh070v2e3+nCk/9bzxYZPZ1m+nmnXCTQo69ezbBtzZo1BRJTZg4fPqzJkyfn6RgfAHLq0uXLjg4BRURxOvYCAAAAirtikUCPiIiQJEVHRzs4ksxt2LBBoaGhcnd312uvvWabFt3d3V1Dhw5Vjx49JElLly7N1cnS06dPa9u2bZKkp556SrfccotMJpNMJpNuueUW24nbLVu26N9//81Q/8svv1RycrJq166t5557ThUqVJAkVahQQRMmTFDt2rWVlJSkL7/8Ml/PHwBwTUJCgr777jtduXLF0aGkM2fOHEeHUCrEx8fryy+/dNidyQcPHtSECRN0+vRpXbp0SXFxcQXa/rRp0zT+2We14eeftey/C/IKWlxcnMaMGaMlS5bkq5283KH1yCOPyGQy2S4s3LFjh1588UUdPHhQknTmumOt0NDQPMf39NNPq2LFirbjvMzs3LlTX3/9daHfbZbZtOdFiclkUmRkZJ7Xtd/866+aPXt2AUclBQUFKTAwUG+88YbuvPNOhYaGas+ePQX+vcvMmjVrtGXLlkLvBwCKm6J6zqigkEAHAAClxeXLl225sLyeDwDyq1gk0L/55htJUtWqVR0cSeZST2B16tRJlStXzrB/0KBBMplMCg8P16FDh3Lc7tatW2UYhvz8/HTLLbdk2H/rrbfKz89PhmFo69at6fZZLBbt3r1bktS/f385Ozun2+/s7GybxnfXrl2KjY3NcVwAkBeXLl3SypUr7ZJccJTx48erb9++uvXWWx0dSjqvvPJKobT777//MpWkpNjYWM2dO1dt27bViBEjVK9evULvMzk5OcNJ1GbNmmnmzJmqU6eO/P391bBhQ9uFezExMXr11Vf1/fff57qvw4cPa+7cuZr1v/+l214YFwpMnTpVK77+Wp99/rm63H57ntqIiIzUypUrc1QulcVisc3SkDrz0cSXX9bOXbvUsVMnSdKZ06fT1c/NGuNnz57VxIkTdeDAAe3atUsffPCBoqOj1blzZxmGoeTkZI0fP15fffXVtdgiItS+fXvdc889+vrrr3PcT2698847Klu2rJYtW1ZofeRX0K5demPyZH366ad5buOZZ57RpUuXbL/n5j/fhw4d0ubNmzPUuf7Y/KaGDfXchAnq0bNnnuPMiQ0bNmjgwIG6/fbbC2QWqbVr1+qFF16QxWIpgOiA4sUwDO3evVuxsbH69ttv9c477xT5i4rs5dy5c7YbGYqDY8eOaejQoSpXrpyeeOIJR4dTaJi9xrEMw7DrRQyGYWjLli36+++/7dYnAABFRdo8W5MmTRwYCUqzIp1Aj4mJ0VNPPaWNGzfKZDKpc+fOjg4pg7i4OJ04cUKS1LJly0zLVK5cWf7+/pKkAwcO5Ljt1DueWrRoken6jyaTSS1atEhXNtVff/1l+89VVnGlbk9KSuKAHHa3cOFC21VknAjIXHFITKZNKISEhOh8JtMj//XXX4qIiFCVKlU0ZMgQVapUqVBisdeFQFFRUVq5cqWOHj2qCxcupNuXuqTG9WtVGoah/fv3l4iTssnJybJYLDKZTKpVq5b69u2b6zZefPFFmUwmde/evRAitL8XXnhBY8eOzfIiuatXr2rXrl0FdsXspk2b5OrqqsDAQEVEROhqJtNWJyYmKjg4WDNnzpQkde7cWW+++ab69OmTbszNbpxJXQImMDAw0+nKC3o5AMMw9NZbb6XbVs7HJ0O5kydPZvl3IzY2VrVq1dLnObg7vlatWrbH3t7e6fZd3/7atWv1fj7uYu7WrZvefvttNW/eXO3atUu379FHH5Wrq6vef/993XfffTKZTPr5559t+++777489xsdHa3HH39cJpNJ999/vwzDUGRkpDZu3KirV6/qpZdeUnx8vIYPH56hbmJioh5//HG9+eabN+znqaeeUo8ePTKsQW4Yhk6fPp3lZ/+ff/5RcnKyIiMj9eabbyouLi7d+5LW8q++ynDSOjY2Vu+9916mf3uu98UXX0iSvLy85OTkpDlz5mj//v0KCgrKss758+f11NNPa8rUqVqzZo0SExNt27MTHx+vbdu2yWQy6b333suwPy4uTvPmzUt3/J7TuyZTn4eU8fjfMAwlJiYqJiYm3WtuGEam68N/8cUX6t+/v2bMmKEBAwakiz8/49WaNWs0bdq0Gx7HREdHKyEhIc/9ONq7774rLy8v/fnnn44OpVgICQnRvHnzsnzPHXGB5cyZM9W2bVs1atRIAwYM0EsvvSQ3Nzf5+Pjozjvv1K+//mrXeM6dO6f4+Ph029J+52/k4sWLBRLH3r175e/vrwoVKshkMmn79u05qrd7927buGS1WvXHH3/k+f95iYmJOR6HgoKC1LBhQ9uNF1ktcVcSXP93sJyPj8xms6xWq06cOKEZM2aku2Asp44dO6a1a9dmmhyOi4uz/f0ryZKTkzP9W5z6mqSkpKhhw4ZycXFR+/btc9RmlSpVZDKZdOutt+bpQrVHH31Ut99+uxo1aqRFixZpz549WrJkSY6Oe0qTM2fOaN++fY4Oo8RZt26dpk6dyl2fAIqEorq0M0o+k2HHv4QPPfRQjsolJibq3Llz2rVrl+0EjouLi/bs2aPAwMBCjjJ3Tpw4oeeee07StfXKUxPl13v33Xf1+++/q02bNnr11Vdv2K5hGLrnnnsUHx+vxx9/3DYN/PXWr1+vefPmydPTUytWrLBtX716tRYtWiQfH59sp0G9//77FRUVpVGjRqU7cZYb/v7+OnfunKpXr8566vlktVq1YsUKtWzZUklJSZoyZYrtRECqVq1aadasWfr000/1ww8/aM6cOWrWrJm8vb1VtmxZxcfHa9OmTWrbtq0SEhKUkpJiO5G6Y8cODR06VB4eHjp+/LguXryoBg0aqFWrVrb2jx8/riNHjsjPz0+1atWyJbn//fdfWSwW1alTRwkJCfLx8VFCQoLtYNrJyUnR0dFKTEyUu7u7nJ2dVaZMGR0/flze3t6yWCyaO3eu7e66633zzTdq3769EhMTtWnTJt12221yc3OTh4eH4uPj5ezsLFdXVyUnJys4ODjdBTXvvPOO+vbtK2dnZ4WGhqpGjRo6fvy4/vrrLyUlJemFF16wlZ0xY4YGDRokFxcXPffcc/rmm2/02Wef6eDBgxo3bpy8vb114MAB+fn5qXz58kpMTLSdzD9w4IAOHz6s4cOHa9GiRXrmmWfk6empd955R99//72+/vprNW/eXDVq1NDzzz8vHx8fVa5cWVarVZGRkSpfvrzCw8NlGIYqVaqkixcvavPmzerUqZPi4uJUtmxZLV68WIMHD053B/OsWbO0aNGiDCfK3333Xd1///2SpPDwcCUmJurSpUvy8vKSq6ur7rnnHkVFRSkiIkLPPvus7r33XiUlJSklJUV79uxR586ddf78eTk5Oalhw4Yym83aunWr/vzzTz3wwAMKDw+Xl5eXPD09FR8fr6NHj2rt2rU5uhty8+bNqlevnj777DO98cYbWZZ74403bPsffvhhDRo0SN9++626dOmiTZs26aGHHlKjRo105MgRTZ48OV1SSZLuuuuuDNveeecd3XPPPbp06ZLatGlj2/7UU0/pjz/+0IwZM3Tu3DklJCTol19+0dNPP61z585p+PDh6U7yNW3aVGfOnCnwqSA/+OADtW3bVrGxsbpy5Ypat26txMRETZgwQT169NDgwYP1wQcfaMqUKerXr5+effZZJSQkyN3dXbt27dKwYcMUFhamfv36KTg4WN9++61cXV116NAhNWjQQE2bNtX58+fV6b+7ZnNjzZo1aty4scqVK6fg4GCtXbs2R8mzVD4+PoqMjNS8efPUvn17JSQkyGw2q0aNGjIMQ/3791dCQkKGtaSfeuopbd++XXv27LFtW7Roka5evarIyEjdddddOnDggMaMGWPbX6ZMmXSJ4379+unuu+9W3759dezYMV25ckVNmzaV2WxWkyZNFBkZqZ49e6pFixaaNm2apGsnWLt166bExETFxsZqw4YN6ty5s1atWqXZs2frkUce0fTp05WUlKQTJ07o4MGDatKkifbs2aMJEybk+vVNNW/ePD322GO231944QV5enpq8uTJ8vf3z/C39PXXX9fkyZOzbbN+/fq2C/pyok+fPjp//ny617xGjRoKCQnJsk5ZSS3+e7xP0vXfjI8//lht2rSRxWLRjz/+qDNnzmjw4MHy8fFRcnKyNm7cmC6Z+OGHH8rV1VVfffVVuiRFZv3MmDFDzz//fLr+nnzySX322WcaP368jhw5orVr16ar3/y/cvv/a0dptqduy+rbnVkMadtNre9cvryaNWuW6XTav//+uzp06JBFD7mTtu8TkrI7BWuWVF+ZP0dnZ+cs75x65JFH9O+//+rPP/9UnTp1cpQU/OqrrzR69OgcnRTOzbRraZ/veUnVdOP37Pp6ymGdnMShXPSdk7LZ6dWrl/z9/fXJJ5/kuE6HDh104sSJAkueperdu7fCw8MzJM969+6tDRs22C4Ka9q0aYZjlFT333+/Tpw4oaCgIE2ZMkXVqlXTsWPHNGPGDFuZ5cuXy2w2KyIiQi4uLmrWrJkmT56ssmXLqmLFilqyZIlCQ0NVrVo1W9LgkUceUfPmzfXkk09KupZkuHTpklavXi3p2gxg9913n3x9feXs7Kxjx45p6dKl6tSpk26++Wbt27dP//vf/9S2bVtt3bpVffv21WOPPaZ333033fe5V69e+uGHHzI8zkrNmjX177//qlWrVhoxYoTc3d3VokULeXt769tvv1WVKlXUuXNn7dixQxcuXFDVqlX1yy+/aPDgwfrnn3/k4+MjHx8fubq6qlKlSjKbzfL09NRjjz2mGjVqaMCAAdq0aZOioqLUtGlTvfjii+n6/+ijjxQdHa3Y2Fj5+Pjo2Wef1eTJk+Xj46Nx48ZJku3iq+z+3+bl5aWKFSvqoYce0v79+yVd+7vRrl07/fPPP7p69apGjBiRod7//vc/RUREaMqUKWrdurXmz5+v48eP6+uvv9aqVasy7Wv58uXpLhRat26drFar+vfvr4CAALm6umY640m9evX0+uuv6+OPP9YzzzwjJycnDR48OEO5iRMnZrg4K69WrlwpV1dXeXh4aO/evdq5c6f8/PxsCdtJkyZp06ZNCgoKUtu2bTVo0CDt3r1bFy9e1G233aZLly6pbNmy+l+aGV3at2+f6YU85cqVU1RUlKSM48vt/frp0UcfVa1atfTKK6/YPveZGTlypLp27apGjRopJiZGXbp0UbVq1fT555/r9OnT+vnnn7V161b17NkzR8n6zI5TrtevXz/b3+SsvPHGG/Lw8NDp06d19OhRbd26NcOxnSR17dpVly9f1vPPP6+4uDg9++yztguCVqxYoY0bN2r+/PkZ2q9evbr69++vuXPnSpJq166tWbNm6eDBg3r99dfVpk0bvfbaa4qLi9O///6rypUr66+//tKBAwfUtWtXBQYGqkaNGvr3339VqVIllS9fXqtXr1bbtm1VtmxZ7d6923an+7Rp02QYhvz9/dWyZUuFhIRo0aJFevzxx/XZZ59p6dKl+vTTTxUbGyt/f395eXnJZDJpw4YNev/999WwYUO9/vrrcnNzU3h4uObPn6/KlSsrODhYnp6eOnfunAYNGiRXV1fNnzkzR8cynTt3VmJiou2Y+8UXX9TAgQMVFxenoKAgzZw5Uw0bNtSOHTsyvcjBbDare/fucnJyss3qM2rUKN155506d+6cfP67wPHEiRNasWJFuiUFQ0JC5ObmJldXV7322mv68MMPJV073q9Zs6bKly+vmJgYnTp1Sr/++qsCAgI0ePBgXbx4UY0bN9bEiRNlNpttF2fPnz9fhw4dUp06dVSxYkXb/3+HDh2a5f9LPT09VaNGDVWrVi3LJU/mzZuntWvXqlq1alq4cKFte4UKFRQeHp5pnYLwxBNP6MKFC1qzZk2+22ratKmaNWumVq1a6dSpU6patapWr16tZs2aKTo62jbu3nbbbXJxcVGHDh3k4+Oj559/Xps2bVK1atWUmJiohIQEbdy4UX/88YdefvllLV++XB9++KGGDx+uzp07a+/evapdu7bmz5+vkydPqn79+howYIDeffddPfDAA7Zzjr169dK7776r8+fPKyEhQb/++qvtYt60br75ZvXt21ft2rWTm5ub2rVrpxMnTmjHjh3q0KGD2rVrp969e+vhhx+WJB05ckStWrXShg0b5O/vr6pVq2b6Nyithg0b6vTp02rbtq1mz56tuLg4Xb161fZ/udT/b/v4+Gjv3r1avny57r33Xr3xxhs6deqUpk+fLunaZ6lt27aqUKGCvL29FR8fL09PT0nXLqqYMWOGOnXqpFtvvVVnz57V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YeDAgdlOB5pbb775ppYvX64jR44UWJsFxdfXV6GhoY4OAwAAACj2xowZo/bt22v37t0lej36kiCzZRMc4f7779cPP/xQqFPnpwoMDNShQ4fyVHfRokW2JUZNJpOioqJsS8ksXLhQo0ePTlfez89PTz31lG1qcEm688471bZtW9tMptcbNmxYns4TpT1nM2HCBDVt2tQ2XbiTk5Pi4uL04IMPprsBqkePHqpataoWLVokSRo9erRuu+02Xbx4Ue+9957tvGBaDRo00PHjx28Yz3333afly5dnW6Zly5bau3dvhu0tWrRQWFiYzp07J+na8hFbtmxRhQoV0p0HnDx5slavXq1hw4bpp59+SnfOys3NTfPmzVNsbKzGjh17w3hzq1OnTtq2bVu6be7u7nr00Uc1Z84cSUq39FCqwYMHy8vLS2vWrEn33fP09NQbb7yhuXPnKjg4WJJ077332pbAvOmmm3T27Fm1bt1aW7dutdVLnTo/Vdu2bdW7d29FRUXp6NGjatWqlaZMmaJ58+YpISFBFy9e1KlTp1SzZk3NmDFDtWrVUteuXbVy5Uq9+eabeuqppyRdW0YmdbmZy5cva+XKlbrttttktVr1/fffa/z48TIMQ99//702bNiQ7Wv16quvytPTU1WrVpVhGDp06JCsVqtq1KiRbrnNVq1aac+ePerdu7fc3d3VpUsXffvtt7p48aIOHz4s6doyETfffLNuvvlm7dmzRx999FEO3q1r3nrrLW3fvl3dunVTRESEtmzZku61nDJligICAvTxxx9r586dmjJlivz9/RUTE6Onn35akvTee+/Jx8dHYWFhioqKUmhoqIKCgnTs2DE1atTItkb39cs+zZ07V2azWYZh6KWXXrItu5X6Hk+fPl1VqlTRvn37bEvPZCV1iaWTJ0+qR48eOnv2rG3ZJ8MwtH79etu5vKefftr2eZSujbVdu3a1Tfnu7OxsGyOWL1+udevW2cq+/PLLWrVqlf7991998sknOnTokE6cOKE2bdooNjZW06dPV9u2bVW1alXdfPPN+ueff7Ry5Up9/PHH+ueff7R//3798ssvmT4Hs9ksi8WievXqyc/PT9WqVdPFixd15coVHTp0SNWrV9ett96qwMBAvfbaa5m+lwEBAXJxcdGMGTNsS8+lLik5a9Ys/fDDD+ratavKli1re21Onz6tQ4cOacCAAUpMTNRHH32kEydO6NZbb1WvXr3k6uqqt956S2fPnlW3bt1ktVpt48qQIUNUtmxZNWnSRIsWLdKgQYP01ltvpbsh9emnn1b79u01bNiwbN/DVH369FFkZKQefPBBNWjQIEd14CAG8iUoKMjo06eP0adPH8NisWRZbv78+UafPn2M8ePH56hdi8ViazcoKCjLcjt27LCVi42NtW1fsGCB0adPH2PcuHHZ9vP0008bffr0MRYuXJijuDJTvXp1Q5JRvXr1PLcBx8vu81sYJNl+RowYYde+i4tff/3VmDt3rpGYmJhuu9VqzVU719d3FKvVanzxxRdGWFiY0bx5c2PChAmODilHDhw4YFy5csX2e7du3QxJxp9//mkYxrXnFRsba5jN5nSfaxcXF0eFnE5CQkK6uKpXr24kJSUZTZo0MZydnW/43bdarcb69euNixcvGk899ZSxYMECw9nZOV2b7du3t8sY8ueff9r6PHTokJGcnHzDOhaLxVYnJSWlUOIKCgpK93pIMu666y5DkjFs2DBj//79xu7du9PVsVqtxu+//27s2LEjy3YvX75sBAUFZfjO//bbb7Z+Tp48adueuq1fv362x4899phx6tSpDPH99NNPhmEYxsaNG9PFbBiGcenSJcNqtRoxMTHG2LFjbfvLSkbn/37K/rftl19+yfY4JTey6ienLl68aNx77722+uP+++ksGR2bNk23vbNk/PzNN7bYr399tq5bl+G5Xl+/7H+vdVJSUo6fW15/0vbdM83rk9lPz+tizEn7EyZMMM6ePWt7Tw3j2me0R48eRpUqVYwJEyYYkowBAwYYFovF9pzTtuHp6WmsXr060/ZTj1GvXr1q/PHHH0ZsbGyGMvfdd58RHh6e4fkOue75bNmyxTAMw4iIiMjw3cjsvU99Dd544w3DMAyjadOmhiRj+vTptr7r1atnxMXFGcHBwcaECROMZ555xujRo4exeM6cDJ8DDw8P4++//87yPeosGWePHMkQY3R0tGEYhnH48GHjxIkT6eKOi4szFi9enGH75cuXjaNHj9oep7YVHx9vRERE3PBzlyq13j///JPt5yAlJcWIj4835s2bZxw6dMi4fPmy0atXL6Nv377GqVOn0rWZkpJiTJs2zZg3b1667aGhoenazO6Y5cqVK0ZCQkKOnsM777xjLFmyJNsye/bsMSQZ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Goah3r17KygoSNK1NQzuuusu3XHHHapfv77MZrMsFotOnjypjRs36pdfflFKSoqCgoLUp08f/fbbb/YMN8dcXV31yiuvaNKkSTpz5ozGjRsnLy8vxcfHy2q1Srq2Lukdd9yR67afeOIJXbhwQcePH9f06dPl9t/0qYmJiZKkhg0bZrnGYEBAgMaNG6fZs2frt99+0++//y4vLy9ZLBZJ104Ejxs3Lst12wEAANK6fsmYoqhTx466eoNjxtdee81O0RSMt6ZP19cvv3zDcoGBgQqsXVs6edIOURWu55577toar2XKSDExDpsqe+rUqTIMQ6bq1R3SPwDcc889GlCr1rVzAVyADAAAAAB2YdcE+ueff67t27fLZDKpXr16WrFihZo3b55p2WeffVYHDhzQvffeq2PHjmn79u1atGiRRo4cac+QcywgIEAffPCBVq1apV27duny5csym82qU6eOevXqpfbt2+epXU9PT7399tv6/vvvtXXrVp0/f16SVLduXXXp0kW9evXK9o6ozp07q0aNGlq9erUOHz6s6Oho21TyAwcOVO3atfMUFwAAQFH0xRdfaPenn+qH6dOzLFOmTBk7RpR/LLXjWMyYA8DRUi+kBwAAAADYh10T6EuXLpUklStXTr/++quqVauWbflmzZpp06ZNatKkiaKiorRkyZIim0CXJB8fH40ePVqjR4/OcZ0FCxbcsIyLi4v69++v/v375ymuOnXqaMKECXmqCwAAUJz4+PjozjvvzDaBnhuNGzUqkHbyw3B0AAAAAAAAAEApYtfFEA8dOiSTyaSHHnrohsnzVNWqVdPo0aNlGIYOHTpUyBECAAAA0jtvv627u3fXV1995ehQMlWvbl1Hh4A0Xp44UZLUtQDXYAcAAAAAAIBj2PUO9NS1t1u1apWrei1btpQkxcbGFnhMAAAAwPXatWundu3aSQEBjg4lU1arVTc1aKBjx487OhRIeuGFFzSkXj3VrFnT0aEAAAAAAAAgn+x6B3rqXecpKSm5qpda3s/Pr8BjAgAAAHJj9EMPOToEGYbB2txFiMlkUp06deTs7OzoUAAAAAAAAJBPdk2gd+rUSZK0ffv2XNXbvn27TCaTOnfuXBhhAQAAoIS7uWHDfLexZPFi3T9ihO69994CiCgXjIyroAcEBJBABwAAAAAAAAqBXRPoTz75pJycnLRo0SL9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" }, "metadata": { "image/png": { "height": 200, "width": 1000 } }, "output_type": "display_data" } ], "source": [ "attribution.plot_peaks()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:31:03.816125Z", "iopub.status.busy": "2025-11-21T06:31:03.815965Z", "iopub.status.idle": "2025-11-21T06:31:03.905305Z", "shell.execute_reply": "2025-11-21T06:31:03.904884Z" } }, "outputs": [], "source": [ "import torch\n", "from decima import predict_attributions_seqlet_calling\n", "\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:31:03.906863Z", "iopub.status.busy": "2025-11-21T06:31:03.906719Z", "iopub.status.idle": "2025-11-21T06:31:03.908718Z", "shell.execute_reply": "2025-11-21T06:31:03.908328Z" } }, "outputs": [], "source": [ "spi1_cell_types = [\n", " \"classical monocyte\",\n", " \"intermediate monocyte\",\n", " \"non-classical monocyte\",\n", " \"alveolar macrophage\",\n", " \"macrophage\",\n", "]" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:31:03.910006Z", "iopub.status.busy": "2025-11-21T06:31:03.909877Z", "iopub.status.idle": "2025-11-21T06:32:07.465527Z", "shell.execute_reply": "2025-11-21T06:32:07.464802Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'rep0:latest', 720.03MB. 1 files...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Done. 00:00:00.6 (1180.1MB/s)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Done. 00:00:01.8 (1694.4MB/s)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/celikm5/Projects/decima/src/decima/interpret/attributer.py:66: UserWarning: `off_tasks` is not provided. Using all other tasks as off_tasks.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "Computing attributions...: 0%| | 0/1 [00:00 \u001b[39m\u001b[32m3\u001b[39m df_seqs = \u001b[43mpd\u001b[49m\u001b[43m.\u001b[49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43m../tests/data/seqs.csv\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindex_col\u001b[49m\u001b[43m=\u001b[49m\u001b[32;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[32m 4\u001b[39m df_seqs\n", "\u001b[36mFile \u001b[39m\u001b[32m~/miniforge3/envs/decima2/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1026\u001b[39m, in \u001b[36mread_csv\u001b[39m\u001b[34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[39m\n\u001b[32m 1013\u001b[39m kwds_defaults = _refine_defaults_read(\n\u001b[32m 1014\u001b[39m dialect,\n\u001b[32m 1015\u001b[39m delimiter,\n\u001b[32m (...)\u001b[39m\u001b[32m 1022\u001b[39m dtype_backend=dtype_backend,\n\u001b[32m 1023\u001b[39m )\n\u001b[32m 1024\u001b[39m kwds.update(kwds_defaults)\n\u001b[32m-> \u001b[39m\u001b[32m1026\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", "\u001b[36mFile \u001b[39m\u001b[32m~/miniforge3/envs/decima2/lib/python3.11/site-packages/pandas/io/parsers/readers.py:620\u001b[39m, in \u001b[36m_read\u001b[39m\u001b[34m(filepath_or_buffer, kwds)\u001b[39m\n\u001b[32m 617\u001b[39m _validate_names(kwds.get(\u001b[33m\"\u001b[39m\u001b[33mnames\u001b[39m\u001b[33m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m))\n\u001b[32m 619\u001b[39m \u001b[38;5;66;03m# Create the parser.\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m620\u001b[39m parser = \u001b[43mTextFileReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 622\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mor\u001b[39;00m iterator:\n\u001b[32m 623\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n", "\u001b[36mFile \u001b[39m\u001b[32m~/miniforge3/envs/decima2/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1620\u001b[39m, in \u001b[36mTextFileReader.__init__\u001b[39m\u001b[34m(self, f, engine, **kwds)\u001b[39m\n\u001b[32m 1617\u001b[39m \u001b[38;5;28mself\u001b[39m.options[\u001b[33m\"\u001b[39m\u001b[33mhas_index_names\u001b[39m\u001b[33m\"\u001b[39m] = kwds[\u001b[33m\"\u001b[39m\u001b[33mhas_index_names\u001b[39m\u001b[33m\"\u001b[39m]\n\u001b[32m 1619\u001b[39m \u001b[38;5;28mself\u001b[39m.handles: IOHandles | \u001b[38;5;28;01mNone\u001b[39;00m = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1620\u001b[39m \u001b[38;5;28mself\u001b[39m._engine = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_make_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mengine\u001b[49m\u001b[43m)\u001b[49m\n", "\u001b[36mFile \u001b[39m\u001b[32m~/miniforge3/envs/decima2/lib/python3.11/site-packages/pandas/io/parsers/readers.py:1880\u001b[39m, in \u001b[36mTextFileReader._make_engine\u001b[39m\u001b[34m(self, f, engine)\u001b[39m\n\u001b[32m 1878\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[33m\"\u001b[39m\u001b[33mb\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m mode:\n\u001b[32m 1879\u001b[39m mode += \u001b[33m\"\u001b[39m\u001b[33mb\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m-> \u001b[39m\u001b[32m1880\u001b[39m \u001b[38;5;28mself\u001b[39m.handles = \u001b[43mget_handle\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1881\u001b[39m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1882\u001b[39m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1883\u001b[39m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mencoding\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1884\u001b[39m \u001b[43m \u001b[49m\u001b[43mcompression\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mcompression\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1885\u001b[39m \u001b[43m \u001b[49m\u001b[43mmemory_map\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmemory_map\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1886\u001b[39m \u001b[43m \u001b[49m\u001b[43mis_text\u001b[49m\u001b[43m=\u001b[49m\u001b[43mis_text\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1887\u001b[39m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mencoding_errors\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstrict\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1888\u001b[39m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstorage_options\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1889\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1890\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m.handles \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1891\u001b[39m f = \u001b[38;5;28mself\u001b[39m.handles.handle\n", "\u001b[36mFile \u001b[39m\u001b[32m~/miniforge3/envs/decima2/lib/python3.11/site-packages/pandas/io/common.py:873\u001b[39m, in \u001b[36mget_handle\u001b[39m\u001b[34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[39m\n\u001b[32m 868\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(handle, \u001b[38;5;28mstr\u001b[39m):\n\u001b[32m 869\u001b[39m \u001b[38;5;66;03m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[32m 870\u001b[39m \u001b[38;5;66;03m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[32m 871\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m ioargs.encoding \u001b[38;5;129;01mand\u001b[39;00m \u001b[33m\"\u001b[39m\u001b[33mb\u001b[39m\u001b[33m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m ioargs.mode:\n\u001b[32m 872\u001b[39m \u001b[38;5;66;03m# Encoding\u001b[39;00m\n\u001b[32m--> \u001b[39m\u001b[32m873\u001b[39m handle = \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[32m 874\u001b[39m \u001b[43m \u001b[49m\u001b[43mhandle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 875\u001b[39m \u001b[43m \u001b[49m\u001b[43mioargs\u001b[49m\u001b[43m.\u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 876\u001b[39m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m=\u001b[49m\u001b[43mioargs\u001b[49m\u001b[43m.\u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 877\u001b[39m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[43m=\u001b[49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 878\u001b[39m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 879\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 880\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 881\u001b[39m \u001b[38;5;66;03m# Binary mode\u001b[39;00m\n\u001b[32m 882\u001b[39m handle = \u001b[38;5;28mopen\u001b[39m(handle, ioargs.mode)\n", "\u001b[31mFileNotFoundError\u001b[39m: [Errno 2] No such file or directory: '../tests/data/seqs.csv'" ] } ], "source": [ "import pandas as pd\n", "\n", "df_seqs = pd.read_csv(\"../tests/data/seqs.csv\", index_col=0)\n", "df_seqs" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:07.905316Z", "iopub.status.busy": "2025-11-21T06:32:07.905178Z", "iopub.status.idle": "2025-11-21T06:32:07.926685Z", "shell.execute_reply": "2025-11-21T06:32:07.926250Z" } }, "outputs": [ { "ename": "NameError", "evalue": "name 'df_seqs' is not defined", "output_type": "error", "traceback": [ "\u001b[31m---------------------------------------------------------------------------\u001b[39m", "\u001b[31mNameError\u001b[39m Traceback (most recent call last)", "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[29]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m predict_attributions_seqlet_calling(\n\u001b[32m 2\u001b[39m output_prefix=\u001b[33m\"\u001b[39m\u001b[33mexample/attrs_custom_seqs_monoctypes\u001b[39m\u001b[33m\"\u001b[39m,\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m seqs=\u001b[43mdf_seqs\u001b[49m, \u001b[38;5;66;03m# <-- custom sequences\u001b[39;00m\n\u001b[32m 4\u001b[39m tasks=\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mcell_type in \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mspi1_cell_types\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m,\n\u001b[32m 5\u001b[39m device=device,\n\u001b[32m 6\u001b[39m )\n\u001b[32m 7\u001b[39m get_ipython().system(\u001b[33m'\u001b[39m\u001b[33m ls attrs_custom_seqs_monoctypes\u001b[39m\u001b[33m'\u001b[39m)\n", "\u001b[31mNameError\u001b[39m: name 'df_seqs' is not defined" ] } ], "source": [ "predict_attributions_seqlet_calling(\n", " output_prefix=\"example/attrs_custom_seqs_monoctypes\",\n", " seqs=df_seqs, # <-- custom sequences\n", " tasks=f\"cell_type in {spi1_cell_types}\",\n", " device=device,\n", ")\n", "! ls attrs_custom_seqs_monoctypes" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:07.927982Z", "iopub.status.busy": "2025-11-21T06:32:07.927858Z", "iopub.status.idle": "2025-11-21T06:32:07.931232Z", "shell.execute_reply": "2025-11-21T06:32:07.930844Z" } }, "outputs": [ { "data": { "text/plain": [ "524288" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import random\n", "import torch\n", "from grelu.sequence.format import strings_to_one_hot\n", "from decima.constants import DECIMA_CONTEXT_SIZE\n", "\n", "DECIMA_CONTEXT_SIZE" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:07.932508Z", "iopub.status.busy": "2025-11-21T06:32:07.932376Z", "iopub.status.idle": "2025-11-21T06:32:08.108325Z", "shell.execute_reply": "2025-11-21T06:32:08.104954Z" } }, "outputs": [ { "data": { "text/plain": [ "torch.Size([1, 5, 524288])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "seqs = torch.cat(\n", " [\n", " strings_to_one_hot(\n", " [\"\".join(random.choice([\"A\", \"T\", \"C\", \"G\"]) for _ in range(DECIMA_CONTEXT_SIZE))]\n", " ), # one-hot encoded sequence\n", " torch.ones(1, 1, DECIMA_CONTEXT_SIZE), # binary mask for the gene\n", " ],\n", " dim=1,\n", ")\n", "seqs.shape" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:08.109954Z", "iopub.status.busy": "2025-11-21T06:32:08.109816Z", "iopub.status.idle": "2025-11-21T06:32:34.000117Z", "shell.execute_reply": "2025-11-21T06:32:33.999519Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'rep0:latest', 720.03MB. 1 files...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Done. 00:00:00.6 (1145.4MB/s)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'metadata:latest', 3122.32MB. 1 files...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Done. 00:00:01.8 (1748.9MB/s)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/celikm5/Projects/decima/src/decima/interpret/attributer.py:66: UserWarning: `off_tasks` is not provided. Using all other tasks as off_tasks.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "Computing attributions...: 0%| | 0/1 [00:00\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", " \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", " \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", "
cell_typetissueorgandiseasestudydatasetregionsubregioncelltype_coarsen_cellstotal_countsn_genessize_factortrain_pearsonval_pearsontest_pearson
agg_4063alveolar macrophagealveolar systemlungCOVID-19GSE155249scimilaritynannanNaN14538.001524e+061471136293.4720250.9430590.8372100.849998
agg_4064alveolar macrophagealveolar systemlunghealthyGSE155249scimilaritynannanNaN12797.598244e+061367334158.5144960.9328190.8310240.843684
agg_4065alveolar macrophageleft lunglungNAENCODEscimilaritynannanNaN4053.000961e+061659546501.3758570.9360810.8479240.845485
agg_4066alveolar macrophagelingula of left lunglunghealthya3ffde6c-7ad2-498a-903c-d58e732f7470scimilaritynannanNaN8541.713753e+061511042773.0097350.8939270.8060000.804835
agg_4067alveolar macrophagelower lobe of left lunglungNAENCODEscimilaritynannanNaN7631.344798e+071797349020.8044870.9405860.8546800.863014
...................................................
agg_6644macrophageuterusuterushealthy32f2fd23-ec74-486f-9544-e5b2f41725f5scimilaritynannanNaN4254.340830e+061523336624.1367390.9547530.8502470.843175
agg_6645macrophageuterusuterushealthye5f58829-1a66-40b5-a624-9046778e74f5scimilaritynannanNaN2313.007554e+071478727615.7621570.8394760.7305540.719085
agg_6646macrophagevasculaturevasculaturehealthye5f58829-1a66-40b5-a624-9046778e74f5scimilaritynannanNaN124974.040685e+081819936829.4989640.9388620.8368190.833474
agg_6647macrophagevisceral fatadiposeobesityGSE128518scimilaritynannanNaN7292.078431e+061376034188.7161870.9415960.8273600.823912
agg_6648macrophagewhite adipose tissueadiposeNAGSE128890scimilaritynannanNaN451.381560e+05825727604.7480950.8593860.7453280.745539
\n", "

325 rows × 16 columns

\n", "" ], "text/plain": [ " cell_type tissue organ disease \\\n", "agg_4063 alveolar macrophage alveolar system lung COVID-19 \n", "agg_4064 alveolar macrophage alveolar system lung healthy \n", "agg_4065 alveolar macrophage left lung lung NA \n", "agg_4066 alveolar macrophage lingula of left lung lung healthy \n", "agg_4067 alveolar macrophage lower lobe of left lung lung NA \n", "... ... ... ... ... \n", "agg_6644 macrophage uterus uterus healthy \n", "agg_6645 macrophage uterus uterus healthy \n", "agg_6646 macrophage vasculature vasculature healthy \n", "agg_6647 macrophage visceral fat adipose obesity \n", "agg_6648 macrophage white adipose tissue adipose NA \n", "\n", " study dataset region subregion \\\n", "agg_4063 GSE155249 scimilarity nan nan \n", "agg_4064 GSE155249 scimilarity nan nan \n", "agg_4065 ENCODE scimilarity nan nan \n", "agg_4066 a3ffde6c-7ad2-498a-903c-d58e732f7470 scimilarity nan nan \n", "agg_4067 ENCODE scimilarity nan nan \n", "... ... ... ... ... \n", "agg_6644 32f2fd23-ec74-486f-9544-e5b2f41725f5 scimilarity nan nan \n", "agg_6645 e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan \n", "agg_6646 e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity nan nan \n", "agg_6647 GSE128518 scimilarity nan nan \n", "agg_6648 GSE128890 scimilarity nan nan \n", "\n", " celltype_coarse n_cells total_counts n_genes size_factor \\\n", "agg_4063 NaN 1453 8.001524e+06 14711 36293.472025 \n", "agg_4064 NaN 1279 7.598244e+06 13673 34158.514496 \n", "agg_4065 NaN 405 3.000961e+06 16595 46501.375857 \n", "agg_4066 NaN 854 1.713753e+06 15110 42773.009735 \n", "agg_4067 NaN 763 1.344798e+07 17973 49020.804487 \n", "... ... ... ... ... ... \n", "agg_6644 NaN 425 4.340830e+06 15233 36624.136739 \n", "agg_6645 NaN 231 3.007554e+07 14787 27615.762157 \n", "agg_6646 NaN 12497 4.040685e+08 18199 36829.498964 \n", "agg_6647 NaN 729 2.078431e+06 13760 34188.716187 \n", "agg_6648 NaN 45 1.381560e+05 8257 27604.748095 \n", "\n", " train_pearson val_pearson test_pearson \n", "agg_4063 0.943059 0.837210 0.849998 \n", "agg_4064 0.932819 0.831024 0.843684 \n", "agg_4065 0.936081 0.847924 0.845485 \n", "agg_4066 0.893927 0.806000 0.804835 \n", "agg_4067 0.940586 0.854680 0.863014 \n", "... ... ... ... \n", "agg_6644 0.954753 0.850247 0.843175 \n", "agg_6645 0.839476 0.730554 0.719085 \n", "agg_6646 0.938862 0.836819 0.833474 \n", "agg_6647 0.941596 0.827360 0.823912 \n", "agg_6648 0.859386 0.745328 0.745539 \n", "\n", "[325 rows x 16 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.cell_metadata.query(\"cell_type.str.endswith('macrophage')\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results and metadata stored in anndata format which you can access directly if needed but most operation are supported by DecimaResult object." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.883264Z", "iopub.status.busy": "2025-11-21T06:32:37.883127Z", "iopub.status.idle": "2025-11-21T06:32:37.885853Z", "shell.execute_reply": "2025-11-21T06:32:37.885430Z" } }, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 8856 × 18457\n", " obs: 'cell_type', 'tissue', 'organ', 'disease', 'study', 'dataset', 'region', 'subregion', 'celltype_coarse', 'n_cells', 'total_counts', 'n_genes', 'size_factor', 'train_pearson', 'val_pearson', 'test_pearson'\n", " var: 'chrom', 'start', 'end', 'strand', 'gene_type', 'frac_nan', 'mean_counts', 'n_tracks', 'gene_start', 'gene_end', 'gene_length', 'gene_mask_start', 'gene_mask_end', 'frac_N', 'fold', 'dataset', 'gene_id', 'pearson', 'size_factor_pearson', 'ensembl_canonical_tss'\n", " layers: 'preds', 'v1_rep0', 'v1_rep1', 'v1_rep2', 'v1_rep3'" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.anndata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are the cell metadata contained in the Decima object." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.887047Z", "iopub.status.busy": "2025-11-21T06:32:37.886918Z", "iopub.status.idle": "2025-11-21T06:32:37.897015Z", "shell.execute_reply": "2025-11-21T06:32:37.896599Z" } }, "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", " \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", " \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", "
cell_typetissueorgandiseasestudydatasetregionsubregioncelltype_coarsen_cellstotal_countsn_genessize_factortrain_pearsonval_pearsontest_pearson
agg_0Amygdala excitatoryAmygdala_AmygdalaCNShealthyjhpce#tran2021brain_atlasAmygdalaAmygdalaNaN3311.592883e+071700041431.4651860.9424590.8413770.865640
agg_1Amygdala excitatoryAmygdala_Basolateral nuclear group (BLN) - lat...CNShealthySCR_016152brain_atlasAmygdalaBasolateral nuclear group (BLN) - lateral nucl...NaN113692.952133e+081808040765.3414810.9430980.8389360.861092
agg_2Amygdala excitatoryAmygdala_Bed nucleus of stria terminalis and n...CNShealthySCR_016152brain_atlasAmygdalaBed nucleus of stria terminalis and nearby - BNSTNaN1392.593231e+061541842556.3870200.9521700.8545440.866654
agg_3Amygdala excitatoryAmygdala_Central nuclear group - CENCNShealthySCR_016152brain_atlasAmygdalaCentral nuclear group - CENNaN38929.946371e+071795942884.6414300.9597440.8635850.881554
agg_4Amygdala excitatoryAmygdala_Corticomedial nuclear group (CMN) - a...CNShealthySCR_016152brain_atlasAmygdalaCorticomedial nuclear group (CMN) - anterior c...NaN29451.281619e+081788541816.7419330.9513650.8543040.868902
...................................................
agg_9533vascular associated smooth muscle cellupper lobe of right lunglungNAENCODEscimilaritynannanNaN213.483375e+04851535404.9117680.7352130.6656470.654491
agg_9535vascular associated smooth muscle cellurinary bladderurinaryhealthyGSE129845scimilaritynannanNaN248.498500e+04733726189.4157890.8098520.6900220.656160
agg_9536vascular associated smooth muscle celluterusuterusNAENCODEscimilaritynannanNaN2725.700762e+051476944938.4038670.9153290.8089410.839993
agg_9537vascular associated smooth muscle celluterusuterushealthye5f58829-1a66-40b5-a624-9046778e74f5scimilaritynannanNaN4721.089170e+071451430145.4221520.8523390.7176820.727469
agg_9538vascular associated smooth muscle cellvasculaturevasculaturehealthye5f58829-1a66-40b5-a624-9046778e74f5scimilaritynannanNaN18535.992697e+071676436464.2733710.9098550.7804130.796351
\n", "

8856 rows × 16 columns

\n", "
" ], "text/plain": [ " cell_type \\\n", "agg_0 Amygdala excitatory \n", "agg_1 Amygdala excitatory \n", "agg_2 Amygdala excitatory \n", "agg_3 Amygdala excitatory \n", "agg_4 Amygdala excitatory \n", "... ... \n", "agg_9533 vascular associated smooth muscle cell \n", "agg_9535 vascular associated smooth muscle cell \n", "agg_9536 vascular associated smooth muscle cell \n", "agg_9537 vascular associated smooth muscle cell \n", "agg_9538 vascular associated smooth muscle cell \n", "\n", " tissue organ \\\n", "agg_0 Amygdala_Amygdala CNS \n", "agg_1 Amygdala_Basolateral nuclear group (BLN) - lat... CNS \n", "agg_2 Amygdala_Bed nucleus of stria terminalis and n... CNS \n", "agg_3 Amygdala_Central nuclear group - CEN CNS \n", "agg_4 Amygdala_Corticomedial nuclear group (CMN) - a... CNS \n", "... ... ... \n", "agg_9533 upper lobe of right lung lung \n", "agg_9535 urinary bladder urinary \n", "agg_9536 uterus uterus \n", "agg_9537 uterus uterus \n", "agg_9538 vasculature vasculature \n", "\n", " disease study dataset \\\n", "agg_0 healthy jhpce#tran2021 brain_atlas \n", "agg_1 healthy SCR_016152 brain_atlas \n", "agg_2 healthy SCR_016152 brain_atlas \n", "agg_3 healthy SCR_016152 brain_atlas \n", "agg_4 healthy SCR_016152 brain_atlas \n", "... ... ... ... \n", "agg_9533 NA ENCODE scimilarity \n", "agg_9535 healthy GSE129845 scimilarity \n", "agg_9536 NA ENCODE scimilarity \n", "agg_9537 healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity \n", "agg_9538 healthy e5f58829-1a66-40b5-a624-9046778e74f5 scimilarity \n", "\n", " region subregion \\\n", "agg_0 Amygdala Amygdala \n", "agg_1 Amygdala Basolateral nuclear group (BLN) - lateral nucl... \n", "agg_2 Amygdala Bed nucleus of stria terminalis and nearby - BNST \n", "agg_3 Amygdala Central nuclear group - CEN \n", "agg_4 Amygdala Corticomedial nuclear group (CMN) - anterior c... \n", "... ... ... \n", "agg_9533 nan nan \n", "agg_9535 nan nan \n", "agg_9536 nan nan \n", "agg_9537 nan nan \n", "agg_9538 nan nan \n", "\n", " celltype_coarse n_cells total_counts n_genes size_factor \\\n", "agg_0 NaN 331 1.592883e+07 17000 41431.465186 \n", "agg_1 NaN 11369 2.952133e+08 18080 40765.341481 \n", "agg_2 NaN 139 2.593231e+06 15418 42556.387020 \n", "agg_3 NaN 3892 9.946371e+07 17959 42884.641430 \n", "agg_4 NaN 2945 1.281619e+08 17885 41816.741933 \n", "... ... ... ... ... ... \n", "agg_9533 NaN 21 3.483375e+04 8515 35404.911768 \n", "agg_9535 NaN 24 8.498500e+04 7337 26189.415789 \n", "agg_9536 NaN 272 5.700762e+05 14769 44938.403867 \n", "agg_9537 NaN 472 1.089170e+07 14514 30145.422152 \n", "agg_9538 NaN 1853 5.992697e+07 16764 36464.273371 \n", "\n", " train_pearson val_pearson test_pearson \n", "agg_0 0.942459 0.841377 0.865640 \n", "agg_1 0.943098 0.838936 0.861092 \n", "agg_2 0.952170 0.854544 0.866654 \n", "agg_3 0.959744 0.863585 0.881554 \n", "agg_4 0.951365 0.854304 0.868902 \n", "... ... ... ... \n", "agg_9533 0.735213 0.665647 0.654491 \n", "agg_9535 0.809852 0.690022 0.656160 \n", "agg_9536 0.915329 0.808941 0.839993 \n", "agg_9537 0.852339 0.717682 0.727469 \n", "agg_9538 0.909855 0.780413 0.796351 \n", "\n", "[8856 rows x 16 columns]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.cell_metadata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly, these are the gene metadata contained in the Decima object." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.898318Z", "iopub.status.busy": "2025-11-21T06:32:37.898189Z", "iopub.status.idle": "2025-11-21T06:32:37.908345Z", "shell.execute_reply": "2025-11-21T06:32:37.907862Z" } }, "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", " \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", " \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", " \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", "
chromstartendstrandgene_typefrac_nanmean_countsn_tracksgene_startgene_endgene_lengthgene_mask_startgene_mask_endfrac_Nfolddatasetgene_idpearsonsize_factor_pearsonensembl_canonical_tss
STRADAchr176338153863905826-protein_coding0.0000002.20807476166368233663741986596501638402234900.000000['fold1']trainENSG000002661730.4699230.47662763741799.0
ETV4chr174321917243743460-protein_coding0.0308730.92586350044352784443579620517761638402156160.000000['fold1']trainENSG000001758320.7380920.61328143546340.0
USP25chr211556618516090473+protein_coding0.0000003.650355860415730025158800691500441638403138840.000000['fold6']trainENSG000001553130.9052220.78444615729982.0
ZSWIM5chr14494576145470049-protein_coding0.0006202.190115612345016399453062092898101638404536500.000000['fold5']trainENSG000001624150.9617720.79513145206605.0
C21orf58chr214596342746487715-protein_coding0.0007911.65046773544630018146323875236941638401875340.000000['fold6']trainENSG000001602980.6452680.41236846323870.0
...............................................................
NPDC1chr9136685731137210019-protein_coding0.0000002.625285785213703946313704617967161638401705560.000000['fold3']testENSG000001072810.3163220.178204137046177.0
ZNF425chr7148765876149290164-protein_coding0.0010481.2929576511149102784149126324235401638401873800.000000['fold7']trainENSG000002049470.8212920.737081149126324.0
COL5A1chr9134477934135002222+protein_coding0.0021591.49266462091346417741348448432030691638403669090.000000['fold3']testENSG000001306350.7666240.456999134641803.0
BRD3chr9133708087134232375-protein_coding0.0000003.1904508675134030305134068535382301638402020700.004662['fold3']testENSG000001699250.3440620.280283134068026.0
EVI5Lchr1976663938190681+protein_coding0.0000001.959605757078302337864976347431638401985830.000000['fold3']testENSG000001424590.8101520.7048287830218.0
\n", "

18457 rows × 20 columns

\n", "
" ], "text/plain": [ " chrom start end strand gene_type frac_nan \\\n", "STRADA chr17 63381538 63905826 - protein_coding 0.000000 \n", "ETV4 chr17 43219172 43743460 - protein_coding 0.030873 \n", "USP25 chr21 15566185 16090473 + protein_coding 0.000000 \n", "ZSWIM5 chr1 44945761 45470049 - protein_coding 0.000620 \n", "C21orf58 chr21 45963427 46487715 - protein_coding 0.000791 \n", "... ... ... ... ... ... ... \n", "NPDC1 chr9 136685731 137210019 - protein_coding 0.000000 \n", "ZNF425 chr7 148765876 149290164 - protein_coding 0.001048 \n", "COL5A1 chr9 134477934 135002222 + protein_coding 0.002159 \n", "BRD3 chr9 133708087 134232375 - protein_coding 0.000000 \n", "EVI5L chr19 7666393 8190681 + protein_coding 0.000000 \n", "\n", " mean_counts n_tracks gene_start gene_end gene_length \\\n", "STRADA 2.208074 7616 63682336 63741986 59650 \n", "ETV4 0.925863 5004 43527844 43579620 51776 \n", "USP25 3.650355 8604 15730025 15880069 150044 \n", "ZSWIM5 2.190115 6123 45016399 45306209 289810 \n", "C21orf58 1.650467 7354 46300181 46323875 23694 \n", "... ... ... ... ... ... \n", "NPDC1 2.625285 7852 137039463 137046179 6716 \n", "ZNF425 1.292957 6511 149102784 149126324 23540 \n", "COL5A1 1.492664 6209 134641774 134844843 203069 \n", "BRD3 3.190450 8675 134030305 134068535 38230 \n", "EVI5L 1.959605 7570 7830233 7864976 34743 \n", "\n", " gene_mask_start gene_mask_end frac_N fold dataset \\\n", "STRADA 163840 223490 0.000000 ['fold1'] train \n", "ETV4 163840 215616 0.000000 ['fold1'] train \n", "USP25 163840 313884 0.000000 ['fold6'] train \n", "ZSWIM5 163840 453650 0.000000 ['fold5'] train \n", "C21orf58 163840 187534 0.000000 ['fold6'] train \n", "... ... ... ... ... ... \n", "NPDC1 163840 170556 0.000000 ['fold3'] test \n", "ZNF425 163840 187380 0.000000 ['fold7'] train \n", "COL5A1 163840 366909 0.000000 ['fold3'] test \n", "BRD3 163840 202070 0.004662 ['fold3'] test \n", "EVI5L 163840 198583 0.000000 ['fold3'] test \n", "\n", " gene_id pearson size_factor_pearson \\\n", "STRADA ENSG00000266173 0.469923 0.476627 \n", "ETV4 ENSG00000175832 0.738092 0.613281 \n", "USP25 ENSG00000155313 0.905222 0.784446 \n", "ZSWIM5 ENSG00000162415 0.961772 0.795131 \n", "C21orf58 ENSG00000160298 0.645268 0.412368 \n", "... ... ... ... \n", "NPDC1 ENSG00000107281 0.316322 0.178204 \n", "ZNF425 ENSG00000204947 0.821292 0.737081 \n", "COL5A1 ENSG00000130635 0.766624 0.456999 \n", "BRD3 ENSG00000169925 0.344062 0.280283 \n", "EVI5L ENSG00000142459 0.810152 0.704828 \n", "\n", " ensembl_canonical_tss \n", "STRADA 63741799.0 \n", "ETV4 43546340.0 \n", "USP25 15729982.0 \n", "ZSWIM5 45206605.0 \n", "C21orf58 46323870.0 \n", "... ... \n", "NPDC1 137046177.0 \n", "ZNF425 149126324.0 \n", "COL5A1 134641803.0 \n", "BRD3 134068026.0 \n", "EVI5L 7830218.0 \n", "\n", "[18457 rows x 20 columns]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.gene_metadata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also access the genes and cells:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.909461Z", "iopub.status.busy": "2025-11-21T06:32:37.909331Z", "iopub.status.idle": "2025-11-21T06:32:37.912200Z", "shell.execute_reply": "2025-11-21T06:32:37.911806Z" } }, "outputs": [ { "data": { "text/plain": [ "Index(['STRADA', 'ETV4', 'USP25', 'ZSWIM5', 'C21orf58', 'MIR497HG', 'CFAP74',\n", " 'GSE1', 'LPP', 'CLK1',\n", " ...\n", " 'STRIP2', 'TNFRSF1A', 'RBM14-RBM4', 'C1orf21', 'LINC00639', 'NPDC1',\n", " 'ZNF425', 'COL5A1', 'BRD3', 'EVI5L'],\n", " dtype='object', length=18457)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.genes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cell indexes can be also accessed:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.913527Z", "iopub.status.busy": "2025-11-21T06:32:37.913396Z", "iopub.status.idle": "2025-11-21T06:32:37.916112Z", "shell.execute_reply": "2025-11-21T06:32:37.915683Z" } }, "outputs": [ { "data": { "text/plain": [ "Index(['agg_0', 'agg_1', 'agg_2', 'agg_3', 'agg_4', 'agg_5', 'agg_6', 'agg_7',\n", " 'agg_8', 'agg_9',\n", " ...\n", " 'agg_9528', 'agg_9529', 'agg_9530', 'agg_9531', 'agg_9532', 'agg_9533',\n", " 'agg_9535', 'agg_9536', 'agg_9537', 'agg_9538'],\n", " dtype='object', length=8856)" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.cells" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Predicted gene expression for specific gene can be accessed:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.917242Z", "iopub.status.busy": "2025-11-21T06:32:37.917117Z", "iopub.status.idle": "2025-11-21T06:32:37.931953Z", "shell.execute_reply": "2025-11-21T06:32:37.931543Z" } }, "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", "
SPI1
agg_00.256442
agg_10.221014
agg_20.179371
agg_30.219646
agg_40.217516
......
agg_95330.493780
agg_95350.292091
agg_95360.370765
agg_95370.168036
agg_95380.239733
\n", "

8856 rows × 1 columns

\n", "
" ], "text/plain": [ " SPI1\n", "agg_0 0.256442\n", "agg_1 0.221014\n", "agg_2 0.179371\n", "agg_3 0.219646\n", "agg_4 0.217516\n", "... ...\n", "agg_9533 0.493780\n", "agg_9535 0.292091\n", "agg_9536 0.370765\n", "agg_9537 0.168036\n", "agg_9538 0.239733\n", "\n", "[8856 rows x 1 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.predicted_expression_matrix(genes=[\"SPI1\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or for all the genes:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.933257Z", "iopub.status.busy": "2025-11-21T06:32:37.933128Z", "iopub.status.idle": "2025-11-21T06:32:37.946479Z", "shell.execute_reply": "2025-11-21T06:32:37.946096Z" } }, "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", " \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", " \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", " \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", "
STRADAETV4USP25ZSWIM5C21orf58MIR497HGCFAP74GSE1LPPCLK1...STRIP2TNFRSF1ARBM14-RBM4C1orf21LINC00639NPDC1ZNF425COL5A1BRD3EVI5L
agg_02.9734381.8455654.5925315.0998021.7748790.3568122.5908364.6297744.8971713.326940...2.8360600.2970151.8838494.2935931.4635653.1835342.3402022.3749422.9119163.230072
agg_12.9542131.8967264.6885575.5104401.6669290.3527252.2926254.4595354.9152863.192858...3.1257040.2425431.9081774.4394241.2367393.4948242.4256722.0545682.7134083.491463
agg_22.9388512.1972474.8614105.6175201.7733810.3808672.3949174.4150384.8363993.390717...3.0820980.2632852.0064564.3834551.2085904.0138192.4083812.2973432.8922223.695785
agg_33.0459722.1385734.8637915.2736041.7600970.4635552.3917023.9409754.8577633.410926...2.8828900.2903271.9229634.5501891.4305203.6931182.2971032.1218872.6261173.223912
agg_43.0255182.0190964.6029485.2570011.7553380.3821902.4328104.3924804.9594883.250500...3.0822960.2585402.0382774.4648071.2490433.6658002.4008202.2558622.9256193.471005
..................................................................
agg_95332.3335620.6333224.6758252.7930230.7520300.6920830.5035314.3279486.9031933.695593...0.5497952.2701811.5632184.3954220.5500881.3302521.0444713.7593692.4913461.872717
agg_95350.8350370.3587731.9648960.3074490.3372400.8341960.0938851.8537943.7007904.467302...0.1768851.3708981.0227083.4002670.0521621.9088700.2534171.4481111.6220331.064292
agg_95363.0080391.2093244.7983923.9318701.4013281.6385550.9697204.7792016.6319314.127797...1.1742981.8705302.5068745.1517760.9676441.8099472.2053564.2440052.9744672.659873
agg_95371.2419360.4550592.9199950.5716720.4864481.1755860.1453972.4121484.7591184.913945...0.3710351.3610731.6680854.0057380.0786111.5717500.5081872.0671502.3237641.429850
agg_95381.7155070.7009553.0447320.8586960.9034061.7631680.2153042.6044784.5497084.839124...0.5943101.8012982.0759963.9338600.1655901.9702680.9935212.2323472.4733881.902884
\n", "

8856 rows × 18457 columns

\n", "
" ], "text/plain": [ " STRADA ETV4 USP25 ZSWIM5 C21orf58 MIR497HG \\\n", "agg_0 2.973438 1.845565 4.592531 5.099802 1.774879 0.356812 \n", "agg_1 2.954213 1.896726 4.688557 5.510440 1.666929 0.352725 \n", "agg_2 2.938851 2.197247 4.861410 5.617520 1.773381 0.380867 \n", "agg_3 3.045972 2.138573 4.863791 5.273604 1.760097 0.463555 \n", "agg_4 3.025518 2.019096 4.602948 5.257001 1.755338 0.382190 \n", "... ... ... ... ... ... ... \n", "agg_9533 2.333562 0.633322 4.675825 2.793023 0.752030 0.692083 \n", "agg_9535 0.835037 0.358773 1.964896 0.307449 0.337240 0.834196 \n", "agg_9536 3.008039 1.209324 4.798392 3.931870 1.401328 1.638555 \n", "agg_9537 1.241936 0.455059 2.919995 0.571672 0.486448 1.175586 \n", "agg_9538 1.715507 0.700955 3.044732 0.858696 0.903406 1.763168 \n", "\n", " CFAP74 GSE1 LPP CLK1 ... STRIP2 TNFRSF1A \\\n", "agg_0 2.590836 4.629774 4.897171 3.326940 ... 2.836060 0.297015 \n", "agg_1 2.292625 4.459535 4.915286 3.192858 ... 3.125704 0.242543 \n", "agg_2 2.394917 4.415038 4.836399 3.390717 ... 3.082098 0.263285 \n", "agg_3 2.391702 3.940975 4.857763 3.410926 ... 2.882890 0.290327 \n", "agg_4 2.432810 4.392480 4.959488 3.250500 ... 3.082296 0.258540 \n", "... ... ... ... ... ... ... ... \n", "agg_9533 0.503531 4.327948 6.903193 3.695593 ... 0.549795 2.270181 \n", "agg_9535 0.093885 1.853794 3.700790 4.467302 ... 0.176885 1.370898 \n", "agg_9536 0.969720 4.779201 6.631931 4.127797 ... 1.174298 1.870530 \n", "agg_9537 0.145397 2.412148 4.759118 4.913945 ... 0.371035 1.361073 \n", "agg_9538 0.215304 2.604478 4.549708 4.839124 ... 0.594310 1.801298 \n", "\n", " RBM14-RBM4 C1orf21 LINC00639 NPDC1 ZNF425 COL5A1 \\\n", "agg_0 1.883849 4.293593 1.463565 3.183534 2.340202 2.374942 \n", "agg_1 1.908177 4.439424 1.236739 3.494824 2.425672 2.054568 \n", "agg_2 2.006456 4.383455 1.208590 4.013819 2.408381 2.297343 \n", "agg_3 1.922963 4.550189 1.430520 3.693118 2.297103 2.121887 \n", "agg_4 2.038277 4.464807 1.249043 3.665800 2.400820 2.255862 \n", "... ... ... ... ... ... ... \n", "agg_9533 1.563218 4.395422 0.550088 1.330252 1.044471 3.759369 \n", "agg_9535 1.022708 3.400267 0.052162 1.908870 0.253417 1.448111 \n", "agg_9536 2.506874 5.151776 0.967644 1.809947 2.205356 4.244005 \n", "agg_9537 1.668085 4.005738 0.078611 1.571750 0.508187 2.067150 \n", "agg_9538 2.075996 3.933860 0.165590 1.970268 0.993521 2.232347 \n", "\n", " BRD3 EVI5L \n", "agg_0 2.911916 3.230072 \n", "agg_1 2.713408 3.491463 \n", "agg_2 2.892222 3.695785 \n", "agg_3 2.626117 3.223912 \n", "agg_4 2.925619 3.471005 \n", "... ... ... \n", "agg_9533 2.491346 1.872717 \n", "agg_9535 1.622033 1.064292 \n", "agg_9536 2.974467 2.659873 \n", "agg_9537 2.323764 1.429850 \n", "agg_9538 2.473388 1.902884 \n", "\n", "[8856 rows x 18457 columns]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.predicted_expression_matrix()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:32:37.947703Z", "iopub.status.busy": "2025-11-21T06:32:37.947568Z", "iopub.status.idle": "2025-11-21T06:33:00.525878Z", "shell.execute_reply": "2025-11-21T06:33:00.525331Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m A graphql request initiated by the public wandb API timed out (timeout=19 sec). Create a new API with an integer timeout larger than 19, e.g., `api = wandb.Api(timeout=29)` to increase the graphql timeout.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: Downloading large artifact 'rep0:latest', 720.03MB. 1 files...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\u001b[34m\u001b[1mwandb\u001b[0m: 1 of 1 files downloaded. \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Done. 00:00:00.7 (1008.5MB/s)\n" ] }, { "data": { "text/plain": [ "DecimaResult(anndata=AnnData object with n_obs × n_vars = 8856 × 18457\n", " obs: 'cell_type', 'tissue', 'organ', 'disease', 'study', 'dataset', 'region', 'subregion', 'celltype_coarse', 'n_cells', 'total_counts', 'n_genes', 'size_factor', 'train_pearson', 'val_pearson', 'test_pearson'\n", " var: 'chrom', 'start', 'end', 'strand', 'gene_type', 'frac_nan', 'mean_counts', 'n_tracks', 'gene_start', 'gene_end', 'gene_length', 'gene_mask_start', 'gene_mask_end', 'frac_N', 'fold', 'dataset', 'gene_id', 'pearson', 'size_factor_pearson', 'ensembl_canonical_tss'\n", " layers: 'preds', 'v1_rep0', 'v1_rep1', 'v1_rep2', 'v1_rep3')" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.load_model(device=device)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Prepare an input for th SPI1 genes.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Takes around ~10 seconds on GPU and ~5 minutes to call attributions on CPU. " ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:00.527547Z", "iopub.status.busy": "2025-11-21T06:33:00.527394Z", "iopub.status.idle": "2025-11-21T06:33:01.199621Z", "shell.execute_reply": "2025-11-21T06:33:01.198754Z" } }, "outputs": [], "source": [ "attrs = result.attributions(\n", " gene=\"SPI1\",\n", " tasks=result.query_cells(f\"cell_type in {spi1_cell_types}\"),\n", " off_tasks=result.query_cells(f'organ == \"blood\" and cell_type not in {spi1_cell_types}'),\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Attributions can be visualized and processed with attributions object:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:01.200991Z", "iopub.status.busy": "2025-11-21T06:33:01.200846Z", "iopub.status.idle": "2025-11-21T06:33:04.240855Z", "shell.execute_reply": "2025-11-21T06:33:04.240273Z" } }, "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", " \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", "
peakstartendattributionp-valuefrom_tss
0pos.SPI1@3716387716390212.8172522.186883e-1137
1pos.SPI1@-1211637191637445.5956591.899081e-05-121
2pos.SPI1@-571637831638039.3074843.054640e-05-57
3pos.SPI1@621639021639091.2811833.068997e-0562
4pos.SPI1@-791637611637650.8332696.109865e-05-79
.....................
72neg.SPI1@443164283164293-0.7173494.916059e-04443
73neg.SPI1@23600187440187445-0.2674384.916059e-0423600
74neg.SPI1@32783196623196630-0.4618134.918151e-0432783
75neg.SPI1@1735165575165592-1.4374984.918151e-041735
76neg.SPI1@31668195508195512-0.2134034.918151e-0431668
\n", "

135 rows × 6 columns

\n", "
" ], "text/plain": [ " peak start end attribution p-value from_tss\n", "0 pos.SPI1@37 163877 163902 12.817252 2.186883e-11 37\n", "1 pos.SPI1@-121 163719 163744 5.595659 1.899081e-05 -121\n", "2 pos.SPI1@-57 163783 163803 9.307484 3.054640e-05 -57\n", "3 pos.SPI1@62 163902 163909 1.281183 3.068997e-05 62\n", "4 pos.SPI1@-79 163761 163765 0.833269 6.109865e-05 -79\n", ".. ... ... ... ... ... ...\n", "72 neg.SPI1@443 164283 164293 -0.717349 4.916059e-04 443\n", "73 neg.SPI1@23600 187440 187445 -0.267438 4.916059e-04 23600\n", "74 neg.SPI1@32783 196623 196630 -0.461813 4.918151e-04 32783\n", "75 neg.SPI1@1735 165575 165592 -1.437498 4.918151e-04 1735\n", "76 neg.SPI1@31668 195508 195512 -0.213403 4.918151e-04 31668\n", "\n", "[135 rows x 6 columns]" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "attrs.peaks" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:04.242160Z", "iopub.status.busy": "2025-11-21T06:33:04.242016Z", "iopub.status.idle": "2025-11-21T06:33:04.251058Z", "shell.execute_reply": "2025-11-21T06:33:04.250687Z" } }, "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", " \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", "
chromstartendnamescorestrandattribution
38chr114721635047216357pos.SPI1@1622193.33494.0.543797
49chr114725759747257605pos.SPI1@1209713.31931.0.680714
65chr114725763347257637neg.SPI1@1209393.31455.-0.221530
63chr114725773447257739neg.SPI1@1208373.32086.-0.273840
43chr114734573147345736neg.SPI1@328403.35317.-0.298483
........................
69chr114739548347395492neg.SPI1@-169163.31094.-0.567760
39chr114740021147400221neg.SPI1@-216453.35527.-0.900000
37chr114740022547400235neg.SPI1@-216593.35844.-0.729126
68chr114740037647400382neg.SPI1@-218063.31094.-0.329538
58chr114740070347400709neg.SPI1@-221333.33067.-0.325769
\n", "

135 rows × 7 columns

\n", "
" ], "text/plain": [ " chrom start end name score strand attribution\n", "38 chr11 47216350 47216357 pos.SPI1@162219 3.33494 . 0.543797\n", "49 chr11 47257597 47257605 pos.SPI1@120971 3.31931 . 0.680714\n", "65 chr11 47257633 47257637 neg.SPI1@120939 3.31455 . -0.221530\n", "63 chr11 47257734 47257739 neg.SPI1@120837 3.32086 . -0.273840\n", "43 chr11 47345731 47345736 neg.SPI1@32840 3.35317 . -0.298483\n", ".. ... ... ... ... ... ... ...\n", "69 chr11 47395483 47395492 neg.SPI1@-16916 3.31094 . -0.567760\n", "39 chr11 47400211 47400221 neg.SPI1@-21645 3.35527 . -0.900000\n", "37 chr11 47400225 47400235 neg.SPI1@-21659 3.35844 . -0.729126\n", "68 chr11 47400376 47400382 neg.SPI1@-21806 3.31094 . -0.329538\n", "58 chr11 47400703 47400709 neg.SPI1@-22133 3.33067 . -0.325769\n", "\n", "[135 rows x 7 columns]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "attrs.peaks_to_bed()" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:04.252450Z", "iopub.status.busy": "2025-11-21T06:33:04.252317Z", "iopub.status.idle": "2025-11-21T06:33:05.951332Z", "shell.execute_reply": "2025-11-21T06:33:05.950859Z" } }, "outputs": [ { "data": { "image/png": "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M8YYk+/zkp+c7/nIyEiTlJRU6LqRkZEmIiLC2O12c/78eae4csrIyHA8X4888ojJyspy/L4ZY8zChQuNJHPXXXfl2dcff/xhoqOjHb9PBfnvf/9rdu7caYwxZv78+aZbt25m1apVZt68eSYxMdGcP3++wPG3du3aJjIy0qSmpub7/7CIiAjz1VdfOf5fUZj4srKynN57ERERjn4nT57s+LvapUuXXH+jLmW3202zZs2MJDNx4kQTExPj+FtfFDExMSYkJCTX8zBy5EiTkZHhiNfVv2+//bbTuPb0008bSebGG280xhhz+PBhM3PmTPPFF1+4/J3Led1vt9vNpk2bzIkTJ3KVS09PN1OnTjX79+93HOvfv3+umHPKHj8ufc5KasOGDebdd98t1P8n81OUWC59L+R8zA8//LCpU6eOefPNNx3vwYJiy8rKMn//+98dbWzYsCFXmWeeecbMnDkz33ZSU1PNsGHDzJtvvlmix1ccW7ZsMYmJiY77Oa/Nsh04cMDs3bvXXLhwwRw8eDDX76jNZjMzZ840//nPfxz/b/jzzz9Nq1atjCTzxBNPmLi4OKfne/r06eaLL74wiYmJJioqyvzwww9m/fr1jr+Nq1evdip/7tw5pz4zMjIc42bO36Xsz30OHz7s8v8Y9957r8vr4EvZ7XYTGhpq6tatm+t9kH3Nn1/d/P5Pd+DAAae/FXa73ek1yJaZmWkiIyNNTEyMYxw9cOBAocbI/N43drvdPPjgg2bo0KFOf493795dYN2CZGZmFunvYGWV8+929t/S4iroc8ysrKxCfYZQXOfPnzfbt293+b7Ieez8+fPm119/LfX+MzIyyuyzXKCyu/RvYEmvuYDisIwp/1+Znzt3rv7617/Kz88v16w+T9u+fbtmzpwpSfr8888VEBDgsty8efO0cuVKtWjRQrNnzy6w3ZSUFN1+++2SpGnTpunaa691WW7btm2aNWuWpIuzm/z9/SVJH374oVasWKFmzZrlO6voscce0/HjxzVy5Ejdc889eZZbtGhRnntQrl27Vunp6WrYsGG5Xwa0vHv66af1+uuvl6iNWrVqKTEx0XHf399fLVu2zLVKQWFdf/318vf31zfffOM41rdv31zbBiBvXl5estvtsizLaZbAVVddpeDgYNlsNtlsNv36668ejBK4qF+/frIsS5s2bXKsZAK4Sy1J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P5fn69at6+aILho6dKhml6B+tWrVNGPGjFKLxx3q1a/v6RAkSQ0bNtTECRMUHh6up557zulcs2bN9J/335fv778rrFkzD0VYflXG5DkqNx8fH8cKE+XN2jVr9OSAAerRvXuxVuIpjjZt2rilH5RMr169nJbcBwAAAFB6vAougoIMHDhQ9evXV1pammbMmOGYaZ+enq4lS5bou+++k3Rxv7dLl8WaNGmShg8frjfffDNXu2FhYerTp48k6e2339a2bdtkjJExRtu2bdM777wj6WIC39US7OPGjZOPj4+OHTum2bNnKy4uTpIUFxen2bNn69ixY6pWrVq53FseAABUTVdccUWZ9zH2f3uO59S8eXPddttt5W4Z2pz7SVcV1+VY0em5adPk878vgT7yyCNuj+Xuu+/WjBkzFORiGfgrr7ySGZoAytw111yj9evW6dVXX/V0KAAAAABQZVTtTY5KSbVq1fTcc89p2rRpOnHihB577DEFBAQoLS1Ndrtd0sXZQ9dff32R237ooYd05swZHTlyRLNmzZKvr68kKSMjQ5LUunVrPfjggy7rNm7cWI899pjmzJmjTZs26b///a8CAgKUnJws6eK37B977LEKs5wnAABAabh0j1mUL3Xr1tXHH30ks3u3mrVrp5deekmpV16pOk2bejo0AAAAAAAAVAEeTaBnZWXpv//9r3bs2KHTp0/rwoULqlmzpq644gpde+216tWrl9Oy4+VZ48aN9fbbb2vp0qXasWOHYmJiFBgYqGbNmmnIkCHq3r17sdr19/fX3//+d3377bfasGGDTp8+LeniLKl+/fppyJAhuWa159S3b181atRIy5Yt0/79+5WYmOhYSn706NHMmgEAAJXK/I8/1uK//U2KicmzTEWb1d2ta1dl/PKLp8Nwq7CwMCkhQZJUo0YN1bhki6Ty5rFHH9X3b72lO8eP93QoAAAAAAAAKCGPJNDtdrv++c9/6s0339TZs2fzLFe/fn1NmTJFTzzxRIX4oDM4OFj33nuv7r333kLXmTdvXoFlfHx8NHLkSI0cObJYcTVr1qzM9ioFAAAoT0aNGqVRTZvq8b/8xdOhlJratWsr7ytmlAc33nCD+jRooOrF/NIsAAAAAAAAyg+3Z6Xj4+PVq1cvTZ06VWfPnnXs6e3q58yZM3rmmWfUu3dvxcfHuztUAAAAwKHu/2ZB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RcaePHlSERERkqQGDRqod+/eL2WMvzapqamlig8LCzOu27dvn6/tzp07xk4NJWH50keTJk3YRh8AAADAS0UBHQAAAABQoWbPni2TySRJ+stf/qKYmJgCMampqfL19VVubm65+lq5cqW2bt2qrKysImOio6N19uxZSU+3Ka9bt26+9mbNmhnXcXFxVvvr2rWrcf3FF1/o7t27BWJ++eUXeXl5vbDz3UvCZDJp0aJFxu+///3vFR4eXmT87du3FR0dne+zRo0aafr06ZKkGzduaODAgUpMTLTa75kzZzRlypRyjLxi2NraatasWZKe7irg5+enpKSkAnFJSUny8/Mzdh6YNWuWqlSp8jKH+qvh7e0tb29vHTx40OrfZVZWlj788EPjpYPKlStr9OjR+WL+8Y9/yM3NTatWrVJaWprVfiMiIvIdrTBu3LhyzAIAAAAASq/yqx4AAAAAAOC/W+/evTVt2jStXLlSjx49kru7u373u9+pX79+srOzU3x8vNauXau0tDT5+PgoNDS0zH3FxcVpw4YNqlmzpgYOHKjOnTvL1dVVVapUUWpqqqKiohQWFmashp03b16BHO7u7qpSpYqysrL0+eefS5I6duxorMauVq2asb15z5491b17d504cUI///yz3Nzc9Ic//EFt2rRRbm6ujh8/ru+//16PHz/WxIkTtX79+jLPrbSGDx+u2bNna+nSpUpPT9ewYcPUr18/DRkyRK+99pry8vL0yy+/KDo6WgcOHNAf//jHAqutAwMDdebMGe3fv19xcXFyc3PTsGHD1LdvX7m4uCgvL0937tzRuXPnFBERocuXL8vGxkarV69+afMsqZkzZ2rXrl2KiorStWvX1L59e02aNEndunWTyWTSyZMntW7dOj169EiS5OHhYRTd/xfl5eVpx44d2rFjh5ydneXh4aEuXbqoQYMGsre31/379/XPf/5ToaGhSk5ONu4LCAhQ69atC+RLSEjQ1KlTNX36dPXp00c9evRQ8+bN5eTkpKysLCUmJurgwYOKiooy7unQoYPmzp37UuYLAAAAAM9QQAcAAAAAVLjly5fr8ePH+u6775STk6P169cXKCbPmDFDw4cPL1cB/dlK9wcPHmjLli3asmVLoXG2trYKCAjQ1KlTC7TVqVNHH374oRYtWqT09HQFBATka2/SpEm+1cvBwcHq37+/rl27pjt37igwMLBAzmnTpmnmzJkvtYAuPV0V7+zsrI8//lhPnjxRVFRUvgKlJcuz35+pXLmydu3apblz52rFihXKzs7Wtm3btG3btiL7bNSo0Qsb/4tkY2Oj3bt3a9y4cdq+fbvS09P11VdfFRrr7e2tTZs2ycbG5iWP8tejXbt2io2NVW5urlJTUxUSEqKQkJAi42vUqKHAwEC99957BdoaN26s2rVrKy0tTdnZ2YqIiDBWrBdl5MiRWrNmjezt7cs9FwAAAAAoDQroAAAAAIAKV6lSJa1du1YjR47UN998o+PHj+v+/fuqX7++unbtqilTpmjgwIGKjIwsVz/ffPON/Pz8FBERodjYWF2+fFm3b99WTk6OatSooZYtW8rDw0P+/v5q2bJlkXkWLlyojh07at26dYqPj9edO3eK3Ba+adOmOn36tL788kuFhoYaZ6E3aNBAvXr1kr+/vzw8PArdMvxl+OCDDzR27FitWbNG+/fvV0JCgu7fvy87Ozs1atRIXbp00ZAhQ+Tj41Po/ba2tvriiy80bdo0BQUFKSIiQgkJCUpLS1OlSpVUp04dtWrVSt27d9fAgQPl7u7+kmdYcg4ODgoNDdXhw4e1YcMGHT16VDdv3pQkOTs7q0+fPpowYYLefPPNVzzSV2/t2rVasmSJDhw4oKNHj+rs2bO6evWq7t27p6ysLDk6OsrZ2Vnt27fXW2+9pVGjRql27dqF5ho8eLBSU1MVHR2tqKgo/fTTT7p8+bJSUlKUkZEhOzs7OTk5qXXr1urRo4d8fX3VsWPHlzxjAAAAAHjKZH52sBcAAAAAAAAAAAAAAP/DCu7PBgAAAAAAAAAAAADA/yAK6AAAAAAAAAAAAAAAiAI6AAAAAAAAAAAAAACSKKADAAAAAAAAAAAAACCJAjoAAAAAAAAAAAAAAJIooAMAAAAAAAAAAAAAIIkCOgAAAAAAAAAAAAAAkiigAwAAAAAAAAAAAAAgiQI6AAAAAAAAAAAAAACSKKADAAAAAAAAAAAAACCJAjoAAAAAAAAAAAAAAJIooAMAAAAAAAAAAAAAIIkCOgAAAAAAAAAAAAAAkiigAwAAAAAAAAAAAAAgiQI6AAAAAAAAAAAAAACSKKADAAAAAAAAAAAAACCJAjoAAAAAAAAAAAAAAJIooAMAAAAAAAAAAAAAIIkCOgAAAAAAAAAAAAAAkiigAwAAAAAAAAAAAAAgiQI6AAAAAAAAAAAAAACSKKADAAAAAAAAAAAAACCJAjoAAAAAAAAAAAAAAJIooAMAAAAAAAAAAAAAIIkCOgAAAAAAAAAAAAAAkqT/A4dTyUhIm9pAAAAAAElFTkSuQmCC" }, "metadata": { "image/png": { "height": 200, "width": 1000 } }, "output_type": "display_data" } ], "source": [ "attrs.plot_peaks()" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:05.952850Z", "iopub.status.busy": "2025-11-21T06:33:05.952701Z", "iopub.status.idle": "2025-11-21T06:33:06.731536Z", "shell.execute_reply": "2025-11-21T06:33:06.731101Z" } }, "outputs": [ { "data": { "image/png": "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P/44HbdWCvhytaamJuzZswczZsywrVMqlZgxYwa2bdvWiXsWXPLy8lBSUiI7jlFRURg/fjwdRwfV1dUAgNjYWADAnj170NzcLDt2AwYMQGpqKh07K7PZjFWrVqG+vh6ZmZl0zLywYMECzJkzR3aMAPq8eXL8+HGkpKQgPT0d8+bNQ35+PgA6bu58++23GDNmDK677jokJiZi5MiReOedd2zb6fvBO01NTfj4449xxx13QKFQ0GfOjYkTJ2L9+vU4duwYAGD//v3YvHkzZs+eDYA+c66YTCaYzWbodDrZer1ej82bN9NxayV1Z++AJ+fOnYPZbEZSUpJsfVJSEnJycjppr4JPSUkJADg9jmIbASwWCxYuXIhJkyZhyJAhAPix02g0iI6Olj2Wjh1w8OBBZGZmorGxEeHh4fj6668xaNAgZGVl0TFzY9WqVdi7d6+szlqgz5tr48ePxwcffID+/fujuLgYTz31FKZMmYLs7Gw6bm6cPHkSK1aswKJFi/CXv/wFu3btwp///GdoNBrMnz+fvh+8tHr1alRVVeG2224DQL+r7ixevBg1NTUYMGAAVCoVzGYznn32WcybNw8AnZO4EhERgczMTDz99NMYOHAgkpKS8N///hfbtm1Dnz596Li1UsAHOYR0pAULFiA7OxubN2/u7F0JCv3790dWVhaqq6vxxRdfYP78+di0aVNn71ZAKygowIMPPohffvmlxdU64p64CgwAw4YNw/jx45GWlob//e9/0Ov1nbhngc1isWDMmDF47rnnAAAjR45EdnY23nzzTcyfP7+T9y54vPfee5g9ezZSUlI6e1cC3v/+9z988skn+PTTTzF48GBkZWVh4cKFSElJoc+cBx999BHuuOMOdO/eHSqVCqNGjcJNN92EPXv2dPauBZ2AL1eLj4+HSqVq0a2ktLQUycnJnbRXwUccKzqOrt1///34/vvvsXHjRvTo0cO2Pjk5GU1NTaiqqpI9no4doNFo0KdPH4wePRrLly/H8OHD8dprr9Exc2PPnj04e/YsRo0aBbVaDbVajU2bNuGf//wn1Go1kpKS6Nh5KTo6Gv369UNubi595tzo1q0bBg0aJFs3cOBAW6kffT94dvr0aaxbtw5//OMfbevoM+faI488gsWLF+PGG2/E0KFDccstt+Chhx7C8uXLAdBnzp2MjAxs2rQJdXV1KCgowM6dO9Hc3Iz09HQ6bq0U8EGORqPB6NGjsX79ets6i8WC9evXIzMzsxP3LLj07t0bycnJsuNYU1ODHTt2nPfHkTGG+++/H19//TU2bNiA3r17y7aPHj0aISEhsmN39OhR5Ofnn/fHzpHFYoHRaKRj5sb06dNx8OBBZGVl2X7GjBmDefPm2Zbp2Hmnrq4OJ06cQLdu3egz58akSZNatMU/duwY0tLSAND3gzdWrlyJxMREzJkzx7aOPnOuNTQ0QKmUn2KqVCpYLBYA9JnzRlhYGLp164bKykqsXbsWV155JR231urszgfeWLVqFdNqteyDDz5ghw8fZn/6059YdHQ0Kykp6exdCyi1tbVs3759bN++fQwAe/nll9m+ffvY6dOnGWO87WB0dDT75ptv2IEDB9iVV15JbQcZY/feey+Liopiv/76q6xVaENDg+0x99xzD0tNTWUbNmxgu3fvZpmZmSwzM7MT97rzLV68mG3atInl5eWxAwcOsMWLFzOFQsF+/vlnxhgds9aw767GGB07Vx5++GH266+/sry8PLZlyxY2Y8YMFh8fz86ePcsYo+Pmys6dO5larWbPPvssO378OPvkk09YaGgo+/jjj22Poe8H18xmM0tNTWWPPfZYi230mXNu/vz5rHv37rYW0l999RWLj49njz76qO0x9Jlzbs2aNeynn35iJ0+eZD///DMbPnw4Gz9+PGtqamKM0XFrjaAIchhj7PXXX2epqalMo9GwcePGse3bt3f2LgWcjRs3MgAtfubPn88Y4y0bn3jiCZaUlMS0Wi2bPn06O3r0aOfudABwdswAsJUrV9oeYzAY2H333cdiYmJYaGgou+qqq1hxcXHn7XQAuOOOO1haWhrTaDQsISGBTZ8+3RbgMEbHrDUcgxw6ds7dcMMNrFu3bkyj0bDu3buzG264QTbXCx0317777js2ZMgQptVq2YABA9jbb78t207fD66tXbuWAXB6POgz51xNTQ178MEHWWpqKtPpdCw9PZ09/vjjzGg02h5DnznnPvvsM5aens40Gg1LTk5mCxYsYFVVVbbtdNy8p2DMbvpZQgghhBBCCAlyAT8mhxBCCCGEEEJag4IcQgghhBBCSJdCQQ4hhBBCCCGkS6EghxBCCCGEENKlUJBDCCGEEEII6VIoyCGEEEIIIYR0KRTkEEIIIYQQQroUCnIIIYQQQgghXQoFOYQQQgghhJAuhYIcQgghhBBCSJdCQQ4hhBBCCCGkS/l/GF6jTMHjDREAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "attrs.plot_seqlogo(relative_loc=-45)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This comment takes around ~1 minutes and detects motifs in the attributions using FIMO. The motifs are ranked by their attribution scores:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:06.732828Z", "iopub.status.busy": "2025-11-21T06:33:06.732690Z", "iopub.status.idle": "2025-11-21T06:33:10.008101Z", "shell.execute_reply": "2025-11-21T06:33:10.007545Z" } }, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
motifpeakstartendstrandscorep-valuematched_seqsite_attr_scoremotif_attr_scorefrom_tss
3874ZNF746.H13CORE.0.PSG.Aneg.SPI1@1917165744165770-26.3554527.435330e-10AGGGAGGAGGGAGGAAGGTGGGAGGA-0.010775-0.0162531904
3453ZN263.H13CORE.1.P.Bneg.SPI1@1898165732165753+24.0087221.311946e-09GGGGAGGAGGACAGGGAGGAG-0.006567-0.0166371892
781ZN479.H13CORE.0.P.Cneg.SPI1@-174163668163686-22.9373692.837623e-09GCCCCCAAAGTCATCCCT-0.007155-0.013835-172
1036ZNF746.H13CORE.0.PSG.Aneg.SPI1@-191163639163665+24.4629953.833248e-09TCTCCCTCCCATCCTCCCTCCCCAGC-0.002449-0.001297-201
3545ZNF746.H13CORE.0.PSG.Aneg.SPI1@1898165732165758-23.5233917.853286e-09GGGGAGGAGGACAGGGAGGAGGGAGG-0.005327-0.0107471892
....................................
1088CREB3.H13CORE.0.SM.Bneg.SPI1@-21163819163833+1.7546824.999340e-04GCGGTGATGTCACC-0.206348-0.585193-21
2067RXRB.H13CORE.2.PS.Aneg.SPI1@1182165019165030-12.213856NaNCCATGACCTCT-0.008323-0.0242331179
2913KLF7.H13CORE.0.P.Bneg.SPI1@1813165662165672+15.217368NaNGGGGGCGGGG0.0089730.0256251822
2986KLF7.H13CORE.0.P.Bneg.SPI1@1832165662165672+15.217368NaNGGGGGCGGGG0.0089730.0256251822
7451KLF7.H13CORE.0.P.Bpos.SPI1@1820165662165672+15.217368NaNGGGGGCGGGG0.0089730.0256251822
\n", "

8556 rows × 11 columns

\n", "
" ], "text/plain": [ " motif peak start end strand score \\\n", "3874 ZNF746.H13CORE.0.PSG.A neg.SPI1@1917 165744 165770 - 26.355452 \n", "3453 ZN263.H13CORE.1.P.B neg.SPI1@1898 165732 165753 + 24.008722 \n", "781 ZN479.H13CORE.0.P.C neg.SPI1@-174 163668 163686 - 22.937369 \n", "1036 ZNF746.H13CORE.0.PSG.A neg.SPI1@-191 163639 163665 + 24.462995 \n", "3545 ZNF746.H13CORE.0.PSG.A neg.SPI1@1898 165732 165758 - 23.523391 \n", "... ... ... ... ... ... ... \n", "1088 CREB3.H13CORE.0.SM.B neg.SPI1@-21 163819 163833 + 1.754682 \n", "2067 RXRB.H13CORE.2.PS.A neg.SPI1@1182 165019 165030 - 12.213856 \n", "2913 KLF7.H13CORE.0.P.B neg.SPI1@1813 165662 165672 + 15.217368 \n", "2986 KLF7.H13CORE.0.P.B neg.SPI1@1832 165662 165672 + 15.217368 \n", "7451 KLF7.H13CORE.0.P.B pos.SPI1@1820 165662 165672 + 15.217368 \n", "\n", " p-value matched_seq site_attr_score \\\n", "3874 7.435330e-10 AGGGAGGAGGGAGGAAGGTGGGAGGA -0.010775 \n", "3453 1.311946e-09 GGGGAGGAGGACAGGGAGGAG -0.006567 \n", "781 2.837623e-09 GCCCCCAAAGTCATCCCT -0.007155 \n", "1036 3.833248e-09 TCTCCCTCCCATCCTCCCTCCCCAGC -0.002449 \n", "3545 7.853286e-09 GGGGAGGAGGACAGGGAGGAGGGAGG -0.005327 \n", "... ... ... ... \n", "1088 4.999340e-04 GCGGTGATGTCACC -0.206348 \n", "2067 NaN CCATGACCTCT -0.008323 \n", "2913 NaN GGGGGCGGGG 0.008973 \n", "2986 NaN GGGGGCGGGG 0.008973 \n", "7451 NaN GGGGGCGGGG 0.008973 \n", "\n", " motif_attr_score from_tss \n", "3874 -0.016253 1904 \n", "3453 -0.016637 1892 \n", "781 -0.013835 -172 \n", "1036 -0.001297 -201 \n", "3545 -0.010747 1892 \n", "... ... ... \n", "1088 -0.585193 -21 \n", "2067 -0.024233 1179 \n", "2913 0.025625 1822 \n", "2986 0.025625 1822 \n", "7451 0.025625 1822 \n", "\n", "[8556 rows x 11 columns]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_motifs = attrs.scan_motifs()\n", "df_motifs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you just want attribution tensor from input one_hot encoded sequence prepare your input and call attributions object:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:10.009453Z", "iopub.status.busy": "2025-11-21T06:33:10.009308Z", "iopub.status.idle": "2025-11-21T06:33:10.050722Z", "shell.execute_reply": "2025-11-21T06:33:10.050157Z" } }, "outputs": [ { "data": { "text/plain": [ "torch.Size([1, 5, 524288])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "one_hot_seq, gene_mask = result.prepare_one_hot(\"SPI1\")\n", "inputs = torch.vstack([one_hot_seq, gene_mask]).unsqueeze(0)\n", "inputs.shape # (batch_size, 5, seq_len)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "execution": { "iopub.execute_input": "2025-11-21T06:33:10.052042Z", "iopub.status.busy": "2025-11-21T06:33:10.051892Z", "iopub.status.idle": "2025-11-21T06:33:11.111093Z", "shell.execute_reply": "2025-11-21T06:33:11.110606Z" } }, "outputs": [ { "data": { "text/plain": [ "tensor([[[-0.0000e+00, 0.0000e+00, -0.0000e+00, ..., -0.0000e+00,\n", " 0.0000e+00, 0.0000e+00],\n", " [-0.0000e+00, -0.0000e+00, -2.6888e-05, ..., 0.0000e+00,\n", " 0.0000e+00, 0.0000e+00],\n", " [-0.0000e+00, 1.2651e-04, 0.0000e+00, ..., 3.7016e-05,\n", " -0.0000e+00, 1.5136e-05],\n", " [ 1.7333e-04, -0.0000e+00, 0.0000e+00, ..., -0.0000e+00,\n", " 1.2473e-05, -0.0000e+00]]], device='cuda:0')" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from decima.interpret.attributer import DecimaAttributer\n", "\n", "attributer = DecimaAttributer(\n", " model=result.model,\n", " tasks=result.query_cells(f\"cell_type in {spi1_cell_types}\"),\n", " off_tasks=result.query_cells(f'organ == \"blood\" and cell_type not in {spi1_cell_types}'),\n", " transform=\"specificity\",\n", " method=\"inputxgradient\",\n", ")\n", "attrs = attributer.attribute(inputs=inputs)\n", "\n", "attrs # (batch_size, 4, seq_len) gene mask is removed from final attributions" ] } ], "metadata": { "kernelspec": { "display_name": "decima", "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.14" } }, "nbformat": 4, "nbformat_minor": 2 }