diff --git a/docs/notebooks/dwi_gp_representation.ipynb b/docs/notebooks/dwi_gp_representation.ipynb new file mode 100644 index 00000000..8ee14cae --- /dev/null +++ b/docs/notebooks/dwi_gp_representation.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "metadata": {}, + "cell_type": "markdown", + "source": "Gaussian process notebook", + "id": "486923b289155658" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-06-02T00:27:25.717998Z", + "start_time": "2024-06-02T00:27:23.863453Z" + } + }, + "cell_type": "code", + "source": [ + "import tempfile\n", + "from pathlib import Path\n", + "\n", + "import numpy as np\n", + "from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel\n", + "\n", + "from eddymotion import model\n", + "from eddymotion.data.dmri import DWI\n", + "from eddymotion.data.splitting import lovo_split\n", + "\n", + "datadir = Path(\"../../test\") # Adapt to your local path or download to a temp location using wget\n", + "\n", + "kernel = DotProduct() + WhiteKernel()\n", + "\n", + "dwi = DWI.from_filename(datadir / \"dwi.h5\")\n", + "\n", + "_dwi_data = dwi.dataobj\n", + "# Use a subset of the data for now to see that something is written to the\n", + "# output\n", + "# bvecs = dwi.gradients[:3, :].T\n", + "bvecs = dwi.gradients[:3, 10:13].T # b0 values have already been masked\n", + "# bvals = dwi.gradients[3:, 10:13].T # Only for inspection purposes: [[1005.], [1000.], [ 995.]]\n", + "dwi_data = _dwi_data[60:63, 60:64, 40:45, 10:13]\n", + "\n", + "# ToDo\n", + "# Provide proper values/estimates for these\n", + "a = 1\n", + "h = 1 # should be a NIfTI image\n", + "\n", + "num_iterations = 5\n", + "gp = model.GaussianProcessModel(\n", + " dwi=dwi, a=a, h=h, kernel=kernel, num_iterations=num_iterations\n", + ")\n", + "indices = list(range(bvecs.shape[0]))\n", + "# ToDo\n", + "# This should be done within the GP model class\n", + "# Apply lovo strategy properly\n", + "# Vectorize and parallelize\n", + "result_mean = np.zeros_like(dwi_data)\n", + "result_stddev = np.zeros_like(dwi_data)\n", + "for idx in indices:\n", + " lovo_idx = np.ones(len(indices), dtype=bool)\n", + " lovo_idx[idx] = False\n", + " X = bvecs[lovo_idx]\n", + " for i in range(dwi_data.shape[0]):\n", + " for j in range(dwi_data.shape[1]):\n", + " for k in range(dwi_data.shape[2]):\n", + " # ToDo\n", + " # Use a mask to avoid traversing background data\n", + " y = dwi_data[i, j, k, lovo_idx]\n", + " gp.fit(X, y)\n", + " pred_mean, pred_stddev = gp.predict(\n", + " bvecs[idx, :][np.newaxis]\n", + " ) # Can take multiple values X[:2, :]\n", + " result_mean[i, j, k, idx] = pred_mean.item()\n", + " result_stddev[i, j, k, idx] = pred_stddev.item()" + ], + "id": "da2274009534db61", + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[0;31mKeyboardInterrupt\u001B[0m Traceback (most recent call last)", + "Cell \u001B[0;32mIn[3], line 21\u001B[0m\n\u001B[1;32m 17\u001B[0m _dwi_data \u001B[38;5;241m=\u001B[39m dwi\u001B[38;5;241m.\u001B[39mdataobj\n\u001B[1;32m 18\u001B[0m \u001B[38;5;66;03m# Use a subset of the data for now to see that something is written to the\u001B[39;00m\n\u001B[1;32m 19\u001B[0m \u001B[38;5;66;03m# output\u001B[39;00m\n\u001B[1;32m 20\u001B[0m \u001B[38;5;66;03m# bvecs = dwi.gradients[:3, :].T\u001B[39;00m\n\u001B[0;32m---> 21\u001B[0m bvecs \u001B[38;5;241m=\u001B[39m \u001B[43mdwi\u001B[49m\u001B[38;5;241m.\u001B[39mgradients[:\u001B[38;5;241m3\u001B[39m, \u001B[38;5;241m10\u001B[39m:\u001B[38;5;241m13\u001B[39m]\u001B[38;5;241m.\u001B[39mT \u001B[38;5;66;03m# b0 values have already been masked\u001B[39;00m\n\u001B[1;32m 22\u001B[0m \u001B[38;5;66;03m# bvals = dwi.gradients[3:, 10:13].T # Only for inspection purposes: [[1005.], [1000.], [ 995.]]\u001B[39;00m\n\u001B[1;32m 23\u001B[0m dwi_data \u001B[38;5;241m=\u001B[39m _dwi_data[\u001B[38;5;241m60\u001B[39m:\u001B[38;5;241m63\u001B[39m, \u001B[38;5;241m60\u001B[39m:\u001B[38;5;241m64\u001B[39m, \u001B[38;5;241m40\u001B[39m:\u001B[38;5;241m45\u001B[39m, \u001B[38;5;241m10\u001B[39m:\u001B[38;5;241m13\u001B[39m]\n", + "Cell \u001B[0;32mIn[3], line 21\u001B[0m\n\u001B[1;32m 17\u001B[0m _dwi_data \u001B[38;5;241m=\u001B[39m dwi\u001B[38;5;241m.\u001B[39mdataobj\n\u001B[1;32m 18\u001B[0m \u001B[38;5;66;03m# Use a subset of the data for now to see that something is written to the\u001B[39;00m\n\u001B[1;32m 19\u001B[0m \u001B[38;5;66;03m# output\u001B[39;00m\n\u001B[1;32m 20\u001B[0m \u001B[38;5;66;03m# bvecs = dwi.gradients[:3, :].T\u001B[39;00m\n\u001B[0;32m---> 21\u001B[0m bvecs \u001B[38;5;241m=\u001B[39m \u001B[43mdwi\u001B[49m\u001B[38;5;241m.\u001B[39mgradients[:\u001B[38;5;241m3\u001B[39m, \u001B[38;5;241m10\u001B[39m:\u001B[38;5;241m13\u001B[39m]\u001B[38;5;241m.\u001B[39mT \u001B[38;5;66;03m# b0 values have already been masked\u001B[39;00m\n\u001B[1;32m 22\u001B[0m \u001B[38;5;66;03m# bvals = dwi.gradients[3:, 10:13].T # Only for inspection purposes: [[1005.], [1000.], [ 995.]]\u001B[39;00m\n\u001B[1;32m 23\u001B[0m dwi_data \u001B[38;5;241m=\u001B[39m _dwi_data[\u001B[38;5;241m60\u001B[39m:\u001B[38;5;241m63\u001B[39m, \u001B[38;5;241m60\u001B[39m:\u001B[38;5;241m64\u001B[39m, \u001B[38;5;241m40\u001B[39m:\u001B[38;5;241m45\u001B[39m, \u001B[38;5;241m10\u001B[39m:\u001B[38;5;241m13\u001B[39m]\n", + "File \u001B[0;32m/snap/pycharm-professional/387/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_frame.py:888\u001B[0m, in \u001B[0;36mPyDBFrame.trace_dispatch\u001B[0;34m(self, frame, event, arg)\u001B[0m\n\u001B[1;32m 885\u001B[0m stop \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mFalse\u001B[39;00m\n\u001B[1;32m 887\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m plugin_stop:\n\u001B[0;32m--> 888\u001B[0m stopped_on_plugin \u001B[38;5;241m=\u001B[39m \u001B[43mplugin_manager\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m(\u001B[49m\u001B[43mmain_debugger\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mevent\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_args\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstop_info\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43marg\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstep_cmd\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 889\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m stop:\n\u001B[1;32m 890\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m is_line:\n", + "File \u001B[0;32m/snap/pycharm-professional/387/plugins/python/helpers-pro/jupyter_debug/pydev_jupyter_plugin.py:169\u001B[0m, in \u001B[0;36mstop\u001B[0;34m(plugin, pydb, frame, event, args, stop_info, arg, step_cmd)\u001B[0m\n\u001B[1;32m 167\u001B[0m frame \u001B[38;5;241m=\u001B[39m suspend_jupyter(main_debugger, thread, frame, step_cmd)\n\u001B[1;32m 168\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m frame:\n\u001B[0;32m--> 169\u001B[0m \u001B[43mmain_debugger\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdo_wait_suspend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mthread\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mevent\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43marg\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 170\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;01mTrue\u001B[39;00m\n\u001B[1;32m 171\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;01mFalse\u001B[39;00m\n", + "File \u001B[0;32m/snap/pycharm-professional/387/plugins/python/helpers/pydev/pydevd.py:1185\u001B[0m, in \u001B[0;36mPyDB.do_wait_suspend\u001B[0;34m(self, thread, frame, event, arg, send_suspend_message, is_unhandled_exception)\u001B[0m\n\u001B[1;32m 1182\u001B[0m from_this_thread\u001B[38;5;241m.\u001B[39mappend(frame_id)\n\u001B[1;32m 1184\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_threads_suspended_single_notification\u001B[38;5;241m.\u001B[39mnotify_thread_suspended(thread_id, stop_reason):\n\u001B[0;32m-> 1185\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_do_wait_suspend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mthread\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mframe\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mevent\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43marg\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43msuspend_type\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mfrom_this_thread\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m/snap/pycharm-professional/387/plugins/python/helpers/pydev/pydevd.py:1200\u001B[0m, in \u001B[0;36mPyDB._do_wait_suspend\u001B[0;34m(self, thread, frame, event, arg, suspend_type, from_this_thread)\u001B[0m\n\u001B[1;32m 1197\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_call_mpl_hook()\n\u001B[1;32m 1199\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mprocess_internal_commands()\n\u001B[0;32m-> 1200\u001B[0m \u001B[43mtime\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msleep\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m0.01\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1202\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcancel_async_evaluation(get_current_thread_id(thread), \u001B[38;5;28mstr\u001B[39m(\u001B[38;5;28mid\u001B[39m(frame)))\n\u001B[1;32m 1204\u001B[0m \u001B[38;5;66;03m# process any stepping instructions\u001B[39;00m\n", + "\u001B[0;31mKeyboardInterrupt\u001B[0m: " + ] + } + ], + "execution_count": 3 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "Plot the data", + "id": "77e77cd4c73409d3" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from matplotlib import pyplot as plt \n", + "%matplotlib inline\n", + "\n", + "s = dwi_data[1, 1, 2, :]\n", + "s_hat_mean = result_mean[1, 1, 2, :]\n", + "s_hat_stddev = result_stddev[1, 1, 2, :]\n", + "x = np.asarray(indices)\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, s_hat_mean, c=\"orange\", label=\"predicted\")\n", + "plt.fill_between(\n", + " x.ravel(),\n", + " s_hat_mean - 1.96 * s_hat_stddev,\n", + " s_hat_mean + 1.96 * s_hat_stddev,\n", + " alpha=0.5,\n", + " color=\"orange\",\n", + " label=r\"95% confidence interval\",\n", + ")\n", + "plt.scatter(x, s, c=\"b\", label=\"ground truth\")\n", + "ax.set_xlabel(\"bvec indices\")\n", + "ax.set_ylabel(\"signal\")\n", + "ax.legend()\n", + "plt.title(\"Gaussian process regression on dataset\")\n", + "\n", + "plt.show()" + ], + "id": "4e51f22890fb045a", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 22 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "Plot the DWI signal for a given voxel\n", + "Compute the DWI signal value wrt the b0 (how much larger/smaller is and add that delta to the unit sphere?) for each bvec direction and plot that?" + ], + "id": "694a4c075457425d" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-06-02T00:27:25.877396Z", + "start_time": "2024-06-02T00:27:25.875327Z" + } + }, + "cell_type": "code", + "source": [ + "# from mpl_toolkits.mplot3d import Axes3D\n", + "# fig, ax = plt.subplots()\n", + "# ax = fig.add_subplot(111, projection='3d')\n", + "# plt.scatter(xx, yy, zz)" + ], + "id": "bb7d2aef53ac99f0", + "outputs": [], + "execution_count": 23 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "Plot the DWI signal brain data\n", + "id": "62d7bc609b65c7cf" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-06-02T00:27:25.883846Z", + "start_time": "2024-06-02T00:27:25.879127Z" + } + }, + "cell_type": "code", + "source": "# plot_dwi(dmri_dataset.dataobj, dmri_dataset.affine, gradient=data_test[1], black_bg=True)", + "id": "edb0e9d255516e38", + "outputs": [], + "execution_count": 24 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "Plot the predicted DWI signal", + "id": "1a52e2450fc61dc6" + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2024-06-02T00:27:25.886918Z", + "start_time": "2024-06-02T00:27:25.884875Z" + } + }, + "cell_type": "code", + "source": "# plot_dwi(predicted, dmri_dataset.affine, gradient=data_test[1], black_bg=True);", + "id": "66150cf337b395e0", + "outputs": [], + "execution_count": 25 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}