{ "cells": [ { "cell_type": "markdown", "id": "a11493c9", "metadata": {}, "source": [ "# SCALLOPS ARV-471\n", "\n", "{func}`~mantispy.ds.scallops_arv471` serves the drug arm of a genome-scale optical pooled CRISPR screen from `Genentech/scallops-manuscript`. Cells carry a guide library and are treated with ARV-471 (vepdegestrant), a PROTAC that recruits the CRL4-CRBN E3 ligase to the estrogen receptor and drives its degradation. In-situ sequencing reads each cell's guide, and a phenotype round stains DNA and the estrogen receptor and counts ESR1, CCND1 and GREB1 transcripts. It is a single-cell screen: the base is over two million cells, each with nine phenotype features. Those nine hand-picked readouts are the targeted-readout counterpart to the broad, roughly 1,278-feature morphology of {func}`~mantispy.ds.cp_posh`.\n", "\n", "A guide that knocks out a gene the drug needs to work rescues the receptor, so its cells keep the estrogen-receptor level of an untreated cell. The genes with that known mechanism are the members of the hijacked ligase, `CRBN`, `DDB1`, `CUL4A` and `CUL4B`, and `ESR1` itself.\n", "\n", "**Use it if** your own data is a single-cell optical pooled screen, especially one with a small targeted phenotype readout rather than a broad morphology profile. No tutorial is built on it; aggregate cells to guides as [CRISPR knockouts](../case_studies/crispr.ipynb) does before scoring." ] }, { "cell_type": "code", "execution_count": 1, "id": "14bc5225", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T01:00:37.071266Z", "iopub.status.busy": "2026-10-21T01:00:37.070872Z", "iopub.status.idle": "2026-10-21T01:00:40.609166Z", "shell.execute_reply": "2026-10-21T01:00:40.607521Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import plotly.express as px\n", "\n", "import mantispy as mt" ] }, { "cell_type": "markdown", "id": "e440716c", "metadata": {}, "source": [ "This page uses the guide-level aggregate, one median profile per guide, so it stays small." ] }, { "cell_type": "code", "execution_count": 2, "id": "2b93bf5c", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T01:00:40.613048Z", "iopub.status.busy": "2026-10-21T01:00:40.612805Z", "iopub.status.idle": "2026-10-21T01:00:40.772760Z", "shell.execute_reply": "2026-10-21T01:00:40.771842Z" } }, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 680 × 9\n", " obs: 'Metadata_Gene', 'Metadata_sgRNA', 'Metadata_CellCount', 'Metadata_Control_Type', 'Metadata_Control', 'Metadata_Perturbation', 'Metadata_Well', 'Metadata_Row', 'Metadata_Col', 'Metadata_ObjectType', 'Metadata_Perturbation_Type'\n", " var: 'object', 'feature_group', 'feature', 'channel', 'scale', 'angle', 'gray_levels', 'radial_bin', 'params', 'is_feature', 'feature_kind'\n", " uns: 'mantispy'\n", " layers: None (.X)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "adata = mt.ds.scallops_arv471(aggregated=True)\n", "adata" ] }, { "cell_type": "markdown", "id": "cc7b506c", "metadata": {}, "source": [ "## The rescue reads out in the estrogen receptor\n", "\n", "Grouping the per-guide estrogen-receptor intensity by gene puts the ligase members and `ESR1` beside the non-targeting guides. Knocking out `CRBN` or `DDB1` keeps the receptor high, because the drug can no longer assemble the ligase that degrades it; guides against `ESR1` sit at the bottom, since there is no receptor left to stain." ] }, { "cell_type": "code", "execution_count": 3, "id": "4cfbd86b", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T01:00:40.777037Z", "iopub.status.busy": "2026-10-21T01:00:40.776887Z", "iopub.status.idle": "2026-10-21T01:00:41.116503Z", "shell.execute_reply": "2026-10-21T01:00:41.115374Z" } }, "outputs": [ { "data": { "text/html": [ " \n", " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "