{ "cells": [ { "cell_type": "markdown", "id": "f2a11223", "metadata": {}, "source": [ "# Exploring NAT4 \u2014 the deepSTRF data paradigm in action\n", "\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/urancon/deepSTRF/blob/develop/examples/explore_nat4.ipynb)\n", "\n", "This notebook walks through the **NAT4** dataset (Pennington & David\n", "2023; auto-downloaded from Zenodo) as a hands-on tour of the deepSTRF\n", "data API. NAT4 is the dataset that exercises every subtle bit of the\n", "[`data_paradigm.md`](../docs/_source/md/data_paradigm.md):\n", "\n", "- **Sparse coverage** \u2014 not every cell saw every stimulus (33 of 849 A1\n", " cells have no validation data); missing pairs are NaN-padded sentinels.\n", "- **Estimation / validation split** \u2014 575 est + 18 val stims, with a\n", " `stim_meta['subset']` tag and a `subset='all'|'est'|'val'`\n", " constructor shortcut.\n", "- **Per-cell metadata** richness \u2014 cell IDs parsed into site / animal /\n", " electrode / unit-in-electrode + auditory / depth tags.\n", "- **The bidirectional rule** \u2014 selecting a stim subset auto-hides\n", " neurons whose only valid responses lie outside that subset.\n", "- **`valid_mask`** \u2014 the bool grid the dataloader emits alongside\n", " responses, derived from NaN sentinels at collate time.\n", "\n", "We focus on A1 here; the notebook closes with a brief PEG comparison and\n", "a cross-area concatenation example.\n" ] }, { "cell_type": "markdown", "id": "7d3aca46", "metadata": {}, "source": [ "## Setup \u2014 Google Colab\n", "\n", "If you're running on Google Colab, the cell below installs deepSTRF\n", "from source. On a local install (`pip install -e .`) it's a no-op." ] }, { "cell_type": "code", "execution_count": null, "id": "ebc31ee0", "metadata": {}, "outputs": [], "source": [ "import sys\n", "if 'google.colab' in sys.modules:\n", " !pip install -q git+https://github.com/urancon/deepSTRF.git\n", " print(\"deepSTRF installed from GitHub.\")\n", "else:\n", " print(\"Local environment \u2014 assuming deepSTRF is already importable.\")\n" ] }, { "cell_type": "markdown", "id": "6b0a241f", "metadata": {}, "source": [ "## Imports" ] }, { "cell_type": "code", "execution_count": 1, "id": "c2afc914", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:47:42.109871Z", "iopub.status.busy": "2026-05-02T16:47:42.109683Z", "iopub.status.idle": "2026-05-02T16:47:44.456200Z", "shell.execute_reply": "2026-05-02T16:47:44.455404Z" } }, "outputs": [], "source": "%matplotlib inline\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport torch\nfrom collections import Counter\nfrom torch.utils.data import DataLoader, Subset\n\nfrom deepSTRF.datasets.audio.nat4 import NAT4Dataset\nfrom deepSTRF.utils import (\n neural_collate, concat_neural_datasets, plot_stim_with_response,\n)" }, { "cell_type": "markdown", "id": "09598c37", "metadata": {}, "source": [ "## 1. Load NAT4 A1\n", "\n", "`NAT4Dataset(area='A1', download=True)` fetches 3 archives from Zenodo\n", "(~30 MB main + ~70 MB single-sites + 70 kB CSV) and unpacks them under\n", "`~/.cache/deepSTRF/NAT4/A1/`. Subsequent loads use the cache. The\n", "default `subset='all'` loads both estimation and validation stims; for\n", "training-only workflows, `subset='est'` loads only the 575 estimation\n", "stims (faster)." ] }, { "cell_type": "code", "execution_count": 2, "id": "4b44814e", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:47:44.458247Z", "iopub.status.busy": "2026-05-02T16:47:44.458013Z", "iopub.status.idle": "2026-05-02T16:48:12.315078Z", "shell.execute_reply": "2026-05-02T16:48:12.314459Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\r", "NAT4 A1 val sites: 0%| | 0/22 [00:00" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "cells with \u22651 val response: 816 / 849\n", "cells with NO val data: 33\n" ] } ], "source": [ "masks = ds.nrn_masks # (S=593, N=849)\n", "S, N = masks.shape\n", "total = S * N\n", "valid = masks.sum().item()\n", "print(f\"valid (stim, cell) pairs: {valid:,} / {total:,} ({100*valid/total:.1f}%)\")\n", "\n", "# Order stims by est/val and cells by val-data presence so the structure is visible.\n", "stim_order = sorted(range(S), key=lambda s: ds.stim_meta[s]['subset'])\n", "val_idx = [s for s in stim_order if ds.stim_meta[s]['subset'] == 'val']\n", "n_val_stims = len(val_idx)\n", "\n", "has_val = masks[val_idx].any(dim=0) # (N,) \u2014 True if cell has any val response\n", "cell_order = torch.argsort(has_val.long(), descending=True)\n", "\n", "reordered = masks[stim_order][:, cell_order]\n", "fig, ax = plt.subplots(figsize=(9, 4))\n", "ax.imshow(reordered.numpy().T, aspect='auto', cmap='Greys', interpolation='nearest')\n", "ax.axvline(S - n_val_stims - 0.5, color='red', lw=1.5, label=f'est | val boundary')\n", "ax.set_xlabel(\"stim (est on left, val on right)\")\n", "ax.set_ylabel(\"cell (cells with val data on top)\")\n", "ax.set_title(f\"NAT4 A1 nrn_masks \u2014 {valid:,} / {total:,} valid pairs\")\n", "ax.legend(loc='upper right')\n", "plt.tight_layout(); plt.show()\n", "\n", "n_cells_with_val = has_val.sum().item()\n", "print(f\"cells with \u22651 val response: {n_cells_with_val} / {N}\")\n", "print(f\"cells with NO val data: {N - n_cells_with_val}\")\n" ] }, { "cell_type": "markdown", "id": "f652e1d1", "metadata": {}, "source": [ "## 4. Stim metadata + one example stim/response\n", "\n", "The estimation stims and validation stims share the same\n", "spectrogram-extraction pipeline; what differs is the trial count\n", "(typically 1 repeat for est vs ~10-20 for val). Below: a validation\n", "stim spectrogram and the response of one auditory cell." ] }, { "cell_type": "code", "execution_count": 5, "id": "29f5056a", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:48:14.670896Z", "iopub.status.busy": "2026-05-02T16:48:14.670761Z", "iopub.status.idle": "2026-05-02T16:48:14.914432Z", "shell.execute_reply": "2026-05-02T16:48:14.913831Z" } }, "outputs": [ { "data": { "image/png": "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tLxSprahJPKjFXddRalb3PO2eMer+H3OXPkei7tfysJDTaWdN638fy7JPmu09l7Suq5a5Y0A2fVICJ10/hxduqIsKzdRWlf2GaTXZ0nK5J9r8n5g2SyKVD5ZXZDXs2dPDBw4ELVq1cLFixfx5ptvIiwsDAcPHoStrTwBc3Z2NrKz/3dypaSkWKq5REREREREJcrqgrzw8HDD/5s0aYKmTZuidu3a2L17N7p27SqdZ/78+YiKirJUE4mIiIiIiMymLDyjYFZBQUHw9vbGhQsXVOtMmzYNycnJhp/r169bsIVEREREREQlx+ru5D3sxo0bSEhIQJUqVVTraLVaaLVaC7aKiIiIiIjIPMpdkJeWlmZ0V+7y5cs4ceIEvLy84OXlhaioKAwaNAj+/v64ePEipk6dijp16iA0NLQUW01ERERERGQZ5S7IO3LkCLp06WL4ffLkyQCAiIgILFu2DH///Te+/vprJCUlISAgAD169MDbb7/NO3VERERERFQhlLsgr3PnzhBCfejYrVu3WrA1REREREREZUu5C/KIyi5T8wwVf7wjWT4geUW1U9z0/Eu2Ns6S5Sq3QaOyXc5aH0VZO/s+0roDqynvuMu+0snWy7f/n+SmirJjqfLcdy3dvBVlakfml/SjirKrSb8ryuS58+RMPoaqC1Brrem554pLlrvORpJ/EADsbJX9yNOplqIsV58pnT8164aiTJdnerobIe1J8n0oOzbyPH1FUYT8gSp9Q7YNRalrjjxk90nyixU7j1dZHRdOdu0z/Vwuyn7RyM5ltfNeco4LyHOEyhVvuzQ2DqbXVflcUit/mLOD8jMFALSS/KsjKoVJ67b3yVGU2WqUx0Yn5PvgRqa9ouynGxnSujVdlNe+mPRURdkfaV9J58/TJUvLiQpTVq+iRERERERE9AgY5BEREREREVkRBnlERERERERWhEEeERERERGRFWGQR0REREREZEUY5BEREREREVkRBnlERERERERWhEEeERERERGRFWEydKISI0sMrUzurUaWdFwvlAlbAcBOUldIEpxr7T2k89tIks5qNJLEuwA87Ksp60q21UsESOf3RSVF2eDq8v3y7FOXFGU2LpK2uigT0QKA7pYyGe3+3fJ2JeUqE5d72suTmWddaako+8b2sKIsT5cmnV+WfF6jkScP1kiSHYsiJDMXQpkAWWMjv9TL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P/00pk2bhszMTDg5OSE6OhohISEICAiQbuuD2/bw9t66dUt1PQCwePFi5OTkYNiwYYay/D/O9+/fj1q1ahnK8+/w3bx501CWfzfzQX379kW7du3w448/4tlnny1w/bGxsaptB2DU/szMTEyZMgWvvPIKatasafYgLygoCMD9u6WlGeR5eXlh586dsLW1NZSZut9/+eUX9OrVCytWrJAuu127dqhXrx62b9+OZ555xmjaH3/8gS+++ALR0dFGd5G7dOmCnj17Yu3atUblFy5cwJYtWxAaGlrsbSYiKgo+rklEZCZ6vR4bN25E3759FXeVABgeAVu7di06duyISpUqIT4+3vDTrVs36HQ67N27t9htyczMlA5Q4ujoaJhekISEBFSqVEk6LTo6Gn5+fujSpQuA+9s1bNgw/PDDD9DpdIr6//3vf+Hj4wNfX1+0atUKO3fuxNSpUzF58mTV9Q8dOhSZmZn4+eefkZqaip9//ln6qOaD26K2vQVt6969exEVFYWhQ4fiySefNJT36tULNWrUwJQpU7B+/XpcvXoVa9aswVtvvQU7OzujZT54ty83NxcJCQmoU6cOPD09TRrNtCjH6t1330Vubi7efPPNQpdbEvL7QHx8vEXWp2bMmDFGAR5g+n739PTEmTNnTB5w6EFr166Fh4cHunfvbnSuBgcHw9XVFbt27TKqX6tWLQZ4RFQqeCePiMhM4uLikJKSgsaNGxdYLyYmBn///Td8fHyk0+/evVvstjg5OUnfu8sfDv/hxxBl8u88Pkin0+GHH35Aly5dcPnyZUN527Zt8f7772Pnzp3o0aOH0TxPPfUUJkyYgJycHPz111945513kJGRoXiU9EE+Pj7o1q0bvvvuO2RkZBR45y9/W9S2V21bz507hwEDBqBx48b44osvjKY5Ojril19+wdChQzFo0CAA94PIhQsXYt68eXB1dTXUzczMxPz587Fy5UrcvHnTaL8lJycb9ltcXJzROry8vODg4GDysbpy5QoWLVqEJUuWGK3/YTk5OYp36Hx8fBRBkinyt+XBd9RkHh6ZtCj8/f0LrfPg3dR8pux34P5d9Keeegr16tVD48aN0bNnTzz77LNo2rRpoeuNiYlBcnIyfH19pdMfPldl7SQisgQGeUREpUyv16N79+6YOnWqdHq9evWKvY4qVapIc7/ll8kee3xQ5cqV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aSM8PT2Fk5OTqF+/vpg3b55R38jLyxMTJ04UPj4+QqPRKPbFihUrRHBwsHBychJubm6iSZMmYurUqeLWrVuGOmr9kojIEjRCmPCGMxERVXirVq3C+PHjce3aNT6SVgEtXrwYCxcuxMWLF/k+GhFRGcc8eUREZJL//Oc/qF69unSQFbJuubm5+OCDDzB9+nQGeERE5QDv5BEREREREVkR3skjIiIiIiKyIuUuyJs/fz5at24NNzc3+Pr6on///vj333+N6mRlZWH8+PGoXLkyXF1dMWjQINy5c6eUWkxERERERGQ55S7I27NnD8aPH48///wT27dvR25uLnr06IH09HRDnVdeeQU//fQT1q5diz179uDWrVsYOHBgKbaaiIiIiIjIMsr9O3lxcXHw9fXFnj170KlTJyQnJ8PHxwffffedIVfNuXPn0KBBAxw8eBCPP/54KbeYiIiIiIjIfMp9MvTk5GQAgJeXFwDg6NGjyM3NRbdu3Qx16tevj+rVq6sGednZ2cjOzjb8rtfrce/ePVSuXBkajcbMW0BERERERFQ4IQRSU1MREBAAGxv1hzLLdZCn1+sxadIktG/fHo0bNwYA3L59Gw4ODoocTn5+frh9+7Z0OfPnz0dUVJS5m0tERERERFRs169fR7Vq1VSnl+sgb/z48Th9+jT++OOPYi1n2rRpmDx5suH35ORkVK9eHdevX4e7u3txm0kV2OHDhxVlbdq0KffrIiIiIiLLS0lJQWBgINzc3AqsV26DvAkTJuDnn3/G3r17jaJYf39/5OTkICkpyehu3p07d+Dv7y9dllarhVarVZS7u7szyKNicXFxUZSZq09Zcl1EREREVHoKe6Ws3I2uKYTAhAkTsGHDBvz++++oVauW0fTg4GDY29tj586dhrJ///0X165dQ7t27SzdXCIiIiIiIosqd3fyxo8fj++++w6bNm2Cm5ub4T07Dw8PODk5wcPDA6NGjcLkyZPh5eUFd3d3TJw4Ee3atePImkREREREZPXKXZC3bNkyAEDnzp2NyleuXImRI0cCAD788EPY2Nhg0KBByM7ORmhoKJYuXWrhlhIREREREVleuc+TZw4pKSnw8PBAcnIy32kiIipnDh48qCiz1sf1ZdsKWO/2ylSk401EZYclrz0Pris9PR3du3cvNE4pd+/kERERERERkToGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEQR4REREREZEVYZ48ifw8edu3b4eLi4uhvCi5LyyZu6is5kmyhtxF5WkbylNbiQD22bKgrH5+EBGVdaX1GWZqPm/eySMiIiIiIrIiDPKIiIiIiIisCIM8IiIiIiIiK8Igj4iIiIiIyIowyCMiIiIiIrIiDPKIiIiIiIisCFMoSJg6NClVTBUtPYY5hgguC9tVkZSF/V3cflSe0i2o7W+Z8nQuFXddJdHW8tQPiIjMgSkUiIiIiIiIKiAGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEKRQk8ocm3b59O1xcXAzlHKa5+KxhKHcisg5l4XpE5Qs/P4qP5x2Zk6nnaHnrhw+2Nz09Hd27d2cKBSIiIiIiooqEQR4REREREZEVYZBHRERERERkRcpdkLd371707dsXAQEB0Gg02Lhxo9H0kSNHQqPRGP307NmzdBpLRERERERkYeUuyEtPT0ezZs2wZMkS1To9e/ZEbGys4ef777+3YAuJiIiIiIhKj52lVpSdnY1Dhw7h6tWryMjIgI+PD1q0aIFatWoVaTlhYWEICwsrsI5Wq4W/v39xmktERERERFQumT3I279/Pz766CP89NNPyM3NhYeHB5ycnHDv3j1kZ2cjKCgIY8eOxfPPPw83N7cSWefu3bvh6+uLSpUq4cknn8TcuXNRuXLlIi+nTZs2BQ5N+igq+vDLRdlWcw1vW9w2VKTjRWTNysL1yJLMdT0zx3LL6v621u0isjRzXY9MXYZaveK2yxLblZKSYtI8Zn1cs1+/fhg2bBhq1qyJbdu2ITU1FQkJCbhx4wYyMjIQExOD6dOnY+fOnahXrx62b99e7HX27NkT33zzDXbu3IkFCxZgz549CAsLg06nU50nOzsbKSkpRj9ERERERETlkVnv5PXu3Rs//vgj7O3tpdODgoIQFBSEiIgInD17FrGxscVeZ3h4uOH/TZo0QdOmTVG7dm3s3r0bXbt2lc4zf/58REVFFXvdREREREREpc2sd/LGjRunGuA9rGHDhqpBWHEEBQXB29sbFy5cUK0zbdo0JCcnG36uX79e4u0gIiIiIiKyBIsNvJKXl4czZ87g9u3bAAB/f380bNjQ5CDwUd24cQMJ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ktChQwds2bIFjo6OJdoOIiIiIiKissisQd61a9dQvXp1k+vfvHkTVatWLbBO586djR79fJhGo8GcOXMwZ84ck9dLRERERERkLTSioIipmPz8/NC/f3+MHj0arVu3ltZJTk7GmjVr8NFHH2Hs2LF46aWXzNUck6WkpMDDwwPJyclwd3cv7eYUqjwNFV1W21pW21UWlPeh64mA0u/HZeEaU5R9UNr7qyjKU2oHooqmLFz7ZMrzdcPUOMWsd/LOnj2LefPmoXv37nB0dERwcDACAgLg6OiIxMREnD17FmfOnEHLli2xcOFC9OrVy5zNISIiIiIisnpmzZNXuXJlfPDBB4iNjcWnn36KunXrIj4+HjExMQCA//znPzh69CgOHjzIAI+IiIiIiKgEWCSFgpOTEwYPHozBgwdbYnVEREREREQVllnv5BEREREREZFlMcgjIiIiIiKyIgzyiIiIiIiIrAiDPCIiIiIiIiti1jx55VV5y5NHRFTWlcW8a2U1fxMVjbXm/yMikikTefI2b95sct1+/fqZsSVEREREREQVg1mDvP79+5tUT6PRQKfTmbMpREREREREFYJZgzy9Xm/OxRMREREREdFDOPAKERERERGRFTHrnbyHpaenY8+ePbh27RpycnKMpr300kuWbAoREREREZFVsliQd/z4cfTq1QsZGRlIT0+Hl5cX4uPj4ezsDF9fXwZ5REREREREJcBiQd4rr7yCvn37Yvny5fDw8MCff/4Je3t7PPPMM3j55Zct1YwyiUM6E1FBzDVEvKl11VINFMUTTzyhKDtw4ICi7JtvvpHOP2LECJPXZY5tKEq6haKsq7jX+uK2q6x+1hRlu4qyDebY35bchyWR9sMc21BW05GU1XYVRWn3ueIqC8egPO3DktxfFnsn78SJE3j11VdhY2MDW1tbZGdnIzAwEAsXLsSbb75pqWYQERERERFZNYsFefb29rCxub86X19fXLt2DQDg4eGB69evW6oZREREREREVs1ij2u2aNECf/31F+rWrYuQkBDMnDkT8fHxWLVqFRo3bmypZhAREREREVk1i93Je+edd1ClShUAwLx581CpUiW88MILiIuLw4oVKyzVDCIiIiIiIqtmsTt5rVq1Mvzf19cXW7ZssdSqiYiIiIiIKgwmQyciIiIiIrIiGiGEMNfCW7ZsiZ07d6JSpUpo0aIFNBqNat1jx46ZqxlFlpKSAg8PDyQnJ8Pd3b20m0NU4srTENrlaehjImtR3PPOkuetuVKMmENZGE6eiEpGaf0tZWqcYtbHNZ966ilotVoAQP/+/c25KiIiIiIiIoKZg7xZs2YBAHQ6Hbp06YKmTZvC09PTnKskIiIiIiKq0CzyTp6trS169OiBxMRES6yOiIiIiIiowrLYwCuNGzfGpUuXzL6e2bNnQ6PRGP3Ur1/f7OslIiIiIiIqCyyWQmHu3LmYMmUK3n77bQQHB8PFxcVoekkOcNKoUSPs2LHD8LudncU2k4iIiIiIqFRZLPrp1asXAKBfv35Go2wKIaDRaKDT6UpsXXZ2dvD39y+x5REREREREZUXFgvydu3aZalVISYmBgEBAXB0dES7du0wf/58VK9eXbV+dnY2srOzDb+npKRYopmPpKwOS22p9Re1DS+88IKibMSIEcVaZlGU9vH65ptvpHWXL1+uKDtw4IDJ65Itd9myZSbPXxRlddj2oiirw9GrnWPFodYuWQqdstrnLDkkf3HP2+eff97kdcmo7UO1NhSH7HpcVLL2FqWtsrrF3VbZZ4qasnA9slZl9fpf0ZWFtCHFvaabY/1qTGlXenq6ScuyWJBXq1YtBAYGKj7ohRC4fv16ia2nbdu2+Oqrr/DYY48hNjYWUVFR6NixI06fPg03NzfpPPPnz0dUVFSJtYGIiIiIiKi0WGzglVq1aiEuLk5Rfu/ePdSqVavE1hMWFoYhQ4agadOmCA0Nxa+//oqkpCSsWbNGdZ5p06YhOTnZ8FOSQScREREREZElWexOXv67dw9LS0uDo6Oj2dbr6emJevXq4cKFC6p1tFqtIWk7ERERERFReWb2IG/y5MkA7r+PMWPGDDg7Oxum6XQ6HDp0CM2bNzfb+tPS0nDx4kU8++yzZlsHERERERFRWWH2IO/48eMA7t/JO3XqFBwcHAzTHBwc0KxZM0yZMqXE1jdlyhT07dsXNWrUwK1btzBr1izY2tpi+PDhJbYOIiIiIiKissrsQV7+qJqRkZH46KOPSjQfnsyNGzcwfPhwJCQkwMfHBx06dMCff/4JHx8fs66XiIiIiIioLLDYO3krV660yHp++OEHi6yHiIiIiIioLNIIIURpN6KsSUlJgYeHB5KTk81+59HSmEdGrizkcSGyBsU9l4oyf3k6by3dVlOv9eZqFz9r5MpTnyWyZuX5XDQ1TrFYCgUiIiIiIiIyPwZ5REREREREVoRBHhERERERkRVhkEdERERERGRFGOQRERERERFZEQZ5REREREREVsRiefLKo8OHD8PFxcXwe0kMq2qOYaXL6hDYZWEIbVPboNausrANROZijv5tyfOjPJ2LlkyVUJT1lad9qKY8XafL6uc9UVlgrhQ65rpGWPLa8+C60tPTTZqHd/KIiIiIiIisCIM8IiIiIiIiK8Igj4iIiIiIyIowyCMiIiIiIrIiDPKIiIiIiIisCIM8IiIiIiIiK6IRQojSbkRZk5KSAg8PDyQnJ8Pd3b20m0MlTG3YXZnipoww1zKLO0RwaafyKAtDH5cnpTVM86Osq7hDvFvrEPHmuu4UxQsvvKAoW7ZsWbHrlvb1pLSV1TRGRNasIp93psYpvJNHRERERERkRRjkERERERERWREGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEefIkLJ0nrzzk5CAiIjKVNXyulaf8lERkeaV13jJPHhERERERUQXEII+IiIiIiMiKWG2Qt2TJEtSsWROOjo5o27YtDh8+XNpNIiIiIiIiMjurDPJWr16NyZMnY9asWTh27BiaNWuG0NBQ3L17t7SbRkREREREZFZWGeR98MEHGDNmDCIjI9GwYUMsX74czs7O+PLLL0u7aURERERERGZlV9oNKGk5OTk4evQopk2bZiizsbFBt27dpKPgAEB2djays7MNvycnJwO4P3qNJaSnpyvKLLVuIiKikmYNn2uW3AZr2F9EFU1pnbf56ygsQYLVBXnx8fHQ6XTw8/MzKvfz88O5c+ek88yfPx9RUVGK8sDAQLO0kYiIiIiI6FGlpqbCw8NDdbrVBXmPYtq0aZg8ebLh96SkJNSoUQPXrl0rcOdR2ZGSkoLAwEBcv37dIrkNqXh4vMofHrPyh8es/OExK194vMofazhmQgikpqYiICCgwHpWF+R5e3vD1tYWd+7cMSq/c+cO/P39pfNotVpotVpFuYeHR7ntABWVu7s7j1k5wuNV/vCYlT88ZuUPj1n5wuNV/pT3Y2bKTSirG3jFwcEBwcHB2Llzp6FMr9dj586dFslCT0REREREVJqs7k4eAEyePBkRERFo1aoV2rRpg8WLFyM9PR2RkZGl3TQiIiIiIiKzssogb9iwYYiLi8PMmTNx+/ZtNG/eHFu2bFEMxqJGq9Vi1qxZ0kc4qWziMStfeLzKHx6z8ofHrPzhMStfeLzKn4p0zDSisPE3iYiIiIiIqNywunfyiIiIiIiIKjIGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeURERERERFaEQR4REREREZEVYZBHRERERERkRRjkERERERERWREGeUREpKDRaDB79uwiz7d7925oNBrs3r27xNtUUdWsWRMjR44s7WYQEVE5wiCPiMiKHThwALNnz0ZSUlJpN4WIiIgsxK60G0BEROZz4MABREVFYeTIkfD09DR5vszMTNjZ8SOCiIioPOKdPCIiAgDo9XpkZWUBABwdHStUkJeenl7aTShxeXl5yMnJKe1mEBFRKWCQR0RkpWbPno3XXnsNAFCrVi1oNBpoNBpcuXIFwP337iZMmIDo6Gg0atQIWq0WW7ZsMUx78J28q1ev4sUXX8Rjjz0GJycnVK5cGUOGDDEs61Fs2rQJvXv3RkBAALRaLWrXro23334bOp3OUGfChAlwdXVFRkaGYv7hw4fD39/fqP5vv/2Gjh07wsXFBW5ubujduzfOnDljNN/IkSPh6uqKixcvolevXnBzc8N//vMfAMC+ffswZMgQVK9eHVqtFoGBgXjllVeQmZmpWP/atWvRsGFDODo6onHjxtiwYQNGjhyJmjVrGtXT6/VYvHgxGjVqBEdHR/j5+WHcuHFITEw0qieEwNy5c1GtWjU4OzujS5cuiraruXLlCjQaDd577z0sXrwYtWvXhlarxdmzZwEA586dw+DBg+Hl5QVHR0e0atUKmzdvNlpGbm4uoqKiULduXTg6OqJy5cro0KEDtm/frth3ly5dQmhoKFxcXBAQEIA5c+ZACGG0vPT0dLz66qsIDAyEVqvFY489hvfee09RL78fbty4EY0bN4ZWq0WjRo0MfTFfamoqJk2ahJo1a0Kr1cLX1xfdu3fHsWPHjOodOnQIPXv2hIeHB5ydnRESEoL9+/ebtB+JiKxFxfmaloioghk4cCDOnz+P77//Hh9++CG8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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": "# Find a val stim with a high-coverage auditory cell.\nval_stim_indices = [s for s, m in enumerate(ds.stim_meta) if m['subset'] == 'val']\nauditory_cell_indices = [i for i, n in enumerate(ds.nrn_meta) if n['auditory']]\nfor cell_idx in auditory_cell_indices:\n valid_val_stims = [s for s in val_stim_indices if not ds.responses[s][cell_idx].isnan().all()]\n if valid_val_stims:\n stim_idx = valid_val_stims[0]\n break\n\nplot_stim_with_response(\n ds.stims[stim_idx], ds.responses[stim_idx][cell_idx], dt_ms=ds.dt,\n title=(f\"NAT4 A1 stim {stim_idx} ('{ds.stim_meta[stim_idx]['name']}', \"\n f\"subset={ds.stim_meta[stim_idx]['subset']}) \"\n f\"\u2192 cell {cell_idx} ({ds.nrn_meta[cell_idx]['cell_id']})\"),\n)\nplt.show()" }, { "cell_type": "markdown", "id": "80336a49", "metadata": {}, "source": [ "## 5. The bidirectional rule\n", "\n", "`select_stims_by_attr('subset', 'val')` filters down to validation\n", "stims. Because we now restrict the stim set, neurons whose **only**\n", "valid responses lie outside the selection (i.e. the val-less cells\n", "visible in \u00a73) are auto-hidden. This is the bidirectional rule from\n", "[`data_paradigm.md`](../docs/_source/md/data_paradigm.md) \u00a78: a stim\n", "selection implicitly induces a population selection.\n", "\n", "After the selection:\n", "- Stims drop from 593 to 18 (only validation stims remain).\n", "- Cells drop from 849 to 816 (the 33 val-less cells are hidden)." ] }, { "cell_type": "code", "execution_count": 6, "id": "d387df2f", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:48:14.916365Z", "iopub.status.busy": "2026-05-02T16:48:14.916221Z", "iopub.status.idle": "2026-05-02T16:48:27.907738Z", "shell.execute_reply": "2026-05-02T16:48:27.906947Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "after select_stims_by_attr('subset', 'val'):\n", " visible stims: 18\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " visible cells: 816\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "first returned item:\n", " stim shape: (1, 18, 150)\n", " N returned: 816\n", " meta: {'name': 'STIM_00cat172_rec1_geese_excerpt1.wav', 'subset': 'val'}\n" ] } ], "source": [ "ds.select_stims_by_attr('subset', 'val')\n", "\n", "n_visible_cells = ds.nrn_masks.sum(dim=0).gt(0).sum().item() if ds.S_sel is None else len(ds._selected())\n", "print(f\"after select_stims_by_attr('subset', 'val'):\")\n", "print(f\" visible stims: {len(ds.S_sel) if ds.S_sel is not None else len(ds.stims)}\")\n", "print(f\" visible cells: {len(ds._selected())}\")\n", "\n", "# What __getitem__ returns now: only val-data cells, only val stims.\n", "item = ds[0]\nstim, responses_per_neuron, meta = item['stims'], item['responses'], item['stim_meta']\n", "print(f\"\\nfirst returned item:\")\n", "print(f\" stim shape: {tuple(stim.shape)}\")\n", "print(f\" N returned: {len(responses_per_neuron)}\")\n", "print(f\" meta: {meta}\")\n", "\n", "# undo selection so subsequent cells see the full dataset\n", "ds.reset_stim_selection()\n", "ds.reset_pop_selection()\n" ] }, { "cell_type": "markdown", "id": "4380ec98", "metadata": {}, "source": [ "## 6. Population filtering \u2014 `select_pop_by_nrn_attr`\n", "\n", "The neuron-axis filters work on any key in `nrn_meta`. Two\n", "common cases: keeping only auditory cells, and slicing by animal /\n", "recording site." ] }, { "cell_type": "code", "execution_count": 7, "id": "fe318615", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:48:27.909185Z", "iopub.status.busy": "2026-05-02T16:48:27.909046Z", "iopub.status.idle": "2026-05-02T16:48:27.912504Z", "shell.execute_reply": "2026-05-02T16:48:27.911684Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "after select_pop_by_nrn_attr('auditory', True): 777 cells\n", "after select_pop_by_nrn_attr('animal', 'ARM'): 165 cells\n" ] } ], "source": [ "ds.select_pop_by_nrn_attr('auditory', True)\n", "print(f\"after select_pop_by_nrn_attr('auditory', True): {len(ds._selected())} cells\")\n", "ds.reset_pop_selection()\n", "\n", "ds.select_pop_by_nrn_attr('animal', 'ARM')\n", "print(f\"after select_pop_by_nrn_attr('animal', 'ARM'): {len(ds._selected())} cells\")\n", "ds.reset_pop_selection()\n" ] }, { "cell_type": "markdown", "id": "be3bdd42", "metadata": {}, "source": [ "## 7. The `valid_mask` from `neural_collate`\n", "\n", "When the dataset feeds a `DataLoader` with `neural_collate`, the\n", "collator emits a fine-grained `(B, N, R, T)` bool mask alongside the\n", "NaN-padded responses tensor. Loss code uses this directly (see\n", "[`metrics_paradigm.md`](../docs/_source/md/metrics_paradigm.md) \u00a74) \u2014\n", "no need to re-scan for NaN positions." ] }, { "cell_type": "code", "execution_count": 8, "id": "f702acbb", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:48:27.914082Z", "iopub.status.busy": "2026-05-02T16:48:27.913946Z", "iopub.status.idle": "2026-05-02T16:49:07.403599Z", "shell.execute_reply": "2026-05-02T16:49:07.403001Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "stims: (4, 1, 18, 150) (B, 1, F, T)\n", "responses: (4, 744, 20, 150) (B, N, R_max, T_max)\n", "valid_mask: (4, 744, 20, 150) bool\n", "NaN cells in responses: 0 / 8,928,000\n", "valid_mask True count: 8,928,000 (should equal numel - NaN count)\n" ] } ], "source": [ "# small batched loader (val stims, restricted to auditory cells)\n", "ds.select_stims_by_attr('subset', 'val')\n", "ds.select_pop_by_nrn_attr('auditory', True)\n", "loader = DataLoader(ds, batch_size=4, shuffle=False, collate_fn=neural_collate)\n", "batch = next(iter(loader))\nstims, responses, valid_mask, stim_metas = batch['stims'], batch['responses'], batch['valid_mask'], batch['stim_meta']\n", "print(f\"stims: {tuple(stims.shape)} (B, 1, F, T)\")\n", "print(f\"responses: {tuple(responses.shape)} (B, N, R_max, T_max)\")\n", "print(f\"valid_mask: {tuple(valid_mask.shape)} bool\")\n", "print(f\"NaN cells in responses: {responses.isnan().sum().item():,} / {responses.numel():,}\")\n", "print(f\"valid_mask True count: {valid_mask.sum().item():,} (should equal numel - NaN count)\")\n", "ds.reset_stim_selection()\n", "ds.reset_pop_selection()\n" ] }, { "cell_type": "markdown", "id": "4b0902da", "metadata": {}, "source": [ "## 8. The PEG companion\n", "\n", "NAT4 ships a second area, **PEG** (parabelt secondary auditory cortex).\n", "Same protocol, different population." ] }, { "cell_type": "code", "execution_count": 9, "id": "fb415d70", "metadata": { "execution": { "iopub.execute_input": "2026-05-02T16:49:07.405282Z", "iopub.status.busy": "2026-05-02T16:49:07.405132Z", "iopub.status.idle": "2026-05-02T16:49:27.969288Z", "shell.execute_reply": "2026-05-02T16:49:27.968576Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/ulysse/miniconda3/envs/deepstrf_dev/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "download PEG_NAT4_ozgf.fs100.ch18.tgz: 0%| | 0.00/22.4M [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "joint = concat_neural_datasets([ds, ds_peg])\n", "print(f\"joint dataset:\")\n", "print(f\" cells: {joint.N_neurons}\")\n", "print(f\" stims: {len(joint.stims)}\")\n", "joint_total = joint.nrn_masks.sum().item()\n", "joint_grid = joint.nrn_masks.numel()\n", "print(f\" coverage: {joint_total:,} / {joint_grid:,} valid pairs ({100*joint_total/joint_grid:.1f}%)\")\n", "print(f\" cross-area sanity: {ds.nrn_masks.sum().item() + ds_peg.nrn_masks.sum().item():,} == {joint_total:,}\")\n", "\n", "# verify the block-diagonal structure visually for a small subsample\n", "fig, ax = plt.subplots(figsize=(9, 4))\n", "sub = joint.nrn_masks[::6, ::8] # every 6th stim, every 8th cell\n", "ax.imshow(sub.numpy().T, aspect='auto', cmap='Greys', interpolation='nearest')\n", "ax.axvline(len(ds.stims) // 6 - 0.5, color='red', lw=1.5, label='A1 | PEG stim boundary')\n", "ax.axhline(ds.N_neurons // 8 - 0.5, color='blue', lw=1.5, label='A1 | PEG cell boundary')\n", "ax.set_xlabel(\"stim (subsampled)\")\n", "ax.set_ylabel(\"cell (subsampled)\")\n", "ax.set_title(\"Block-diagonal A1 \u2295 PEG joint mask\")\n", "ax.legend(loc='lower right')\n", "plt.tight_layout(); plt.show()\n" ] }, { "cell_type": "markdown", "id": "888b6a93", "metadata": {}, "source": [ "## What's next\n", "\n", "- **End-to-end fit on NAT4** \u2014 the same `Fitter`/metrics stack from\n", " [`fit_ns1_statenet.ipynb`](fit_ns1_statenet.ipynb) ports to NAT4\n", " unchanged. The non-trivial bit is the est/val split: NAT4 already\n", " ships it, so use `subset='est'` for the train/val loaders and\n", " `subset='val'` for held-out evaluation.\n", "- **Cross-species pooling** \u2014 replace the A1+PEG concat above with\n", " e.g. NS1+NAT4_A1 to fit ferret + ferret jointly, or with CRCNS_AA1\n", " for cross-species.\n", "- **Stim selection tricks** \u2014 the bidirectional rule (\u00a75) makes\n", " per-stim-class evaluation a one-liner. Useful when reporting cc_norm\n", " on a particular stimulus class.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.15" } }, "nbformat": 4, "nbformat_minor": 5 }