cgsense2023


Namecgsense2023 JSON
Version 0.0.5 PyPI version JSON
download
home_pagehttps://github.com/hdocmsu/cgsense2023/
SummaryConjugate Gradient SENSE (CG-SENSE) MRI Reconstruction
upload_time2024-03-14 22:55:32
maintainer
docs_urlNone
authorHung Do, PhD
requires_python>=3.7
licenseMIT License
keywords nbdev
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # CG-SENSE HOME


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## W.I.P Tasks

Contributions to the below tasks are highly appreciated!

- [ ] Document the standardization of the raw h5-file, otherwise
  `read_data()` has to be modified every time a deviation in h5-file is
  encountered.

- [ ] Refactor, simplify, modularize the gridding reconstructions.
  Currently, it is difficult to understand, especially for new learner.

- [x] Add `save_intermediate` flag in gradient descent or conjugate
  gradient optimization functions to store intermediate reconstruction
  in each iteration.

- [ ] Add theoretical descriptions on MRI, MRI recons, and gradient
  Descent, and gonjugate gradient algorithms.

## Homepage

This tutorial <https://hdocmsu.github.io/cgsense2023/> was written by
Hung Do based on the
[RRSG_Challenge_01](https://github.com/ISMRM/rrsg_challenge_01) github
repository.

## How to Cite

[![](https://zenodo.org/badge/DOI/10.5281/zenodo.10547817.svg)](https://doi.org/10.5281/zenodo.10547817)

> APA style:
>
> *Do, H. (2024). CG-SENSE Tutorial version 0.0.3 (0.0.3). Zenodo.
> https://doi.org/10.5281/zenodo.10547817*

> IEEE style:
>
> *H. Do, “CG-SENSE Tutorial version 0.0.3”. Zenodo, Jan. 21, 2024. doi:
> 10.5281/zenodo.10547817.*

## pip install

The [cgsense2023](https://pypi.org/project/cgsense2023/) package was
uploaded to [PyPI](https://pypi.org/) and can be easily installed using
the below command.

`pip install cgsense2023`

## How to use

### Plot Module

``` python
from cgsense2023.plot import *
import numpy as np
```

``` python
# Sequential - full - spoke radial trajectory
traj_full = gen_radial_traj(golden=False, full_spoke=True)
show_trajectory(traj_full, golden=True, figsize=(10,8))
```

![](index_files/figure-commonmark/cell-3-output-1.png)

``` python
# golden - full - spoke radial trajectory
traj_full_golden = gen_radial_traj(golden=True, full_spoke=True)
show_trajectory(traj_full_golden, golden=True, figsize=(10,8))
```

![](index_files/figure-commonmark/cell-4-output-1.png)

``` python
Nim, Nx, Ny = 12, 128, 256
x1 = np.random.randn(Nim, Nx, Ny)
x2 = np.random.randn(1, Nx, Ny)
```

``` python
show_image_grid(x1)
```

    Warning: number of images (12) is larger than number of panels (2x5)!

![](index_files/figure-commonmark/cell-6-output-2.png)

``` python
show_image_grid(x2)
```

![](index_files/figure-commonmark/cell-7-output-1.png)

### Metrics Module

``` python
from cgsense2023.metrics import *
import numpy as np
```

``` python
# same dimensions
Nim, Nx, Ny = 11, 128, 256
x1 = np.random.randn(1, Nx, Ny)
x2 = np.random.randn(1, Nx, Ny)
print_metrics(x1, x2)
```

    +---------+-----------+
    | Metrics |   Values  |
    +---------+-----------+
    |   MSE   | 1.999e+00 |
    |   NMSE  | 2.000e+00 |
    |   RMSE  | 1.414e+00 |
    |  NRMSE  | 1.414e+00 |
    |   PSNR  |   14.981  |
    |   SSIM  | 0.0092604 |
    +---------+-----------+

### Gridding Reconstruction

``` python
from cgsense2023.math import *
from cgsense2023.io import *
import cgsense2023 as cgs2003
from cgsense2023.mri import *
from cgsense2023.optimizer import *
import h5py
import numpy as np
import matplotlib.pyplot as plt
```

#### Data Paths

``` python
# path to the data file
fpath = '../testdata/rawdata_brain.h5'
# path to the reference results
rpath = '../testdata/CG_reco_inscale_True_denscor_True_reduction_1.h5'
```

``` python
with h5py.File(rpath, 'r') as rf:
    print(list(rf.keys()))
    ref_cg = np.squeeze(rf['CG_reco'][()][-1])
    ref_grid = np.squeeze(rf['Coil_images'][()])
```

    ['CG_reco', 'Coil_images']

``` python
ref_cg.shape, ref_grid.shape
```

    ((300, 300), (12, 300, 300))

#### Setup Parameters

``` python
# one stop shop for all Parameters and Data
params = setup_params(fpath, R=1)
```

    ['Coils', 'InScale', 'rawdata', 'trajectory']

#### Setup MRI Operator

``` python
# Set up MRI operator
mrimodel = MriImagingModel(params)
mriop = MriOperator(data_par=params["Data"],optimizer_par=params["Optimizer"])
mriop.set_operator(mrimodel)
# Single Coil images after FFT
my_grid = mriop.operator.NuFFT.adjoint(params['Data']['rawdata_density_cor'])
```

``` python
my_grid.shape, ref_grid.shape
```

    ((12, 300, 300), (12, 300, 300))

``` python
# test gridding recon results
np.allclose(ref_grid, my_grid)
```

    True

``` python
# test gridding recon results
np.array_equal(ref_grid, my_grid)
```

    False

``` python
print_metrics(np.abs(ref_grid[0]), np.abs(my_grid[0]))
```

    +---------+-----------+
    | Metrics |   Values  |
    +---------+-----------+
    |   MSE   | 1.472e-24 |
    |   NMSE  | 5.905e-15 |
    |   RMSE  | 1.213e-12 |
    |  NRMSE  | 7.684e-08 |
    |   PSNR  |   154.87  |
    |   SSIM  |    1.0    |
    +---------+-----------+

``` python
show_image_grid(my_grid, figsize=(10,10), rows=3, cols=4)
```

![](index_files/figure-commonmark/cell-20-output-1.png)

``` python
show_image_grid(rss_rec(my_grid), figsize=(10,10))
```

![](index_files/figure-commonmark/cell-21-output-1.png)

### Gradient Descent

``` python
guess = np.zeros((params['Data']['image_dim'],params['Data']['image_dim']))
SD_result, SD_residuals, SD_ref_res = steepest_descent(mriop, guess, 
                                            params['Data']['rawdata_density_cor'], 
                                            iters=50,
                                            ref=ref_cg)
```

    Residuum at iter 50 : 6.553379e-06

``` python
show_compared_images(np.abs(ref_cg), np.abs(SD_result), diff_fac=10, 
                     labels=['Reference', 'Steepest Descent', 'diff'])
```

![](index_files/figure-commonmark/cell-23-output-1.png)

``` python
np.allclose(ref_cg, SD_result)
```

    False

``` python
print_metrics(np.abs(ref_cg), np.abs(SD_result))
```

    +---------+-----------+
    | Metrics |   Values  |
    +---------+-----------+
    |   MSE   | 5.633e-14 |
    |   NMSE  | 7.888e-05 |
    |   RMSE  | 2.373e-07 |
    |  NRMSE  | 8.882e-03 |
    |   PSNR  |   55.242  |
    |   SSIM  |   0.9988  |
    +---------+-----------+

### CG’s Semi-Convergence Behavior

``` python
CG_result, CG_residuals, CG_ref_res = conjugate_gradient(mriop, guess, 
                                            params['Data']['rawdata_density_cor'], 
                                            iters=50,
                                            ref=ref_cg)
```

    Residuum at iter 50 : 2.993229e-06

``` python
plt.plot(np.log10(SD_ref_res),'*--', label='SD reference_norms');
plt.plot(np.log10(SD_residuals),'*--', label='SD residual_norms');
plt.plot(np.log10(CG_ref_res),'*--', label='CG reference_norms');
plt.plot(np.log10(CG_residuals),'*--', label='CG residual_norms');
plt.grid();
plt.xlabel("# iteration")
plt.ylabel("residuals (log10)")
plt.legend();
```

![](index_files/figure-commonmark/cell-27-output-1.png)

### Conjugate Gradient vs. REF

Based on the “semi-convergence” plot above, the optimal number of
iterations for CG and SD are around 10 and 28, respectively.

``` python
CG_result_vs_REF, _, _ = conjugate_gradient(mriop, guess, 
                                            params['Data']['rawdata_density_cor'], 
                                            iters=10,
                                            ref=ref_cg)
```

    Residuum at iter 10 : 1.826174e-05

``` python
show_compared_images(np.abs(ref_cg), np.abs(CG_result_vs_REF), diff_fac=200000, 
                     labels=['Reference', 'Conjugate Gradient', 'diff'])
```

![](index_files/figure-commonmark/cell-29-output-1.png)

``` python
np.allclose(ref_cg, CG_result_vs_REF)
```

    True

``` python
print_metrics(np.abs(ref_cg), np.abs(CG_result_vs_REF))
```

    +---------+-----------+
    | Metrics |   Values  |
    +---------+-----------+
    |   MSE   | 1.196e-22 |
    |   NMSE  | 1.675e-13 |
    |   RMSE  | 1.094e-11 |
    |  NRMSE  | 4.093e-07 |
    |   PSNR  |   141.97  |
    |   SSIM  |    1.0    |
    +---------+-----------+

## Developer install

If you want to develop `cgsense2023` yourself, please use an editable
installation of `cgsense2023`.

`git clone https://github.com/hdocmsu/cgsense2023.git`

`pip install -e "cgsense2023[dev]"`

You also need to use an editable installation of
[nbdev](https://github.com/fastai/nbdev),
[fastcore](https://github.com/fastai/fastcore), and
[execnb](https://github.com/fastai/execnb).

Happy Coding!!!

## References

This template was created based on the below references. The list is not
exhaustive so if you notice any missing references, please [report an
issue](https://github.com/hdocmsu/cgsense2023/issues/new). I will
promptly correct it.

- [RRSG_Challenge_01](https://github.com/ISMRM/rrsg_challenge_01) github
  repository

- [fastMRI](https://github.com/facebookresearch/fastMRI) github
  repository

- [Original CG-SENSE Paper by Pruessmann et. al.,
  2001](https://onlinelibrary.wiley.com/doi/10.1002/mrm.1241)

- [CG-SENSE revisited: Results from the first ISMRM reproducibility
  challenge](https://onlinelibrary.wiley.com/doi/10.1002/mrm.28569)

- [Dwight Nishimura, (Published Jan 10, 2010), “Principles of Magnetic
  Resonance Imaging,” Stanford University, Palo Alto,
  CA](https://www.lulu.com/shop/dwight-nishimura/principles-of-magnetic-resonance-imaging/hardcover/product-1gvnv7yn.html?page=1&pageSize=4)

- [Prof. James V. Burke’s Lecture on “The Conjugate Gradient
  Algorithm”](https://sites.math.washington.edu/~burke/crs/408/lectures/L14-CG.pdf)

- [Magnetic Resonance Image Reconstruction: Theory, Methods, and
  Applications,
  (2022)](https://shop.elsevier.com/books/magnetic-resonance-image-reconstruction/akcakaya/978-0-12-822726-8)

- [sigPy github repo](https://github.com/mikgroup/sigpy)

## Invitation to Contributions

If you would like to contribute to improve this repository please feel
free [to propose
here](https://github.com/hdocmsu/cgsense2023/issues/new).

## License

MIT License as seen from the [Original Repo’s
License](https://github.com/ISMRM/rrsg_challenge_01/blob/master/LICENSE)

> MIT License
>
> Copyright (c) 2020 ISMRM Reproducible Research Study Group
>
> Permission is hereby granted, free of charge, to any person obtaining
> a copy of this software and associated documentation files (the
> “Software”), to deal in the Software without restriction, including
> without limitation the rights to use, copy, modify, merge, publish,
> distribute, sublicense, and/or sell copies of the Software, and to
> permit persons to whom the Software is furnished to do so, subject to
> the following conditions:
>
> The above copyright notice and this permission notice shall be
> included in all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/hdocmsu/cgsense2023/",
    "name": "cgsense2023",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "nbdev",
    "author": "Hung Do, PhD",
    "author_email": "clinicalcollaborations@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/18/db/a9ec713570588ea27e03c1152a28cc0c987c368c0daa897230ac778c074b/cgsense2023-0.0.5.tar.gz",
    "platform": null,
    "description": "# CG-SENSE HOME\n\n\n<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->\n\n## W.I.P Tasks\n\nContributions to the below tasks are highly appreciated!\n\n- [ ] Document the standardization of the raw h5-file, otherwise\n  `read_data()` has to be modified every time a deviation in h5-file is\n  encountered.\n\n- [ ] Refactor, simplify, modularize the gridding reconstructions.\n  Currently, it is difficult to understand, especially for new learner.\n\n- [x] Add `save_intermediate` flag in gradient descent or conjugate\n  gradient optimization functions to store intermediate reconstruction\n  in each iteration.\n\n- [ ] Add theoretical descriptions on MRI, MRI recons, and gradient\n  Descent, and gonjugate gradient algorithms.\n\n## Homepage\n\nThis tutorial <https://hdocmsu.github.io/cgsense2023/> was written by\nHung Do based on the\n[RRSG_Challenge_01](https://github.com/ISMRM/rrsg_challenge_01) github\nrepository.\n\n## How to Cite\n\n[![](https://zenodo.org/badge/DOI/10.5281/zenodo.10547817.svg)](https://doi.org/10.5281/zenodo.10547817)\n\n> APA style:\n>\n> *Do, H. (2024). CG-SENSE Tutorial version 0.0.3 (0.0.3). Zenodo.\n> https://doi.org/10.5281/zenodo.10547817*\n\n> IEEE style:\n>\n> *H. Do, \u201cCG-SENSE Tutorial version 0.0.3\u201d. Zenodo, Jan.\u00a021, 2024. doi:\n> 10.5281/zenodo.10547817.*\n\n## pip install\n\nThe [cgsense2023](https://pypi.org/project/cgsense2023/) package was\nuploaded to [PyPI](https://pypi.org/) and can be easily installed using\nthe below command.\n\n`pip install cgsense2023`\n\n## How to use\n\n### Plot Module\n\n``` python\nfrom cgsense2023.plot import *\nimport numpy as np\n```\n\n``` python\n# Sequential - full - spoke radial trajectory\ntraj_full = gen_radial_traj(golden=False, full_spoke=True)\nshow_trajectory(traj_full, golden=True, figsize=(10,8))\n```\n\n![](index_files/figure-commonmark/cell-3-output-1.png)\n\n``` python\n# golden - full - spoke radial trajectory\ntraj_full_golden = gen_radial_traj(golden=True, full_spoke=True)\nshow_trajectory(traj_full_golden, golden=True, figsize=(10,8))\n```\n\n![](index_files/figure-commonmark/cell-4-output-1.png)\n\n``` python\nNim, Nx, Ny = 12, 128, 256\nx1 = np.random.randn(Nim, Nx, Ny)\nx2 = np.random.randn(1, Nx, Ny)\n```\n\n``` python\nshow_image_grid(x1)\n```\n\n    Warning: number of images (12) is larger than number of panels (2x5)!\n\n![](index_files/figure-commonmark/cell-6-output-2.png)\n\n``` python\nshow_image_grid(x2)\n```\n\n![](index_files/figure-commonmark/cell-7-output-1.png)\n\n### Metrics Module\n\n``` python\nfrom cgsense2023.metrics import *\nimport numpy as np\n```\n\n``` python\n# same dimensions\nNim, Nx, Ny = 11, 128, 256\nx1 = np.random.randn(1, Nx, Ny)\nx2 = np.random.randn(1, Nx, Ny)\nprint_metrics(x1, x2)\n```\n\n    +---------+-----------+\n    | Metrics |   Values  |\n    +---------+-----------+\n    |   MSE   | 1.999e+00 |\n    |   NMSE  | 2.000e+00 |\n    |   RMSE  | 1.414e+00 |\n    |  NRMSE  | 1.414e+00 |\n    |   PSNR  |   14.981  |\n    |   SSIM  | 0.0092604 |\n    +---------+-----------+\n\n### Gridding Reconstruction\n\n``` python\nfrom cgsense2023.math import *\nfrom cgsense2023.io import *\nimport cgsense2023 as cgs2003\nfrom cgsense2023.mri import *\nfrom cgsense2023.optimizer import *\nimport h5py\nimport numpy as np\nimport matplotlib.pyplot as plt\n```\n\n#### Data Paths\n\n``` python\n# path to the data file\nfpath = '../testdata/rawdata_brain.h5'\n# path to the reference results\nrpath = '../testdata/CG_reco_inscale_True_denscor_True_reduction_1.h5'\n```\n\n``` python\nwith h5py.File(rpath, 'r') as rf:\n    print(list(rf.keys()))\n    ref_cg = np.squeeze(rf['CG_reco'][()][-1])\n    ref_grid = np.squeeze(rf['Coil_images'][()])\n```\n\n    ['CG_reco', 'Coil_images']\n\n``` python\nref_cg.shape, ref_grid.shape\n```\n\n    ((300, 300), (12, 300, 300))\n\n#### Setup Parameters\n\n``` python\n# one stop shop for all Parameters and Data\nparams = setup_params(fpath, R=1)\n```\n\n    ['Coils', 'InScale', 'rawdata', 'trajectory']\n\n#### Setup MRI Operator\n\n``` python\n# Set up MRI operator\nmrimodel = MriImagingModel(params)\nmriop = MriOperator(data_par=params[\"Data\"],optimizer_par=params[\"Optimizer\"])\nmriop.set_operator(mrimodel)\n# Single Coil images after FFT\nmy_grid = mriop.operator.NuFFT.adjoint(params['Data']['rawdata_density_cor'])\n```\n\n``` python\nmy_grid.shape, ref_grid.shape\n```\n\n    ((12, 300, 300), (12, 300, 300))\n\n``` python\n# test gridding recon results\nnp.allclose(ref_grid, my_grid)\n```\n\n    True\n\n``` python\n# test gridding recon results\nnp.array_equal(ref_grid, my_grid)\n```\n\n    False\n\n``` python\nprint_metrics(np.abs(ref_grid[0]), np.abs(my_grid[0]))\n```\n\n    +---------+-----------+\n    | Metrics |   Values  |\n    +---------+-----------+\n    |   MSE   | 1.472e-24 |\n    |   NMSE  | 5.905e-15 |\n    |   RMSE  | 1.213e-12 |\n    |  NRMSE  | 7.684e-08 |\n    |   PSNR  |   154.87  |\n    |   SSIM  |    1.0    |\n    +---------+-----------+\n\n``` python\nshow_image_grid(my_grid, figsize=(10,10), rows=3, cols=4)\n```\n\n![](index_files/figure-commonmark/cell-20-output-1.png)\n\n``` python\nshow_image_grid(rss_rec(my_grid), figsize=(10,10))\n```\n\n![](index_files/figure-commonmark/cell-21-output-1.png)\n\n### Gradient Descent\n\n``` python\nguess = np.zeros((params['Data']['image_dim'],params['Data']['image_dim']))\nSD_result, SD_residuals, SD_ref_res = steepest_descent(mriop, guess, \n                                            params['Data']['rawdata_density_cor'], \n                                            iters=50,\n                                            ref=ref_cg)\n```\n\n    Residuum at iter 50 : 6.553379e-06\n\n``` python\nshow_compared_images(np.abs(ref_cg), np.abs(SD_result), diff_fac=10, \n                     labels=['Reference', 'Steepest Descent', 'diff'])\n```\n\n![](index_files/figure-commonmark/cell-23-output-1.png)\n\n``` python\nnp.allclose(ref_cg, SD_result)\n```\n\n    False\n\n``` python\nprint_metrics(np.abs(ref_cg), np.abs(SD_result))\n```\n\n    +---------+-----------+\n    | Metrics |   Values  |\n    +---------+-----------+\n    |   MSE   | 5.633e-14 |\n    |   NMSE  | 7.888e-05 |\n    |   RMSE  | 2.373e-07 |\n    |  NRMSE  | 8.882e-03 |\n    |   PSNR  |   55.242  |\n    |   SSIM  |   0.9988  |\n    +---------+-----------+\n\n### CG\u2019s Semi-Convergence Behavior\n\n``` python\nCG_result, CG_residuals, CG_ref_res = conjugate_gradient(mriop, guess, \n                                            params['Data']['rawdata_density_cor'], \n                                            iters=50,\n                                            ref=ref_cg)\n```\n\n    Residuum at iter 50 : 2.993229e-06\n\n``` python\nplt.plot(np.log10(SD_ref_res),'*--', label='SD reference_norms');\nplt.plot(np.log10(SD_residuals),'*--', label='SD residual_norms');\nplt.plot(np.log10(CG_ref_res),'*--', label='CG reference_norms');\nplt.plot(np.log10(CG_residuals),'*--', label='CG residual_norms');\nplt.grid();\nplt.xlabel(\"# iteration\")\nplt.ylabel(\"residuals (log10)\")\nplt.legend();\n```\n\n![](index_files/figure-commonmark/cell-27-output-1.png)\n\n### Conjugate Gradient vs.\u00a0REF\n\nBased on the \u201csemi-convergence\u201d plot above, the optimal number of\niterations for CG and SD are around 10 and 28, respectively.\n\n``` python\nCG_result_vs_REF, _, _ = conjugate_gradient(mriop, guess, \n                                            params['Data']['rawdata_density_cor'], \n                                            iters=10,\n                                            ref=ref_cg)\n```\n\n    Residuum at iter 10 : 1.826174e-05\n\n``` python\nshow_compared_images(np.abs(ref_cg), np.abs(CG_result_vs_REF), diff_fac=200000, \n                     labels=['Reference', 'Conjugate Gradient', 'diff'])\n```\n\n![](index_files/figure-commonmark/cell-29-output-1.png)\n\n``` python\nnp.allclose(ref_cg, CG_result_vs_REF)\n```\n\n    True\n\n``` python\nprint_metrics(np.abs(ref_cg), np.abs(CG_result_vs_REF))\n```\n\n    +---------+-----------+\n    | Metrics |   Values  |\n    +---------+-----------+\n    |   MSE   | 1.196e-22 |\n    |   NMSE  | 1.675e-13 |\n    |   RMSE  | 1.094e-11 |\n    |  NRMSE  | 4.093e-07 |\n    |   PSNR  |   141.97  |\n    |   SSIM  |    1.0    |\n    +---------+-----------+\n\n## Developer install\n\nIf you want to develop `cgsense2023` yourself, please use an editable\ninstallation of `cgsense2023`.\n\n`git clone https://github.com/hdocmsu/cgsense2023.git`\n\n`pip install -e \"cgsense2023[dev]\"`\n\nYou also need to use an editable installation of\n[nbdev](https://github.com/fastai/nbdev),\n[fastcore](https://github.com/fastai/fastcore), and\n[execnb](https://github.com/fastai/execnb).\n\nHappy Coding!!!\n\n## References\n\nThis template was created based on the below references. The list is not\nexhaustive so if you notice any missing references, please [report an\nissue](https://github.com/hdocmsu/cgsense2023/issues/new). I will\npromptly correct it.\n\n- [RRSG_Challenge_01](https://github.com/ISMRM/rrsg_challenge_01) github\n  repository\n\n- [fastMRI](https://github.com/facebookresearch/fastMRI) github\n  repository\n\n- [Original CG-SENSE Paper by Pruessmann et. al.,\n  2001](https://onlinelibrary.wiley.com/doi/10.1002/mrm.1241)\n\n- [CG-SENSE revisited: Results from the first ISMRM reproducibility\n  challenge](https://onlinelibrary.wiley.com/doi/10.1002/mrm.28569)\n\n- [Dwight Nishimura, (Published Jan 10, 2010), \u201cPrinciples of Magnetic\n  Resonance Imaging,\u201d Stanford University, Palo Alto,\n  CA](https://www.lulu.com/shop/dwight-nishimura/principles-of-magnetic-resonance-imaging/hardcover/product-1gvnv7yn.html?page=1&pageSize=4)\n\n- [Prof.\u00a0James V. Burke\u2019s Lecture on \u201cThe Conjugate Gradient\n  Algorithm\u201d](https://sites.math.washington.edu/~burke/crs/408/lectures/L14-CG.pdf)\n\n- [Magnetic Resonance Image Reconstruction: Theory, Methods, and\n  Applications,\n  (2022)](https://shop.elsevier.com/books/magnetic-resonance-image-reconstruction/akcakaya/978-0-12-822726-8)\n\n- [sigPy github repo](https://github.com/mikgroup/sigpy)\n\n## Invitation to Contributions\n\nIf you would like to contribute to improve this repository please feel\nfree [to propose\nhere](https://github.com/hdocmsu/cgsense2023/issues/new).\n\n## License\n\nMIT License as seen from the [Original Repo\u2019s\nLicense](https://github.com/ISMRM/rrsg_challenge_01/blob/master/LICENSE)\n\n> MIT License\n>\n> Copyright (c) 2020 ISMRM Reproducible Research Study Group\n>\n> Permission is hereby granted, free of charge, to any person obtaining\n> a copy of this software and associated documentation files (the\n> \u201cSoftware\u201d), to deal in the Software without restriction, including\n> without limitation the rights to use, copy, modify, merge, publish,\n> distribute, sublicense, and/or sell copies of the Software, and to\n> permit persons to whom the Software is furnished to do so, subject to\n> the following conditions:\n>\n> The above copyright notice and this permission notice shall be\n> included in all copies or substantial portions of the Software.\n>\n> THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND,\n> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Conjugate Gradient SENSE (CG-SENSE) MRI Reconstruction",
    "version": "0.0.5",
    "project_urls": {
        "Homepage": "https://github.com/hdocmsu/cgsense2023/"
    },
    "split_keywords": [
        "nbdev"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "69cd2f3bfd1f6bda1f00320b4660a02040a21aea65eff3a4158c78a7e3b06710",
                "md5": "ac858d29eedf9b9f848a6d2b304a8f70",
                "sha256": "e0e74b35f7db20223cd9645cfba59571edc5823072350dc87118528e4354aa56"
            },
            "downloads": -1,
            "filename": "cgsense2023-0.0.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ac858d29eedf9b9f848a6d2b304a8f70",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 21042,
            "upload_time": "2024-03-14T22:55:30",
            "upload_time_iso_8601": "2024-03-14T22:55:30.494831Z",
            "url": "https://files.pythonhosted.org/packages/69/cd/2f3bfd1f6bda1f00320b4660a02040a21aea65eff3a4158c78a7e3b06710/cgsense2023-0.0.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "18dba9ec713570588ea27e03c1152a28cc0c987c368c0daa897230ac778c074b",
                "md5": "e86ddf1afaf63c294382048bc8cfaa75",
                "sha256": "99da0a40bef127764f026718c0203bb3f55dcdbf882209041b0b371578d549aa"
            },
            "downloads": -1,
            "filename": "cgsense2023-0.0.5.tar.gz",
            "has_sig": false,
            "md5_digest": "e86ddf1afaf63c294382048bc8cfaa75",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 22234,
            "upload_time": "2024-03-14T22:55:32",
            "upload_time_iso_8601": "2024-03-14T22:55:32.067531Z",
            "url": "https://files.pythonhosted.org/packages/18/db/a9ec713570588ea27e03c1152a28cc0c987c368c0daa897230ac778c074b/cgsense2023-0.0.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-14 22:55:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hdocmsu",
    "github_project": "cgsense2023",
    "github_not_found": true,
    "lcname": "cgsense2023"
}
        
Elapsed time: 0.38525s