diff --git a/.idea/SEPAL.iml b/.idea/SEPAL.iml index 039314d..06b0085 100644 --- a/.idea/SEPAL.iml +++ b/.idea/SEPAL.iml @@ -5,8 +5,11 @@ + + - \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..6e113c6 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml index 105ce2d..dd4c951 100644 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -1,5 +1,6 @@ + diff --git a/README.md b/README.md index da46e12..80891e4 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Created 28 September 2020 - Fit signal enhancement using pharmacokinetic model - Pharmacokinetic models: steady-state, Patlak, extended Tofts, Tofts, 2CXM, 2CUM - AIFs: patient-specific (measured), Parker, bi-exponential Parker -- Fitting an AIF time delay +- Fitting free AIF time delay parameter - Relaxivity models: linear - Signal models: spoiled gradient echo - Water exchange models: FXL, NXL, NXL_be @@ -23,17 +23,17 @@ Created 28 September 2020 ### Not yet implemented/limitations: - Generally untested. Not optimised for speed or robustness. -- Additional pharmacokinetic models (add by inheriting from pk_model class) -- Additional relaxivity models (add by inheriting from c_to_r_model class) -- Additional AIF functions (add by inheriting from aif class) -- Additional water exchange models, e.g. 3S2X, 2S1X (add by inheriting from water_ex_model class) -- Additional signal models (add by inheriting from signal_model class) +- Additional pharmacokinetic models (add by inheriting from PkModel class) +- Additional relaxivity models (add by inheriting from CRModel class) +- Additional water exchange models, e.g. 3S2X, 2S1X (add by inheriting from WaterExModel class) +- Additional signal models (add by inheriting from SignalModel class) - R2/R2* effects not included in fitting of enhancement curves (but is included for enhancement-to-concentration conversion) - Compartment-specific relaxivity parameters/models - Fitting free water exchange parameters - Special model implementations, e.g. linear and graphical versions of Patlak model -TODO: -- Convert fitting functions to OO methods. Add image processing functions. -- Parallel -- Calculate IRF integrals exactly. +### TODO: +- linear Patlak model +- option to truly constrain k in HIFI fit +- fast C calculation for SPGR with r2=0 +- inversion recovery T1 measurement diff --git a/demo/DCE_ROI_data/k_tissue.npy b/demo/DCE_ROI_data/k_tissue.npy new file mode 100644 index 0000000..a38cc71 Binary files /dev/null and b/demo/DCE_ROI_data/k_tissue.npy differ diff --git a/demo/DCE_ROI_data/k_vif.npy b/demo/DCE_ROI_data/k_vif.npy new file mode 100644 index 0000000..4729dd6 Binary files /dev/null and b/demo/DCE_ROI_data/k_vif.npy differ diff --git a/demo/DCE_ROI_data/signal_tissue.npy b/demo/DCE_ROI_data/signal_tissue.npy new file mode 100644 index 0000000..4b54dbc Binary files /dev/null and b/demo/DCE_ROI_data/signal_tissue.npy differ diff --git a/demo/DCE_ROI_data/signal_vif.npy b/demo/DCE_ROI_data/signal_vif.npy new file mode 100644 index 0000000..cef8ba4 Binary files /dev/null and b/demo/DCE_ROI_data/signal_vif.npy differ diff --git a/demo/DCE_ROI_data/t1_tissue.npy b/demo/DCE_ROI_data/t1_tissue.npy new file mode 100644 index 0000000..d866464 Binary files /dev/null and b/demo/DCE_ROI_data/t1_tissue.npy differ diff --git a/demo/DCE_ROI_data/t1_vif.npy b/demo/DCE_ROI_data/t1_vif.npy new file mode 100644 index 0000000..07a7beb Binary files /dev/null and b/demo/DCE_ROI_data/t1_vif.npy differ diff --git a/demo/T1_data/FA12.nii.gz b/demo/T1_data/FA12.nii.gz new file mode 100644 index 0000000..5996a69 Binary files /dev/null and b/demo/T1_data/FA12.nii.gz differ diff --git a/demo/T1_data/FA2.nii.gz b/demo/T1_data/FA2.nii.gz new file mode 100644 index 0000000..ff6a880 Binary files /dev/null and b/demo/T1_data/FA2.nii.gz differ diff --git a/demo/T1_data/FA5.nii.gz b/demo/T1_data/FA5.nii.gz new file mode 100644 index 0000000..6e0aeb4 Binary files /dev/null and b/demo/T1_data/FA5.nii.gz differ diff --git a/demo/T1_data/TI_1068ms.nii.gz b/demo/T1_data/TI_1068ms.nii.gz new file mode 100644 index 0000000..67b861b Binary files /dev/null and b/demo/T1_data/TI_1068ms.nii.gz differ diff --git a/demo/T1_data/TI_168ms.nii.gz b/demo/T1_data/TI_168ms.nii.gz new file mode 100644 index 0000000..32a86b3 Binary files /dev/null and b/demo/T1_data/TI_168ms.nii.gz differ diff --git a/demo/T1_data/mask.nii.gz b/demo/T1_data/mask.nii.gz new file mode 100644 index 0000000..73ab352 Binary files /dev/null and b/demo/T1_data/mask.nii.gz differ diff --git a/demo/demo_aif_module.ipynb b/demo/demo_aif_module.ipynb new file mode 100644 index 0000000..8fcecee --- /dev/null +++ b/demo/demo_aif_module.ipynb @@ -0,0 +1,296 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "eb332c7d-4589-47da-81d0-e2697ee70254", + "metadata": {}, + "source": [ + "## AIF module demo" + ] + }, + { + "cell_type": "markdown", + "id": "4276273d-31f5-4625-bfc8-9018b7cd984d", + "metadata": {}, + "source": [ + "### Import modules" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "42671502-6096-4107-8c21-3f876b950a66", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import aifs\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "0c2eae34-da30-465b-9b23-3dbadd7dc0d8", + "metadata": {}, + "source": [ + "### The AIF Class\n", + "AIF objects define an arterial input function. This can either be a population average function or an AIF based on individual patient measurements." + ] + }, + { + "cell_type": "markdown", + "id": "reported-projector", + "metadata": {}, + "source": [ + "### Classic Parker AIF\n", + "Create a Parker AIF object of the Parker subclass of AIF:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4f59a6a6-69b0-4f28-a4a1-03b0b846f6e8", + "metadata": {}, + "outputs": [], + "source": [ + "parker_aif = aifs.Parker(hct=0.42)" + ] + }, + { + "cell_type": "markdown", + "id": "f9a0f8e5-ddd6-4164-a4df-7f50a3af82eb", + "metadata": {}, + "source": [ + "We can use the c_ap method to get concentration at arbitrary time points:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f65ca4cc-58d3-422a-822b-6c52cd9328c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "time_parker = np.linspace(0.,100.,1000)\n", + "c_ap_parker = parker_aif.c_ap(time_parker)\n", + "plt.plot(time_parker, c_ap_parker)\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)')\n", + "plt.title('Classic Parker');" + ] + }, + { + "cell_type": "markdown", + "id": "electoral-tamil", + "metadata": {}, + "source": [ + "### Patient-specific AIF\n", + "Now we create an individual AIF object based on a series of time-concentration data points. We use the PatientSpecific subclass of AIF." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2d0a1c5b-7972-4be9-aa1b-9029e5645685", + "metadata": {}, + "outputs": [], + "source": [ + "t_patient = np.array([19.810000,59.430000,99.050000,138.670000,178.290000,217.910000,257.530000,297.150000,336.770000,376.390000,416.010000,455.630000,495.250000,534.870000,574.490000,614.110000,653.730000,693.350000,732.970000,772.590000,812.210000,851.830000,891.450000,931.070000,970.690000,1010.310000,1049.930000,1089.550000,1129.170000,1168.790000,1208.410000,1248.030000])\n", + "c_p_patient = np.array([-0.004937,0.002523,0.002364,0.005698,0.264946,0.738344,1.289008,1.826013,1.919158,1.720187,1.636699,1.423867,1.368308,1.263610,1.190378,1.132603,1.056400,1.066964,1.025331,1.015179,0.965908,0.928219,0.919029,0.892000,0.909929,0.865766,0.857195,0.831985,0.823747,0.815591,0.776007,0.783767])\n", + "\n", + "patient_aif = aifs.PatientSpecific(t_patient, c_p_patient)" + ] + }, + { + "cell_type": "markdown", + "id": "9a03a459-93d7-4779-9709-6389bf265024", + "metadata": {}, + "source": [ + "Again, using the c_ap method we can get concentration at arbitrary time points. This is achieved using interpolation function." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c9d16286-d0df-4ab8-b918-4486652200f0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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o5uu7EPWEjE+s2DdAkoqS5hz1hySOiex52AUe7NupXN5FOu7bWVhzWSW1wwhr6DM36GaAPHu6l3c8/Z6dhWUocCugjLueXs9767e1azrPv744wwdOpShQ4cyd+5cADIzMzn11FO5+eabSU5OJicnh379+rF//34AHnzwQQYPHsy5557L9OnTmTNnDgAzZszgzTffBBxLLd1///0kJydz2mmn8f333wPw3//+l7FjxzJy5EjGjh3Lli1bGo2vrKyMq666imHDhvHzn/+csrIffyZuuukmUlJSGDJkCPff79h1OTU1lby8PCZPnszkyZMbrNcSrCVifGJXyS5e+f4VfnryTzml4ykA9IqPIrEog5kH9nJTrzhKu37LmD2nkR2X4udoTaB47JMtlFVWH1NWVlnNY59s8bg1snLlSp5//nlWrFiBqjJ69GjOOussOnbsyJYtW3j++ed56qmnjjknIyODt956i9WrV1NVVUVycjKnn356vdfv0qULq1at4qmnnmLOnDk8++yzDB48mGXLlhEWFsbSpUv53//9X956660GY3z66aeJjo5m3bp1rFu3juTk5KPHHn74YTp16kR1dTVTpkxh3bp1zJo1i8cff5wvvviCLl26NFhv2LBhHn3PToS1RIxPvLftPaprqrlp+E1Hy2YnFzAvPJV5JTOpKEzhrdhoHo54gtnJBf4L1ASUhlqlzWmtpqWlcemll9K+fXtiYmK47LLL+PrrrwHo27cvZ555Zr3nXHLJJURFRREbG8tFF13U4PUvu+wyAE4//XQyMzMBKCws5IorrmDo0KHcfvvtbNzY+B0Ky5Yt4+qrrwZg2LBhx/zyf+ONN0hOTmbkyJFs3LiRTZvqX4fW3XreZknE+MSSrCUkd0+mR/seR8vGR2ezaVwq2XEpVB6YgIbU8PxpP3PMzjIGR2v1RMrd4biToH7t27c/4XPqioiIACA0NJSqqioA/vSnPzF58mQ2bNjA+++/79bd+vVNwd25cydz5szhs88+Y926dVxwwQX1Xsvder5gScR43Y6CHWwr2Ma5fc899sD42xg/9TLS7z6bHQ9cx6geo1hRs5Hqsbf6J1ATcO74ySCiwkOPKYsKD+WOnwzy+JoTJ07k3XffpbS0lMOHD/POO+8wYcKERs8ZP3780V/+JSUlfPjhhyf0noWFhfTu7eh+e+GFF9yK8eWX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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# get the AIF concentrations at original time points\n", + "c_p_patient_lowres = patient_aif.c_ap(t_patient)\n", + "\n", + "# get the (interpolated) AIF conc at higher temporal resolution\n", + "t_patient_highres = np.linspace(-100, max(t_patient)+100, 200)\n", + "c_p_patient_highres = patient_aif.c_ap(t_patient_highres)\n", + "\n", + "plt.plot(t_patient, c_p_patient, 'o', label='original data')\n", + "plt.plot(t_patient, c_p_patient_lowres, 'x', label='low res')\n", + "plt.plot(t_patient_highres, c_p_patient_highres, '-', label='high res')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)')\n", + "plt.title('Individual AIF');" + ] + }, + { + "cell_type": "markdown", + "id": "d30c7325-3453-4e38-a869-7439ed256437", + "metadata": {}, + "source": [ + "### Other standard AIF functions\n", + "The following function is described in Manning et al., Magn Reson Med. 2021;86:1888–1903. \n", + "It describes the AIF following a bolus injection in a mild-stroke patient population by combining the Parker function with average late-phase concentration profiles measured in patients over a 19-minute acquisition. \n", + "We assume the injection takes place following the acquisition of 3 time frames." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e7274fdd-ef51-40fd-8ce9-d1b2820aa37e", + "metadata": {}, + "outputs": [], + "source": [ + "manning_fast_aif = aifs.ManningFast(hct=0.42, t_start=3*39.62)" + ] + }, + { + "cell_type": "markdown", + "id": "83da4ffa-24c2-4e24-b1ec-30ed89a823c2", + "metadata": {}, + "source": [ + "Manning et al. also reports an AIF for *slow* contrast injections in the same patient population, based on patient measurements:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a9cd6fa3-3347-4c4d-9cc4-da0d2d027c69", + "metadata": {}, + "outputs": [], + "source": [ + "manning_slow_aif = aifs.ManningSlow()" + ] + }, + { + "cell_type": "markdown", + "id": "f3d27241-b579-4b38-9ecd-1658184e6253", + "metadata": {}, + "source": [ + "A similar population average function (for Bolus injection) was reported in Heye et al., NeuroImage 2016;125:446-455:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a3fb3120-0b2c-420b-9e1f-0625ab9a4fff", + "metadata": {}, + "outputs": [], + "source": [ + "heye_aif = aifs.Heye(hct=0.45, t_start=3*39.62)" + ] + }, + { + "cell_type": "markdown", + "id": "65d7c712-3ef0-4f87-a7b1-2dfa03c0e45d", + "metadata": {}, + "source": [ + "Plot the above AIFs (and the original Parker model) for comparison:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "f7d24797-32ac-467d-8ea8-66b24079fa49", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "parker_aif = aifs.Parker(hct=0.42, t_start=3*39.62)\n", + "t = np.arange(0, 1400, 0.1)\n", + "\n", + "plt.figure(0, figsize=(8,8))\n", + "plt.plot(t, manning_fast_aif.c_ap(t), label='Manning (fast injection)')\n", + "plt.plot(t, manning_slow_aif.c_ap(t), label='Manning (slow injection)')\n", + "plt.plot(t, heye_aif.c_ap(t), label='Heye')\n", + "plt.plot(t, parker_aif.c_ap(t), '--', label='Parker')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)');" + ] + } + ], + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_fit_dce.ipynb b/demo/demo_fit_dce.ipynb new file mode 100644 index 0000000..056e08a --- /dev/null +++ b/demo/demo_fit_dce.ipynb @@ -0,0 +1,545 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b4f72b46-d49a-4909-a8ae-51b3e01a8964", + "metadata": {}, + "source": [ + "# Fitting DCE time series\n", + "In this example, we process DCE data from a mild-stroke patient. First we do a simple ROI analysis using the median subcortical grey matter signal, then we demonstrate how to perform a voxelwise analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "innovative-jacksonville", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import dce_fit, relaxivity, signal_models, water_ex_models, aifs, pk_models\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "0d92edd9-2cd1-419e-a273-bdf1b4e5c08f", + "metadata": {}, + "source": [ + "## Simple ROI analysis\n", + "First, we analyse the data using the following steps:\n", + "- signal -> enhancement\n", + "- enhancement -> concentration\n", + "- fit concentration curve using the Patlak model" + ] + }, + { + "cell_type": "markdown", + "id": "appointed-stroke", + "metadata": {}, + "source": [ + "Start by defining the time points and loading the ROI data:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b6719ba7-17c3-471b-a16d-3a04b9593b61", + "metadata": {}, + "outputs": [], + "source": [ + "dt=39.6 # temporal resolution\n", + "t = dt * (np.arange(32) + 0.5);" + ] + }, + { + "cell_type": "markdown", + "id": "3902275b-e4d4-4abe-8e19-efdc6a5fe626", + "metadata": {}, + "source": [ + "#### Load the ROI data for tissue and the VIF:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "3d57e094-cdaf-4bb2-bc68-fb85e532a408", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEGCAYAAACUzrmNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA620lEQVR4nO3deXxU1f34/9d7JishgZAFSAIkbAoECHsUUETrrlitCmrFj1bbals+9VOrVtvaj6Vf9WPt6lJFK7Za5KdtVcQN6gIoYKLsawgBQsKSkITsy8z5/XFvkgGyQiYzmXk/H495zMyZe++ck8zc95zlniPGGJRSSqm2OHydAaWUUv5Pg4VSSql2abBQSinVLg0WSiml2qXBQimlVLtCfJ0Bb4mPjzepqam+zoZSSvUo2dnZRcaYhJPTAzZYpKamkpWV5etsKKVUjyIi+1pK12YopZRS7dJgoZRSql0aLJRSSrUrYPsslFL+qb6+nvz8fGpqanydlaAWERFBSkoKoaGhHdrea8FCRCKAz4Bw+33eMMb8UkT6Aa8DqUAecIMxpsTe50HgDsAF/MgY84GdPgl4GYgElgMLjE5qpVSPlJ+fT3R0NKmpqYiIr7MTlIwxFBcXk5+fT1paWof28WYzVC0w2xgzHsgALhWRTOABYKUxZgSw0n6OiIwG5gJjgEuBZ0TEaR/rWeAuYIR9u9SL+VZKeVFNTQ1xcXEaKHxIRIiLi+tU7c5rwcJYKuynofbNAHOAxXb6YuAa+/EcYIkxptYYsxfIAaaKyEAgxhjzhV2beMVjH3UGsveV8PTHOWTvK/F1VlSQ0UDhe539H3i1z8KuGWQDw4GnjTHrRKS/MaYQwBhTKCKJ9ubJwFqP3fPttHr78cnpLb3fXVg1EAYPHtyVRQk42ftKmPv8F7jchrAQB69+J5NJQ2J9nS2llJ/y6mgoY4zLGJMBpGDVEtLb2LylMGfaSG/p/Z43xkw2xkxOSDjlAkTlYW1uEfUug9tAXYObtbnFvs6SUt1i1qxZfPDBByek/f73v+fuu+8mLy+P9HTrNPXJJ5/Qp08fMjIyyMjI4KKLLurQ8QsKCvjWt77V5fl++eWX+cEPftDlx+2obhk6a4wpBT7B6ms4bDctYd8fsTfLBwZ57JYCFNjpKS2kqzMwJqlP02O3gWEJUT7MjVLdZ968eSxZsuSEtCVLljBv3rxTtp05cyYbNmxgw4YNrFixokPHT0pK4o033uiSvPoTrwULEUkQkb7240jgImAH8DYw395sPvCW/fhtYK6IhItIGlZH9nq7yapcRDLFamS71WMfdZrie4cDcO6wOHqFOXn8/Z0cLa/1ca6UallX9q9961vfYtmyZdTWWp/3vLw8CgoKmDFjRqeP9emnnzbVPCZMmEB5efkJtZOqqipuuOEGxo0bx4033si0adOapiHq3bs3Dz30EOPHjyczM5PDhw8D8M477zBt2jQmTJjARRdd1JTua97ssxgILLb7LRzAUmPMMhH5AlgqIncA+4HrAYwxW0VkKbANaADuMca47GN9n+ahs+/ZN3UGCsusURD3X3o2DW7DLYvWMf+l9Sz5biYxER0bd63UmfrVO1vZVnC8zW3Ka+rZcagctwGHwNkDoolu4zM6OimGX141ptXX4+LimDp1Ku+//z5z5sxhyZIl3HjjjS12+K5atYqMjAwArr/+eh566KETXn/yySd5+umnmT59OhUVFURERJzw+jPPPENsbCybNm1iy5YtTccCqKysJDMzk4ULF/LTn/6UF154gYcffpgZM2awdu1aRIRFixbxxBNP8Nvf/rbNv1F38FqwMMZsAia0kF4MXNjKPguBhS2kZwFt9XeoTioorQZgYN8IEqMjePaWidz5ShbfeTmLV+6YSkSos50jKNU9jtc04LZ7Kd3Get5WsOiIxqaoxmDx0ksvtbjdzJkzWbZsWavHmT59Ovfeey8333wz1157LSkpKSe8vnr1ahYsWABAeno648aNa3otLCyMK6+8EoBJkybx0UcfAdZ1KDfeeCOFhYXU1dV1+DoIb9MruINUQVk1YU4H8VFWc9SssxJ56oYMfrTka+559Sue+/YkQp06G4zyrrZqAI2y95Vw86K11De4CQ1x8Ie5E8545N4111zDvffey1dffUV1dTUTJ048reM88MADXHHFFSxfvpzMzExWrFhxQu2irWuHQ0NDm2ozTqeThoYGAH74wx9y7733cvXVV/PJJ5/wyCOPnFbeupqeDYJUQWkNA/pE4HA0V72vGp/Eo3PSWbnjCD99YxNut14kr3xv0pBYXv1OJvdefFaXDfHu3bs3s2bN4vbbb2+xY7uj9uzZw9ixY7n//vuZPHkyO3bsOOH1GTNmsHTpUgC2bdvG5s2b2z1mWVkZycnW1QGLFy9uZ+vuo8EiSBWWVpPUN+KU9Fsyh/CTi0fyr68P8r/LtrX5y0ip7jJpSCz3XDC8S68FmjdvHhs3bmTu3LmnfYzf//73pKenM378eCIjI7nssstOeP3uu+/m6NGjjBs3jscff5xx48bRp0+fVo5meeSRR7j++uuZOXMm8fHxp523riaBejKYPHmy0cWPWnfu/1tJ5tA4nrox45TXjDH8+t3tvLh6Lz++aCQLLhrRZe+bva+EtbnFZA6N04sAg9T27dsZNWqUr7PRLVwuF/X19URERLBnzx4uvPBCdu3aRVhYmK+zBrT8vxCRbGPM5JO31T6LINTgcnO4vJakvpEtvi4iPHT5KEqr6vndil2U19QTGxV2xif4D7ce4p7XvqLBZQgP1avGVeCrqqriggsuoL6+HmMMzz77rN8Eis7SYBGEjpTX4nIbBrbQDNXI4RAev24s+49Vsmj1XgCcDuH2GWlcPLo/Zw2IbnOIrTGG3KJKvtx7jPV5x/gy7xgHjlU3vV5T7+aTnUc0WKiAFh0dHTDLO2uwCEKFZdZJu7WaRaMQp4MZw+PJyivBAC634YXPcnnhs1wAkvtGcvaAaM4aEE1YiIMjx2sJD3VwqKyGL/OOUVRRB0BcVBhTUvtx0aj+vLpuP/UNbgyw9MsDXDkuibMGRHuzuEqpLqDBIggdLLUuyEvq03awAJgxIoFnP91zwrDFUKew41A5OwrL2XmonE92HsHl0fWVEB3GeSMTmJrajylp/RgaH9U0RPDKcUmszS0mtlcYv1uxi28+s4anbsjg0vQBXimrUqpraLAIQoWljTWL1puhGjUOWzy5U3r22f2btvnjyt38fsWupitsbzs3jXsuGN7q8ZqPkch3/57N9/6ezYILR7DgwhEnDOVVSvkPHTobhArLaogOD+nwVbDtDVucPjyesBAHToGwEAeZQ+M6dNwBfSJ4/a5MrpuYwh9W7uZ7f8+morahw+VQSnUfDRZB6GBpdbv9FZ1xJhdNRYQ6efL6cfziytGs3HGEa59ZQ15RZZflTamTlZaW8swzzzQ999aU4qfj8ssvp7S0tEuP6Tmx4ZnQYBGECsuq2xwJdTrO5KIpEWuU1Su3T+VIeS1X/3k1L67O1VX8lFecHCz8aUrx5cuX07dvX19no0UaLIJQQWlNl9Ysusr04fG8fc8MYnuF8eiy7Tz5wU5uemGtBgwFB9bDqt9a92fogQceYM+ePWRkZHDfffed8Mt769atTJ06lYyMDMaNG8fu3buprKzkiiuuYPz48aSnp/P6668DkJqaSlFREQBZWVnMmjULsGaTvf3225kyZQoTJkzgrbdOXVGhsLCQ8847j4yMDNLT01m1atUpx3z00Uc5++yz+cY3vsG8efN48sknAWvxpvvvv5+pU6cycuTIpn3z8vKYOXMmEydOZOLEiXz++edn/LfypB3cQaam3sWxyjqS+nRtzaKrDI7rxTcnJPP7lbsxQG2DmwVLvubuWcO5fOwA+vbqmRc0qVa89wAcame+pNrjcHgLGDeIA/qnQ3hM69sPGAuXPdbqy4899hhbtmxhw4YNgHWSbfTcc8+xYMECbr75Zurq6nC5XCxfvpykpCTeffddwJq7qS0LFy5k9uzZvPTSS5SWljJ16lQuuugioqKaFxh77bXXuOSSS3jooYdwuVxUVVWdcIysrCzefPNNvv76axoaGpg4cSKTJk1qer2hoYH169ezfPlyfvWrX7FixQoSExP56KOPiIiIYPfu3cybN69Lr/HQmkWQaZqavAPDZn1l5sgEIkIdOARCHIIxhp/9azNTFq7gzleyWLapgJp6V/sHUoGhpswKFGDd17R9sj4T55xzDr/5zW94/PHH2bdvH5GRkYwdO5YVK1Zw//33s2rVqnbndvrwww957LHHyMjIYNasWdTU1LB///4TtpkyZQp//etfeeSRR9i8eTPR0Sdea7R69WrmzJlDZGQk0dHRXHXVVSe8fu211wLW1OaNwa6+vp4777yTsWPHcv3117Nt27Yz/GucSGsWQaZx0SN/bIZqdPJw3YmD+7K14Dj//vogb28s4KNth+kdHsIlYwYwJimaqjoX5wyL16vBe6I2agBNDqyHxVeDqw6cYXDdIhg01SvZuemmm5g2bRrvvvsul1xyCYsWLWL27NlkZ2ezfPlyHnzwQS6++GJ+8YtfEBISgtttBbGampqmYxhjePPNNznrrLNafZ/zzjuPzz77jHfffZdvf/vb3Hfffdx6660nHKMt4eHW0gKeU5v/7ne/o3///mzcuBG3233KQkxnSmsWQeZgJ66x8CXPDnMRIT25Dw9fOZovHryQV78zjcvSB/De5kL+d9l2nvxwl/ZtBLJBU2H+2zD7Iev+DANFdHQ05eXlLb6Wm5vL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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "s_vif = np.load('./DCE_ROI_data/signal_vif.npy') # signal\n", + "k_vif = np.load('./DCE_ROI_data/k_vif.npy') # B1 correction factor (actual/nominal flip angle)\n", + "t1_vif = np.load('./DCE_ROI_data/t1_vif.npy') # pre-contrast T1\n", + "s_tissue = np.load('./DCE_ROI_data/signal_tissue.npy')\n", + "k_tissue = np.load('./DCE_ROI_data/k_tissue.npy')\n", + "t1_tissue = np.load('./DCE_ROI_data/t1_tissue.npy')\n", + "\n", + "hct = 0.395 # haematocrit\n", + "\n", + "plt.plot(t, s_vif, '.-', label='VIF signal')\n", + "plt.plot(t, s_tissue, '.-', label='tissue signal')\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('signal')\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "58819f39-d12d-4f80-9cf4-b6adce6628ad", + "metadata": {}, + "source": [ + "#### Calculate enhancement\n", + "Do this by creating a SigToEnh object and use the proc method to get enhancement. Use the first three points as the baseline." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "b112f1dd-9c71-411a-8567-3a32e12f68b2", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "s_to_enh = dce_fit.SigToEnh(base_idx=[0, 1, 2])\n", + "enh_vif = s_to_enh.proc(s_vif)\n", + "enh_tissue = s_to_enh.proc(s_tissue)\n", + "\n", + "fig, ax = plt.subplots(1,2)\n", + "ax[0].plot(t, enh_tissue, '.-', label='tissue enh (%)')\n", + "ax[1].plot(t, enh_vif, '.-', label='VIF enh (%)')\n", + "ax[1].set_xlabel('time (s)');\n", + "[a.legend() for a in ax.flatten()];" + ] + }, + { + "cell_type": "markdown", + "id": "c22f291c-01cf-47d4-b959-9bedba3c3bed", + "metadata": {}, + "source": [ + "#### Calculate concentration\n", + "First define the relationship between concentration and relaxation rate:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "5d9f252b-f5ea-4c62-8ba2-87fbd425d2b2", + "metadata": {}, + "outputs": [], + "source": [ + "c_to_r_model = relaxivity.CRLinear(r1=5.0, r2=7.1)" + ] + }, + { + "cell_type": "markdown", + "id": "cc7687c8-5366-4762-929c-109d2333427c", + "metadata": {}, + "source": [ + "...and the relationship between relaxation rate and signal:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "fcaf9f7a-594a-4151-ad2d-55400b581fbf", + "metadata": {}, + "outputs": [], + "source": [ + "signal_model = signal_models.SPGR(tr=3.4e-3, fa=15, te=1.7e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "eb8f4f11-7ba7-4fee-8494-06ca96d9156d", + "metadata": {}, + "source": [ + "Now create an EnhToConc object and use the proc method to get concentration:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8076ac94-8c2e-4c80-af82-d254d97209f7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "e_to_c = dce_fit.EnhToConc(c_to_r_model, signal_model)\n", + "\n", + "C_t = e_to_c.proc(enh_tissue, t1_tissue, k_tissue)\n", + "c_p_vif = e_to_c.proc(enh_vif, t1_vif, k_vif) / (1-hct)\n", + "\n", + "fig, ax = plt.subplots(1,2)\n", + "ax[0].plot(t, C_t, '.-', label='tissue conc. (mM)')\n", + "ax[1].plot(t, c_p_vif, '.-', label='VIF plasma conc. (mM)')\n", + "ax[1].set_xlabel('time (s)');\n", + "[a.legend() for a in ax.flatten()];" + ] + }, + { + "cell_type": "markdown", + "id": "ca8df92a-1d1c-4b01-a7dd-4a0a711f5d44", + "metadata": {}, + "source": [ + "#### Fit the pharmacokinetic model to the concentration\n", + "First we need to create an AIF object based on the calculate VIF concentrations:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "08223222-0ddc-4e11-9d71-0444bee7f0ff", + "metadata": {}, + "outputs": [], + "source": [ + "aif = aifs.PatientSpecific(t, c_p_vif)" + ] + }, + { + "cell_type": "markdown", + "id": "f4a78498-69b4-4321-a074-4ef5ab55afd2", + "metadata": {}, + "source": [ + "...and a PKModel object:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a84698fe-1b42-465d-8c85-ac4a5d580235", + "metadata": {}, + "outputs": [], + "source": [ + "pk_model = pk_models.Patlak(t, aif, bounds=((-1,-0.001),(1,1)))" + ] + }, + { + "cell_type": "markdown", + "id": "5386675c-2303-49a9-8df5-f7aff457287c", + "metadata": {}, + "source": [ + "Finally, we create a ConcToPKP object and use the proc method to fit the concentration data:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "adaf7157-65dd-4ecd-978c-4ef015044413", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vp = 0.0139, ps = 0.000187\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "weights = np.concatenate([np.zeros(7), np.ones(25)]) # exclude first few points from fit\n", + "pkp_0 = [{'vp': 0.2, 'ps': 1e-4}] # starting parameters (multiple starting points can be specified if required)\n", + "\n", + "conc_to_pkp = dce_fit.ConcToPKP(pk_model, pkp_0, weights)\n", + "vp, ps, C_t_fit = conc_to_pkp.proc(C_t)\n", + "\n", + "plt.plot(t, C_t, '.', label='tissue conc (mM)')\n", + "plt.plot(t, C_t_fit, '-', label='model fit (mM)')\n", + "plt.legend();\n", + "\n", + "print(f\"vp = {vp:.4f}, ps = {ps:.6f}\")\n", + "# Results using Matlab: vp = 0.0138, ps = 0.000188 min^-1" + ] + }, + { + "cell_type": "markdown", + "id": "2e1a7e53-a789-4647-aedd-2371e5bde358", + "metadata": {}, + "source": [ + "## Fit data in signal space\n", + "Alternatively, we can fit the enhancement curve directly. To do this, we need to create a water_ex_model object, which determines the relationship between R1 in each tissue compartment and the exponential R1 components. We start by assuming the fast water exchange limit (as implicitly assumed above when estimating tissue concentration).\n", + "The results should be similar to fitting the concentration curve:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "f58c2cbd-c9f9-4ee2-8179-27f04f3d3b99", + "metadata": {}, + "outputs": [], + "source": [ + "wxm = water_ex_models.FXL()" + ] + }, + { + "cell_type": "markdown", + "id": "4526fecd-0b3c-4b02-911f-ae12ec769524", + "metadata": {}, + "source": [ + "This time create an EnhToPKP object and use the proc method to fit the enhancement curve:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a33675f6-a2a9-45f9-ae40-df2ebbbb7e45", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vp = 0.0139, ps = 0.000187\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "enh_to_pkp = dce_fit.EnhToPKP(hct, pk_model, t1_vif, c_to_r_model, wxm, signal_model, pkp_0, weights)\n", + "\n", + "vp, ps, enh_fit = enh_to_pkp.proc(enh_tissue, k_tissue, t1_tissue)\n", + "\n", + "plt.plot(t, enh_tissue, '.', label='tissue enh (%)')\n", + "plt.plot(t, enh_fit, '-', label='model fit (%)')\n", + "plt.legend();\n", + "\n", + "print(f\"vp = {vp:.4f}, ps = {ps:.6f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "0b0101a6-58e2-4493-a8db-baa2b4df64f6", + "metadata": {}, + "source": [ + "### Repeat the fit assuming *slow* BBB water exchange...\n", + "This time, we assume slow water exchange across the vessel wall. The result will be very different compared with fitting the concentration curve:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "3cbe77e4-5731-4bfa-abd2-785a62c055f8", + "metadata": {}, + "outputs": [], + "source": [ + "wxm_ntexl = water_ex_models.NTEXL()" + ] + }, + { + "cell_type": "markdown", + "id": "8a302d8a-7e53-4418-910d-ec809318d55d", + "metadata": {}, + "source": [ + "Create a new EnhToPKP object using this water exchange model and repeat the fit:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1dfba91b-d2cd-4cbc-ae09-63075f51fe8c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "vp = 0.0172, ps = 0.000102\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAmPUlEQVR4nO3de3xU9Z3/8dcnIVzFigFRxHBRtCgglxCwWIqiiKBobddqva2i2Nb+pHXpqnWVeq1bpdv1ylLlV1S0VPC2im3UxUWoKAQpoihEBA1BieEiV0PIZ/84kzDABJLMJHM57+fjMY85c67fb2A+58znfL/fY+6OiIhkvqxkF0BERJqGAr6ISEgo4IuIhIQCvohISCjgi4iERLNkF+BA2rdv7127dk12MURE0kZRUdFX7t4h1rKUDvhdu3Zl0aJFyS6GiEjaMLM1tS1TSkdEJCQU8EVEQkIBX0QkJFI6hy8iTWvXrl2UlJSwc+fOZBdFDqJly5Z07tyZnJycOm+jgC8iNUpKSmjbti1du3bFzJJdHKmFu1NeXk5JSQndunWr83Z1TumY2VQzW29my6Lm/cbM1prZkshrVC3bjjSzj82s2MxuqnPpRKRJ7dy5k9zcXAX7FGdm5Obm1vuXWH1y+H8CRsaY/x/u3jfymh2jYNnAw8DZwInAxWZ2Yr1KKbUqWrORh+cUU7RmY7KLIhlCwT49NOTfqc4pHXefa2Zd630EKACK3X0VgJn9GTgP+LAB+5IoRWs2csljC6iorKJ5syymXz2YAV3aJbtYIpKiEtFK5+dmtjSS8okVbY4GPo/6XBKZF5OZjTOzRWa2qKysLAHFy1wLVpVTUVlFlcOuyioWrCpPdpFEJIXFG/AfBY4F+gLrgEkx1on1u6PWp664+xR3z3f3/A4dYvYOlojB3XNp3iyLbIOcZlkM7p6b7CKJxGXTpk088sgjNZ9LS0v54Q9/mMQS1c2wYcPqNCrAunXrOOeccwCYP38+ffr0YeDAgRQXFwNB/c866yyiH0x1xhlnsHFjYlK2cQV8d//S3Xe7exXwR4L0zb5KgGOiPncGSuM5rgQGdGnH9KsHc8OIE5TOkaRJ5H2kfQN+p06dmDlzZtz7TRW///3vueaaawCYNGkSs2bN4p577uHRRx8F4M477+TXv/71Xvn5yy67bK+/STziCvhmdlTUx+8Dy2KsthDoYWbdzKw5cBHwUjzHlT0GdGnHdacdp2AvSVF9H2lS4cdc8tiCuIP+TTfdxCeffELfvn351a9+xerVq+nVqxcAH3zwAQUFBfTt25c+ffqwcuVKtm3bxujRozn55JPp1asXM2bMAIJxuL766isAFi1axLBhwwDYtm0bV111FQMHDqRfv368+OKLMctx3333MXDgQPr06cPEiRMBWL16NT179uSaa67hpJNOYsSIEezYsaNmm2effZaCggKOP/543nrrrZj7nTVrFiNHBm1fcnJy2LFjB9u3bycnJ4dPPvmEtWvX8r3vfW+vbcaMGcMzzzzTwL/o3up809bMngGGAe3NrASYCAwzs74EKZrVwLWRdTsBj7n7KHevNLOfA38DsoGp7v5BQkovIkkV6z5SPBcf9957L8uWLWPJkiVAEGSrTZ48mfHjx3PJJZdQUVHB7t27mT17Np06deKVV14BYPPmzQfc/913383pp5/O1KlT2bRpEwUFBZxxxhm0adOmZp3CwkJWrlzJu+++i7szZswY5s6dS15eHitXruSZZ57hj3/8IxdeeCGzZs3i0ksvBaCyspJ3332X2bNnc/vtt/P666/vdexPP/2Udu3a0aJFCwBuvvlmxo0bR6tWrXjyySeZMGECd955535lbteuHd988w3l5eXk5saXtq1PK52LY8x+vJZ1S4FRUZ9nA/s12ZTUUrRmIwtWlTO4e65+MUidVN9H2lVZ1ej3kU455RTuvvtuSkpKuOCCC+jRowe9e/dmwoQJ3HjjjZxzzjl897vfPeA+CgsLeemll7j//vuBoN/BZ599Rs+ePfdap7CwkH79+gGwdetWVq5cSV5eHt26daNv374ADBgwYK8T0gUXXBBzfrV169YRfV+yb9++LFiwAIC5c+fSqVMn3J0f/ehH5OTkMGnSJDp27AjAEUccQWlpadMFfMlsauIpDVF9H6kpLhR+/OMfM2jQIF555RXOOussHnvsMU4//XSKioqYPXs2N998MyNGjOC2226jWbNmVFVVAezVOcndmTVrFieccEKtx3F3br75Zq699tq95q9evbrm6hwgOzt7r5RO9bLs7GwqKyv322+rVq1idpRyd+666y5mzJjBz3/+c26//XZWr17NAw88wN13311Th1atWtXlz3RAGjxNADXxlIZL5H2ktm3bsmXLlpjLVq1aRffu3bn++usZM2YMS5cupbS0lNatW3PppZcyYcIEFi9eDAQ5/KKiIiDIm1c766yzePDBB2tawbz33nv7Heess85i6tSpbN26FYC1a9eyfv36uOt2/PHHx7zynzZtGqNHj6Zdu3Zs376drKwssrKy2L59OxCcEL744gsS8TAoXeEL0LQ/zUVqk5uby5AhQ+jVqxdnn3021113Xc2yGTNm8NRTT5GTk8ORRx7JbbfdxsKFC/nVr35FVlYWOTk5Na1dJk6cyNixY7nnnnsYNGhQzT5uvfVWfvGLX9CnTx/cna5du/Lyyy/vVYYRI0awfPlyTjnlFAAOOeQQnnrqKbKzs+OqW5s2bTj22GMpLi7muOOOA2D79u1MmzaNwsJCAG644QZ+8IMf0Lx585obtUVFRQwePJhmzeIP1xbd3jPV5Ofnu5541XSUw5fly5fvlc+WxHr++ecpKirirrvuqvM248ePZ8yYMQwfPny/ZbH+vcysyN3zY+1LV/hSY0CXdgr0Io3o+9//PuXl9UuX9urVK2awbwjl8EVEmtDVV19dr/WrO2olggK+iEhIKOCLiISEAr6ISEgo4IuIhIQCvohkrOhB1Oq7zrPPPkvPnj057bTTWLRoEddffz0Ab775Jn//+99r3d8LL7zAHXfcAcCDDz5Ir169GDVqFBUVFQDMmzePG264oWb9srKymgHVGpsCvohIDI8//jiPPPIIc+bMIT8/nwceeAA4eMD/3e9+x89+9jMAHnvsMZYuXUq/fv3429/+hrtz5513cuutt9as36FDB4466ijmz5/fuBVC7fBFpDav3gRfvJ/YfR7ZG86+t9bFq1evZuTIkZx66qksWLCAk08+mSuvvJKJEyeyfv16pk+fTkFBARs2bOCqq65i1apVtG7dmilTptCnTx/Ky8u5+OKLKSsro6CgYK8HiTz11FM88MADVFRUMGjQIB555JFae8/ecccdzJs3j08//ZQxY8YwevRo7r//fh566CEmT55MdnY2Tz31FA8++OBeA7atWLGCFi1a0L59+5p5u3btqhkC+cknn2TUqFG0a7d3f5fzzz+f6dOnM2TIkIb+ZetEV/giklKKi4sZP348S5cu5aOPPuLpp59m3rx53H///dxzzz1AMHRCv379WLp0Kffccw+XX345ALfffjunnnoq7733HmPGjOGzzz4Dgh6pM2bMYP78+SxZ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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "enh_to_pkp_ntexl = dce_fit.EnhToPKP(hct, pk_model, t1_vif, c_to_r_model, wxm_ntexl, signal_model, pkp_0, weights)\n", + "\n", + "vp_ntexl, ps_ntexl, enh_fit_ntexl = enh_to_pkp_ntexl.proc(enh_tissue, k_tissue, t1_tissue)\n", + "\n", + "plt.plot(t, enh_tissue, '.', label='tissue enh (%)')\n", + "plt.plot(t, enh_fit_ntexl, '-', label='model fit (%)')\n", + "plt.legend();\n", + "\n", + "print(f\"vp = {vp_ntexl:.4f}, ps = {ps_ntexl:.6f}\")\n", + "# Results using Matlab: vp = 0.0172, ps = 0.000102" + ] + }, + { + "cell_type": "markdown", + "id": "235ef6f0-8932-4717-be3c-f34026bf8d4e", + "metadata": {}, + "source": [ + "## Voxelwise fitting\n", + "The fitting objects created above can also be used to fit a 4D DCE image. Instead of the proc method, we use the proc_image method, and some of the arguments are images rather than single values/vectors. proc_image is a method of the base class (i.e. it's the same for all processing steps). It simply calls the subclass's proc method on each voxel in the image. \n", + "Refer to proc_image and proc docstrings for further details." + ] + }, + { + "cell_type": "markdown", + "id": "17ffbf2a-c5d1-4815-9154-380460ff55c8", + "metadata": {}, + "source": [ + "#### Calculate enhancement image\n", + "The first argument is the input image, i.e. the re-aligned DCE signal image. This can be the path to a nii file or a np array. \n", + "The mask argument provides a binary mask. Only voxels within the mask are processed. \n", + "The dir argument indicates where to write the output image. If this is None (default), the results are not written to a file, only to a variable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "590a14f3-c73c-4114-a0a5-d7a71ae56f60", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "enh_4d = s_to_enh.proc_image(['rDCE.nii'], mask='betDCE3D0000_mask.nii', dir='.');" + ] + }, + { + "cell_type": "markdown", + "id": "a96f9405-7f77-4128-b0c7-62ed0a5c572f", + "metadata": { + "tags": [] + }, + "source": [ + "#### Calculate concentration\n", + "This time, the input image is the enhancement image (or array). \n", + "Additional parameters must also be provided as images: T1 and k (B1+ correction) maps. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9f6c91cd-15ca-4839-bbd9-2890cafdb012", + "metadata": {}, + "outputs": [], + "source": [ + "C_t_4d = e_to_c.proc_image(['enh.nii'], arg_images=['rT1.nii','rk.nii'], mask='betDCE3D0000_mask.nii', dir='.');" + ] + }, + { + "cell_type": "markdown", + "id": "1b89f671-8f95-4ac3-8c96-02030629fa00", + "metadata": {}, + "source": [ + "#### Fit pharmacokinetic model\n", + "This time, the input image is the tissue concentration image. \n", + "The output images contain the pharmacokinetic parameters and the fitted concentrations. \n", + "For speed, we use multiple cores." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "524a8280-680b-4549-b421-d82d84ec16da", + "metadata": {}, + "outputs": [], + "source": [ + "vp_3d, ps_3d, C_t_fit_4d = conc_to_pkp.proc_image('C_t.nii', mask='betDCE3D0000_mask.nii', dir='.', n_procs=4);" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_fit_t1.ipynb b/demo/demo_fit_t1.ipynb new file mode 100644 index 0000000..abd1125 --- /dev/null +++ b/demo/demo_fit_t1.ipynb @@ -0,0 +1,465 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b276d3b1-a112-4af7-97aa-994466f62f4a", + "metadata": {}, + "source": [ + "## T1 Fitting\n", + "The t1_fit module contains classes for estimating T1. Both these and the classes in dce_fit are subclasses of Fitter, which means they can be used to fit a single T1 value (using the proc method) or an entire image (using the proc_image method)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "affected-indonesia", + "metadata": {}, + "outputs": [], + "source": [ + "import os, sys\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "sys.path.append('../src')\n", + "import t1_fit\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "a426b25f-88e1-4a32-a627-675243e26cef", + "metadata": {}, + "source": [ + "## T1 estimation methods (one value)\n", + "The variable flip angle method estimates T1, using the relationship between flip angle, T1 and SPGR signal:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "8b7c6e63-f4d1-4ea5-bbb8-a932d4862063", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fa_range = np.linspace(0, 20, 50)\n", + "s_range_1 = t1_fit.spgr_signal(s0=100, t1=0.8, tr=5.4e-3, fa=fa_range)\n", + "s_range_2 = t1_fit.spgr_signal(s0=100, t1=1.5, tr=5.4e-3, fa=fa_range)\n", + "plt.plot(fa_range, s_range_1, '-', label='s0=100, t1=0.8 s')\n", + "plt.plot(fa_range, s_range_2, '-', label='s0=100, t1=1.5 s')\n", + "plt.xlabel('FA (deg)')\n", + "plt.ylabel('signal');\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "8cc53336-53ef-4cc3-aad3-0d4ef3c8784f", + "metadata": {}, + "source": [ + "#### Variable flip angle mapping (2 x flip angles)\n", + "The simplest approach is to estimate T1 from two SPGR acquisitions with different flip angles. This is fastest but least precise method:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "193be578-c800-49f2-839d-43466d273ff4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 0 ns\n", + "Fitted values: s0 = 13600.3, t1 = 1.326 s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fit data:\n", + "s = np.array([413, 445])\n", + "tr = 5.4e-3\n", + "fa = np.array([2, 12])\n", + "%time s0, t1 = t1_fit.VFA2Points(fa, tr).proc(s)\n", + "\n", + "# Plot data:\n", + "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", + "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", + "plt.plot(fa, s, 'o', label='signal')\n", + "plt.xlabel('FA (deg)')\n", + "plt.ylabel('signal');\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "991c0e6c-56c1-4169-94d1-82d787ae5a62", + "metadata": {}, + "source": [ + "#### Variable flip angle (based on 3 x flip angles)\n", + "Fit multiple acquisitions using the **linear regression** method (moderately fast, moderately accurate):" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "9af5810a-3cc9-4f2f-8350-5f8c182dd148", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 959 µs\n", + "Fitted values: s0 = 13531.9, t1 = 1.326 s\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAykElEQVR4nO3deXxU1dnA8d+TnUBICCEhIYGEnQBhXwSEAIqooOBC4XXBpbWtWm1dKlqr1N1qa+v6yquttKKAC4JsikAERLYgBEhYIksICUkIJOyQ5bx/zE0cYgIJZGYyM8/388lnZs69d+7DneE+c8+55xwxxqCUUkoB+Lg6AKWUUg2HJgWllFKVNCkopZSqpElBKaVUJU0KSimlKvm5OoBLERERYeLj410dhlJKuZXU1NRDxpgW1S1z66QQHx/Phg0bXB2GUkq5FRHZV9MyrT5SSilVSZOCUkqpSpoUlFJKVXLrNgWllKpOSUkJ2dnZnD592tWhuFRQUBCxsbH4+/vXehtNCkopj5OdnU1ISAjx8fGIiKvDcQljDIWFhWRnZ5OQkFDr7bT6SCnlcU6fPk3z5s29NiEAiAjNmzev89WSJgWllEfy5oRQ4WKOgVYfqRoZY8jMP87J1Jl02PI3Gp06yImglqxrez/bml+Fj4/QOjyYti0akxDRmOAA/Top5e4c+r9YRMKA94BugAHuAnYAs4B4YC8wwRhzxFr/ceBuoAx4wBjzlSPjUz+Xd/Q032UeYtWuQ6zKPMTAE0t5yf89guUsAE1O5zJw21/4ouQA88qHnLNtdGgQCRGNaR/ZhEHtmjOkQwuaBGqiUOpSVXTUjYiIuKR1asPR/2P/CSw2xtwkIgFAMPAEsNQY85KITAGmAI+JSCIwEegKxADfiEhHY0yZg2P0esWnSnhv5W4Wbz3IrvzjAIQ3DmBw+whezJpD8Kmz56wfLGf5Z4t5vHzfc+wtPMHughPsOXSc3YdOsOfQCT7feID/fL8Pf1+hf0I4wztFMqJzJG1bNHHFP08pVQcOSwoi0hQYCtwBYIw5C5wVkeuBZGu16UAK8BhwPTDTGHMG2CMimUB/4HtHxejtzpaWM2PtPl5fuouiUyUMbhfBTX1iGdIhgi4tm+LjIzD1YLXbSvEBGgX40iW6KV2im56zrKSsnNR9R1i+PZ9l2/N5bkEGzy3IIL55MNf1bMXEfnHEhDVyxj9RKZfZu3cvo0ePZsiQIaxZs4YePXpw55138vTTT5Ofn8+MGTNo3749d911F7t37yY4OJhp06aRlJREYWEhkyZNoqCggP79+2M/Q+aHH37I66+/ztmzZxkwYABvv/02vr6+9Ra3I68U2gIFwL9FpAeQCjwIRBljcgGMMbkiEmmt3wpYY7d9tlWm6pkxhq+2HeSlRdvZW3iSwe2b88Q1XegaE/rzlUNjoXh/9eU18Pf1YWDb5gxs25zHr+nC/sMnWb4jnyXpebyxbBdvLtvF8E6R/M+A1iR3isTXRxsEleP85cttpOccrdf3TIxpytNju15wvczMTD755BOmTZtGv379+Oijj1i1ahXz5s3jhRdeIC4ujl69evHFF1+wbNkybr/9djZt2sRf/vIXhgwZwlNPPcWCBQuYNm0aABkZGcyaNYvvvvsOf39/7r33XmbMmMHtt99eb/82RyYFP6A38DtjzFoR+Se2qqKaVHdm+NkE0iJyD3APQOvWresjTq/yQ9YRnl+QwYZ9R+gQ2YR/39mP5I4tar5LYeRT8OUDUHLqpzL/RrbyWooLD+b2y+K5/bJ49h8+ycz1Wcxan83S7RuICQ3iF/1aM6l/HJFNgy7xX6dUw5KQkED37t0B6Nq1KyNHjkRE6N69O3v37mXfvn189tlnAIwYMYLCwkKKi4tZsWIFn3/+OQDXXnstzZo1A2Dp0qWkpqbSr18/AE6dOkVkZGQ1e754jkwK2UC2MWat9fpTbEkhT0SirauEaCDfbv04u+1jgZyqb2qMmQZMA+jbt+/Pkoaq2Ydr9vHnuVtp3jiQF2/ozs19YvHzvcBdyUkTbI9Ln4HibNsVwsinfiqvo7jwYB69qjO/v6Ij36Tn8dG6LF77ZidvpWTyi75x/HpYW2KbBV/UeytVndr8oneUwMDAyuc+Pj6Vr318fCgtLcXP7+en4IofaNX9UDPGMHnyZF588UUHRezAfgrGmIPAfhHpZBWNBNKBecBkq2wyMNd6Pg+YKCKBIpIAdADWOSo+b2KM4e9LdvLkF1sZ0SmSlEeTmdS/9YUTQoWkCfCHrTC1yPZ4kQnBnr+vD1d3j+a/dw9g+SPJ3Ni7FTPXZ5H8Sgp//HQzew6duOR9KNXQDR06lBkzZgCQkpJCREQETZs2Pad80aJFHDlyBICRI0fy6aefkp9v+y19+PBh9u2rcRTsi+Lou49+B8yw7jzaDdyJLRHNFpG7gSzgZgBjzDYRmY0tcZQC9+mdR5eutKycP8/dxsfrspjQN5YXxnevfTJwkoSIxrx4QxK/G9GBaSt28/G6LD5NzWZMUgz3j2hPx6gQV4eolENMnTqVO++8k6SkJIKDg5k+fToATz/9NJMmTaJ3794MGzassqo8MTGR5557jlGjRlFeXo6/vz9vvfUWbdq0qbeYxL5V29307dvX6CQ7NTtdUsYDH//A1+l53De8HY+M6uQWvTwLjp3hvVW7+fD7fZwsKePG3rE8dGVHvWNJ1VpGRgZdunRxdRgNQnXHQkRSjTF9q1tfexZ5qOKTJfzqPxtYv+8wU8cmcsfg2g+I5WotQgJ5/Oou/GZoO9759kc+WL2XeZtzuHNQPPcmtyc0uPYjPiql6qZh1SOoenHo+BkmvPs9m/YX8cakXm6VEOw1axzAE9d0YdnDwxiTFM20lbu5/K/LePfbHzldojWLSjmCJgUPU1ZueODjH9hbeIIP7uzHmKQYV4d0yWKbBfP3CT1Z8LvL6d2mGS8u2s6IV1P4cnMO7lz9qVRDpEnBw/zzm52s/rGQZ8d1Y1D7SxsDpaFJjGnKB3f256NfDSAsOIDfffwDv5i2pt47JinlzTQpeJBvdxbwxvJMbu4Ty4S+cRfewE0NahfBl78bwgvju7Mr7xhj3ljJn+Zs4fCJsxfeWCl1XpoUPERu8Sn+MGsTHSNDeOb6bq4Ox+F8fYT/GdCalEeGc/tl8cxcv5/hr6YwffVeSsvKXR2eUm5Lk4IHKCkr5/6PfuBMSRlv39qbRgH1NzhWQxca7M/U67qy6MHL6d4qlKfnbWPsm9+Ruu+Iq0NT6md++ctfkp6eXu/v26RJ/Y1ArEnBA7zy1Q5S9x3hpRuTaOelw1N3jArhv3f3551belN08iw3vrOaKZ+lcUSrlFRtpM2G17rB1DDbY9psh+zmvffeIzEx0SHvXV80Kbi5r7cdZNqK3dw2sA1je7j/nUaXQkS4uns03zw0jF8PbcunqdmM+FsKs9ZnUV6udympGqTNtg36WLwfMLbHLx+45MRw4sQJrr32Wnr06EG3bt2YNWsWycnJVHS4ff/99+nYsSPJycn86le/4v777wfgjjvu4IEHHmDQoEG0bduWTz/9FIDjx48zcuRIevfuTffu3Zk7d26N+74UmhTc2P7DJ3n4k810bxXKk2O092aFxoF+PH5NFxY8cDntI5vw2GdbuOl/V+tdSqp6S585dxRgsL1e+swlve3ixYuJiYlh8+bNbN26ldGjR1cuy8nJ4dlnn2XNmjUsWbKE7du3n7Ntbm4uq1atYv78+UyZYhtcOigoiDlz5rBx40aWL1/Oww8/7JBbsjUpuLE/z90KBt6+pTeBft7TjlBbnVqGMPvXl/HqzT3YV3iSsW+u4sWFGZw8W+rq0FRDUpxdt/Ja6t69O9988w2PPfYYK1euJDT0p/lK1q1bx7BhwwgPD8ff35+bb775nG3HjRuHj48PiYmJ5OXlAbaBLZ944gmSkpK44oorOHDgQOWy+qTDXLiplbsKSNlRwJ+u6UJcuA41XRMR4aY+sVzRJZKXFm3n3RW7mZ+Wy3PjujG8c/2OQ6/c1EVMJFUbHTt2JDU1lYULF/L4448zatSoymUX+oVvP+R2xbozZsygoKCA1NRU/P39iY+P5/Tp05cUY3X0SsENlZUbnl+QQVx4I24fVH+jI3qysOAAXroxidm/voxGAb7c+cF67puxkbyj9f+fSrmZkU/ZJo6yV8eJpKqTk5NDcHAwt956K4888ggbN26sXNa/f3++/fZbjhw5QmlpaeVEO+dTXFxMZGQk/v7+LF++vN6HzK6gVwpu6LPUbLYfPMab/9NLq43qqH9COAsfuJxpK37k9WWZrNhZwKOjO3HLgDY6Lai3queJpCps2bKFRx99FB8fH/z9/XnnnXd45JFHAGjVqhVPPPEEAwYMICYmhsTExHOql6pzyy23MHbsWPr27UvPnj3p3LnzJcVXEx06282cOFPK8FdTaNWsEZ//dpBbDIXdUO09dIInv9jKqsxD9Godxos3dKdzy6auDkvVA3cYOvv48eM0adKE0tJSxo8fz1133cX48ePrfT91HTpbq4/czLQVu8k/doYnr+2iCeESxUc05r939+e1X9gaose8voq/Lt6uI7Aqp5g6dSo9e/akW7duJCQkMG7cOFeHBGj1kVvJO3qaaSt2c233aPq0CXd1OB5BRBjfK5bkjpE8vzCDt1N+ZMGWXF4Y353BHjagoGpYXn31VVeHUC29UnAjr361g7Jyw2OjHVOX6M2aNQ7g1Zt78NEvByDALe+t5aHZm3SQPTfmzlXj9eVijoEmBTeRnnOUTzdmM3lQG1o311tQHWVQ+wgW/34o9w9vz7xNOYz8WwqfpWbrCcbNBAUFUVhY6NWfmzGGwsJCgoKC6rSdNjS7AWMMt72/jq05xXz7yHCdjtJJdhw8xuOfp7Exq4jB7Zvz/LjuxEc0dnVYqhZKSkrIzs52yH387iQoKIjY2Fj8/c89Z+gczW4uZUcBqzIP8dSYRE0ITtSpZQif/mYQH63L4uVF27nqHyt4YGQHfnV5WwL89CK7IfP39ychwT2noXU1/WY3cMYY/rZkB22aB3PrQO2o5mw+PsKtA9vwzcPDGNE5kle+2sHYN1aRuu+wq0NTyiE0KTRwqfuOsPXAUe4Zqr9OXSmqaRDv3NqH927vy9HTJdz4zvf8ac4Wik+VuDo0peqVnmUauH+v3kvTID/G92rl6lAUcEViFEseGsbdQxL4eF0WV/z9W+an5Xh1g6byLA5NCiKyV0S2iMgmEdlglYWLyBIR2WU9NrNb/3ERyRSRHSJylSNjcwc5RadYvPUgE/u3JjhAm38aiiaBfvx5TCJz7xtCVNNA7v/oB+78YD37D590dWhKXTJnXCkMN8b0tGvpngIsNcZ0AJZarxGRRGAi0BUYDbwtIl49sM+Ha/bZ7jzStoQGqXtsKF/cO5inxiSyfs9hrnztW95J+ZESnSNauTFXVB9dD0y3nk8HxtmVzzTGnDHG7AEygf7OD69hOF1SxsfrsrgyMUqHxm7A/Hx9uGtIAkseGsbQDi14efF2rn19Jev2aEO0ck+OTgoG+FpEUkXkHqssyhiTC2A9Vgxq3wqwH9Q82yo7h4jcIyIbRGRDQUGBA0N3rXmbcjhysoQ7Bultde4gJqwR027vy//d3pcTZ8qY8O73/PHTzdojWrkdR1dUDzbG5IhIJLBERLafZ93qRnf7WeudMWYaMA1sndfqJ8yGxRjDv77bQ+eWIQxsq2McuZMrE6MY3L45ry/N5L2Vu1mSnsfj13Thpt6x+OjQ3MoNOPRKwRiTYz3mA3OwVQfliUg0gPWYb62eDcTZbR4L5DgyvoZq7Z7DbD94jDsGxetIqG4oOMCPKVd3ZsEDl9OuRRP++GkaE979noxcnSNaNXwOSwoi0lhEQiqeA6OArcA8YLK12mRgrvV8HjBRRAJFJAHoAKxzVHwN2Qff7SUs2J9xehuqW6uYI/qvNybxY8Fxxryxime+TOfYae3boBouR1YfRQFzrF+6fsBHxpjFIrIemC0idwNZwM0AxphtIjIbSAdKgfuMMV43sH32kZN8nX6QXw9rR5C/V9985RF8fIQJ/eK4MjGKV77ewb9X72F+Wg5/urYL1/WI0StB1eDogHgNzIuLMnhv5R5W/nE4MWGNLryBciub9hfx5y+2suVAMYPaNeeZ67vSPjLE1WEpL6Mzr7mJk2dLmbluP6O7ttSE4KF6xoXxxX2DeXZcN7YeKGb0P1by/AKtUlINhyaFBuSLH3IoPlXCHYPjXR2KciBfH+G2gW1Y9kgyN/aO5b1Vexjxt2/5LDWb8nL3vXJXnkGTQgNhjGH66r10jWlK3zbNLryBcnsRTQJ5+aYk5tw7mJjQIB7+ZDM3v/s9Ww8Uuzo05cU0KTQQ6blH2ZF3jEn9W2vjo5fpGRfGnHsH89cbk9h76ARj31zFE3O2UHj8jKtDU15Ik0IDMW9zDn4+wjXdo10dinKBiruUlj2SzB2D4pm1fj/Jr6bw/qo9OpaScipNCg2AMYb5m3MZ0iGC8MYBrg5HuVBoI3+eHtuVxQ9eTs+4MJ6dn85V/1jB8u35F95YqXqgSaEB2Jh1hANFp7iuR4yrQ1ENRIeoEP5zV3/en9wXY+DOD9Zzx7/XkZl/3NWhKQ+nSaEBmLcph0A/H65MjHJ1KKoBERFGdoniq98P5clru5C69wij/7GCqfO26UB7ymE0KbhYaVk5C7bkMqJzJCFB/q4ORzVAAX4+/PLytix/NJlf9IvjP9/vZdgry5m24kfOlHpdp3/lYJoUXGzN7sMcOn5Wq47UBUU0CeT58d1Z/Puh9GnTjBcWbueKv3/LgrRc23SgabPhtW4wNcz2mDbb1SErN6RzPLrYl5tzaBLox/DOkRdeWSmgY1QIH9zZnxU7C3hhYQb3fbSRByN/4IETb+Jbdsq2UvF++PIB2/OkCa4LVrkdTQoudKa0jEVbcxmVGKWD36k6G9qxBYPbR/DJhv0MW/gAvpw6d4WSU7D0GU0Kqk60+siFVuw8xNHTpYztqVVH6uL4+ggT+7emJYXVr1Cc7dyAlNvTpOBCX27OoVmwP0PaR7g6FOXmJDS22vKjgVEcP1Pq5GiUO9Ok4CInz5ayJD2Pq7tH4++rH4O6RCOfAv9zR9Y9I4E8eewGhv51Oe+t3M3pEr1TSV2Yno1c5JuMfE6VlOldR6p+JE2Asa9DaBwgEBpH4Pg3ufu3j5EY3ZTnFmQw4tUUZq3PolSHzVDnoZPsuMiv/rOBtOwiVk8Zia9O6K4cbHXmIV7+ageb9xfRNqIxD43qyDXdovHR755X0kl2GpjiUyV8u6OAMUkxmhCUUwxqH8EX9w5i2m198PMV7v/oB8a8sYpv0vNw5x+Gqv5pUnCBr7Yd5GxZuVYdKacSEUZ1bcmiB4fy9wk9OH6mlF/+ZwPj3vqOlB35mhwUoNVHzpU2G5Y+gynOJk8iiBr/AqL3kCsXKSkrZ87GA7y+bBfZR07Ru3UYD13ZicHtm+ucHh7ufNVHmhScJW22rYdpiV0HI/9GtsZBTQzKhc6WlvNpajZvLttFTvFp+seH8+AVHRjUTpODp9Kk0BC81s029EBVoXHwh63Oj0epKs6UljFz3X7eSfmRg0dP06dNMx4Y2YGhHSI0OXgYbWhuCGrqWao9TlUDEejny+RB8aQ8msyz47qRW3SKyf9ax7i3V7NsuzZIewuHJwUR8RWRH0RkvvU6XESWiMgu67GZ3bqPi0imiOwQkascHZtT1dDjtMZypVwkyN+X2wa2IeXR4bx4Q3cKj5/hrg82MPbNVSzemkt5uSYHT+aMK4UHgQy711OApcaYDsBS6zUikghMBLoCo4G3RcRzRokb+RRlvuf2OMW/ka0nqlINUICfD5P6t2b5I8n89aYkjp0u5TcfbmTUP1bwWWq2zh3toRyaFEQkFrgWeM+u+HpguvV8OjDOrnymMeaMMWYPkAn0d2R8TpU0gYXxUzhgIjBWj1NtZFbuwN/Xhwl941j60DBen9QLPx/h4U82k/xKCv/9fq8On+FhHD109j+APwIhdmVRxphcAGNMrohUTCTQClhjt162VXYOEbkHuAegdevWDgjZcd4+3IemMR8y69eXuToUperMz9eH63rEMDYpmuU78nlr+Y/8ee42/rk0kzsHx3PrgDaEBuvsge7OYVcKIjIGyDfGpNZ2k2rKflZ5aYyZZozpa4zp26JFi0uK0ZkOFp8mI/eoTqaj3J6IMKJzFJ/+5jJm3TOQxJimvPLVDga9tJRn56dzoOjUhd9ENViOvFIYDFwnItcAQUBTEfkQyBORaOsqIRrIt9bPBuLsto8FchwYn1Ol7LD9M4d30qSgPIOIMKBtcwa0bU56zlH+b+Vupq/ey/TVexnbI4Z7hralS3RTV4ep6shhVwrGmMeNMbHGmHhsDcjLjDG3AvOAydZqk4G51vN5wEQRCRSRBKADsM5R8Tnb8h35xIQG0TGqiatDUareJcY05bVf9OTbPw5n8qB4vtp2kKv/uZLb3l/LtzsL9HZWN+KKfgovAVeKyC7gSus1xphtwGwgHVgM3GeM8YgWrLOl5azadYjkzpHaCUh5tFZhjfjzmES+nzKSR6/qxI6Dx5j8r3WMem0FM9dlaaO0G9AezU6wOvMQ//PeWv7v9r5cmRjl6nCUcpqzpeXMT8vhvZV7SM89SnjjAG4d2IbbBrahRUigq8PzWufr0ezou48UtqqjAF8fBrVr7upQlHKqAD8fbugdy/herViz+zDvr9rNG8t28b8pPzImKZrJg+LpERfm6jCVHU0KTrB8RwED2obTOFAPt/JOIsJl7ZpzWbvm7C44zn++38cnG/bz+Q8H6NU6jDsGxXN1t2gC/HTkHVfTT8DB9h8+SWb+cZL1riOlAGjboglTr+vKmidGMnVsIkUnS3hw5iYGv7yMf36zi/yjp10dolfTn64O9tOtqO7Tp0IpZwgJ8ueOwQncflk83+4qYPrqvbz2zU7eWLaLq7q25LbL2jAgIVxvznAyTQoOtnxHAW2aB5MQ0djVoSjVIPn4CMM7RTK8UyR7Dp3go7X7mL0hmwVbcukQ2YRbB7ZhfO9WNA3S3tLOoNVHDnS6pIzVPx5ieCe9FVWp2kiIaMyfrk1k7RMjeeWmJIIDfHl63jYGvrCUKZ+lkZZdpH0eHEyvFBxoze5CTpeUk6xVR0rVSZC/Lzf3jePmvnFs3l/Eh2v2MXdTDjPX76drTFMm9W/N9T1jCNGrh3qnScGBUnYUEOTvw8C2eiuqUherR1wYPeLC+PPYROb+cIAZa7N48outvLAwg+t6xPCLfnH0jAvTq/F6oknBgVJ25DOoXQRB/p4zLYRSrtI0yJ/bLovn1oFt2JxdzMdrsyqvHjpGNWFC3zjG92pF8ybaKe5SaFJwkD2HTrC38CR3DUlwdShKeRQRoWdcGD3jwnhyTBfmp+Uya/1+nluQwcuLt3NFlygm9I1jaMcW+Pro1UNdaVJwkBU7CwBI7qj9E5RylJAgfyb1b82k/q3ZmXeM2ettHeIWbT1IVNNAxveK5aY+rWgfGXLhN1OAjn3kML/9MJW07GK+mzLC1aEo5VXOlpazNCOPzzZms3xHAWXlhh6xodzYJ5bresQQFhzg6hBdTsc+crLycsPaPYd17gSlXCDAz4eru0dzdfdoCo6dYe6mA3y28QBPzd3Gc/MzGNklknG9WpHcqQWBftreV5UmBQfYlX+cwyfOMrBtuKtDUcqrtQgJ5JeXt+WXl7dlW04xn6UeYN5mW/VSaCN/rk2K5oZerejTppnevWQ5b1IQkWNUMyUmtqkzjTFGp1WqxprdhQB6K6pSDUjXmFC6xoTyxDWdWZV5iC9+OMCcjQf4aG0Wsc0aMa5nK67rGUPHKO9ufzhvUjDGePfRuUhrdhfSKqwRceHBrg5FKVWFn68PyZ0iSe4UyYkzpXydfpA5P+Twdkomby7PpHPLEMb2iOG6HjFe+X+4TtVHIhKJbb5lAIwxWfUekZszRtsTlHIXjQP9GN8rlvG9Ysk/dpqFabl8mZbLK1/t4JWvdtCrdRhjk2K4NimaqKZBF35DD1CrpCAi1wF/A2KAfKANkAF0dVxo7knbE5RyT5EhQdwxOIE7Biew//BJ5qflMm9zDs/MT+fZBen0iw9nTFI0o7u1JDLEcxNEba8UngUGAt8YY3qJyHBgkuPCcl/anqCU+4sLD+a3ye34bXI7MvOPsyAtlwVbcnhq7jaenreN/laCuMoDE0St+imIyAZjTF8R2Qz0MsaUi8g6Y0x/x4dYs4bYT+HeGals3l/MqseG690MSnmYnXnHWJCWy/y0HH4sOIEI9GsTzuhuLRndrSUxYY1cHWKt1Ec/hSIRaQKsAGaISD5QWl8BegpjDGt2Hya5UwtNCEp5oI5RIXS8MoTfX9GBnXnHWbgll8VbD/LM/HSemZ9Oj7gwru7WktFdWxLvpnOo1DYpXA+cBv4A3AKEAs84Kih39VN7glYdKeXJRIROLUPo1DKEP1zZkd0Fx1m09SBfbTvIS4u289Ki7XSKCmFU1yhGJbakW6umbvNDsVZJwRhzwu7ldAfF4vYq2hMu06SglFdp26IJ9w1vz33D27P/8EmWpOfx1baDvLU8kzeWZRITGsSori0ZlRhFv4Rw/H0b7vxmtb376AbgZSASW8c17bxWjYr+CbHN3KNeUSlV/+LCg7lrSAJ3DUng8ImzLM3I4+v0PD5el8UHq/cSEuRHcqdIruhi6ysR2qhhTRRU2+qjvwJjjTEZtX1jEQnC1gYRaO3nU2PM0yISDswC4oG9wARjzBFrm8eBu4Ey4AFjzFe13Z+raXuCUqqq8MYBlTPInTxbyspdh1iakcfSjHy+3JyDn4/QLz6cKxKjGNE5skHM5V7bpJBXl4RgOQOMMMYcFxF/YJWILAJuAJYaY14SkSnAFOAxEUkEJmLr+xADfCMiHY0xZXXcr0toe4JS6nyCA/y4qmtLrurakrJyw6b9RSzNyOObjDyenZ/Os/PTSYhozIjOkYzoHEm/+HAC/JxfzVTbpLBBRGYBX2A72QNgjPm8pg2M7V7X49ZLf+vPYGu0TrbKpwMpwGNW+UxjzBlgj4hkAv2B72sZo0tpe4JSqrZ8fYQ+bZrRp00z/ji6M1mFJ1m+I59l2/P575p9vL9qD00C/RjSPoLhnVswrGMkLUOd0x+itkmhKXASGGVXZoAakwKAiPgCqUB74C1jzFoRiTLG5AIYY3KtoTMAWgFr7DbPtsqqvuc9wD0ArVu3rmX4jrd292FtT1BKXZTWzYOZPCieyYPiOXm2lO8yC1m2PZ/l2/NZvO0gAJ1bhjCsUwuSO0bSp00zh11F1Pbuozsv5s2tqp+eIhIGzBGRbudZvbqK+J/1rDPGTAOmga3z2sXEVd9s7QmFDNP2BKXUJQoO8OPKxCiuTIzCGMPOvOOk7MgnZUcB/1q1h3e/3U2TQD9uGdCax6/pUu/7r+3dR69XU1wMbDDGzL3Q9saYIhFJAUYDeSISbV0lRGMbSwlsVwZxdpvFAjm1ic/VMvOPU6jtCUqpembfH+LXw9px/EwpqzMPkbKzgBYhgQ7ZZ22vP4KAnsAu6y8JCAfuFpF/VLeBiLSwrhAQkUbAFcB2YB4w2VptMlCRVOYBE0UkUEQSgA7Aurr9c1xD2xOUUs7QJNCPUV1b8sL47vzy8rYO2Udt2xTaY7uTqBRARN4BvgauBLbUsE00MN1qV/ABZhtj5ovI98BsEbkbyAJuBjDGbBOR2UA6tiE07nOXO4/WaHuCUspD1DYptAIaY6sywnoeY4wpE5Ez1W1gjEkDelVTXgiMrGGb54HnaxlTg6DtCUopT1KXzmubrHYBAYYCL4hIY+AbB8XmFrQ9QSnlSWp799H7IrIQW78BAZ4wxlQ0Aj/qqODcgbYnKKU8yXkbmkWks/XYG1sbwX5s7QAtrTKvt27vEaJDg7Q9QSnlES50pfAQto5if7Mrs+8bMKLeI3IzG/cdoXebZtqeoJTyCOe9UjDG3GM9fQe43hgzHFiOrcH5EQfH1uDlHT3NgaJT9G7dzNWhKKVUvahtP4UnjTFHRWQItttQP8CWKLzaxn1HAOjdOsy1gSilVD2pbVKo6C9wLfC/Vi/mAMeE5D42Zh0hwM+HrjGhrg5FKaXqRW2TwgEReReYACwUkcA6bOuxNmYVkdQq1CXD2yqllCPU9mw2AfgKGG2MKcI2xIVX34p6prSMLdnF9G6j7QlKKc9R234KJ7EbJtsa+jrXUUG5g205RzlbVq7tCUopj6L1Hhfpp0ZmvVJQSnkOTQoXaWPWEWKbNSKyqXNmQ1JKKWfQpHCRNu4r0qsEpZTH0aRwEXKKTnHw6GltT1BKeRxNChdhY5atPaFPm3AXR6KUUvVLk8JFSN13hCB/HzpHh7g6FKWUqleaFC7CxqwikmLD8PfVw6eU8ix6Vquj0yVlpOcUayOzUsojaVKoo60HiikpM/TRnsxKKQ+kSaGOUq1Oa730ziOllAfSpFBHG7OO0KZ5MBFNAl0dilJK1TtNCnVgjGFjlnZaU0p5Lk0KdZB95BQFx87oyKhKKY/lsKQgInEislxEMkRkm4g8aJWHi8gSEdllPTaz2+ZxEckUkR0icpWjYrtYFZ3WtCezUspTOfJKoRR42BjTBRgI3CciicAUYKkxpgOw1HqNtWwi0BUYDbwtIr4OjK/ONu47QnCAL52itNOaUsozOSwpGGNyjTEbrefHgAygFXA9MN1abTowznp+PTDTGHPGGLMHyAT6Oyq+i7Exq4iecWH4aac1pZSHcsrZTUTigV7AWiDKmqSnYrKeSGu1VsB+u82yrbKq73WPiGwQkQ0FBQUOjdveybOlpOce1UZmpZRHc3hSEJEmwGfA740xR8+3ajVl5mcFxkwzxvQ1xvRt0aJFfYV5QWnZxZSVG3q3CXPaPpVSytkcmhRExB9bQphhjKmYzjNPRKKt5dFAvlWeDcTZbR4L5DgyvrqoaGTuFadXCkopz+XIu48EeB/IMMb83W7RPGCy9XwyMNeufKKIBIpIAtABWOeo+Opq474i2rZoTLPGAa4ORSmlHMbPge89GLgN2CIim6yyJ4CXgNkicjeQBdwMYIzZJiKzgXRsdy7dZ4wpc2B8tWaMYdP+IoZ2jHB1KEop5VAOSwrGmFVU304AMLKGbZ4HnndUTBcrt/g0h46foWdcmKtDUUoph9J7K2shLbsIgKTYMJfGoZRSjqZJoRY27S/G31foojOtKaU8nCaFWkjLLqJzy6YE+jWoDtZKKVXvNClcQHm5YUt2MUmxoa4ORSmlHE6TwgXsKTzBsTOl9NBGZqWUF9CkcAEVjcw9tJFZKeUFNClcwOb9xQQH+NI+somrQ1FKKYfTpHABm7OL6BYTiq9PTV0ulFLKc2hSOI+SsnLSc45qI7NSymtoUjiPHQePcaa0XBuZlVJeQ5PCeaRlFwPayKyU8h6aFM5j8/4imgX7ExfeyNWhKKWUU2hSOI/N2UV0jw3DNgq4Ukp5Pk0KNTh1toxd+cfpoY3MSikvokmhBttybNNvanuCUsqbaFKowab9RQAkxemVglLKe2hSqEFadjHRoUFEhgS5OhSllHIaTQo1SMsu0k5rSimvo0mhGsUnS9hbeFJnWlNKeR1NCtVIO1AEoHMyK6W8jiaFamy2Gpm7tdLqI6WUd9GkUI3N2cW0jWhMaCN/V4eilFJOpUmhGtrIrJTyVg5LCiLyLxHJF5GtdmXhIrJERHZZj83slj0uIpkiskNErnJUXBeSd/Q0eUfPaCOzUsorOfJK4QNgdJWyKcBSY0wHYKn1GhFJBCYCXa1t3hYRXwfGVqOK9gQdLlsp5Y0clhSMMSuAw1WKrwemW8+nA+PsymcaY84YY/YAmUB/R8V2Ppuzi/DzEbrGNHXF7pVSyqWc3aYQZYzJBbAeI63yVsB+u/WyrTKnS8supmNUCEH+LrlQUUopl2ooDc3VjU1tql1R5B4R2SAiGwoKCuo1CGMMadnF9NDxjpRSXsrZSSFPRKIBrMd8qzwbiLNbLxbIqe4NjDHTjDF9jTF9W7RoUa/BZR0+SfGpErq3CqvX91VKKXfh7KQwD5hsPZ8MzLUrnygigSKSAHQA1jk5NrYcsE2/qbejKqW8lZ+j3lhEPgaSgQgRyQaeBl4CZovI3UAWcDOAMWabiMwG0oFS4D5jTJmjYqvJlgPFBPj60DEqxNm7VkqpBsFhScEYM6mGRSNrWP954HlHxVMbWw8U06llCAF+DaWpRSmlnEvPfhZjDFuyi3W8I6WUV9OkYMk6fJKjp0u1PUEp5dU0KVgqGpm765WCUsqLaVKwbMnWRmallNKkYNmijcxKKaVJAWyNzFsPFNNd2xOUUl5OkwI/NTJre4JSyttpUsA2CB5oI7NSSmlSwNZpTRuZlVJKkwJga2TuHK2NzEop5fVnQWMMWw5oT2allAJNCuwrPMkxbWRWSilAk4L2ZFZKKTtenxS0kVkppX7i9UlBG5mVUuonXn0m1EZmpZQ6l1cnBW1kVkqpc3l1UtBGZqWUOpdXJwVtZFZKqXN5dVJIy9ZGZqWUsue1Z0NjDFtztJFZKaXseW1S0EZmpZT6Oa9NCtrIrJRSP+fVSUEbmZVS6lwNLimIyGgR2SEimSIyxVH72aKNzEop9TMN6owoIr7AW8DVQCIwSUQS63s/2sislFLVa1BJAegPZBpjdhtjzgIzgevreyfayKyUUtVraEmhFbDf7nW2VVZJRO4RkQ0isqGgoOCidlJaXs7V3VrSu3Wzi49UKaU8UENLClJNmTnnhTHTjDF9jTF9W7RocVE7aR8Zwju39qFTS21kVkopew0tKWQDcXavY4EcF8WilFJep6ElhfVABxFJEJEAYCIwz8UxKaWU1/BzdQD2jDGlInI/8BXgC/zLGLPNxWEppZTXaFBJAcAYsxBY6Oo4lFLKGzW06iOllFIupElBKaVUJU0KSimlKmlSUEopVUmMMRdeq4ESkQJg3yW8RQRwqJ7CqU8aV91oXHWjcdWNJ8bVxhhTbe9ft04Kl0pENhhj+ro6jqo0rrrRuOpG46obb4tLq4+UUkpV0qSglFKqkrcnhWmuDqAGGlfdaFx1o3HVjVfF5dVtCkoppc7l7VcKSiml7GhSUEopVcnjk4KIjBaRHSKSKSJTqlkuIvK6tTxNRHo7IaY4EVkuIhkisk1EHqxmnWQRKRaRTdbfU46Oy9rvXhHZYu1zQzXLXXG8Otkdh00iclREfl9lHacdLxH5l4jki8hWu7JwEVkiIrusx2qn9bvQ99EBcb0iItutz2qOiITVsO15P3cHxDVVRA7YfV7X1LCts4/XLLuY9orIphq2dcjxqunc4NTvlzHGY/+wDb/9I9AWCAA2A4lV1rkGWIRt1reBwFonxBUN9LaehwA7q4krGZjvgmO2F4g4z3KnH69qPtOD2DrfuOR4AUOB3sBWu7K/AlOs51OAly/m++iAuEYBftbzl6uLqzafuwPimgo8UovP2qnHq8ryvwFPOfN41XRucOb3y9OvFPoDmcaY3caYs8BM4Poq61wP/MfYrAHCRCTakUEZY3KNMRut58eADKrMRd2AOf14VTES+NEYcyk92S+JMWYFcLhK8fXAdOv5dGBcNZvW5vtYr3EZY742xpRaL9dgm83QqWo4XrXh9ONVQUQEmAB8XF/7q2VMNZ0bnPb98vSk0ArYb/c6m5+ffGuzjsOISDzQC1hbzeLLRGSziCwSka5OCskAX4tIqojcU81ylx4vbLPx1fQf1RXHq0KUMSYXbP+xgchq1nH1sbsL21VedS70uTvC/Va11r9qqA5x5fG6HMgzxuyqYbnDj1eVc4PTvl+enhSkmrKq9+DWZh2HEJEmwGfA740xR6ss3oitiqQH8AbwhTNiAgYbY3oDVwP3icjQKstdebwCgOuAT6pZ7KrjVReuPHZ/AkqBGTWscqHPvb69A7QDegK52KpqqnLZ8QImcf6rBIcerwucG2rcrJqyOh8vT08K2UCc3etYIOci1ql3IuKP7UOfYYz5vOpyY8xRY8xx6/lCwF9EIhwdlzEmx3rMB+ZguyS155LjZbka2GiMyau6wFXHy05eRTWa9ZhfzTqu+q5NBsYAtxir8rmqWnzu9coYk2eMKTPGlAP/V8P+XHW8/IAbgFk1rePI41XDucFp3y9PTwrrgQ4ikmD9ypwIzKuyzjzgduuumoFAccVlmqNY9ZXvAxnGmL/XsE5Laz1EpD+2z6rQwXE1FpGQiufYGim3VlnN6cfLTo2/3lxxvKqYB0y2nk8G5lazTm2+j/VKREYDjwHXGWNO1rBObT73+o7Lvh1qfA37c/rxslwBbDfGZFe30JHH6zznBud9v+q79byh/WG7W2Yntlb5P1llvwF+Yz0X4C1r+RagrxNiGoLtsi4N2GT9XVMlrvuBbdjuIFgDDHJCXG2t/W229t0gjpe132BsJ/lQuzKXHC9siSkXKMH26+xuoDmwFNhlPYZb68YAC8/3fXRwXJnY6pkrvmf/WzWumj53B8f1X+v7k4btxBXdEI6XVf5BxffKbl2nHK/znBuc9v3SYS6UUkpV8vTqI6WUUnWgSUEppVQlTQpKKaUqaVJQSilVSZOCUkqpSpoUlLKISJmcOxprvFX+BxE5LSKh59k2WkTm17AsRUQuaoJ1ERkjIn+5mG2VuhiaFJT6ySljTE+7v71W+SRsHYPGn2fbh7D1zK1vC4DrRCTYAe+t1M9oUlDqPESkHdAEeBJbcqjJjcBia5tGIjLTGuxtFtDI7v1Gicj3IrJRRD6xxrhBRK4R27wHq8Q2X8V8AGPrSJSCbZgKpRxOk4JSP2lkV3U0xyqrGFpjJdBJRH42OqWIJABHjDFnrKLfAieNMUnA80Afa70IbMnlCmMbTG0D8JCIBAHvAlcbY4YALarsYgO2UTuVcjg/VwegVANyyhjTs0rZRGC8MaZcRD4HbsY2zIe9aKDA7vVQ4HUAY0yaiKRZ5QOxTZjynTVMUwDwPdAZ2G2M2WOt9zFgPxxzPrbhDJRyOE0KStVARJKADsASu5P4bn6eFE4BQVXKqhs/RoAlxphzqqFEpNcFQgmy9qGUw2n1kVI1mwRMNcbEW38xQCsRaVNlvZ1AvN3rFcAtACLSDUiyytcAg0WkvbUsWEQ6AtuBthV3OwG/qPL+HXHwqKVKVdCkoFTNJmIbK9/eHKu8kjHmBPBjxcke2wQyTaxqoz8C66z1CoA7gI+tZWuAzsaYU8C9wGIRWQXkAcV2uxiO7S4kpRxOR0lVqh6IyHigjzHmyYvcvokx5rg1nv5bwC5jzGsiEgV8ZIwZWZ/xKlUTvVJQqh4YY+YAey/hLX4lIpuwjc8fiu1uJIDWwMOXFJxSdaBXCkoppSrplYJSSqlKmhSUUkpV0qSglFKqkiYFpZRSlTQpKKWUqvT/aoli/vCuqZoAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fit data:\n", + "s = np.array([413, 604, 445])\n", + "tr = 5.4e-3\n", + "fa = np.array([2, 5, 12])\n", + "%time s0, t1 = t1_fit.VFALinear(fa, tr).proc(s)\n", + "\n", + "# Plot data:\n", + "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", + "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", + "plt.plot(fa, s, 'o', label='signal')\n", + "plt.xlabel('FA (deg)')\n", + "plt.ylabel('signal');\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "433727e1-0f92-41c9-b49b-88f11358c704", + "metadata": {}, + "source": [ + "Now fit using the **non-linear** method (slowest, most accurate):" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "04a39172-427f-4b0e-ba85-e0870d0a2e3d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 1.99 ms\n", + "Fitted values: s0 = 13482.2, t1 = 1.323 s\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# Fit data:\n", + "s = np.array([413, 604, 445])\n", + "tr = 5.4e-3\n", + "fa = np.array([2, 5, 12])\n", + "%time s0, t1 = t1_fit.VFANonLinear(fa, tr).proc(s)\n", + "\n", + "# Plot data:\n", + "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", + "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", + "plt.plot(fa, s, 'o', label='signal')\n", + "plt.xlabel('FA (deg)')\n", + "plt.ylabel('signal');\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "a00eb683-0158-4fa1-b62d-ee4b14004235", + "metadata": {}, + "source": [ + "#### DESPOT1-HIFI method\n", + "T1 can be estimated using a combination of SPGR (FLASH) and IR-SPGR (MP-RAGE) acquisitions. This technique also estimates the relative flip angle k_fa (nominal/actual FA). Now add 2 x IR-SPGR acquisitions to the previous 3 x SPGR scans. We now have 5 x acquisitions. All parameters are specified for each acquisition." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "5ac0739a-72e7-476b-aa69-f1bebf7cc32b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 2.91 ms\n", + "Fitted values: s0 = 11856.2, t1 = 1.022 s, k_fa = 1.138\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "s = np.array([249, 585, 413, 604, 445]) # signal\n", + "esp = np.tile(5.4e-3, 5) # echo spacing (IR-SPGR) or TR (SPGR)\n", + "ti = np.array([0.1680, 1.0680, np.nan, np.nan, np.nan]) # delay after inversion pulse\n", + "n = np.array([160, 160, np.nan, np.nan, np.nan]) # number of readout pulses (IR-SPGR only)\n", + "b = np.array([5, 5, 2, 5, 12]) # excitation flip angle\n", + "td = np.array([0, 0, np.nan, np.nan, np.nan]) # delay between end of readout train and next inversion pulse (IR-SPGR only)\n", + "centre = np.array([0.5, 0.5, np.nan, np.nan, np.nan]) # time when centre of k-space is acquired (expressed as fraction of readout pulse train length; IR-SPGR only)\n", + "\n", + "t1_calculator = t1_fit.HIFI(esp, ti, n, b, td, centre)\n", + "%time s0, t1, k_fa, s_fit = t1_calculator.proc(s)\n", + "s0, t1, k_fa, s_fit = t1_calculator.proc(s)\n", + "\n", + "# Plot data:\n", + "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s, k_fa = {k_fa:.3f}\")\n", + "plt.plot(np.arange(5), s_fit, '-', label='model')\n", + "plt.plot(np.arange(5), s, 'o', label='signal')\n", + "plt.xlabel('acquisition number')\n", + "plt.ylabel('signal');\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "id": "480d8d69-def2-47cf-a364-6ab5fe7e2b64", + "metadata": {}, + "source": [ + "### Reference values\n", + "Obtained from fitting DESPOT1-HIFI signal in Matlab:\n", + "T1 = 1.0218\n", + "s0 = 11856\n", + "k = 1.1379\n", + "(data from: INV_ED_004, FSLEyes coordinates 98,99,106)" + ] + }, + { + "cell_type": "markdown", + "id": "546d8b07-8a1d-4953-899f-6c9cd93aef0e", + "metadata": { + "tags": [] + }, + "source": [ + "---\n", + "## T1 mapping\n", + "We use the same approach to perform voxelwise fitting and generate a T1 map. \n", + "The demo data was obtained on a 3-T Siemens Prisma scanner and includes 2 x IR-SPGR and 3 x SPGR scans.\n", + "The IR sequence uses a linear readout for the pulse train and all partitions in k-space are acquired in a single shot. \n", + "Note, the TI specified at the scanner console (and reported in the dicom header) must be converted to the actual TI delay, i.e. that between inversion and the start of the SPGR pulse train: \n", + "$TI_{delay} = TI_{eff} - 0.5 N_{slices} ESP$, where ESP is the echo spacing. \n", + "\n", + "### Variable flip angle\n", + "First, fit the 3 x SPGR scans, i.e. variable flip angle method. \n", + "Start by creating a fitting object, specifying the sequence parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5eeef16b-f46d-4fca-87c9-d11f10912e7c", + "metadata": {}, + "outputs": [], + "source": [ + "vfa_fitter = t1_fit.VFALinear(fa=[2, 5, 12], tr=5.4e-3)" + ] + }, + { + "cell_type": "markdown", + "id": "b6c7d146-c613-4a54-b933-17e26e0052b8", + "metadata": {}, + "source": [ + "Now use the proc_image method to fit every voxel and generate output images:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "36b6e9cd-81c7-498d-91b9-d6df2e472963", + "metadata": {}, + "outputs": [], + "source": [ + "images = [os.path.join('.', 'T1_data', img) for img in ['FA2.nii.gz', 'FA5.nii.gz', 'FA12.nii.gz']]\n", + "\n", + "s0, t1 = vfa_fitter.proc_image(images, threshold=50, dir='C:\\\\temp\\\\sepal', suffix='_VFA');" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "a416a658-a7cf-4aa1-b90b-86b978ad7c3d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAADdCAYAAABAMDLCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACI1ElEQVR4nO39e5hcVbUujL+zqrurutNJJyEh3OSmGFCisIENORADOVzzoGzZKJeP+03gcN8BQg6SRHJiAki45MedcJFPhI1ut3IQ0C1i4kEP8AEbERHRrSIIQgxJX6urav3+6H5Xv2vUXKuqb+kL632efrpq1VpzzTXXmGOO8Y4x53RBECBFihQpUowvZEa6AilSpEiRYuiRKvcUKVKkGIdIlXuKFClSjEOkyj1FihQpxiFS5Z4iRYoU4xCpck+RIkWKcYi6ka4AAEybNi3YcccdR7oaKcYxXnjhhfeDIJi+ue+bynaK4USSXI8K5b7jjjvi+eefH+lqpBjHcM79cSTum8p2iuFEklyntEyKFClSjEOkyj1FihQpxiFS5Z4iRYoU4xCpck+RIkWKcYhUuadIkSLFOESq3FOkSJFiHCJV7ilSpEgxDpEq9xQpUqQYh0iVe4oUKVKMQ6TKPUWKFCnGIVLlniJFihTjEKlyT5EiRYpxiFS5p0iRIsU4RKrcU6RIkWIcIlXuKVKkSDEOkSr3FClSpBiHSJV7ihQpUoxDpMo9RYoUKcYhqip359wa59x7zrlfybGHnXMv9f79l3Pupd7jOzrnOuS324ex7ilSDAqpbKcYz6hlD9X7AKwG8AAPBEFwLD87574B4EM5/80gCPYYovqlSDGcuA+pbKcYp6iq3IMg+Jlzbkffb845B+DLAOYNcb1SpBh2pLKdYjxjsJz7HADvBkHwhhzbyTn3onPuGefcnLgLnXNnO+eed849/7e//W2Q1UiRYsiRynaKMY3BKvfjATwk398BsH0QBHsCuBTAt5xzk3wXBkFwZxAEewdBsPf06dMHWY0UKYYcqWynGNMYsHJ3ztUBOBrAwzwWBEFXEAQf9H5+AcCbAD452EqmSLE5kcp2ivGAwVjuBwP4TRAEb/GAc266cy7b+3lnALsA+P3gqpgixWZHKtspxjxqSYV8CMCzAGY6595yzp3R+9NxiLqtAPA5AP/pnHsZwKMAzgmCYP1QVjhFiqFCKtspxjNqyZY5Pub4qZ5j3wHwncFXK0WK4Ucq2ynGM9IZqilSpEgxDpEq9xQpUqQYh0iVe4oUKVKMQ6TKPUWKFCnGIVLlniJFihTjEKlyT5EiRYpxiFS5p0iRIsU4RKrcU6RIkWIcIlXuvTjuuONGugrjDrfeeutIVyEFgJkzZ450FcYd5s0b/StB17JZx7jHJZdcgk9+Ml0DaqiwatUqbLHFFthxxx3xxBNP4PDDDx/pKn1kseeee6KxsXGkqzFuMHfuXJTLZQRBgP322w+/+MUvRrpKsXBBEIx0HbD33nsHzz///Ga/7wUXXID6+no0NDQgn8+jqakJuVwOnZ2daG9vR1dXF1asWLHZ61ULLrjgAtxyyy1Vz7vuuuvCz0EQoK6uDnV1dbjwwgsHXYdvfvObAIByuYxyuYzu7m6USiUAQD6fRy6XQy6XQ0NDAz7/+c8P+n6DgXPuhSAI9t7c9x0p2f7sZz+L+vp6sH875+CcQ7lcRqlUQqlUwiuvvLLZ61ULZs2aVVPdjj32WGQyGTjnwucMggDf/va3B12HOXPmhHJNZLPZ8F49e7kAxWIRzz777KDvN1AkyfVHVrmfd955ofKhgm9oaEAmkwlHZhWYTCaDYrGIIAjCF57J9LBa2Ww2LJe/ZbPZUAgoCPzP6xTsePqd91VhymQyKBQKWLhwYeLzff3rX0c2m0Umkwn/E6VSCeVyGQsWLEgsY/Xq1eE92S7sTFoe26tYLCKbzaK+vj78n8vl4JxDNpvFF7/4xcT7DSc+Ssp9jz32CBURoe9M3yPPoeyVy2Vks9lwkFbZBhDKosqkvYfKsYL3Zd/S++s5v/zlLxOf74QTTgivL5VKYX3r6+tRKpXgnMO3vvWtxDIOOOCAyLNo/eJg68vnKJfLI6bgk+T6I0fLnHnmmWhoaEAul4soYCpACj0FlC+vXC6jvr4eQJ/itUo+CIKwHL54/kbBoHBYhc1OwT/tJGp1dXV1odruPkuWLEFjY2NYj+7u7rDTUtlns1msWrUK3d3duPzyy73lsA6sp+3oeh5/Z1vy3GKxiLq6OpRKJXz3u99Fe3s7TjzxxGqvKcUAsNtuu4WDKWWIfwTlwCriurq68F1TjgntD5QpICrDOkiot8BrdPDQPkCwP3V3dyc+45e+9KWwTKJYLCKTyYQDEtAzAJTL5VgrXu+thhTbx3o8+qzWIM5kMth///3R1dWFkfDS4vCRCqh+5StfQT6fR319fUhPUIjL5TKKxSK6u7sj9EVTUxOam5uRz+fDl14sFgH0vNS6urqIABBUohYUYrVcyuUyCoVCeA49CNbPOYdisRgqztbW1thnvPrqq9HQ0IDu7m50dnaG1jQ9FN6PHaKhoSG2LNaJ11grJw7spKRpurq6UCwWUSwW0dDQgAcffDD22hQDw6xZs9DU1AQAoeyqpU5l3tDQELE+qaxVyVNOKG9An1VOuWb5ep4aMvb+vJZenfYdrXMSvvzlL0fqzDrZuhDWK1DYQU+fz362Zfm8cRp/e++92Z3DWFSlZZxzawAcCeC9IAh27z22BMBZAGhCLgqC4PHe364EcAaAEoALgyB4slolhtt1/ad/+idMmzYNdXV1yOVyyGQyyOVyoVDwPxV/uVzGJZdckljmjTfeiO7u7goBshaBflahLJfLoTBbS4huJvlRtXy6urpw1VVXeev0ta99LbS62IF4Hw5YBAeYbDaLrq4uXHnlld4yb7nllrCDq7D7wPN4b+utaDnd3d345S9/WVPcYCjgc1/Hg2zPnDkzNFbUc1JQIddKIey///4Rw8NarGrFW+9VB4kgCCLyS4XJ4xZJlMwxxxwTXltfXx8aYTROlE7VwaxYLOKRRx6p+pxJ8FFQVm/qAEkj8aWXXkosdyiQRMvUYrnfB8CX7rAqCII9ev8o/J9Cz0YHn+695lbuXjNSOProozF16tTI6K4WAwWurq4OCxYswEUXXVRVsQPAxRdfHJZpXTafBcE/e751VzXgxWuLxWJobbe3t8fWiZYR60FXkx2M5ZKm0Y5w7rnnestkR+T9S6VShWDz3kon0XJXN53353n77rsvLrrooqptPYy4D2NYtnfbbTc0NDRE6EIbu6HSXbduHX7+85/XxA3//Oc/D4OxNmBp4y0a09HPPJ8DjRoyLNfy2z6FT9BgyWazoZWsAWOlUbUvZjKZxGC+Vdo+b9vqCh6z/Zy/0QvZc889Y++7OVBVuQdB8DMAte44cxSAb/fuN/kHAL8D8I+DqN+gMXnyZNTX14eKT91OWjtBEFQNUPpwySWX4NJLL41YpFT4VtitEFhrWHk9WtS+gFUSOAhouQBCKknLtR00n8/HlmvpJv63wq4DFzufDliq5FnPvfbaC5deemnicw0XxrpsNzQ0hEqTBosqWv42kGDf008/jXXr1lW8b75nG6MCEBkAlLZQWlHjUP2BxhEsfaM0qRpRPkrFlqnQ2FFcH7Z9x1cWvYtsNjuiCn4wnPv5zrn/dM6tcc5N6T22LYA/yzlv9R4bEZx22mkRLlD5bir2r371q/jqV786qPtceumloZuoEXRf0EZ/txaWtfaVptHrfbjqqqsi59A1tHyozfhhu8R1ANZTLST1JKzC5h/vrwOOWv96/8985jM4//zz+9Xmw4xRL9uf/exnI9/53umlZTKZmi31JDzzzDOhZ6D38tEUNpCq52hsCkBkoFADwYfjjz8+vAe9QnqctJL57P3h3RX0ONVjVqMLQMRAsXy9gtdQwdt3tbkwUOV+G4CPA9gDwDsAvtF73NeSXm3knDvbOfe8c+75atkfA8Hpp58eeTEAwvQ8vrTBKnXFwoUL0dXVBcDvsilU4aqwWCteKZ5qZS5btiziuqrwUWA1E0cHPP1vofUgrGuq59rBgMep0HVwU8X/mc98Jq5pNzdGvWzTGrSps2pV/vznPx+y+/3kJz9BLpeL3MsHVdgKm3kDoEK2k/DQQw9FvBH1bpXKUbqn2oDB832ZL0nPqQaMD3pfxrsG4qkMBQaUChkEwbv87Jy7C8BjvV/fAvAxOXU7AG/HlHEngDuBnqDTQOoRh5NPPtkb9ae1nslk0NnZWbWciy++GI2Njchms+ju7kZ7e3tiAHDRokVYsWJF2BF8oz8QzRXWY/rH65Ubp0DHgWmHmklQKpXCVETl+bXsUqmEVatWecvkAKRcqdZZy/Upex7X7wrWta6uDrfeeivOO++82OfbHBjtsj1r1qwIbaBUG999UiYTcfTRR0fSVYMgwPe+973Y83/84x9j3rx5kZgJUJkWzGM++AwFH+XnQ3d3N7LZbEjvULap4G28QY2I73//+94y9X6a+2/rZr0NrbOmK2u5Gn9qaGjAnnvuiRdffDH2+YYDAxpSnHNby9cvAvhV7+fvAzjOOZdzzu0EYBcA/3dwVewfTjrppAgvqBkxfAGlUgkrV66MLWPRokVYtmwZttpqK0yZMgUTJ07EFltsge222w7Lly/HokWLYq8ld68KTZWtKnvWL849tbw4O3AclMrR1EVyklYolcKJg3ZG7TyaRcHfrODzel/us4K/NzQ04Oabb46ty+bAaJbtWbNmAYhaqD4eOGkS0LHHHovjjjsOEydOxMSJE9Hc3IyWlha0tLTguOOOwwknnBB77U9+8pOKQKiPplBKwp7vs9a1b8RBr7EUYbXzq4F11IFB/9t6W0Vu34W+D55LBb85UVW5O+ceAvAsgJnOubecc2cAuNY594pz7j8BHATgEgAIguBVAI8A+DWAJwD8jyAI4kPgQ4wTTjghMoFGFbvmtX/961+PLWPx4sWYOHFixGIFolH+lpYWLF26NLYMuuJWmaoSj7NY1F3lbxrUymazsZktixcvjgi7Zt1oPTTPHkBsBs6yZcsig4TlH7VddLDQ4wobb7A0TblcTgzsDjXGkmzvvvvu3sEe6Js8lslkEtc6OeGEE5DL5cI2VsUcBEG4/EaSgrfvRwd+nTeiAxA/+xSuVZpxCvCRRx4JZU77j3qztl8552KV/4EHHhhe4zOm9NkUPqqUiDPOlKLZnKglW+b4IAi2DoKgPgiC7YIguCcIgpOCIJgVBMFngiD4QhAE78j5/ysIgo8HQTAzCIIfDm/1+3DcccdFhFxfOLMKLEdnsXjx4kjwSOkIVc5MxVqyZIm3nOXLl0dcResyAn0v3Fq1NmJv3cRsNouWlpbYZ1i6dGkk9dG5nina5Lf1mYrFIjo6OnDttdd6y8rlchFPwFpp6pL6Oi3rbNvSp/RZXhAEuO2222KfbygxVmR71qxZFZYu/3PehpUvixNOOCFC2+gf5QXoGbQbGhrCIKbFD3/4wwq5th6bUjU2D14zUHiuylaSAmS+OstVeobHCU4M/O53v+stS/UAqSb7PGqFx3kXcR6CHcz4/Pvss0/s8w01xsUM1WOOOSZMc2SDqnIHECq5OK79iiuuCEd+KkKdlKCdh50hif/etGlT5LsKDL/bwCb5cV/mjP5vbGzEKaecktgmPkWqlApd2muuuSa2DNZRn18pJRV4tkVXVxfWr1+Pt99+G2+99RbefvttvPfee9i4cWMky0HradsIwIjTM6MFu+22G4DoBDC2k/Wm4pQ7FTUzlTTLST1Sje8kzVxmP0ka1G2aJA2ipGt4HemnOFjjwMf3B0GARx99NLEcey2vV7nW8thn2I5sS82wUe/FlsO+vtdee1Wt11BgXKwto5M4VOlaKyWTyeCGG27wlsFlUamo6NJxmj7BjsBzly5disWLF1eUt2HDBrS0tFRYAIR+Z2BILXgfPUPF2NDQgI997GMV9yRYn2XLloXHeD3bobW1FcuXL48tY8WKFRUTWXzcKdCjNNavXx87c1Zx1VVXYcaMGWhsbPRaSSyP72qkcuBHC1RR0KpWS5e0Q11dXSzXrjJEy1jpCpatsanu7m6ceOKJ3qUi8vl8aLxYw0MNGF/GlhoJtn58jiRqjmvFHHvssQAqFyNjskScxQ70rPioiDOmWH6pVMLatWtjyyMOPPDASIKAeraqi0g/DXeAdcwrd7qbhF23QpViHC699FK0tLRUWBuc5sxZcQRfnAZhLG666SZ84xvfiCgvaw3wP91lm2LIY0qH6CBw6aWXxg5WAEJle+WVV4ZKoq2tLTYzRmH5S2thE3/7299qUuqEDji33XZbaM2xXG2H+vp6rFixYkATzMYDSMdQKViZptwnZZmceuqpXvlT5QP0vV/KehzdAACPP/445s6dWyHbQHymjA5SlGEeI33Igauurg5777134iJcDz/8MIAeJc/rgyCouhqkPqt6FWoQsqxCodCvlNKf/vSn4ee5c+dW0JdAn5GVzWaxxx57DOsSBWNauSuP6AumqBVueUFFPp+PUDI+3tuWoelgceAypIA/cKMdiELNF08X0EdhsDNNnjy5pnZKCiD7cO2110asdbXGWFfnHM4555x+lWtx7rnn4pZbbkE+n49QSEoFfVQ3mvjsZz8bMUyUErOB1WpySKVpuWql0zQOA6BqfIpy6hsEVL7ZP2m5slxr4dvc8STKU0ElXyvmzJmTaOgBPW3x9NNP96tci2eeeQZz5syJPIcGl+mtDyfGLOeuebrZbBYNDQ0Rq1ZhU53iYLk/yxkq1OWKs1zpPlu3TzNNKOia1cPjKvxMLeN1DBSrJTwUWLlyZcVAaAemYrEYm7HTX1xwwQXo6OioGDz03SZ5J+MRu+66a+S7XWCOUKUelxVSKBQiXDrljFllVOgq5yrbccszx/HuSj/oTGQbo1KDiX3NGlX77bdf9cbqB7iGu21H9SqKxeKgFTuxdu3akO5S71TbbDjTI8esclc+mI1H5ai/AX6eT8HgiF5D4WRwVd1j/q6TgOKgaYdaH9ZbJ1axbPKOzPLR6+wiTfX19Vi+fPmQzLZdsWKFN6CkwlksFodkFyfFhRdeGOkE1qokPfNRATlwpWIo25RDoNLdjwOVtxoOXBKa9AiD3QQVYNz66jbTS+uuytp6vNZQ4TWWruTgM3v2bOy77779aT4vDjjggMj9CK1HuVyuiVvvD9auXRvxclS22UbDtTzBmKRlvvSlL4UpYADCyUAUTl0yV3m9uA5QKBRC91+VrHYkulEsk+dlMplY2kMX/1ILxsYI+NJpfel9ObtU66YUEo8DGDA/vWLFiopcZFW0GvBta2tLLGvVqlVhQMwOeknrx5xzzjm499570dnZibq6uog1+VGiZ3bbbbewrWlJUgnobkNqbRYKhYr1X4j6+noUCoUwE0sDfuwTbGv+0ahpaGhIpD0oI8rR235IUG6Vc2Z/Ui9VByAtY/bs2QNaJ2f27NkVNJZ+pqdRX1+Pjo6OxLK+8IUvRFKDdTB8/PHHY69bu3atlw7S/jwcGHPK/eijj0Yul0OxWKzYZeW8886LuPPqCiZx7qtWrQonJRUKhchCXSqMFAalVZKgyl0Fm8sEaHkaHwiCIPQ+NGVNrVvt4BTOYrGIa6+9FvX19Whra6sa6LzuuuvCZ9E0Uitsep+kvS1vu+02ZLM968OznvoM3LYvTsmfdtppWLNmTWSqOQfqbDaLb3zjG/iXf/mXxGcay9htt93CdvvVr34V+W3PPfcMjQI1CHROgw/3339/OLlPUyApl7rQmE/Jx0Hfr1rnOhipkWSDp3ot37F6zVS6anQwy6W7u7vqxtT7779/2FaAf7Ez7WtcojoOXDbY0pVUzkceeSRKpRJ++EP/9Ie1a9eGm2vzOl3rfjiCq2NOuTP46UvRuvXWWyPrg9OVtRauD11dXZHdloC+lDy+kK6urrC8fD6PQqEQq0AXLlyIrbbaCkBUMbN8Km/mFFOAdcswKjc+dxD0bZnHZ1Hl2dTUhFKphEKhgFwuh+uuuy7spGqlEOoeavuo1U6Uy2Vs2LAhNhvh1ltvDT0g5VrV82A5q1evjlXwaqHy+Yj6+nosW7asX9k5YwlU2r4B9MUXXwx3+SGVQtmkPMWBMmuD9rynXXc/CALk83ncdddd3vLmzp0LoG+VROdc5H350nopf3xGyjAHbjtAqUGhA0AQBMjlcth///0jqb16PzWceIyK3RfgZL+Ky8454ogjwqA0n5tl6SCWzWZxxBFHxCr4pJifc67mjcFrxZji3I8++mgEQRCuvuiDpllx2VkN1sStC7N8+fJIkIgvXTe34BK2XEQs6WU1NzdHFlnSFLNcLhfJWadw0b3O5/NoampCS0sLJkyYgGw2i0KhgO7u7siCaADC3aU4MGWz2cggxfpzqzvlM3W9Hc0MUoWvGRZ//OMfvc961113obu7G/l8Hl1dXZEVIK3iIK0Ql4556qmnIp/Ph+8NiA46zc3NsW0+ljFz5swI1eaDzS6hB0h5jQtAPvDAA+G+wbQYOzo6IjRba2srisUiNm7cCACJFIUdvJXu0UGGBoIOJNZi1/0P+FknbHFfAOXwKY8qv7w3+5l6DbYN+cdlun2xA2L+/PnhtpUalNZ2YN1Zr0MOOcRbluXztV30/1BhTFnucTPcFDqS82XbdK840CJcunQpgiAIhY3WNC2ghoaGqgHMpqamSEaCWluqYKmwJ0yYgKOPPjqxzH/913/Fpk2bwvpoR9Et//iM3C9zwoQJKBQKEe5WqSbl+C19pUp+zZo1FXW68cYbw0wl3oPl6H+WocGlq666ypvtY4Ntirq6OqxcuRJXXHFFYluNNdh3lwTKJhUZ5TJp6v59990HoGe2aj6fD6/r6OgIaU72r29+85tV60olroO/PoPKmnMOTzzxRGKZRx55ZFiOnTioAx4HNt6rsbExItv6m/U8+TtlUAPUvglgRx11VIWlb6FlEnV1dZg3bx5+8pOfxLZfXDlDab2PGeX+pS99KRzFk6ZGa+DGBntqxeLFi0OloyN1Npv1zka1WLZsGRobG8OOqrvlaFpbuVxGS0tLVaVOcOf3Bx98EF1dXRFFoCltdGGp9PV3tZIsD2qDTdpx4zblbmpqCpd08A2e2uFtRkTcGjmaWeGzqsZbcJVBVPUwfaAnRvnn+6ThUC3VF+hZG/34448PPSgqx4aGBtx///1Vr589e3ZIUWh9bZyKfe/JJ6tuMwsAeOyxnpWVjzjiiMgaODZ4qfw9YwhKOVJm2M9UmRPWg4hjAkhnsg9ZJa70peqJakFSe43K+FAGV6tukL05UG0T4SOPPBITJ06M5LOXSiV88MEH2LRpEyZOnIhtttkmVFhUoqrkaUGzMd97771hWaDqiiuuwBZbbBGxzlln0jAUvpNOOmlQ97rnnntChcpOoCtBUjBVoWpn0A5hFbty9QDw/vvv4+qrr47c/4ILLsDuu++O9vb2iiwOoHL9bvVgyJ++8MILFZbimjVrIlkzymsCPZ2no6MDl112Wc1t5RI2Eh5OVJPtXXbZJSK3tFxJ+9Gro0LQP2utsy93dHTg5ZdfHvJnmT17dkWSAK195dqdczUr9TgceuihEUtcdzrj/e32eip/Gl/SOlsPybmebKN169ZF7n/MMcegvb29ItgLJHPnmuVULBYrrPcDDjggMmDZPxphNqAehyS5HvWc+3777YempqYK662urg4zZszAzJkzse222yKXy0UWD9NFuAjlqbfcckucdtppQ1rXCy+8EFOnTq2wUoE+YaL7O1jFDgBnnHFGyMFTYdMqB/omA7EdLHdpl0Im32mth3K57F1wrb6+PpLZkOQdaXto6pvu8KP3swORRT6fH/PLEuy0004R70k53ObmZjQ3N6OpqSmkF61SowWvVFg2m0VTU9OQ507vt99+FXKh75NykM1mB63YAeCpp56KyDKAiGySmqJMq0FnOX210jlAqEz54hyUd91aD6jcO5jHLKiDfMeB6sHVT3/607G/14pRr9ynTp0aaUzfi+N/DVpSKHREp1IjZ7jDDjvg5JNPHpJ6Xnjhhdhyyy0BIEJ52OClc/Gz/gaCU089NTIBi/diUJXCTyXKNmJ7qlfhC3j5+EtChVe9ASA6O1etKL5L9RzioIOGvjvWa9q0aUPTiCMEvi/NDNHfmEVFuk3TVnk+PRtN+aWCr7a6Yq2YPXt2pL46mGggMwiC2EyRgeDxxx+PBG7ZJnblVA1mUrZVZlh3QoOqcUaJpYL43a4Yy3O1bCIulVSzkmz9LD06GNSyWcca59x7zrlfybHrnHO/cT2bCP+bc25y7/EdnXMdzrmXev9uH2wF6ZKS3mBjZLPZMEuEFoyOsDpKq4Wp9EVdXR123nlnnHXWWYOq4xVXXIGtt946tCR0kxC1zIIgwOmnnz6oe/lwxhlnVAwgpIBYD03FpJejKWvK+arA6SBgsWHDBgD+dd2t+2uzEvjdLo3M+1rodRw08vn8oFaNHGnZplLS4D2PK5et3otaoPydy84ygEmlMmHChEEreM4OVWNJDSqg7/3/6Ec/GtS9fHjiiScihhmfX6kspU20DxA+5a0ZOT558w24PG7Pt54lZdun3HXg8f2mdBGXex4oagmo3gdgNYAH5NiPAFwZBEHRObcSwJUAmL7wZhAEewyqVr2YP38+Jk6cGHG5rALTAGG53JczrkFFq2Btx9lhhx2wcOFC/P73vw83BKgF55xzDrbZZhtMnjw5tGD0fgyA8YUVCoWqZV5++eWYMWNGmG3T0dERyd2Pw6mnnor7778fdXV1YfaA5jUzr94qBksd2UwHoqmpqeKe999/P26++eaK1QltcIgDqg0Ad3R04F//9V8rymWsgPEJ6+Jqx5gxY0bVtknAfRgh2d51111DOVULlIpB25QypO2h71CpMYLXNzc3Y5999kFnZ2e/sjD23XffCg+Y9dF3qbOqq+HRRx9FJpNBe3s78vk8isUijjvuuKrXPf7445g/f37Yn5SyY1sp528DnIRa6XHWNvGDH/wAhx9+eEUZmuNuvVQtp1gsemfUKr/OfqHHdQAbLKoq9yAIfuac29Ece0q+/gLAMYOuiQfNzc0R/prK2KfsqcyBPipEZ4CRouitf2SUzGQymDRpEmbNmoUrrrgCf/vb37BhwwbvmtAnnngipk6diilTpmDHHXessFat+6fZMRdffHHi895xxx34zGc+A6BPEPP5PB544AGUSqWqMYL6+vpIIJL5ubTuKDiqEFRRsB2Vl+Sz5fN5HHPMMRUbIPz1r3/FNttsg+7u7nAAYf2V/1RPivf+61//6n2OuCC/DaxmMhk0NTXh3HPPHVBwfCRlW6EK3lqGlF2lJwB4ZZ7H1crXmMpee+0VGhg+Rb/HHntEYjG6mqS9B//zncSl/RHf+ta3MGnSJAA9HgXr+Nhjj6FYLOKf/umfEq+n0aKKXRU5YeXZt+yI9fCdc9h///0rlvdV+bWwVrnet1wux852teX52lIH0t122w2vvfZaYtvEYShSIU8HoAtQ7OScexHARgBXBUHgXYnHOXc2gLMBYPvtt6/4/bDDDsPkyZMrlKW6Nbbx1XIm7aLXWBdLNxAAeoS3paUFkydPRqlUwtKlS+GcC1OucrlcaHGxXkp7qKJnh2UdSGHE4Zvf/CYaGxvR1dUVSTXj/UulEu6++250dHTgggsu8JZxwgkn4N57741YhDrBxGepa+fQTmFTQIMg8G4Qsnz5clx//fUVnLuWZ4+XSiVs2rQpXI7AgssXaL182Qpsn2222SaxbQeBYZHtT3ziExFvEuijE3wWp403KAdvy1FoOzGNmDnu++67b8jn8/5cr0nlzm7Y0vt8APpkvFoK5mOPPYYpU6aEipZLZTQ0NISBy0cffRTOOfzzP/+zt4zvf//7OPzwwyu8do3t+KxeX1tqfWns+JTx448/jkMPPTTSh6pZ1UEQeLNvCOt1aJ2sUaMDxkAwKObeOfc/ARQB/L+9h94BsH0QBHsCuBTAt5xzk3zXBkFwZxAEewdBsPf06dMrfp84cWKEN7ZBHAARJdZbZsXLN/UNj1sOWM+lEObz+ZDXb2xsjJxDvo/n01vQDqD1irNSgZ7Uv0KhEHYmXdCJHCrLnjBhAm688cbYsjghJZfLhWmQpKtYJw58LNPygDp4ktIpl8vYdtttvfdcsGBBJLhnBwt+DoKeGattbW1YsmRJ7DMUCoXINHl1XX1oaWlJ3NR5IBhO2eZ70JiMb1D0KSZez8+a9qr9xA6A6vYzfkWFzqC69ieVFUs16v2A5JmVjz32GLq7uyMeBrNrNm3ahI6ODpTL5bCPJe2gFNd/1dCjDrCUoPX4tEwduCyeeuqpiqCrj2NnfQqFQtUlg3WASBoo+LwDzZwZsHJ3zp0C4EgA/0/Q+7RBEHQFQfBB7+cXALwJ4JP9LXvOnDkV05JV+BgM1N+cc+GyABs3bkRbWxva2toiKWbakBq0Ur5S//O4UkG5XC6iuJUeUqHRF1gqlXDdddd5n/Wb3/xmqGwZhGFnUAHW/xMmTIhtOyo5K+iqsFWpA/5AqA6gbIOkAOaCBQuwadOm0HXWdmXdC4UCPvjgg4p8ecXtt98esSirLafMOu6www6x5/UXwynbtNqtElXaxb4rcs38vbGxEblcLjQ4LM2g6YO+RAIrWxqMpCUL9CltpRatMgyCIDaQ+thjj4VrDdXV1aGzsxPlcjmcEKd5+hz4k9bIYSaOepjWi9Y2ZR/wBUEVNH7ilm944oknwiwZ3lepS76frq6uRHqKC5/5rHQLfaakPpCEAdEyzrnD0RNkmhsEQbscnw5gfRAEJefczgB2AfD7/pbPmYvKp6tlohOVCoUC/v73v9fEuS5YsCBcq6W3vhGFby1DvjTLc6qy9HFmaj055xLX6eBv5EeDIAitdx5XK5r3uummm2IDrbR21Z207r7PBeSzaDvQ0mKb7bjjjrHPQqV91VVXIZ/Ph+1WLBbR1tZWdUeo2267LezgXFtG6896W/c4CAJMnTo1sexaMdyybRdF83mYqrDq6+trWmN87ty5IZ9OQ0PfuVIBKp967yQ6yMdbx2WE6PXr16/HpEmTwrWH6AlwUTwdXHivRx55BF/+8pe9Zeq7V9pPBzntJ3odDSifB+icSxxYnnqqJxSj68bo/arFHKjYLSVTjdJKsuyroapyd849BOBAANOcc28BWIyeDIIcgB/13vwXQRCcA+BzAL7mnCsCKAE4JwiC9f2tFCctqdtHiz2Xy4XK67333sOtt95ac7nXX389AOCyyy7zTn1XDpHCogOBCjuPKYfmozeCIHmhM1IopCCUWuL9rWeRyWQSp+DzGXz/daVJoHKvVLaDTVuMowp8GOjuUFTouool76/WEqEKvr6+HmeddVbsSoY+jIRsa0aMGgpqwAA9SyxUUxiKZ555BgAwb9680Huy9IO1alkX/V0HAPvOLX1Rzfpsb28P6UBSL6Tcuru7w1VM6UkoJx8H7QuEZlTpgO+7Vrl5XstnTlqbhxiKdE876Ph+t+9lIIHVWrJljvccvifm3O8A+E6/amBwyCGHYPr06aEbxPxq5pAz+LFy5coB34MUyde+9rXIAKKKAkCFklelToHSTmRX6QP63E0f1qxZE3ohpCFstFzXcOe9B+KmaZm+WITv3panpDJNWrJ3oLjlllsi7ZoE7bhq0XOJ5VqxuWWbSw1wgFXZUc90IJtSEBwQdOchGyuiDKlXZpW5XsOBXie5AckBv+985zuh90YZLhQKEW+FmVxqjddKWSQN9IRvILIen5bnnMPcuXPDgXKowCWSbZ0tfAOT9Ub6g1E3Q7WlpSW0alR58ntbW9ugFLvi6quvjtAftiEtHaQWuc6S83F6ScrUnsd724W/VNCtMgiCIHZdc8unavtxxqpCn4/1UU/B0lf19fVDui7PTTfdFLmXDcjyWawnoXx+EARjdjlg9c4Go9gV69atiygLK9tqpapM8TvfeRyF6VOmCvUKNJjKnaFYD9JwjFvxuG+/Bt7Xpj7qhCT1pPm7/te+oWXo5wMPPDD2ufqLOXPmVNxP5buawtdn6S9GnXKnpa5BUyqmQqEQuw74QLF48eKKzAI2uLXM1ZW2Li/rzCwEXXM9bhVLRtdVkQe9gUfel1aFncSjOc4WukUdKS1eo4pcvSHej8+tMwCVLtLPq1evDhXzQLBq1SqsWrWqggpL6og+C4btls1mh3y9oKEEFapmWgF99X/uueeG9H7r1q0LeXFtU51YRwqO7W+pF+0blBNrwfvA5Ib29vZwjf9SqRTOw2AevXMusl8Cj8dB7+kLplojjP+1L9tYgrYPjx944IEhTz4QzJ07N8Kza3tVU9Y+2sY5h5kzZ/arDqNqyd+DDz4YW2+9NYDoinNUQHEZJ4qFCxeGAUmm8F1zzTWJ11x99dX4+te/Hgq4WlIqLNabAKIWgQ0AUoi4p6iFKmmWQ3qGipgdUcvn8bgApT47v+tOMsq3kjJiXdjZNaNCn59KVNM/q22fZ3HDDTeE92R9gKj7b11/S9eoklfvy5d6OBrwiU98IgwoKsVH+apFsR977LERuiybzcbujEU8++yzOOCAAyLGCoAKus8G7S0tB0QtTlWYPtAa57aV5XIZXV1d4fnNzc2hBa/LGJOPT1p/ycqB0oqsu7WINdZgKRpV9roVYV1dHQ488ECUSqWaN87WAcFHAVWjtdjuPoqpv3TsqFLuEydORKlUQi6XiywKlslkqm5eu3DhwjBFLAiCcFu6uro6LF68GEEQ4Gtf+1rs9Z2dnZE12Km4gEruTjlK7qRkg1CKOOV++umn47bbbkN9fT26urrCTsD78jMtKx1U4nj8e++9N6ynBoqorKk4uYZ3Y2NjKDi6w44OLoS66ryGbVwul3HLLbeEg4pNHWNd1EUn75oUQOP1llrw8ZLFYnHUUjM+L04pxyR8+ctfRlNTU9iGev4JJ5yAcrlcsZ+wwlrnACqCqbToVfZ4jhosyo8D8VboUUcdhUcffRS5XC603CkrQOVexRrQjBswdBlgyiZjGNYzSYoP6Ll2gNLy+Ht9fT3mzJkTmTCm3jzrZMvXe6hxZmFTLAlbbn8xqmgZKmalD/jCk9z/q666Knwp7CxWEKnk47B06dJw1FbLVd0ia8lbgbHZDzpLdEnMpJ1cLhdur6czAjmjEIhaWaVSz96qcZOi6AXwGdR6V2uee9EWCgW0t7dHdptix+Ea2kB0JUIeU0qnoaEhsi8s28R6NqSurJKxylrvo9y6Pc5n5OeB8pObA3b9cSqLpM2eTzrpJBSLRXR2dka8JiuHxx/viw334JlnnqmwBq3VqsaDep06oPvmljjnYukLuzaRLoXA2djd3d3hRMFisRhO5vNB6Untq2wXnqMyoLy2Pm8mk4nIIfuy9gM18HRNK+s9qcGj79Xn2fhkWH9TWM+pv7I9qnqCb6U5IHnBrcsuuyzSuLRoyWUrvQAgcXNlXqujvrquXE2RwqTuNRAvSM457zR0oMd65x6nnBpeX1+PtrY2FAqFsFNzYlO5XEZ7e3vsQEVF65wLp5OrtcfBj2mHzc3NmDRpUjjJpLW1FR0dHchkMpgwYUK4gBk7vE6y0WCrusQNDQ3hHwcpVQg2nmHLUOi5quBVqVvlPxwrbw4WqkR1FcckfPGLX0RnZ2c4EGtsRi1xKvxjjz225vpYHpjeMjN51MrUtreWMCdV+XDsscfiww8/DI2Iurq68Fko5/yNnnlXV1fsOjNKS2osSI05H9+ufVjrryul6rlAdIEvLY+fte9bb5919A0yWgafqT9Ke5dddqn53FFDyxx22GHYYostkMn07TBDq669vT32OuWlVeFwNimtAI76mUwGX/3qV708fEdHB5qamrwvlGWoBcQXxmO6no1VfHGuJtDDVd9xxx3o6OgI6073XQOYtFouvPBCbzlMrWSnJ/Wi7cTnamlpwYYNG/Diiy8mxiQWLlyIXXbZBc3NzWEHpJehwSjWU+kYpWK0U6mCt/VSbwnwTyyzlo8eK5VK4QJVowU77bRTuJ4+lafSInFQOVOZZN8A+gwStusJJ5zg5eE18MjzdcCwXoV6CayDziYF+uieJJx66qn4t3/7t9B46OzsRFtbWyS2xFhEEAThVpIWhx9+eFhvvms1BimHWv9yOXmbvyOOOCLyXWWTbaGGUVLsx1riVrHHybalYnztqQNVfzBqlDsnNKjrx5H6zjvv9F5z2WWXRdYlJweuNIYdweN4LwC49tprsXLlygg/Zhu+oaEhMhNQX7x2GGvdAj2bFJ966qnee3/lK18B0MOZUyG2traG2Tdnn3121TbUyT9qdQCI5BTHzf7zYcWKFRXH7rnnnpDHJ9Vj19ehoqUyIvQ4gIrB0iJpcLSWPNvAt7vTSIMDv8plqVTCiy++6D3/6KOPjuxDkMn0LP9AZc72Z8yHC87FyfbatWsxZ86cyObTatECCD06W09dJsAaLRwEDj300HAWp8UXv/hFAMD3vvc9NDc3I5fLYePGjZgwYQLK5TLmz59fU/tZ6o7yrlRkf3aB8m0scuihh0ZkTpMHlK7SNX00JuHj5a0CJ3zB06Sg9phV7vl8Hl1dXSHPbC0NH+hSUWnrhsGkMtStZ2dxzmHRokVYvnx5RZlqEfClBEFPgJYWK617vlC6l74Xpbm7pVIJd911V+LmIANN5bvrrrtCQeSiYQ0NDZEZqUm8bH9wxhlnhGvH65onapnYYBWFWzlRtXo0Q4ZlagBQrVctz7rPo5F3Z/sXi8WQlqiljpTvbDYbcsxsV/VISXfw+0knnVSxLy1B2aay5AxppR4BRAZs36qImlnFOsybNy9xVm21ZX3jwCn/vK8uXcD7D9VGIU899RTmz58fDqI6gPCd2awVNSDVq9FAr/1d+0ecUVPNs6uGUdELfv3rX0fyw4Eo3RIHKnby60BUYahlpxvsMq/WB/KhGrBRd1SVjPJ8tCSoqMj/k6bgtXV1dbjrrruGTNHecsstuPPOOyMBSl2/hMI1lFv7AcApp5wSDmyqmNVa8fGe+l/PVWveziVQpaJxDe0oNoA8UEUy1HjllVcik3SA2haD4kqNhUIhEm+hQuUGzMViMZRnLl4Vl1nGQZADAwP4QDQjyZdQYPui9jn+3tDQgIMOOigyO3YwmDdvHg4++ODIfX2ppD/+8Y+H5H7E448/HmEQkqgnHaStZW0NHR5T6giIn33q82gzmUzNvPuoUO4UYrrw1VLjFHxwUiW0RgCEil8tReUQ4+qiwT6CGQvqBTCfXi12dkD7YkiLkMo59NBDa9phKQm33XZbuIEyrVzeXwOoA1muoBYw3VRdeGvZqfsOVFr0VOJWuVjFbY/pcU3j5Pv37Rw1UuAAb63dJKWhg1VXV1dodHD9c8o229eXPGChg6UGJEulUmQjDP2N1yntYGkZVbhcuncwE4CAHsVOBcs6A33586zXYK3bOGj/Vz3ANlAr3hp9bEefbGt9rXVuBwer1H3HkzAqaBltRAppJtM3iSkO7MgUVlrLQB9Xq4oPQIWi8IEvlgKuk6LseRRqXS9En0utUrXeS6USdt99d3zjG9/Aq6++ijVr1tTcXsuXL8dWW20Vto8KkQbaGhoa0NXVhVNOOaWmcleuXBnGFD744ANce+21iecfd9xxeOSRR1AoFJDL5SKuPhDNTOB3O+ipold+WSkIS+PoZ18wiisQjgZQRvhZN8dIym/XtqAy6erqCuWR8R/KNtsraSDnOcq127kVrCczZ5gSqwpN34sdSGj4lEolzJ07F5lMpur65op58+YBQIVSZ5uphxcEQc0c+//5P/8n9HDy+Xy46XccfvjDH2L+/PkhJaWeS9wAqn1c6852Uu+TsLLt03cDpWhGjXIvlUqhtaW5pUncpAYeVNGqZWRTuniuj29XUOloJ6Cy5wvX4CX5br2XZroodaP1aGlpwdy5c3HHHXfgL3/5i3ei1THHHIMdd9wRO+ywAyZNmhRua6eLlOmWaMwdrkWxL1++HB//+MdRV1eHT3ziE+Hz7LLLLnj00Ufx+9//Hpdffnns9R0dHZFYhraLtqMv60WVg7V61GVVl1aVng6aPJdURdIU9pGABpWtbPmgBgmvYQxF1yBSOQd6LNuHH344rtjIYKMKXVP4NI+eyloHbJVn0pD6XoC+yVrlchkHH3wwymX/srhz5swJOX/tW6wrjymdxLarpti5GxJli89bKBSwdu1adHR04NBDD00sgx6Szi+w7WktcraRDrQ+xa5erC+Q6jNqeM9a4IbLrekPtthii+Bzn/tcuBVXY2MjyuUympubkclk0NbWFrtQ1RVXXBEqXgo/rRy7yQA/F4tF79T9K664AlOmTIlswKHbjOlnndShlo8KoFpS/E4FzM5DayKbzYaWuAqLBrM0P1rdZE3BZMYDAzpx2TlAT+rkhAkTwmng6kKqF1BtkPjud78bZvbQvVdlYJW1WjE2q0fPU8WlXoFaUvT0isViuLQyqQtdDto590IQBHvHPsQwIZ/PB9ttt11IYSm9QOs4KWMG6NlzlLLCtrCDoRoXvk3eZ8+eHfEsVXYpzyzPZvRoRhjP0e/6XDoY81pr8epgrZk4ek+gz+jTQUiNgrjsHAD48Y9/HEkDpqzQY6qvr8eHH34I51zoLfhwxBFHRJ5N42fqPVr6kbDxubjr9JilJnVOB9CjY9544w22WaxcjwrOHeizyvhZrZKktctXrlwZNpx1SalALVcbtyYLPQcdSa2A6uiriohKBkBkpp2+NJ3WzO/Kw3d1dYUBMbZHZ2cnOjo6QsWlOc4chDhpCehLBaym2JnOyHsxoE3Bp+JhzCIu+wLoWbdbrTugcuYeoTSSfU96jn5Wi1AtXvseLPbZZ5/YOm9OaKfWQdPSIRbcck4HSMqa0oZUkplMxqvYCQ4CvgA4oQrMvhfW1cYM1OrU4zZ9kOVxMiANJu2nlorSXHYtJ0mxP/nkk+FgxyCzGgWclc0c+6SArKUM1evSAZH/Lc1IKPVsKSd7TOXfJ9u1BlWrKnfn3Brn3HvOuV/JsanOuR85597o/T9FfrvSOfc759zrzrnDqtagF+oqUgj5v9oi+uw8ai3SylZFXSwWEzeSoJK0ARurQPVlUFA2bNiADz74AOvXr0drayu6uroqRmO9nvVW5cet00hzcDJTPp+P3B+I7rbDe9DK10HFhxUrVqClpQXOuZArp7vPz8zQYEdjGqcPf/jDH8KJKNUm56iiJpQDJrSjWGVvy1MrRy2rarz75pJtwq6dUot7zXkbSsWwTZR3B4CHHnoo8d7almqVa2BVz9HEBOXbOQDw3Lj37RvUgyCIrOtO2O9q7Kk+AJLXNv/pT3+KpqamkOrRAYJJEDSkSPfk8/nYVErtu1YWqz0zUGm4+AbVuIE2Se5rQS2c+30AVgN4QI4tBPAfQRCscM4t7P1+hXPuUwCOA/BpANsA+LFz7pNBECSma6gSJpRqyGQyuOSSS2KX+6UlvmjRosgLIDXBNaSTtnm7+uqrkc/nIy9RO4S1OE866aSkR4rg9ttvDy0R7RBq2fAF6yQTCjj/qxK03Ke67dU455122gmtra3heh4auLaTL5ibDSDWg/rDH/6Az372s+E1yrvHeTy+zmwHK7V4La+p5fAz//P8GiYz3YfNINsWdlOXPffcM5aa4YJgxxxzTGSCHstmuyUtHDZ79uyKAdQXy6Ln5pvcE4f58+dHBgWdtaoUDKHehsqJUoI+6kLjK0lxOGbecS0bGkmaUUXP1tJM/YEq5KTBptZy4n6z76yWhJDw/Bpu/jMAdjuxowDc3/v5fgD/JMe/HfRsJvwHAL8D8I9Va4Ho1m76R+shiZohli9fHlkbmhbP1VdfnWixX3zxxRWr9amVrWmFJ598Mk4++eRaHinEOeecg7POOiusD1C5WpwdlGihcUBRjp91pFvLawhfZg9x1VVXVdAa1iqjBc9yqYyKxSJuvvnmijLXrFkTSYvTspUfZr19lpAVVh3wWI6Fz7JRyqBaUHVzyLYqPO2UOsBV80wB4NFHH43QOSz7gQceSFTspKa0XXyKwTmHp556ql+KHejJCX/qqacicREt06fMlc6gHKtHwWPqpSjiFNuPfvSjcJVRzUriIEOdwBVYWS8aTv/xH/9RUaZuym2fDUCFbOtnnyXuu84HbRNr5ScNboqBZsvMCILgnd6bveOc27L3+LYAdIm7t3qPVcA5dzaAs4Eerls7O61aoI8DrKurw8KFC73T4RXVfveBa9qoi8oOqfTOH/7wh36XreASAmvWrIkIlXKvFApa4WrR8jzrJhP6DHGYPn16ZLlVABGunHXQgYZWU3d3N6ZMmVJRJuBfRkA7tYXPzdX24DnaJvZ59Tc7qFBmBoAhlW27GJ4O0Bw0s9ks9t57bzz//POJFXvggQcSf/dBJ05R5lSx9T7noLOLqAQPP/zwiCK3WT9ANBPIZ/nadwrA6+Va0BjUTB2lllRB01hhDKOrqwsTJkyo+pxaV1vvOE817vk0yJrUT2qho3wY6oCqz7/xvokgCO4MgmDvIAj2VvdZLVS13mmNXnbZZUNa4SVLllQEb5SroyJ94403EpcM7g9OP/30ikCjCgWDmgTjDrrmh15jy7LfFVzPQ7lT29niLCW1uix8limv8VE0eg5/U5dez6V1qx6O9XZ8A8EAlXscBiTb6vXZlTHp6VDh7rXXXkNZX+y3337hvW1Qk3IG9HjFjz/++JDc84knnogYafa9qzzwGPufypYGa1XB+eST0DXvqTd0/glXSVWah3XwbT9JxNGBPiPLZ7DElecLoloZJ1Tmk9pAMVDl/q5zbuvem24N4L3e428B+Jictx2At2st1KYZqQvC7/l8HldcccUAq92H8847D0uWLIkEUa2CCIKeIOVbb71VNS++v9BMFnU/KXhqoVsl6HP3VNGrdWihaZi0bnmuWv2+gA/rZsEldmvhAbUelldV2Pehz+qz+vUafZ4BYMhlW9vFpnjq73V1ddh778Fna+65557Yb7/9vArAtmVTUxN+8IMfDPqeih/+8IcRL0GhqcFK5dCCToIqQx+oH0jFcPMe53qywbissS4pwPkiKo+Ko446ykvHWFhDzZZlB7Rq7waIZujw91opGWDgyv37AJj4fAqAf5fjxznncs65nQDsAuD/9rdwXyOoZZjP57Fo0SJccMEFA6r85ZdfjhkzZkQW5PeNiplMBhs3bkxcA34woIJV3pzPrjNvdaBTAVBrXqeMxwkqAKxfvz7MaOFzq5dAS0opG51UtmnTpooyt9122wo33/cH+GcIJ1Eulq6z8A3MLHOAyn3IZVuXRiBs7jbfV11dHfbZZx/sscceA6k79tprr1ChaewGqLR6M5kM/v3f/z2uqEHBUo1AJW+tikqtYL47Symx3Dhs2rQp9PKZ2ktWgHy73pd9jxvI+AYXSytZObaepv2shpTKKP+sHChqtdDjUNVvdc49BOBAANOcc28BWAxgBYBHnHNnAPgTgC/1Vu5V59wjAH4NoAjgfwRVsgkUPldeG1e52Gw2i5aWFixcuBBtbW245ZZbEss+77zz0NLSgnw+H06OInx8O9CTmsileOOwatWqcH0XZvh0dHTgvPPOq/q8J598Mr71rW+FAR4qKs3RZf0Iu1KfKlVmBTBjwIeFCxfikUceifB9QHSHJXWJdbDIZrP485//XFHmxz72sTAPX8uIc82VY9TzOUjxmLrOrA/LtfJhrRof12uxuWRbB239LPWosPZyuRz22WcfFAoFvPzyy4nl77nnnqEyU+5cqQNVLKQfn3jiicRyf/azn+ETn/hEqBiz2Sw2bdqE3XffveozP/nkk5g/f374rmml87055ypiPdarBKL54TYWYzF//nz89Kc/Dc/v6uqqkAm7PSUTMIIgwPr1NraOiGfB98TnsIo9iXO3Okxh+fckWEYjCVWVexAEccsX/veY8/8XgP9V9c4CX8fkccLSE+wk3PHn6quvDjk2BRXh9OnTK3g1CpIe03x738smrr/+ekyYMAFTpkwJuWJ2nAkTJuCee+5BuVxOXN4X6NkD884770RTU1O4MzwHCc2s4fMrB6l8uW7Rp9f6sGHDBjQ1NUUyClRYmSGjFh8F15dO2tLSgra2tsjsWNZbKTa66uoN2KCbz+tQBWGPW0VA/pRB4yRsLtnWuuuAre/VemT8rampCbNnzw7bTRUAlbRucajtqbJt32VSAHXdunWYOnUqdt555zCPnmsVTZ48Ga+//joymeoTaR5//HEcdthhEXn1xYOsUvPRGqx7NSjdAvTMBO7o6IgYAp2dnZEtPevq6tDV1YVjjjkmtjxV3HGKXZ/HXs/jKudq6Oh1Wr4tm32zFoyKGao6MlIBqIK3Ctg2GJVqfX19OBGoqakJzc3N4dKpdm0P5aXVkqSirqurw69//evYOnNyUbncM4tU0620Y8VtNKLQ1RW1PbTeqiC1fE7KUEXPzvvoo49678esnc7OznBgUItGvZf6+vpwIa6XXnqpoqwbbrgh3AqQsPtb6nGiq6sLH3zwAd5++2388Y9/xFtvvYX3338fbW1tAKIbONvAkipMjU2olZoUVN6cCIK+SWVxSiuOg7U8Ld83DRqWrwOEWubar1gG65EUbJ4+fXroBfz1r39FLpdDU1NTKFfcVJ1T4KtB+XeVBxoVumqmehmkHe1y3gBw5JFHeu81b948dHd3h/Rhe3t7SL/kcjk0NDSgqakpHLTYrr4N5+fPnx/WTa121kNjhPydy2B0dHSEO0/xr6Ojw5saDCQPXDooqJFUDaNi4TCg7+FswMWOanw4XYBLeVzL0/n4Lv1NlYHev1Ao4O67746tL9OmdE9V1kkXXqKCT9pJacKECdi4cSOam5sjU/k52YLPoHXUtuESt+3t7ZH/GzZsiL3niSeeiIcffhgffvhhZDNuoI/e4YqA9fX1ePPNN3HDDTdUlLPVVluhra0tsvUeO4q+K7bru+++iz/96U+49957Y+t27LHHYtttt8W2224bcqZKxRBUbLqwlFJr/Qk+DSfiXHLlpNWCozyrAtZlMKwVrkpTlTzPsYoB6NkVKQ66921jYyNaW1vD98iUwXw+j46ODvz+97/HzjvvHFuWcstK0VlP0VrvSjvqpjO8Jsl6PeSQQ/D000+HxktdXR02btwI53qWJOaOVo2NjWhvb0epVAq38VPYe1oq0fLvlPPnnnsutm6cd2Az4nyDu9JZvgBtNYwK6beWhe2YHDH1u820oFXDsthwOssV6BMkXdPCcrm5XC52wwMAuPHGGyMjNTlJ1lEnS1AAknKUyT+yTHYu1p/LD7Cz287AjkMPIJvNorW1FZMmTUqc4HLssceiubkZjY2N4Zob3BwiCHqWcMjn8/j1r3+NRYsWVVz/wAMPoK2tLdz5iYKogsr3s2nTJqxduxZLly5NVOwA8PDDD+OGG27A//7f/xv/9V//FRnw1euygXB6OlwbZ7Qpd35WeacMKeIyadQyp9Ki0lXPV3lqyrb2kySrnTNli8ViuNdpS0sLgB4jhN4pN75mNlnSs1saVTfkYRk2Y0zry/eqc18ymUys9Q4ABx10UFjnXC6HyZMnY+LEiWhubo543N3d3d615w877LDIYEQdZNuXfbdYLOIXv/hFomIHgOeeew7PPfccisUi2tvbvbs1xXlxcb/FYXRIfy/sSA5UclnawVWY1YUnL8WXoIqcrp6+NL2Og0vSpty00oMgCBfW0utZb+WVuVKhD0cffTQymb6NRXTihS5Cpla8dReVCqmvr49w6kk44YQT8Nvf/hblchmTJk1CS0tLuJ/t7373Oxx//PGxaaB8RgZvab2wHhzw/vSnP+HKK69MXIrWh5/85Ce4/vrr8cILL0QCp0A05VMVhP0/0lA51piJNSh8lja/q4IHohPG+KyqBH2ctvVc40ADqa6uDhs2bAgVeRAEaG1tDQcSti8t+zg8/vjjoXxSnik3PEbDgs/Gc2jscaVRznUhJVUtdfLggw9GV1cXWltbQ6Olvb0dmzZtCtebj1vyl+/LLv6ndCMpmGeffRa//OUvE+ti8fzzz+OFF15AZ2dnqOA1PqIDmVXqKi9JGBW0jA22aEYIoW63zcWmUrWBNw0sUWB1JUZ2Nm1Ufo7LNrntttsi60/zeirm7u7uyMvgsxUKBdx2220499xzveWyjLq6urAMoC9arwMavzNDR0d1FchSqYR8Po9vf/vbOO6442Lb/+qrr675XSk0R1ipMh1Ya8kaqgZ6PTfddFOkY1OhqeIkTTZa1nNXA8JapITSMCqz9J44SCtvrUYP0BcbYZvYdqlFIfz2t7+NLJNLi5crKGq/pGLbsGEDyuUy3nzzTXz84x/3lst+ofnlfD72M+37/K5tRfnWvU3r6+sxf/78xAlYn/vc5xKfOQ46gAJ9qcmqbNeuXTugshX0lGbPnl2xvAQQ3egjjqKJw6iw3C2fTuXNEVwF1OaFWusZ6AvUqGWpq+rp9bUENBR2mjsVCl8MuUoKIoON1WgC1p85uryXzVXWTBPdOzMIevaGZQdnO/C5+2s1V8Pdd98diQVYd7q7u3tIFLvioosuirwvpRno7tMzq7aL1+aGWu3qaRHqhWh/oDKztKIOqJQBlS8bl6kF69evD+vE4CONE8ZenHNobW3Fhx9+iA8++ACZTE9Gz6RJkxLLVo/bl/mjXif7ge5foM9ImaOSS6JnBoJ58+ZFvCr7XkqlUphyOVR49tlnKygaIBojrFWpE6PCct9pp50igs9R2Vq/NqCkNA6/K23BwKDOQqU7aIXfvsy45WIpVLQQlY+jkqXVowpPFw3zoVgsorGxMbRklOZhmUA0O0hdVz4rFSuX4GVQNJvN4oEHHgizBn7961/3a3LW9ddfjx122CEMTGl9aHmyrqVSKXGC2bJlyzBt2rSKtEcOZBs3bsSCBQu8155zzjlYs2ZNuGSrUlgcDMvlnpX/+tsZhgO777472traIoOzLqWggVNfXj/BZ+E75funNczBgUoQqFzmAUietbv11luH7bpp0ybk83nkcrlwWWuu2zJ9+nR0dHSE6aadnZ149913MX369Niy+V4s7aR0kT6nfX6N6VC2+e4ZEFWPuT/LKTArxpei60uFTLLYZ8+eHcmgUaXM9/SLX/zCe+2zzz4bbi5u4zJaJ7ZDNYwK5Q4gFBwKZzabDZWypVqUnlBLUd0arolusytIWajry05CZVEsFtHc3OytJ4OPms/NzkZLR4MvvC/5SR84qYh119Qv656qpa5UCCdC0ZLVlR2pAEjjtLW14VOf+hQefvhhvPvuu/jd736Ht99+uyJ18tJLL8UnP/lJTJs2Ddtvvz02bdoU2SuVddEsmWrruXzjG99Ac3NzyDVqcIoeWD6fT6SwWltb0dzcHOb2sx5sf91sZDSACl3lUSkY+551EpsO4gof3UPDQAd/NQx8KYWKbDaL5uZmtLa2hvnhGzduDNMH+c43bNgQpkQyDThu0S3NQtFAMT+z7/GZWH9VYJQT7Z9q0PAaluGcC+/L9nzsscci9eIEKx+lx+vUu1IFG4d99903co7qJ7Yv0JMxExd4pe6zE6VU32l9kjBqlLu+HG0cCoAd9S3nTSGhm0rLXwcHlmGzcfiZ1kEQBOGuTBannnoq7r77bi+vrryiKl92NOZwW+iuTWqtc9s6DnLsvHRdNX7AdDG2DXl70lJUgvx948aNAHpSGXfaaScAPelxOsnmc5/7XEgtKV1kXUTywuR9zz//fO9zXn/99eHnIOjJ7uHzsXw+Q3t7O+644w7vDOELL7ww3BlKB1L12riH7GiAVWj6WS1ya1Wr5cc21vMsDaNKxCoWHVjiFMN2222Ht956K3wnnL5fLBbR2dmJCRMmRAKKGzduRFNTU7ieiw80PCizGhfQGas2E4WyzsAtjQjKmD4Hn5f1UgXN558/f354jR1EaKGrocH6WKUat9k3Fbu9h74fvrdsNhur4H3We1y7VsOo4NwJDbYAfWtyWNdNhcFmqAA9jefbsV2DsfrilVMjbdPQ0BC79MCZZ54ZCpOudc7ylPPn/6TyeD9a33x2DgwAwuch3cCtwwqFAlpbW9He3o7Ozs5woKCVroEYfdbGxsZQua5fvx7vv/8+PvzwQ7S3t4cZBX//+9/DOnFwiHMJlf/1YdGiRaH1RaXDTs8Oz2cslXr20U1aVqKjo6MiW8Y5F27hNmHCBO86OCMFpf3UgyRUsdtgsZVvX0qeJiBof7EGEZVM3L6h2223XajY2cZdXV3o7u6O1Fk96Gw2i4997GPe8lgHjR3oLl98Hm0nVayUYZVjO7ip3MVx5LY+OtAphWKpMW3PONnm6puWBtN2Z531WWbPnu0tL45yUV1Yi+U+qpQ7wdFSKQigcnU9fQlqtavitptj2E6mIz7LpQB+6lOfiq2jdd+00/J3DXzG7dy0Zs0atLe3hxY/n4FKXK3/UqkUusEaxLWB5O7u7sgG4dqRtLM558Jc9sbGxrBTM7ee3gszI9Si4fPGua8WU6ZMqeg0asnwObRDxm04AgAbN24M24CDDwOpDK5aV3ykoMpW26AabcR+wAwqvkf1ZoG+vqDWJxBN3QOidEES9+6cw4YNG0JPYdKkSaHVzm0gKVvr16/H9ttv7y3noIMOCtMYOWgDCCem+fqeVYy0rDW2w/pb2kmvs965hfZ/1ktl21IrNlagUJm3hqjexw4SSe/fdy899vrrr8deS4waWoYvmkJAN047g46wqly0ce2WcZqqpwqZsCMh6QFuTHHWWWd59w7VaflKp1BBc32TYrGIc845J/a5lY/V1RqVHw2CIFSuJ5xwQs1t+uCDD0YsQA4+uVyuIvUMiC4UpoLHQUCDu0oB6XvzWTcXXnghdtppp7AOOp9AZwGyXF0ALc5aWrBgAR566KGQX2Yds9lsOJlrtEC9JvXGgOgsXpv6S/nXdqEc63+9h02X5T1UafLzgQce6M36yOVyYWylVCqFm6jTcuf2jNlsFp/5zGdin5tUko0bWEOA/6stZKb4/Oc/H7GIAYSyrbA0rlKTvLdy/pRJILqOS5w80WpX+Kxr1T/sj3F49tlnMXv27IpYI1FrosCosdyVH7fQhrCcvM/l0nNVIVn3SwVeBw1SLMViEf/wD//gre+ZZ56Jc889F4VCIewEDPawXkEQJCr2u+++OxJMi3vecrmME088sV+KHUB4jVIm2rmB6CQYzT5SyoNtxHbScnxWvMWkSZMi5+p71jRPOwCz4/q29uM5agAoNRM3T2EkYC1qwr4L2+E1v12pJ43p2PJ4vsq67Rf0NOMs0e233x7bb799KDdbbLFF6B0xRTKTyYSxGh8OOeSQULYJy1+zbk8++WS/FDsA/OAHP8D3v//9sD2AvsmF1ksFEJF/hZUhywhU47Z1wNBnstfqgKtWvXL1CqvHBoJRY7mra66NzQZRZaNWjUJfpJanlo4v1UrdVlqLdNFyuRyuu+662B2glEe/44474JzDGWecUfV5b7vtNgAILSRaOQxaaspmfzbj9uGtt97C1ltvDaBvlqMOKHHBNioBdhrrOWlGjqUAFNZSBVDRmVTgtTzrdiu0Luo95HI5vPPOOwNsraGHKlJVdprCmGTY+K7R32kZq/LyebzWI6yvr4+13gFgxx13DD93dXWhs7MzlKMkzJs3r8KDsIYUZe7JJ5+sWl4SdPVP9RCoA3xLOxDWs1FdQYONv+v5ceUpdCCz70TptCTqiOcMVLmPGstdaQ07svtgO3acAlfuzXKftmyNmrPcUqmEyZMn17Q361e+8pVES5246aabQkuItEIQBGHWiCrSwSp2ALjssstw4oknVnglqljZ6eL4QSp5wgb5koRUrSm9xrqtSp/p96QOpPfmf65mOBqh7eUzUFQhaJ+gjGuAURUor/WVp58Zo2AZdXV14TosSZgxYwZ22GGHqudRsQN9MSBLDXKgGaxiB3rWjWdOu3LnRBJPznZW75O/6fXKm/tgU7MVcVSUzZay8Cn1al6ExYCVu3NupnPuJfnb6Jy72Dm3xDn3Fzk+v8byQsFVyoSNpr/xuJ3VZ4Vey9QBwMdjqaWoViiV7fTp07Fq1aqBNleIm2++Gc3NzZEOQAUP9Fl2pVIJJ5544qDvpzjhhBMik1+AyqAW0CdEVpmrotesAv3vC9S1tbVVpKnx3tZLY0dShX3RRRdVlHnVVVfF0g5BEOCPf/zjAFoofP4hlW3WSZU0663tr/SCKh1Cs0j4HYhmmOj9VKHovXmcA3x9fX1s9kx/MG/evDAIbt+N7XdDtWcrwfJ8VIyFekr2dzUuWFd9HgvVFzxPy7IMhD3Hlw7pW8jM3qcWDFi5B0HwehAEewRBsAeAvQC0A/i33p9X8bcgCGp6i9YFiqMK+F0F1rr4qhh8HJ9VMBQCdhK9vwrBxIkTceutt/a3qULcfvvtkckeVpB0cKrVYl+8eDGWL1+OZcuWeVdutHjrrbcq0kf5jNYS9Fk02p6+xbl8a7rccMMNEW9ErVAAFUEr1s0GGRVTpkwJP1trqL29HY888kjVtojDUMu21pGffVamuuvWG7Uekj1u35WVKduH1EMFMGgFf/DBB0fW4Ndn1v+ZTKZmfn3mzJnYddddseuuu+LTn/501fO1L1tYOVX6D+gbONWzsPECn3J//vnnIwOA6iagch9URTVL3McslEolvPbaa4nXEUPFuf93AG8GQfDH/roOREdHR5hupbANYy0emwblc1GtpUqawNIQvJ7pWz4LNZfL4c4770RHR4fXorRYvnw5pkyZEtlggfVg+ZlMz5ZgDQ0N6OzsTFz7nbj11luRy+XCwBddvHvuuQetra2xdVuwYAHuv//+MJCqz63KRCkbfSeWyrGLWsWBSxDTm1I33ed+cq5CXGB0ypQpFR4H8/vff//9qu3XDwxati0ot9agUYWjXpIqFks5+rJsNKfaKnGdj2EzR+rr63HooYeiu7s7drKO4qCDDgq9DL2nHXh0tmUtVMyuu+5a4bWUy2XstttuABCr3H74wx/isMMOi8ihVeIsy5at/wFUyL0tQ2ETDHi9Gp4sT2OGcfnsvvv1x2Inhkq5HwfgIfl+vnPuZADPA/iXIAj+bi9wzp0N4GygJzrP9ZbjZuoRKqhqddrz2bgqdPxNR1efu2RT13xR+Hw+j9tvvx1BEF1uF0Bk7fUZM2ZEFKgqUn7WtECbymWxatWqcE1qfUaWVywWMXnyZNx9990488wzvWW8+OKLmDt3Ljo7O0MrXtuAz60DoW8gVYpMBysfli5dimuvvTasb7lcDid/Ma2UKaj19fXhloNxa9RwwwUF0+6S1hcfAAYt20yXtdSRpSpsoFQHV9sHNAuM51uaUcv0ebcsVydNAX1KHugLqrNsnaCnsqqKi3VURc9jSaBSZz18SjiTyWC33XaLVfB8Zg0ea7vxnKRApTXqquGFF17APvvs41XwSv2oAVUqxW/qYeNZ9r3WikEHVJ1zDQC+AOBfew/dBuDjAPYA8A6Ab/iuC4LgziAI9g6CYO/p06fjxz/+cYU703teRUBGBdS+AOuWamYNr9fJThQEWuyc+ckXwDL4VygUIsLKKdqc9MPNAXR1SK2bjcKr1dTd3Z2o3G+66SY0NzdH1tCxg4tmZcRtEHLjjTeio6PDu/Y3UBmQUppEBydu6sF25P1vvPFG730vv/zySF0t3aOdrlwuxyp2pkba98m2/e1vfxvbhv3BUMk2J5xUCwwnzaTsLTf2sypEO/uV7aJxE70vr7MKjfKtk8NI3amhw76l8S0d8K3S82HmzJkV1rq2mdabCt6HH/3oR5G+rc/Mz0kZRfxMObWGZFzw+bnnnosYO1quXl9NsSvfbgeg/lrvQ5EtcwSA/y8Ignd7K/BuEASlIAjKAO4C8I+1FqTuOhvBuu4qMITN01YF71zfTinMUMlms+FKd5s2bUJbW1uoqHSWJ5fUVVBgfIME62XrR1g+TwWKdYtbd33x4sVoamqKDGjKk2vGDaf1J20Q8pe//CWyoqBVtJyApW1s34N2Rp14lLR42JVXXomNGzeGHZ4WFj2Xuro6fPjhh/iXf/mX2DKmTp0aKjAqJXbG1tZWfPe73429tp8YMtkGKnOX4xSeVbBqmKjy1MFQFSuv0zkEmrYK9Cl8m2mk97EKzxd4t31Ns3xYR/aHOK59l112qcgeiguE2gHKBypn32DhaystW711PpedixGH559/PtJv2CY6eHd1dSXu1qRGDr+zjUulEn7zm98kPrtiKGiZ4yFuq3Nu6yAImGT8RQC/qrWgTZs2YerUqaHLTvhcTHVZ2BA2u0OFq76+Hhs3bqy6McX555+PLbfcEpMnTw4FwXY2dTdVGJVesZ2LClhncqqC7+joSNxgYrvttgsHEM2a0A7OQau+vj5cE+b+++/HKaecUlHeO++8g5133hmFQiHcCV47NNMyrdXO9lTuls/MVfXq6upwyy23xFreS5cuxYknnohtt902XPaAC5R9/etfT3w/d999d2S5ZVVu2Wx2qFMgh0y2ffEIbXOr3ID4CTX6Hvj+6+rqqm4eceihh4abNHPtIaVdLD9NmeJ3m86o1qhzLpyVrQOGLs2R1DYsWylRq3wtPv3pT+PVV1+tOM5+ocaJDXpa+AY0NQ71PRx00EGxMYkXX3wRs2bNimS/8Zm4MUccbJaMj8noDwal3J1zTQAOAaArYl3rnNsDQADgv8xviXj33XcxdepUr9Vg3RpVnPqyKBRsVK6sGDcJyWL16tXh5xUrVoRrrHOykQaxSqVSOIlCt3fTyHtvO0W4bB10aK3S2vbh0ksvxWc+85kIx8zySK3wWbk5SLlcjqyyaLF+/foKOkA7NRWotSDUctTrVDn44iYWDz74YPKLiAGVEsE6c/GxN998c0DlWgy1bFNJ2MW91NLmd6U6+Hw+7rlWpU489dRT4ec5c+Z435f2O3pDPppB669Gh6U8qvHWu+yyS2QSlj6j1kmD90Rc2UpT+X7T61V2NXbly2ZivarhlVdeqXpOHHxeha/utWBQtEwQBO1BEGwRBMGHcuykIAhmBUHwmSAIviCWTlU8++yzFTy3dUl9Cp3f2TCkVZqamnDppZdi4cKFA3q+hQsX4qKLLkImkwmzNlg/KhObL255aFpj+jwAIoLLcuMCTtOmTYs8u/KYXK2PAw2VOu9dLBbx0EMPVZR53333hUsUszytr6WkWHdNd1MKSjlf1nMwaaM+rFmzpoKOoYUWBAE6OjrCpYAHi6GWbQ0AWnqL/1WpA30WqJ5HOOfw7LPPDnirt7Vr1+KZZ56JZDtZisvKIw0TyoiNhWndlHPnsSRYOkljO0BfuqxOSiyVSl7u/cknn6xQjuoZKb2kx/Q3pVMIfS8HHnhg4vP0F3PmzIl919Qt/aFkgFE0Q5X48MMPI5YuG1q5R6Av2KAWDNCn5JuamnDhhRcOSZ0uvfTSkHqg8tZccQ1iUvhU+fAcVfIa3FG+3ge7EJbSMAx4cb0PXXO9ls0qVKh1dqx+Zv357DZ6b5+T9wf6llkYDO666y7cddddkTppfek2/+1vfxv0vYYbrKta6HZ+ARBNJFC6hJ/XrVs3JPVZt25dWBd6hrZ+tg9S/qxHbWkypQ7j4Augah9XJct2qsV61r7F7xoj8ylSfUb9bn/n51pm9lbDnDlzMGfOHG9MQ2V9ILTMqFPu3/ve90LlaF+kdgBtdOX4nHNobGzExRdfPKT1uvjii8Mgnw14qDehk3UIzVagtc//dD8Z6PXBdjS12vlHq11z+BlriBs07ICpilozaXQmI6+zbe6bAMXrV69ejTvuuGNA7e6z1lWpl0qlcNC55pprBnSPzYU33ngj/Ox7J2o16neCBsWzzz47pPVau3Ytnn76ae8kJJ8Vq1y/VT6UA928XZcItrAK1EK9cSCaHqkDn4Va9/o8GiOgPKl3YOlHjQHY9qCCnzt3bnIDx0A5dktx2sGn1olLilGzcJiCO8HQOlVuWEdiG0Cl5XzJJZdUvceKFSsqglWXX3551euYrqiUEQXOutgUShVsCjNfIBcMS7K029rasMUWW0S8GaVmNPOEGysUCoVwS8Bjjz22oszLL78ce++9d0SYlFJRK4f15eQuXaZXO5+l0PhegJ53evvttyObzeKss86q2s5r1qwJswt8/L8qlyAI0N7eXrXM0QRrlVKGrKWsHlGtiv2rX/1qRO6KxSKWLl1aU50okyrTGlRkvaxSVetaKRRa8EkcOPuupSOsF2i9RuccfvWrypj2vHnzQg+W7aaDps+j0Huo7Kq+0X6t52UymVDBP/PMMwkt3ANV6nH9RQf2gW4XOSqV+wMPPBDO0uRLsJF8q9gZPIzbHo9YtmxZJF1PFfS1114LAIlK/vLLL8eKFSswadKkcOKNBlBVSG0QjL8pJUPY7ADF4sWLce+994bXsNMpX2oHGk6cicOMGTPC3+30f+X21V1Xy53PTGvPTvu292anLxQKWL16dTh4W++B9aElQwvQUkFad+cc3n333dhnHU144403MHPmzEjwXI0Ca7nbDJokXHXVVairq0NjY2O4GQsNomuuuQZ1dXW48sorY69/5plnMHfu3ApFaGU1KXakXhZ/S8qWef3117HbbrtVxJz0nirbAMLJb9XoHjUAeIzQ5Ajez1eeGi86ULBeNrZw4IEHRurKa/TevK96CGxDVfR2MOsvRqVyB/ooApsiBSDS8SlEVOxxnfzqq68OZ45S6PWF6Wi+fPlyAIhdq4XrhTOnnIqKZdsZdmpdE3bKeD6fR0dHB77zne/gn//5nyvuyRmb2uGVCmFna2pqQnt7e1jH008/3fsM06ZNCy1wK1Q+XpWDCbODbBYBn98Kq1I7dNGLxSLa29sj7cJ78p3yWTVDyNaH93LO4YYbbvA+52iE0mdANFDJTCy13Llx/MSJE73lXXTRRZgxY0aY0qq7cKlF2tHRgcWLF6Orqyt2lVP2OauUVIGpzFm5UU9bZbVUKmH+/PneBcP0/WvGipZvrf9MJuNNgwTi007t5EEdIHQg0mPKhVsK1jcoq5FnDT62g09562cdQIIgGBAlA4xCzp1obW0NG8O6T2rJaONls9lQMSsuueQS5PN5r6WsezsqX+6ci82Jv+SSSyqmvhPKQxJ2dqCmUtJ9tNaOxbnnnhvSE2wXZsrwj2tuK6Xlw4IFC0JFoM/M72o5630AhMseKEiH2Q2cFVTi/J1b4enMR919S7N1LHXE76w7N/seS1CloYE8bVvKA5WkpjIS55xzDiZPnoyOjg4AiAygjMNQ7skp5/P52AyydevWVSga6z2osuOzWOuaCtpnCFgwC4R90EeXKP9tLWHFIYccEhk0tY7sJ1bGAYQzzyl31A26haTPi7LeLj9r+/CZ4tIqbbvpsWptl4RRa7k/9NBDOPvss2OVlI7wzB9ubW31lrXFFluEAkFLz5ehQAVEqzHOUuK5ypVrAEnLojWq1mY227eBN62sYrGISZMmhZ3Uh1NPPRX33ntvODjovbjRB4Whq6srdm2ZT3/60xHFAUQnebAMXbSrlnXqgZ4lEnQii3XxVWi1Dfle1IoF+qxaW08V/K997Ws11W204I033gjzu6tRLmps+DB16tSI8gZ6PEsN1gM97cXtFZMCmDxXPU6lES0Pzs/av7R8pttWC5y+9tpr+PSnP11B8yjVqHogKZfczpC15fE/2/anMZuVWMydOzf2GVSPWAvfd556EfZZh8JqB0ax5Q70KCggaq2rlaMNlclk0NbWVlHGeeedF362ASwgmjHC/zp1Oc7CoSCr66Y8Gu8HILQGNOJPvpp1osKvr6/Ho48+Gtsmp512WjigdHV1hcso8DstkjghXLZsGfL5fMRCskLFOpbL5Zo3ICEuuugiXHTRRRGLx1p6bD+9l7aXrz21DPWCkpZYGM2IU5LWOuRn3+xlyrbSiuqBqqKkwtP5GXG0o+a5q1VpB2nem8/jO1cH+XK5jM9//vOxbfLqq69G+o5azJqtEifbBx98cAX9WS5HZ6qyLkEQ4JlnnqlZsQM9MYmnn346sQ5ad+vBKzWksLy6HYgGilGt3O+///4IdUDwhamVxzVJLCZPngygj1PTDsT/6vKr8ucKiz7otVoHWkzk89TasS8xTujK5TK+853vxLbLaaedhtNPPx2ZTCZcSphB4q6uLpx66qlerv2CCy7AJz/5yTDrRd1FpTvK5TLOPvtsnHvuubF1qIZLLrkEra2tFVwkn9PXHtY6t1YO21RTSxcvXjzgOo4kXn/9de+gR9mxBoLPe83n85HNzmmVZ7PZ0HoHEFGSQN/WdI2Njd66qeVug+u2P1rDQJW5fc98j0ceeWRsu7z66qthBoylX51zePXVV71W+8EHHxwu1OejRrWcn/70pzVltcSBk78o17ae1gBRcPDVc/lZFX+5XI6NKdSKUUvLEJ2dnWhqagoFTneBt1a8z4pjVoJVMmo5qZIGojmtSdPoScfoS1TKwZfKpQEmO6uT1hX5+EceeQRf/vKXY+9/2mmn1dyO559/Pv7bf/tvkbVEyJNrp6W1PhRYtGgRlixZgilTpkRmHWpbW3fW/ulxIOoFjFWrXUFZUQuYYCwjjnfVoLwG7fhuLZWTyWSQy+VC7jmJEvJZ66qwfMsoWHlWj1g9V+ccjjzySDz22GOx9/elOMZh/vz5YVtxzoMdnCg3/bHUk7B27VoccMABEWotbkAhkvhzO1gmlVMrRrXlDvRY7zZYA1S68MqvWaiiVagHYEdcpWniYN1QXkcLXs8j+IJ9ys0OYNlsFg8//HDVNqqGK6+8Evvvv3/43Vpg+rd+/fpB30+xZMkSbNy4MXIPVRgK2xY64FjPolwujzmu3eL111+v6NSAfyVInxyqcaGWs800Umu6u7s7lMEkw8UqIp2EZzOsrIXOY7YMjedks9lEC75WHHrooeHAQk9e60Co3A0V1q1bFw4m1WBjET7ahscBDNpqB8aA5Q70TOKZOHGi101TJeVbC50phBqsU1eS1r+6wWpZx1mHtLQJa+moa6vl6jENQgEIOyU5dXbyRx55BH/9618HvJzCXnvtFQY5mf+sdda2SsqDJpYuXRq6/cViER0dHYmTZL761a/i2muvRVNTk7fzqVdlvSD+rso+CIIwHjPWQTmzxgrlwgaUFXV1dWFgngrOWn0aE1LPNMky5ABhlZYOEvrfWvdA5cJf7FOWopw/v2cb2oHuqWpTiq1ss8+Vy2X85Cc/qVrerrvuGpFHIHl26M9//nPMmTMnrId9Pus9ECrT1mgZLNdOjHrLHeix3vWh7Wc2nu5PSrz33nsAKqch+4J41grJZDKx6ZD2BeiLUa5YLU91VdUS5flcu8by4ACwzTbb4Nvf/jZuueWWmtvt0UcfxXe/+92wU9k6a11KpVLVwePGG2/E6tWrMX36dLS0tCCfz2PSpEmYMWMGVq9ejWXLlsVee/nll1e45oS1/LQdVaHrWhtJ9xpLeOONNyLv2WcFZzIZ73aD5XIZXV1d4XukcmcZpCoIm6debSBXxWMVkMqoWsz2Op8Hphu2sI5HHnlkYrDVgudbj1xlXKmkaop95syZ2GWXXSJGI+s6c+bM2M1BgB6KRg1FWxfb73y6Q4/1h5JKwpiw3IGetd4nT55c0XgUkO7ubrS0tFRcd++992Lx4sVh8NHyhr6RUnO848B0RIV6Bz6rndcp769WjbX6dUDg71tttRW+853voLu7Gx0dHSgUCiiVSmG+eGNjY8VOTdZCtoNkuVyOTSMlbrnllogVaNuqXO5JHb3xxhtj1/Vpb29Hc3Nz+F1TITkA8Tm1XN6H9U1KFx2rsPMDLNXok8Xrr78eCxcuDGk8tThZFoP2mkOuM7R9sOm8PgpRvyuFpCmUKns+2bblAMAXvvAFLw3F6+wgooOgRa3ctW4Wos+jbVEulzFz5sxwVy0L3c/AZhVZeiiu3kNptQODtNydc//lnHvFOfeSc+753mNTnXM/cs690ft/ylBU9Jvf/GaE37JKsVAoRBSHYunSpSEnRyGhgPms+FKphFwul7hUsNIuKhTqSailzslAnEChlo1mH2gqG3/T5QF4LJvNYsKECdhiiy0wffp0TJ06FRMmTIBzLjIRg9exzvY/f0va+ejmm2+OBMdYT31GVQhx2+wtXLgw0vFtG+m7sJ4N/4rFYuzsyqHE5pTt1157reIdKZIU1IoVK8INWjjjGOjzGu0EOsr9VVddFVumBmf1v8/z0z7DP6BPifkUsv5uB3EtV8tXr0T7jpZl+xt/T7Lad91114jBaOVc6wD0WPg+cPKXRdJ7tUofGDqrHRgaWuagIAj2CIJg797vCwH8RxAEuwD4j97vQwJuSB03IpfL8ftu/uUvfwk/WyvITphpaGhI3NzjhhtuCAcLmy+uwszfM5lMZNVH6zozJsAsBioxX6qifX617FQ56gDCsrUTqGWYtDCRTutXIbf8rX7PZDLemcKsp95bKQX1mNS60xTIah7GEGOzyfZvfvObindo3frZs2d7r83n82hvbw/fga7RbzNqnIufeQ30LGqlClKtWIWlXXzeoO0fvut4DRD1zhT2XB2otFz9r8ZGHJSG8UEHNT0njqLxtVcS/eijvIYSw0HLHAXgwN7P9wP4KYArhqrwjo6OkFsnHcHZmZ2dndh2222913Fd8cWLFyOXy0V4NXYE0jvVuMhyuRzOBrXrqZDqAfosoA8//BDvvfderMW5cOFCzJgxA5MnTw4tb+bsqocCVLrMPkGiMre7FrEc6y7HLaWwbNmy0BuyAq4Wlyp2nhe3gBtnLGqdrOvu49iDoCfTY9WqVd5yNxOGVbYJHfzoyZFS9IHKesmSJZEArb4zXptksQOVVrvWB4hSe865cAmJuIDovHnzwnep6bBqZatc2b4D+BW0Dv70HKkgNdU3DqRiFL76EJY+8cF6n/Z8OwDZ40ORIaMYrHIPADzlnAsA3BEEwZ0AZgS9O9QEQfCOc27LwVZSceedd+LCCy+MTFhgB6DwXHnllbF7cS5duhTnnnsupk2bhlwuF77gzs5OLFmypOr9V65cGa5ASSXKzqQKt66uDn//+99rWkZYlf7KlSux1VZbRcpVKkOVtS7BQKiAW+uLgxeASJlxmSfMULKuKWHvqwogzmJSDpiwngTLsIrdN0ltGLHZZZtT8FXJqHzX1dVhv/32wy9+8Qvv9UuWLMF1112HcrkvDZKeYS3bTHLrPWtMWOvTOYcJEybUlOGilMiBBx4YGlFWrnSAT1LKhFq6Vj4t9VcLLE+u37V+vHcS4rKRlEbWFV1t+UOFwSr3/YMgeLtXyH/knKt5Hyjn3NkAzgaA7bffvl833bhxI+rq6sIAhpSZOKuUGMzuQJoOptYH0Jf+VSqVBjy784orrsDpp5+OfffdNzzGyUZW6JXGsJwq66OWGzuOpXXiAsccEOwkmzjhtkHgRYsWVdAzOmhZwdZ1Zlg3DlDd3d1Dvm1fFYyIbFtQuQN97yMJte4V7AM9WKbh+pDNZmtKKfThpz/9KebOnYtyuVyx5HGcMrYDTRwdy0FI+2MS5aIz1nVgsV6kr06ZTAazZs2qaa9UH+duLfhSqTSkXHtYz8FcHATB273/3wPwbwD+EcC7zrmtAaD3/3sx194ZBMHeQRDsPX369H7d97777kNnZ2cFR0klF0czDBYrV670uq1A34vq6urC+eefP6j7rFmzBl/5ylfQ1tbmVYJWYVNpq/BrRoRagT5OsloHsBwnlYBmGNiZlUmd1Vpa1krSZ+Pgc91119XYekODkZLtV199NYwxaCyEcZih5mUJLorl87pUZgaq2Amu58L5I5Yi1IAwf9cECEKtfw3uq5Knl+CDVbBxSr4af+4r03ePOM+iXC4Pi2IHBqHcnXMTnHMT+RnAoQB+BeD7AE7pPe0UAP8+2Er6cOutt0aChDYrII6WGSio2BUUOKVAhnJ7vwsuuACtra2R4KiO9vzPjBoOdvQeuGSpz61WBatWlEItOJ8it5wnOxPr6HsHdqKZ1ofPo0GmYrHoXRBuODHSsv3aa695M6T4XWcbDwXsNnGWp+f7HaxiV6xduzayMKBauHpfQj0YoC9hQM/TQSiOSvTBZ2jod+sRAP6sFp5jkx8A/7LftsyhxmBomRkA/q23MeoAfCsIgiecc88BeMQ5dwaAPwH40uCr6ceNN96IBQsWRKYeM7gaBAFWrlwJ52rbPi8Oy5YtC5WfCh0Vvea21jqD9Pbbbw9jBnGbaRAXXHABbr31VgRBEN5Lc+J9QSBd1IgBXpuhAvRZTXHKHaicQUn4LCZtn7gMHF2znddzpUIdKFlGqVTCzTffnNhGw4ARl+3XXnsNs2bNqnjfpNUOOOAAOOewdu3aAd9jzpw5FbNb9T46w7RWxf7mm2+Gi9nNmDEj8dxnnnkGBx54YGRLPIUvOMnzrBwrlNuOgy/gWm0wqKaMrZWvXon+rllgw2W1A4NQ7kEQ/B7AZz3HPwDw3wdTqf6AywtQKei0aabUXXfddQPiIpcvXx4qYSCaMknXii+xFov9jjvuiPDyQRDg9ttvRy6XS1wE7De/+Q1mzZoVyaIBornEStFwdUge12UNaGErz+5bThboiW1sscUWIQ9LuoX3sXywDkBxKYvcNIUKXNMedRITB6iVK1dWbdehxmiRbTVULBXH9zd37twBrXB40EEHhcrNt/wBkclk8PTTT1ct74MPPsCHH36ISZMmhbL9xz/+ERMmTMC0adMSn5Epm6qwlY6kXNgAvhoX+rta7XE0FvsFkRREVQWdFHOy16mVzuPqfQ+nYgcAN5xuQa3Ye++9g+eff35QZSxatCi0NjTLRDe14EtPUvTMXNHAnypNpl9y/9RCoVB14Lj11lvhnIvsG6oWMS3UpHXTr7322jBQbDlva3FoTEAVJjsAO5Ry8WeccYb3vjfddFOY7qYbY1vPgfUCeoQ6bmXJe+65J6wD0DM4O+fCnXC6urrCuEktmzrXCufcC0Ffvvpmw1DI9h577AGgL5ZBUDlpbGXdunWx5XANFHoDGj/SGInqhGqrKL7zzjthv+AWj0xL3nLLLfHWW2+hpaUFU6bEz/eaM2dOuPyw5dGtMlVDAOgLuvuoJD7HE0884b3vrrvu6rXWfRa4gjtH+Z6D0PiITWAAgBdffNFbRn+RJNfjRrkDPQpeV2RUpaxKWt1/oHKkVYuc5fA4/7NzlMtlLFiwILZON910U2gh6RRx3Y3JOYd8Po8PP/wwdhIW0JMGauunCxbRGtEZi/X19SgUChHLiJaEDmBJ9BCXHtBAqeb40xNhe5x11lmxZd13331wzoWzjTmbVtfUKRQKVfOx+4uxrNwBYNasWZH9Ajiw63e76Ts/W08P8E8A8p2X5BX8+c9/Dt8Xl+XmMhhtbW0ol3t2f2pubkYQBJg0aVJsWQcffHAkg4V1VGVuA6o610L7pDVe4pQ7EK/g49omaRExKnfKcRz/PlSKvbdesXI9JhYOqxXLly8PswpUiNnYmjKojU5odN2n2HUQiEtPVHAmq15PK5iDDsHJWUlpmm1tbaGQqMArPaOeRTabDekZu4ZLEAThZC4AuPvuu2PvywGHypiDCi0szflPUuz3339/+Mw64Gk7l8vJU+M/qnjllVfCALMqOVVwhUIhMrOZcs9rNHitcqOWux5LUnq///3vI8o7n8+jubk53Hi9ubkZzjnkcjm0tbWhu7sbf/rTn2LLs5lBHKAsbafUKJ+Pdacnoh53EAQ49NBDY+/7m9/8JpFH13JqUey+OMFwKfZqGFfKHUBkXRW1CAFEsmp8lg2A2N+s6+dLAVRcccUVYaBSA4jsbNrheC/ukEQL3YIbQVv+lUqbHVs7hA4+HADYAWyAOGlgOe+883DOOedU8LNAT5D0rLPOStzk4/bbb69YoVDbjp+T1vP5qEPTI/VdWyNF5cpez2uszCvi6D7imWeeQWNjI1paWiLxmmKxiE2bNoWyTOOBkwUnTpyIt99+21umDlqaJKDcu13KgMaY9m9fcNU5h8MPP9x7X6BHwev6Pgoq9TgqBkCYvUT9op9HSrEDY2hVyFqxYsWKkH8n2MA2RYrH9ZhV9taCVyvHOYeLLrrIW4+WlpYId6gTMdSr0EXDqKTjAja03Km8dZVGK+hKQ2nQlffVuvD+jY2NuP766xNppoHs0nTjjTdiq622AhANMpFSYOwiafGyFD3W+2c/+9kKGkKDiUo5+hQkYfsEocH5uEDqlltuifr6+nBzd3qiTU1NodXe2dkZWaaYSxPXMvuU8srPNtBpoef6jC0+//z58xNn1SYp8DgwjqEJCtqfORhvbsUOjEPLHeihZzQ7hLCuKH+nArRUDX+3AmM5eB80cKUWNJW5djjeX1MCfWDQ0T4Xy9Ly1IXncRuQAyrzzLfccktce+21VVq4dlx//fXYZpttQoufdeD3hoaGiudJEY+XX365IlhO2dXP1pq11ry+C6D6lHpFEARhIJzllkolbNiwIVTqHLx5r/r6+jBTyge11nXAsQMPoembtoy48ovFIr7whS/U/JzVwOUatK2BygXQRiquOW571DXXXBPh3hU+C0AVuVq9vnNrUUTsbHYAUaHlLNJaOxaVO9DXaXUgUl7VPgvro9daoWQdt9lmm9hle/uDW265BTvttFOoRNhu3EJQO/F555036Pt9VPDSSy9VUADqEWlsyPfe9Tz9nUji2oE+CoX9K5fLoaGhAZMnT0Z9fT3q6upC2obyt2nTpvC3WmDlWwcs1lEnAtl+EWeoFQqFIdnezyp2O0lJ7//SSy8N+n4DwbhV7gDwta99rUJxWmHgMZtaaK0AG1it1gGU37aWlAaD7ADk4w0JDfba4JcOIFqmpi0qHeMbvFhOuVzGlltuiXvvvXdAE8AWLFiABx98EDvssENYJrNtqNgZWAaQGIRN4cfLL78ckS21FOOWzrWxEp+FnyR/RCbTs9F2LpcLs74KhQI6OjrQ1taGQqGAQqEQZszU19ejpaUFXV1dsRut6DNYJa7/1TvV/77z9Xn1mbq7uzF//nwcf/zxic/pw7x58zB37twKrl/rxvuXy+URU+zAOFfuALBhwwavgvd9tsdUQNTKVK4ybtu7K6+8MtJZbCCIlo8uH6AphT4wMGXdVlXyLF8RZ+3zejug0YXN5XLYZ599cPfdd2NJDStmXn311bj//vsxd+5ctLS0hIFbls1UPir4crmMk08+uWq5KfywSt1auknffYpfy8pkMpg3b573vrvvvnu4Exi59IaGBtTV1YXpjuo1cN/eTCaDfD4f+yy+xbysV2kVts9qTxqktD02bNiA+fPn46ijjkpuaPQo9Xnz5kViGixHPR+lqUaCZ1eMu4CqxY033ojzzz8fW265ZaxL6FP2KmCqNPlidWJUHHQQsIErDXIyrZIdLG7hsebmZm85Ch8FxHrG1dU3mLEu3d3dmDRpEmbNmoVHHnkEhUIBXV1dYWZPfX09Ghsb0dTUhH/8x38EgAgdxTra+3d1dQ3IckrRBwZYdY4BEF3wzfLUhE5gAlAh09WoQm7tR++Lm6Vrmm1XVxfy+Ty6urowYcIEdHZ2YurUqd7ybPpiHH9u+6V6pvb3pO9WOR922GEReeVv1rvhs/O7DpqjSbEDHwHLHQBWr16NP/3pT5FFtHy8uv3vozFojer/OHDBK+siatl6zAqqhd0jVhWoVZ46qNhn88UV7LU6aYnWFwA0NTVh6tSp2HrrrbHNNttg2rRpYU4zvRC7TIGlZdra2vDlL3859jlT1I6XX345MqEH6OPTlVNXLh6opCrUC6hFube2tobXc70goEd2OJGJMsAVXLkSpA+cN5HUn3w0qT0ed42lMX2/aTqxTVf2xS9sO48mxQ58RJQ70DNJ5+qrr45wflaxW0WnPLwKRa3K/aqrrgon/fjoGV2cCUjeJvC8884Lp2izvnHP4Hse30Dme1YfdEDQWIHNxtHBhGVSoZOKef/993HsscfGtlmK/uOll17CK6+8EpnTYWkYAF459FEYtfDuu+++Ozo7O0OLv1AohPdkphhz4BsaGtDd3Y2tt97aW9Z+++2XGGi1dfM9T9KzWorHtoM9V9ORdYBURW+D0KNNsQMfIeVOLF26FBs3bowoN18wVd1EoC+N0O5+VFdXlzj5Z8GCBSHnqKN7d3d3eBzosX6S1oHfYYcdIuvmqCdhLXHrclsrWhU5nwmotOotpeRrM1sfa6lr+X/6059w4oknDvINpojDr371q3DgBeJ5d0LTJykrar0DPcsCxGGXXXZBe3t7aJkzjtTZ2YnW1lbkcrkwdpO0tozuL0z4Bhgf324NlrhBySpzW44qdav87UBoy6SiH02KHfgIKnegJw/+7bffrsgksX9UlJZm0PN9ueMWl156abgzU0NDA3K5HOrr65HL5cIJEEmLhi1YsACTJk2qWVnb57G55b4BLEmB+xR+nKLnZy7YxmyK//zP/8SZZ545uBeXoiq40mA1BW+VoFVaSfSgYscdd8S0adMiRkahUAit9bq6ugo6UTF79uyKNf4JS2daKzzuGeIsdj3P8vZxWUM+xW4z37LZLIZi/aChxrhaOKy/OPPMM/Hxj388pDuS+GsFA1WWzx7I7M1asHr16sg6MNbDsBYMoRZ5UmfVzmzPs4Maj9lBRO+pv3344Yc4+uijB/roQwY3xhcO6y/23HPPyMJwQOV7s+9VF7azWVlDuVGHYt68eV5Kxip2WuVx/31I4tgJpUntgKC/Kd0F9G0WMtJKPUmuB7MT08ecc087515zzr3qnLuo9/gS59xfnHMv9f7NH+g9hht33303rrzySvz973+PWLHqIvo2qtD144lMJoO77rpryOt48803I5/Pe5WvCrZ2YHLc1vLmeT6LWz0Ua4n7vBurANRa5/l//vOfR4Vi7y/Gg2y/+OKLeOWVVyoWy/Nx8pQhXbzLZook0TMDxUEHHRRm28RRHjZTxVrnPs48ycpXqiUu7mAVu6Vn2E4jrdirYTC0TBHAvwRBsBuA/QD8D+fcp3p/WxUEwR69f9W3SB9hLF26FG+88UYkpUzXzAAqFZvSGhpwHUoFv3r16sg61z7Fa49Zxa3112ss3eS7B48zGKplq7WlsQAG155//nmceuqpQ9YWmxnjRra5ibNu1aiBwSRFaIOKcXnvA8G8efNQX1/vnWxFJCnruN+1vDhKR8v3leO7P/s4N1B57rnnhqwthgsDVu5BELwTBMH/1/t5E4DXAGw7VBXb3Lj55ptx8cUXY/369WGUn5y8zRvmi7aWO4AhU/DcoUktbZ+A8t7WMtdMFaalxSlzq7xZpk42Aiq3XuN2akQ2m8W7776L+fPn48orrxx0G4wUxptsv/zyyxEr3mZ9aPaHBll9CnMoFPwhhxwSWuw+BaxKV3/XutmZqgrfIGatdcIXk/DNPOXg+Nxzz+HnP//5oNtgc2BIOHfn3I4AfgZgdwCXAjgVwEYAz6PHAvp70vUjxUvG4fzzz8euu+6KCRMmhOllutuNnRxCqCKmgPQ3iHjHHXdUcOs2vdBHrcRZ7LxG/yvslGk7iGgdeC7pF35vaGhAe3v7kKzZMVwYKOc+3mRbuXjl2NWIoeyoN2aNB6D/PLzPWmdZumqqhY9+BKJcvA/sp5ZisZ9ViStPH/QGTEul0qi11JPketDK3TnXDOAZAP8rCILvOudmAHgfQADgGgBbB0FQsc2Pc+5sAGcDwPbbb7/XH//4x0HVYziwaNEi7LzzzuHuRkB09h/hC/4oJ89JJkm7Hd1zzz0IgiDcZEOpHqBS0cfx3j66hef4LJc44fdZRFapc7/U3/72t6N+4a+BKPfxLNuzZs0CEKXcVHbjgubqoaosJCl6DZqSr7ZyF3fMQpW/epSWJ4+DVehAdLE1yj3ncWSzWfziF7+oWu5IYdiUu3OuHsBjAJ4MguAGz+87AngsCILdk8oZbdaNxTXXXIOPfexjcM6Fe3xSkWqASpWstqud5GODWjr5g7/bLBTl+K3StqmOtgPqZ3738a0skxYLwdgDOyaX6X3rrbdwyimnDG1jDxP6q9w/KrK9++67wznnVfLWclcZIg8N+BUuEF3ozubPKyz9YuG7JglqefvoTBtTUHBinnNuVCt1IkmuB7y2jOtp8XsAvKbC75zbOgiCd3q/fhHA8G7xvRnw1a9+NfL9wQcfRGdnZ7j+OpWr8no2kEkBs6tA2mn+unCY7pjjC3raAYWfVdmrBa8dTJW+c31LB7Du5Ok54SqTyYTHhjKwNhrxUZJt5sUTe+21VygbuoUd5cq3mYyPpqSBEEedxAUvgSgNo/e3ZViKRo9Z3lw/2/prXceCQq8Vg1k4bH8AJwF4xTn3Uu+xRQCOd87tgR7X9b8ADE/y9wiCsywffPDBcHnTcrkc4THVKifUAgKiK8pxIS5ez/PtdVT8vFec9W4HBZ6vHcIqdM4UDIIg3I8zm82iubkZ3d3dw5ION0rxkZXtF154AUAPN69xJqCPF1fjQwcCwlralHPKcTVLXcu1wdU4Ja73svePo2zUQ3322WfjmmTMYsDKPQiCdQB8/tKoTw8bKlDJr1mzBplMBt3d3eESqEqB0CpRq8cGSZk9oFaQWh/WZfZlzmi+uv5p0EqtF+bD8zuXRGAmTDabxdy5c4el7UYzUtnum0pPJa9zPzT4SWVajTpROpLWuK8v2MlCer3PCvcNEnbdF4VmAI1Hha4Y90v+bg5ooPTuu+8GgFBREnZtGiC6Ep9a5Cr0Sq3YgKlV4lydz/L1LEsnNzF4y40WgD4u/YADDhi+xkoxpqDrpey9994RLt6ngAlVujZQWm2Dbh/sQEAjKEmRK6jUx0oa41AgVe5DDE19vO2220Keklw7hZ2dxK73YvN3ae2r5aIdQzl20jrc5chSMRxMaJ1nMhk0NjYin8/jH/7hHzZXE6UYo9DA8D777OON2/C7gpRlUiaWDbaqJR43ECQNCurZfpQUuiJV7sMILhZGrF69OsJRqmUP9FnqquzVYlfrWy14TiYivaPWDflLnqec+u67JyZ6pEgRC5v3vc8++wCo3ASEoBxq+mJcbrt6tj5vwHeuveajqtAVqXLfjPAt6XvzzTdXTDyywVjNjKH1zRxzTgpRDp2rTtJqL5fL+OQnP7lZnzXFRwu+ST777bdf+NnSOHZrOsLSLkD1yUrr1q0bXOXHKVLlPsK48MILY3+77rrrQiXNP3YS8pake7q7u9Ha2oovfOELm7H2KVLEIymtcPbs2d7jllvXrK+1a9cOcQ3HN1LlPopx2WWXjXQVUqQYFoz3TJXRgI/kZh0pUqRIMd6RKvcUKVKkGIdIlXuKFClSjEOkyj1FihQpxiFS5Z4iRYoU4xCpck+RIkWKcYhUuadIkSLFOESq3FOkSJFiHCJV7ilSpEgxDjFsyt05d7hz7nXn3O+ccwuH6z4pUmxOpHKdYqxgWJS7cy4L4P8H4AgAn0LPDjafGo57pUixuZDKdYqxhOGy3P8RwO+CIPh9EAQFAN8GcNQw3StFis2FVK5TjBkMl3LfFsCf5ftbvcdCOOfOds4975x7/m9/+9swVSNFiiFFVbkGUtlOMTowXKtC+jZUjCzGHATBnQDuBADn3N+cc20A3h+m+gw3pmHs1h0Y2/Wvte47DMG9qso1UCHbm5xzrw/BvUcKY1k2gLFd/1rqHivXw6Xc3wLwMfm+HYC3404OgmC6c+75IAj2Hqb6DCvGct2BsV3/zVz3fsl1L14fq20LjG3ZAMZ2/Qdb9+GiZZ4DsItzbifnXAOA4wB8f5julSLF5kIq1ynGDIbFcg+CoOicOx/AkwCyANYEQfDqcNwrRYrNhVSuU4wlDNtOTEEQPA7g8X5ccudw1WUzYCzXHRjb9d+sdf+IyTWQ1n8kMai6u7hNZ1OkSJEixdhFuvxAihQpUoxDjLhyH4vTuZ1z/+Wce8U595Jz7vneY1Odcz9yzr3R+3/KSNcTAJxza5xz7znnfiXHYuvqnLuy91287pw7bGRq3YeY+i9xzv2lt/1fcs7Nl99GTf3HmmyPJbkGUtmueoMgCEbsDz1BqTcB7AygAcDLAD41knWqsd7/BWCaOXYtgIW9nxcCWDnS9eyty+cA/AOAX1WrK3qm1L8MIAdgp953kx2F9V8CYIHn3FFT/7Eo22NJrhNkI5Xt3r+RttzH03TuowDc3/v5fgD/NHJV6UMQBD8DsN4cjqvrUQC+HQRBVxAEfwDwO/S8oxFDTP3jMJrqP15ke1TKNZDKNqrUf6SVe03TuUchAgBPOedecM6d3XtsRhAE7wBA7/8tR6x21RFX17H0Ps53zv1nr2tL13s01X801aVWjHW5BlLZDjHSyr2m6dyjEPsHQfAP6Fkd8H845z430hUaIoyV93EbgI8D2APAOwC+0Xt8NNV/NNWlVoxXuQbGzvsYMtkeaeU+kOncI44gCN7u/f8egH9Dj3v0rnNuawDo/f/eyNWwKuLqOibeRxAE7wZBUAqCoAzgLvS5p6Op/qOpLjVhHMg1kMp2iJFW7mNuOrdzboJzbiI/AzgUwK/QU+9Tek87BcC/j0wNa0JcXb8P4DjnXM45txOAXQD83xGoXyLYeXvxRfS0PzC66j+mZHucyDWQynYfRkHEez6A36In+vs/R7o+NdR3Z/RErV8G8CrrDGALAP8B4I3e/1NHuq699XoIPe5dN3pG/zOS6grgf/a+i9cBHDFK6/9NAK8A+M9eod96NNZ/LMn2WJPrBNlIZbv3L52hmiJFihTjECNNy6RIkSJFimFAqtxTpEiRYhwiVe4pUqRIMQ6RKvcUKVKkGIdIlXuKFClSjEOkyj1FihQpxiFS5Z4iRYoU4xCpck+RIkWKcYj/P9Se6sc8h3/QAAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1,2)\n", + "ax[0].imshow(s0[78,:,:], cmap=\"gray\", origin=\"lower\", vmin=0, vmax=3000)\n", + "ax[1].imshow(t1[78,:,:], cmap=\"gray\", origin=\"lower\", vmin=0, vmax=2);" + ] + }, + { + "cell_type": "markdown", + "id": "878fb9fb-aca8-49af-88fb-bae3c32c6284", + "metadata": {}, + "source": [ + "### DESPOT1-HIFI\n", + "Now fit all 5 scans using the DESPOT1-HIFI method." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8ea99231-2eb7-467d-bdf5-3bd41df917d4", + "metadata": {}, + "outputs": [], + "source": [ + "hifi_fitter = t1_fit.HIFI(esp = np.array([5.4e-3, 5.4e-3, 5.4e-3, 5.4e-3, 5.4e-3]),\n", + " ti = np.array([168e-3, 1068e-3, np.nan, np.nan, np.nan]),\n", + " n = np.array([160, 160, np.nan, np.nan, np.nan]),\n", + " b = np.array([5, 5, 2, 5, 12]),\n", + " td = np.array([0, 0, np.nan, np.nan, np.nan]),\n", + " centre = np.array([0.5, 0.5, np.nan, np.nan, np.nan]))" + ] + }, + { + "cell_type": "markdown", + "id": "4187ebad-4a54-4a35-9516-7347ad6f3b2c", + "metadata": {}, + "source": [ + "To save time, use multple cores and supply a mask image to process a subset of voxels:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "1d0efe83-3a94-4592-b201-b31eec8e512c", + "metadata": {}, + "outputs": [], + "source": [ + "images = [os.path.join('.', 'T1_data', img) for img in ['TI_168ms.nii.gz', 'TI_1068ms.nii.gz', 'FA2.nii.gz', 'FA5.nii.gz', 'FA12.nii.gz']]\n", + "\n", + "s0, t1, k_fa, s_fit = hifi_fitter.proc_image(images, \n", + " mask='.\\\\T1_data\\\\mask.nii.gz',\n", + " threshold=50,\n", + " dir='C:\\\\temp\\\\sepal',\n", + " suffix='_HIFI',\n", + " n_procs=4);" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "83d0b631-c849-4a7d-b086-850a9583dba5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1,3)\n", + "ax[0].imshow(s0[78,:,:], cmap=\"gray\", origin=\"lower\", vmin=0, vmax=3000)\n", + "ax[1].imshow(t1[78,:,:], cmap=\"gray\", origin=\"lower\", vmin=0, vmax=2)\n", + "ax[2].imshow(k_fa[78,:,:], cmap=\"gray\", origin=\"lower\", vmin=0, vmax=1.5);" + ] + } + ], + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_pk_models.ipynb b/demo/demo_pk_models.ipynb new file mode 100644 index 0000000..39698dd --- /dev/null +++ b/demo/demo_pk_models.ipynb @@ -0,0 +1,440 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fifty-passport", + "metadata": {}, + "source": [ + "# Pharmacokinetic model class\n", + "The PKModel abstract base class represents pharmacokinetic models, i.e. models to predict tissue CA concentration. Subclasses represent specific models, e.g. Patlak.\n", + "The main function of the class is to provide a conc method, which returns the CA concentration for the capillary plasma and EES spaces, and the whole tissue." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "internal-arbor", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import aifs, pk_models\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "arabic-latvia", + "metadata": {}, + "source": [ + "#### Example\n", + "Create a PKModel object and use to predict CA concentration. \n", + "To do this we need to specify:\n", + "- The time points at which we need to calculate concentration\n", + "- An AIF object:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9182023e-f0e1-4311-bf7a-0b735bccacb4", + "metadata": {}, + "outputs": [], + "source": [ + "dt = 2\n", + "t = np.arange(0,100)*dt + dt/2 # t = 1, 3, ..., 199 s\n", + "aif = aifs.Parker(hct=0.42, t_start=15)\n", + "\n", + "pkm_tcxm = pk_models.TCXM(t, aif)" + ] + }, + { + "cell_type": "markdown", + "id": "f0a4674d-e6fa-447e-815d-7fa1b824a490", + "metadata": {}, + "source": [ + "The names and order of the parameters can be obtained from the object:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "68741d3c-7b67-48ea-b175-6bb0e4123917", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('vp', 'ps', 've', 'fp')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pkm_tcxm.parameter_names" + ] + }, + { + "cell_type": "markdown", + "id": "161c2ce5-359d-4a52-ad54-482ad876ac84", + "metadata": {}, + "source": [ + "Calculate concentration using the conc method (parameters can be passed as positional or keyword arguments):" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "0124f022-180b-4a94-8eb3-c17936e1f468", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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9L59+5g/fz7z588HoKysjIMHDwJw7733MmXKFKZMmcJ9990HWKm3J02axFe/+lWOP/54FixYQGtra5jO7NFLaxAxqLm9gwLqcTvG9LyCI4dcWzW1mo/pqHDXB3exqW5TWPd5XPZx3Dzr5j7XaW1tpaKiIvD5+9//fiAD62WXXUZycjJgZRq9++67+da3vsUZZ5zBySefzIIFC7j66qvJzMzsss9XXnmFF154gffffx+HwxHIZbRkyRIeeOAB5s6dy9KlS7n99tsDF9+Ojg4++OADli9fzu23386KFSv43//9X1auXMkvf/lLwLqNtGrVKt5++22Sk5N54403uhy3v/ThwW644Qbuvfde/vWvfx2WUnvVqlU88sgjvP/++xhjmD17NnPnziUrK4stW7bw9NNP87vf/Y5LLrmE559/nssvv7zPc3ys0wARg5rbPEySOvZ378HUyZFDNlu1DUL1aaC3mK6++mrOOeccXn31VV588UV++9vfsmbNmi7ZTFesWMHVV18duHWTnZ1NY2MjDQ0NgaRxV155JZ///OcD21x00UVA/ymoFy9eHAha3XWmD09OTg6kD+8evELx9ttvc+GFFwbyNF100UW89dZbLF68mNGjRwcCarjSZR/tNEDEoDZnHYnigdSebzGRkku6r1F7MR0l+vulH0uKi4u55ppruOaaa5gyZQrr16/nhBNOCCwPNV12sM4A018K6minyw4OhDabTW8xoW0QMam92bp/a0/pefARHLk4fM00NLv6/MIrNRCvvvoqHo8HgP3791NbW0tJSddu1gsWLODhhx8O9BCqq6sjIyODrKyswPCgTzzxRL8pqAeaLrun9OGjRo3ik08+ob29ncbGRv7xj3/0u//TTz+dF154gZaWFlwuF3/5y1847bTTQi7HcKM1iBjkbrES8SU4Mnpewd/11dHRRHN7B2lJ8UNVNHUU6d4GsXDhwkBX1+A2iNzcXFasWMFrr73GjTfeGBho5+6776awsLDLPhcuXMjq1auZOXMmCQkJLFq0iB//+Mc89thjXHfddbS0tDBmzJh+02XPnz+fO++8k4qKCr7//e/3+2/pKX04wCWXXEJ5eTnjx4/vMvzptddey7nnnktRURH/+te/AvNnzJjBVVddxaxZVhLMr3zlK0yfPl1vJ/Uioum+h9qxku77lZf/zLkfXk3TxX8ifco5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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pkp = {'vp': 0.01, 'ps': 5e-3, 've': 0.2, 'fp': 20}\n", + "C_t, C_cp, C_e = pkm_tcxm.conc(**pkp)\n", + "\n", + "plt.plot(t, C_t, '-', label='tissue conc.')\n", + "plt.plot(t, C_cp, '-', label='blood plasma contribution')\n", + "plt.plot(t, C_e, '-', label='EES contribution')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)');" + ] + }, + { + "cell_type": "markdown", + "id": "444f75a4-cf40-4d87-a711-e153299ff95e", + "metadata": {}, + "source": [ + "Parameters can be converted between dict (for readability) and array (for optimisation algorithms) formats:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4920b8bc-902e-4780-96d2-453af448ccfe", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parameters as array: [1.e-02 5.e-03 2.e-01 2.e+01]\n", + "Parameters as dict: {'vp': 0.01, 'ps': 0.005, 've': 0.2, 'fp': 20.0}\n" + ] + } + ], + "source": [ + "pkp_array = pkm_tcxm.pkp_array(pkp)\n", + "pkp_dict = pkm_tcxm.pkp_dict(pkp_array)\n", + "print(f\"Parameters as array: {pkp_array}\")\n", + "print(f\"Parameters as dict: {pkp_dict}\")" + ] + }, + { + "cell_type": "markdown", + "id": "5d5b502e-0551-4e53-9852-38027242df14", + "metadata": {}, + "source": [ + "Required parameters have typical values (for scaling and as default initial estimates) and bounds (for fitting):" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "144a6663-0389-4c6a-8831-42ef99348430", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Parameter names for this model are: ('vp', 'ps', 've', 'fp')\n", + "Typical values for these parameters are: [ 0.1 0.05 0.5 50. ]\n", + "Bounds for these parameters are: ((1e-08, -0.001, 1e-08, 1e-08), (1, 1, 1, 200))\n" + ] + } + ], + "source": [ + "print(f\"Parameter names for this model are: {pkm_tcxm.parameter_names}\")\n", + "print(f\"Typical values for these parameters are: {pkm_tcxm.typical_vals}\")\n", + "print(f\"Bounds for these parameters are: {pkm_tcxm.bounds}\")" + ] + }, + { + "cell_type": "markdown", + "id": "bc80d4f5-13fd-445a-8997-194e228ee2b4", + "metadata": {}, + "source": [ + "We can also specify a fixed artery-capillary delay for the model:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "04c8cd03-0179-4c94-84bb-aa0929319283", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "C_t_delayed, _, _ = pk_models.TCXM(t, aif, fixed_delay=100).conc(**pkp)\n", + "\n", + "plt.plot(t, C_t_delayed, '-', label='tissue conc.')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)');" + ] + }, + { + "cell_type": "markdown", + "id": "99485496-b5b7-412d-8f23-766598e9aba7", + "metadata": {}, + "source": [ + "The default delay is zero. If set to None, the delay is assumed to be a fitted parameter and must be specified with the other parameters when calling the conc method:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6fa27693-0055-4c41-9d4c-ec6f61ead8b7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('vp', 'ps', 've', 'fp', 'delay')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pkm_tcxm_var_delay = pk_models.TCXM(t, aif, fixed_delay=None)\n", + "pkm_tcxm_var_delay.parameter_names" + ] + }, + { + "cell_type": "markdown", + "id": "7395fd1d-a202-4a9f-9ce4-17ab4577bc13", + "metadata": {}, + "source": [ + "The irf method returns the impulse response functions for the plasma and EES compartments:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "15e26b8a-bc65-4c91-bbf0-afa9948b30c5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEKCAYAAADaa8itAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAvvElEQVR4nO3de3xU5b3v8c9vJpkkIDcxKhcRUFAQMCCCVaFoVfCyRbv1qLsWD/SUF1uttN1a4Firp+dlC9ue7qNtldrWrXZbb3VXaaXe9qmXXqiCRhSViyAaQQXkouSe+Z0/ZiVOYjIzSWbNJOT7fr3mlTXPep5n/daakB/PWmueZe6OiIhINkTyHYCIiBw4lFRERCRrlFRERCRrlFRERCRrlFRERCRrlFRERCRrQk0qZjbLzNab2SYzW9zKejOz24L1a81sUrq2Zva/g7rlZvaUmQ0OyoebWVVQXm5my8PcNxER+TwL63sqZhYFNgBnAhXAS8Bl7v5GUp1zgG8A5wBTgVvdfWqqtmbW1933Be2vAca6+wIzGw78wd3HhbJDIiKSVpgjlSnAJnff7O61wAPA7BZ1ZgP3esIqoL+ZDUrVtjGhBHoD+vamiEgXURBi30OA95LeV5AYjaSrMyRdWzO7GZgD7AVOS6o3wsxeAfYB33X3F1oGZWbzgfkAvXv3PuHYY49t316JiPRwa9as2enupa2tCzOpWCtlLUcVbdVJ2dbdrweuN7MlwNXAjcB2YJi77zKzE4BHzey4FiMb3P1O4E6AyZMn++rVqzPdHxERAcxsa1vrwjz9VQEckfR+KLAtwzqZtAX4DfCPAO5e4+67guU1wNvA6E7ELyIi7RRmUnkJGGVmI8wsBlwKrGhRZwUwJ7gL7CRgr7tvT9XWzEYltT8feCsoLw0u8GNmI4FRwObwdk9ERFoK7fSXu9eb2dXAk0AUuMvd15nZgmD9cmAliTu/NgGVwNxUbYOul5rZMUAc2AosCMqnA983s3qgAVjg7h+HtX8iIvJ5od1S3B3omopI59TV1VFRUUF1dXW+Q5EQFBcXM3ToUAoLC5uVm9kad5/cWpswL9SLyAGuoqKCPn36MHz4cMxau79Guit3Z9euXVRUVDBixIiM22maFhHpsOrqagYOHKiEcgAyMwYOHNjuUaiSioh0ihLKgasjn62SSgd8WLGJVb/8Nu9tfDXfoYiIdClKKh2wb8c2Tqr4Fbu2vpG+soiEZs+ePdx+++1N77dt28ZFF12U0xjeeecdxo1LTDn47LPP0q9fPyZOnMixxx7Ltdde21Tv7rvvprS0lLKyMsrKypgzZ05O48wVJZUOKCwqAaChVne8iORTy6QyePBgfvvb3+YxIpg2bRqvvPIKr7zyCn/4wx/4y1/+0rTukksuoby8nPLycu699948RhkeJZUOaEwq8dqqPEci0rMtXryYt99+m7KyMq677rpmo4Z169YxZcoUysrKmDBhAhs3bmT//v2ce+65HH/88YwbN44HH3wQgOHDh7Nz504AVq9ezYwZMwDYv38/8+bN48QTT2TixIk89thjGcdWUlJCWVkZ77//fnZ3uovTLcUdUFjcG4B4vUYqIo3+1+/X8ca2fekrtsPYwX258R+Oa3P90qVLef311ykvLwcSp6IaLV++nIULF/KVr3yF2tpaGhoaWLlyJYMHD+bxxx8HYO/evSm3f/PNN3P66adz1113sWfPHqZMmcIZZ5xB796908a+e/duNm7cyPTp05vKHnzwQf785z8DsHDhQubOnZu2n+5GI5UOiAUjFa9TUhHpqr7whS/wgx/8gGXLlrF161ZKSkoYP348zzzzDIsWLeKFF16gX79+Kft46qmnWLp0KWVlZcyYMYPq6mrefffdlG1eeOEFJkyYwOGHH855553H4Ycf3rQu+fTXgZhQQCOVDikq7gWAa6Qi0iTViCIf/umf/ompU6fy+OOPM3PmTH75y19y+umns2bNGlauXMmSJUs466yz+N73vkdBQQHxeByg2fcy3J1HHnmEY445JuPtTps2jT/84Q9s2LCBU089lQsvvJCysrJs716XpZFKB8SKNVIR6Qr69OnDJ5980uq6zZs3M3LkSK655hrOP/981q5dy7Zt2+jVqxeXX3451157LS+//DKQuKayZs0aAB555JGmPmbOnMlPfvITGqezeuWVVzKObfTo0SxZsoRly5Z1dPe6JSWVDogWFFLnUaivyXcoIj3awIEDOeWUUxg3bhzXXXdds3UPPvgg48aNo6ysjLfeeos5c+bw2muvNV28v/nmm/nud78LwI033sjChQuZNm0a0Wi0qY8bbriBuro6JkyYwLhx47jhhhvaFd+CBQt4/vnn2bJlS+d3tpvQhJIdnFBy/42HsfawC/nClcuzHJVI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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "irf_cp, irf_ees = pkm_tcxm.irf(**pkp)\n", + "irf_tissue = irf_cp + irf_ees\n", + "\n", + "plt.plot(pkm_tcxm.tau_upsample, irf_tissue, '-', label='tissue IRF')\n", + "plt.plot(pkm_tcxm.tau_upsample, irf_cp, '-', label='blood plasma IRF')\n", + "plt.plot(pkm_tcxm.tau_upsample, irf_ees, '-', label='EES IRF')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('IRF (/s)');" + ] + }, + { + "cell_type": "markdown", + "id": "6ebf1e31-0f6b-4e01-a304-2af290c8b60a", + "metadata": {}, + "source": [ + "#### Interpolation\n", + "Concentration is calculated by discrete convolution of the AIF and IRF at the required time points. If either function is temporally undersampled then the calculated concentration may not be accurate. In our example, if we set a high Fp then the IRF will not be properly sampled:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0732ea98-8270-4144-8413-5b6c514aaf78", + "metadata": {}, + "outputs": [], + "source": [ + "C_t_default, _, _ = pk_models.TCXM(t, aif).conc(vp=0.01, ps=5e-3, ve=0.2, fp=200)" + ] + }, + { + "cell_type": "markdown", + "id": "673448f8-8eb0-4532-b770-d9885f6413a1", + "metadata": {}, + "source": [ + "We can correct this by upsampling the AIF and IRF for the convolution step (concentration is still calculated at the requested time points). To do this, use the upsample_factor parameter when creating the PKModel object:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "f0b57057-b319-4c70-9472-7e25800169a5", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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UVZWxtixY5k1a1adWB577DG6du3KmjVrqKqqYvLkyUybNo1PPvmErVu3smHDBvbt28fw4cO58cYb65RNSUnhiSee4IorruDhhx/mtdde46OPPmr0s+/Zs4eTT66dkmbAgAHs2bOHvn37tvh4djaWIJLM4XJnoL6sNGfsG69HyElP4Xil9UGY5rv66qsBZ1C/Y8eOceTIESZPnsyPf/xjrr32WubOncuAAQOoqanhZz/7GStXrsTj8bBnzx727dsHwODBgxk1ahQAI0aMYOrUqYhIgyGw58yZQ2ZmJpmZmVxwwQWsXr2a/Pz80Po33niD9evXh/oXjh49yrZt21i5ciVXX301Xq+Xfv368Y1vfCPiZxkxYgTXXXcdl1xyCR9++CFpaWmNfvZIwwi1ZCTVzswSRJI5XObcJBf+DzknPYVS66ROfifwS7+lwofQhobDaEcalnrBggXMmjWL5cuXc9ZZZ7FixQpWrVrFgQMHWLduHampqQwaNCi0r/ChuE90COzf/OY3TJ8+vc7y5cuXx3zi3rBhA926dQslr8YMGDCA3bt3h14XFRXRr1+/mN7HOKwPIskcLq8JNS8F5WZYDcJE1rt3b/bv309JSQlVVVX89a9/rbM+OC/x+++/T9euXenatSs7duxg1KhR/OQnP6GgoIAtW7Zw9OhRTjrpJFJTU3nnnXf48ssvmx3Lyy+/TGVlJSUlJbz77rtMmDChzvrp06fz+9//npoap5/t888/p6ysjPPPP59nn30Wv9/P3r17eeeddyLu/8UXX6SkpISVK1dy2223ceTIkUbjmT17Nk899RSqyqpVq+jatas1LzWT1SCSjFODqJsgctJT7DJXE1Fqaip33303kyZNYvDgwZxxxhl11ufl5XHOOedw7NgxlixZAjiT1rzzzjt4vV6GDx/OzJkzKS0t5ZJLLqGgoID8/PwG+4nFxIkTmTVrFl999RW//OUv6devX50mqJtuuoldu3Yxbtw4VJVevXrx0ksvcdlll/H2228zatSo0PzT9R08eJAFCxbw1ltvcfLJJ3Prrbdy++238+STT/Lwww9z//338/XXXzN69GguvvhiHn30US6++GKWL1/OkCFDyMrK4vHHH2/2Z+rsbLjvJDP11+9yRp8uPHJt7dj3Nzy+msNl1bx867ltGJmJJJmH+54yZQoPPvhgg7kK4mHhwoXk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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "C_t_upsampled, _, _ = pk_models.TCXM(t, aif, upsample_factor=10).conc(vp=0.01, ps=5e-3, ve=0.2, fp=200)\n", + "\n", + "plt.plot(t, C_t_default, '-', label='default (undersampled IRF)')\n", + "plt.plot(t, C_t_upsampled, '-', label='upsampled x10')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('concentration (mM)');" + ] + }, + { + "cell_type": "markdown", + "id": "1ea3ed48-79cc-41b7-9423-47cb744c6be5", + "metadata": {}, + "source": [ + "Of course, if the AIF is based on Patient data that is temporally undersampled then upsampling won't correct for this. In our example, the AIF is a continuous (Parker) function, so upsampling of the AIF should further increase the accuracy." + ] + }, + { + "cell_type": "markdown", + "id": "eacbb9df-9a1b-4350-ba9e-837b02a41597", + "metadata": {}, + "source": [ + "#### Compare models" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "8769c60d-f747-4f00-9dfc-d68d9d3efd63", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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w+233853331HWload9xxBzt27CAtLY3bbruNnJwchg0bRlpaGikpKSxevLiJv9pCCCGEaIn2jVLXbN4MgC21B0HTppHw/Xd0eHMO/qdOxGCxeDjKf6791Vy/MfHYx3QeB4Ov33982gXQaypUFsJH0w4+dsa3R73Upk2b+PDDD1m6dClms5l//etfvPvuu0ybNo3TTz+de+65h+rqai688EJSUlJ47LHHeOqpp/jmm28AmD17Nv7+/vzxxx/U1tYyePBgxo4dC8Dq1avZsGEDUVFRDB48mKVLl9K3b18uv/xy5s+fT1JSElOmTGmI5eGHH2bUqFG8/vrrlJSU0L9/f0aPHs0rr7yCt7c369atY926dfTu3btRX8prr72WadOmcfHFF/P6669z/fXX88UXX/DAAw+wYsUKXnjhBdLT09mwYQNr1qwBYObMmYwbN467774bl8tFVVVVo95LCCGEEK2Pcrup+vVXij/8iPJ588DpRDOZsHbtii01BVtqiqdDbHLtL7k+webNm8fKlSvp168foI8Sh4WFAfCf//yHfv36YbVaee655w57/o8//si6dev45JNPACgtLWXbtm1YLBb69+9PTEwMAGlpaaSnp+Pr60vHjh3p1KkTABdeeCGzZ89uuNZXX33FU089BUBNTQ179uxh0aJFXH+9/stEjx496NGjR6Pubfny5Q0j4xdddBG33377Mc/p168fl1xyCQ6HgzPPPJO0tLRGvZcQQgghWhelFOmTz6VmwwaM/v4EXXghAeeei1dCR0+H1qzaX3J9jJHmox7vE3zc5yuluPjii3n00UcP2VdUVERFRQUOh4Oamhp8fHwOe/7zzz/PuHHjDtq+YMECvLy8Gl4bjUacTicAmqYdMZZPP/2ULl26HLLvSOccj8ZcY9iwYSxatIhvv/2Wiy66iNtuu41p06Yd8zwhhBBCtGxKKap+/4OKX34h7I7b0TQN/0mTCJo+Hb+xYzAckLe0ZVJz3cxOPvlkPvnkE/Ly8gA9od69ezcAV1xxBQ8++CBTp07ljjvuAMDPz4/y8vKG88eNG8dLL72Ew+EAYOvWrVRWVh7x/bp27cquXbvYsWMHAO+///5B13r++ecbarNXr14N6Anvu+++C8D69etZt25do+5t0KBBfPDBBwC8++67DBky5JBj/no/u3fvJiwsjMsvv5xLL72UVatWNeq9hBBCCNEyuUpKKJwzh52nTGTPxRdT8tlnOLKyAQi6cCr+p53abhJraI8j1ydYt27deOihhxg7dixutxuz2cyLL77IwoULMZlMXHDBBbhcLgYNGsT8+fMZOnQoJpOJnj17Mn36dG644QbS09Pp3bs3SilCQ0P54osvjvh+VquV2bNnM3HiREJCQhgyZAjr168H4P/+7/+48cYb6dGjB0op4uPj+eabb7j66quZMWMGPXr0IC0tjf79+zfq3p577jkuueQSnnzySUJDQ3njjTcOOSY4OJjBgweTkpLChAkTSElJ4cknn8RsNuPr68tbb731t76uQgghhPC86jVr2D3tYlRdHba0NCIfexT7+PGtrn1eU9Ja4prsf1ffvn3VX/szb9q0ieTkZA9FJNo6+f4SQgjRnrgqKij7+ms0q42ASWfirqsj/+ln8J90JtbDlJ22VZqmrVRK9T3cPhm5FkIIIYQQR1WzcSPFH3xI6TffoKqq8BszmoBJZ2KwWAi/8w5Ph9eiSHIthBBCCCGOKPexxymaMwfNasU+8RQCzzsPa0rba6HXVCS5FkIIIYQQDWp37qLkww8ImjYNc3Q0viNHYo6Kwv/MMzDa7Z4Or8WT5FoIIYQQop1TDgfl8+ZT/MEHVP36K5jNWHv0wD86Gp8B/fEZ0LhmB0KSayGEEEKIds1dV8eO8eNxZudgjooi9KabCDj7LEwhIZ4OrVWS5FoIIYQQoh1RbjeVy5ZTtXIFYTfcgMFiIeiCC7AkJuI7bBia0ejpEFs1WUSmmWVkZDBy5EiSk5Pp3r07//3vfxv2PfXUU3Tt2pWUlBR69uzZ0PM5Pj6egoKChuMWLFjAqaeeCsCcOXPQNI158+Y17P/888/RNK1hiXQhhBBCiL9ylZRQ+Pob7JgwgYzLLqPkw49wlZQAEHzZZfiNHCmJdROQketmZjKZmDlzJr1796a8vJw+ffowZswYFi1axE8//cTvv/+O3W6ntLT0qIvDHCg1NZX333+fk08+GYAPPviAnj17NuNdCCGEEKI1q1iylMxrrkHV1mLr3ZvQa6/Fb9w4DBaLp0NrcyS5bmaRkZFERkYC+lLgycnJZGVl8cgjj/DLL79gr5916+/vz8UXX9yoaw4dOpTFixfjcDiora1l+/btpKWlNdctCCGEEKKVcdfUUPbd9xgDA/AbORJbj1QCzj6LgClT2tViL57Q7pLrGT/MOOYxw2OGMz1lesPxZySdwZlJZ1JcU8zNC24+6Ng3xh+65PeRpKens3r1avr37095eTmJiYnHFfs+mqYxevRo5s6dS2lpKaeffjq7du36W9cSQgghRNtRt2cPxe9/QMlnn+EuLcV+yin4jRyJ0W4n4j//8XR47UK7S649paKigrPPPptnn30WTdPQNO2Ixx5u31+3nXfeeTz33HOUlpYyc+ZMHnnkkSaPWQghhBCtR+6jj1H05ptgMuE3ejSB55+Pd/9+ng6r3Wl3yfXxjDT/9fhAa+Bxnw/gcDg4++yzmTp1KmeddRYAPj4+7Ny5k4SEhEOODw4Opri4mJD6FjhFRUUNf96nf//+rF+/HpvNRufOnY87JiGEEEK0bs7iYko//ZSAc8/FaLdj69WLELsfAedMxhwe5unw2i3pFtLMlFJceumlJCcnc/PN+0tK7rrrLq655hrKysoAKCsrY/bs2QCMGDGCt99+GwCXy8U777zDyJEjD7n2o48+KiPWQgghRDtTvW4d2XfcyfbhI8h7aiaVS5YAYB8/jtBrrpHE2sPa3cj1ibZ06VLefvttUlNTGyYdPvLII1x99dVUVFTQr18/zGYzZrOZW265BYD/+7//4+qrr6Znz54opRg/fjwXXnjhIdeeMGHCibwVIYQQQniQu7qa3dMupubPPzF4exNwztkEnHceVvkEu0XRlFKejqHJ9O3bV61YseKgbZs2bSI5OdlDEYm2Tr6/hBBCNKe6zCyqV6/G/zR9vYuc//sPXl264H/mGRh9fT0cXfuladpKpVTfw+2TkWshhBBCiBZEud1ULl9O8bvvUbFgAZrZjO+I4Rj9/Ih88AFPhyeOQZJrIYQQQogWomrVanLuvpu6XbswBgURfPnlBE45F6Ofn6dDE40kybUQQgghhAfV7tiBcjqxdumCOTwMo78/UY8/ht+ECbKCYiskybUQQgghxAmmXC4qFiyg6J13qFr+K74jRhD78kuYo6OJ/+B9T4cn/gFJroUQQgghTqCSTz6hYNZLOLKzMUVGEnrTTQRMPsfTYYkmIsm1EEIIIUQzq9m8Ga+EBDSLBWdRMeaYGMLuvAO/UaPQTJKOtSWyiMwJYDQaSUtLIyUlhcmTJ1NVVXXEYxcsWMCyZcsaXt9333089dRTR73+9OnT+eSTT5osXiGEEEL8c8rhoOyHH0ifeiG7zpxE2dwfAQi+7FI6vPUm9rFjJbFugyS5PgFsNhtr1qxh/fr1WCwWXn755SMe+9fkWgghhBCti6qro+DlV9g+egxZN96EMzeXsNtvx3fYUAA0g6RfbZn87Z5gQ4cOZfv27Xz99dcMGDCAXr16MXr0aHJzc0lPT+fll1/mmWeeIS0tjcWLFx907v/+9z/69etHz549Ofvssw87Av5///d/TJ8+HbfbfaJuSQghhBCAIy9P/4PZTNm33+CVmEDMrFkkzv2B4EtmYPT392yA4oRod59F7L5o2iHb/CaMJ+iCC3BXV5NxxZWH7PefNImAsybhLC4m6/obDtrX4e23Gv3eTqeT77//nvHjxzNkyBB+/fVXNE3j1Vdf5YknnmDmzJlcddVV+Pr6cuuttwIwb968hvPPOussLr/8cgDuueceXnvtNa677rqG/bfffjulpaW88cYbaJrW6LiEEEII8fcoh4PyefMoevsdardsIWnBAoy+PsR/+CEGb29Phyc8oN0l155QXV1NWloaoI9cX3rppWzZsoUpU6aQk5NDXV0dHTt2POZ11q9fzz333ENJSQkVFRWMGzeuYd+DDz7IgAEDmD17dnPdhhBCCCHquUpKKP7wI4rffx/n3r2YY2MJueYaNIM+uCWJdfvV7pLro400G2y2o+43BQYe10j1Pvtqrg903XXXcfPNN3P66aezYMEC7rvvvmNeZ/r06XzxxRf07NmTOXPmsGDBgoZ9/fr1Y+XKlRQVFREUFHTcMQohhBDi2JTDgWY2U5eZRf4zz+AzaCAR//kPvsOHoRmNng5PtADtLrluKUpLS4mOjgbgzTffbNju5+dHWVnZYc8pLy8nMjISh8PBu+++23A+wPjx4xk3bhwTJ07kxx9/xE+WSRVCCCGahHK5KJ83j+K338EcHU3UY49iS+lO4k8/YomN9XR4ooWRCY0ect999zF58mSGDh1KSEhIw/bTTjuNzz///LATGveVfowZM4auXbsecs3Jkydz+eWXc/rpp1NdXd3s9yCEEEK0Za7SUgpfe50dY8aSdf0NOLKysHbr1rBfEmtxOJpSytMxNJm+ffuqFStWHLRt06ZNJCcneygi0dbJ95cQQrRduY89TtGcOXj360fgtIv0BV+k9EMAmqatVEr1Pdy+Zh251jRtvKZpWzRN265p2p2H2T9V07R19Y9lmqb1PGBfuqZpf2qatkbTtBV/PVcIIYQQoqkot5uKxYvZc9nlVP76KwBB0y+m4+ef0eHtt7CPGSOJtWiUZqu51jTNCLwIjAEygT80TftKKbXxgMN2AcOVUsWapk0AZgMDDtg/UilV0FwxCiGEEKJ9c1dVUfrllxS99TZ1u3ZhDA3BVVICgDkiAnNEhGcDFK1Oc05o7A9sV0rtBNA07QPgDKAhuVZKHbgU4a9ATDPGI4QQQgjRQCnFrsnnUrdjB9aUFKKefAL7uHFoFounQxOtWHMm19FAxgGvMzl4VPqvLgW+P+C1An7UNE0BryilpIGzEEIIIf42pRTVq1dT+uVXRPzfPWgmE6E3XI8pJARbr16yAJtoEs2ZXB/uO/Swsyc1TRuJnlwPOWDzYKVUtqZpYcBPmqZtVkotOsy5VwBXAMTFxf3zqIUQQgjRpqi6Osrm/kjRm29Ss349BrudwAsuwNqlM/axYz0dnmhjmjO5zgQO7FETA2T/9SBN03oArwITlFKF+7YrpbLrn/M0TfscvczkkOS6fkR7NujdQpryBoQQQgjRutVlZrL7gqk48/KwxMcTce9/8D/jDFlBUTSb5kyu/wA6aZrWEcgCzgMuOPAATdPigM+Ai5RSWw/Y7gMYlFLl9X8eCzzQjLE2i8LCQk4++WQA9u7di9FoJDQ0FIDff/8dywE1XYsXL+aqq67CbDbz0ksvUVxczCmnnOKRuIUQQojWrHbnTup27sRv9GjMUVH4DBmCfdxYfIYORTPIEh+ieTVbcq2Ucmqadi0wFzACryulNmiadlX9/peB/wDBwKz6Oidnfc/AcODz+m0m4D2l1A/NFWtzCQ4Oblj2/L777sPX15dbb731sMe+++673HrrrcyYMYM5c+awYsUKSa6FEEKIRlJKUblsGUVvvknlosWYwsLwHTECzWQi6pGHPR2eaEeadflzpdR3wHd/2fbyAX++DLjsMOftBHr+dXtbMG/ePG699VacTif9+vXjpZde4u233+ajjz5i7ty5/PjjjyxdupTq6mqWLFnCXXfdRUREBDfccAMAmqaxaNEiWd5cCCGEqFf566/kPvwItdu2YQwJIeT66wg87zw0U7OmOUIcVrv7rvt85qpDtiX1CSN1RAyOOhffPL/2kP1dB0aSPCiS6oo6fnhl/UH7Jt3Su9HvXVNTw/Tp05k3bx6dO3dm2rRpvPTSS9x4440sWbKEU089lXPOOadh5PqFF14A9CXRX3zxRQYPHkxFRQVWq/U471oIIYRoW5wFBSiXG3N4GJqXFxiNRD76KPaJp2CQVnrCg6Tw6ARyuVx07NiRzp07A3DxxRezaNEhczQPMXjwYG6++Waee+45SkpKMMlv4kIIIdqpmq1byb77braPHEVB/SCUd69edPz8MwImnSmJtfC4dpelHW2k2WwxHnW/zddyXCPVf+Xj4/O3zrvzzjuZOHEi3333HSeddBI///wzXbt2/dtxCCGEEK1N5bJlFL72OpVLl6JZrfifczZB06Y17Jce1aKlaHfJtSfV1NSQnp7O9u3bSUpK4u2332b48OGHHOfn50d5eXnD6x07dpCamkpqairLly9n8+bNklwLIYRo89x1dWhmM5qmUfbTT9Ru3UroTTcRcO5kTIGBng5PiMOSspATyGq18sYbbzB58mRSU1MxGAxcddVVhxw3cuRINm7cSFpaGh9++CHPPvssKSkp9OzZE5vNxoQJEzwQvRBCCHFiOIuKyH/hRbaPGEn1Kn2uVNiNN5I072dCrrxCEmvRomlKtZ11V/r27atWrFhx0LZNmzaRnJzsoYhEWyffX0II0XRqd+ygaM6blH75JaquDt8RIwi94Xqs8nNWtDCapq2sbx99CCkLEUIIIYTHKYeD3RdNw11Zif+kSQRdPA2vhARPhyXEcZPkWgghhBAnnHI4KPv+e8p/+onoZ59FM5uJfvYZvJKSMAUFeTo8If42Sa6FEEIIccK4ysoo+egjit5+B2duLpbERJy5ufoy5f37ezo8If4xSa6FEEIIcULUbNnK7vPPx11VhfdJJxH5wP34DB2KZpD+CqLtkORaCCGEEM2m+s/1OHKysY8di1dSIgGTz8H/jDOwduvm6dCEaBaSXAshhBCiSSm3m4qFCyl6/Q2q/vgDc1wcfqNHoxmNhN91l6fDE6JZyecwJ8DDDz9M9+7d6dGjB2lpafz2228APPvss1RVVTXJe6Snp5OSkvKPrzNnzhyys7Ob7Li/evbZZ3nrrbf+TmhN4r777uOpp546rnO++eYb7r333maKSAgh2pbKZcvYeeppZF79L+oyMwm74w46fvaplH6IdkO+05vZ8uXL+eabb1i1ahXr1q3j559/JjY2Fmja5LqpNGdy7XQ6ef3117ngggv+bngnnNPpZOLEiXz11Vct7u9KCCFaCldJCc7CQgA0iwXNy4uoJ58g6ce5BM+YjtHX18MRCnHiSHLdzHJycggJCcHLywuAkJAQoqKieO6558jOzmbkyJGMHDkSgB9//JGBAwfSu3dvJk+eTEVFBQAPPPAA/fr1IyUlhSuuuIJ9C/+sXLmSnj17MnDgQF588cWG9xw6dChr1qxpeD148GDWrVt3UFwul4vp06eTkpJCamoqzzzzDJ988gkrVqxg6tSppKWlUV1dfdj3PtxxK1euZPjw4fTp04dx48aRk5NzyNdi/vz59O7dG5PJxKZNm+h/wKzw9PR0evTocdT7fe655+jWrRs9evTgvPPOA6CiooIZM2aQmppKjx49+PTTTwHwPeAH+SeffML06dMPied///sf/fr1o2fPnpx99tkNyfP06dO5+eabGTlyJHfccQeapjFixAi++eabY/11CyFEu1KXmcnehx5m28hRFLw4CwBbnz50/OxT/E87Dc1s9nCEQniAUqrNPPr06aP+auPGjQe9/uC+O9Sfv/yklFLK6XCoD+67Q21YNF8ppVRdTbX64L471KalC5VSStVUVqgP7rtDbf11qVJKqcrSEvXBfXeo7St+VUopVVFcdMj7/VV5ebnq2bOn6tSpk7r66qvVggULGvZ16NBB5efnK6WUys/PV0OHDlUVFRVKKaUee+wxdf/99yullCosLGw458ILL1RfffWVUkqp1NTUhuvdeuutqnv37koppebMmaNuuOEGpZRSW7ZsUYf7uqxYsUKNHj264XVxcbFSSqnhw4erP/74o2H7kd77wOPq6urUwIEDVV5enlJKqQ8++EDNmDHjkPf8z3/+o5577rmG1z179lQ7duxouN8HH3zwqO8ZGRmpampqDor39ttvb7hXpZQqKtL/Tnx8fBq2ffzxx+riiy9WSil17733qieffFIppVRBQUHDMXfffXdDbBdffLGaOHGicjqdDfvfeecdde211x5yT3/9/hJCiPag6s/1KvOmm9TG5G5qY0qqyrrjTlW9eYunwxLihAFWqCPkozJy3cx8fX1ZuXIls2fPJjQ0lClTpjBnzpxDjvv111/ZuHEjgwcPJi0tjTfffJPdu3cD8MsvvzBgwABSU1OZP38+GzZsoLS0lJKSEoYPHw7ARRdd1HCtyZMn88033+BwOHj99dcP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VU769mu96r03XeV1n7yvV7z5X1f5h7cW6CWv/MdV/vb5p/W3zz/tKn/++F/1wmced5Xfe/gB/eVTf3eV337w7ib737j/tibtX737Zr345edc5VfuuF4ve/VFV/mlW36lV7z5iqv8/A1X6JXvvuEqP3vNHL3mw/9prZ3X9rlr5+iNX3ystdbaZrXo/95+nd72/SKttdYNdbX6rd/cqfesXK611rq+plp/8Jff6UOb1mmtta6trNBfPPk3nbYjSWutdU15mf72+ad11v49Wmutq8tK9Yo3/6vzU5Nd5bUfvev696ouK9VbF32hy/LzXOXdPy7VVSXFzuNVlOvDm9brmopy1/ky9+zS9TXVWmut66qrdH5airbU17niLS/I1zarRWuttdVi0XXVVdpht7t+35/uGyFOJ0CSPk4+2u0JcUd+SXLdPraCI7ph36YT1vv7j+/pwf8brBds/k6v+uCgfuXelbquytIFEQohRMc4OuFrqK3RDXW1rnJlcZGuLit1lYsy03V5Qb6rnLV/jy7OOuIqJ2/ZqPPTUlzlPT8u0zmHDrjKWxZ+ro/s2+08r92u13zwts7YtUNr7Uyul732oitZttTV6UXPPqlTkjZrrbWuq6rSn/3zLzp5q/O1ubqsVL/38G/04c3rtdZaVxQW6Dfuu81VLsnJ1i/deo2rXJCeqp/51Sx9eMsGrbXzjc78uTNdb36y9u/R8+fO1Bm7nfFk7N6h58+d6UrWU7dv0fPnztS5hw9qrbU+vGWDnj93puv3PbhhjZ4/d6Yred+3+gc9f+5MXZaXq7XWevcPS/X8uTN1RVGB1lrrXSuW6Bdvnqtrystc+1+79xZX8r77x6X6nd/P05aGeq211ntXrdAfP/qQtttsWmut96/5UX/973+6ru2B9av10gXPu8qHNq3Tqz9421VOSdqkN3/9maucviNJ71rx8xu7I3t36YMb1rrKOYf26/Rd213lgvRUnZt80FUuyclq8m9fUVSoK4uLXOXaqkpdV13lKtusFlfs4vQiybVolZJ/3affnjFNb3/rhePWqbHU66FvTNPD37hAW202vWlhql7z8aEujFIIIURb/fRmwm636YbaGm2zWrXWzp7miqICVzLbUFerC9JTXW82aqsq9ZF9u3V9jfPTzKrSEn14ywZXMlxekKf3rFzuSiiLs47opG+/du3PT03W6z9939U+68Be/cPbC1zHT9+RpBe//Kzr/Ic2rdNfPf2YK769q1bojx75g6snfPviRfrdh+53/V6bvvxEv/Xbu1zl1R+8rV+799eu8vLXX9L/vf06V3nxy8/pV++52VX+9vmn9Rv33+YqL3zmcf32g3e7yl8+9Xf97h9+Pt/nj/9Vf/CnB13lT/7+R/3RI39wlT/8y//pTx/7s6v83sO/0V88+bcm5W+e+1eT+ste+/lTkE/+/ke9+v23XOUvnnhEb/ryk5/jm/+461MOrbX+7oV/uz7l0Frrpa++oA9t/PnNwo//e831xs1ut+l1n7yvs/Y53zjZrFa9ddEXOi/lsNbaeS/sWrFEFx3J0FprbWmo1wc3rHF9ymFpqNfpO5J0ZUmRq5xzaL/rUw5rQ4Muzsp0/VvbrBZdWVykrQ0NzvPbnPee3e58s3Gqf6ohybVoldTbb9bvzjpf7/5h6XHr/GHJa3rw/wbr59Z/1XWBCSGEECfp6ATO2tDgSv60dg57+SlZ1No5xKkkJ9tVLs7KdA2x0drZ8591YK+rnLFrh07fuc1VPrxpvetTBq2dn2Ic3LDGVU769iu9d9UKV3ndJ+/rXSuWuMo/vLVA71j6nav83Yvz9bbvF7rKXzzxiN76zZeu8vt/+q3esvBzV/n1+2519dQ7HA794s1zXcm5taFBz58701Wur6nR8+fO1Fsbh2TVVJTr+XNn6u2Lncl7ZUmRnj93pmsIV3lBnp4/d6Yr/pKcLD1/7ky9v3HIV2Fmup4/d6ZrCFNeymE9f+5MnZLkvB7ZB/fr+XNnuq5X5p5dev7cmfrI3l3Oa7l7h37x5rmuTwrSd23Xr959sy7MTHeWd27Tbz94ty7NzXaVjx4e1tVaSq6Vc//pYfTo0TopKam7wzglaYuFw+Mn4DdrFuF/f7TZOhX1tUz58ELcCGTzTV9RmFFN73g/lOp5i8YIIYQQoqmfcj6lFFprLHV1GE0mTG5uOBx2asrKcPfyws3TC7vNRlleDt6BQXj6+GKzWCjMSCUgLBwv/wAs9XXkHNxPaHQsPkHB1NdUk7l7B30SB+IbHEJtZQUpWzYSO2wkfqG9qCot5tD6NSSOn4xfaC8qCvPZu+oHBp9zPv69wijJzmLXiu8ZdfGl+PcKozAjje2LFzHxymvxC+1F7uEDJH37FefceDt+IaEc2buLjN07mHrtzd1yLZVS27TWzc79IMm1AKBmyaekPfgosc89g++FM5qtM+/b51ld8ga/OesZZgaN44unt3HezQMZMD68a4MVQgghhOhGLSXXMs+1ACDnqw9YcVYs+e7N90IXVVeyuvBjvB0DuXX0Bexbk4PZ3Uj88NAujlQIIYQQoueSea4FACHRRQxSvvQe2vzs1h9vyaOuYAaPzppOXbWF5G2FDJwQjpuH3EJCCCGEED+RnmsBFTkEWfdx4Q0X4xsUcuzuWiuvr8ngnD4zuGzgOJa/tR/t0Aw+J6IbghVCCCGE6LkkuRYUvv88aYeC0bHTmt1//5JnqfNcxYPTE6mttFBRWMvZ1/YnuI9PF0cqhBBCCNGzyWf6Z7iGLcvZ/ulq9vUexG3mMPx/sb+wsp6kvB1E9/FlUB/n3qsfGYfZTZbxFUIIIYT4Jem5PoNZU3Zx5O77iamqZPIF0/HvFXZMnVdWp1KfcyP/7PcXVn14CLvNIYm1EEIIIcRxSM/1GcpelMPmO28nyArxLz+Fx5TZx9TZkpXMB0m7+NXAgez//Age3mZsVgdGk7wnE0IIIYRojmRJZ6jsD//L5uBQSude3Gxi/cy6L7h1+fV4Ry6gf3Id2qGZec9Q3D3l/ZgQQgghxPFIpnSGinngcS7t9zmxF1zaZHtZbTU3LvwLGZYfcNfR3F/xR6qLG5h13zACwry6J1ghhBBCiFNEp/ZcK6UuUkodUkqlKKUebma/Ukq90Lh/t1JqZGvbipOz/o7LyXj9CQASLr4So+nn91eLD29j2keXkWH5gYGes1l2+afUZdmZfFU/ogYGdVfIQgghhBCnjE7ruVZKGYGXgelANrBVKbVIa73/qGozgH6NX+OAV4BxrWwrWknb7dTv3UvxZ5+wq6iGwtXrib395/0Oh4MHFr/ElqwvGVVwNqPUFO7+63kopbj8dyMJiZIp94QQQgghWqMzh4WMBVK01mkASqmPgTnA0QnyHOBdrbUGNimlApRS4UBsK9qKltitkLGOnQteZnNKJZMOZmM0GrlgxnTUb+5n+YFs9ufUsSF1BfbyfURVxnJ9yV8wKANxw0OxNthx8zARGu3b3b+JEEIIIcQpozOT6wgg66hyNs7e6RPViWhl2x7hX4sP4vnuv3AzhONmjEBrTY11G3YvB9vG7cNcb2TExkF4GKMxmeLR2kaNZR3Kx5OkibcQWHaI+K0/4G6MxmzshUNbqLXupiGgnl0jkgku9CVhXyyepr4YjZE4dDW1liQcQX7sGH09MRkrCTl8AA9TAiZDIHZHNXW2A1RElZGVsJ/Yhhh8PGL5YepV1HjHY7M24PmvXXznV0ymozfjvf2Zmn05DrODEefHMPScSPxCPLv7sgohhBBCnJI6M7lWzWzTrazTmrbOAyh1B3AHQHR0dFvi6xC1Fhse2oEDI1p5otFo7OAwUKes2JUDjR2HMqAxufYrh4PKOivudVY0drQyNbZXznJje6u2O8sYne210Xl8u53KOis2i6WxvZuzvbKicWCsciPFFE1Wv1jGuU3DpAMwYsTs4UmtbxXzJo3kwvGDcUdRX23FO9Ado1EmjxFCCCGEaA/lHJHRCQdWagLwqNb6wsbyHwG01k8eVedVYJXW+qPG8iHgHJzDQlps25zRo0frpKSkDv9dhBBCCCGE+IlSapvWenRz+zqzq3Ir0E8pFaeUcgOuBhb9os4i4MbGWUPGAxVa67xWthVCCCGEEKJH6bRhIVprm1JqHrAUMAJvaa33KaXuaty/APgeuBhIAWqBW1pq21mxCiGEEEII0RE6bVhId5BhIUIIIYQQorN117AQIYQQQgghziiSXAshhBBCCNFBJLkWQgghhBCig0hyLYQQQgghRAeR5FoIIYQQQogOIsm1EEIIIYQQHUSSayGEEEIIITqIJNdCCCGEEEJ0EEmuhRBCCCGE6CCSXAshhBBCCNFBJLkWQgghhBCig0hyLYQQQgghRAeR5FoIIYQQQogOIsm1EEIIIYQQHUSSayGEEEIIITqI0lp3dwwdRilVBGR20elCgOIuOtfpQq5Z28k1azu5Zm0j16vt5Jq1nVyztpNr1nZdec1itNahze04rZLrrqSUStJaj+7uOE4lcs3aTq5Z28k1axu5Xm0n16zt5Jq1nVyztusp10yGhQghhBBCCNFBJLkWQgghhBCig0hyffJe6+4ATkFyzdpOrlnbyTVrG7lebSfXrO3kmrWdXLO26xHXTMZcCyGEEEII0UGk51oIIYQQQogOIsl1GymlLlJKHVJKpSilHu7ueHoipVSUUmqlUuqAUmqfUuqBxu2PKqVylFI7G78u7u5YexKlVIZSak/jtUlq3BaklFqulEpu/B7Y3XH2FEqp/kfdSzuVUpVKqd/IfdaUUuotpVShUmrvUduOe18ppf7Y+Pp2SCl1YfdE3b2Oc83+rZQ6qJTarZT6SikV0Lg9VilVd9T9tqDbAu9Gx7lmx/1blPvsuNfsk6OuV4ZSamfj9jP+Pmsht+hxr2cyLKQNlFJG4DAwHcgGtgLXaK33d2tgPYxSKhwI11pvV0r5AtuAS4G5QLXWen53xtdTKaUygNFa6+Kjtj0NlGqt/9X4Zi5Qa/1Qd8XYUzX+beYA44BbkPvMRSk1FagG3tVaD27c1ux9pZQaBHwEjAX6ACuARK21vZvC7xbHuWYXAD9qrW1KqacAGq9ZLPDtT/XOVMe5Zo/SzN+i3GdOzV2zX+x/BqjQWv9D7rMWc4ub6WGvZ9Jz3TZjgRStdZrW2gJ8DMzp5ph6HK11ntZ6e+PPVcABIKJ7ozplzQHeafz5HZwvJOJY5wGpWuuuWkTqlKG1XgOU/mLz8e6rOcDHWusGrXU6kILzde+M0tw101ov01rbGoubgMguD6wHO859djxyn9HyNVNKKZwdUh91aVA9WAu5RY97PZPkum0igKyjytlI0tiixnfbI4DNjZvmNX6s+pYMcTiGBpYppbYppe5o3Bamtc4D5wsL0KvbouvZrqbpf0Jyn7XsePeVvMa1zq+BxUeV45RSO5RSq5VSU7orqB6qub9Fuc9ObApQoLVOPmqb3GeNfpFb9LjXM0mu20Y1s03G1RyHUsoH+AL4jda6EngFSACGA3nAM90XXY80SWs9EpgB3Nv4kaE4AaWUGzAb+Kxxk9xnJ09e405AKfVnwAZ80LgpD4jWWo8AHgQ+VEr5dVd8Pczx/hblPjuxa2jaYSD3WaNmcovjVm1mW5fcZ5Jct002EHVUORLI7aZYejSllBnnzf+B1vpLAK11gdbarrV2AK9zBn4M2BKtdW7j90LgK5zXp6BxnNlP480Kuy/CHmsGsF1rXQByn7XS8e4reY1rgVLqJuAS4Drd+MBS40fOJY0/bwNSgcTui7LnaOFvUe6zFiilTMDlwCc/bZP7zKm53IIe+HomyXXbbAX6KaXiGnvLrgYWdXNMPU7jWLE3gQNa62eP2h5+VLXLgL2/bHumUkp5Nz6ggVLKG7gA5/VZBNzUWO0mYGH3RNijNenhkfusVY53Xy0CrlZKuSul4oB+wJZuiK/HUUpdBDwEzNZa1x61PbTxgVqUUvE4r1la90TZs7Twtyj3WcvOBw5qrbN/2iD32fFzC3rg65mpK05yumh8SnwesBQwAm9prfd1c1g90STgBmDPT9MIAX8CrlFKDcf5sUwGcGd3BNdDhQFfOV87MAEfaq2XKKW2Ap8qpW4FjgBXdWOMPY5Sygvn7D1H30tPy332M6XUR8A5QIhSKhv4G/AvmrmvtNb7lFKfAvtxDn2490ybwQGOe83+CLgDyxv/Tjdpre8CpgL/UErZADtwl9a6tQ/2nTaOc83Oae5vUe4zp+aumdb6TY59hgTkPoPj5xY97vVMpuITQgghhBCig8iwECGEEEIIITqIJNdCCCGEEEJ0EEmuhRBCCCGE6CCSXAshhBBCCNFBJLkWQgghhBCig0hyLYQQQgghRAeR5FoIIU4xSqkApdQ9R5X7KKU+76RzXaqUeqSF/UOUUv/rjHMLIcSpSOa5FkKIU4xSKhb4Vms9uAvOtQHnqoTFLdRZAfxaa32ks+MRQoieTnquhRDi1PMvIEEptVMp9W+lVKxSai+AUupmpdTXSqlvlFLpSql5SqkHlVI7lFKblFJBjfUSlFJLlFLblFJrlVIDfnkSpVQi0PBTYq2UukoptVcptUspteaoqt/gXFVOCCHOeJJcCyHEqedhIFVrPVxr/ftm9g8GrgXGAo8DtVrrEcBG4MbGOq8B92mtRwH/B/y3meNMArYfVX4EuFBrPQyYfdT2JGBKO34fIYQ4bZi6OwAhhBAdbqXWugqoUkpV4OxZBtgDDFVK+QATgc+UUj+1cW/mOOFA0VHl9cD/lFKfAl8etb0Q6NOB8QshxClLkmshhDj9NBz1s+OosgPn674BKNdaDz/BceoA/58KWuu7lFLjgJnATqXUcK11CeDRWFcIIc54MixECCFOPVWA78k21lpXAulKqasAlNOwZqoeAPr+VFBKJWitN2utHwGKgajGXYnA3pONRwghTieSXAshxCmmsbd4fePDhf8+ycNcB9yqlNoF7APmNFNnDTBC/Tx25N9KqT2ND0+uAXY1bp8GfHeScQghxGlFpuITQghxXEqp54FvtNYrjrPfHVgNTNZa27o0OCGE6IGk51oIIURLngC8WtgfDTwsibUQQjhJz7UQQgghhBAdRHquhRBCCCGE6CCSXAshhBBCCNFBJLkWQgghhBCig0hyLYQQQgghRAeR5FoIIYQQQogO8v/6Iqfuk+IR8AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pkm_tcxm = pk_models.TCXM(t, aif, upsample_factor=10)\n", + "pkm_etofts = pk_models.ExtendedTofts(t, aif, upsample_factor=10)\n", + "pkm_tcum = pk_models.TCUM(t, aif, upsample_factor=10)\n", + "pkm_patlak = pk_models.Patlak(t, aif, upsample_factor=10)\n", + "pkm_tofts = pk_models.Tofts(t, aif, upsample_factor=10)\n", + "pkm_steady_state = pk_models.SteadyStateVp(t, aif, upsample_factor=10)\n", + "\n", + "pk_pars = {'vp': 0.01, 'ps': 5e-2, 've': 0.2, 'fp': 10, 'ktrans': 5e-2}\n", + "# N.B. unnecessary parameters are ignored.\n", + "\n", + "C_t_tcxm, _, _ = pkm_tcxm.conc(**pk_pars)\n", + "C_t_etofts, _, _ = pkm_etofts.conc(**pk_pars)\n", + "C_t_tcum, _, _ = pkm_tcum.conc(**pk_pars)\n", + "C_t_patlak, _, _ = pkm_patlak.conc(**pk_pars)\n", + "C_t_tofts, _, _ = pkm_tofts.conc(**pk_pars)\n", + "C_t_steady_state, _, _ = pkm_steady_state.conc(**pk_pars)\n", + "\n", + "plt.figure(0, figsize=(12,8))\n", + "plt.plot(t, C_t_tcxm, '-', label='2CXM')\n", + "plt.plot(t, C_t_etofts, '-.', label='extended Tofts')\n", + "plt.plot(t, C_t_tcum, '-.', label='2CUM')\n", + "plt.plot(t, C_t_patlak, '--', label='Patlak')\n", + "plt.plot(t, C_t_tofts, '--', label='Tofts')\n", + "plt.plot(t, C_t_steady_state, ':', label='Steady-state (vascular)')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('tissue concentration (mM)');" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_relaxivity_module.ipynb b/demo/demo_relaxivity_module.ipynb new file mode 100644 index 0000000..9315c38 --- /dev/null +++ b/demo/demo_relaxivity_module.ipynb @@ -0,0 +1,116 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fifty-passport", + "metadata": {}, + "source": [ + "## Relaxivity module demo" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "internal-arbor", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import relaxivity\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "arabic-latvia", + "metadata": {}, + "source": [ + "### The CRModel class\n", + "This is an abstract base class. Subclasses represent specific relaxivity models. \n", + "The main function of these objects is to return relaxation rates as a function of contrast agent concentration. \n", + "At the moment, only the linear model is implemented:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4080ceab-24f8-4b2e-b57d-816474887489", + "metadata": {}, + "outputs": [], + "source": [ + "cr_model = relaxivity.CRLinear(r1=5.0, r2=7.1)" + ] + }, + { + "cell_type": "markdown", + "id": "52762d06-81e5-4153-88f5-5d0e827d7f82", + "metadata": {}, + "source": [ + "Now we can use the R1 and R2 methods to calculate the relaxation rates for a given concentration and pre-contrast relaxation rate values:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a3c01c12-fb5e-4aed-b9fb-b882270ba27f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 1. 6. 11. 16. 21. 26.]\n" + ] + } + ], + "source": [ + "C_t = np.array([0, 1, 2, 3, 4, 5])\n", + "R10 = 1\n", + "R1_post = cr_model.R1(R10, C_t)\n", + "print(R1_post)" + ] + }, + { + "cell_type": "markdown", + "id": "4a7c1681-7e9d-49b2-9474-56f86a8f25ef", + "metadata": {}, + "source": [ + "Additional subclasses could be implemented to represent other concentration-relaxation relationships, e.g. quadratic." + ] + } + ], + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_signal_models.ipynb b/demo/demo_signal_models.ipynb new file mode 100644 index 0000000..5c4f6dd --- /dev/null +++ b/demo/demo_signal_models.ipynb @@ -0,0 +1,108 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "eb332c7d-4589-47da-81d0-e2697ee70254", + "metadata": {}, + "source": [ + "## Signal models demo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "42671502-6096-4107-8c21-3f876b950a66", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import signal_models\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "33acaa3b-10e0-454f-b62b-6a2cb5b1d0f4", + "metadata": {}, + "source": [ + "### The SignalModel Class\n", + "This abstract base class represents different signal models i.e. conversion between relaxation parameters and signal intensity for a given pulse sequence. The model is defined by specifying the sequence parameters. At present, only the SPGR signal model is implemented:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "c2e14ed8-c6f6-4e79-9fe0-fbc9b323d156", + "metadata": {}, + "outputs": [], + "source": [ + "sm = signal_models.SPGR(tr=5e-3, fa=15, te=1.5e-3)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "25cb9206-ef8d-4d4f-bf82-779d9463530a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'signal')" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "R1_range = np.linspace(0.5, 50, 100)\n", + "s = sm.R_to_s(s0=100, R1=R1_range, R2s=0, k_fa=1)\n", + "\n", + "plt.plot(R1_range, s)\n", + "plt.xlabel('R1 (/s)')\n", + "plt.ylabel('signal')" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_simulation.ipynb b/demo/demo_simulation.ipynb new file mode 100644 index 0000000..a84b43f --- /dev/null +++ b/demo/demo_simulation.ipynb @@ -0,0 +1,239 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fifty-passport", + "metadata": {}, + "source": [ + "## Simulate and fit DCE-MRI" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "internal-arbor", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import dce_fit, relaxivity, signal_models, water_ex_models, aifs, pk_models\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "arabic-latvia", + "metadata": {}, + "source": [ + "### Simulate and fit time-concentration data" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "067501a2-7bdc-4665-93e9-d08a4aef9eb8", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 19.6 ms\n", + "parameter: value (ground truth)\n", + "vp: 0.01986 (0.02000)\n", + "ps: 0.04943 (0.05000)\n", + "ve: 0.20510 (0.20000)\n", + "fp: 52.11101 (50.00000)\n", + "delay: 5.08741 (5.00000)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# define experiment timepoints\n", + "dt = 1.\n", + "t = np.arange(0,200)*dt + dt/2\n", + "\n", + "# define ground-truth AIF, pharmacokinetic model, parameters and noise level\n", + "AIF = aifs.Parker(hct=0.42, t_start=15.)\n", + "pk_pars_ground_truth = {'vp': 0.02, 'ps': 5e-2, 've': 0.2, 'fp': 50, 'delay': 5}\n", + "pk_model_ground_truth = pk_models.TCXM(t, AIF, fixed_delay=None)\n", + "noise = 0.005\n", + "\n", + "# generate \"measured\" concentration then add noise\n", + "C_t, _c_cp, _c_e = pk_model_ground_truth.conc(**pk_pars_ground_truth)\n", + "C_t += np.random.normal(loc = 0., scale = noise, size = C_t.shape)\n", + "\n", + "# define AIF, pharmacokinetic model and starting parameters used for fitting.\n", + "PkModel = pk_models.TCXM(t, AIF, fixed_delay=None) # use ground-truth AIF to fit data, i.e. assume AIF is known accurately\n", + "pk_pars_0 = [{'vp': 0.005, 'ps': 1e-4, 've': 0.5, 'fp': 5, 'delay': 0}, \n", + " #{'vp': 0.1, 'ps': 1e-4, 've': 0.02, 'fp': 50, 'delay': 0} # optionally specify multiple sets of starting values to find global minimum \n", + " ]\n", + "%time vp_fit, ps_fit, ve_fit, fp_fit, delay_fit, C_t_fit = dce_fit.ConcToPKP(PkModel, pk_pars_0).proc(C_t)\n", + "\n", + "print(\"parameter: value (ground truth)\")\n", + "print(f\"vp: {vp_fit:.5f} ({pk_pars_ground_truth['vp']:.5f})\")\n", + "print(f\"ps: {ps_fit:.5f} ({pk_pars_ground_truth['ps']:.5f})\")\n", + "print(f\"ve: {ve_fit:.5f} ({pk_pars_ground_truth['ve']:.5f})\")\n", + "print(f\"fp: {fp_fit:.5f} ({pk_pars_ground_truth['fp']:.5f})\")\n", + "print(f\"delay: {delay_fit:.5f} ({pk_pars_ground_truth['delay']:.5f})\")\n", + "\n", + "fig, ax = plt.subplots(1,2, figsize=(10,4))\n", + "ax[0].plot(t, AIF.c_ap(t));\n", + "ax[0].set_xlabel('time (s)');\n", + "ax[0].set_title('AIF');\n", + "ax[1].plot(t, C_t, 'b.', t, C_t_fit, 'r-');\n", + "ax[1].set_xlabel('time (s)');\n", + "ax[1].set_title('tissue conc and model fit');" + ] + }, + { + "cell_type": "markdown", + "id": "fitting-assault", + "metadata": {}, + "source": [ + "### Simulate and fit in signal space" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "0595cfda-0c4a-4aa9-b1d0-3bb306718063", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wall time: 27.6 ms\n", + "parameter: value (ground truth)\n", + "vp: 0.02223 (0.02000)\n", + "ps: 0.04870 (0.05000)\n", + "ve: 0.21196 (0.20000)\n", + "fp: 9.54349 (10.00000)\n", + "delay: 3.42490 (3.00000)\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# define ground-truth (gt) properties\n", + "dt_gt = 0.1 # gt temporal resolution\n", + "AIF = aifs.Parker(hct=0.42, t_start=15.)\n", + "pk_pars_ground_truth = {'vp': 0.02, 'ps': 5e-2, 've': 0.2, 'fp': 10, 'delay': 3}\n", + "R10_tissue, R10_aif = 1./0.8, 1./1.7\n", + "hct = 0.42\n", + "\n", + "# define acquisition properties\n", + "k_tissue, k_aif = 1.0, 1.0 # relative B1+ error\n", + "tr, fa, te = 4e-3, 15, 1.5e-3\n", + "dt = 1 # experimental temporal resolution\n", + "t = np.arange(0,round(200/dt))*dt + dt/2 # measured time points\n", + "noise = 1.5\n", + "\n", + "# define ground-truth (gt) models for relaxivity, signal and pharmacokinetics\n", + "pk_model_gt = pk_models.TCXM(t, AIF, upsample_factor=round(dt/dt_gt), fixed_delay=None)\n", + "c_to_r_model_gt = relaxivity.CRLinear(r1=5.0, r2=7.1)\n", + "water_ex_model_gt = water_ex_models.FXL()\n", + "signal_model_gt = signal_models.SPGR(tr, fa, te)\n", + "\n", + "# now generate the measured AIF \n", + "c_ap = AIF.c_ap(t)\n", + "enh_aif = dce_fit.conc_to_enh(c_ap*(1-hct), 1/R10_aif, k_aif, c_to_r_model_gt, signal_model_gt)\n", + "enh_aif += np.random.normal(loc = 0., scale = noise, size = enh_aif.shape)\n", + "c_ap_meas = dce_fit.EnhToConc(c_to_r_model_gt, signal_model_gt).proc(enh_aif, 1/R10_aif, k_aif)/(1-hct)\n", + "aif_meas = aifs.PatientSpecific(t, c_ap_meas)\n", + "\n", + "# generate the measured tissue enhancement\n", + "enh = dce_fit.pkp_to_enh(pk_pars_ground_truth, hct, k_tissue, 1/R10_tissue, 1/R10_aif, pk_model_gt, c_to_r_model_gt, water_ex_model_gt, signal_model_gt)\n", + "enh += np.random.normal(loc = 0., scale = noise, size = enh.shape)\n", + "\n", + "# define models used for fitting\n", + "pk_model_fit = pk_models.TCXM(t, aif_meas, upsample_factor=3, fixed_delay=None)\n", + "c_to_r_model_fit = c_to_r_model_gt # use same model as for ground truth\n", + "water_ex_model_fit = water_ex_model_gt # use same model as for ground truth\n", + "signal_model_fit = signal_model_gt # use same model as for ground truth\n", + "k_tissue_fit = k_tissue # assume flip angle error is known accurately\n", + "pk_pars_0 = [{'vp': 0.005, 'ps': 1e-4, 've': 0.5, 'fp': 5, 'delay': 0},\n", + " #{'vp': 0.1, 'ps': 1e-4, 've': 0.02, 'fp': 50, 'delay': 0} # optionally specify multiple sets of starting values to find global minimum \n", + " ]\n", + "\n", + "# fit the enhancement curve\n", + "%time vp_fit, ps_fit, ve_fit, fp_fit, delay_fit, enh_fit = dce_fit.EnhToPKP(enh, pk_model_fit, 1/R10_tissue, c_to_r_model_fit, water_ex_model_fit, signal_model_fit, pk_pars_0).proc(enh, k_tissue_fit, 1/R10_tissue)\n", + "\n", + "print(\"parameter: value (ground truth)\")\n", + "print(f\"vp: {vp_fit:.5f} ({pk_pars_ground_truth['vp']:.5f})\")\n", + "print(f\"ps: {ps_fit:.5f} ({pk_pars_ground_truth['ps']:.5f})\")\n", + "print(f\"ve: {ve_fit:.5f} ({pk_pars_ground_truth['ve']:.5f})\")\n", + "print(f\"fp: {fp_fit:.5f} ({pk_pars_ground_truth['fp']:.5f})\")\n", + "print(f\"delay: {delay_fit:.5f} ({pk_pars_ground_truth['delay']:.5f})\")\n", + "\n", + "fig, ax = plt.subplots(1,2, figsize=(12,4))\n", + "ax[0].plot(t, c_ap_meas);\n", + "ax[0].set_xlabel('time (s)');\n", + "ax[0].set_title('AIF');\n", + "ax[1].plot(t, enh, 'b.', t, enh_fit, 'r-')\n", + "ax[1].set_xlabel('time (s)');\n", + "ax[1].set_title('enhancement and fit');" + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/demo/demo_water_ex_models.ipynb b/demo/demo_water_ex_models.ipynb new file mode 100644 index 0000000..a78a654 --- /dev/null +++ b/demo/demo_water_ex_models.ipynb @@ -0,0 +1,174 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "eb332c7d-4589-47da-81d0-e2697ee70254", + "metadata": {}, + "source": [ + "## Water exchange models demo" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "42671502-6096-4107-8c21-3f876b950a66", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import sys\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "sys.path.append('../src')\n", + "import water_ex_models\n", + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "markdown", + "id": "33acaa3b-10e0-454f-b62b-6a2cb5b1d0f4", + "metadata": {}, + "source": [ + "### The WaterExModel Class\n", + "This abstract base class represents different water exchange models. The purpose of such an object is to convert a set of relaxation rates for each tissue compartment (blood, EES, cells) into one or more exponential relaxation components based on the water exchange properties. \n", + "For example, consider the following relaxation rates and population fractions:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c2e14ed8-c6f6-4e79-9fe0-fbc9b323d156", + "metadata": {}, + "outputs": [], + "source": [ + "p = {'b': 0.2, 'e': 0.4, 'i': 0.4}\n", + "R1 = {'b': 1, 'e': 2, 'i': 2.5}" + ] + }, + { + "cell_type": "markdown", + "id": "b6b07fe1-e732-4e57-9c4f-857815a6de3b", + "metadata": {}, + "source": [ + "#### FXL\n", + "In the FXL, we end up with just one longitudinal relaxation component representing the tissue:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "29c9d0d4-3fc0-44f5-ba00-322339389d8f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populations: [1.0]\n", + "R1 values: [2.0]\n" + ] + } + ], + "source": [ + "wxm = water_ex_models.FXL()\n", + "R1_components, p_components = wxm.R1_components(p, R1)\n", + "print(f'Populations: {p_components}')\n", + "print(f'R1 values: {R1_components}')" + ] + }, + { + "cell_type": "markdown", + "id": "e7855797-9f25-4ef3-b04e-6dd87d78169e", + "metadata": {}, + "source": [ + "#### NXL\n", + "In the NXL, we get 3 relaxation components corresponding to the 3 tissue compartments:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0e547b96-a11b-48aa-88fd-99f46638c8f3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populations: [0.2, 0.4, 0.4]\n", + "R1 values: [1, 2, 2.5]\n" + ] + } + ], + "source": [ + "wxm = water_ex_models.NXL()\n", + "R1_components, p_components = wxm.R1_components(p, R1)\n", + "print(f'Populations: {p_components}')\n", + "print(f'R1 values: {R1_components}')" + ] + }, + { + "cell_type": "markdown", + "id": "db686624-a214-45e2-bae1-4e173f076d3f", + "metadata": {}, + "source": [ + "#### NTEXL\n", + "In the No-TransEndothelial-water-eXchange Limit, we get relaxation components corresponding to blood and the combined extravascular spaces:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "feaf0f84-b3c9-44ee-ae22-7144cdd59e8b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populations: [0.2, 0.8]\n", + "R1 values: [1, 2.25]\n" + ] + } + ], + "source": [ + "wxm = water_ex_models.NTEXL()\n", + "R1_components, p_components = wxm.R1_components(p, R1)\n", + "print(f'Populations: {p_components}')\n", + "print(f'R1 values: {R1_components}')" + ] + }, + { + "cell_type": "markdown", + "id": "867ae4b1-5486-46c0-b2f8-5c73efdb0d29", + "metadata": {}, + "source": [ + "#### Other water exchange models\n", + "Other models could be added, e.g. 3-site-2-exchange, 2-site-1-exchange." + ] + } + ], + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/README.md b/src/README.md index ef077fc..61031f0 100644 --- a/src/README.md +++ b/src/README.md @@ -21,11 +21,11 @@ Created 28 September 2020 ### Not yet implemented/limitations: - Generally untested. Not optimised for speed or robustness. -- Additional pharmacokinetic models (add by inheriting from pk_model class) -- Additional relaxivity models (add by inheriting from c_to_r_model class) -- Additional AIF functions (add by inheriting from aif class) -- Additional water exchange models, e.g. 3S2X, 2S1X (add by inheriting from water_ex_model class) -- Additional signal models (add by inheriting from signal_model class) +- Additional pharmacokinetic models (add by inheriting from PkModel class) +- Additional relaxivity models (add by inheriting from CRModel class) +- Additional AIF functions (add by inheriting from AIF class) +- Additional water exchange models, e.g. 3S2X, 2S1X (add by inheriting from WaterExModel class) +- Additional signal models (add by inheriting from SignalModel class) - R2/R2* effects not included in fitting of enhancement curves (but is included for enhancement-to-concentration conversion) - Compartment-specific relaxivity parameters/models - Fitting free water exchange parameters diff --git a/src/aifs.py b/src/aifs.py index 7bf45a4..6eeed4e 100644 --- a/src/aifs.py +++ b/src/aifs.py @@ -5,12 +5,13 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: aif and derived subclasses: - patient_specific - parker_like - parker - manning_slow - manning_fast +Classes: AIF and derived subclasses: + PatientSpecific + ParkerLike + Parker + ManningFast + ManningSlow + Heye """ from abc import ABC, abstractmethod @@ -19,12 +20,12 @@ from scipy.interpolate import interp1d -class aif(ABC): +class AIF(ABC): """Abstract base class for arterial input functions. Subclasses correspond to types of AIF, e.g. population-average functions and patient-specific AIFs based on input data. - The main purpose of the aif class is to return the tracer concentration in + The main purpose of the AIF class is to return the tracer concentration in arterial plasma at any time points. Methods @@ -51,25 +52,23 @@ def c_ap(self, t): pass -class patient_specific(aif): +class PatientSpecific(AIF): """Patient-specific AIF subclass. Constructed using time-concentration data, typically obtained from experimental measurements. The c_ap method returns AIF concentration at any requested time points using interpolation. - - Attributes - ---------- - t_data : ndarray - 1D float array of time points (s) at which AIF concentration data are - provided - c_ap_data : ndarray - 1D float array of concentration data (mM) - c_ap_func : interp1d - interpolation function to generate AIF concentration """ def __init__(self, t_data, c_ap_data): + """ + + Args: + t_data (ndarray): 1D float array of time points (s) at which + input AIF concentration data are provided + c_ap_data (ndarray): 1D float array of input concentration data ( + mM). + """ self.t_data = t_data self.c_ap_data = c_ap_data self.c_ap_func = interp1d(t_data, c_ap_data, @@ -83,27 +82,30 @@ def c_ap(self, t): return c_ap -class parker_like(aif): +class ParkerLike(AIF): """Parker-like AIF subclass. Generate AIF concentrations using a mathematical function that is based on the Parker population-average function but with two exponential terms. Parameters default to the original Parker function. - - Attributes - ---------- - hct : float - Arterial haematocrit - a1, a2, t1, t2, sigma1, sigma2, s, tau, alpha, beta, alpha2, beta2 : float - AIF function parameters - t_start : float - Start time (s). The AIF function is time-shifted by this delay. """ def __init__(self, hct, a1=0.809, a2=0.330, t1=0.17046, t2=0.365, sigma1=0.0563, sigma2=0.132, s=38.078, tau=0.483, alpha=0, beta=0, alpha2=1.050, beta2=0.1685, scale_factor=1, t_start=0): + """ + + Args: + hct (float): Arterial haematocrit + a1, a2, t1, t2, sigma1, sigma2, s, tau, alpha, beta, alpha2, + beta2 (float): AIF function parameters. Default to original + Parker function values. + scale_factor (float): Scale factor applied to AIF curve. Defaults to + 1. + t_start (float): Start time (s). The AIF function is time-shifted by + this delay. Defaults to 0. + """ self.a1, self.a2, self.t1, self.t2 = a1, a2, t1, t2 self.sigma1, self.sigma2, self.s, self.tau = sigma1, sigma2, s, tau self.alpha, self.alpha2 = alpha, alpha2 @@ -117,64 +119,63 @@ def c_ap(self, t): t_mins = (t - self.t_start) / 60. # calculate c(t) for arterial blood - c_ab = (self.a1/(self.sigma1*np.sqrt(2.*np.pi))) * \ - np.exp(-((t_mins-self.t1)**2)/(2.*self.sigma1**2)) + \ - (self.a2/(self.sigma2*np.sqrt(2.*np.pi))) * \ - np.exp(-((t_mins-self.t2)**2)/(2.*self.sigma2**2)) + \ - (self.alpha*np.exp(-self.beta*t_mins) + - self.alpha2*np.exp(-self.beta2*t_mins)) / \ - (1+np.exp(-self.s*(t_mins-self.tau))) + c_ab = (self.a1 / (self.sigma1 * np.sqrt(2. * np.pi))) * \ + np.exp(-((t_mins - self.t1) ** 2) / (2. * self.sigma1 ** 2)) + \ + (self.a2 / (self.sigma2 * np.sqrt(2. * np.pi))) * \ + np.exp(-((t_mins - self.t2) ** 2) / (2. * self.sigma2 ** 2)) + \ + (self.alpha * np.exp(-self.beta * t_mins) + + self.alpha2 * np.exp(-self.beta2 * t_mins)) / \ + (1 + np.exp(-self.s * (t_mins - self.tau))) c_ab *= self.scale_factor c_ap = c_ab / (1 - self.hct) c_ap[t < self.t_start] = 0. return c_ap -class parker(parker_like): - """Parker AIF (subclass of parker_like). +class Parker(ParkerLike): + """Parker AIF (subclass of ParkerLike). Generate AIF concentrations using Parker population-average function. Reference: Parker et al., Magnetic Resonance in Medicine, 2006 https://doi.org/10.1002/mrm.21066 - Attributes - ---------- - hct : float - Arterial haematocrit - a1, a2, t1, t2, sigma1, sigma2, s, tau, alpha, beta, alpha2, beta2 : float - AIF function parameters - t_start : float - Start time (s). The AIF function is time-shifted by this delay. """ def __init__(self, hct, t_start=0): + """ + + Args: + hct (float): Arterial haematocrit + t_start (float): Start time (s). The AIF function is time-shifted by + this delay. Defaults to 0. + """ super().__init__(hct, t_start=t_start) -class manning_fast(parker_like): +class ManningFast(ParkerLike): """AIF function for DCE-MRI with fast injection and long acquisition time. + TODO: CHECK PARAMETERS Based on Parker AIF and modified to reflect measured AIF in a mild-stroke population over a longer acquisition time. Reference: Manning et al., Magnetic Resonance in Medicine, 2021 https://doi.org/10.1002/mrm.28833 - Attributes - ---------- - hct : float - Arterial haematocrit - a1, a2, t1, t2, sigma1, sigma2, s, tau, alpha, beta, alpha2, beta2 : float - AIF function parameters - t_start : float - Start time (s). The AIF function is time-shifted by this delay. """ def __init__(self, hct=0.42, t_start=0): + """ + + Args: + hct (float): Arterial haematocrit. Defaults to 0.42 + t_start (float): Start time (s). The AIF function is time-shifted by + this delay. Defaults to 0. + """ super().__init__(hct, alpha=0.246, alpha2=0.765, beta=0.180, beta2=0.0240, scale_factor=0.89, t_start=t_start) -class manning_slow(patient_specific): +class ManningSlow(PatientSpecific): """AIF function for DCE-MRI with fast injection and long acquisition time. Based on data from a mild-stroke population acquired with a slow injection. @@ -182,15 +183,6 @@ class manning_slow(patient_specific): Reference: Manning et al., Magnetic Resonance in Medicine, 2021 https://doi.org/10.1002/mrm.28833 - Attributes - ---------- - t_data : ndarray - 1D float array of time points (s) at which AIF concentration data are - provided - c_ap_data : ndarray - 1D float array of concentration data (mM) - c_ap_func : interp1d - interpolation function to generate AIF concentration """ def __init__(self): @@ -198,21 +190,23 @@ def __init__(self): # We define first time point as t=3*39.62 to ensure c_ap=0 until the # end of the 3rd pre-contrast acquisition. c_ap_ref = np.array([0.000000, - 0.137956, 0.719692, 1.634260, 2.134626, 1.875262, 1.757133, - 1.596487, 1.470386, 1.352991, 1.280691, 1.206125, 1.146877, - 1.098958, 1.056410, 1.024845, 0.992435, 0.969435, 0.944838, - 0.919047, 0.899973, 0.880771, 0.862782, 0.844603, 0.829817, - 0.816528, 0.800179, 0.781698, 0.774622, 0.754376]) + 0.137956, 0.719692, 1.634260, 2.134626, 1.875262, + 1.757133, 1.596487, 1.470386, 1.352991, 1.280691, + 1.206125, 1.146877, 1.098958, 1.056410, 1.024845, + 0.992435, 0.969435, 0.944838, 0.919047, 0.899973, + 0.880771, 0.862782, 0.844603, 0.829817, 0.816528, + 0.800179, 0.781698, 0.774622, 0.754376]) t_ref = 39.62 * np.array([3.0, - 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, - 14.5, 15.5, 16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, - 25.5, 26.5, 27.5, 28.5, 29.5, 30.5, 31.5]) + 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, + 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, + 19.5, 20.5, 21.5, 22.5, 23.5, 24.5, 25.5, + 26.5, 27.5, 28.5, 29.5, 30.5, 31.5]) super().__init__(t_ref, c_ap_ref) -class heye(parker_like): +class Heye(ParkerLike): """AIF function for DCE-MRI with fast injection and long acquisition time. Based on Parker AIF and modified to reflect measured AIF in a mild-stroke @@ -220,16 +214,15 @@ class heye(parker_like): Reference: Heye et al., Neuroimage (2016) https://doi.org/10.1016/j.neuroimage.2015.10.018 - Attributes - ---------- - hct : float - Arterial haematocrit - a1, a2, t1, t2, sigma1, sigma2, s, tau, alpha, beta, alpha2, beta2 : float - AIF function parameters - t_start : float - Start time (s). The AIF function is time-shifted by this delay. """ def __init__(self, hct=0.45, t_start=0): + """ + + Args: + hct (float): Arterial haematocrit. Defaults to 0.45 + t_start (float): Start time (s). The AIF function is time-shifted by + this delay. Defaults to 0. + """ super().__init__(hct, alpha=3.1671, alpha2=0.5628, beta=1.0165, beta2=0.0266, scale_factor=1, t_start=t_start) diff --git a/src/dce_fit.py b/src/dce_fit.py index 8d7dd67..dab7a43 100644 --- a/src/dce_fit.py +++ b/src/dce_fit.py @@ -1,118 +1,315 @@ -"""Functions to convert between quantities and fit DCE-MRI data. +"""Classes and functions to convert between quantities and fit DCE-MRI data. Created 28 September 2020 @authors: Michael Thrippleton @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK +Classes: + SigToEnh + EnhToConc + ConcToPkp + EnhToPkp + Functions: - sig_to_enh - enh_to_conc conc_to_enh - conc_to_pkp - enh_to_pkp pkp_to_enh volume_fractions - minimize_global + check_ve_vp_sum """ - import numpy as np -from scipy.optimize import root -from fitting import calculator +from scipy.signal import argrelextrema +from scipy.interpolate import interp1d +from fitting import Fitter from utils.utilities import least_squares_global -class sig_to_enh(calculator): +class SigToEnh(Fitter): + """Convert signal to enhancement. + + Subclass of Fitter. Calculates the enhancement of each volume relative to + the mean over baseline volumes. + """ + def __init__(self, base_idx): + """ + + Args: + base_idx (array-like): indices corresponding to baseline volumes. + """ self.base_idx = base_idx - - def proc(self, s): - s_pre = np.mean(s[self.base_idx]) - enh = np.empty(s.shape, dtype=np.float32) - enh[:] = 100.*((s - s_pre)/s_pre) if s_pre > 0 else np.nan - return {'enh': enh} - -class enh_to_conc(calculator): - def __init__(self, c_to_r_model, signal_model): - self.c_to_r_model = c_to_r_model - self.signal_model = signal_model - - def proc(self, enh, t10, k_fa=1): - # Loop through all time points - C_t = np.asarray([self.__enh_to_conc_single(e, t10, k_fa) for e in enh]) - return {'C_t': C_t} - - def __enh_to_conc_single(self, e, t10, k_fa): - # Define function to fit for one time point - res = root(self.__fun, x0=0, args=(e, t10, k_fa), method='hybr', options={'maxfev': 1000, 'xtol': 1e-7}) - return min(res.x) if res.success else np.nan + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('enh', True), + + def proc(self, s): + """Calculate enhancement time series. Overrides superclass method. - def __fun(self, C, e, t10, k_fa): - return e - conc_to_enh(C, t10, k_fa, self.c_to_r_model, self.signal_model) + Args: + s (array): 1D signal array + Returns: + ndarray: 1D array of enhancements (%) + """ + if any(np.isnan(s)): + raise ValueError( + f'Unable to calculate enhancements: nan arguments received.') + s_pre = np.mean(s[self.base_idx]) + if s_pre <= 0: + raise ArithmeticError('Baseline signal is zero or negative.') + enh = np.empty(s.shape, dtype=np.float32) + enh[:] = 100. * ((s - s_pre) / s_pre) if s_pre > 0 else np.nan + return enh -def sig_to_enh2(s, base_idx): - """Convert signal data to enhancement. - Parameters - ---------- - s : ndarray - 1D float array containing signal time series - base_idx : list - list of integers indicating the baseline time points. +class EnhToConc(Fitter): + """Convert enhancement to concentration. - Returns - ------- - enh : ndarray - 1D float array containing enhancement time series (%) + Subclass of Fitter. Calculates points on the enh vs. conc curve, + interpolates and uses this to "look up" concentration values given the + enhancement values. It assumes the fast water exchange limit. """ - s_pre = np.mean(s[base_idx]) - enh = 100.*((s - s_pre)/s_pre) - return enh + def __init__(self, c_to_r_model, signal_model, C_min=-0.5, C_max=30, + n_samples=1000): + """ + + Args: + c_to_r_model (CRModel): concentration to relaxation + relationship + signal_model (SignalModel): relaxation to signal relationship + C_min (float, optional): minimum value of concentration to look for + C_max (float, optional): maximum value of concentration to look for + n_samples (int, optional): number of points to sample the enh-conc + function, prior to interpolation + """ + self.c_to_r_model = c_to_r_model + self.signal_model = signal_model + self.C_min = C_min + self.C_max = C_max + self.C_samples = np.linspace(C_min, C_max, n_samples) -def enh_to_conc2(enh, k, R10, c_to_r_model, signal_model): - """Estimate concentration time series from enhancements. - - Assumptions: - -fast-water-exchange limit. - -see conc_to_enh + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('C_t', True), - Parameters - ---------- - enh : ndarray - 1D float array containing enhancement time series (%) - k : float - B1 correction factor (actual/nominal flip angle) - R10 : float - Pre-contrast R1 relaxation rate (s^-1) - c_to_r_model : c_to_r_model - Model describing the concentration-relaxation relationship. - signal_model : signal_model - Model descriibing the relaxation-signal relationship. + def proc(self, enh, t10, k_fa=1): + """Calculate concentration time series. Overrides superclass method. + + Args: + enh (ndarray): 1D array of enhancements (%) + t10 (float): tissue T10 (s) + k_fa (float, optional): B1 correction factor (actual/nominal flip + angle). Defaults to 1. + + Returns: + ndarray: 1D array of tissue concentrations (mM) + """ + if any(np.isnan(enh)) or np.isnan(t10) or np.isnan(k_fa): + raise ValueError( + f'Unable to calculate concentration: nan arguments received.') + e_samples = conc_to_enh(self.C_samples, t10, k_fa, self.c_to_r_model, + self.signal_model) + C_st = self.C_samples[np.concatenate((argrelextrema(e_samples, + np.greater)[0], + argrelextrema(e_samples, np.less)[ + 0]))] + C_lb = self.C_min if C_st[C_st <= 0].size == 0 else max(C_st[C_st <= 0]) + C_ub = self.C_max if C_st[C_st > 0].size == 0 else min(C_st[C_st > 0]) + points_allowed = (C_lb <= self.C_samples) & (self.C_samples <= C_ub) + C_allowed = self.C_samples[points_allowed] + e_allowed = e_samples[points_allowed] + C_func = interp1d(e_allowed, C_allowed, kind='quadratic', + bounds_error=True) + return C_func(enh) + + +class ConcToPKP(Fitter): + """Fit tissue concentrations using pharmacokinetic model. + + Subclass of Fitter. + """ + def __init__(self, pk_model, pk_pars_0=None, weights=None): + """ + Args: + pk_model (PkModel): Pharmacokinetic model used to predict tracer + distribution. + pk_pars_0 (list, optional): list of dicts containing starting values + of pharmacokinetic parameters. If there are >1 dicts then the + optimisation will be run multiple times and the global minimum + used. + Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}] + Defaults to values in PkModel.typical_vals. + weights (ndarray, optional): 1D float array of weightings to use + for sum-of-squares calculation. Can be used to "exclude" data + points from optimisation. Defaults to equal weighting for all + points. + """ + self.pk_model = pk_model + if pk_pars_0 is None: + self.pk_pars_0 = [pk_model.pkp_dict(pk_model.typical_vals)] + else: + self.pk_pars_0 = pk_pars_0 + if weights is None: + self.weights = np.ones(pk_model.n) + else: + self.weights = weights + # Convert initial pars from list of dicts to list of arrays + self.x_0_all = [pk_model.pkp_array(pars) for pars in self.pk_pars_0] + + def output_info(self): + """Get output info. Overrides superclass method. + """ + # outputs are pharmacokinetic parameters + fitted concentration + return tuple([(name, False) for name in + self.pk_model.parameter_names]) + (('Ct_fit', True),) + + def proc(self, C_t): + """Fit tissue concentration time series. Overrides superclass method. + Args: + C_t (ndarray): 1D float array containing tissue concentration + time series (mM), specifically the mMol of tracer per unit tissue + volume. + + Returns: + tuple: (pk_par_1, pk_par_2, ..., Ct_fit) + pk_par_i (float): fitted parameters (in the order given in + self.PkModel.parameter_names) + Ct_fit (ndarray): best-fit tissue concentration (mM). + """ + if any(np.isnan(C_t)): + raise ValueError(f'Unable to fit model: nan arguments received.') + result = least_squares_global(self.__residuals, self.x_0_all, + args=(C_t,), method='trf', + bounds=self.pk_model.bounds, + x_scale=self.pk_model.typical_vals) + if result.success is False: + raise ArithmeticError( + f'Unable to calculate pharmacokinetic parameters' + f': {result.message}') + pk_pars_opt = self.pk_model.pkp_dict(result.x) + check_ve_vp_sum(pk_pars_opt) + Ct_fit, _C_cp, _C_e = self.pk_model.conc(*result.x) + Ct_fit[self.weights == 0] = np.nan + return tuple(result.x) + (Ct_fit,) + + def __residuals(self, x, C_t): + C_t_try, _C_cp, _C_e = self.pk_model.conc(*x) + res = self.weights * (C_t_try - C_t) + return res + + +class EnhToPKP(Fitter): + """Fit tissue enhancement curves using pharmacokinetic model. + + Subclass of Fitter. Fits tissue enhancements for specified combination of + relaxivity model, water exchange model, sequence and pharmacokinetic + model. + Uses the following forward model: + PkModel predicts CA concentrations in tissue compartments + CRModel estimates relaxation rates in tissue compartments + WaterExModel estimates exponential relaxation components + SignalModel estimates MRI signal + R2 and R2* effects neglected. + """ + def __init__(self, hct, pk_model, t10_blood, c_to_r_model, water_ex_model, + signal_model, pk_pars_0=None, weights=None): + """ + Args: + hct (float): Capillary haematocrit + pk_model (PkModel): Pharmacokinetic model used to predict tracer + distribution. + t10_blood (float): Pre-contrast T1 relaxation rate for capillary + blood (s). Used to estimate T10 for each tissue compartment. AIF + T10 value is typically used. + c_to_r_model (CRModel): Model describing concentration- + relaxation relationship. + water_ex_model (WaterExModel): Model to predict one or more + exponential relaxation components given the relaxation rates for + each compartment and water exchange behaviour. + signal_model (SignalModel): Model descriibing the + relaxation-signal relationship. + pk_pars_0 (list, optional): List of dicts containing starting + values of pharmacokinetic parameters. If there are >1 dicts + then the optimisation will be run multiple times and the + global minimum used. + Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}] + Defaults to values in PkModel.typical_vals. + weights (ndarray, optional): 1D float array of weightings to use for + sum-of-squares calculation. Can be used to "exclude" data + points from optimisation. Defaults to equal weighting for all + points. + """ + self.hct = hct + self.pk_model = pk_model + self.t10_blood = t10_blood + self.c_to_r_model = c_to_r_model + self.water_ex_model = water_ex_model + self.signal_model = signal_model + if pk_pars_0 is None: + self.pk_pars_0 = [pk_model.pkp_dict(pk_model.typical_vals)] + else: + self.pk_pars_0 = pk_pars_0 + if weights is None: + self.weights = np.ones(pk_model.n) + else: + self.weights = weights + # Convert initial pars from list of dicts to list of arrays + self.x_0_all = [pk_model.pkp_array(pars) for pars in self.pk_pars_0] + + def output_info(self): + """Get output info. Overrides superclass method. + """ + # outputs are pharmacokinetic parameters + fitted enhancement + return tuple([(name, False) for name in + self.pk_model.parameter_names]) + (('enh_fit', True),) + + def proc(self, enh, k_fa, t10_tissue): + """Fit enhancement time series. Overrides superclass method. + + Args: + enh (ndarray): 1D float array of enhancement time series (%) + k_fa (float): B1 correction factor (actual/nominal flip angle) + t10_tissue(float): Pre-contrast T1 relaxation rate for tissue (s) Returns ------- - C_t : ndarray - 1D float array containing tissue concentration time series (mM), - specifically the mMol of tracer per unit tissue volume. + tuple (pk_pars_opt, Ct_fit) + pk_pars_opt : dict of optimal pharmacokinetic parameters, + Example: {'vp': 0.1, 'ps': 1e-3, 've': 0.5} + enh_fit : 1D ndarray of floats containing best-fit tissue + enhancement-time series (%). """ - # Define function to fit for one time point - def enh_to_conc_single(e): - # Find the C where measured-predicted enhancement = 0 - res = root(lambda c: - e - conc_to_enh(c, k, R10, c_to_r_model, signal_model), - x0=0, method='hybr', options={'maxfev': 1000, 'xtol': 1e-7}) - if res.success is False: + if any(np.isnan(enh)) or np.isnan(t10_tissue) or np.isnan(k_fa): + raise ValueError(f'Unable to fit model: nan arguments received.') + result = least_squares_global(self.__residuals, self.x_0_all, + args=(k_fa, t10_tissue, enh), + method='trf', + bounds=self.pk_model.bounds, + x_scale=self.pk_model.typical_vals) + if result.success is False: raise ArithmeticError( - f'Unable to find concentration: {res.message}') - return min(res.x) - # Loop through all time points - C_t = np.asarray([enh_to_conc_single(e) for e in enh]) - return C_t + f'Unable to calculate pharmacokinetic parameters' + f': {result.message}') + pk_pars_opt = self.pk_model.pkp_dict(result.x) + check_ve_vp_sum(pk_pars_opt) + enh_fit = pkp_to_enh(pk_pars_opt, self.hct, k_fa, t10_tissue, + self.t10_blood, self.pk_model, self.c_to_r_model, + self.water_ex_model, self.signal_model) + enh_fit[self.weights == 0] = np.nan + return tuple(result.x) + (enh_fit,) + + def __residuals(self, x, k_fa, t10_tissue, enh): + pk_pars_try = self.pk_model.pkp_dict(x) + enh_try = pkp_to_enh(pk_pars_try, self.hct, k_fa, t10_tissue, + self.t10_blood, self.pk_model, self.c_to_r_model, + self.water_ex_model, self.signal_model) + return self.weights * (enh_try - enh) def conc_to_enh(C_t, t10, k, c_to_r_model, signal_model): @@ -133,9 +330,9 @@ def conc_to_enh(C_t, t10, k, c_to_r_model, signal_model): B1 correction factor (actual/nominal flip angle) t10 : float Pre-contrast R1 relaxation rate (s^-1) - c_to_r_model : c_to_r_model + c_to_r_model : CRModel Model describing the concentration-relaxation relationship. - signal_model : signal_model + signal_model : SignalModel Model descriibing the relaxation-signal relationship. Returns @@ -143,165 +340,17 @@ def conc_to_enh(C_t, t10, k, c_to_r_model, signal_model): enh : ndarray 1D float array containing enhancement time series (%) """ - R10 = 1/t10 + R10 = 1 / t10 R1 = c_to_r_model.R1(R10, C_t) R2 = c_to_r_model.R2(0, C_t) # can assume R20=0 for existing signal models - s_pre = signal_model.R_to_s(s0=1., R1=R10, R2=0, R2s=0, k=k) - s_post = signal_model.R_to_s(s0=1., R1=R1, R2=R2, R2s=R2, k=k) + s_pre = signal_model.R_to_s(s0=1., R1=R10, R2=0, R2s=0, k_fa=k) + s_post = signal_model.R_to_s(s0=1., R1=R1, R2=R2, R2s=R2, k_fa=k) enh = 100. * ((s_post - s_pre) / s_pre) return enh -def conc_to_pkp(C_t, pk_model, pk_pars_0=None, weights=None): - """Fit concentration-time series to obtain pharmacokinetic parameters. - - Uses non-linear least squares optimisation. - - Assumptions: - -Fast-water-exchange limit - -See conc_to_enh - - Parameters - ---------- - C_t : ndarray - 1D float array containing tissue concentration time series (mM), - specifically the mMol of tracer per unit tissue volume. - pk_model : pk_model - Pharmacokinetic model used to predict tracer distribution. - pk_pars_0 : list, optional - list of dicts containing starting values of pharmacokinetic parameters. - If there are >1 dicts then the optimisation will be run multiple times - and the global minimum used. - Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}] - Defaults to values in pk_model.typical_vals. - weights : ndarray, optional - 1D float array of weightings to use for sum-of-squares calculation. - Can be used to "exclude" data points from optimisation. - Defaults to equal weighting for all points. - - Returns - ------- - tuple (pk_pars_opt, Ct_fit) - pk_pars_opt : dict of optimal pharmacokinetic parameters, - Example: {'vp': 0.1, 'ps': 1e-3, 've': 0.5} - Ct_fit : 1D ndarray of floats containing best-fit tissue - concentration-time series (mM). - """ - if pk_pars_0 is None: - pk_pars_0 = [pk_model.pkp_dict(pk_model.typical_vals)] - if weights is None: - weights = np.ones(C_t.shape) - - # Convert initial pars from list of dicts to list of arrays - x_0_all = [pk_model.pkp_array(pars) for pars in pk_pars_0] - - def residuals(x): - C_t_try, _C_cp, _C_e = pk_model.conc(*x) - return weights * (C_t_try - C_t) - - result = least_squares_global(residuals, x_0_all, method='trf', - bounds=pk_model.bounds, - x_scale=(pk_model.typical_vals)) - - if result.success is False: - raise ArithmeticError(f'Unable to calculate pharmacokinetic parameters' - f': {result.message}') - pk_pars_opt = pk_model.pkp_dict(result.x) # convert parameters to dict - check_ve_vp_sum(pk_pars_opt) - Ct_fit, _C_cp, _C_e = pk_model.conc(*result.x) - Ct_fit[weights == 0] = np.nan - - return pk_pars_opt, Ct_fit - - -def enh_to_pkp(enh, hct, k, R10_tissue, R10_blood, pk_model, c_to_r_model, - water_ex_model, signal_model, pk_pars_0=None, weights=None): - """Fit signal enhancement curve to obtain pharamacokinetic parameters. - - Any combination of signal, pharmacokinetic, relaxivity and water exchange - models may be used. - - Assumptions: - -R2 and R2* effects neglected. - - Parameters - ---------- - enh : ndarray - 1D float array containing enhancement time series (%) - hct : float - Capillary haematocrit. - k : float - B1 correction factor (actual/nominal flip angle) - R10_tissue : float - Pre-contrast R1 relaxation rate for tissue (s^-1) - R10_blood : float - Pre-contrast R1 relaxation rate for capillary blood (s^-1). Used to - estimate R10 for each tissue compartment. AIF R10 value is typically - used. - pk_model : pk_model - Pharmacokinetic model used to predict tracer distribution. - c_to_r_model : c_to_r_model - Model describing the concentration-relaxation relationship. - water_ex_model : water_ex_model - Model to predict one or more exponential relaxation components given - the relaxation rates for each compartment and water exchange behaviour. - signal_model : signal_model - Model descriibing the relaxation-signal relationship. - pk_pars_0 : list, optional - List of dicts containing starting values of pharmacokinetic parameters. - If there are >1 dicts then the optimisation will be run multiple times - and the global minimum used. - Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}] - Defaults to values in pk_model.typical_vals. - weights : ndarray, optional - 1D float array of weightings to use for sum-of-squares calculation. - Can be used to "exclude" data points from optimisation. - Defaults to equal weighting for all points. - - Returns - ------- - tuple (pk_pars_opt, Ct_fit) - pk_pars_opt : dict of optimal pharmacokinetic parameters, - Example: {'vp': 0.1, 'ps': 1e-3, 've': 0.5} - enh_fit : 1D ndarray of floats containing best-fit tissue - enhancement-time series (%). - - """ - if pk_pars_0 is None: # get default initial estimates if none provided - pk_pars_0 = [pk_model.pkp_dict(pk_model.typical_vals)] - if weights is None: - weights = np.ones(enh.shape) - - # get initial estimates as array, then scale - x_0_all = [pk_model.pkp_array(pars) for pars in pk_pars_0] - - def residuals(x): - pk_pars_try = pk_model.pkp_dict(x) - enh_try = pkp_to_enh(pk_pars_try, hct, k, R10_tissue, R10_blood, - pk_model, c_to_r_model, water_ex_model, - signal_model) - return weights * (enh_try - enh) - - # minimise the cost function - result = least_squares_global(residuals, x_0_all, method='trf', - bounds=pk_model.bounds, - x_scale=(pk_model.typical_vals)) - if result.success is False: - raise ArithmeticError(f'Unable to calculate pharmacokinetic parameters' - f': {result.message}') - - # generate optimal parameters (as dict) and predicted enh - pk_pars_opt = pk_model.pkp_dict(result.x) - check_ve_vp_sum(pk_pars_opt) - enh_fit = pkp_to_enh(pk_pars_opt, hct, k, R10_tissue, R10_blood, pk_model, - c_to_r_model, water_ex_model, signal_model) - enh_fit[weights == 0] = np.nan - - return pk_pars_opt, enh_fit - - -def pkp_to_enh(pk_pars, hct, k, R10_tissue, R10_blood, pk_model, c_to_r_model, - water_ex_model, signal_model): +def pkp_to_enh(pk_pars, hct, k_fa, t10_tissue, t10_blood, pk_model, + c_to_r_model, water_ex_model, signal_model): """Forward model to generate enhancement from pharmacokinetic parameters. Any combination of signal, pharmacokinetic, relaxivity and water exchange @@ -322,22 +371,22 @@ def pkp_to_enh(pk_pars, hct, k, R10_tissue, R10_blood, pk_model, c_to_r_model, Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}]. hct : float Capillary haematocrit. - k : k + k_fa : k B1 correction factor (actual/nominal flip angle). - R10_tissue : float - Pre-contrast R1 relaxation rate for tissue (s^-1) - R10_blood : float - Pre-contrast R1 relaxation rate for capillary blood (s^-1). Used to - estimate R10 for each tissue compartment. AIF R10 value is typically + t10_tissue : float + Pre-contrast t1 relaxation rate for tissue (s) + t10_blood : float + Pre-contrast t1 relaxation rate for capillary blood (s). Used to + estimate t10 for each tissue compartment. AIF t10 value is typically used. - pk_model : pk_model + pk_model : PkModel Pharmacokinetic model used to predict tracer distribution. - c_to_r_model : c_to_r_model + c_to_r_model : CRModel Model describing the concentration-relaxation relationship. - water_ex_model : water_ex_model + water_ex_model : WaterExModel Model to predict one or more exponential relaxation components given the relaxation rates for each compartment and water exchange behaviour. - signal_model : signal_model + signal_model : SignalModel Model descriibing the relaxation-signal relationship. Returns @@ -351,19 +400,15 @@ def pkp_to_enh(pk_pars, hct, k, R10_tissue, R10_blood, pk_model, c_to_r_model, p = v # calculate pre-contrast R10 in each compartment - R10_extravasc = (R10_tissue-p['b']*R10_blood)/(1-p['b']) - R10 = {'b': R10_blood, - 'e': R10_extravasc, - 'i': R10_extravasc} + R10_blood, R10_tissue = 1/t10_blood, 1/t10_tissue + R10_extravasc = (R10_tissue - p['b'] * R10_blood) / (1 - p['b']) + R10 = {'b': R10_blood, 'e': R10_extravasc, 'i': R10_extravasc} # calculate R10 exponential components R10_components, p0_components = water_ex_model.R1_components(p, R10) # calculate Gd concentration in each tissue compartment C_t, C_cp, C_e = pk_model.conc(**pk_pars) - c = {'b': C_cp / v['b'], - 'e': C_e / v['e'], - 'i': np.zeros(C_e.shape), - } + c = {'b': C_cp / v['b'], 'e': C_e / v['e'], 'i': np.zeros(C_e.shape), } # calculate R1 in each tissue compartment R1 = {'b': c_to_r_model.R1(R10['b'], c['b']), @@ -374,14 +419,13 @@ def pkp_to_enh(pk_pars, hct, k, R10_tissue, R10_blood, pk_model, c_to_r_model, R1_components, p_components = water_ex_model.R1_components(p, R1) # calculate pre- and post-Gd signal, summed over relaxation components - s_pre = np.sum([ - p0_c * signal_model.R_to_s(1, R10_components[i], k=k) - for i, p0_c in enumerate(p0_components)], 0) - s_post = np.sum([ - p_c * signal_model.R_to_s(1, R1_components[i], k=k) - for i, p_c in enumerate(p_components)], 0) + s_pre = np.sum( + [p0_c * signal_model.R_to_s(1, R10_components[i], k_fa=k_fa) for i, p0_c in + enumerate(p0_components)], 0) + s_post = np.sum( + [p_c * signal_model.R_to_s(1, R1_components[i], k_fa=k_fa) for i, p_c in + enumerate(p_components)], 0) enh = 100. * (s_post - s_pre) / s_pre - return enh @@ -390,11 +434,11 @@ def volume_fractions(pk_pars, hct): Calculates a complete set of tissue volume fractions, including any not specified by the pharmacokinetic model. - Example 1: The Tofts model does not specify vp, therefore assuming the - original "weakly vascularised" interpretation, vb = 0 and + Example 1: The Tofts model does not specify vp, therefore (assuming the + original "weakly vascularised" interpretation of the model), vb = 0 and vi = 1 - ve Example 2: The Patlak model does not specify ve, just a single - extravascular compartment with ve = 1 - vb and vi = 0. + extravascular compartment with ve = 1 - vb. Implicitly, vi = 0. Assumptions: This function encodes a set of assumptions required to predict @@ -436,8 +480,19 @@ def volume_fractions(pk_pars, hct): def check_ve_vp_sum(pk_pars): + """Check that ve+vp <= 1. + + Although this constraint could be implemented by the fitting algorithm, + this would mean using a slower algorithm. + + Args: + pk_pars (dict): Pharmacokinetic parameters. + Example: [{'vp': 0.1, 'ps': 1e-3, 've': 0.5}]. + Raises: + ValueError: if pk_pars inculdes vp and ve, and their sum is > 1 + """ # check vp + ve <= 1 if (('vp' in pk_pars) and ('ve' in pk_pars)) and ( pk_pars['vp'] + pk_pars['ve'] > 1): v_tot = pk_pars['vp'] + pk_pars['ve'] - raise ValueError(f'vp + ve = {v_tot}!') + raise ArithmeticError(f'vp + ve = {v_tot}!') diff --git a/src/demo/demo_aif.ipynb b/src/demo/demo_aif.ipynb deleted file mode 100644 index f9c06d8..0000000 --- a/src/demo/demo_aif.ipynb +++ /dev/null @@ -1,298 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "eb332c7d-4589-47da-81d0-e2697ee70254", - "metadata": {}, - "source": [ - "## AIF module demo" - ] - }, - { - "cell_type": "markdown", - "id": "4276273d-31f5-4625-bfc8-9018b7cd984d", - "metadata": {}, - "source": [ - "### Import modules" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "id": "42671502-6096-4107-8c21-3f876b950a66", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], - "source": [ - "import sys\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "sys.path.append('..')\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "id": "reported-projector", - "metadata": {}, - "source": [ - "### Classic Parker AIF\n", - "Create a Parker AIF object. This can be used to return arterial plasma Gd concentration for any time points." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "middle-visiting", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import aifs\n", - "# Create the AIF object\n", - "parker_aif = aifs.parker(hct=0.42)\n", - "\n", - "# Plot concentration for specific times\n", - "t_parker = np.linspace(0.,100.,1000)\n", - "c_ap_parker = parker_aif.c_ap(t_parker)\n", - "plt.plot(t_parker, c_ap_parker)\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)')\n", - "plt.title('Classic Parker');" - ] - }, - { - "cell_type": "markdown", - "id": "electoral-tamil", - "metadata": {}, - "source": [ - "### Patient-specific AIF\n", - "Create an individual AIF object based on a series of time-concentration data points. \n", - "The object can then be used to generate concentrations at arbitrary times." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "endless-poster", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# define concentration-time measurements\n", - "t_patient = np.array([19.810000,59.430000,99.050000,138.670000,178.290000,217.910000,257.530000,297.150000,336.770000,376.390000,416.010000,455.630000,495.250000,534.870000,574.490000,614.110000,653.730000,693.350000,732.970000,772.590000,812.210000,851.830000,891.450000,931.070000,970.690000,1010.310000,1049.930000,1089.550000,1129.170000,1168.790000,1208.410000,1248.030000])\n", - "c_p_patient = np.array([-0.004937,0.002523,0.002364,0.005698,0.264946,0.738344,1.289008,1.826013,1.919158,1.720187,1.636699,1.423867,1.368308,1.263610,1.190378,1.132603,1.056400,1.066964,1.025331,1.015179,0.965908,0.928219,0.919029,0.892000,0.909929,0.865766,0.857195,0.831985,0.823747,0.815591,0.776007,0.783767])\n", - "\n", - "# create AIF object from measurements\n", - "patient_aif = aifs.patient_specific(t_patient, c_p_patient)\n", - "\n", - "# get AIF conc at original temporal resolution\n", - "c_p_patient_lowres = patient_aif.c_ap(t_patient)\n", - "\n", - "# get (interpolated) AIF conc at higher temporal resolution\n", - "t_patient_highres = np.linspace(0., max(t_patient), 200) # required time points\n", - "c_p_patient_highres = patient_aif.c_ap(t_patient_highres)\n", - "\n", - "plt.plot(t_patient, c_p_patient, 'o', label='original data')\n", - "plt.plot(t_patient, c_p_patient_lowres, 'x', label='low res')\n", - "plt.plot(t_patient_highres, c_p_patient_highres, '-', label='high res')\n", - "plt.legend()\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)')\n", - "plt.title('Individual AIF');" - ] - }, - { - "cell_type": "markdown", - "id": "e872732f-b30a-434f-a3da-0c7393440949", - "metadata": {}, - "source": [ - "### Classic Parker AIF with time delay\n" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "c67d9fc9-698c-4207-8f40-711986e5fd4e", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "c_ap_parker_early = parker_aif.c_ap(t_parker+10)\n", - "c_ap_parker_late = parker_aif.c_ap(t_parker-10)\n", - "plt.plot(t_parker, c_ap_parker,label='unshifted')\n", - "plt.plot(t_parker, c_ap_parker_early,label='early')\n", - "plt.plot(t_parker, c_ap_parker_late,label='late')\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)')\n", - "plt.legend()\n", - "plt.title('Classic Parker');" - ] - }, - { - "cell_type": "markdown", - "id": "7df73e8a-6b94-4e67-aafd-e819f1960539", - "metadata": {}, - "source": [ - "### Patient-specific AIF with time delay" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "0acd442f-013b-473e-a7ac-f9e47b239ff9", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "c_p_patient_highres_early = patient_aif.c_ap(t_patient_highres+100)\n", - "c_p_patient_highres_late = patient_aif.c_ap(t_patient_highres-100)\n", - "\n", - "plt.plot(t_patient_highres, c_p_patient_highres, label='unshifted')\n", - "plt.plot(t_patient_highres, c_p_patient_highres_early, label='early')\n", - "plt.plot(t_patient_highres, c_p_patient_highres_late, label='late')\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)')\n", - "plt.legend()\n", - "plt.title('Patient-specific AIF');" - ] - }, - { - "cell_type": "markdown", - "id": "d30c7325-3453-4e38-a869-7439ed256437", - "metadata": {}, - "source": [ - "### AIFs using in Manning et al., MRM (2021) and Heye et al., NeuroImage (2016)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "id": "3adad35a-c2ec-4394-943e-a5d4ee1d5638", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'concentration (mM)')" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "manning_fast_aif = aifs.manning_fast(hct=0.42, t_start=3*39.62) # fast injection, Manning et al., MRM (2021)\n", - "manning_slow_aif = aifs.manning_slow() # slow injection, Manning et al., MRM (2021)\n", - "heye_aif = aifs.heye(hct=0.45, t_start=3*39.62) # Heye et al., NeuroImage (2016)\n", - "parker_aif = aifs.parker(hct=0.42, t_start=3*39.62)\n", - "\n", - "t = np.arange(0, 1400, 0.1)\n", - "\n", - "# Plot concentration for specific times\n", - "\n", - "plt.figure(0, figsize=(8,8))\n", - "plt.plot(t, manning_fast_aif.c_ap(t), label='Manning (fast injection)')\n", - "plt.plot(t, manning_slow_aif.c_ap(t), label='Manning (slow injection)')\n", - "plt.plot(t, heye_aif.c_ap(t), label='Heye')\n", - "plt.plot(t, parker_aif.c_ap(t), '--', label='Parker')\n", - "plt.legend()\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)')" - ] - } - ], - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/demo/demo_fit_dce.ipynb b/src/demo/demo_fit_dce.ipynb deleted file mode 100644 index 675fb80..0000000 --- a/src/demo/demo_fit_dce.ipynb +++ /dev/null @@ -1,308 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "b4f72b46-d49a-4909-a8ae-51b3e01a8964", - "metadata": {}, - "source": [ - "## How to fit a DCE time series" - ] - }, - { - "cell_type": "code", - "execution_count": 92, - "id": "innovative-jacksonville", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], - "source": [ - "import sys\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "sys.path.append('..')\n", - "import dce_fit, relaxivity, signal_models, water_ex_models, aifs, pk_models\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "id": "appointed-stroke", - "metadata": {}, - "source": [ - "---\n", - "### First assign the signal data to variables" - ] - }, - { - "cell_type": "code", - "execution_count": 93, - "id": "b112f1dd-9c71-411a-8567-3a32e12f68b2", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEGCAYAAACJnEVTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAybElEQVR4nO2deZhU5ZX/P6ehWYyoLYthkU3BCA000GBnQAQ3UAwQ4gJxmxHlN6OOzBiNoEPcgo9rQmLUCXEcMVHBiEY0LiDBgMaOdEOzKUoDDWnpQNtBB1kbOb8/7u2murqqu/Z7q+p8nqeeuve97733fau+dercdzmvqCqGYRhGdpDjdQEMwzCM1GFG3zAMI4swo28YhpFFmNE3DMPIIszoG4ZhZBEtvS5Ac3To0EF79uzpdTGMDKW0tPQLVe2Y6vuaro1k0pSufW/0e/bsSUlJidfFMDIUEdnuxX1N10YyaUrX1rxjGIaRRZjRb4bS7Xt4Ynk5pdv3eF0Uw0gopu3sxPfNO15Sun0PVz5dzOEjR2nVMofnry9iaI88r4tlGHFj2s5ezOg3QfHWGg4fOcpRhdojRyneWhP1D6O2tpbKykoOHjyYpFIakdCmTRu6detGbm6u10XxBU1p2zSbPsSiazP6TVDUuz2tWuZQe+QouS1zKOrdPuprVFZW0q5dO3r27ImIJKGURnOoKjU1NVRWVtKrVy+vi+MLmtK2aTY9iFXXZvSDKN2+h+KtNRT1bs/QHnk8f31Rg/1oOXjwoP14PEZEaN++PdXV1V4XxVMi1bZpNj2IVddm9AMI184Zb1un/Xi8J9u/g2i1ne2fV7oQy/dko3cCCNXOaRiZgGnbqCNuoy8iLURkjYi8EZR+m4ioiHQISJslIuUi8qmIjI333ommrp2zhRBzG77f+PLLL3nyySfr93fu3Mmll17qYYmOcfHFF/Pll18m9JoVFRXk5+cn9JqZQCZq24iNRHj6M4BPAhNE5FTgAmBHQFo/YArQHxgHPCkiLRJw/4RR185564VnZMwQtmCj36VLF15++WUPS3SMN998k5NOOsnrYmQF6aRtPzsqTTF69OiIZllXVVVxySWXAPDBBx8wcOBAhg0bRnl5OeDUf+zYsQQucHX++eezZ09i5lPEZfRFpBswHng66NDPgR8DgctyTQQWqOohVd0GlAPD47l/MhjaI4+bxpzu6Y8ikZNmZs6cyZYtWygoKOD2229v4Alv3LiR4cOHU1BQwMCBA9m8eTP79u1j/PjxDBo0iPz8fBYuXAg4YQO++OILAEpKShg9ejQA+/bt47rrrmPYsGEMHjyY1157rVEZqqqqGDVqFAUFBeTn57Ny5cpG17z//vv5zne+wwUXXMDUqVN59NFHAeeHdMcddzB8+HD69u1bf25FRQVnn302Q4YMYciQIfzlL3+J+7PKdJKp7URq1s+OSiL42c9+xg033ADAY489xqJFi3jggQd46qmnAOe3cOeddzZor7/66qsbfCbxEK+nPxfHuB+tSxCRCcDnqro2KG9X4G8B+5VuWiNEZLqIlIhISbaNuKjrcHtsyadc+XRx3D+iBx98kNNOO42ysjIeeeSRBsf++7//mxkzZlBWVkZJSQndunXj7bffpkuXLqxdu5YNGzYwbty4Jq8/Z84czj33XFatWsXy5cu5/fbb2bdvX4M8L7zwAmPHjqWsrIy1a9dSUFDQ4HhJSQmLFi1izZo1vPLKK428pSNHjvDRRx8xd+5c7r33XgA6derE0qVLWb16NQsXLuSWW26J8RMy4iXRmvWDowLwyCOPMGzYMAYOHMjdd98NOM7GmWeeyQ033ED//v258MILOXDgQP05v//97xs5KMEsWrSo/neVm5vLgQMH2L9/P7m5uWzZsoXPP/+cc845p8E5EyZM4MUXX4zxE21IzEZfRC4BdqtqaUDaccBdwE9CnRIiLeQCvao6T1ULVbWwY8eUB0D0lFR2uH33u9/lgQce4KGHHmL79u20bduWAQMG8O6773LHHXewcuVKTjzxxCavsWTJEh588EEKCgoYPXo0Bw8eZMeOHQ3yDBs2jP/93//lnnvuYf369bRr167B8ffff5+JEyfStm1b2rVrx/e+970GxydPngzA0KFDqaioAJwJRDfccAMDBgzgsssu4+OPP47z0zBiJdGa9YOjsmTJEjZv3sxHH31EWVkZpaWlrFixAoDNmzdz0003sXHjRk466SQWLVpUf14oByWQbdu2kZeXR+vWrQGYNWsW06dPZ+7cudx8883cdddd3H///Y3Oy8vL49ChQ9TUxG8P4vH0RwATRKQCWACcC/wW6AWsddO7AatF5Ns4nv2pAed3A3bGcf+MJJUdbj/84Q9ZvHgxbdu2ZezYsfzpT3+ib9++lJaWMmDAAGbNmsV9990HQMuWLTl61HmgC5ypqaosWrSIsrIyysrK2LFjB2eeeWaD+4waNYoVK1bQtWtXrr76ap577rkGxwPbLkNR9wNp0aIFR44cAeDnP/85p5xyCmvXrqWkpITDhw/H92FEiIg8IyK7RWRDQNo9IvK5iJS5r4tTUhifkErNpspRWbJkCUuWLGHw4MEMGTKETZs2sXnzZgB69epV/7Qa6IhAaAclkKqqKgId2YKCAoqLi1m+fDlbt26lS5cuqCpXXHEFV111Fbt27arP26lTJ3bujN9kxmz0VXWWqnZT1Z44HbR/UtUfqGonVe3pplcCQ1T178BiYIqItBaRXkAf4KO4a5BhJLrDrV27duzduzfksa1bt9K7d29uueUWJkyYwLp169i5cyfHHXccV111FbfddhurV68GnEfl0lLnoS7Qsxk7diyPP/54veFes2ZNo/ts376dTp06ccMNNzBt2rT6a9YxcuRIXn/9dQ4ePMjXX3/NH//4x2br9dVXX9G5c2dycnL47W9/yzfffBPZBxI/z+IMRAjm56pa4L7eTFVh/EAqO4lT5aioKrNmzarPU15ezrRp04BjTgg0dEQCjwWn19G2bduQ4S1UlZ/+9KfMnj2be++9l3vvvZerrrqKX/7yl/V5Dh48SNu2baP+zIJJ2Th9Vd0IvAR8DLwN3KSqKfulphOJ7HBr3749I0aMID8/n9tvv73BsYULF5Kfn09BQQGbNm3immuuYf369fVtpnPmzOG//uu/ALj77ruZMWMGZ599Ni1aHBt0NXv2bGpraxk4cCD5+fnMnj27URnee+89CgoKGDx4MIsWLWLGjBkNjg8bNowJEyYwaNAgJk+eTGFhYbPe2o033sj8+fMpKiris88+41vf+lasH1FUqOoK4B8puVkakUjN+sFRGTt2LM888wxff/01AJ9//jm7d++Ou259+/YN+QQwf/58xo8fT15eHvv37ycnJ4ecnBz2798POH8Kf//730nIwjuq6uvX0KFDNZ35+OOPvS5CWrB3715VVd23b58OHTpUS0tLE36PUN8FUKJRahLoCWwI2L8HqADWAc8AeWHOmw6UACXdu3dPeP0ShR80O3XqVO3fv7/edtttum3bNu3fv7+qqj7wwAPar18/HTRokI4dO1Zramr07bff1gEDBuigQYO0sLBQV61apaqqK1as0D59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880JuZYb334C8Hs36SngNJymnyrgsbqsIU5vFL5WVeepaqGqFnbsmPJJwFlBsnXbHMcff3xE+f7whz9w3333AfD444+Tn5/PxRdfzOHDhwF4//33ufXWW+vzV1dXM27cuISU0Yx+BpHIyTZTp05lwYIFDdIWLFjA1KlTG+U9++yzKSsro6ysjHfffTei63fp0oWXX3457nImmYuA1aq6C0BVd6nqN6p6FPgNx5pw0nUFKF+QTrpNFA8//DA33ngjAE8//TTr1q1j8ODBvPPOO6gq999/P7Nnz67P37FjRzp37swHH3wQ973N6MeAH2cy1k22eWzJp1z5dHHcZbv00kt54403OHToEAAVFRXs3LmTkSNHRn2tP//5z/Ue1eDBg9m7d28Dr2v//v1cfvnlDBw4kCuuuIKzzjqrPkTB8ccfz1133cWgQYMoKipi165dALz++uucddZZDB48mPPPP78+PcFMJaBpp26JPJfv4yyKAem7AlQDvNC1n3W7b98+rrvuOoYNG8bgwYN57TVnsatnn32WyZMnM27cOPr06cOPf/zjBueF0msgn332Ga1bt6ZDhw71abW1tezfv5/c3Fx++9vfcvHFF5OX17CTfdKkSTz//PNR1yMYM/pRkmiRJopET7Zp3749w4cP5+233wYcb+mKK64I2XG0cuXKeqM+Z86cRscfffRRnnjiCcrKyli5ciVt27ZtcPzJJ58kLy+PdevWMXv2bEpLS+uP7du3j6KiItauXcuoUaP4zW9+A8DIkSMpLi5mzZo1TJkyhYcffjiu+gYjIscBFwCvBCQ/LCLrRWQdMAb4TwBV3Qi8BHwMvA3c5PeRO8F4pWs/63bOnDmce+65rFq1iuXLl3P77bezb98+AMrKyli4cCHr169n4cKF/O1vTpdOOL0G8sEHHzBkyJD6/dtuu42ioiKqq6sZMWIE8+fPr38KCKSwsJCVK1fG9sEEYEM2oySUSP0wfT0Zk23qHpUnTpzIggULeOaZZ0LmO/vss3njjTfCXmfEiBHceuutXHnllUyePJlu3bo1OP7+++8zY8YMAPLz8xk4cGD9sVatWnHJJZcAMHToUJYuXQo448GvuOIKqqqqOHz4cFTjlCNBVffjLIsXmHZ1E/nnAI0tR5rgla79rNslS5awePFiHn3UGaF78OBBduzYAcB5553HiSeeCEC/fv3Y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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Input time and signal values (subject 4)\n", - "t = np.array([19.810000,59.430000,99.050000,138.670000,178.290000,217.910000,257.530000,297.150000,336.770000,376.390000,416.010000,455.630000,495.250000,534.870000,574.490000,614.110000,653.730000,693.350000,732.970000,772.590000,812.210000,851.830000,891.450000,931.070000,970.690000,1010.310000,1049.930000,1089.550000,1129.170000,1168.790000,1208.410000,1248.030000])\n", - "s_vif = np.array([411.400000,420.200000,419.600000,399.000000,1650.400000,3229.200000,3716.200000,3375.600000,3022.000000,2801.200000,2669.800000,2413.800000,2321.400000,2231.400000,2152.800000,2138.200000,2059.200000,2037.600000,2008.200000,1998.800000,1936.800000,1939.400000,1887.000000,1872.800000,1840.200000,1820.400000,1796.200000,1773.000000,1775.600000,1762.000000,1693.400000,1675.800000])\n", - "s_tissue = np.array([378.774277,380.712810,378.789773,382.467975,407.950413,443.482955,446.239153,433.392045,425.428202,426.274793,420.676653,417.144112,410.072831,422.042355,414.013430,410.885847,405.251033,415.864669,418.615186,406.327479,408.692149,406.797004,418.646694,408.176136,404.993285,405.098140,417.022211,408.189050,409.819731,401.988636,405.866219,406.299587])\n", - "\n", - "# Specify baseline volumes and calculate the enhancement\n", - "baseline_idx = [0, 1, 2]\n", - "enh_vif = dce_fit.sig_to_enh(s_vif, baseline_idx)\n", - "enh_tissue = dce_fit.sig_to_enh(s_tissue, baseline_idx)\n", - "\n", - "fig, ax = plt.subplots(2,2)\n", - "ax[0,0].plot(t, s_tissue, '.', label='tissue signal')\n", - "ax[1,0].plot(t, s_vif, '.', label='VIF signal')\n", - "ax[1,0].set_xlabel('time (s)');\n", - "ax[0,1].plot(t, enh_tissue, '.', label='tissue enh (%)')\n", - "ax[1,1].plot(t, enh_vif, '.', label='VIF enh (%)')\n", - "ax[1,1].set_xlabel('time (s)');\n", - "[a.legend() for a in ax.flatten()];\n" - ] - }, - { - "cell_type": "markdown", - "id": "c22f291c-01cf-47d4-b959-9bedba3c3bed", - "metadata": {}, - "source": [ - "### Convert enhancement to concentration" - ] - }, - { - "cell_type": "code", - "execution_count": 94, - "id": "b4ca6d90-eb63-41d8-b359-8b5ef745ecff", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEGCAYAAABrQF4qAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnfElEQVR4nO3df3RV1Z338feXJEBAqojY4YcQY9EHgSRCxPgbFRXFBbR1ZvyNpY7LZXlqtahYK+rMtFWrHeuP1mUVq5aCVh1lKH1UFB8cK2qCwUJRRARMYRQiWB80QuT7/HFP4gUuybnh/jj35PNaKyv3np/7m3vzvfvus8/e5u6IiEh8dcl3AUREJLuU6EVEYk6JXkQk5pToRURiToleRCTmivNdgFQOOOAALysry3cxREQKRl1d3SZ375tqXSQTfVlZGbW1tfkuhohIwTCztXtap6YbEZGYU6IvUHVrN3PvwlXUrd2c76KISMRFsulG2la3djPnP7CYbc076FrchVmX1DBqcO98F0tEIkqJvgAtXt3ItuYd7HDY3ryDxasbleil1fbt22loaKCpqSnfRZEs6N69OwMHDqSkpCT0Pkr0BaimvA9di7uwvXkHJcVdqCnvk+8iSYQ0NDTQq1cvysrKMLN8F0cyyN1pbGykoaGBgw8+OPR+SvQRU7d2M4tXN1JT3mePtfRRg3sz65KadreTzqmpqUlJPqbMjD59+rBx48a09lOij5B02t5HDe6tBC97pCQfXx15bdXrJkJStb2LiOwtJfoIaWl7LzLU9i4iGaNEHyEtbe9XnXaYukxKwdqyZQu/+tWvWp+vX7+es88+O48lyr4f/OAHLFq0KPT2a9aswcy44YYbWpdt2rSJkpISpk6dCsA999zDQw89lJHyKdFHzKjBvfneSd9QkpecyuQNeLsm+v79+/PEE0/s9XGj6uOPP2bx4sWccMIJae1XXl7OvHnzWp//4Q9/YNiwYa3Pp0yZwl133ZWRMirRi3RyLZ0A7njuHc5/YPFeJ/vp06fz3nvvUVVVxdVXX82aNWsYPnw4AMuXL2f06NFUVVVRUVHBu+++y9atWxk/fjyVlZUMHz6cxx57DEiMebVp0yYAamtrGTNmDABbt25lypQpHHnkkRxxxBE888wzKctx2223MWLECCorK5k+fToA9fX11NTUUFFRwTe/+U02b07EOmbMGK699lpGjx7NoYceyssvvwzAl19+ybRp0xgxYgQVFRXcfffdu53niSeeYNy4ca3Py8rK+NGPfsTRRx9NdXU1S5Ys4fTTT+eQQw7hvvvua92utLSUoUOHto7r9dhjj/FP//RPret79OhBWVkZr7/+evovwi7U60akk8v0DXi33HILy5Yto76+Hkg0U7S47777uOKKKzj//PPZtm0bX375JfPnz6d///788Y9/BOCTTz5p8/g/+clPOPnkk5k5cyZbtmxh9OjRjB07lp49e7Zu86c//Ymnn36a1157jR49evDxxx8DcNFFF3H33Xdz4oknMmPGDG6++WbuvPNOAJqbm3n99deZP38+N998MwsWLOD+++/n/fff580336S4uLj1OMleeeWV3ZqmDjroIF599VWuvPJKLr74Yl555RWampoYNmwYl112Wet255xzDnPmzOEf/uEfKCoqon///qxfv751fXV1NS+//DKjR49u/w/fBtXoRTq5XHYCOProo/npT3/Krbfeytq1ayktLWXEiBEsWLCAa6+9lpdffpl99923zWM899xz3HLLLVRVVTFmzBiamppYt27dTtssWLCA73znO/To0QOA/fffn08++YQtW7Zw4oknAjB58uSd2tW/9a1vATBq1KjWD6cFCxZw2WWXUVxc3HqcXW3YsIG+fXceHXjChAkAjBgxgqOOOopevXrRt29funfvzpYtW1q3GzduHM8//zyzZ8/mn//5n3c79oEHHrhT4u8oJXqRTi6XnQDOO+885s6dS2lpKaeffjovvvgihx56KHV1dYwYMYLrrruOf/3XfwWguLiYHTt2AOw0nIO78+STT1JfX099fT3r1q1j6NChO53H3dPub96tWzcAioqKaG5uDn2c0tLS3YabaDlWly5dWh+3PG85NkDXrl0ZNWoUd9xxB9/+9rd3O3ZTUxOlpaVpxZGKEr2IZLQTQK9evfj0009Trlu9ejXl5eV8//vfZ8KECbz11lusX7+eHj16cMEFFzBt2jSWLFkCJNq66+rqAHjyySdbj3H66adz99134+4AvPnmm7ud57TTTmPmzJl89tlnQOKC6b777kvv3r1b298fffTR1tr9npx22mncd999rck5VdPN0KFDWbVqVZvHacsPf/hDbr31Vvr02f2b1MqVK1uvb+wNJXoRyag+ffpw7LHHMnz4cK6+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qalJSV46zMzo06cPGzduTGs/tdGL5JiSvOyNjrx/lOhFRGJOiV6kExkzZgzPPvvsTsvuvPNOLr/8ctasWcPw4cMBeOmll9h3332pqqqiqqqKsWPHhj5H8nE6izvvvJNHHnkkrX3MjAsvvLD1eXNzM3379uWss84CYN68edx4440ZKZ8SvUjEZfLmuHPPPZc5c+bstGzOnDmce+65u217/PHHU19fT319PQsWLNjrc8dVc3MzM2fO5Lzzzktrv549e7Js2TI+//xzAJ5//nkGDPhq2tjx48czd+5cPvvssz0dIjQlepEIa7k57o7n3uH8BxbvdbI/++yzmTdvHl988QWQqH2vX7+e4447Lu1j3XTTTVx44YWcfPLJDBkyhN/85je7bbNmzRqOP/54Ro4cyciRI/nzn/8MwIYNGzjhhBOoqqpi+PDhvPzyywDss88+XHvttYwaNYqxY8fy+uuvM2bMGMrLy5k7d26bx9zVI488QkVFBZWVla0157Vr13LKKadQUVHBKaecwrp16wC4+OKL+f73v88xxxxDeXk5TzzxROtxbrvtNkaMGEFlZSXTp+8+xfCLL77IyJEjKS5O9G0ZM2YMV155JSeccAJDhw7ljTfe4Fvf+hZDhgzhxz/+8U77nnHGGfzxj38EYPbs2Tt94JoZY8aMYd68eSFejXbkYDaW7iSmLlsKLAdubm+fUaNGuUgc/fWvf01r+3tefNcPnj7PB187z8unz/N7Xnx3r8tw5pln+tNPP+3u7j/72c982rRp7u7+/vvv+7Bhw9zdfeHChf61r33NKysrvbKy0v/93/99t+PceOONXlFR4Z999plv3LjRBw4c6H/72992Os7WrVv9888/d3f3lStXesv/9u233956zObmZv/73//u7u6Az58/393dJ02a5Keeeqpv27bN6+vrvbKyss1jJlu2bJkfeuihvnHjRnd3b2xsdHf3s846y3/729+6u/uDDz7oEydOdHf3yZMn+9lnn+1ffvmlL1++3A855BB3d58/f74fffTRvnXr1p2Ok2zGjBl+1113tT4/8cQT/ZprrnF39zvvvNP79evn69ev96amJh8wYIBv2rTJ3d179uzpS5cu9W9/+9v++eefe2VlpS9cuNDHjx/feqzf/e53PnXq1N3Omep9BNT6HnJqLrpXfgGc7O7/L5gk+7/N7E/uvjgH5xYpaNm4Oa6l+WbixInMmTOHmTNnptzu+OOPb7c2OXHiREpLSyktLeWkk07i9ddfp6qqqnX99u3bmTp1KvX19RQVFbFy5UoAjjzySKZMmcL27duZNGlS6z5du3Zl3LhxAIwYMYJu3bpRUlLCiBEjWLNmTZvHTPbiiy9y9tlnc8ABBwCw//77A/Dqq6/y1FNPAXDhhRdyzTXXtO4zadIkunTpwuGHH86HH34IwIIFC/jOd75Djx49djpOsg0bNjB06NCdlk2YMKE1hmHDhtGvXz8AysvL+eCDD+jTJ/E6VlRUsGbNGmbPns2ZZ56527EPPPBA1q/f+znDs950E3zY/L/gaUnwo/kLRUJouTnuqtMOy9iYRpMmTeKFF15gyZIlfP7554wcObLDx9q1q9+uz//jP/6Dr3/96yxdupTa2lq2bdsGwAknnMCiRYsYMGAAF154YeuFzJKSktZjdOnShW7durU+bm5ubvOYydw9VDfE5G1aztWyf9jjlJaW7nanc3K5k4+bHEeLCRMmMG3atJTXSZqamigtLW03jvbkpI3ezIrMrB74CHje3V/LxXlF4mDU4N5876RvZOwGuX322YcxY8YwZcqUlMklHc888wxNTU00Njby0ksvceSRR+60/pNPPqFfv3506dKFRx99lC+//BJItJUfeOCB/Mu//Avf/e53WbJkSehz7umYyU455RQef/xxGhsT40B9/PHHABxzzDGtF6NnzZrV7rWJ0047jZkzZ7ZeEG05TrKhQ4eyatWq0OXf1ZQpU5gxYwYjRozYbd3KlSsz0oMpJ4ne3b909ypgIDDazHYruZldama1Zlab7l1fIpKec889l6VLl3LOOefs1XFGjx7N+PHjqamp4YYbbqB///47rb/88st5+OGHqampYeXKlfTs2RNIdN+sqqriiCOO4Mknn+SKK64Ifc49HTPZsGHDuP766znxxBOprKzkqquuAuCuu+7ioYceoqKigkcffZRf/vKXbZ5r3LhxTJgwgerqaqqqqrj99tt32+aMM85g0aJFocu/q4EDB+4x/oULFzJ+/PgOH7uFtXxFyRUzuxHY6u67/8UC1dXVrolHJI5WrFixW3tuobrpppvYZ599mDZtWr6Lknff/OY3ue222xgyZEjGjvnhhx9y3nnn8cILL+y2LtX7yMzq3L061bGyXqM3s75mtl/wuBQY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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# First define some relevant parameters\n", - "R10_tissue, R10_vif = 1/1.3651, 1/1.7206\n", - "k_vif, k_tissue = 0.9946, 1.2037 # flip angle correction factors\n", - "hct = 0.46 # haematocrit\n", - "\n", - "# Define model\n", - "c_to_r_model = relaxivity.c_to_r_linear(r1=5.0, r2=7.1)\n", - "signal_model = signal_models.spgr(tr=3.4e-3, fa=15, te=1.7e-3)\n", - "\n", - "# Calculate concentrations\n", - "C_t = dce_fit.enh_to_conc(enh_tissue, k_tissue, R10_tissue, c_to_r_model, signal_model)\n", - "c_p_vif = dce_fit.enh_to_conc(enh_vif, k_vif, R10_vif, c_to_r_model, signal_model) / (1-hct)\n", - "\n", - "fig, ax = plt.subplots(2,1)\n", - "ax[0].plot(t, C_t, '.', label='tissue conc (mM)')\n", - "ax[0].set_xlabel('time (s)');\n", - "ax[1].plot(t, c_p_vif, '.', label='VIF plasma conc (mM)')\n", - "ax[1].set_xlabel('time (s)');\n", - "[a.legend() for a in ax.flatten()];" - ] - }, - { - "cell_type": "markdown", - "id": "ca8df92a-1d1c-4b01-a7dd-4a0a711f5d44", - "metadata": {}, - "source": [ - "### Fit a pharmacokinetic model to the concentration" - ] - }, - { - "cell_type": "code", - "execution_count": 97, - "id": "revised-exclusion", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 2.99 ms\n", - "Fitted parameters: {'vp': 0.00809450142169518, 'ps': 0.0002000164190906914}\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "aif = aifs.patient_specific(t, c_p_vif)\n", - "pk_model = pk_models.patlak(t, aif)\n", - "\n", - "weights = np.concatenate([np.zeros(7), np.ones(25)]) # exclude first few points from fit\n", - "pk_pars_0 = [{'vp': 0.2, 'ps': 1e-4}] # starting parameters (just use 1 set used here)\n", - "\n", - "%time pk_pars, C_t_fit = dce_fit.conc_to_pkp(C_t, pk_model, pk_pars_0, weights) # fit the model\n", - "\n", - "plt.plot(t, C_t, '.', label='tissue conc (mM)')\n", - "plt.plot(t, C_t_fit, '-', label='model fit (mM)')\n", - "plt.legend();\n", - "\n", - "print(f\"Fitted parameters: {pk_pars}\")\n", - "# Expected: vp = 0.0081, ps = 2.00e-4" - ] - }, - { - "cell_type": "markdown", - "id": "2e1a7e53-a789-4647-aedd-2371e5bde358", - "metadata": {}, - "source": [ - "### Alternative approach: fit in signal space\n", - "To do this, we also need to create a water_ex_model object, which determines the relationship between R1 in each tissue compartment and the exponential R1 components. \n", - "We start by assuming the fast water exchange limit (as implicitly assumed above when estimating tissue concentration).\n", - "The result should be very similar to fitting the concentration curve." - ] - }, - { - "cell_type": "code", - "execution_count": 98, - "id": "3c6a81c4-6fcd-45a0-84e6-88a8f692a4cb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 9.03 ms\n", - "Fitted parameters: {'vp': 0.008081272691150205, 'ps': 0.000199355294176923}\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnPElEQVR4nO3deXhUZZr38e+dhU1AIpsgSAAV2ZcEiKIIoiCguEz3tLbbqEjbjQO2o6Poq7jStls7rlyOOo0N2rTiNjba2DYOYhshUUA2WSJoACUGRJQ15Hn/OCehAhWSVFVSVSe/z3XVVafOUud+stx16j7PeY455xARkeBKiXcAIiJSu5ToRUQCToleRCTglOhFRAJOiV5EJODS4h1AOK1atXKZmZnxDkNEJGnk5+d/55xrHW5ZQib6zMxM8vLy4h2GiEjSMLONlS1T6UZEJOCU6EVEAk6JXkQk4BKyRi8idWv//v0UFhayZ8+eeIciVWjUqBEdOnQgPT292tso0YsIhYWFNGvWjMzMTMws3uFIJZxzFBcXU1hYSOfOnau9nUo3IsKePXto2bKlknyCMzNatmxZ429eVR7Rm9kLwLnAVudcL3/ebKCbv0oL4HvnXL8w224AdgIHgBLnXHaNopNK5W/cTm5BMTldWpLVKSPe4UgAKMknh0h+T9Up3fwReBJ4sWyGc+4XITt9BNhxhO2HO+e+q3FkUqn8jdu59Llc9pWU0iAthVnjc5TsRaRSVZZunHMLgG3hlpn30fKvwMsxjkuOILegmH0lpZQ62F9SSm5BcbxDEpEEFm2N/nTgW+fc2kqWO2CemeWb2YQjvZGZTTCzPDPLKyoqijKsYMvp0pIGaSmkGqSnpZDTpWW8QxKJyvfff8/TTz9d/nrz5s387Gc/i2NE1TNs2LBqXcW/ZcsWzj33XAA++ugj+vTpw8CBA1m3bh3gtX/UqFGE3gjqrLPOYvv27TGJM9pEfwlHPpof4pwbAIwGJprZ0MpWdM4965zLds5lt24ddrgG8WV1ymDW+BxuHNlNZRuJm/yN23lq/jryN0afjA5N9O3bt+fVV1+N+n0TxaOPPsq1114LwCOPPMKcOXOYNm0azzzzDAD33nsvt912W4X6++WXX17hZxKNiBO9maUBFwGzK1vHObfZf94KvA4MinR/UlFWpwwmDj9BSV7iouw80SPzvuDS53KjTva33nor69evp1+/ftx8881s2LCBXr16AbBixQoGDRpEv3796NOnD2vXruWnn35i7Nix9O3bl169ejF7tpeGMjMz+e4775RgXl4ew4YNA+Cnn37i6quvZuDAgfTv358333wzbBwPPfQQAwcOpE+fPkydOhWADRs20L17d6699lp69uzJyJEj2b17d/k2r7zyCoMGDeKkk07iww8/DPu+c+bM4ZxzzgEgPT2d3bt3s2vXLtLT01m/fj2bNm3ijDPOqLDNuHHjePnl2FTFozmiPwtY7ZwrDLfQzI4ys2Zl08BIYHkU+xORBBHr80QPPPAAXbt2ZcmSJTz00EMVlk2fPp3JkyezZMkS8vLy6NChA++++y7t27dn6dKlLF++vDyJVub+++/nzDPPZPHixcyfP5+bb76Zn376qcI68+bNY+3atSxatIglS5aQn5/PggULAFi7di0TJ05kxYoVtGjRgjlz5pRvV1JSwqJFi3jssce4++67D9v3l19+SUZGBg0bNgRgypQpTJgwgccee4zrr7+e22+/nXvvvfew7TIyMti7dy/FxdGfg6sy0ZvZy8DHQDczKzSza/xFF3NI2cbM2pvZXP9lW2ChmS0FFgF/dc69G3XEIhJ3dXme6JRTTmHatGn8/ve/Z+PGjTRu3JjevXvz97//nVtuuYUPP/yQo48++ojvMW/ePB544AH69evHsGHD2LNnD1999dVh68ybN4/+/fszYMAAVq9ezdq13unHzp07069fPwCysrLYsGFD+XYXXXRR2PlltmzZQmg5ul+/fuTm5jJ//nwKCgpo3749zjl+8YtfcNlll/Htt9+Wr9umTRs2b95ckx9XWFV2r3TOXVLJ/H8LM28zMMafLgD6RhlfvaP+8ZIMys4T1cXf6i9/+UsGDx7MX//6V0aNGsVzzz3HmWeeSX5+PnPnzmXKlCmMHDmSO++8k7S0NEpLSwEqXFTknGPOnDl069atst3gnGPKlCn86le/qjB/w4YN5UfjAKmpqRVKN2XLUlNTKSkpOex9GzduHPYCJ+cc9913H7Nnz+b666/n7rvvZsOGDTz++OPcf//95W1o3LhxdX5MR6QrYxNIrOueIrUplueJmjVrxs6dO8MuKygooEuXLkyaNIlx48axbNkyNm/eTJMmTbjsssu46aab+PTTTwGvRp+fnw9QobwyatQonnjiifJeLZ999tlh+xk1ahQvvPACP/74IwCbNm1i69atUbftpJNOCnukP2PGDMaOHUtGRga7du0iJSWFlJQUdu3aBXgfBN988w2xuAmTxrpJIOHqnjqql/qgZcuWDBkyhF69ejF69GgmTpxYvmz27NnMnDmT9PR0jj32WO68804WL17MzTffTEpKCunp6eW9V6ZOnco111zDtGnTGDx4cPl73HHHHdxwww306dMH5xyZmZm8/fbbFWIYOXIkq1at4pRTTgGgadOmzJw5k9TU1KjadtRRR9G1a1fWrVvHCSecAMCuXbuYMWMG8+bNA+DGG2/kX/7lX2jQoEH5Cdj8/HxycnJIS4s+TVtov81EkZ2d7erjHabKjuj3l5SSritepQ6tWrWK7t27xzuMwHr99dfJz8/nvvvuq/Y2kydPZty4cYwYMeKwZeF+X2aWX9kwMzqiTyB1WfcUkbpz4YUX1rj3TK9evcIm+Ugo0SeYrE4ZSvAiATR+/PgarV92gVUs6GSsiEjAKdGLiAScEr2ISMAp0YuIBJwSvYgETujgZjVd55VXXqF79+4MHz6cvLw8Jk2aBMAHH3zAP//5z0rf74033uCee+4B4IknnqBXr16MGTOGffv2AbBw4UJuvPHG8vWLioqqHKMnVpToRURCPP/88zz99NPMnz+f7OxsHn/8caDqRP/ggw/ym9/8BoDnnnuOZcuW0b9/f/72t7/hnOPee+/ljjvuKF+/devWtGvXjo8++qh2G4S6V4rIod65Fb75PLbveWxvGP1ApYs3bNjAOeecw2mnnUZubi59+/blqquuYurUqWzdupVZs2YxaNAgtm3bxtVXX01BQQFNmjTh2WefpU+fPhQXF3PJJZdQVFTEoEGDKtzAY+bMmTz++OPs27ePwYMH8/TTT1d6tes999zDwoUL+fLLLxk3bhxjx47l4Ycf5sknn2T69OmkpqYyc+ZMnnjiCU4//fTy7dasWUPDhg1p1apV+bz9+/eXD0X8pz/9iTFjxpCRUbHr9AUXXMCsWbMYMmRIpD/ZatERvYgkhHXr1jF58mSWLVvG6tWreemll1i4cCEPP/ww06ZNA7whDvr378+yZcuYNm0aV1xxBQB33303p512Gp999hnjxo0rH5ly1apVzJ49m48++oglS5aQmprKrFmzKo3hzjvvJDs7m1mzZlUYLjkzM5PrrruO3/72tyxZsqRCkgfvrlEDBgwof33TTTeRk5NDUVERQ4YMYcaMGeVH+6Gys7MrHcM+lnRELyIVHeHIuzZ17tyZ3r17A9CzZ09GjBiBmdG7d+/yQcEWLlxYPljZmWeeSXFxMTt27GDBggW89tprAOUDhQG8//775OfnM3DgQAB2795NmzZtYh77oUMRX3755Vx++eWA9yE0adIk3nnnHV588UU6duzII488QkpKSsyGIa6KEr2IJITQoYBTUlLKX6ekpJQP/xtubK6y2++F3oavjHOOK6+8kt/97ne1EXK5xo0bs2PHjsPmb968mcWLFzN16lQGDRrExx9/zO23387777/P2WefHbNhiKui0o2IJI2hQ4eWl14++OADWrVqRfPmzSvMf+edd8pvqj1ixAheffXV8uGGt23bxsaNGyPa95GGUu7evXv5jb5D3XHHHeV3j9q9ezdmVmEo4jVr1pTfMrE2KdEH2aZ8ePpUKFoT70hEYuKuu+4iLy+PPn36cOuttzJjxgzAq90vWLCAAQMGMG/ePI4//ngAevTowX333cfIkSPp06cPZ599Nlu2bIlo3+eddx6vv/46/fr1O6yuPnToUD777LMK3zjKxrzv378/ANdccw29e/fm008/Le9WOX/+fMaOHRtRPDWhYYqD7IfN8GgPGH4bnPGf8Y5GEpiGKY7e5MmTOe+88zjrrLOqvc3QoUN58803D+uNU5WaDlOsI/oga94ejj8FVrwe70hEAu+2224rL8lUR1FRETfeeGONk3wkqnNz8BfMbKuZLQ+Zd5eZbTKzJf5jTCXbnmNmX5jZOjO7NZaBSzX1vBC2roStq+MdiSS4RPx2n0zatm3LuHHjqr1+69atueCCC2q8n0h+T9U5ov8jEO463T845/r5j7mHLjSzVOApYDTQA7jEzHrUOEKJTo9xgMHKN+IdiSSwRo0aUVxcrGSf4JxzFBcX06hRoxptV2X3SufcAjPLjCCmQcA651wBgJn9GTgfWBnBe0mkmh0LnYZ45Zth+lIl4XXo0IHCwkKKioriHYpUoVGjRnTo0KFG20TTj/56M7sCyAP+wzm3/ZDlxwFfh7wuBAZTCTObAEwAys+YS4z0vADm3gRbV0EbnXCTw6Wnp9O5c+d4hyG1JNKTsc8AXYF+wBbgkTDrHH71AlT6vdA596xzLts5lx16hZnEQPdxYCk6KStST0WU6J1z3zrnDjjnSoH/xivTHKoQ6BjyugNQ+9f6yuGatT1YvlENVqTeiSjRm1m7kJcXAsvDrLYYONHMOptZA+Bi4K1I9icx0PNC+G6N1wNHROqV6nSvfBn4GOhmZoVmdg3woJl9bmbLgOHAb/1125vZXADnXAlwPfA3YBXwF+fcilpqh1RF5RuRektXxtYnM8bBD5vg+jwIMwCUiCQvXRkrnp4XQvE6+DZcpU1EgkqJPuDyN27nqfnryN+4HbqfB5aq8o1IPaPx6AMsf+N2Ln0ul30lpTRIS2HW+ByyOg/1Ev2Zd6h8I1JP6Ig+wHILitlXUkqpg/0lpeQWFHvlm20F8M2yeIcnInVEiT7Acrq0pEFaCqkG6Wkp5HRpqfKNSD2k0k2AZXXKYNb4HHILisnp0pKsTv5wqF2GeYl+xFSVb0TqAR3RB1xWpwwmDj/hYJIHr3yzfQNsWRKvsESkDinR10cnj4WUNJVvROoJJfr6qMkx0GW4xr4RqSeU6OurnhfC91/B5k/jHYmI1DIl+vrq5DGQkq7yjUg9oERfXzXOgK5nwoo3VL4RCTgl+vqs54Ww42vYlB/vSESkFinR12fdRkNqA5VvRAJOib4+a9wCuo7wyjelpfGORkRqiRJ9fdfzQvihEDZp/H+RoFKir++6jYbUhirfiASYEn1916g5nHCWX745EO9oRKQWKNEL9LsEdm6GRf8d70hEpBZU5+bgL5jZVjNbHjLvITNbbWbLzOx1M2tRybYb/JuILzEzFYET1cnnwglnw/v3wPaN8Y5GRGKsOkf0fwTOOWTee0Av51wfYA0w5QjbD3fO9avsprWSAMzg3D94z2/foAuoRAKmykTvnFsAbDtk3jznXIn/MhfoUAuxSV1q0RHOugvW/wOWvhzvaEQkhmJRo78aeKeSZQ6YZ2b5ZjbhSG9iZhPMLM/M8oqKimIQltRY9jXQMQfenQI7vz1scYUbjYtI0ogq0ZvZ7UAJMKuSVYY45wYAo4GJZja0svdyzj3rnMt2zmW3bt06mrAkUikpcP6TsH83vHNzhUVlNxp/ZN4XXPpcrpK9SBKJONGb2ZXAucClzoUv6jrnNvvPW4HXgUGR7k9qT4Uj9VYnwrBbYOWbsPKt8nXC3mhcRJJCRPeMNbNzgFuAM5xzuypZ5yggxTm3058eCdwTcaRSK8qO1PeVlNIgLYVZ43PIOnWSdwHV3Jug8+nQOKP8RuP7S0oP3mhcRJJCdbpXvgx8DHQzs0IzuwZ4EmgGvOd3nZzur9vezOb6m7YFFprZUmAR8Ffn3Lu10gqJWNgj9dR0GPck/PQdzPt/wMEbjd84spv3YRB6D1oRSWhVHtE75y4JM/v5StbdDIzxpwuAvlFFJ7Wu0iP19v1gyCRY+Afo/XPoMoysThlK8CJJyCopr8dVdna2y8vT9VV1JX/jdnILisnp0rJiIt+/G54ZAqUl8JuPocFR8QtSRI7IzPIru15JQyAIWZ0ymDj8hMOP1tMbw7gn4PuN8I/74xOciERNiV6OLHOI178+92n4enG8oxGRCCjRS9XOuguat4e3roeSvfGORkRqSIleqtaouTcWTtFqWPBQvKMRkRpSopfqOWkU9LnYS/TvToED++MdkYhUU0QXTEk9Ne4J7z6zuU/D5s/g53+EZsfGOyrgCD2HRESJXmogrQGM/j10GAhv/TtMP91L9plD4hpW2Kt7lexFyql0IzXX+2dw7T+82v2M8+CfT8R1DHuNwyNyZEr0Epk23eHa+XDyGG+YhFeuhL074xJK2dW9qYbG4REJQ1fGSnSc847o/34XHNMFfjGT/N1t67xerhq91HdHujJWiV5iY8NCeOUqDuz9kZv2jefN/Tmql4vUIQ2BILUv8zT41QK+bXIif0h5nIkpr6leLpIglOgldpq3Y8uFr/K/pUO4IW0OA9IKVC8XSQBK9BJTWZ3b0OHy6exu2JoZrWaSdZxGvBSJNyV6ibn+Jx5P04v+iybbV8M//yve4YjUe0r0UjtOHgM9L4T/exCK1sQ7mqRR4f69CSaRY5Mj05WxUntGPwjr58P/ToJ/mwspOq44kkS+wjeRY5Oq6T9Pak/TNjDqfvjqY8j/n3hHk/AS+QrfRI5Nqladm4O/YGZbzWx5yLxjzOw9M1vrP4f9aDezc8zsCzNbZ2a3xjJwSRL9LoXOZ8B7U+GHzfGOJqEl8hW+iRybVK3KC6bMbCjwI/Cic66XP+9BYJtz7gE/gWc45245ZLtUYA1wNlAILAYucc6trCooXTAVMNsK4OlToetwuPglMAN0NWs4ifwzSeTY5MgXTFVZo3fOLTCzzENmnw8M86dnAB8AtxyyziBgnXOuwA/iz/52VSZ6CZhjusDw2+C9O2Dlm9DzAtV8K5HVKSNhfw6JHJs+hI4s0hp9W+fcFgD/uU2YdY4Dvg55XejPC8vMJphZnpnlFRUVRRiWJKyc30C7vjD3Zti1TTVfiZmyg4ZH5n3Bpc/lqldQGLV5MtbCzKu0TuSce9Y5l+2cy27dunUthiVxkZrm3bhkVzG8d4dqvhIzOmioWqTdK781s3bOuS1m1g7YGmadQqBjyOsOgM7G1Wft+sKp/w4fPUZW758za3xOvfm6rdJC7Sk7aNhfUqqDhkpUa/RKv0b/dsjJ2IeA4pCTscc45/7zkG3S8E7GjgA24Z2M/aVzbkVV+9PJ2ADbvxueOdUb3vjX/4QGTeIdUa3T+Yjapw/SKEevNLOXgY+BbmZWaGbXAA8AZ5vZWrxeNQ/467Y3s7kAzrkS4Hrgb8Aq4C/VSfIScOmN4bz/gu1fwge/i3c0dUKlhdqX1SmDicNPqLdJvirV6XVzSSWLRoRZdzMwJuT1XGBuxNFJMHUeCgOugI+fhC5nQNcR5V0ug0ilBYk33XhE4mP3dpg+FHZ8Be37w+Bfe2PjpDWId2S1QqUFqW26w5Qkpn0/wdKXIXc6FK+Fpm1h4HjIugqaqueVSE0o0UtiKy2F9f+AT56BdX+H1IbQ++eQcx0c2zumu9KRtQRVVFfGitS6lBQ48SzvUbQGPpnuHekvmQmdTvMSfrcxkJIa1W7U+0XqK41eKYml9Ulw7qNw40o4+174fiPMvgwe6wP/9xDs/Cbit1bvF6mvlOglMTXOgCGTYNIS+Nc/QasTYP598Iee8JcroOADry9+DehqXKmvVKOX5FG8HvJegCWzvF47LU+A7Kuh7yXQ5JhqvYVq9BJUOhkrwbJ/tzcK5uLnoXARpDWCnhdB9lXQYWCg++SLVEYnYyVY0htD34u9xzefewl/2V9g6UvQohP0vAB6XOD1z1fSF9ERvQTEnh+8o/yVb3j1+9ISL+n3ON+7EEtJXwJOpRupX3Ztg9V/PSTpH+8d5Ycm/dJSKNnjlYJKdnvP5Y9d3gVcbbrrA0KSghK91F+7tsEXc2HFG1Aw30v6DZp6zyV7qtx8T/PONOpzoffNoF1fJX1JWEr0InAw6W9Z6p3ATW8C6f5z+evGrN1ewt3vFHB8aSFj0xZxaspKzB3wvxWc730zOC5LSV8SihK9JLW67hL51Px1PDLvC0odpBpMGd6W8a1Xe+cA1s+H0v3Q/DjoPs5L/G1OBks5/IGFvLbYfTAc2A+lB7wPKRGfet1I0orHsAWHDivcv1tX6JQN/S+D3d/Dmndh5Vten/5Pnqn+G6c1hoZNvdJRw6bQoNnhr9Mbe+cH9vwAe/3Hnh9g786D0yW7AYO2PaHjIOg42HvO6KxvGTEStOstlOgloYUbtqC2//GyOmVUfpvDxi0Odu3cuxPWvucNy+BKAec9V3g4/3HAG61z34+w98eD0z9uhX0F/rwfvSSffhQ0ag4Nm0HD5t5VwhmdvOmGzaDR0d5R/aY8+PxV7wMH4KjWB5N+x8HQrp931H+gBH78BnYUHv74wX9Oa+SdeG7Tw/sAadMdWp/sffDUM0EcE0mJXhJavG7akdUpo+p/7obNoNdFdRJPpUoPQNFq+PoT+HqR97z6bW9ZSjo0beN/EB2ouF2jo+Hojl4JqsNAr6fRtytg0X/Dgb3eOpYCx3TxPwD85N+gKRzY5z/2h0yHPEoPeD+bxhn+4xjvuckx3n6jHJyuti1eu4m2JVtowH4aHSihYMlesuzYg+0tLTk4beZ9oGZkJvS3KdXoJeEF7Wt0rfuxCAoX8c3y/2N70SZaHNuZdh27eon96A5w9HFeIg7nQIl3m8dvV8DWVbDVf95W4H9riYFGR3vJvyzphzu/YaHnN1IhraH3rSOtkT/dMGSe/5zawJtObVD5dFpD75vYzi3eB2C45z07at6m5h0g8zTofLr3nJEZm59VDdTKyVgz6wbMDpnVBbjTOfdYyDrDgDeBL/1Zrznn7qnqvZXoRaIT8/LD/t3w3Roo2Qep6QcTaLjplFQvme7efvCxa1vIa396zw7v6L+szEVZmeuQ8lfZ0XPJXv+x5+Bz6f7oflApadCsHTQ71n940xv2NmP1tgOccGwGJxx7DKSmed+QUv1H2fSBfd43qQ0fwoaFsMsfEfXo472EX/bI6BRdnNVQKydjnXNfAP38HaQCm4DXw6z6oXPu3Ej3ExQ6KpW6FPNzG+mNvesIqsH7W9/m/613jXyf1VFa6pWaypP/Xv+DoWzaLyeV7IMDeyn4Zhsrviula9cT6HFSN++bRcrhg/hm+o9qadcXBl3rfUgVrfYS/pcLvJP2S1/y1mnSyvs2QVnvK7/MY1Scd1QrGP/3qH4k4cSqRj8CWO+c2xij9wuUIJ7ckcQWr3Mbdf63npICKY2rddI4f+N2Ln3fj23pD8wan0pWpxiO1G7mn8/o7iX+0tKDif/bz73XZd9aIGQ65Llh89jFEyJWif5i4OVKlp1iZkuBzcBNzrkVMdpn0ohHzxGp347Yc6gWJfLfep3HlpICbXt4jziLOtGbWQNgHDAlzOJPgU7OuR/NbAzwBnBiJe8zAZgAcPzxx0cbVkKJ19GV1G/V6jkUY4n8t57IsdW2qHvdmNn5wETn3MhqrLsByHbOfXek9YJ4MlY1eklUsf7bTOS/9USOLVq1fWXsJVRStjGzY4FvnXPOzAbh3bqwXt6oMx5HVxJMsUxWtVFTT+S/9USOrTY/hKJK9GbWBDgb+FXIvOsAnHPTgZ8BvzazEmA3cLFLxI77Ikki1ok5kWvq9Ultn8SOKtE753YBLQ+ZNz1k+kngyWj2ISIHxTox1+e6dV2pzpF6bX/gaggEkSjUdc031ok5Xr1z6ovqHqnX9geuEr1IhOJxfURtJOZ41K2r+wGZ7CdPq3ukXtsfuEr0IhGKV307kU8oVkd1PyCDcKFhTY7Ua/P3qkQvEiHVtyNT3Q/IIJwoTpTSmBK9SIQS5Z842VT3AzIoH6SJ8A1MwxSLSJ2rLzX6uqRbCYpIQqnuUW4iHA0HQQyHbhMRkUSkRC8iEnBK9CIiAadELyISofyN23lq/jryN26PdyhHpJOxIiIRSKYLunRELyISgXAXdCUqJXoRkQiUXdCVaiT8BV0q3YiIRCCZroxWohcRiVCyXNCl0o2ISMAp0YuIBJwSvYhIwEWV6M1sg5l9bmZLzOyw4SbN87iZrTOzZWY2IJr9iYhIzcXiZOxw59x3lSwbDZzoPwYDz/jPIiJSR2q7dHM+8KLz5AItzKxdLe9TRERCRJvoHTDPzPLNbEKY5ccBX4e8LvTnHcbMJphZnpnlFRUVRRmWiIiUiTbRD3HODcAr0Uw0s6GHLLcw24S9pZVz7lnnXLZzLrt169ZRhiUiImWiSvTOuc3+81bgdWDQIasUAh1DXncANkezTxERqZmIE72ZHWVmzcqmgZHA8kNWewu4wu99kwPscM5tiThaERGpsWh63bQFXjezsvd5yTn3rpldB+Ccmw7MBcYA64BdwFXRhSsiIjUVcaJ3zhUAfcPMnx4y7YCJke5DRESipytjRUQCToleRCTglOhFRAJOiV5EJOCU6EVEAk6JXkQk4JToRUQCToleRCTglOhFRAJOiV5EJOCU6EVEAk6JXkQk4JToRUQCToleRCTglOhFRAJOiV5EJOCU6EVEAk6JXkQk4JToRUQCLuJEb2YdzWy+ma0ysxVmNjnMOsPMbIeZLfEfd0YXroiI1FTENwcHSoD/cM59ambNgHwze885t/KQ9T50zp0bxX5ERCQKER/RO+e2OOc+9ad3AquA42IVmIiIxEZMavRmlgn0Bz4Js/gUM1tqZu+YWc8jvMcEM8szs7yioqJYhCUiIsQg0ZtZU2AOcINz7odDFn8KdHLO9QWeAN6o7H2cc88657Kdc9mtW7eONiwREfFFlejNLB0vyc9yzr126HLn3A/OuR/96blAupm1imafIiJSM9H0ujHgeWCVc+7RStY51l8PMxvk76840n2KiEjNRdPrZghwOfC5mS3x590GHA/gnJsO/Az4tZmVALuBi51zLop9iohIDUWc6J1zCwGrYp0ngScj3YeIiERPV8aKiAScEr2ISMAp0YuIBJwSvYhIwCnRi4gEnBK9iEjAKdGLiAScEr2ISMAp0YuIBJwSvYhIwCnRi4gEnBJ9lPI3buep+evI37g93qGIiIQVzeiV9V7+xu1c+lwu+0pKaZCWwqzxOWR1yoh3WCIiFeiIPgq5BcXsKyml1MH+klJyCzTUvogkHiX6KOR0aUmDtBRSDdLTUsjp0jLeIYmIHEalmyhkdcpg1vgccguKyenSUmUbEUlI9TLR52/cHrPknNUpQwleRBJavUv0OoEqIvVNvavR6wSqiNQ3USV6MzvHzL4ws3VmdmuY5WZmj/vLl5nZgGj2Fws6gSoi9U3EpRszSwWeAs4GCoHFZvaWc25lyGqjgRP9x2DgGf85bnQCVUTqm2hq9IOAdc65AgAz+zNwPhCa6M8HXnTOOSDXzFqYWTvn3JYo9hs1nUAVkfokmtLNccDXIa8L/Xk1XQcAM5tgZnlmlldUVBRRQLEcjkBDG4hIUERzRG9h5rkI1vFmOvcs8CxAdnZ22HWOJJa9adQzR0SCJJoj+kKgY8jrDsDmCNaJiVj2plHPHBEJkmgS/WLgRDPrbGYNgIuBtw5Z5y3gCr/3TQ6wo7bq87HsTaOeOSISJBGXbpxzJWZ2PfA3IBV4wTm3wsyu85dPB+YCY4B1wC7gquhDDi+WvWnUM0dEgsS8DjGJJTs72+Xl5cU7DBGRpGFm+c657HDL6t2VsSIi9Y0SvYhIwCnRi4gEnBK9iEjAKdGLiAScEr2ISMAlZPdKMysCNlZj1VbAd7UcTm0LQhtA7UgkQWgDBKMdddmGTs651uEWJGSiry4zy6us32iyCEIbQO1IJEFoAwSjHYnSBpVuREQCToleRCTgkj3RPxvvAGIgCG0AtSORBKENEIx2JEQbkrpGLyIiVUv2I3oREamCEr2ISMAlZaI3s3PM7AszW2dmt8Y7niMxs45mNt/MVpnZCjOb7M8/xszeM7O1/nNGyDZT/LZ9YWaj4hd9RWaWamafmdnb/utkbEMLM3vVzFb7v5NTkq0dZvZb/29puZm9bGaNkqENZvaCmW01s+Uh82oct5llmdnn/rLHzSzcLUvruh0P+X9Ty8zsdTNrkVDtcM4l1QPvJifrgS5AA2Ap0CPecR0h3nbAAH+6GbAG6AE8CNzqz78V+L0/3cNvU0Ogs9/W1Hi3w4/tRuAl4G3/dTK2YQYw3p9uALRIpnYAxwFfAo39138B/i0Z2gAMBQYAy0Pm1ThuYBFwCt49qd8BRidAO0YCaf707xOtHcl4RD8IWOecK3DO7QP+DJwf55gq5Zzb4pz71J/eCazC+2c9Hy/p4D9f4E+fD/zZObfXOfcl3t25BtVp0GGYWQdgLPBcyOxka0NzvH/S5wGcc/ucc9+TZO3AuzNcYzNLA5rg3Yc54dvgnFsAbDtkdo3iNrN2QHPn3MfOy5YvhmxTJ8K1wzk3zzlX4r/Mxbs/NiRIO5Ix0R8HfB3yutCfl/DMLBPoD3wCtHX+/XP95zb+aonavseA/wRKQ+YlWxu6AEXA//glqOfM7CiSqB3OuU3Aw8BXwBa8+zDPI4nacIiaxn2cP33o/ERyNd4ROiRIO5Ix0YerYyV8H1EzawrMAW5wzv1wpFXDzItr+8zsXGCrcy6/upuEmZcIv6M0vK/czzjn+gM/4ZULKpNw7fBr2OfjlQHaA0eZ2WVH2iTMvET4XVSlsrgTuj1mdjtQAswqmxVmtTpvRzIm+kKgY8jrDnhfXROWmaXjJflZzrnX/Nnf+l/f8J+3+vMTsX1DgHFmtgGvVHammc0kudoAXlyFzrlP/Nev4iX+ZGrHWcCXzrki59x+4DXgVJKrDaFqGnchB8siofPjzsyuBM4FLvXLMZAg7UjGRL8YONHMOptZA+Bi4K04x1Qp/0z688Aq59yjIYveAq70p68E3gyZf7GZNTSzzsCJeCdt4sY5N8U518E5l4n38/6Hc+4ykqgNAM65b4CvzaybP2sEsJLkasdXQI6ZNfH/tkbgnfdJpjaEqlHcfnlnp5nl+O2/ImSbuDGzc4BbgHHOuV0hixKjHXV5tjpWD2AMXu+V9cDt8Y6nilhPw/tKtgxY4j/GAC2B94G1/vMxIdvc7rftC+q4R0E12jOMg71ukq4NQD8gz/99vAFkJFs7gLuB1cBy4E94PToSvg3Ay3jnFfbjHdFeE0ncQLbf9vXAk/hX+Me5HevwavFl/+PTE6kdGgJBRCTgkrF0IyIiNaBELyIScEr0IiIBp0QvIhJwSvQiIgGnRC8iEnBK9CIiAff/AYovD2c0YG6lAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "water_ex_model = water_ex_models.fxl()\n", - "\n", - "%time pk_pars_enh, enh_fit = dce_fit.enh_to_pkp(enh_tissue, hct, k_tissue, R10_tissue, R10_vif, pk_model, c_to_r_model, water_ex_model, signal_model, pk_pars_0, weights)\n", - "\n", - "plt.plot(t, enh_tissue, '.', label='tissue enh (%)')\n", - "plt.plot(t, enh_fit, '-', label='model fit (%)')\n", - "plt.legend();\n", - "\n", - "print(f\"Fitted parameters: {pk_pars_enh}\")\n", - "# Expected: vp = 0.0081, ps = 2.00e-4" - ] - }, - { - "cell_type": "markdown", - "id": "0b0101a6-58e2-4493-a8db-baa2b4df64f6", - "metadata": {}, - "source": [ - "### Repeat the fit assuming *slow* BBB water exchange...\n", - "This time, we assume slow water exchange across the vessel wall. The result will be very different compared with fitting the concentration curve." - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "id": "6d5b0fc2-a4a1-4d4c-a4c7-18a5663c94cc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 13 ms\n", - "Fitted parameters: {'vp': 0.011282434968934846, 'ps': 0.00011163471001216572}\n" - ] - }, - { - "data": { - "image/png": "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Udx7773Vo1refvvtbx1n1KhRPPzww3z99dcAfPbZZ6xbty7uuh155JFRW/ozZsxg7Nix5Ofns2XLFrKyssjKymLLli1A8EHw+eefk4ibMGmumxQSrd9TrXppDjp06MDQoUPp06cPp5xyCpMmTapeN3v2bGbOnElubi4HHXQQ1113HQsXLuSKK64gKyuL3Nzc6tEr119/PRdccAGTJ0/mmGOOqX6Pa6+9lssuu4x+/frh7nTr1o3nnnuuRgwjR45k6dKlHHvssQDss88+zJw5k+zs7Ljq1qZNGw477DBKS0s5/PDDAdiyZQszZsxg7ty5AFx++eV8//vfJy8vr/oEbElJCYWFheTkxJ+mLXLcZqooKCjw5niHqV0t+h2VVeTqildpQkuXLqVXr17JDiNjPf3005SUlHDzzTfXe59LL72U8ePHM2LEiG+ti/b7MrOS2qaZUYs+hTRlv6eINJ0zzjijwaNn+vTpEzXJx0KJPsUM6pqvBC+SgS688MIGbb/rAqtE0MlYEZEMp0QvIpLhlOhFRDKcEr2ISIZToheRjBM5uVlDt3niiSfo1asXJ5xwAsXFxVxyySUAvPLKK/zrX/+q9f3++te/cuONNwJw77330qdPH8aMGcP27dsBWLBgAZdffnn19uXl5XXO0ZMoSvQiIhEeeughHnjgAebNm0dBQQFTpkwB6k70t99+O7/85S8BmD59OosXL2bAgAG89NJLuDs33XQT1157bfX2HTt25OCDD+a1115r3Aqh4ZUisqcXr4TP303sex7UF065tdbVK1euZPTo0Rx33HEUFRVx9NFH89Of/pTrr7+edevWMWvWLIYMGcL69es5//zzWbFiBa1bt2batGn069ePiooKzjrrLMrLyxkyZEiNG3jMnDmTKVOmsH37do455hgeeOCBWq92vfHGG1mwYAEff/wx48ePZ+zYsdx5553cd999TJ06lezsbGbOnMm9997L8ccfX73fhx9+SIsWLdh///2ry3bs2FE9FfGf//xnxowZQ35+zaHTp59+OrNmzWLo0KGx/mTrRS16EUkJpaWlXHrppSxevJhly5bx6KOPsmDBAu68804mT54MBFMcDBgwgMWLFzN58mTOO+88AG644QaOO+443n77bcaPH189M+XSpUuZPXs2r732GosWLSI7O5tZs2bVGsN1111HQUEBs2bNqjFdcrdu3fj5z3/Or371KxYtWlQjyUNw16iBAwdWv/7Nb35DYWEh5eXlDB06lBkzZlS39iMVFBTUOod9IqlFLyI17aXl3Zi6d+9O3759ATjqqKMYMWIEZkbfvn2rJwVbsGBB9WRlJ554IhUVFWzcuJH58+fz1FNPAVRPFAbw8ssvU1JSwuDBgwHYunUrBxxwQMJj33Mq4nPPPZdzzz0XCD6ELrnkEl588UUeeeQRunTpwl133UVWVlbCpiGuixK9iKSEyKmAs7Kyql9nZWVVT/8bbW6uXbffi7wN3y7uzo9//GN+//vfN0bI1Vq1asXGjRu/Vb569WoWLlzI9ddfz5AhQ3j99de55pprePnllzn55JMTNg1xXdR1IyJpY9iwYdVdL6+88gr7778/7dq1q1H+4osvVt9Ue8SIETz55JPV0w2vX7+eVatWxXTsvU2l3KtXr+obfUe69tprq+8etXXrVsysxlTEH374YfUtExuTEr2IpI3f/e53FBcX069fP6688kpmzJgBBH338+fPZ+DAgcydO5dDDz0UgN69e3PzzTczcuRI+vXrx8knn8yaNWtiOvapp57K008/Tf/+/b/Vrz5s2DDefvvtGt84ds15P2DAAAAuuOAC+vbty1tvvVU9rHLevHmMHTs2pngaQtMUi4imKU6ASy+9lFNPPZWTTjqp3vsMGzaMZ5555lujcerS0GmK1aIXEUmAq6++urpLpj7Ky8u5/PLLG5zkY1Gfm4M/bGbrzGxJRNnvzOwzM1sUPsbUsu9oM/vAzErN7MpEBi4iiZWK3+7TyYEHHsj48ePrvX3Hjh05/fTTG3ycWH5P9WnR/wmIdp3uf7l7//Dxwp4rzSwbuB84BegNnGVmvRscoYg0upYtW1JRUaFkn+LcnYqKClq2bNmg/eocXunu882sWwwxDQFK3X0FgJk9DpwGvB/De4lII+rcuTNlZWWUl5cnOxSpQ8uWLencuXOD9olnHP3FZnYeUAz82t037LG+E/BpxOsy4BhqYWYTgYlA9RlzEWkaubm5dO/ePdlhSCOJ9WTsg8BhQH9gDXBXlG2+ffUC1Pq90N2nuXuBuxdEXmEmIiLxiSnRu/tad9/p7lXA/xB00+ypDOgS8boz0PjX+oqISA0xJXozOzji5RnAkiibLQSOMLPuZpYHTACejeV4IiISu/oMr3wMeB3oaWZlZnYBcLuZvWtmi4ETgF+F2x5iZi8AuHslcDHwErAU+Iu7v9dI9ZBo1r4HM06Fr/RFSqQ5q8+om7OiFD9Uy7argTERr18AvjX0UppI3j6w8jX4170wunEndRKR1KUrYzNZflfo9wMo/iNs3vtt1UQkcynRZ7glPS7AK7ex5qW7kx2KiCSJEn0GK1m1gTOf/IIXdw5mn3ceZtGHK5MdkogkgRJ9BitaUcH2yirurzydtraVbf/6Q7JDEpEkUKLPYIU9OpCXk8UyuvGKD6BgzWOwfXOywxKRJqZEn8EGdc1n1oWFXD6yJweN/U9yvtkAJTOSHZaINDHdMzbDDeqaz6Cu+cDh8P7x8K8pMPgCyGlR574ikhnUom9Ojv81bFoDix5NdiQi0oSU6JuTHsOh0yB47R7YWZnsaESkiSjRNydmQat+w0pYMifZ0YhIE1Gib26OPAUO6A0L7oaqqmRHIyJNQIm+ucnKClr15ctg2XPJjkZEmoASfXN01BmwXw949U7QPUJFMp4SfXOUlQ3H/QrWvAOlLyc7GhFpZEr0zVW/CdCuc9CqF5GMpkTfXOXkwdBL4JPXYdW/kh2NiDQiJfrmbOB50KYjzFerXiSTKdE3Z7mt4NhJ8NHL8NlbyY5GRBqJEn1zV3ABtNwXXr0r2ZGISCOpz83BHzazdWa2JKLsDjNbZmaLzexpM2tfy74rw5uILzKz4gTGLYnSsh0c8/NgTP0HLyY7GhFpBPVp0f8JGL1H2d+BPu7eD/gQuGov+5/g7v3dvSC2EKXRDb0MDj4a5lwI65YmOxoRSbA6E727zwfW71E21913zYpVBHRuhNikqeS1hgmPQm5reGwCbFlf9z4ikjYS0Ud/PlDbd34H5ppZiZlN3NubmNlEMys2s+Ly8vIEhCUNsm9nmDALvloNT/wk6uyWJas2cP+8UkpWbWj6+EQkZnElejO7BqgEZtWyyVB3HwicAkwys2G1vZe7T3P3Ancv6NixYzxhSay6DIFx/wUf/x/MvabGqpJVGzh7ehF3zf2As6cXKdmLpJGYE72Z/RgYB5ztHn3CFHdfHT6vA54GhsR6PGk8NVrqA86BwknwxtQatx3cdaPxKocdlVUUrahIYsQi0hAx3UrQzEYDvwW+6+5batmmDZDl7pvC5ZHAjTFHKo1iV0t9e2UVeTlZzLqwkEEn3wjlS+H5X8P+R0LXY6tvNL6jsorcnCwKe3RIdugiUk/1GV75GPA60NPMyszsAuA+oC3w93Do5NRw20PM7IVw1wOBBWb2DvAm8Ly7/61RaiExi9pSz86BMx+G9ofC7HPgy09r3Gh81oWF4X1oRSQd1Nmid/ezohQ/VMu2q4Ex4fIK4Oi4opNGV2tLvVU+nPU4TB8Bj58F578UcaNxEUknujK2mdtrS73jkUHL/vMl8NdfaO56kTSlRC8M6prPpBMOj95aP+JkOPlGeP8ZmH9H0wcnInGL6WSsNDPf+X+w9j2Ydwt0/DfoPT7ZEYlIA6hFL3Uzg1P/GzoNCi6mmjcZKrcnOyoRqScleqmf3JZwzhzoeyb8320w/cSg715EUp4SvdRfq3z43jT44SzY9DlMGx7020eZLkFEUocSvTRcr3Hwyzeg16nwz5vhoZNg3bKkhqR5eERqp0QvsWnTAf79j/Dvf4INq+APw+C1/4aqnU0eiubhEdk7JXqJz1FnwKQ3gmGYf78OHh4NX5Q2aQiah0dk75ToJX77HAA/nAnf+x/44kOYehwseqzJDr/r6t5sQ/PwiEShcfSSGGbQ7wfQ7Xg2PfoTWj9zMR/u7ESvQbXOTJ0wu67uLVpRQWGPDpqmQWQPatFLQpVsaMlJn13I2qp2tHr2It4uLWuS4+716l6RZk6JXhKqaEUF5ZWt+dX2SRzKWlr84+pkhyTS7CnRS0Lt6i8vphd/8NPp/fkzsOSpZIcl0qypj14SKrK/fEi32+HlMvjfy6BzQTC/vYg0ObXoJeGq+8u7HxCMxPEqmHORrqAVSRIlemlc+3WHcXfDp0Xw6p3JjiblpfIVvqkcm+ydum6k8fX7AZS+HEyG1mM4HFqY7IhSUtT796bIKKJUjk3qpha9NI0xdwR99HMuhK1fJjualJTKV/imcmxSt/rcHPxhM1tnZksiyvYzs7+b2fLwOepHu5mNNrMPzKzUzK5MZOCSZlq2g+8/DJvWwHOX6baEUaTyFb6pHJvUzbyOfzgzGwZ8DTzi7n3CstuB9e5+a5jA8939t3vslw18CJwMlAELgbPc/f26giooKPDi4uJY6iOp7tW74OUb4bT7KdlvrK5m3UPJqg0p+zNJ5dgEzKzE3Quirqsr0Ydv0A14LiLRfwAMd/c1ZnYw8Iq799xjn2OB37n7qPD1VQDu/vu6jqdEn8GqdsIjp7GzrISx39zMh5UHqc9X4qYPob0n+lj76A909zUA4fMBUbbpBHwa8bosLKstyIlmVmxmxeXl5TGGJSkvKxvO+AM7yOUOu5dsr1Sfr8RF01TXrTFPxlqUslq/Prj7NHcvcPeCjh07NmJYknT7dqJs2O30zfqYv+TdyNichRR2a5/sqCRN6URx3WJN9GvDLhvC53VRtikDukS87gysjvF4kmEOHzaBlUNvo0frrUzJ/i8GPXMivP4AbPsq2aE1Co1Bbzw6UVy3WPvo7wAqIk7G7ufu/7HHPjkEJ2NHAJ8RnIz9kbu/V9fx1EffjFTthGXPQ9ED8Mnr0KIdDDwPhkyE/K7Jji4hNAa98amPPs4+ejN7DHgd6GlmZWZ2AXArcLKZLScYVXNruO0hZvYCgLtXAhcDLwFLgb/UJ8lLM5OVDb3Hw/l/g4v+CUeMhKIHYUp/+Mt58OmbyY4wbupaaHyapnrv6tWib2pq0TdzG8vgzWlQ8ifYthE6FUDhL6DXeMjJS3Z0DbarRb+jsopcteilkcQ9vLKpKdELAN98De88FrTw138E+xwEgy+AQT8Jbl+YRtS1II1NiV7SW1UVfPQyvDEVSv8B2XnQ5/tBP36ngcmOTiQl7C3Ra1IzSX1ZWXDEycHji+VBt86iR4PWfuchcMzPoPdpkJ1b51upZS3NkVr0kp62bQyS/ZvTYP0KaHswFJwPR58F7btE3UWjXySTNcaVsSLJ1XLf4ATtxSXwoyfggN4w7xa4py/8aRy8PQu+2VRjF41+keZKXTeS3rKy4MiRwWP9x7D4L7D4cXjml/D8r6HXOOg3AXoMr76wZtfoF11YI82Fum4k87hD2cKgD3/JU7DtS9jnQOj777x/wBjmfXmg+ugl42jUjTRfld/Ahy/B4tnBc9UOaNcJcluBZQcXbFl28M0gK6dmWX7X4O5Y3Y4PykRSmEbdSPOV0yK48rb3eNiyHpbMCa62raoE3xlMwVC1c/dyZNnS/4VFs4IPhn4/DE70djwy2TUSaTC16EVqs2MrfPACvPN4cM9b3wmHDAwSfp/vQxv18UvqUNeNSLw2rYUlTwb9/p+/C1m5cOQoOHpCMJa/RduwOyja7NwijU+JXqSB9nph1edLgoT/7hPw9drd5ZYdJPwW7cLnPR5tOkLbg4ITw20P2r2c06JpKycZSYlepAHqfWHVzkpYOT+4YOubTVEeX+1e3vYVbKkIun/21Co/mMen7UHBh4FlBdt5VXjeoGqP5Z3Bt4eux8HhI6DD4fomIToZK+mtqactiHZhVdTjZufAYScGj/qo2gmbv4CvPw+6gr7+HDaFj6/XBs/rVwTbWlY4+icrYiSQBcuWBVvXByeLAfY9FA4P4+j+XWjVPiE/B8kcSvSS0pIxbUGjXViVlQ1tDwweByfg/TasDE4Sf/RPeHdOMK2zZUPnAjhsRJD4D+wdTBexdUMw6mjrhvCxvmZZq3zocgx0GQIdjgiGmzZjmTYnkrpuJKXdP6+Uu+Z+QJVDtsHlI3sy6YTDG/24afePvnMHlBUHs3yWvgyr32Yvt2gOZOdBq/2CJP/150HCB2jZPkj4XYYEJ5o7DYIW+zR2DVJGus6JpK4bSVvJmrZgUNf8tPjnrpadC12PDR4n/idsroAV8+DLVUEib5W/O6m3Dp9zW+/u23eHilL49I3wsRCWzw3WWRYc2CdI/G0PCkYcZecGHxRZOcFzdliWlRucXN7nwGByuZbt0+78Qb277tKIEr2ktEFd85l1YWF6ta5TQZsOlLQbQdEXFRR2rMfPzQz2PyJ4DDgnKNu6AcpKgsRf9mZwPcH2rxsWR17bIOHv2yV87hwuHxpciNZyX8hrk1IfBpk4J1LMXTdm1hOYHVHUA7jO3e+J2GY48AzwcVj0lLvfWNd7q+tGJD6N0v3gHnQRVe2AnduDUUeRyzu3B68rv4GvVsPGT+HLTyOePwnOF3yL7R6CmrdPuBw+57WFlu2gdYfgm0jrDsE3k9Yddpc1wvDUtOu6o5G6btz9A6B/eIBs4DPg6Sibvuru42I9TqZIxz8cSV+N0v1gFt6zNw9oU+tmJas2ULRuPwp7fJdB39njmNu+Cu4JvPFT+OqziKGoXwfP2yNeb1obfIPYtjEYqlqbvH3C7qj9dj9HdlFVl+ezZEM273xSwcADs+jVvgq2fhm8/7aNweR34fKgbRsZhMGaPCiK6Kqqfg67rfLaBHMhHVqY0vMhJarrZgTwkbuvStD7ZZR0Pbkj6StZ3Q91/q23bActewejgRqicns4SqgieGxdv3t5y/rdz1vXB6ORtqwPvz3U7LHoEz6iysoNhqa2bB98mzCr+W1l547d31p2LVd+A/w++HbR8xT4t3HQY3hwnUMKSVSinwA8Vsu6Y83sHWA18Bt3fy9Bx0wbmXhyR1Jbss5tNNrfek7e7qGp9VW1M0j24RDS595Ywry3l7HDs9lsrRkzuBff/85RYXLfF3JaNvxcwTebgvsYL3se3v9feHsm5LYJLmT7t3HBfRJaJf9/Pe5Eb2Z5wHjgqiir3wK6uvvXZjYG+CtwRC3vMxGYCHDooYfGG1ZKycSTO5L6kjFyKKX+1rOyw379/QA4uOpwnn+nKIgtO4tfDiiEA+L8+bRoC0edETwqt8PKV4Okv+x5WPps0L3T7bjgmobWHYKunrx9wuc2wYdCXsSjkbp/4h5Hb2anAZPcfWQ9tl0JFLj7F3vbLhNPxqqPXlJVov82U/lvvcliq6qC1W/Bsudg6XNQsbx++7XrDJfH1unRqHPdmNnjwEvu/sco6w4C1rq7m9kQ4EmCFv5eD5qJiV4kURKZrHT+qIlsWR+ebN4MO7YEJ5m3bw4fwfLq8go+2bCd3BOuiOl30GgXTJlZa+Bk4GcRZT8HcPepwJnAL8ysEtgKTKgryYtI7RKdmHX+qIlEdCFFU7JqA2e/GP5ePypK+AduXIne3bcAHfYomxqxfB9wXzzHEJHdEp2YU6pPPUPV5xtYY3/g6spYkTg0dX90ohOzrjxuXPX9BtbYH7hK9CIxSkb/dmMk5mSMzqnvB2Qqn9itj/q21Bv7A1eJXiRGyerfTrsJ1/ZQ3w/ITDhR3JCWemP+XpXoRWKk/u3Y1PcDMhNOFKdK15gSvUiMUuWfON3U9wMyUz5IU+EbmG48IiJNrrn00Tcl3XhERFJKfVu5qdAazgTN+8aQIiLNgBK9iEiGU6IXEclwSvQiIjEqWbWB++eVUrJqQ7JD2SudjBURiUE6XdClFr2ISAyiXdCVqpToRURisOuCrmwj5S/oUteNiEgM0unKaCV6EZEYpcsFXeq6ERHJcEr0IiIZToleRCTDxZXozWylmb1rZovM7FvTTVpgipmVmtliMxsYz/FERKThEnEy9gR3/6KWdacAR4SPY4AHw2cREWkijd11cxrwiAeKgPZmdnAjH1NERCLEm+gdmGtmJWY2Mcr6TsCnEa/LwrJvMbOJZlZsZsXl5eVxhiUiIrvEm+iHuvtAgi6aSWY2bI/1FmWfqLe0cvdp7l7g7gUdO3aMMywREdklrkTv7qvD53XA08CQPTYpA7pEvO4MrI7nmCIi0jAxJ3oza2NmbXctAyOBJXts9ixwXjj6phDY6O5rYo5WREQaLJ5RNwcCT5vZrvd51N3/ZmY/B3D3qcALwBigFNgC/DS+cEVEpKFiTvTuvgI4Okr51IhlBybFegwREYmfrowVEclwSvQiIhlOiV5EJMMp0YuIZDglehGRDKdELyKS4ZToRUQynBK9iEiGU6IXEclwSvQiIhlOiV5EJMMp0YuIZDglehGRDKdELyKS4ZToRUQynBK9iEiGU6IXEclwSvQiIhlOiV5EJMPFnOjNrIuZzTOzpWb2npldGmWb4Wa20cwWhY/r4gtXREQaKuabgwOVwK/d/S0zawuUmNnf3f39PbZ71d3HxXEcERGJQ8wtendf4+5vhcubgKVAp0QFJiIiiZGQPnoz6wYMAN6IsvpYM3vHzF40s6P28h4TzazYzIrLy8sTEZaIiJCARG9m+wBzgMvc/as9Vr8FdHX3o4F7gb/W9j7uPs3dC9y9oGPHjvGGJSIiobgSvZnlEiT5We7+1J7r3f0rd/86XH4ByDWz/eM5poiINEw8o24MeAhY6u5317LNQeF2mNmQ8HgVsR5TREQaLp5RN0OBc4F3zWxRWHY1cCiAu08FzgR+YWaVwFZggrt7HMcUEZEGijnRu/sCwOrY5j7gvliPISIi8dOVsSIiGU6JXkQkwynRi4hkOCV6EZEMp0QvIpLhlOhFRDKcEr2ISIZTohcRyXBK9CIiGU6JXkQkwynRi4hkOCX6OJWs2sD980opWbUh2aGIiEQVz+yVzV7Jqg2cPb2I7ZVV5OVkMevCQgZ1zU92WCIiNahFH4eiFRVsr6yiymFHZRVFKzTVvoikHiX6OBT26EBeThbZBrk5WRT26JDskEREvkVdN3EY1DWfWRcWUrSigsIeHdRtIyIpqVkm+pJVGxKWnAd1zVeCF5GU1uwSvU6gikhz0+z66HUCVUSam7gSvZmNNrMPzKzUzK6Mst7MbEq4frGZDYzneImgE6gi0tzE3HVjZtnA/cDJQBmw0Myedff3IzY7BTgifBwDPBg+J41OoIpIcxNPH/0QoNTdVwCY2ePAaUBkoj8NeMTdHSgys/ZmdrC7r4njuHHTCVQRaU7i6brpBHwa8bosLGvoNgCY2UQzKzaz4vLy8pgCSuR0BJraQEQyRTwteotS5jFsExS6TwOmARQUFETdZm8SOZpGI3NEJJPE06IvA7pEvO4MrI5hm4RI5GgajcwRkUwST6JfCBxhZt3NLA+YADy7xzbPAueFo28KgY2N1T+fyNE0GpkjIpkk5q4bd680s4uBl4Bs4GF3f8/Mfh6unwq8AIwBSoEtwE/jDzm6RI6m0cgcEckkFgyISS0FBQVeXFyc7DBERNKGmZW4e0G0dc3uylgRkeZGiV5EJMMp0YuIZDglehGRDKdELyKS4ZToRUQyXEoOrzSzcmBVPTbdH/iikcNpbJlQB1A9Ukkm1AEyox5NWYeu7t4x2oqUTPT1ZWbFtY0bTReZUAdQPVJJJtQBMqMeqVIHdd2IiGQ4JXoRkQyX7ol+WrIDSIBMqAOoHqkkE+oAmVGPlKhDWvfRi4hI3dK9RS8iInVQohcRyXBpmejNbLSZfWBmpWZ2ZbLj2Rsz62Jm88xsqZm9Z2aXhuX7mdnfzWx5+Jwfsc9VYd0+MLNRyYu+JjPLNrO3zey58HU61qG9mT1pZsvC38mx6VYPM/tV+Le0xMweM7OW6VAHM3vYzNaZ2ZKIsgbHbWaDzOzdcN0UM4t2y9Kmrscd4d/UYjN72szap1Q93D2tHgQ3OfkI6AHkAe8AvZMd117iPRgYGC63BT4EegO3A1eG5VcCt4XLvcM6tQC6h3XNTnY9wtguBx4Fngtfp2MdZgAXhst5QPt0qgfQCfgYaBW+/gvwk3SoAzAMGAgsiShrcNzAm8CxBPekfhE4JQXqMRLICZdvS7V6pGOLfghQ6u4r3H078DhwWpJjqpW7r3H3t8LlTcBSgn/W0wiSDuHz6eHyacDj7v6Nu39McHeuIU0adBRm1hkYC0yPKE63OrQj+Cd9CMDdt7v7l6RZPQjuDNfKzHKA1gT3YU75Orj7fGD9HsUNitvMDgbaufvrHmTLRyL2aRLR6uHuc929MnxZRHB/bEiReqRjou8EfBrxuiwsS3lm1g0YALwBHOjh/XPD5wPCzVK1fvcA/wFURZSlWx16AOXAH8MuqOlm1oY0qoe7fwbcCXwCrCG4D/Nc0qgOe2ho3J3C5T3LU8n5BC10SJF6pGOij9aPlfJjRM1sH2AOcJm7f7W3TaOUJbV+ZjYOWOfuJfXdJUpZKvyOcgi+cj/o7gOAzQTdBbVJuXqEfdinEXQDHAK0MbNz9rZLlLJU+F3Upba4U7o+ZnYNUAnM2lUUZbMmr0c6JvoyoEvE684EX11TlpnlEiT5We7+VFi8Nvz6Rvi8LixPxfoNBcab2UqCrrITzWwm6VUHCOIqc/c3wtdPEiT+dKrHScDH7l7u7juAp4DvkF51iNTQuMvY3S0SWZ50ZvZjYBxwdtgdAylSj3RM9AuBI8ysu5nlAROAZ5McU63CM+kPAUvd/e6IVc8CPw6Xfww8E1E+wcxamFl34AiCkzZJ4+5XuXtnd+9G8PP+p7ufQxrVAcDdPwc+NbOeYdEI4H3Sqx6fAIVm1jr82xpBcN4nneoQqUFxh907m8ysMKz/eRH7JI2ZjQZ+C4x39y0Rq1KjHk15tjpRD2AMweiVj4Brkh1PHbEeR/CVbDGwKHyMAToALwPLw+f9Iva5JqzbBzTxiIJ61Gc4u0fdpF0dgP5Acfj7+CuQn271AG4AlgFLgD8TjOhI+ToAjxGcV9hB0KK9IJa4gYKw7h8B9xFe4Z/kepQS9MXv+h+fmkr10BQIIiIZLh27bkREpAGU6EVEMpwSvYhIhlOiFxHJcEr0IiIZToleRCTDKdGLiGS4/w+OTfCdmULx9gAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "water_ex_model = water_ex_models.ntexl() # slow exchange across vessel wall, fast exchange across cell membrane\n", - "\n", - "%time pk_pars_enh_ntexl, enh_fit_ntexl = dce_fit.enh_to_pkp(enh_tissue, hct, k_tissue, R10_tissue, R10_vif, pk_model, c_to_r_model, water_ex_model, signal_model, pk_pars_0, weights)\n", - "\n", - "plt.plot(t, enh_tissue, '.', label='tissue enh (%)')\n", - "plt.plot(t, enh_fit_ntexl, '-', label='model fit (%)')\n", - "plt.legend();\n", - "\n", - "print(f\"Fitted parameters: {pk_pars_enh_ntexl}\")\n", - "# Expected: vp = 0.0113, ps = 1.12e-4" - ] - } - ], - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/demo/demo_fit_t1.ipynb b/src/demo/demo_fit_t1.ipynb deleted file mode 100644 index d705b22..0000000 --- a/src/demo/demo_fit_t1.ipynb +++ /dev/null @@ -1,336 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "b276d3b1-a112-4af7-97aa-994466f62f4a", - "metadata": {}, - "source": [ - "## Fit T1 mapping data" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "affected-indonesia", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "sys.path.append('..')\n", - "import t1_fit\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "id": "1acc700a-e5fd-40f9-8ed1-a003896bd4ac", - "metadata": {}, - "source": [ - "---\n", - "### Variable flip angle mapping (2 x flip angles)\n", - "Depends on signal-flip angle relationship:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "8b7c6e63-f4d1-4ea5-bbb8-a932d4862063", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fa_range = np.linspace(0, 20, 50)\n", - "s_range_1 = t1_fit.spgr_signal(s0=100, t1=0.8, tr=5.4e-3, fa=fa_range)\n", - "s_range_2 = t1_fit.spgr_signal(s0=100, t1=1.5, tr=5.4e-3, fa=fa_range)\n", - "plt.plot(fa_range, s_range_1, '-', label='s0=100, t1=0.8 s')\n", - "plt.plot(fa_range, s_range_2, '-', label='s0=100, t1=1.5 s')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "182b6f5a-ad9a-4be1-b66a-eda1571f169b", - "metadata": {}, - "source": [ - "Take one voxel of data based on 2 x SPGR acquisitions.\n", - "Estimating T1 from 2 x flip angles is the fastest but least accurate method." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "193be578-c800-49f2-839d-43466d273ff4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 0 ns\n", - "Fitted values: s0 = 13600.3, t1 = 1.326 s\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Fit data:\n", - "s = np.array([413, 445])\n", - "tr = 5.4e-3\n", - "fa = np.array([2, 12])\n", - "%time s0, t1 = t1_fit.vfa_2points(fa, tr).proc(s)\n", - "\n", - "# Plot data:\n", - "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", - "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", - "plt.plot(fa, s, 'o', label='signal')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "991c0e6c-56c1-4169-94d1-82d787ae5a62", - "metadata": {}, - "source": [ - "### Variable flip angle (based on 3 x flip angles)\n", - "Fit using the **linear** method (moderately fast, moderately accurate):" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "9af5810a-3cc9-4f2f-8350-5f8c182dd148", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 0 ns\n", - "Fitted values: s0 = 13531.9, t1 = 1.326 s\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Fit data:\n", - "s = np.array([413, 604, 445])\n", - "tr = 5.4e-3\n", - "fa = np.array([2, 5, 12])\n", - "%time s0, t1 = t1_fit.vfa_linear(fa, tr).proc(s)\n", - "\n", - "# Plot data:\n", - "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", - "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", - "plt.plot(fa, s, 'o', label='signal')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "433727e1-0f92-41c9-b49b-88f11358c704", - "metadata": {}, - "source": [ - "Now fit using the **non-linear** method (slowest, most accurate):" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "04a39172-427f-4b0e-ba85-e0870d0a2e3d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 0 ns\n", - "Fitted values: s0 = 13482.2, t1 = 1.323 s\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Fit data:\n", - "s = np.array([413, 604, 445])\n", - "tr = 5.4e-3\n", - "fa = np.array([2, 5, 12])\n", - "%time s0, t1 = t1_fit.vfa_nonlinear(fa, tr).proc(s)\n", - "\n", - "# Plot data:\n", - "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s\")\n", - "plt.plot(fa_range, t1_fit.spgr_signal(s0=s0, t1=t1, tr=tr, fa=fa_range), '-', label='model')\n", - "plt.plot(fa, s, 'o', label='signal')\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "id": "a00eb683-0158-4fa1-b62d-ee4b14004235", - "metadata": {}, - "source": [ - "### T1 estimation using DESPOT1-HIFI\n", - "T1 can be estimated based on a combination of SPGR and IR-SPGR acquisitions. This technique also estimates the relative flip angle k_fa (nominal/actual FA). Now add 2 x IR-SPGR acquisitions to the previous 3 x SPGR scans. We now have 5 x acquisitions. All parameters are specified for each acquisition." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "5ac0739a-72e7-476b-aa69-f1bebf7cc32b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 0 ns\n", - "Fitted values: s0 = 11856.2, t1 = 1.022 s, k_fa = 1.138\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Fit data:\n", - "s = np.array([249, 585, 413, 604, 445]) # signal\n", - "esp = np.tile(5.4e-3, 5) # echo spacing (IR-SPGR) or TR (SPGR)\n", - "ti = np.array([0.1680, 1.0680, np.nan, np.nan, np.nan]) # delay after inversion pulse\n", - "n = np.array([160, 160, np.nan, np.nan, np.nan]) # number of readout pulses (IR-SPGR only)\n", - "b = np.array([5, 5, 2, 5, 12]) # excitation flip angle\n", - "td = np.array([0, 0, np.nan, np.nan, np.nan]) # delay between end of readout train and next inversion pulse (IR-SPGR only)\n", - "centre = np.array([0.5, 0.5, np.nan, np.nan, np.nan]) # time when centre of k-space is acquired (expressed as fraction of readout pulse train length; IR-SPGR only)\n", - "t1_calculator = t1_fit.hifi(esp, ti, n, b, td, centre, k_fixed=None)\n", - "%time t1, s0, k_fa, s_fit = t1_calculator.proc(s).values()\n", - "\n", - "# Plot data:\n", - "print(f\"Fitted values: s0 = {s0:.1f}, t1 = {t1:.3f} s, k_fa = {k_fa:.3f}\")\n", - "plt.plot(np.arange(5), s_fit, '-', label='model')\n", - "plt.plot(np.arange(5), s, 'o', label='signal')\n", - "plt.legend();" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a16e0669-26df-4f6d-b6e0-7f9047f39eac", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "('s0', 11856.156093125323)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "s0" - ] - }, - { - "cell_type": "markdown", - "id": "480d8d69-def2-47cf-a364-6ab5fe7e2b64", - "metadata": {}, - "source": [ - "---\n", - "### Reference values\n", - "Obtained from fitting DESPOT1-HIFI signal in Matlab:\n", - "T1 = 1.0218\n", - "s0 = 11856\n", - "k = 1.1379\n", - "(data from: INV_ED_004, FSLEyes coordinates 98,99,106)" - ] - }, - { - "cell_type": "markdown", - "id": "546d8b07-8a1d-4953-899f-6c9cd93aef0e", - "metadata": { - "tags": [] - }, - "source": [ - "### Generating a T1 map" - ] - } - ], - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/demo/demo_pk_models.ipynb b/src/demo/demo_pk_models.ipynb deleted file mode 100644 index 870b413..0000000 --- a/src/demo/demo_pk_models.ipynb +++ /dev/null @@ -1,262 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "fifty-passport", - "metadata": {}, - "source": [ - "## Pharmacokinetic model class\n", - "Import modules" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "internal-arbor", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "sys.path.append('..')\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "id": "arabic-latvia", - "metadata": {}, - "source": [ - "### Create a pharmacokinetic model object\n", - "To do this we need to specify:\n", - "- The time points at which we want to calculate concentration\n", - "- An AIF object\n", - "- Optionally, the temporal resolution to use when using interpolation to calculate the convolution." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "detected-brave", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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9L59+5g/fz7z588HoKysjIMHDwJw7733MmXKFKZMmcJ9990HWKm3J02axFe/+lWOP/54FixYQGtra5jO7NFLaxAxqLm9gwLqcTvG9LyCI4dcWzW1mo/pqHDXB3exqW5TWPd5XPZx3Dzr5j7XaW1tpaKiIvD5+9//fiAD62WXXUZycjJgZRq9++67+da3vsUZZ5zBySefzIIFC7j66qvJzMzsss9XXnmFF154gffffx+HwxHIZbRkyRIeeOAB5s6dy9KlS7n99tsDF9+Ojg4++OADli9fzu23386KFSv43//9X1auXMkvf/lLwLqNtGrVKt5++22Sk5N54403uhy3v/ThwW644Qbuvfde/vWvfx2WUnvVqlU88sgjvP/++xhjmD17NnPnziUrK4stW7bw9NNP87vf/Y5LLrmE559/nssvv7zPc3ys0wARg5rbPEySOvZ378HUyZFDNlu1DUL1aaC3mK6++mrOOeccXn31VV588UV++9vfsmbNmi7ZTFesWMHVV18duHWTnZ1NY2MjDQ0NgaRxV155JZ///OcD21x00UVA/ymoFy9eHAha3XWmD09OTg6kD+8evELx9ttvc+GFFwbyNF100UW89dZbLF68mNGjRwcCarjSZR/tNEDEoDZnHYnigdSebzGRkku6r1F7MR0l+vulH0uKi4u55ppruOaaa5gyZQrr16/nhBNOCCwPNV12sM4A018K6minyw4OhDabTW8xoW0QMam92bp/a0/pefARHLk4fM00NLv6/MIrNRCvvvoqHo8HgP3791NbW0tJSddu1gsWLODhhx8O9BCqq6sjIyODrKyswPCgTzzxRL8pqAeaLrun9OGjRo3ik08+ob29ncbGRv7xj3/0u//TTz+dF154gZaWFlwuF3/5y1847bTTQi7HcKM1iBjkbrES8SU4Mnpewd/11dHRRHN7B2lJ8UNVNHUU6d4GsXDhwkBX1+A2iNzcXFasWMFrr73GjTfeGBho5+6776awsLDLPhcuXMjq1auZOXMmCQkJLFq0iB//+Mc89thjXHfddbS0tDBmzJh+02XPnz+fO++8k4qKCr7//e/3+2/pKX04wCWXXEJ5eTnjx4/vMvzptddey7nnnktRURH/+te/AvNnzJjBVVddxaxZVhLMr3zlK0yfPl1vJ/Uioum+h9qxku77lZf/zLkfXk3TxX8ifco5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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import aifs, pk_models\n", - "# define timepoints at which we want to calculate concentration\n", - "# assume an acquisition of 100 volumes, each taking 2s to acquire, starting at t=0 with linear phase encoding\n", - "# the time points are therefore t = 1, 3, ..., 199 s\n", - "dt = 2.\n", - "t = np.arange(0,100)*dt + dt/2\n", - "\n", - "# create an AIF, with contrast injected at t = 15s\n", - "aif = aifs.parker(hct=0.42, t_start=15.)\n", - "\n", - "# create the pharmacokinetic model object (2-compartment exchange model) with fixed (zero) AIF delay\n", - "pk_model = pk_models.tcxm(t, aif, upsample_factor=1, fixed_delay=0)\n", - "\n", - "# specify some model parameters and calculate the total and compartmental concentrations\n", - "pk_pars = {'vp': 0.01, 'ps': 5e-3, 've': 0.2, 'fp': 20}\n", - "C_t, C_cp, C_e = pk_model.conc(**pk_pars)\n", - "\n", - "plt.plot(t, C_t, '-', label='tissue conc.')\n", - "plt.plot(t, C_cp, '-', label='blood plasma contribution')\n", - "plt.plot(t, C_e, '-', label='EES contribution')\n", - "plt.legend()\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('concentration (mM)');" - ] - }, - { - "cell_type": "markdown", - "id": "444f75a4-cf40-4d87-a711-e153299ff95e", - "metadata": {}, - "source": [ - "##### Parameters can be in dict (for readability) or array format (for optimisation algorithms):" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "4920b8bc-902e-4780-96d2-453af448ccfe", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parameters as array: [1.e-02 5.e-03 2.e-01 2.e+01]\n", - "Parameters as dict: {'vp': 0.01, 'ps': 0.005, 've': 0.2, 'fp': 20.0}\n" - ] - } - ], - "source": [ - "pk_pars_array = pk_model.pkp_array(pk_pars)\n", - "pk_pars_dict = pk_model.pkp_dict(pk_pars_array)\n", - "print(f\"Parameters as array: {pk_pars_array}\")\n", - "print(f\"Parameters as dict: {pk_pars_dict}\")" - ] - }, - { - "cell_type": "markdown", - "id": "5d5b502e-0551-4e53-9852-38027242df14", - "metadata": {}, - "source": [ - "##### Required parameters have typical values (for scaling and as default initial estimates) and bounds..." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "144a6663-0389-4c6a-8831-42ef99348430", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parameter names for this model are: ('vp', 'ps', 've', 'fp')\n", - "Typical values for these parameters are: [ 0.1 0.05 0.5 50. ]\n", - "Bounds for these parameters are: ((1e-08, -0.001, 1e-08, 1e-08), (1, 1, 1, 200))\n" - ] - } - ], - "source": [ - "print(f\"Parameter names for this model are: {pk_model.parameter_names}\")\n", - "print(f\"Typical values for these parameters are: {pk_model.typical_vals}\")\n", - "print(f\"Bounds for these parameters are: {pk_model.bounds}\")" - ] - }, - { - "cell_type": "markdown", - "id": "7395fd1d-a202-4a9f-9ce4-17ab4577bc13", - "metadata": {}, - "source": [ - "##### The irf method returns the impulse response functions for the plasma and EES compartments:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "15e26b8a-bc65-4c91-bbf0-afa9948b30c5", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEKCAYAAADaa8itAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAvuUlEQVR4nO3de3xU5b3v8c9vJpkkIDcxKhcRUFAQMSCCVaFoVfCyRbv1qLsWD/SUF1uttN1a4Firp+dlC9ue7qNtldrWrXZbb3VXaaXe9qmXXqiCRhSViygaQQXkouQ2yfzOH7MSJzGTGZJZMwn5vl+veWXNs57nWb+1JuTHs9aaZ5m7IyIikguRQgcgIiL7DyUVERHJGSUVERHJGSUVERHJGSUVERHJGSUVERHJmVCTipnNNLN1ZrbRzBa1sd7M7NZg/Rozm5iprZn976BupZk9aWaDg/LhZlYTlFea2bIw901ERD7PwvqeiplFgfXAGUAV8CJwqbu/nlLnbOAbwNnAFOAWd5/SXlsz6+vue4L2VwNj3X2+mQ0H/uDu40LZIRERySjMkcpkYKO7b3L3euB+YFarOrOAezxpJdDfzAa117YpoQR6A/r2pohIF1EUYt9DgPdS3leRHI1kqjMkU1szuwmYDewGTk2pN8LMXgb2AN919+dbB2Vm84B5AL179z7+6KOP3re9EhHp4VavXr3d3cvbWhdmUrE2ylqPKtLVabetu18HXGdmi4GrgBuArcAwd99hZscDj5jZMa1GNrj7HcAdAJMmTfJVq1Zluz8iIgKY2eZ068I8/VUFHJbyfiiwJcs62bQF+A3wjwDuXufuO4Ll1cBbwOhOxC8iIvsozKTyIjDKzEaYWQy4BFjeqs5yYHZwF9iJwG5339peWzMbldL+PODNoLw8uMCPmY0ERgGbwts9ERFpLbTTX+7eYGZXAU8AUeBOd19rZvOD9cuAFSTv/NoIVANz2msbdL3EzI4CEsBmYH5QPg34vpk1AI3AfHf/OKz9ExGRzwvtluLuQNdURDonHo9TVVVFbW1toUOREJSWljJ06FCKi4tblJvZanef1FabMC/Ui8h+rqqqij59+jB8+HDM2rq/Rrord2fHjh1UVVUxYsSIrNtpmhYR6bDa2loGDhyohLIfMjMGDhy4z6NQJRUR6RQllP1XRz5bJZUO+LBqIyt/+W3e2/BKoUMREelSlFQ6YM+2LZxY9St2bH49c2URCc2uXbu47bbbmt9v2bKFCy+8MK8xvPPOO4wbl5xy8JlnnqFfv35MmDCBo48+mmuuuaa53l133UV5eTkVFRVUVFQwe/bsvMaZL0oqHVBcUgZAY73ueBEppNZJZfDgwfz2t78tYEQwdepUXn75ZV5++WX+8Ic/8Je//KV53cUXX0xlZSWVlZXcc889BYwyPEoqHdCUVBL1NQWORKRnW7RoEW+99RYVFRVce+21LUYNa9euZfLkyVRUVDB+/Hg2bNjA3r17OeecczjuuOMYN24cDzzwAADDhw9n+/btAKxatYrp06cDsHfvXubOncsJJ5zAhAkTePTRR7OOraysjIqKCt5///3c7nQXp1uKO6C4tDcAiQaNVESa/K/fr+X1LXsyV9wHYwf35YZ/OCbt+iVLlvDaa69RWVkJJE9FNVm2bBkLFizgK1/5CvX19TQ2NrJixQoGDx7MY489BsDu3bvb3f5NN93Eaaedxp133smuXbuYPHkyp59+Or17984Y+86dO9mwYQPTpk1rLnvggQf485//DMCCBQuYM2dOxn66G41UOiAWjFQ8rqQi0lV94Qtf4Ac/+AFLly5l8+bNlJWVceyxx/L000+zcOFCnn/+efr169duH08++SRLliyhoqKC6dOnU1tby7vvvttum+eff57x48dz6KGHcu6553LooYc2r0s9/bU/JhTQSKVDSkp7AeAaqYg0a29EUQj/9E//xJQpU3jssceYMWMGv/zlLznttNNYvXo1K1asYPHixZx55pl873vfo6ioiEQiAdDiexnuzsMPP8xRRx2V9XanTp3KH/7wB9avX88pp5zCBRdcQEVFRa53r8vSSKUDYqUaqYh0BX369OGTTz5pc92mTZsYOXIkV199Needdx5r1qxhy5Yt9OrVi8suu4xrrrmGl156CUheU1m9ejUADz/8cHMfM2bM4Cc/+QlN01m9/PLLWcc2evRoFi9ezNKlSzu6e92SkkoHRIuKiXsUGuoKHYpIjzZw4EBOPvlkxo0bx7XXXtti3QMPPMC4ceOoqKjgzTffZPbs2bz66qvNF+9vuukmvvvd7wJwww03sGDBAqZOnUo0Gm3u4/rrrycejzN+/HjGjRvH9ddfv0/xzZ8/n+eee46333678zvbTWhCyQ5OKLn3hkNYc8gFfOGKZTmO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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "irf_cp, irf_ees = pk_model.irf(**pk_pars)\n", - "irf_tissue = irf_cp + irf_ees\n", - "\n", - "plt.plot(pk_model.t_upsample, irf_tissue, '-', label='tissue IRF')\n", - "plt.plot(pk_model.t_upsample, irf_cp, '-', label='blood plasma IRF')\n", - "plt.plot(pk_model.t_upsample, irf_ees, '-', label='EES IRF')\n", - "plt.legend()\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('IRF (/s)');" - ] - }, - { - "cell_type": "markdown", - "id": "eacbb9df-9a1b-4350-ba9e-837b02a41597", - "metadata": {}, - "source": [ - "##### Compare models..." - ] - }, - { - "cell_type": "code", - "execution_count": 80, - "id": "8769c60d-f747-4f00-9dfc-d68d9d3efd63", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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/Y9Y/5Fe+1Dbtm1j06ZNjBs3jrS0NB566CEyMzMPOy4nJ4ewsLCGx+eccw4ff/wxAB999BHnnnvuUV+zV69eTJs2jffeew+TSb8W96effuLaa69teM6goKAjvo8j2bRpE8OHDyclJYX333//oPc2depUjEZjw+Pw8PC/NcdcCCHaClX/KSJAybvvUrl4CcEzZ9D5px+J/r/HsHTr6sHqhGg52l23kHPve6zha6PJdNBjs7floMfeNp+DHtv8Aw567BPYuCBnNBoZNWoUo0aNIiUlhbfffvuwwKuUYty4cXz44YcHbbfb7VxzzTWsWrWKuLg47r//fux2O0qpv7w4xGazMW7cOL744gs+/vhjVq1ahcvlom/fvgBMnjyZBx54gPXr1/P999/z4osv8vHHH/Pmm2826rUPpZSiZ8+erFix4qjfB6vVetD55557LlOnTmXKlClomkaXLl2O+ppff/01ixcv5ssvv+TBBx9k8+bNf/l9OHDbkWoGffrH559/TmpqKrNnz2bRokUN+3x8fA77Xlit1qO+PyGEaIuUw0H5N99Q9MabRD36CNaePQm79RYi7r1H5lILcQQyct3Mtm3bxo4dOxoer1u3jo4dOwLg5+dHRUUFAIMGDWLZsmXs3LkTgOrqarZv394QDENDQ6msrGTu3LkABAYGEhAQwNKlSwF4//33D3rdyy67jBtuuIH+/fsTHByM0Whk3bp1rFu3jgceeIDCwkLcbjdnnXUWDz74IGvWrDmspr967UOP69atGwUFBQ3h2uFwHHGEOykpqeH9ASQmJmI0GnnwwQcbRq3/6jXdbjf79u1j9OjRPP7445SWllJZWcnJJ5/MCy+80PCcJfUX1ERERLB161bcbjfz5s074p9NRUUFUVFROByOw75/h9q+fXuTdGMRQojWwlVZRdFbs9k57mSy77wLlELVX5tiDg+XYC3EX2h3I9cnWmVlJddffz2lpaWYTCY6d+7MrFmzALjiiiuYOHEiUVFR/Pzzz8yePZvzzz+f2tpaAB566CG6du3K5ZdfTkpKCvHx8fTv37/hud966y0uueQSbDYb48ePP+h1+/bti7+/PzNnzjxiXVlZWcycORO32w3Ao48+CuijuVdddRVWq5UVK1b85WsfetzcuXO54YYbKCsrw+l0ctNNN9HzkAUCJk6ceND0FdBHr2+//Xb27NkD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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "pk_model_tcxm = pk_models.tcxm(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "pk_model_etofts = pk_models.extended_tofts(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "pk_model_tcum = pk_models.tcum(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "pk_model_patlak = pk_models.patlak(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "pk_model_tofts = pk_models.tofts(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "pk_model_steady_state = pk_models.steady_state_vp(t, aif, upsample_factor=1000, fixed_delay=0)\n", - "\n", - "pk_pars = {'vp': 0.01, 'ps': 5e-2, 've': 0.2, 'fp': 10, 'ktrans': 5e-2}\n", - "#pk_pars = {'vp': 0.0001, 'ps': 5e-2, 've': 0.5, 'fp': 1000, 'ktrans': 5e-2}\n", - "\n", - "C_t_tcxm, _C_cp, _C_e = pk_model_tcxm.conc(**pk_pars)\n", - "C_t_etofts, _C_cp, _C_e = pk_model_etofts.conc(**pk_pars)\n", - "C_t_tcum, _C_cp, _C_e = pk_model_tcum.conc(**pk_pars)\n", - "C_t_patlak, _C_cp, _C_e = pk_model_patlak.conc(**pk_pars)\n", - "C_t_tofts, _C_cp, _C_e = pk_model_tofts.conc(**pk_pars)\n", - "C_t_steady_state, _C_cp, _C_e = pk_model_steady_state.conc(**pk_pars)\n", - "\n", - "plt.figure(0, figsize=(12,8))\n", - "plt.plot(t, C_t_tcxm, '-', label='2CXM')\n", - "plt.plot(t, C_t_etofts, '-.', label='extended Tofts')\n", - "plt.plot(t, C_t_tcum, '-.', label='2CUM')\n", - "plt.plot(t, C_t_patlak, '--', label='Patlak')\n", - "plt.plot(t, C_t_tofts, '--', label='Tofts')\n", - "plt.plot(t, C_t_steady_state, ':', label='Steady-state (vascular)')\n", - "plt.legend()\n", - "plt.xlabel('time (s)')\n", - "plt.ylabel('tissue concentration (mM)');" - ] - } - ], - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/demo/demo_simulation.ipynb b/src/demo/demo_simulation.ipynb deleted file mode 100644 index 8e95b38..0000000 --- a/src/demo/demo_simulation.ipynb +++ /dev/null @@ -1,231 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "fifty-passport", - "metadata": {}, - "source": [ - "## Simulate and fit DCE-MRI" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "internal-arbor", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - } - ], - "source": [ - "import sys\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "sys.path.append('..')\n", - "import dce_fit, relaxivity, signal_models, water_ex_models, aifs, pk_models\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "markdown", - "id": "arabic-latvia", - "metadata": {}, - "source": [ - "### Simulate and fit time-concentration data" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "id": "067501a2-7bdc-4665-93e9-d08a4aef9eb8", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 33 ms\n", - "parameter: value (ground truth)\n", - "vp: 0.019722 (0.020000)\n", - "ps: 0.050249 (0.050000)\n", - "ve: 0.197438 (0.200000)\n", - "fp: 49.693323 (50.000000)\n", - "delay: 4.968603 (5.000000)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# define experiment timepoints\n", - "dt = 1.\n", - "t = np.arange(0,200)*dt + dt/2\n", - "\n", - "# define ground-truth AIF, pharmacokinetic model, parameters and noise level\n", - "aif = aifs.parker(hct=0.42, t_start=15.)\n", - "pk_pars_ground_truth = {'vp': 0.02, 'ps': 5e-2, 've': 0.2, 'fp': 50, 'delay': 5}\n", - "pk_model_ground_truth = pk_models.tcxm(t, aif, fixed_delay=None)\n", - "noise = 0.005\n", - "\n", - "# generate \"measured\" concentration then add noise\n", - "C_t, _c_cp, _c_e = pk_model_ground_truth.conc(**pk_pars_ground_truth)\n", - "C_t += np.random.normal(loc = 0., scale = noise, size = C_t.shape)\n", - "\n", - "# define AIF, pharmacokinetic model and starting parameters used for fitting.\n", - "pk_model = pk_models.tcxm(t, aif, fixed_delay=None) # use ground-truth AIF to fit data, i.e. assume AIF is known accurately\n", - "pk_pars_0 = [{'vp': 0.005, 'ps': 1e-4, 've': 0.5, 'fp': 5, 'delay': 0}, \n", - " #{'vp': 0.1, 'ps': 1e-4, 've': 0.02, 'fp': 50, 'delay': 0} # optionally specify multiple sets of starting values to find global minimum \n", - " ]\n", - "%time pk_pars_fit, C_t_fit = dce_fit.conc_to_pkp(C_t, pk_model, pk_pars_0=pk_pars_0)\n", - "\n", - "print(\"parameter: value (ground truth)\")\n", - "[ print(f\"{key}: {val:.6f} ({pk_pars_ground_truth[key]:.6f})\") for key, val in pk_pars_fit.items() ]\n", - "\n", - "fig, ax = plt.subplots(1,2, figsize=(10,4))\n", - "ax[0].plot(t, aif.c_ap(t));\n", - "ax[0].set_xlabel('time (s)');\n", - "ax[0].set_title('AIF');\n", - "ax[1].plot(t, C_t, 'b.', t, C_t_fit, 'r-');\n", - "ax[1].set_xlabel('time (s)');\n", - "ax[1].set_title('tissue conc and model fit');" - ] - }, - { - "cell_type": "markdown", - "id": "fitting-assault", - "metadata": {}, - "source": [ - "### Simulate and fit in signal space" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "0595cfda-0c4a-4aa9-b1d0-3bb306718063", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Wall time: 38.8 ms\n", - "parameter: value (ground truth)\n", - "vp: 0.019160 (0.020000)\n", - "ps: 0.051505 (0.050000)\n", - "ve: 0.188383 (0.200000)\n", - "fp: 10.031421 (10.000000)\n", - "delay: 3.060675 (3.000000)\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# define ground-truth (gt) properties\n", - "dt_gt = 0.1 # gt temporal resolution\n", - "aif = aifs.parker(hct=0.42, t_start=15.)\n", - "pk_pars_gt = {'vp': 0.02, 'ps': 5e-2, 've': 0.2, 'fp': 10, 'delay': 3}\n", - "R10_tissue, R10_aif = 1./0.8, 1./1.7\n", - "hct = 0.42\n", - "\n", - "# define acquisition properties\n", - "k_tissue, k_aif = 1.0, 1.0 # relative B1+ error\n", - "tr, fa, te = 4e-3, 15, 1.5e-3\n", - "dt = 1 # experimental temporal resolution\n", - "t = np.arange(0,round(200/dt))*dt + dt/2 # measured time points\n", - "noise = 1.5\n", - "\n", - "# define ground-truth (gt) models for relaxivity, signal and pharmacokinetics\n", - "pk_model_gt = pk_models.tcxm(t, aif, upsample_factor=round(dt/dt_gt), fixed_delay=None)\n", - "c_to_r_model_gt = relaxivity.c_to_r_linear(r1=5.0, r2=7.1)\n", - "water_ex_model_gt = water_ex_models.fxl()\n", - "signal_model_gt = signal_models.spgr(tr, fa, te)\n", - "\n", - "# now generate the measured AIF \n", - "c_ap = aif.c_ap(t)\n", - "enh_aif = dce_fit.conc_to_enh(c_ap*(1-hct), k_aif, R10_aif, c_to_r_model_gt, signal_model_gt)\n", - "enh_aif += np.random.normal(loc = 0., scale = noise, size = enh_aif.shape)\n", - "c_ap_meas = dce_fit.enh_to_conc(enh_aif, k_aif, R10_aif, c_to_r_model_gt, signal_model_gt)/(1-hct)\n", - "aif_meas = aifs.patient_specific(t, c_ap_meas)\n", - "\n", - "# generate the measured tissue enhancement\n", - "enh = dce_fit.pkp_to_enh(pk_pars_gt, hct, k_tissue, R10_tissue, R10_aif, pk_model_gt, c_to_r_model_gt, water_ex_model_gt, signal_model_gt)\n", - "enh += np.random.normal(loc = 0., scale = noise, size = enh.shape)\n", - "\n", - "# define models used for fitting\n", - "pk_model_fit = pk_models.tcxm(t, aif_meas, upsample_factor=3, fixed_delay=None)\n", - "c_to_r_model_fit = c_to_r_model_gt # use same model as for ground truth\n", - "water_ex_model_fit = water_ex_model_gt # use same model as for ground truth\n", - "signal_model_fit = signal_model_gt # use same model as for ground truth\n", - "k_tissue_fit = k_tissue # assume flip angle error is known accurately\n", - "pk_pars_0 = [{'vp': 0.005, 'ps': 1e-4, 've': 0.5, 'fp': 5, 'delay': 0},\n", - " #{'vp': 0.1, 'ps': 1e-4, 've': 0.02, 'fp': 50, 'delay': 0} # optionally specify multiple sets of starting values to find global minimum \n", - " ]\n", - "\n", - "# fit the enhancement curve\n", - "%time pk_pars_fit, enh_fit = dce_fit.enh_to_pkp(enh, hct, k_tissue_fit, R10_tissue, R10_aif, pk_model_fit, c_to_r_model_fit, water_ex_model_fit, signal_model_fit, pk_pars_0=pk_pars_0)\n", - "\n", - "print(\"parameter: value (ground truth)\")\n", - "[ print(f\"{key}: {val:.6f} ({pk_pars_gt[key]:.6f})\") for key, val in pk_pars_fit.items() ]\n", - "\n", - "fig, ax = plt.subplots(1,2, figsize=(12,4))\n", - "ax[0].plot(t, c_ap_meas);\n", - "ax[0].set_xlabel('time (s)');\n", - "ax[0].set_title('AIF');\n", - "ax[1].plot(t, enh, 'b.', t, enh_fit, 'r-')\n", - "ax[1].set_xlabel('time (s)');\n", - "ax[1].set_title('enhancement and fit');" - ] - } - ], - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src/fitting.py b/src/fitting.py index 16cbd3c..d9b1121 100644 --- a/src/fitting.py +++ b/src/fitting.py @@ -1,93 +1,214 @@ -"""Fitting. +"""Base class Fitter for DCE, T1 and other types of fitting. + Created on Thu Oct 21 15:50:47 2021 @authors: Michael Thrippleton @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: -Functions: +Classes: + Fitter (abstract base class) """ from abc import ABC, abstractmethod +import os + import nibabel as nib import numpy as np -from utils.imaging import read_images +from joblib import Parallel, delayed + +from utils.imaging import read_images, write_image + -class calculator(ABC): - # interface for classes that process data, e.g. fit DCE curve, estimate T1 +class Fitter(ABC): + """Abstract base class for fitting algorithms. + + Subclasses must implement the proc method, which process a single data + series, e.g. a DCE time series for one voxel/ROI, or a set of signals for + different flip angles for a T1 measurement. The proc_image method is + provided for processing images by calling the subclass proc method on each + voxel. + """ @abstractmethod - def proc(): - # method to process a single data series (e.g. fit time series for one voxel) - # should be overridden in subclasses - # returns dict(values), series + def proc(self, *args): + """Abstract method processing a single data series. + + For example, estimating pharmacokinetic parameters from a DCE + concentration-time series, or estimating T1 from a series of + signals acquired at different flip angles. Overridden by subclass. + + Args: + *args: First argument is the input data, followed by any other + arguments. + + Returns: + float or tuple: Output parameter(s). + If there are >1 outputs, a tuple is returned containing the + output parameters, each of which should either be a scalar (e.g. + KTrans) or a 1D array (e.g. fitted concentration series). + """ pass - - - def proc_image(self, input_images, arg_images=None, mask=None, threshold=-np.inf, write_output=True, prefix="", suffix="", filters=None, template=None): - # method to process every voxel in an image (e.g every DCE time series in 4D image) - # works by essentially looping over subclass proc() method - - # read image(s) containing input data to fit, then reshape to 2D (1 series of values per voxel) + + @abstractmethod + def output_info(self): + """Abstract method returning output names and types. + + Returns: + tuple: name and type of outputs from fitting + each element is a tuple (str, bool) corresponding to an + output parameter. str = parameter name. bool = True if + parameter is 1D (e.g. a time series), False if parameter is a + scalar (e.g. KTrans). + """ + pass + + def proc_image(self, input_images, arg_images=None, mask=None, + threshold=-np.inf, dir=".", prefix="", suffix="", + filters=None, template=None, n_procs=1): + """Process image voxel-by-voxel using subclass proc method. + + Args: + input_images (list): One or more input images to be processed. List + can contain nifti filenames (str) or arrays (ndarray). If there + is one image in the list, the last dimension is assumed to be + the series dimension (e.g. time, flip angle). If the list + contains >1 images, they are concatenated along a new series + dimension. + arg_images (tuple): Tuple containing one image (str or ndarray, + as above) for each argument needed by the subclass proc method. + Refer to the subclass proc docstring for required arguments. + Defaults to None. + mask (str or ndarray): Mask image (str or ndarray, as above). Must + contain 1 or 0 only. 1 indicates voxels to be processed. + Defaults to None (process all voxels). + threshold (float): Voxel is processed if max input value in + series (e.g. flip angle or time series) is >= threshold. + Defaults to -np.inf + dir (str): Directory for output images. If None, no output + images are written. Defaults to None. + prefix (str): filename prefix for output images. Defaults to "". + suffix (str): filename suffix for output images. Defaults to "". + filters (dict): Dict of 2-tuples: key=parameter name, value=(lower + limit, upper limit). Output values outside the range are set + to nan. + template (str): Nifti filename. Uses the header of this image to + write output images. Defaults to None, in which case the header + of the first input image will be used, otherwise an exception is + raised. + n_procs (int): Number of processes for parallel computation. + + Returns: + array or tuple: Output image(s). + If there are >1 outputs, a tuple is returned containing + arrays corresponding to the outputs (e.g. KTrans, ve, + Ct_fit). + """ + + # read source images, e.g. signal-time images data, input_header = read_images(input_images) - data_2d = data.reshape(-1, data.shape[-1]) # N voxels x N datapoints per voxel + # reshape data to 2D array n_voxels x n_points (length of series) + data_2d = data.reshape(-1, data.shape[-1]) n_voxels, n_points = data_2d.shape - - # read argument images and reshape to 1D - if arg_images is not None: - # args = tuple; each element contains all voxels for an argument - args, _hdrs = zip(*[read_images(a) for a in arg_images]) - # args_1d = tuple; each element is a tuple of all arguments for a voxel - args_1d = tuple(zip(*[a.reshape(-1) for a in args])) - else: + data_shape = data.shape + + names, _ = zip(*self.output_info()) + + # read argument images, e.g. flip angle correction, T10 + if arg_images is None: args_1d = [()] * n_voxels - - # read mask and reshape to 1D - if mask is not None: - mask_1d = nib.load(mask).get_fdata().reshape(-1) > 0 else: + # get list of N-D arrays for each argument + arg_arrays, _hdrs = zip(*[ + read_images(a) if type(a) is not float else + (np.tile(a, data_shape[:-1]), None) for a in arg_images]) + # convert to N-D arrays to list of (list of arguments) per voxel + args_1d = list(zip(*[a.reshape(-1) for a in arg_arrays])) + del arg_arrays + del arg_images + + # read mask image if provided + if mask is None: mask_1d = np.empty(n_voxels, dtype=bool) mask_1d[:] = True - - # Process first voxel to get output sizes - # Prepare dict of pre-allocated output arrays - outputs = {} - out = self.proc(data_2d[0], *args_1d[0]) - for name, values in out.items(): - n_values = values.size - outputs[name] = np.empty((n_voxels, n_values), dtype=np.float32) - outputs[name][:] = np.nan - - # process each voxel - for i, voxel_data in enumerate(data_2d): - if max(voxel_data) >= threshold and mask_1d[i]: - voxel_output = self.proc(voxel_data, *args_1d[i]) - for name, values in voxel_output.items(): - outputs[name][i, :] = values - + else: + mask_1d = nib.load(mask).get_fdata().reshape(-1) + if any((mask_1d != 0) & (mask_1d != 1)): + raise ValueError('Mask contains elements that are not 0 or 1.') + mask_1d = mask_1d.astype(bool) + + # divide data into 1+ "chunks" of voxels for parallel processing + n_chunks = min(5 * n_procs, n_voxels) + chunks_start_idx = np.int32( + n_voxels * (np.array(range(n_chunks)) / n_chunks)) + + # function to process a single chunk of voxels (to be called by joblib) + def _proc_chunk(i_chunk): + # work out voxel indices corresponding to the chunk + start_voxel = chunks_start_idx[i_chunk] + stop_voxel = chunks_start_idx[i_chunk + 1] if ( + i_chunk != n_chunks - 1) else n_voxels + n_chunk_voxels = stop_voxel - start_voxel + # preallocate output arrays + chunk_output = {} + for name, is1d in self.output_info(): + n_values = n_points if is1d else 1 + chunk_output[name] = np.empty((n_chunk_voxels, n_values), + dtype=np.float32) + chunk_output[name][:] = np.nan + # process all voxels in the chunk + for i_vox_chunk, i_vox in enumerate(np.arange(start_voxel, + stop_voxel, 1)): + voxel_data = data_2d[i_vox, :] + if max(voxel_data) >= threshold and mask_1d[i_vox]: + try: + voxel_output = self.proc(voxel_data, *args_1d[i_vox]) + if len(names) == 1: + voxel_output = (voxel_output,) + for idx, values in enumerate(voxel_output): + chunk_output[names[idx]][i_vox_chunk, :] = values + except (ValueError, ArithmeticError): + pass # outputs remain as nan + return chunk_output + + # run the processing using joblib + chunk_outputs = Parallel(n_jobs=n_procs)( + delayed(_proc_chunk)(i_chunk) for i_chunk in range(n_chunks)) + del data, data_2d, args_1d, mask_1d + + # Combine chunks into single output dict + outputs = {name: np.concatenate( + [co[name] for co in chunk_outputs], axis=0 + ) + for name, is1d_ in self.output_info()} + del chunk_outputs + # filter outputs if filters is not None: for name, limits in filters.items(): - outputs[name][(outputs[name] < limits[0]) | - (outputs[name] > limits[1])] = np.nan - - # reshape arrays to match image + outputs[name][ + ~(limits[0] <= outputs[name] <= limits[1])] = np.nan + + # reshape output arrays to match image shape for name, values in outputs.items(): - outputs[name] = np.squeeze(outputs[name].reshape((*data.shape[:-1], values.shape[-1]))) - del data, data_2d - - # write output images - if write_output: + outputs[name] = np.squeeze(outputs[name].reshape( + (*data_shape[:-1], values.shape[-1]))) + + # write outputs as images if required + if dir is not None: + if not os.path.isdir(dir): + os.mkdir(dir) if template is not None: hdr = nib.load(template).header elif input_header is not None: hdr = input_header else: - raise ValueError("Need input nifti files or template nifti file to write output images.") + raise ValueError("Need input nifti files or template nifti " + "file to write output images.") hdr.set_data_dtype(np.float32) for name, values in outputs.items(): - # MODIFY ACCORDING TO DIMENSIONALITY - img = nib.nifti1.Nifti1Image(outputs[name], None, header=hdr) - filename = f"{prefix}{name}{suffix}.nii" - nib.save(img, filename) - - return outputs \ No newline at end of file + write_image(outputs[name], + os.path.join(dir, f"{prefix}{name}{suffix}.nii"), + hdr) + + return outputs[names[0]] if len(names) == 1 else tuple(outputs[name] + for name in + names) diff --git a/src/pk_models.py b/src/pk_models.py index b1c0f67..010738c 100644 --- a/src/pk_models.py +++ b/src/pk_models.py @@ -5,8 +5,7 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: pk_model and associated subclasses -Functions: interpolate_time_series +Classes: PkModel and subclasses representing specific models """ from abc import ABC, abstractmethod @@ -15,11 +14,11 @@ from scipy.signal import convolve -class pk_model(ABC): +class PKModel(ABC): """Abstract base class for pharmacokinetic models. Subclasses correspond to specific models (e.g. Tofts). The main purpose of - a pk_model object is to return tracer concentration as a function of the + a PkModel object is to return tracer concentration as a function of the model parameters and the AIF. These are calculated by convolving the AIF with the impulse response functions (IRF). Both are upsampled to increase the precision of the discrete convolution, particularly when formula-based @@ -30,40 +29,6 @@ class pk_model(ABC): Future versions may calculate the IRF integral analytically to increase accuracy. - Attributes - ---------- - t : np.ndarray - 1D array of time points (s) at which concentrations should be - calculated, i.e. times corresponding to data points. - n : int - number of data points - aif : aifs.aif - AIF object that will be used to calculate tissue concentrations - upsample_factor : int, optional - Factor by which data is upsampled in time, relative to the smallest - time spacing in self.t. - dt_upsample : float - Temporal resolution following upsampling (s). - n_upsample : int - Number of data points following upsampling. - tau_upsample : float - Time values required by IRF functions (from 0 to t_max-t_min, spacing - dt_upsample) (s). - fixed_delay : float - Fixed delay applied to AIF to account for artery-capillary transit - time (s). If set to None, this indicates that AIF delay is a variable - parameter and should be supplied as an argument to the conc method. - c_ap_upsample : np.ndarray - Upsamplede arterial plasma concentration time series (mM). - This member variable is only defined if the arterial delay is fixed. - parameter_names : tuple - Names of variable parameters - typical_vals : np.ndarray - Typical parameter values as 1D array (e.g. for scaling) - bounds : tuple - 2-tuple giving lower and upper bounds for variable parameters. Refer to - documentation for scipy.optimize.least_squares - Class variables --------------- LOWER_BOUNDS: tuple @@ -85,6 +50,7 @@ class pk_model(ABC): convert parameters from dict to array format pkp_dict(pkp_array) convert parameters from array to dict format + """ # The following class variables should be overridden by derived classes @@ -93,26 +59,33 @@ class pk_model(ABC): LOWER_BOUNDS = None UPPER_BOUNDS = None - def __init__(self, t, aif, upsample_factor=1, fixed_delay=0): - """Construct pk_model object. + def __init__(self, t, aif, upsample_factor=1, fixed_delay=0, bounds=None): + """Construct PkModel object. Parameters ---------- t : ndarray - 1D float array of times at which concentration should be + 1D float array of times (s) at which concentration should be calculated. Normally these are the times at which data points were measured. The sequence of times does not have to start at zero. - aif : aifs.aif - aif object to use. + aif : aifs.AIF + AIF object to use. upsample_factor : int, optional The IRF and AIF are upsampled by this factor when calculating concentration. For non-uniform temporal resolution, the smallest time difference between time points is divided by this number. The default is 1. fixed_delay : float, optional - Fixed delay to apply to AIF, reflecting the arterial arrival time. - The default is 0. If set to None, the AIF delay is assumed to be - a variable parameter. + Fixed delay (s) to apply to AIF, reflecting the arterial arrival + time. If set to None, the AIF delay is assumed to be a variable + parameter. Defaults to 0. + bounds : tuple, optional + (lower bounds, upper bounds), where lower/upper bounds are a + tuple with one element per parameter in the order given by + type(self).PARAMETER_NAMES. If a fixed_delay is None then the + bounds for the bolus delay should be included as the last + parameter. Defaults to None (default values for the model are + used). """ self.t = t self.n = self.t.size @@ -128,13 +101,19 @@ def __init__(self, t, aif, upsample_factor=1, fixed_delay=0): if fixed_delay is None: # add AIF delay as a variable parameter self.parameter_names = type(self).PARAMETER_NAMES + ('delay',) self.typical_vals = np.append(type(self).TYPICAL_VALS, 1) - self.bounds = (type(self).LOWER_BOUNDS + (-10,), - type(self).UPPER_BOUNDS + (10,)) + if bounds is None: + self.bounds = (type(self).LOWER_BOUNDS + (-10,), + type(self).UPPER_BOUNDS + (10,)) + else: + self.bounds = bounds else: # AIF delay is fixed; store AIF as a vector for speed self.parameter_names = type(self).PARAMETER_NAMES self.typical_vals = type(self).TYPICAL_VALS - self.bounds = (type(self).LOWER_BOUNDS, type(self).UPPER_BOUNDS) self.c_ap_upsample = aif.c_ap(self.t_upsample - fixed_delay) + if bounds is None: + self.bounds = (type(self).LOWER_BOUNDS, type(self).UPPER_BOUNDS) + else: + self.bounds = bounds def conc(self, *pars, **pars_kw): """Get concentration time series as function of model parameters. @@ -145,9 +124,10 @@ def conc(self, *pars, **pars_kw): Parameters ---------- - *pk_pars, **pk_pars_kw : float + *pars, **pars_kw : float Pharmacokinetic parameters, supplied either as positional arguments - (in the order specified in PARAMETERS) or as keyword arguments. + (in the order specified in self.parameter_names) or as keyword + arguments. Possible parameters: vp : blood plasma volume fraction (fraction) ve : extravascular extracellular volume fraction (fraction) @@ -178,15 +158,17 @@ def conc(self, *pars, **pars_kw): # Calculate IRF (using subclass implementation) irf_cp, irf_e = self.irf(*pars, **pars_kw) - irf_cp[[0, -1]] /= 2 - irf_e[[0, -1]] /= 2 + irf_cp[[0]] /= 2 + irf_e[[0]] /= 2 # Do the convolution to get C at every upsampled time point, then # interpolate to get C at the measured time points. - C_cp_upsample = self.dt_upsample * convolve( - c_ap_upsample, irf_cp, mode='full', method='auto')[:self.n_upsample] - C_e_upsample = self.dt_upsample * convolve( - c_ap_upsample, irf_e, mode='full', method='auto')[:self.n_upsample] + C_cp_upsample = self.dt_upsample * convolve(c_ap_upsample, irf_cp, + mode='full', method='auto')[ + :self.n_upsample] + C_e_upsample = self.dt_upsample * convolve(c_ap_upsample, irf_e, + mode='full', method='auto')[ + :self.n_upsample] # Downsample concentrations back to the measured time points C_cp = np.interp(self.t, self.t_upsample, C_cp_upsample) C_e = np.interp(self.t, self.t_upsample, C_e_upsample) @@ -196,7 +178,7 @@ def conc(self, *pars, **pars_kw): return C_t, C_cp, C_e @abstractmethod - def irf(self): + def irf(self, *args, **kwargs): """Get IRF. Method is overriden in subclasses for specific models.""" pass @@ -212,7 +194,7 @@ def pkp_array(self, pkp_dict): ------- TYPE : ndarray 1D array of pharmacokinetic parameters in the order specified by - PARAMETERS. Irrelevant input parameters are ignored. + self.parameter_names. Irrelevant input parameters are ignored. """ return np.array([pkp_dict[p] for p in self.parameter_names]) @@ -224,7 +206,7 @@ def pkp_dict(self, pkp_array): ---------- pkp_array : ndarray 1D array of pharmacokinetic parameters in the order specified by - PARAMETERS. + self.parameter_names. Returns ------- @@ -236,7 +218,7 @@ def pkp_dict(self, pkp_array): pass -class steady_state_vp(pk_model): +class SteadyStateVp(PKModel): """Steady-state vp model subclass. Tracer is confined to a single blood plasma compartment with same @@ -261,7 +243,7 @@ def irf(self, vp, **kwargs): return irf_cp, irf_e -class patlak(pk_model): +class Patlak(PKModel): """Patlak model subclass. Tracer is present in the blood plasma compartment with same concentration @@ -281,12 +263,12 @@ def irf(self, vp, ps, **kwargs): irf_cp[0] = 2. * vp / self.dt_upsample # calculate irf for the EES (constant term) - irf_e = np.ones(self.n_upsample, dtype=float) * (1./60.) * ps + irf_e = np.ones(self.n_upsample, dtype=float) * (1. / 60.) * ps return irf_cp, irf_e -class extended_tofts(pk_model): +class ExtendedTofts(PKModel): """Extended tofts model subclass. Tracer is present in the blood plasma compartment with same concentration @@ -306,12 +288,12 @@ def irf(self, vp, ps, ve, **kwargs): irf_cp[0] = 2. * vp / self.dt_upsample # calculate irf for the EES - irf_e = (1./60.) * ps * np.exp(-(self.tau_upsample * ps)/(60. * ve)) + irf_e = (1. / 60.) * ps * np.exp(-(self.tau_upsample * ps) / (60. * ve)) return irf_cp, irf_e -class tcum(pk_model): +class TCUM(PKModel): """Two-compartment uptake model subclass. Tracer flows from AIF to the blood plasma compartment; one-way leakage @@ -329,18 +311,18 @@ def irf(self, vp, ps, fp, **kwargs): fp_per_s = fp / (60. * 100.) ps_per_s = ps / 60. tp = vp / (fp_per_s + ps_per_s) - ktrans = ps_per_s / (1 + ps_per_s/fp_per_s) + ktrans = ps_per_s / (1 + ps_per_s / fp_per_s) # calculate irf for capillary plasma - irf_cp = fp_per_s * np.exp(-self.tau_upsample/tp) + irf_cp = fp_per_s * np.exp(-self.tau_upsample / tp) # calculate irf for the EES - irf_e = ktrans * (1 - np.exp(-self.tau_upsample/tp)) + irf_e = ktrans * (1 - np.exp(-self.tau_upsample / tp)) return irf_cp, irf_e -class tcxm(pk_model): +class TCXM(PKModel): """Two-compartment exchange model subclass. Tracer flows from AIF to the blood plasma compartment; two-way leakage @@ -361,24 +343,26 @@ def irf(self, vp, ps, ve, fp, *args, **kwargs): T = v / fp_per_s tc = vp / fp_per_s te = ve / ps_per_s - sig_p = ((T + te) + np.sqrt((T + te)**2 - (4 * tc * te)))/(2 * tc * te) - sig_n = ((T + te) - np.sqrt((T + te)**2 - (4 * tc * te)))/(2 * tc * te) + sig_p = ((T + te) + np.sqrt((T + te) ** 2 - (4 * tc * te))) / ( + 2 * tc * te) + sig_n = ((T + te) - np.sqrt((T + te) ** 2 - (4 * tc * te))) / ( + 2 * tc * te) # calculate irf for capillary plasma irf_cp = vp * sig_p * sig_n * ( - (1 - te*sig_n) * np.exp(-self.tau_upsample*sig_n) + (te*sig_p - 1.) - * np.exp(-self.tau_upsample*sig_p) - ) / (sig_p - sig_n) + (1 - te * sig_n) * np.exp(-self.tau_upsample * sig_n) + ( + te * sig_p - 1.) * np.exp(-self.tau_upsample * sig_p)) / ( + sig_p - sig_n) # calculate irf for the EES - irf_e = ve * sig_p * sig_n * (np.exp(-self.tau_upsample*sig_n) - - np.exp(-self.tau_upsample*sig_p) - ) / (sig_p - sig_n) + irf_e = ve * sig_p * sig_n * ( + np.exp(-self.tau_upsample * sig_n) - np.exp( + -self.tau_upsample * sig_p)) / (sig_p - sig_n) return irf_cp, irf_e -class tofts(pk_model): +class Tofts(PKModel): """Tofts model subclass. Tracer flows from AIF to the EES via a negligible blood plasma compartment; @@ -399,6 +383,6 @@ def irf(self, ktrans, ve, **kwargs): irf_cp = np.zeros(self.n_upsample, dtype=float) # calculate irf for the EES - irf_e = ktrans_per_s * np.exp(-self.tau_upsample * ktrans_per_s/ve) + irf_e = ktrans_per_s * np.exp(-self.tau_upsample * ktrans_per_s / ve) return irf_cp, irf_e diff --git a/src/relaxivity.py b/src/relaxivity.py index 61f2ffc..9b64401 100644 --- a/src/relaxivity.py +++ b/src/relaxivity.py @@ -5,24 +5,20 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: c_to_r_model abstract class and derived subclasses: - c_to_r_linear +Classes: CRModel abstract class and derived subclasses: + CRLinear """ from abc import ABC, abstractmethod -class c_to_r_model(ABC): +class CRModel(ABC): """Abstract base class for relaxivity models. Subclasses correspond to specific relaxivity models (e.g. linear). The main purpose of these classes is to convert tracer concentration to relaxation rates. - Methods - ------- - R1(R10, c): - get the R1 relaxation rate for a given tracer concentration """ @abstractmethod @@ -36,20 +32,19 @@ def R2(self, R20, c): pass -class c_to_r_linear(c_to_r_model): +class CRLinear(CRModel): """Linear relaxivity subclass. Linear relationship between R1/R2 and concentration. - - Parameters - ---------- - r1 : float - R1 relaxivity (s^-1 mM^-1) - r2 : float - R2 relaxivity (s^-1 mM^-1) """ def __init__(self, r1, r2): + """ + + Args: + r1 (float): R1 relaxivity (s^-1 mM^-1) + r2 (float): R2 relaxivity (s^-1 mM^-1) + """ self.r1 = r1 self.r2 = r2 diff --git a/src/signal_models.py b/src/signal_models.py index 814f423..1b16755 100644 --- a/src/signal_models.py +++ b/src/signal_models.py @@ -5,15 +5,15 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: signal_model and derived subclasses: - spgr +Classes: SignalModel and derived subclasses: + SPGR """ from abc import ABC, abstractmethod import numpy as np -class signal_model(ABC): +class SignalModel(ABC): """Abstract base class for signal models. Subclasses correspond to specific signal models (e.g. SPGR). The purpose of @@ -23,13 +23,10 @@ class signal_model(ABC): The class attributes are the acquisition parameters and are determined by the subclass. - Methods - ------- - R_to_s(s0, R1, R2, R2s, k): get the signal """ @abstractmethod - def R_to_s(self, s0, R1, R2, R2s, k): + def R_to_s(self, s0, R1, R2, R2s, k_fa): """Convert relaxation parameters to signal. Parameters @@ -42,7 +39,7 @@ def R_to_s(self, s0, R1, R2, R2s, k): R2 relaxation rate (s^-1). R2s : float R2* signal dephasing rate (s^-1). - k : float + k_fa : float B1 correction factor, equal to the actual/nominal flip angle. Returns @@ -53,27 +50,26 @@ def R_to_s(self, s0, R1, R2, R2s, k): pass -class spgr(signal_model): +class SPGR(SignalModel): """Signal model subclass for spoiled gradient echo pulse sequence. - Attributes - ---------- - tr : float - repetition time (s) - fa : float - flip angle (deg) - te : float - echo time (s) """ def __init__(self, tr, fa, te): + """ + + Args: + tr (float): repetition time (s) + fa (float): flip angle (deg) + te (float): echo time (s) + """ self.tr = tr self.fa = fa self.te = te - def R_to_s(self, s0, R1, R2=None, R2s=0, k=1.): + def R_to_s(self, s0, R1, R2=None, R2s=0, k_fa=1): """Get signal for this model. Overrides superclass method.""" - fa = k * self.fa * np.pi/180 + fa = k_fa * self.fa * np.pi / 180 s = s0 * (((1.0-np.exp(-self.tr*R1))*np.sin(fa)) / (1.0-np.exp(-self.tr*R1)*np.cos(fa)) ) * np.exp(-self.te*R2s) diff --git a/src/t1_fit.py b/src/t1_fit.py index 09232bc..7898527 100644 --- a/src/t1_fit.py +++ b/src/t1_fit.py @@ -5,97 +5,219 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK +Classes: + VFA2Points + VFALinear + VFANonLinear + HIFI + Functions: - fit_vfa_2_point: obtain T1 using analytical formula based on two images - fit_vfa_linear: obtain T1 using linear regression - fit_vfa_nonlinear: obtain T1 using non-linear least squares fit - fit_hifi: obtain T1 by fitting a combination of SPGR and IR-SPGR scans spgr_signal: get SPGR signal irspgr_signal: get IR-SPGR signal """ import numpy as np -from scipy.optimize import curve_fit, least_squares -from fitting import calculator +from scipy.optimize import least_squares +from fitting import Fitter + +class VFA2Points(Fitter): + """Estimate T1 with 2 flip angles. + + Subclass of Fitter. + """ -class vfa_2points(calculator): def __init__(self, fa, tr): + """ + + Args: + fa (ndarray): 1D array containing the two flip angles (deg) + tr: (float): TR (s) + """ self.fa = np.asarray(fa) self.tr = tr - self.fa_rad = np.pi*self.fa/180 - + self.fa_rad = np.pi * self.fa / 180 + + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('s0', False), ('t1', False) + def proc(self, s, k_fa=1): + """Estimate T1. Overrides superclass method. + + Args: + s (ndarray): 1D array containing the two signals + k_fa (float): B1 correction factor, i.e. actual/nominal flip angle. + + Returns: + tuple: (s0, t1) + s0 (float): fully T1-relaxed signal + t1 (float): T1 (s) + + """ + if any(np.isnan(s)): + raise ValueError( + f'Unable to calculate T1: nan signal values received.') with np.errstate(divide='ignore', invalid='ignore'): fa_true = k_fa * self.fa_rad sr = s[0] / s[1] t1 = self.tr / np.log( - (sr*np.sin(fa_true[1])*np.cos(fa_true[0]) - - np.sin(fa_true[0])*np.cos(fa_true[1])) / - (sr*np.sin(fa_true[1]) - np.sin(fa_true[0]))) - s0 = s[0] * ((1-np.exp(-self.tr/t1)*np.cos(fa_true[0])) / - ((1-np.exp(-self.tr/t1))*np.sin(fa_true[0]))) + (sr * np.sin(fa_true[1]) * np.cos(fa_true[0]) - + np.sin(fa_true[0]) * np.cos(fa_true[1])) / + (sr * np.sin(fa_true[1]) - np.sin(fa_true[0]))) + s0 = s[0] * ((1 - np.exp(-self.tr / t1) * np.cos(fa_true[0])) / + ((1 - np.exp(-self.tr / t1)) * np.sin(fa_true[0]))) - t1 = np.nan if ~np.isreal(t1) | (t1 <= 0) | np.isinf(t1) else t1 - s0 = np.nan if (s0 <= 0) | np.isinf(s0) else s0 + if ~np.isreal(t1) | (t1 <= 0) | np.isinf(t1) | (s0 <= 0) | np.isinf(s0): + raise ArithmeticError('T1 estimation failed.') - return {'s0': s0, 't1': t1} + return s0, t1 -class vfa_linear(calculator): +class VFALinear(Fitter): + """Linear variable flip angle T1 estimation. + + Subclass of Fitter. + """ + def __init__(self, fa, tr): + """ + + Args: + fa (ndarray): 1D array containing the flip angles (deg) + tr: (float): TR (s) + """ self.fa = np.asarray(fa) self.tr = tr - self.fa_rad = np.pi*self.fa/180 - + self.fa_rad = np.pi * self.fa / 180 + + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('s0', False), ('t1', False) + def proc(self, s, k_fa=1): + """Estimate T1. Overrides superclass method. + + Args: + s (ndarray): 1D array containing the signals + k_fa (float): B1 correction factor, i.e. actual/nominal flip angle. + + Returns: + tuple: (s0, t1) + s0 (float): fully T1-relaxed signal + t1 (float): T1 (s) + + """ + if any(np.isnan(s)) or np.isnan(k_fa): + raise ArithmeticError( + f'Unable to calculate T1: nan signal or k_fa values received.') fa_true = k_fa * self.fa_rad y = s / np.sin(fa_true) x = s / np.tan(fa_true) A = np.stack([x, np.ones(x.shape)], axis=1) slope, intercept = np.linalg.lstsq(A, y, rcond=None)[0] - - is_valid = (intercept > 0) and (0. < slope < 1.) - t1, s0 = (-self.tr/np.log(slope), - intercept/(1-slope)) if is_valid else (np.nan, np.nan) - return {'s0': s0, 't1': t1} + if (intercept < 0) or ~(0. < slope < 1.): + raise ArithmeticError('T1 estimation failed.') + + t1, s0 = -self.tr / np.log(slope), intercept / (1 - slope) + return s0, t1 + + +class VFANonLinear(Fitter): + """Non-linear variable flip angle T1 estimation. + + Subclass of Fitter. + """ -class vfa_nonlinear(calculator): def __init__(self, fa, tr): + """ + + Args: + fa (ndarray): 1D array containing the flip angles (deg) + tr: (float): TR (s) + """ self.fa = np.asarray(fa) self.tr = tr - self.fa_rad = np.pi*self.fa/180 - self.linear_fitter = vfa_linear(fa, tr) + self.fa_rad = np.pi * self.fa / 180 + self.linear_fitter = VFALinear(fa, tr) - def proc(self, s, k_fa=1): - # use linear fit to obtain initial guess - result_linear = self.linear_fitter.proc(s, k_fa=k_fa) - x_linear = np.array((result_linear['s0'], result_linear['t1'])) - if (~np.isnan(x_linear[0]) & ~np.isnan(x_linear[1])): - x0 = x_linear - else: - x0 = np.array([s[0] / spgr_signal(1., 1., self.tr, k_fa*self.fa[0]), 1.]) + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('s0', False), ('t1', False) - result = least_squares(self.__residuals, x0, args=(s, k_fa), bounds=((1e-8,1e-8),(np.inf,np.inf)), method='trf', - x_scale=x0 - ) + def proc(self, s, k_fa=1): + """Estimate T1. Overrides superclass method. + + Args: + s (ndarray): 1D array containing the signals + k_fa (float): B1 correction factor, i.e. actual/nominal flip angle. + + Returns: + tuple: (s0, t1) + s0 (float): fully T1-relaxed signal + t1 (float): T1 (s) + + """ + if any(np.isnan(s)) or np.isnan(k_fa): + raise ValueError( + f'Unable to calculate T1: nan signal or k_fa values received.') + # use linear fit to obtain initial guess, otherwise start with T1=1 + try: + x0 = np.array(self.linear_fitter.proc(s, k_fa=k_fa)) + except ArithmeticError: + x0 = np.array([s[0] / spgr_signal(1., 1., self.tr, k_fa * self.fa[ + 0]), 1.]) + + result = least_squares(self.__residuals, x0, args=(s, k_fa), bounds=( + (1e-8, 1e-8), (np.inf, np.inf)), method='trf', x_scale=x0) if result.success is False: - raise ArithmeticError(f'Unable to fit VFA data' - f': {result.message}') - + raise ArithmeticError(f'Unable to fit VFA data:' + f' {result.message}') + s0, t1 = result.x - return {'s0': s0, 't1': t1} - + return s0, t1 + def __residuals(self, x, s, k_fa): s0, t1 = x - s_est = spgr_signal(s0, t1, self.tr, k_fa*self.fa) + s_est = spgr_signal(s0, t1, self.tr, k_fa * self.fa) return s - s_est -class hifi(calculator): +class HIFI(Fitter): + """DESPOT1-HIFI T1 estimation. + + Subclass of Fitter. + Note: perfect inversion is assumed for IR-SPGR signals. + """ + def __init__(self, esp, ti, n, b, td, centre): + """ + + Args: + esp (ndarray): Echo spacings (s, 1 float per acquisition). + Equivalent to TR for SPGR scans. + ti (ndarray): Inversion times (s, 1 per acquisition). Note this + is the actual time delay between the inversion pulse and the + start of the echo train. The effective TI may be different, + e.g for linear phase encoding of the echo train. For SPGR, + set values to np.nan. + n (ndarray): Number of excitation pulses per inversion pulse (1 + int value per acquisition). For SPGR, set values to np.nan. + b (ndarray): Excitation flip angles (deg, 1 float per acquisition). + td (ndarray): Delay between readout train and next inversion + pulse (s, 1 float per acquisition). For SPGR, set values to + np.nan. + centre (ndarray): Times in readout train when centre of k-space + is acquired, expressed as a fraction of the readout duration. + e.g. = 0 for centric phase encoding, = 0.5 for linear phase + encoding (float, 1 per acquisition). For SPGR, set values to + np.nan. + """ self.esp = esp self.ti = ti self.n = n @@ -110,56 +232,84 @@ def __init__(self, esp, ti, n, b, td, centre): self.n_spgr = self.idx_spgr.size self.get_linear_estimate = self.n_spgr > 1 and np.all( np.isclose(esp[self.idx_spgr], esp[self.idx_spgr[0]])) - self.linear_fitter = vfa_linear( b[self.is_spgr], esp[self.idx_spgr[0]]) - + if self.get_linear_estimate: + self.linear_fitter = VFALinear(b[self.is_spgr], + esp[self.idx_spgr[0]]) + self.max_k_fa = 90 / max(self.b[self.is_ir]) if any(self.is_ir) else \ + np.inf + + def output_info(self): + """Get output info. Overrides superclass method. + """ + return ('s0', False), ('t1', False), ('k_fa', False), ('s_opt', True) + def proc(self, s, k_fa_fixed=None): + """Estimate T1 and k_fa. Overrides superclass method. + + Args: + s (ndarray): 1D array containing the signals + k_fa_fixed (float): Value to which k_fa (actual/nominal flip + angle) is fixed. If set to None (default) then the value of k_fa + is optimised. + + Returns: + tuple: s0, t1, k_fa, s_opt + s0 (float): fully T1-relaxed signal + t1 (float): T1 (s) + k_fa (float): flip angle correction factor + s_opt (ndarray): fitted signal intensities + """ # First get a quick linear T1 estimate if self.get_linear_estimate: # If >1 SPGR, use linear VFA fit - result_lin = self.linear_fitter.proc(s[self.is_spgr]) - if ~np.isnan(result_lin['s0']) and ~np.isnan(result_lin['t1']): - s0_init, t1_init = result_lin['s0'], result_lin['t1'] - else: # if result invalid, assume T1=1 + i = self.idx_spgr[0] + try: + s0_init, t1_init = self.linear_fitter.proc(s[self.is_spgr]) + except ArithmeticError: # if result invalid, assume T1=1 t1_init = 1 - s0_init = s[self.idx_spgr[0]] / spgr_signal(1, t1_init, - self.esp[self.idx_spgr[0]], - self.b[self.idx_spgr[0]]) - elif self.n_spgr == 1: # If 1 SPGR, assume T1=1 and estimate s0 based on this scan + s0_init = s[i] / spgr_signal(1, t1_init, self.esp[i], self.b[i]) + # If 1 SPGR scan, assume T1=1 and estimate s0 based on 1st SPGR scan + elif self.n_spgr == 1: + i = self.idx_spgr[0] t1_init = 1 - s0_init = s[self.idx_spgr[0]] / spgr_signal(1, t1_init, - self.esp[self.idx_spgr[0]], - self.b[self.idx_spgr[0]]) - else: # If 0 SPGR, assume T1=1 and estimate s0 based on 1st scan + s0_init = s[i] / spgr_signal(1, t1_init, self.esp[i], self.b[i]) + # If 0 SPGR scans, assume T1=1 and estimate s0 based on 1st scan + else: t1_init = 1 - s0_init = s[0] / irspgr_signal(1, t1_init, self.esp[0], self.ti[0], self.n[0], self.b[0], - 180, self.td[0], self.centre[0]) - - # Non-linear fit + s0_init = s[0] / irspgr_signal(1, t1_init, self.esp[0], self.ti[0], + self.n[0], self.b[0], self.td[0], + self.centre[0]) + # Now do a non-linear fit using all scans if k_fa_fixed is None: k_init = 1 - bounds = ([0, 0, 0], [np.inf, np.inf, np.inf]) + bounds = ([0, 0, 0], [np.inf, np.inf, self.max_k_fa]) else: k_init = k_fa_fixed - bounds = ([0, 0, 1], [np.inf, np.inf, 1]) + bounds = ([0, 0, k_fa_fixed-1e-8], [np.inf, np.inf, k_fa_fixed]) x_0 = np.array([t1_init, s0_init, k_init]) - result = least_squares(self.__residuals, x_0, args=(s,), bounds=bounds, method='trf', - x_scale=(t1_init, s0_init, k_init) - ) - x_opt = result.x if result.success else (np.nan, np.nan, np.nan) - t1_opt, s0_opt, k_fa_opt = x_opt - s_opt = self.__signal(x_opt) - return {'t1': t1_opt, 's0': s0_opt, 'k_fa': k_fa_opt, 's_opt': s_opt} + result = least_squares(self.__residuals, x_0, args=(s,), bounds=bounds, + method='trf', + x_scale=(t1_init, s0_init, k_init) + ) + if not result.success: + raise ArithmeticError(f'Unable to fit HIFI data: {result.message}') + t1, s0, k_fa = result.x + s_opt = self.__signal(result.x) + return s0, t1, k_fa, s_opt def __residuals(self, x, s): return s - self.__signal(x) - + def __signal(self, x): + # calculate signal for all of the (IR-)SPGR scans t1, s0, k_fa = x s = np.zeros(self.n_scans) - s[self.is_ir] = irspgr_signal(s0, t1, self.esp[self.is_ir], self.ti[self.is_ir], - self.n[self.is_ir], k_fa*self.b[self.is_ir], self.td[self.is_ir], - self.centre[self.is_ir]) + s[self.is_ir] = irspgr_signal(s0, t1, self.esp[self.is_ir], + self.ti[self.is_ir], self.n[self.is_ir], + k_fa * self.b[self.is_ir], + self.td[self.is_ir], + self.centre[self.is_ir]) s[self.is_spgr] = spgr_signal(s0, t1, self.esp[self.is_spgr], - k_fa*self.b[self.is_spgr]) + k_fa * self.b[self.is_spgr]) return s @@ -175,23 +325,22 @@ def spgr_signal(s0, t1, tr, fa): tr : float TR value (s). fa : float - Flip angle (deg). + Flip angle (deg). Returns ------- s : float Steady-state SPGR signal. """ - fa_rad = np.pi*fa/180 + fa_rad = np.pi * fa / 180 - e = np.exp(-tr/t1) - s = s0 * (((1-e)*np.sin(fa_rad)) / - (1-e*np.cos(fa_rad))) + e = np.exp(-tr / t1) + s = abs(s0 * (((1 - e) * np.sin(fa_rad)) / (1 - e * np.cos(fa_rad)))) return s -def irspgr_signal(s0, t1, esp, ti, n, b, td=0, centre=0.5): +def irspgr_signal(s0, t1, esp, ti, n, b, td, centre): """Return signal for IR-SPGR sequence. Uses formula by Deichmann et al. (2000) to account for modified @@ -226,26 +375,24 @@ def irspgr_signal(s0, t1, esp, ti, n, b, td=0, centre=0.5): s : float Steady-state IR-SPGR signal. """ - b_rad = np.pi*b/180 + b_rad = np.pi * b / 180 tau = esp * n - t1_star = (1/t1 - 1/esp*np.log(np.cos(b_rad)))**-1 - m0_star = s0 * ((1-np.exp(-esp/t1)) / (1-np.exp(-esp/t1_star))) + t1_star = 1 / (1 / t1 - 1 / esp * np.log(np.cos(b_rad))) + m0_star = s0 * ((1 - np.exp(-esp / t1)) / (1 - np.exp(-esp / t1_star))) - r1 = -tau/t1_star + r1 = -tau / t1_star e1 = np.exp(r1) - e2 = np.exp(-td/t1) - e3 = np.exp(-ti/t1) + e2 = np.exp(-td / t1) + e3 = np.exp(-ti / t1) - a1 = m0_star * (1-e1) + a1 = m0_star * (1 - e1) a2 = s0 * (1 - e2) a3 = s0 * (1 - e3) - a = a3 - a2*e3 - a1*e2*e3 - b = -e1*e2*e3 + a = a3 - a2 * e3 - a1 * e2 * e3 + b = -e1 * e2 * e3 - m1 = a/(1-b) + m1 = a / (1 - b) - s = np.abs(( - m0_star + (m1-m0_star)*np.exp(centre*r1))*np.sin(b_rad)) - - return s \ No newline at end of file + s = np.abs((m0_star + (m1 - m0_star) * np.exp(centre * r1)) * np.sin(b_rad)) + return s diff --git a/src/utils/fit_t1_image.py b/src/utils/fit_t1_image.py deleted file mode 100644 index 7c464bd..0000000 --- a/src/utils/fit_t1_image.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -''' -Created on Thu Aug 19 17:46:47 2021 -@author: Michael Thrippleton -@email: m.j.thrippleton@ed.ac.uk -@institution: University of Edinburgh, UK - -WORK IN PROGRESS -''' - -import nibabel as nib -import numpy as np -from MJT_UoEdinburghUK import t1_fit - -def fit_vfa_image(tr, fa_rad, filenames, threshold=0, output_name='./vfa_map', method='linear'): - # Load input images - images = [nib.load(fn) for fn in filenames] - - # Get and reshape voxel data - s_nd = np.stack( [img.get_fdata() for img in images], axis=3 ) # N-D signal array - s_2d = s_nd.reshape(-1, s_nd.shape[-1]) # N-voxels x N-flip-angles - - # Get (T1, S0) for each voxel - if method=='linear': - results = [ t1_fit.fit_vfa_linear(s, fa_rad, tr) if np.max(s)>threshold else (np.nan, np.nan) for s in s_2d] - elif method=='non-linear': - results = [ t1_fit.fit_vfa_nonlinear(s, fa_rad, tr) if np.max(s)>threshold else (np.nan, np.nan) for s in s_2d] - else: - raise ValueError(f'Value of argument method not recognised: {method}') - - # Separate T1 and S0, then reshape to N-D - s0_1d, t1_1d = zip(*results) - s0_nd = np.asarray(s0_1d).reshape(s_nd.shape[:-1]) - t1_nd = np.asarray(t1_1d).reshape(s_nd.shape[:-1]) - - # Write output images - del s_nd, s_2d, s0_1d, t1_1d - new_hdr = images[0].header.copy() - new_hdr.set_data_dtype(np.float32) - t1_img = nib.nifti1.Nifti1Image(t1_nd, None, header = new_hdr) - s0_img = nib.nifti1.Nifti1Image(s0_nd, None, header = new_hdr) - nib.save(t1_img, f'{output_name}_t1.nii') - nib.save(s0_img, f'{output_name}_s0.nii') diff --git a/src/utils/imaging.py b/src/utils/imaging.py index 8546ac2..35f78b7 100644 --- a/src/utils/imaging.py +++ b/src/utils/imaging.py @@ -1,4 +1,4 @@ -"""Utilities. +"""Functions for dealing with images. Created 6 October 2021 @authors: Michael Thrippleton @@ -6,47 +6,96 @@ @institution: University of Edinburgh, UK Functions: - minimize_global + read_images + write_image + roi_measure """ import nibabel as nib import numpy as np -from scipy.optimize import minimize, least_squares def read_images(images): + """Read and combine array or nifti images. + + Read one or more images. If there are >1 images, they are concatenated + along a new dimension. + + Args: + images (list): List of ndarrays containing image data + or strs indicating nifti image paths. + + Returns: + tuple: (data, header) + data (ndarray): combined image data + header (nibabel header): image header of first nifti image. If + input images are not nifti, None is returned. + """ images = [images] if type(images) is not list else images if all([type(i) is str for i in images]): - data = np.stack([nib.load(i).get_fdata() for i in images], axis=-1) - header = nib.load(images[0]).header + data = np.stack([nib.load(i).get_fdata() for i in images], axis=-1) + header = nib.load(images[0]).header elif all([type(i) is np.ndarray for i in images]): - data = np.stack(images, axis=-1) - header = None + data = np.stack(images, axis=-1) + header = None else: - raise TypeError('Argument images should contain all strings or all ndarrays.') + raise TypeError('Argument images should contain all strings or all' + ' ndarrays.') if data.shape[-1] == 1: data = data.squeeze(axis=-1) return data, header + +def write_image(data, filepath, hdr): + """Wrapper to save image using nibabel + + Args: + data (ndarray): image data + filepath (str): path and filename for output image + hdr (nibabel header): header template for output image + """ + img = nib.nifti1.Nifti1Image(data, None, header=hdr) + nib.save(img, filepath) + + def roi_measure(image, mask_image): + """Calculate statistics for voxels within a mask. + + If the image has the same shape as the mask image, a single set of + statistics is returned. If the image has one additional dimension ( + e.g. a time series) then a series of values are returned corresponding to + locations in the last dimension. + + Args: + image (list, str, ndarray): Array containing input image data or str + corresponding to nifti image file path. If a list of ndarray or str + is provided the images will first be concatenated along a new + dimension. + mask_image (str, ndarray): Mask image. + + Returns: + dict{'mean': mean, 'median': median, 'sd': sd} + mean, median and sd (float, ndarray): statistics for masked + voxels. For input data with one more dimension than the mask + image (e.g. a time series), a 1D array of floats is returned. + """ + # read images and mask data, _hdr = read_images(image) mask, _hdr = read_images(mask_image) - - # THIS WONT WORK. SORT OUT DIMENSIONS AND LOOPING if mask.ndim == data.ndim: - data = np.expand_dims(data, axis=0) - - if not all((mask==0) | (mask==1)): + data = np.expand_dims(data, axis=-1) + if not np.all((mask[:] == 0) | (mask[:] == 1)): raise ValueError('Mask contains values that are not 0 or 1.') - + # flatten spatial dimensions - data = data.reshape(data.shape[0], -1) - mask = mask.reshape(mask.shape[0], -1) - masked_data = data[:, mask==1] - - mean = np.squeeze([np.nanmean(m_d) for m_d in masked_data]) - median = np.squeeze([np.nanmedian(m_d) for m_d in masked_data]) - sd = np.squeeze([np.nanstd(m_d) for m_d in masked_data]) - - return {'mean': mean, 'median': median, 'sd': sd} - + data_2d = data.reshape(-1, data.shape[-1]) # 2D [location, time] format + mask_1d = mask.reshape(-1) + + # measure statistics for masked voxels + masked_voxels = data_2d[mask_1d == 1, :] + stats = [(np.nanmean(m_d), np.nanmedian(m_d), np.nanstd(m_d)) + for m_d in masked_voxels.transpose()] + mean, median, sd = zip(*stats) + + return {'mean': np.squeeze(mean), 'median': np.squeeze(median), + 'sd': np.squeeze(sd)} diff --git a/src/utils/utilities.py b/src/utils/utilities.py index 0dac114..30c81dc 100644 --- a/src/utils/utilities.py +++ b/src/utils/utilities.py @@ -7,6 +7,7 @@ Functions: minimize_global + least_squares_global """ import nibabel as nib @@ -38,9 +39,10 @@ def minimize_global(cost, x_0_all, **minimizer_kwargs): cost = min(costs) idx = costs.index(cost) result = results[idx] - + return result + def least_squares_global(res, x_0_all, **least_squares_kwargs): """Find global minimum by calling scipy.optimize.least_squares multiple times. @@ -68,12 +70,3 @@ def least_squares_global(res, x_0_all, **least_squares_kwargs): result = results[idx] return result - -def read_images(images): - if all([type(i) is str for i in images]): - data = np.stack([nib.load(i).get_fdata() for i in images], axis=-1) - elif all([type(i) is np.ndarray for i in images]): - data = np.stack(images, axis=-1) - else: - raise TypeError('Argument images should contain all strings or all ndarrays.') - return data \ No newline at end of file diff --git a/src/water_ex_models.py b/src/water_ex_models.py index 91cf028..7861b07 100644 --- a/src/water_ex_models.py +++ b/src/water_ex_models.py @@ -5,16 +5,16 @@ @email: m.j.thrippleton@ed.ac.uk @institution: University of Edinburgh, UK -Classes: water_ex_model and derived subclasses: - fxl - nxl - ntexl +Classes: WaterExModel and derived subclasses: + FXL + NXL + NTEXL """ from abc import ABC, abstractmethod -class water_ex_model(ABC): +class WaterExModel(ABC): """Abstract base class for water exchange models. Subclasses correspond to specific models (e.g. fast-exchange limit). The @@ -23,17 +23,11 @@ class water_ex_model(ABC): tissue compartment (blood, EES and intracellular). For example, in the fast-exchange limit model, the result is a single T1 component, while in the slow exchange limit, the result is 3 T1 components. - - Methods - ------- - R1_components(p, R1): - get the R1 relaxation rates and corresponding population fractions for - each exponential T1 component """ @abstractmethod def R1_components(self, p, R1): - """Get exponential T1 components. + """get the R1 relaxation rates and populations for T1 components. Parameters ---------- @@ -57,7 +51,7 @@ def R1_components(self, p, R1): pass -class fxl(water_ex_model): +class FXL(WaterExModel): """Fast water exchange model. Water exchange between all compartments is in the fast limit. @@ -71,7 +65,7 @@ def R1_components(self, p, R1): return R1_components, p_components -class nxl(water_ex_model): +class NXL(WaterExModel): """No-exchange limit water exchange model. Water exchange between all compartments is in the slow limit. @@ -84,7 +78,7 @@ def R1_components(self, p, R1): return R1_components, p_components -class ntexl(water_ex_model): +class NTEXL(WaterExModel): """No-transendothelial water exchange limit model. Water exchange between blood and EES compartments is in the slow limit.