{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "from pathlib import Path\n", "import re\n", "from collections import namedtuple\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib.patches import Rectangle, Polygon\n", "import scipy.stats as sstats\n", "from scipy.optimize import curve_fit\n", "import h5py" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class RunInfo(namedtuple(\"_Run\", (\"subject\", \"session\", \"domain\", \"run\", \"suffix\"))):\n", " \"\"\"a class for managing the run info based on single file names.\"\"\"\n", " \n", " PATTERN = re.compile(r\"([a-zA-Z0-9-]+)_([0-9-]+)-([0-9a-zA-Z-]+)_([a-zA-Z0-9-]+)_run([0-9-]+)\\.\")\n", " @classmethod\n", " def from_path(cls, path):\n", " path = Path(path)\n", " matched = cls.PATTERN.match(path.name)\n", " if not matched:\n", " raise ValueError(f\"does not match to the run pattern: {path.name}\")\n", " patlen = len(matched.group(0)) - 1\n", " return cls(matched.group(1),\n", " f\"{matched.group(2)}-{matched.group(3)}\",\n", " matched.group(4),\n", " matched.group(5),\n", " path.name[patlen:])\n", " \n", " def update(self, **kv):\n", " args = dict((attr, getattr(self, attr)) for attr in self._fields)\n", " for k, v in kv.items():\n", " if k not in args.keys():\n", " print(f\"***ignored: {k}={repr(v)}\")\n", " else:\n", " args[k] = v\n", " return self.__class__(**args)\n", " \n", " @property\n", " def name(self):\n", " return f\"{self.subject}_{self.session}_{self.domain}_run{self.run}{self.suffix}\"\n", "\n", " def to_path(self, root=None):\n", " if root is None:\n", " root = Path()\n", " return root / self.subject / self.session / self.name" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "root_realtime = Path(\"../../RawVideos\")\n", "root_posthoc = Path(\"../../PostHocEstimations\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Single session" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "sub = \"SNA-079258\"\n", "sess = \"2020-12-06-test\"\n", "run = \"131412\"" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "path_posthoc = sorted(p for p in (root_posthoc / sub / sess).glob(f\"*_run{run}.h5\"))[0]\n", "info = RunInfo.from_path(path_posthoc)\n", "path_realtime = info.update(domain=\"video\").to_path(root=root_realtime)\n", "assert(path_realtime.exists())" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RunInfo(subject='SNA-079258', session='2020-12-06-test', domain='posthoc', run='131412', suffix='.h5')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "info" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the contents of the `realtime` video file." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "realtime = h5py.File(str(path_realtime), \"r\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['estimation', 'frames', 'process_end', 'timestamps', 'trigger_status']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[k for k in realtime.keys()]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['evaluation={Tip2.x} < 320',\n", " 'exposure_us=200',\n", " 'frame_interval_mode=busy-wait',\n", " 'gain=0',\n", " 'height_px=480',\n", " 'target_frame_interval_ms=10',\n", " 'width_px=640']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[f\"{k}={v}\" for k, v in realtime.attrs.items()]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "realtime.close()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "posthoc = h5py.File(str(path_posthoc), \"r\")" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['DeepLabCut', 'Tip1', 'Tip2', 'Tip3', 'session']" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[k for k in posthoc.keys()]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "posthoc.close()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data retrieval\n", "\n", "The x-coordinates and the evaluation expressions are to be retrieved, to be compared between the real-time and the post-hoc data." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def noop(coords):\n", " return np.empty(coords.Tip1.size, dtype=np.float64)*np.nan\n", "\n", "def decompose_expression(expr):\n", " compiled = compile(expr, \"\", mode=\"eval\")\n", " for op in (\">=\", \"<=\", \">\", \"<\", \"!=\", \"==\"):\n", " if op not in expr:\n", " continue\n", " lhs, rhs = expr.split(op)\n", " cov_l = \"coords\" in lhs\n", " cov_r = \"coords\" in rhs\n", " if cov_l == True:\n", " if cov_r == True:\n", " raise ValueError(\"both lhs and rhs contain coordinate placeholders\")\n", " placeholder = compile(lhs, \"\", mode=\"eval\")\n", " constant = eval(rhs)\n", " if \">\" in op:\n", " sign = 1\n", " elif \"<\" in op:\n", " sign = -1\n", " else:\n", " sign = 0\n", " elif cov_r == True:\n", " placeholder = compile(rhs, \"\", mode=\"eval\")\n", " constant = eval(lhs)\n", " if \">\" in op:\n", " sign = -1\n", " elif \"<\" in op:\n", " sign = 1\n", " else:\n", " sign = 0\n", " else:\n", " placeholder = noop\n", " constant = np.nan\n", " sign = 0\n", " return placeholder, constant, sign, compiled\n", " \n", "\n", "class Evaluation(namedtuple(\"_Eval\", (\"expression\",\n", " \"placeholder\",\n", " \"constant\",\n", " \"sign\",\n", " \"compiled\"))):\n", " \"\"\"the representation of the expression to be evaluated.\n", " \n", " the references e.g. {Tip2.x} becomes replaced by `coords.Tip2`\n", " to be used with the Xcoords class.\n", " \n", " calling `Evaluation.compute_placeholder(xcoords)` returns the value of the placeholder part.\n", " calling `Evaluation.evaluate(xcoords)` returns the trigger (evaluation) status.\n", " \n", " expression -- the raw expression in string.\n", " placeholder -- the placeholder-part that changes from frame to frame, as a code object.\n", " constant -- the constant part to be referenced, as a number.\n", " sign -- the direction in which the value of the placeholder-part is more likely to be evaluated true.\n", " compiled -- the Boolean evaluation as a code object.\n", " \"\"\"\n", " @classmethod\n", " def from_hdf5(cls, path):\n", " with h5py.File(str(path), \"r\") as src:\n", " expr = src.attrs[\"evaluation\"]\n", " for part in Xcoords._fields:\n", " expr = expr.replace(f\"{{{part}.x}}\", f\"coords.{part}\")\n", " return cls(expr, *(decompose_expression(expr)))\n", "\n", " def compute_placeholder(self, coords):\n", " return eval(self.placeholder, dict(coords=coords))\n", " \n", " def evaluate(self, coords):\n", " return eval(self.compiled, dict(coords=coords))\n", "\n", "class Xcoords(namedtuple(\"_X\", (\"Tip1\", \"Tip2\", \"Tip3\"))):\n", " \"\"\"the x-coordinates of the tracked body parts during a session.\"\"\"\n", " @classmethod\n", " def from_hdf5(cls, path):\n", " out = dict()\n", " with h5py.File(str(path), \"r\") as src:\n", " for part in cls._fields:\n", " if \"estimation\" in src.keys():\n", " out[part] = np.array(src[f\"estimation/{part}/x\"])\n", " else:\n", " out[part] = np.array(src[f\"{part}/x\"])\n", " return cls(**out)\n", "\n", "def get_time(path):\n", " \"\"\"read timestamps info from the video.\"\"\"\n", " with h5py.File(str(path), \"r\") as src:\n", " t = np.array(src[\"timestamps\"])\n", " return t - t.min()\n", "\n", "def get_scale(path_posthoc):\n", " with h5py.File(str(path_posthoc), \"r\") as src:\n", " return src[\"session\"].attrs[\"px_per_mm\"]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "x = Xcoords.from_hdf5(path_realtime)\n", "e = Evaluation.from_hdf5(path_realtime)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(3, 1, figsize=(6, 4), sharex=True)\n", "axes[0].plot(x.Tip2)\n", "axes[1].plot(e.compute_placeholder(x))\n", "axes[2].plot(e.evaluate(x))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "realtime = Xcoords.from_hdf5(path_realtime)\n", "posthoc = Xcoords.from_hdf5(path_posthoc)\n", "t = get_time(path_realtime)\n", "px_per_mm = get_scale(path_posthoc)\n", "\n", "ev = Evaluation.from_hdf5(path_realtime)\n", "v_realtime = ev.compute_placeholder(realtime)\n", "v_posthoc = ev.compute_placeholder(posthoc)\n", "diff = v_realtime - v_posthoc\n", "trig_realtime = ev.evaluate(realtime)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def count_trigger(trigger):\n", " return np.count_nonzero(np.diff(trigger.astype(np.int64)) == 1)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "135" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "count_trigger(trig_realtime)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scale_x = 5\n", "scale_t = 1\n", "origin = (39, 20)\n", "name = info.update(domain='comparison', suffix=\"\").name\n", "\n", "fig = plt.figure(figsize=(4, 3))\n", "plt.plot(t, v_realtime/px_per_mm, lw=1, alpha=.8, c='m')\n", "plt.plot(t, v_posthoc/px_per_mm, lw=1, alpha=.5, c='k')\n", "plt.xlim(39, 49)\n", "plt.ylim(20, 50)\n", "plt.gca().add_patch(Rectangle(origin,0.09,scale_x, color=\"k\"))\n", "plt.gca().add_patch(Rectangle(origin,scale_t, 0.45, color=\"k\"))\n", "plt.title(f\"{name}\\nTip2.x, scale: x={scale_t} s, y={scale_x} mm\", fontsize=8)\n", "plt.gca().invert_yaxis()\n", "plt.gca().set_axis_off()\n", "plt.subplots_adjust(left=0, right=1, bottom=0, top=.9)\n", "\n", "outdir = Path(\"F01_trace-comparison\")\n", "if not outdir.exists():\n", " outdir.mkdir(parents=True)\n", "fig.savefig(str(outdir / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outdir / f\"{name}.svg\"))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-0.11203589353246307, 16.349442362552534)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff.mean(), diff.std(ddof=1)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "_ = plt.hist(diff, bins=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As the \"base\" data, the following arrays per session will be stored:\n", "\n", "1. `realtime`, `posthoc`: point-to-point estimations of the real-time and the post-hoc values.\n", "2. `trigger`: the trigger (evaluation) status during the real-time acquisition.\n", "\n", "In addition, `attrs['expression']` will store the expression used to compute values (as in the `evaluation` section of the raw videos).\n", "It would be also better having `attrs['px_per_mm']` (probably from the `posthoc` data)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculation of conditional probability\n", "\n", "Let $Q$ be the trigger status, where $Q=q$ indicates the trigger is ON, whereas $Q=\\overline{q}$ representing the cases the trigger is OFF.\n", "\n", "And let $V$ be the value to be evaluated (based on the body part estimations, e.g. `constant - {Tip2.x}` or `{Tip3.x} - {Tip1.x} - constant`). We can assume that the trigger is generated when $V > 0$ without losing generality.\n", "\n", "The \"accuracy\" of real-time evaluation would be estimated by computing the conditional probability $P\\left(Q=q \\mid V=v\\right)$. If the real-time accuracy is 100%, then it would turn out:\n", "\n", "$$P\\left(Q=q \\mid V=v\\right) = \\begin{cases}\n", "0 & (v <= 0) \\\\\n", "1 & (v > 0)\n", "\\end{cases}$$\n", "\n", "Otherwise the probability distribution of $P\\left(Q=q \\mid V=v\\right)$ would have a sigmoid shape. Here we assume that the threshold of real-time evaluation can be represented as a Gaussian shape, i.e. a cumulative Gaussian distribution can be fitted to the distribution of $P\\left(Q=q \\mid V=v\\right)$." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def calc_event_density(events, positions, std=3):\n", " \"\"\"kernel-density normalization using a Gaussian kernel.\n", " \n", " parameters\n", " ----------\n", " events -- the positions where trigger occurred.\n", " positions -- the series of positions on which the densities are computed.\n", " std -- the standard deviation of the Gaussian kernel (in the metric of `positions`).\n", " \"\"\"\n", " events = events.reshape((-1,1))\n", " positions = positions.reshape((1,-1))\n", " values = sstats.norm.pdf( (events - positions)/std )\n", " return values.sum(0)\n", "\n", "def valid_range(density, lower=3):\n", " \"\"\"returns a slice object corresponding to the 'valid' range, i.e. the density is high enough,\n", " to make sense of the fitting.\"\"\"\n", " supra = np.where(density > lower)[0]\n", " return slice(supra.min(), supra.max())\n", "\n", "\n", "def sigmoid(sign=1):\n", " \"\"\"the sigmoid curve, based on the cumulative function of a Gaussian distribution.\n", " \n", " if sign is 1, it generates the S-shaped curves. if sign is -1, it generates the Z-shaped curves.\n", " \"\"\"\n", " if sign == 1:\n", " def _sigmoid(x, mean, std):\n", " return sstats.norm.cdf(x, loc=mean, scale=std)\n", " elif sign == -1:\n", " def _sigmoid(x, mean, std):\n", " return 1-sstats.norm.cdf(x, loc=mean, scale=std)\n", " else:\n", " raise ValueError(f\"sign must be 1 or -1, got {sign}\")\n", " return _sigmoid\n", "\n", "def calc_conditional(density_all, density_triggered):\n", " siz = density_all.size\n", " pos = np.arange(siz)\n", " calced = density_all > 0\n", " p = np.interp(pos, pos[calced], density_triggered[calced] / density_all[calced])\n", " p[p > 1] = 1\n", " return p" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "positions = np.arange(0, 640*10)/10" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "density_all = calc_event_density(v_posthoc, positions, std=0.5*px_per_mm)\n", "density_triggered = calc_event_density(v_posthoc[trig_realtime], positions, std=0.5*px_per_mm)\n", "sign = ev.sign" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'sign=-1')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(positions, density_all)\n", "plt.plot(positions, density_triggered)\n", "plt.title(f\"sign={sign}\")" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "slice(1707, 5003, None)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "valid = valid_range(density_all)\n", "valid" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "labelsize = 14\n", "name = info.update(domain='densities', suffix=\"\").name\n", "\n", "target_mm = ev.constant / px_per_mm\n", "pos_mm = positions / px_per_mm - target_mm\n", "\n", "fig = plt.figure(figsize=(3,2.5))\n", "plt.fill_between(pos_mm, density_all,\n", " color=\"gray\", lw=0, alpha=.6)\n", "plt.fill_between(pos_mm, density_triggered,\n", " color=\"orange\", lw=0, alpha=.8)\n", "plt.xlim(150/px_per_mm - target_mm, 500/px_per_mm - target_mm)\n", "plt.ylim(0, 700)\n", "# plt.xticks((200, 300, 400))\n", "plt.yticks((0, 200, 400, 600))\n", "plt.title(f\"{name}\\nTip2.x\", fontsize=6)\n", "plt.xlabel(\"Position rel. to\\nthreshold (mm)\", fontsize=labelsize)\n", "plt.ylabel(\"Density (count)\", fontsize=labelsize)\n", "plt.tick_params(labelsize=labelsize)\n", "for side in (\"top\", \"right\"):\n", " plt.gca().spines[side].set_visible(False)\n", "plt.subplots_adjust(bottom=.3, left=.25, right=.95, top=.9)\n", "\n", "outdir = Path(\"F02_densities\")\n", "if not outdir.exists():\n", " outdir.mkdir(parents=True)\n", "fig.savefig(str(outdir / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outdir / f\"{name}.svg\"))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "vpos = positions[valid]\n", "vcond = calc_conditional(density_all[valid], density_triggered[valid])\n", "vsig = sigmoid(sign)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([,\n", " ,\n", " ],\n", " [Text(0, 0.0, '0'), Text(0, 0.5, '0.5'), Text(0, 1.0, '1')])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAASwElEQVR4nO3de2ykV3nH8d8z43c8Ho/tGV/i3az3ksAmsKFNQqyQCglRBO2qpU1BBQUE4g+kiAokqlaqoKoqIfWPSkgIFWhpVBBIrZpSFWgU0oZrFaqikl0SCJuQzTbX3ezdXt+v46d/zKzjeMf2jD3Z95zZ70dZ7byXeefJnuTns2fec15zdwEA4pdJuwAAQGsQ6ADQJgh0AGgTBDoAtAkCHQDaREdaHzw4OOgHDhxI6+MBIEpHjx694O5D9Y6lFugHDhzQkSNH0vp4AIiSmb2w0TGGXACgTRDoANAmCHQAaBMEOgC0CQIdANpEywLdzL5qZufM7JetuiYAoHGt7KF/TdLhFl4PANCElt2H7u6PmNmBRs8/Ozmvz3336VfvNHv1pjY9LFt3xpXHN39/dV+dna/1Z25xjStraPbPpYFrbPWeHbZFd2dW15e69PqhosrduToVAWi1qzqxyMzulXSvJOV2vV5f+NGJ1WMsy96+fn2kTx++a7/e++YRZTNb/PQCsG3Wygdc1HroD7r7m7Y6d3R01JuZKbq+zvVlr/+3uOL8utdcf43NP6MV72+2ziuukcJnrv+MLTYlSZNzSzp1aU6/PDWhB39xWr86M6W7buzX339oVH2FpM47ADTCzI66+2jdY7EEOuLl7vrXoyf1F9/6pd54fa/+5d67lE+yaZcFRGmzQOe2RbzmzEzvH92rv/nA7fr5S5f02Yef3vpNAJrWytsW/1nSTyTdbGYnzeyjrbo22sPhN+3SB9+yT1/7n+f17PnptMsB2k7LAt3dP+Duu909cfcRd/9Kq66N9vEn77pJnR0ZfeGHJ7Y+GUBTGHLBVTVY7NT77hjRd35xWmMzi2mXA7QVAh1X3Qffsl+LlRV9+7FTaZcCtBUCHVfdzbt6dNNwUd998kzapQBthUBHKn7r0C49+vy4xhl2AVqGQEcq3nloWJUV1yPPnE+7FKBtEOhIxa/t6VOxs0M/fW4s7VKAtkGgIxXZjOmO/WUCHWghAh2pufOGfj1zbloXpxfSLgVoCwQ6UnPH/rIk6RenJlKuBGgPBDpSc+j6XknSky9PplwJ0B4IdKSmN59oX39Bx16mhw60AoGOVN1yfa+O0UMHWoJAR6oO7e7VCxdnNTW/lHYpQPQIdKTq4HCPJOnZ8zMpVwLEj0BHql431C1JevYC66MDO0WgI1X7BgrKGD10oBUIdKSqsyOrvf0FPXuBQAd2ikBH6m4c7KaHDrQAgY7U3ThU1HMXprWy4mmXAkSNQEfqDgx2a35pRWcm59MuBYgagY7U7S13SZJOXZpLuRIgbgQ6UjdSLkiSTo0T6MBOEOhI3Z5StYd+cnw25UqAuBHoSF1XLqvBYk4n6aEDO0KgIwh7ygXG0IEdItARhJFSFz10YIcIdARhpNylU+Nz3IsO7ACBjiDsKXdpsbKiCzxfFNg2Ah1BGO7NS5LOThLowHYR6AjCrtVAZ7YosF0EOoKw2kOfItCB7SLQEYTBYk5m0tkJAh3YLgIdQejIZjRY7GQMHdgBAh3BGO7tZMgF2AECHcHY1Zunhw7sAIGOYFzXm+cuF2AHCHQEY7gnr7GZRS0sV9IuBYgSgY5gDPd2SpLOTzHsAmwHgY5gMFsU2BkCHcEYKOYkSRdZzwXYFgIdwRgsVodcLs4splwJECcCHcHo76aHDuwEgY5g5JOsejo7dGGaHjqwHQQ6gjJQzDHkAmwTgY6gDBQ7GXIBtolAR1AGizmeWgRsE4GOoFR76Ay5ANtBoCMog905jc0uqsLDooGmEegIykCxU+7S+Cy9dKBZBDqC8spsUQIdaBaBjqAMdNdmi/LFKNA0Ah1BGeqp9tDPE+hA0wh0BOWVHjpDLkCzCHQEpa8rUTZj3IsObAOBjqBkMqZyIdH47FLapQDRIdARnFIhp0vctgg0jUBHcPoLOY2xQBfQNAIdwSkVEl1iyAVoGoGO4JQLOWaKAttAoCM45e5qoLuzngvQDAIdwSkXEi1VXDOLlbRLAaJCoCM45UJ1tug4X4wCTSHQEZxy7WHRjKMDzSHQEZxyIZEkJhcBTSLQEZxSbciFyUVAcwh0BGe1h84YOtAUAh3B6etKZCaNMeQCNIVAR3A6shn15hOGXIAmEegIEisuAs0j0BGkcneOMXSgSQQ6gsR6LkDzCHQEiRUXgeYR6AhSPz10oGkEOoJU7s5pdrGi+SUW6AIaRaAjSKXa5CKGXYDGEegIUn9t+j+PogMaR6AjSKvrucwR6ECjCHQEiSEXoHkEOoK0+pAL7nQBGkagI0j00IHmEegIUj7JqivJMv0faAKBjmCxQBfQHAIdwSoVciyhCzSBQEewyt0JX4oCTSDQEaxqD50hF6BRBDqCVR1Dp4cONIpAR7DKhZwm5pa0suJplwJEgUBHsPq6Eq24NDW/nHYpQBQIdASL2aJAcwh0BKvcXZ0tSqADjWko0M3ssJk9bWYnzOxTdY6/3cwmzOzx2q+/bH2puNasrrjInS5AQzq2OsHMspK+JOldkk5KetTMHnD3J9ed+mN3f/drUCOuUQy5AM1ppId+p6QT7v6suy9Kul/S3a9tWUD1tkVJTP8HGtRIoO+R9NKa7ZO1fev9hpn93Mz+w8xuqXchM7vXzI6Y2ZHz589vo1xcS3rziTImpv8DDWok0K3OvvU3Bv9M0n53v1XSFyR9u96F3P0+dx9199GhoaGmCsW1J5Mx9XUxuQhoVCOBflLS3jXbI5JeXnuCu0+6+3Tt9UOSEjMbbFmVuGaVmf4PNKyRQH9U0kEzu8HMcpLukfTA2hPMbJeZWe31nbXrXmx1sbj2lAoJgQ40aMu7XNx92cw+IelhSVlJX3X3Y2b2sdrxL0v6Q0l/ZGbLkuYk3ePuzNfGjpULOZ2ZnE+7DCAKWwa6tDqM8tC6fV9e8/qLkr7Y2tIAqa+Q6FdnptIuA4gCM0URtHIhx5eiQIMIdAStXEg0u1jRwnIl7VKA4BHoCBrT/4HGEegIGtP/gcYR6Aja6vT/GXrowFYIdATt8pDLxBw9dGArBDqC9sqa6PTQga0Q6AgaY+hA4wh0BC2fZJVPMtzlAjSAQEfwSl05jc/QQwe2QqAjeKVCwhg60AACHcGrLqFLDx3YCoGO4JW7ecgF0AgCHcEr8ZALoCEEOoJXLiS6NLckltgHNkegI3jlQk6VFdfUwnLapQBBI9ARvNUVF1nPBdgUgY7grS7QxRejwKYIdASvxPR/oCEEOoJXqvXQudMF2ByBjuCxQBfQGAIdwevrSmTGErrAVgh0BC+bMfXmE6b/A1sg0BGFciFhDB3YAoGOKJQKOcbQgS0Q6IgCPXRgawQ6olCmhw5siUBHFFhxEdgagY4olAuJpheWtbi8knYpQLAIdESh1F1boGuOYRdgIwQ6olDqYvo/sBUCHVFYnf4/Qw8d2AiBjiiUVpfQpYcObIRARxQGitUe+hg9dGBDBDqiMNDdKUm6ML2QciVAuAh0RCHXkVGpkBDowCYIdERjsNip81MEOrARAh3RGCzm6KEDmyDQEY3BYqcuTPOlKLARAh3RGCx26gJDLsCGCHREY6inU1MLy5pfqqRdChAkAh3RGCpWb13ki1GgPgId0RjsqU4u4otRoD4CHdEYLF6eXMQXo0A9BDqiMciQC7ApAh3RuLyeC0MuQH0EOqLR2ZFVXxfT/4GNEOiICrNFgY0R6IgK67kAGyPQEZXh3rzOThLoQD0EOqKyuy+vMxPzcve0SwGCQ6AjKrv78lqsrPDkIqAOAh1R2dXXJUk6PTGfciVAeAh0RGV3X16SdIZAB65AoCMqlwP99CSBDqxHoCMqA8VOdWRMpy/NpV0KEBwCHVHJZkzDvXmGXIA6CHREZ3dfni9FgToIdERnV19eZxhDB65AoCM61R76HJOLgHUIdETn+lKX5pdWdJHJRcCrEOiIzr7+giTpxbHZlCsBwkKgIzr7B2qBfpFAB9Yi0BGdkTI9dKAeAh3RySdZ7erN6wV66MCrEOiI0r7+gl4cm0m7DCAoBDqitG+gwJALsA6Bjijt7y/o7OSC5pcqaZcCBINAR5T21e50ef4iwy7AZQQ6onTTcI8k6fjZ6ZQrAcJBoCNKNw51K5sxHT8zlXYpQDAIdESpsyOr/QMFHT9LoAOXEeiI1s3DPXrmHEMuwGUEOqJ1cLhHz1+c4U4XoIZAR7RuHu6Ru3SCXjogiUBHxA5d3ytJeuLURMqVAGEg0BGtAwMFlQqJHn/xUtqlAEEg0BEtM9Nte0t6/KVLaZcCBIFAR9Ru21vS8XNTml5YTrsUIHUEOqJ2+76y3MWwCyACHZEb3V9WkjX9+MT5tEsBUkegI2rdnR26Y39Zjxy/kHYpQOoIdETvbTcN6anTkzo3NZ92KUCqCHRE7+03XSdJ+u6xsylXAqSLQEf03ri7RwevK+rbj51KuxQgVQQ6omdmes+b9+jIC+N6gQde4BpGoKMtvPf2ESVZ01f++7m0SwFSQ6CjLezqy+s9t+/R/Y++pNMTc2mXA6SCQEfb+MRvHpRJ+swDT8rd0y4HuOoIdLSNfQMFffKdB/Wfx84w9IJrUssC3cwOm9nTZnbCzD7VqusCzfjY216nw7fs0l995yl9/vvHtVRZSbsk4KqxVvzV1Myyko5Lepekk5IelfQBd39yo/eMjo76kSNHdvzZwHrzSxV9+ptP6FuPndKBgYLeN7pXd93Yr9cP9ai3q0NmlnaJwXN3zSxWNDG3pEuzi5qYXdLY7KLGZqq/xmcWNTa7pPGZRU0vLKsjY0qyGRVyWfV35zRQ7NRAd04DxZzKhZxKhWT19958okyGNtguMzvq7qP1jnW06DPulHTC3Z+tfeD9ku6WtGGgA6+VfJLV595/q37v1t360o/+T599+OnVYx0ZU6mQqCOTUTZj6siashlTJpKQd3e5JLnka7ZX3OUuXe6fXd7vLrlqx3T5+NrtNeetufbcUkXLKxt39vq6EvV351QuJOrJd6iy4lquuE5PzOvYy5Mam1nU4gZ/O8pYtY2SbEZJNqNc1pR0ZJRd3wZ1mmT9rvU/nONoxddOqwJ9j6SX1myflPSW9SeZ2b2S7pWkffv2teijgSuZmd7xhmG94w3DOjs5rydOTui5CzMan13UpbklLVdWtLzi1SBaqaVb4Fwuk6n2j8xMpmpAXn5dPWay1XPWbNdOqHtMr4Sj1QK31JWoVEjU15Wor+uV3na5kKgju/lorbtramFZF6cXq3/ms4san1mqvV7SwnJFSxXXYmVFS8srWqysaO3Pj3ojB1fs8fWbETRiC3x/k2OtCvR6Pxiv/PN3v0/SfVJ1yKVFnw1sarg3r+FD+bTLuKaYmXrz1eGVG9Sddjlt5e8+tPGxVn0pelLS3jXbI5JebtG1AQANaFWgPyrpoJndYGY5SfdIeqBF1wYANKAlQy7uvmxmn5D0sKSspK+6+7FWXBsA0JhWjaHL3R+S9FCrrgcAaA4zRQGgTRDoANAmCHQAaBMEOgC0iZas5bKtDzY7L+mFBk8flMRj3eNF+8WN9gvLfncfqncgtUBvhpkd2WgxGoSP9osb7RcPhlwAoE0Q6ADQJmIJ9PvSLgA7QvvFjfaLRBRj6ACArcXSQwcAbIFAB4A2EUSgm9leM/uRmT1lZsfM7JO1/f1m9j0ze6b2e3nNez5deyD102b22+lVf20zs7yZ/dTMfl5ru8/U9tN2kTCzrJk9ZmYP1rZpu0gFEeiSliX9qbu/UdJdkj5uZockfUrSD9z9oKQf1LZVO3aPpFskHZb0t7UHVePqW5D0Dne/VdJtkg6b2V2i7WLySUlPrdmm7SIVRKC7+2l3/1nt9ZSq/3HtUfVB01+vnfZ1SX9Qe323pPvdfcHdn5N0QtUHVeMq86rp2mZS++Wi7aJgZiOSflfSP6zZTdtFKohAX8vMDki6XdL/Shp299NSNfQlXVc7rd5DqfdcxTKxRu2v7I9LOifpe+5O28Xj85L+TNLKmn20XaSCCnQzK0r6N0l/7O6Tm51aZx/3X6bE3Svufpuqz5K908zetMnptF0gzOzdks65+9FG31JnH20XkJY9sWinzCxRNcz/yd2/Wdt91sx2u/tpM9utag9Q4qHUQXL3S2b2X6qOr9J24XurpN83s9+RlJfUa2b/KNouWkH00M3MJH1F0lPu/rk1hx6Q9JHa649I+vc1++8xs04zu0HSQUk/vVr14hVmNmRmpdrrLknvlPQr0XbBc/dPu/uIux9Q9cvOH7r7h0TbRSuUHvpbJX1Y0hO1sVhJ+nNJfy3pG2b2UUkvSnqfJLn7MTP7hqQnVb1D5uPuXrnqVUOSdkv6eu1uh4ykb7j7g2b2E9F2seL/u0gx9R8A2kQQQy4AgJ0j0AGgTRDoANAmCHQAaBMEOgC0CQIdANoEgQ4AbeL/AUQg/zOZYD94AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(vpos, vcond)\n", "plt.xlim(190, 490)\n", "plt.ylim(-0.05, 1.05)\n", "plt.xticks((200, 300, 400))\n", "plt.yticks((0, 0.5, 1), (\"0\", \"0.5\", \"1\"))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "opt, cov = curve_fit(vsig, vpos, vcond, p0=(ev.constant, 1))" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "mean, std = opt" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "labelsize = 14\n", "name = info.update(domain='prob', suffix=\"\").name\n", "arrowbase = 1.15\n", "arrowheight = 0.1\n", "arrowwidth = 0.02\n", "\n", "color = \"m\"\n", "vpos_mm = vpos / px_per_mm\n", "target_mm = ev.constant / px_per_mm\n", "mean_mm = mean / px_per_mm\n", "delta_mm = mean_mm - target_mm\n", "std_mm = std / px_per_mm\n", "\n", "fig = plt.figure(figsize=(3,2.5))\n", "plt.plot(vpos_mm - target_mm, vcond, \"-\", lw=2.5, c=\"gray\", alpha=.8)\n", "plt.plot(vpos_mm - target_mm, vsig(vpos, mean, std), \"--\", c=color, lw=2, alpha=.8)\n", "\n", "for pos, col in ((0, \"k\"), (delta_mm, color)):\n", " plt.vlines(pos, -0.05, arrowbase, linewidth=1, linestyle=\"dashed\", color=col, alpha=.8)\n", " plt.gca().add_patch(Polygon(((pos-arrowwidth, arrowbase + arrowheight),\n", " (pos, arrowbase),\n", " (pos + arrowwidth, arrowbase + arrowheight)),\n", " color=col))\n", "plt.fill_betweenx((-0.05, 1.05), delta_mm - std_mm, delta_mm + std_mm,\n", " lw=0, color=color, alpha=.18)\n", "plt.xlim(-1.7, 0.8)\n", "plt.ylim(-0.05, 1.3)\n", "plt.xticks((-1.5, -1, -0.5, 0, 0.5), (\"\", \"-1\", \"\", \"0\", \"\"))\n", "plt.yticks((0, 0.5, 1), (\"0\", \"0.5\", \"1\"))\n", "plt.title(f\"{name}\\n{ev.expression}\", fontsize=6)\n", "plt.xlabel(\"Position rel. to\\nthreshold (mm)\", fontsize=labelsize)\n", "plt.ylabel(\"Trigger prob.\", fontsize=labelsize)\n", "plt.tick_params(labelsize=labelsize)\n", "for side in (\"top\", \"right\"):\n", " plt.gca().spines[side].set_visible(False)\n", "plt.subplots_adjust(bottom=.35, left=.25, right=.95, top=.9)\n", "\n", "outpath = Path(\"F03_conditional-probability\")\n", "if not outpath.exists():\n", " outpath.mkdir(parents=True)\n", "fig.savefig(str(outpath / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outpath / f\"{name}.svg\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Checking with the spread condition" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "sub = \"SNA-079258\"\n", "sess = \"2020-12-06-test\"\n", "run = \"132135\"" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "expression: 'coords.Tip3 - coords.Tip1 > 150'\n" ] } ], "source": [ "path_posthoc = sorted(p for p in (root_posthoc / sub / sess).glob(f\"*_run{run}.h5\"))[0]\n", "info = RunInfo.from_path(path_posthoc)\n", "path_realtime = info.update(domain=\"video\").to_path(root=root_realtime)\n", "assert(path_realtime.exists())\n", "\n", "realtime = Xcoords.from_hdf5(path_realtime)\n", "posthoc = Xcoords.from_hdf5(path_posthoc)\n", "t = get_time(path_realtime)\n", "px_per_mm = get_scale(path_posthoc)\n", "\n", "ev = Evaluation.from_hdf5(path_realtime)\n", "print(f\"expression: {repr(ev.expression)}\")\n", "v_realtime = ev.compute_placeholder(realtime)\n", "v_posthoc = ev.compute_placeholder(posthoc)\n", "diff = v_realtime - v_posthoc\n", "trig_realtime = ev.evaluate(realtime)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "_ = plt.hist(diff, bins=100)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(2,1,sharex=True)\n", "axes[0].plot(t, v_realtime/px_per_mm, lw=1)\n", "axes[1].plot(t, v_posthoc/px_per_mm, lw=1)\n", "# plt.xlim(20, 30)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "scale_x = -5\n", "scale_t = 1\n", "origin = (20, 28)\n", "name = info.update(domain='comparison', suffix=\"\").name\n", "\n", "fig = plt.figure(figsize=(4, 3))\n", "plt.plot(t, v_realtime/px_per_mm, lw=1, alpha=.8, c='g')\n", "plt.plot(t, v_posthoc/px_per_mm, lw=1, alpha=.5, c='k')\n", "plt.xlim(20, 30)\n", "plt.ylim(0, 30)\n", "plt.gca().add_patch(Rectangle(origin,0.09,scale_x, color=\"k\"))\n", "plt.gca().add_patch(Rectangle(origin,scale_t, 0.45, color=\"k\"))\n", "plt.title(f\"{name}\\nTip3.x - Tip1.x, scale: x={scale_t} s, y={scale_x} mm\", fontsize=8)\n", "\n", "plt.gca().set_axis_off()\n", "plt.subplots_adjust(left=0, right=1, bottom=0, top=.9)\n", "\n", "outdir = Path(\"F01_trace-comparison\")\n", "if not outdir.exists():\n", " outdir.mkdir(parents=True)\n", "fig.savefig(str(outdir / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outdir / f\"{name}.svg\"))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "density_all = calc_event_density(v_posthoc, positions, std=0.5*px_per_mm)\n", "density_triggered = calc_event_density(v_posthoc[trig_realtime], positions, std=0.5*px_per_mm)\n", "sign = ev.sign" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'sign=1')" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(positions, density_all)\n", "plt.plot(positions, density_triggered)\n", "plt.title(f\"sign={sign}\")" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "valid = valid_range(density_all)\n", "vpos = positions[valid]\n", "vcond = calc_conditional(density_all[valid], density_triggered[valid])\n", "vsig = sigmoid(sign)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(vpos, vcond)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "opt, cov = curve_fit(vsig, vpos, vcond, p0=(ev.constant, 1))\n", "mean, std = opt" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "labelsize = 14\n", "name = info.update(domain='densities', suffix=\"\").name\n", "\n", "target_mm = ev.constant / px_per_mm\n", "pos_mm = (positions - ev.constant) / px_per_mm\n", "\n", "fig = plt.figure(figsize=(3,2.5))\n", "plt.fill_between(pos_mm, density_all,\n", " color=\"gray\", lw=0, alpha=.6)\n", "plt.fill_between(pos_mm, density_triggered,\n", " color=\"orange\", lw=0, alpha=.8)\n", "plt.xlim(-12, 5)\n", "plt.ylim(0, 700)\n", "plt.xticks((-10, -5, 0))\n", "plt.yticks((0, 200, 400, 600))\n", "plt.title(f\"{name}\\n{ev.expression}\", fontsize=6)\n", "plt.xlabel(\"Value rel. to\\nthreshold(mm)\", fontsize=labelsize)\n", "plt.ylabel(\"Density (count)\", fontsize=labelsize)\n", "plt.tick_params(labelsize=labelsize)\n", "for side in (\"top\", \"right\"):\n", " plt.gca().spines[side].set_visible(False)\n", "plt.subplots_adjust(bottom=.3, left=.25, right=.95, top=.9)\n", "\n", "outdir = Path(\"F02_densities\")\n", "if not outdir.exists():\n", " outdir.mkdir(parents=True)\n", "fig.savefig(str(outdir / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outdir / f\"{name}.svg\"))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "target=14.42, mean=14.90, std=1.02\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "labelsize = 14\n", "name = info.update(domain='prob', suffix=\"\").name\n", "arrowbase = 1.15\n", "arrowheight = 0.1\n", "arrowwidth = 0.02\n", "\n", "color = \"g\"\n", "target_mm = ev.constant / px_per_mm\n", "vpos_mm = (vpos / px_per_mm) - target_mm\n", "mean_mm = (mean / px_per_mm) - target_mm\n", "std_mm = std / px_per_mm\n", "\n", "fig = plt.figure(figsize=(3,2.5))\n", "plt.plot(vpos_mm, vcond, \"-\", lw=2.5, c=\"gray\", alpha=.8)\n", "plt.plot(vpos_mm, vsig(vpos, mean, std), \"--\", c=color, lw=2, alpha=.8)\n", "\n", "for pos, col in ((0, \"k\"), (mean_mm, color)):\n", " plt.vlines(pos, -0.05, arrowbase, linewidth=1, linestyle=\"dashed\", color=col, alpha=.8)\n", " plt.gca().add_patch(Polygon(((pos-arrowwidth, arrowbase + arrowheight),\n", " (pos, arrowbase),\n", " (pos + arrowwidth, arrowbase + arrowheight)),\n", " color=col))\n", "plt.fill_betweenx((-0.05, 1.05), mean_mm - std_mm, mean_mm + std_mm,\n", " lw=0, color=color, alpha=.18)\n", "plt.xlim(-0.9, 1.6)\n", "plt.ylim(-0.05, 1.3)\n", "plt.xticks((-0.5, 0, 0.5, 1, 1.5), (\"\", \"0\", \"\", \"1\", \"\"))\n", "plt.yticks((0, 0.5, 1), (\"0\", \"0.5\", \"1\"))\n", "plt.title(f\"{name}\\n{ev.expression}\", fontsize=6)\n", "plt.xlabel(\"Value rel. to\\nthreshold (mm)\", fontsize=labelsize)\n", "plt.ylabel(\"Trigger prob.\", fontsize=labelsize)\n", "plt.tick_params(labelsize=labelsize)\n", "for side in (\"top\", \"right\"):\n", " plt.gca().spines[side].set_visible(False)\n", "plt.subplots_adjust(bottom=.35, left=.25, right=.95, top=.9)\n", "\n", "outpath = Path(\"F03_conditional-probability\")\n", "if not outpath.exists():\n", " outpath.mkdir(parents=True)\n", "fig.savefig(str(outpath / f\"{name}.png\"), dpi=400)\n", "fig.savefig(str(outpath / f\"{name}.svg\"))\n", "print(f\"target={ev.constant/px_per_mm:.2f}, mean={mean/px_per_mm:.2f}, std={std/px_per_mm:.2f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `density` field will contain the event-density information, including:\n", "\n", "1. `density/positions` -- evenly-spaced position-value parameter (both \"valid\" and the other ranges).\n", "2. `density/all` -- the density of all the position-values (based on the post-hoc estimation)\n", "3. `density/triggered` -- the density of the position-values when the trigger was ON.\n", "4. `density/kernel` -- the info of the Gaussian kernel in `attrs`:\n", " - `type=Gaussian`\n", " - `std=`\n", "\n", "The `conditional` field will contain the conditional probability information, including:\n", "\n", "1. `conditional/values` -- the \"valid\" values used in calculation.\n", "2. `conditional/probability` -- the probability distribution.\n", "3. `conditional.attrs` -- info of the fitted sigmoid curve:\n", " - `sigmoid_sign=`\n", " - `sigmoid_mean=`\n", " - `sigmoid_std=`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Batch processing" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "class BaseData(namedtuple(\"_Base\", (\"time\", \"realtime\", \"posthoc\", \"evaluation\", \"trigger\", \"px_per_mm\"))):\n", " \"\"\"a class responsible for storage of 'values' and 'trigger' entries.\"\"\"\n", " @classmethod\n", " def from_paths(cls, path_realtime, path_posthoc, min_event_count=20):\n", " realtime = Xcoords.from_hdf5(path_realtime)\n", " posthoc = Xcoords.from_hdf5(path_posthoc)\n", " t = get_time(path_realtime)\n", " scale = get_scale(path_posthoc)\n", "\n", " ev = Evaluation.from_hdf5(path_realtime)\n", " trig = ev.evaluate(realtime)\n", " ntrig = count_trigger(trig)\n", " if ntrig < min_event_count:\n", " raise RuntimeError(f\"too small event number ({ntrig})\")\n", " return cls(t, realtime, posthoc, ev, trig, scale)\n", " \n", " def write_hdf5(self, parent, compression=5, jump_threshold_mm=10):\n", " opts = dict(compression=compression)\n", " \n", " parent.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " # raw pose data\n", " root = parent.create_group(\"pose\")\n", " root.attrs[\"description\"] = \"point-to-point comparison of the real-time and the post-hoc body-part estimation data.\"\n", " root.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " time = root.create_dataset(\"time\", data=self.time, **opts)\n", " time.attrs[\"description\"] = \"the time base of the series values, based on the timestamp field of the video\"\n", " time.attrs[\"unit\"] = \"s\"\n", " \n", " for adj, val in ((\"real-time\", self.realtime),\n", " (\"post-hoc\", self.posthoc)):\n", " lab = adj.replace(\"-\", \"\")\n", " group = root.create_group(lab)\n", " group.attrs[\"description\"] = f\"the {adj} body-part estimation.\"\n", " group.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " for attr in val._fields:\n", " data = group.create_dataset(attr, data=getattr(val, attr), **opts)\n", " data.attrs[\"description\"] = f\"the {adj} estimation of {attr} (x-coordinates).\"\n", " data.attrs[\"unit\"] = \"px\"\n", " data.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " # jump frequency data\n", " jump = root[\"realtime\"].create_group(\"jump\")\n", " jump.attrs[\"description\"] = \"the frequency of 'jump' events in real-time pose estimation.\"\n", " jump.attrs[\"threshold_mm\"] = jump_threshold_mm\n", " jump.attrs[\"unit\"] = \"count/count\"\n", " \n", " threshold_px = jump_threshold_mm / self.px_per_mm\n", " for attr in self.realtime._fields:\n", " data = getattr(self.realtime, attr)\n", " diff = np.abs(np.diff(data))\n", " jump_freq = np.count_nonzero(diff > threshold_px) / diff.size\n", " jump.attrs[attr] = jump_freq \n", " \n", " # evaluation data\n", " root = parent.create_group(\"evaluation\")\n", " root.attrs[\"description\"] = \"the time-series evaluation data where the event densities were computed from.\"\n", " root.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " time = root.create_dataset(\"time\", data=self.time, **opts)\n", " time.attrs[\"description\"] = \"the time base of the series values, based on the timestamp field of the video\"\n", " time.attrs[\"unit\"] = \"s\"\n", " for adj, val in ((\"real-time\", self.evaluation.compute_placeholder(self.realtime)),\n", " (\"post-hoc\", self.evaluation.compute_placeholder(self.posthoc))):\n", " lab = adj.replace(\"-\", \"\")\n", " data = root.create_dataset(lab, data=val, **opts)\n", " data.attrs[\"description\"] = f\"the 'left-hand side' values, from which evaluation is performed, based on the {adj} estimation.\"\n", " data.attrs[\"unit\"] = \"px\"\n", " data.attrs[\"px_per_mm\"] = self.px_per_mm\n", " \n", " trigger = root.create_dataset(\"trigger\", data=self.trigger, **opts)\n", " trigger.attrs[\"description\"] = \"the status of pose-trigger during the real-time acquisition.\"\n", " \n", " for entry in (root, trigger):\n", " entry.attrs[\"expression\"] = self.evaluation.expression\n", "\n", "class Densities(namedtuple(\"_Densities\", (\"positions\", \"std\", \"all\", \"triggered\"))):\n", " \"\"\"a class responsible for calculation and storage of the 'densities' entry.\"\"\"\n", " @classmethod\n", " def from_basedata(cls, basedata, positions=None, std_mm=0.5):\n", " if positions is None:\n", " positions = np.arange(-100, 640*10)/10\n", " std = std_mm * basedata.px_per_mm\n", " values = basedata.evaluation.compute_placeholder(basedata.posthoc)\n", " density_all = calc_event_density(values, positions, std=std)\n", " density_triggered = calc_event_density(values[basedata.trigger], positions, std=std)\n", " return cls(positions, std,\n", " density_all, density_triggered)\n", " \n", " def write_hdf5(self, parent, compression=5):\n", " opts = dict(compression=compression)\n", " root = parent.create_group(\"densities\")\n", " root.attrs[\"description\"] = \"kernel-density estimation of the base position-value data.\"\n", " \n", " pos = root.create_dataset(\"positions\", data=self.positions, **opts)\n", " pos.attrs[\"description\"] = \"the position-values where densities were computed using kernel-density estimation.\"\n", " pos.attrs[\"unit\"] = \"px\"\n", " d_all = root.create_dataset(\"all\", data=self.all, **opts)\n", " d_all.attrs[\"description\"] = \"the estimated density for position-values during the whole acquisition, based on the post-hoc estimations.\"\n", " d_all.attrs[\"unit\"] = \"count\"\n", " d_trig = root.create_dataset(\"triggered\", data=self.triggered, **opts)\n", " d_trig.attrs[\"description\"] = \"the estimated density for position-values when the real-time trigger was ON.\"\n", " \n", " kernel = root.create_group(\"kernel\")\n", " kernel.attrs[\"description\"] = \"the information of the kernel used for density estimation.\"\n", " kernel.attrs[\"type\"] = \"Gaussian\"\n", " kernel.attrs[\"std\"] = self.std\n", "\n", "class Probability(namedtuple(\"_Prob\", (\"positions\", \"values\", \"target\", \"cutoff\", \"sigmoid\"))):\n", " \"\"\"a class responsible for calculation and storage of the conditional probability.\"\"\"\n", " @classmethod\n", " def from_densities(cls, densities, sign=0, cutoff=3, target=100):\n", " valid = valid_range(densities.all, lower=cutoff)\n", " vpos = densities.positions[valid]\n", " vcond = calc_conditional(densities.all[valid], densities.triggered[valid])\n", " vsig = sigmoid(sign)\n", " opt, cov = curve_fit(vsig, vpos, vcond, p0=(target, 1))\n", " mean, std = opt\n", " return cls(vpos, vcond, target, cutoff, dict(sign=sign, mean=mean, std=std))\n", " \n", " def write_hdf5(self, parent, compression=5):\n", " opts = dict(compression=compression)\n", " root = parent.create_group(\"conditional\")\n", " root.attrs[\"description\"] = \"conditional probability of the real-time trigger at the given post-hoc position-values.\"\n", " root.attrs[\"original_target_position_px\"] = self.target\n", " root.attrs[\"cutoff_density_count\"] = self.cutoff\n", " \n", " pos = root.create_dataset(\"positions\", data=self.positions, **opts)\n", " pos.attrs[\"description\"] = \"the position-value axis of the conditional probability.\"\n", " pos.attrs[\"unit\"] = \"px\"\n", " val = root.create_dataset(\"probability\", data=self.values, **opts)\n", " val.attrs[\"description\"] = \"the conditional probability at the given position-value.\"\n", " val.attrs[\"unit\"] = \"\"\n", " sig = root.create_group(\"sigmoid\")\n", " sig.attrs[\"description\"] = \"the results of the sigmoid fitting to the conditional probability distribution.\"\n", " for k, v in self.sigmoid.items():\n", " sig.attrs[k] = v\n", "\n", "class VideoAnalysis(namedtuple(\"_Video\", (\"info\", \"basedata\", \"densities\", \"probability\"))):\n", " \"\"\"a class representing the analysis of a single video.\"\"\"\n", " @classmethod\n", " def from_posthoc(cls, path_posthoc, root_realtime=root_realtime,\n", " positions=None, min_event_count=30,\n", " density_kernel_std_mm=0.5, density_cutoff=3):\n", " info = RunInfo.from_path(path_posthoc).update(domain=\"analysis\")\n", " path_realtime = info.update(domain=\"video\").to_path(root=root_realtime)\n", " base = BaseData.from_paths(path_realtime, path_posthoc, min_event_count=min_event_count)\n", " dens = Densities.from_basedata(base, positions=positions, std_mm=density_kernel_std_mm)\n", " prob = Probability.from_densities(dens, sign=base.evaluation.sign,\n", " cutoff=density_cutoff, target=base.evaluation.constant)\n", " return cls(info, base, dens, prob)\n", " \n", " def write_hdf5(self, name, parent, compression=5, verbose=True):\n", " if verbose == True:\n", " print(f\"{name}: {self.info.subject}/{self.info.session}/run{self.info.run}...\", end=\" \", flush=True)\n", " entry = parent.create_group(name)\n", " entry.attrs[\"subject\"] = self.info.subject\n", " entry.attrs[\"session\"] = self.info.session\n", " entry.attrs[\"run\"] = self.info.run\n", " entry.attrs[\"expression\"] = self.basedata.evaluation.expression\n", " for sub in (self.basedata, self.densities, self.probability):\n", " sub.write_hdf5(entry, compression=compression)\n", " if verbose == True:\n", " print(\"done (expr='{expr}', sign={sign}).\".format(expr=self.basedata.evaluation.expression,\n", " sign=self.probability.sigmoid[\"sign\"]), flush=True)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "001: MLA-041630/2020-09-11-test/run151428... done (expr='coords.Tip2 < 300', sign=-1).\n", "002: MLA-041630/2020-09-11-test/run151508... done (expr='coords.Tip2 < 300', sign=-1).\n", "003: MLA-041630/2020-09-11-test/run151803... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "004: MLA-041630/2020-09-11-test/run151850... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "005: MLA-041630/2020-09-11-test/run151932... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "006: S005-19/2020-09-11-test/run141942... done (expr='coords.Tip2 < 250', sign=-1).\n", "007: S005-19/2020-09-11-test/run142512... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "008: S006-19/2020-09-11-test/run150832... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "009: S006-19/2020-09-11-test/run150918... done (expr='coords.Tip3 - coords.Tip1 > 80', sign=1).\n", "010: S006-19/2020-09-11-test/run151019... done (expr='coords.Tip2 < 300', sign=-1).\n", "011: SNA-079258/2020-12-06-test/run131412... done (expr='coords.Tip2 < 320', sign=-1).\n", "012: SNA-079258/2020-12-06-test/run131608... done (expr='coords.Tip3 - coords.Tip1 > 150', sign=1).\n", "013: SNA-079258/2020-12-06-test/run131746... done (expr='coords.Tip2 < 330', sign=-1).\n", "014: SNA-079258/2020-12-06-test/run131918... done (expr='coords.Tip2 < 380', sign=-1).\n", "015: SNA-079258/2020-12-06-test/run132135... done (expr='coords.Tip3 - coords.Tip1 > 150', sign=1).\n", "016: SNA-079258/2020-12-07-test/run095428... done (expr='coords.Tip2 < 350', sign=-1).\n", "017: SNA-079258/2020-12-07-test/run095655... done (expr='coords.Tip3 - coords.Tip1 > 150', sign=1).\n", "018: SNA-079258/2020-12-07-test/run095828... done (expr='coords.Tip3 - coords.Tip1 > 160', sign=1).\n", "019: SNA-079258/2020-12-07-test/run095926... done (expr='coords.Tip2 < 280', sign=-1).\n", "020: SNA-079259/2020-12-11-test/run172446... done (expr='coords.Tip2 < 330', sign=-1).\n", "021: SNA-079259/2020-12-11-test/run172545... done (expr='coords.Tip2 < 350', sign=-1).\n", "022: SNA-079259/2020-12-11-test/run172704... done (expr='coords.Tip3 - coords.Tip1 > 180', sign=1).\n", "023: SNA-079259/2020-12-11-test/run172759... done (expr='coords.Tip3 - coords.Tip1 > 150', sign=1).\n", "024: SNA-079259/2020-12-11-test/run172902... done (expr='coords.Tip2 < 300', sign=-1).\n", "025: SNA-079260/2020-12-11-test/run165629... done (expr='coords.Tip2 < 320', sign=-1).\n", "026: SNA-079260/2020-12-11-test/run165715... done (expr='coords.Tip2 < 320', sign=-1).\n", "027: SNA-079260/2020-12-11-test/run165827... done (expr='coords.Tip2 < 340', sign=-1).\n", "028: SNA-079260/2020-12-11-test/run170027... done (expr='coords.Tip3 - coords.Tip1 > 180', sign=1).\n", "029: SNA-079260/2020-12-11-test/run170129... done (expr='coords.Tip3 - coords.Tip1 > 200', sign=1).\n", "030: SNA-079260/2020-12-11-test/run170247... done (expr='coords.Tip2 < 300', sign=-1).\n", "done 30 videos.\n" ] } ], "source": [ "index = 1\n", "positions = np.arange(-1000, 6400)/10\n", "\n", "with h5py.File(\"analyzed-data.h5\", \"w\") as out:\n", " for subdir in sorted(root_posthoc.iterdir()):\n", " if not subdir.is_dir():\n", " continue\n", " for sessdir in sorted(subdir.glob(\"2020-*\")):\n", " if not sessdir.is_dir():\n", " continue\n", " for path_posthoc in sorted(sessdir.glob(\"*.h5\")):\n", " try:\n", " data = VideoAnalysis.from_posthoc(path_posthoc,\n", " root_realtime=root_realtime,\n", " positions=positions)\n", " data.write_hdf5(str(index).zfill(3), out, verbose=True)\n", " index += 1\n", " except RuntimeError as e:\n", " print(f\"***{path_posthoc.stem.replace('_', '/')}: {e}\", flush=True)\n", "print(f\"done {index-1} videos.\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }