{ "cells": [ { "cell_type": "markdown", "id": "9a099ac2", "metadata": {}, "source": [ "# Single cells of BR00121438\n", "\n", "The single cells behind 24 wells of one JUMP-Target-2 plate {cite:p}`Chandrasekaran_2023`, as CellProfiler measured\n", "them, at four fields of view each.\n", "The same plate's well profiles are in [JUMP-Target-2](jump_target2.ipynb), and its images in\n", "{func}`~mantispy.ds.jump_plate`." ] }, { "cell_type": "code", "execution_count": 1, "id": "7e524039", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T00:58:03.769281Z", "iopub.status.busy": "2026-10-21T00:58:03.768881Z", "iopub.status.idle": "2026-10-21T00:58:09.149119Z", "shell.execute_reply": "2026-10-21T00:58:09.148123Z" } }, "outputs": [ { "data": { "text/plain": [ "AnnData object with n_obs × n_vars = 13578 × 5839\n", " obs: 'Metadata_ImageNumber', 'Metadata_ObjectNumber', 'Metadata_CellsObjectNumber', 'Metadata_NucleiObjectNumber', 'Metadata_AbsPositionZ', 'Metadata_AbsTime', 'Metadata_BinningX', 'Metadata_BinningY', 'Metadata_ChannelID', 'Metadata_ChannelName', 'Metadata_Col', 'Metadata_ExposureTime', 'Metadata_FieldID', 'Metadata_ImageResolutionX', 'Metadata_ImageResolutionY', 'Metadata_ImageSizeX', 'Metadata_ImageSizeY', 'Metadata_MainEmissionWavelength', 'Metadata_MainExcitationWavelength', 'Metadata_MaxIntensity', 'Metadata_ObjectiveMagnification', 'Metadata_ObjectiveNA', 'Metadata_PlaneID', 'Metadata_Plate', 'Metadata_PositionX', 'Metadata_PositionY', 'Metadata_PositionZ', 'Metadata_Row', 'Metadata_Site', 'Metadata_Well', 'Metadata_Center_X', 'Metadata_Center_Y', 'Metadata_ObjectType', 'Metadata_ImageID', 'Metadata_Source', 'Metadata_JCP2022', 'Metadata_InChIKey', 'Metadata_Perturbation', 'Metadata_Perturbation_Type', 'Metadata_Control_Type', 'Metadata_Control'\n", " var: 'object', 'feature_group', 'feature', 'channel', 'scale', 'angle', 'gray_levels', 'radial_bin', 'params', 'is_feature', 'feature_kind', 'selected'\n", " uns: 'mantispy'\n", " layers: None (.X)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "import mantispy as mt\n", "\n", "cells = mt.ds.jump_cells()\n", "cells" ] }, { "cell_type": "markdown", "id": "39704676", "metadata": {}, "source": [ "## Source\n", "\n", "One `ExportToSpreadsheet` directory per field of view, under\n", "`cpg0016-jump/source_4/workspace/analysis/2021_04_26_Batch1/BR00121438/analysis/--`, each with\n", "`Image.csv` and the `Cells`, `Cytoplasm` and `Nuclei` tables, about 1.5 GB in all.\n", "The JUMP annotation tables supply the perturbations, as for JUMP-Target-2.\n", "\n", "## Choices the loader makes\n", "\n", "**Which wells.**\n", "Eight DMSO wells, four compounds at both of their replicate wells, and eight more compounds at one well each.\n", "The compounds that move furthest from DMSO on this plate are cytotoxic, so ranking wells by distance selects empty\n", "wells; every well here holds more than 120 cells in its first field." ] }, { "cell_type": "code", "execution_count": 2, "id": "c5f3d8a1", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T00:58:09.152692Z", "iopub.status.busy": "2026-10-21T00:58:09.152519Z", "iopub.status.idle": "2026-10-21T00:58:10.020915Z", "shell.execute_reply": "2026-10-21T00:58:10.019820Z" } }, "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", "
Metadata_WellMetadata_PerturbationMetadata_ControlMetadata_SiteCountMetadata_CellCount
5B12JCP2022_033924True4734
7D18JCP2022_033924True4634
8E05JCP2022_033924True4697
9E08JCP2022_033924True4729
10F05JCP2022_033924True4643
14J04JCP2022_033924True4749
17K14JCP2022_033924True4690
23O11JCP2022_033924True4545
19L19JCP2022_001036False4555
20L20JCP2022_001036False4425
2B01JCP2022_001890False4401
21O05JCP2022_001890False4380
18K17JCP2022_010404False4439
13H24JCP2022_025848False4587
16K02JCP2022_025848False4613
22O09JCP2022_035095False4496
0A02JCP2022_050797False4702
11H12JCP2022_050797False4528
1A21JCP2022_061421False4582
6C03JCP2022_067432False4524
12H19JCP2022_079715False4385
4B09JCP2022_098688False4498
3B04JCP2022_115963False4555
15J09JCP2022_116560False4487
\n", "
" ], "text/plain": [ " Metadata_Well Metadata_Perturbation Metadata_Control Metadata_SiteCount \\\n", "5 B12 JCP2022_033924 True 4 \n", "7 D18 JCP2022_033924 True 4 \n", "8 E05 JCP2022_033924 True 4 \n", "9 E08 JCP2022_033924 True 4 \n", "10 F05 JCP2022_033924 True 4 \n", "14 J04 JCP2022_033924 True 4 \n", "17 K14 JCP2022_033924 True 4 \n", "23 O11 JCP2022_033924 True 4 \n", "19 L19 JCP2022_001036 False 4 \n", "20 L20 JCP2022_001036 False 4 \n", "2 B01 JCP2022_001890 False 4 \n", "21 O05 JCP2022_001890 False 4 \n", "18 K17 JCP2022_010404 False 4 \n", "13 H24 JCP2022_025848 False 4 \n", "16 K02 JCP2022_025848 False 4 \n", "22 O09 JCP2022_035095 False 4 \n", "0 A02 JCP2022_050797 False 4 \n", "11 H12 JCP2022_050797 False 4 \n", "1 A21 JCP2022_061421 False 4 \n", "6 C03 JCP2022_067432 False 4 \n", "12 H19 JCP2022_079715 False 4 \n", "4 B09 JCP2022_098688 False 4 \n", "3 B04 JCP2022_115963 False 4 \n", "15 J09 JCP2022_116560 False 4 \n", "\n", " Metadata_CellCount \n", "5 734 \n", "7 634 \n", "8 697 \n", "9 729 \n", "10 643 \n", "14 749 \n", "17 690 \n", "23 545 \n", "19 555 \n", "20 425 \n", "2 401 \n", "21 380 \n", "18 439 \n", "13 587 \n", "16 613 \n", "22 496 \n", "0 702 \n", "11 528 \n", "1 582 \n", "6 524 \n", "12 385 \n", "4 498 \n", "3 555 \n", "15 487 " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wells = mt.tl.aggregate(cells, min_cells=0)\n", "columns = [\"Metadata_Well\", \"Metadata_Perturbation\", \"Metadata_Control\", \"Metadata_SiteCount\", \"Metadata_CellCount\"]\n", "wells.obs[columns].sort_values([\"Metadata_Control\", \"Metadata_Perturbation\"], ascending=[False, True])" ] }, { "cell_type": "markdown", "id": "c71aa7c6", "metadata": {}, "source": [ "**One row per cell.**\n", "The JUMP pipeline gives `Cytoplasm` a parent in both `Cells` and `Nuclei` and gives `Cells` none, so `Cytoplasm` is\n", "the only object that joins all three tables, and one cytoplasm is one cell.\n", "In every field, `Count_Cells` in `Image.csv` equals the number of `Cytoplasm` rows.\n", "\n", "**Which features.**\n", "`var[\"selected\"]` marks the features {func}`~mantispy.pp.feature_select` keeps after\n", "{func}`~mantispy.pp.normalize` against the DMSO wells, with the features it flags as degenerate dropped first.\n", "No step of it draws a random number, so the pinned files always give the same mask.\n", "`mt.ds.jump_cells(selected=True)` returns only those features." ] }, { "cell_type": "code", "execution_count": 3, "id": "17fcbfc1", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T00:58:10.024336Z", "iopub.status.busy": "2026-10-21T00:58:10.024112Z", "iopub.status.idle": "2026-10-21T00:58:10.028007Z", "shell.execute_reply": "2026-10-21T00:58:10.027074Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1605 of 5839 features selected\n" ] } ], "source": [ "print(f\"{int(cells.var['selected'].sum())} of {cells.n_vars} features selected\")" ] }, { "cell_type": "markdown", "id": "2f0eeff9", "metadata": {}, "source": [ "## Four of nine fields\n", "\n", "The plate was imaged at nine fields per well and four are pinned here, so a well aggregated from these cells counts\n", "the cells of four fields.\n", "{func}`~mantispy.tl.aggregate` records that in `Metadata_SiteCount`, and against the well's count over all nine\n", "fields in JUMP-Target-2 the ratio sits near 4/9:" ] }, { "cell_type": "code", "execution_count": 4, "id": "73b283f3", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T00:58:10.031237Z", "iopub.status.busy": "2026-10-21T00:58:10.031089Z", "iopub.status.idle": "2026-10-21T00:58:11.927412Z", "shell.execute_reply": "2026-10-21T00:58:11.926281Z" } }, "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", "
Metadata_WellMetadata_SiteCountMetadata_CellCountall nine fields
0A0247021527.0
1A2145821234.0
2B014401815.0
3B0445551243.0
4B0944981110.0
\n", "
" ], "text/plain": [ " Metadata_Well Metadata_SiteCount Metadata_CellCount all nine fields\n", "0 A02 4 702 1527.0\n", "1 A21 4 582 1234.0\n", "2 B01 4 401 815.0\n", "3 B04 4 555 1243.0\n", "4 B09 4 498 1110.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "published = mt.ds.jump_target2(plates=[\"BR00121438\"], annotate=False).obs.set_index(\"Metadata_Well\")\n", "wells.obs[\"all nine fields\"] = published.loc[wells.obs[\"Metadata_Well\"].astype(str), \"Metadata_CellCount\"].to_numpy()\n", "wells.obs[[\"Metadata_Well\", \"Metadata_SiteCount\", \"Metadata_CellCount\", \"all nine fields\"]].head()" ] }, { "cell_type": "code", "execution_count": 5, "id": "ac82a81d", "metadata": { "execution": { "iopub.execute_input": "2026-10-21T00:58:11.930074Z", "iopub.status.busy": "2026-10-21T00:58:11.929850Z", "iopub.status.idle": "2026-10-21T00:58:12.047678Z", "shell.execute_reply": "2026-10-21T00:58:12.046714Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ratio: median 0.45, range 0.35 to 0.51\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ratio = wells.obs[\"Metadata_CellCount\"] / wells.obs[\"all nine fields\"]\n", "fig, ax = plt.subplots(figsize=(4, 4))\n", "ax.scatter(wells.obs[\"all nine fields\"], wells.obs[\"Metadata_CellCount\"])\n", "limit = wells.obs[\"all nine fields\"].max() * 1.05\n", "ax.plot([0, limit], [0, limit * 4 / 9], color=\"grey\", linestyle=\"--\", label=\"4/9\")\n", "ax.set_xlabel(\"cells in all nine fields (JUMP-Target-2)\")\n", "ax.set_ylabel(\"cells in the four fields here\")\n", "ax.legend()\n", "print(f\"ratio: median {ratio.median():.2f}, range {ratio.min():.2f} to {ratio.max():.2f}\")" ] }, { "cell_type": "markdown", "id": "df97a3d2", "metadata": {}, "source": [ "Divide by `Metadata_SiteCount` before comparing a count from here with one from another dataset;\n", "{func}`~mantispy.tl.cytotoxicity` does so itself." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.15" } }, "nbformat": 4, "nbformat_minor": 5 }