Skip to content

Commit

Permalink
Merge pull request #3 from mjt320/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
mjt320 authored Apr 14, 2022
2 parents 2607203 + e73df8f commit 1b02616
Show file tree
Hide file tree
Showing 7 changed files with 178 additions and 27 deletions.
2 changes: 1 addition & 1 deletion .idea/SEPAL.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 5 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

**Please note: This library is also hosted in the [OSIPI DCE-DSC-MRI_CodeCollection repository](https://github.com/OSIPI/DCE-DSC-MRI_CodeCollection), where unit tests and perfusion code by other authors can also be found.**

Python library for simulating and fitting DCE-MRI data. It permits arbitrary combinations of pulse sequence, pharmacokinetic model, water exchange model, etc. The code is a work-in-progress, has not been extensively tested and is not recommended or approved for use.
Python library for simulating and fitting DCE-MRI data. It permits arbitrary combinations of pulse sequence, pharmacokinetic model, water exchange model, etc. The code is a work-in-progress, has not been extensively tested and is not recommended or approved for clinical use.

Created 28 September 2020
Created 28 September 2020
@authors: Michael Thrippleton
@email: [email protected]
@institution: University of Edinburgh, UK
Expand All @@ -14,24 +14,22 @@ Created 28 September 2020
- Fit tissue concentration using pharmacokinetic model
- Fit signal enhancement using pharmacokinetic model
- Pharmacokinetic models: steady-state, Patlak, extended Tofts, Tofts, 2CXM, 2CUM
- AIFs: patient-specific (measured), Parker, bi-exponential Parker
- Patlak fitting with multiple linear regression
- AIFs: including patient-specific (measured), Parker, bi-exponential Parker
- Fitting free AIF time delay parameter
- Relaxivity models: linear
- Signal models: spoiled gradient echo
- Water exchange models: FXL, NXL, NXL_be
- T1 fitting using variable flip angle method, IR-SPGR and DESPOT1-HIFI

### Not yet implemented/limitations:
- Generally untested. Not optimised for speed or robustness.
- 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:
- fast C calculation for SPGR with r2=0
- inversion recovery T1 measurement
- inversion recovery T1 measurment
100 changes: 100 additions & 0 deletions demo/demo_conc_to_enh.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 34,
"id": "3b2d4aa7-5b11-44fc-ad48-069caaeab47a",
"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": "code",
"execution_count": 41,
"id": "9439e538-cdd8-4849-bedf-1ead532f0811",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x22bbaed05e0>,\n",
" <matplotlib.lines.Line2D at 0x22bbaed0610>]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"r1, r2 = 5.0, 0\n",
"tr, fa, te = 3.4e-3, 15, 1.7e-3\n",
"t10 = 2\n",
"k_fa = 1.4\n",
"\n",
"enh = np.arange(3000)\n",
"\n",
"c_to_r_model = relaxivity.CRLinear(r1, r2)\n",
"signal_model = signal_models.SPGR(tr, fa, te)\n",
"e_to_c_num = dce_fit.EnhToConc(c_to_r_model, signal_model)\n",
"C_t_num = e_to_c_num.proc(enh, t10, k_fa)\n",
"\n",
"e_to_c_ana = dce_fit.EnhToConcSPGR(tr, fa, r1)\n",
"C_t_ana = e_to_c_ana.proc(enh, t10, k_fa)\n",
"\n",
"plt.plot(enh, C_t_num, 'k-',\n",
" enh, C_t_ana, 'r-')"
]
}
],
"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
}
4 changes: 2 additions & 2 deletions demo/demo_fit_dce.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
Expand All @@ -598,7 +598,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
"version": "3.8.8"
}
},
"nbformat": 4,
Expand Down
Loading

0 comments on commit 1b02616

Please sign in to comment.