Metadata-Version: 2.4
Name: nifreeze
Version: 25.0.0.dev456
Summary: A flexible framework for volume-to-volume artifact estimation and correction across multiple 4D neuroimaging modalities (diffusion MRI, functional MRI, and PET).
Project-URL: Documentation, https://www.nipreps.org/nifreeze
Project-URL: Home, https://github.com/nipreps/nifreeze
Project-URL: NiPreps, https://www.nipreps.org/
Author-email: The NiPreps Developers <nipreps@gmail.com>
License-Expression: Apache-2.0
License-File: LICENSE
License-File: NOTICE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Image Recognition
Requires-Python: >=3.10
Requires-Dist: attrs
Requires-Dist: dipy>=1.5.0
Requires-Dist: joblib
Requires-Dist: nest-asyncio>=1.5.1
Requires-Dist: nipype<2.0,>=1.5.1
Requires-Dist: nireports
Requires-Dist: nitransforms<24,>=22.0.0
Requires-Dist: numpy>=1.21.3
Requires-Dist: scikit-image>=0.15.0
Requires-Dist: scikit-learn>=1.3.0
Requires-Dist: scipy>=1.8.0
Requires-Dist: typing-extensions>=4.12
Provides-Extra: all
Requires-Dist: asv; extra == 'all'
Requires-Dist: attrs>=20.1.0; extra == 'all'
Requires-Dist: configspace; extra == 'all'
Requires-Dist: coverage; extra == 'all'
Requires-Dist: furo>=2024.01.29; extra == 'all'
Requires-Dist: ipykernel; extra == 'all'
Requires-Dist: jupyter; extra == 'all'
Requires-Dist: matplotlib>=2.2.0; extra == 'all'
Requires-Dist: mriqc-learn; extra == 'all'
Requires-Dist: nbclient; extra == 'all'
Requires-Dist: nbmake; extra == 'all'
Requires-Dist: nbsphinx; extra == 'all'
Requires-Dist: nilearn; extra == 'all'
Requires-Dist: nipreps; extra == 'all'
Requires-Dist: nipreps-synthstrip; extra == 'all'
Requires-Dist: packaging; extra == 'all'
Requires-Dist: pandas-stubs; extra == 'all'
Requires-Dist: pre-commit; extra == 'all'
Requires-Dist: pre-commit-hooks; extra == 'all'
Requires-Dist: psutil>=5.4; extra == 'all'
Requires-Dist: pydot>=1.2.3; extra == 'all'
Requires-Dist: pydotplus; extra == 'all'
Requires-Dist: pyperf; extra == 'all'
Requires-Dist: pytest; extra == 'all'
Requires-Dist: pytest-cov; extra == 'all'
Requires-Dist: pytest-env; extra == 'all'
Requires-Dist: pytest-xdist>=1.28; extra == 'all'
Requires-Dist: pytest>=4.4; extra == 'all'
Requires-Dist: ruff; extra == 'all'
Requires-Dist: scikit-image; extra == 'all'
Requires-Dist: scipy-stubs; extra == 'all'
Requires-Dist: smac; extra == 'all'
Requires-Dist: sphinx-argparse; extra == 'all'
Requires-Dist: sphinx-rtd-theme; extra == 'all'
Requires-Dist: sphinx<8,>=4.5; extra == 'all'
Requires-Dist: sphinxcontrib-apidoc; extra == 'all'
Requires-Dist: sphinxcontrib-bibtex; extra == 'all'
Requires-Dist: sphinxcontrib-napoleon; extra == 'all'
Requires-Dist: sphinxcontrib-versioning; extra == 'all'
Requires-Dist: types-attrs; extra == 'all'
Requires-Dist: types-pyyaml; extra == 'all'
Requires-Dist: types-setuptools; extra == 'all'
Requires-Dist: types-tqdm; extra == 'all'
Requires-Dist: virtualenv==20.30; extra == 'all'
Provides-Extra: antsopt
Requires-Dist: configspace; extra == 'antsopt'
Requires-Dist: nipreps; extra == 'antsopt'
Requires-Dist: scikit-image; extra == 'antsopt'
Requires-Dist: smac; extra == 'antsopt'
Provides-Extra: benchmark
Requires-Dist: asv; extra == 'benchmark'
Requires-Dist: pyperf; extra == 'benchmark'
Requires-Dist: virtualenv==20.30; extra == 'benchmark'
Provides-Extra: dev
Requires-Dist: pre-commit; extra == 'dev'
Requires-Dist: pre-commit-hooks; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: doc
Requires-Dist: attrs>=20.1.0; extra == 'doc'
Requires-Dist: furo>=2024.01.29; extra == 'doc'
Requires-Dist: matplotlib>=2.2.0; extra == 'doc'
Requires-Dist: nbsphinx; extra == 'doc'
Requires-Dist: packaging; extra == 'doc'
Requires-Dist: pydot>=1.2.3; extra == 'doc'
Requires-Dist: pydotplus; extra == 'doc'
Requires-Dist: sphinx-argparse; extra == 'doc'
Requires-Dist: sphinx-rtd-theme; extra == 'doc'
Requires-Dist: sphinx<8,>=4.5; extra == 'doc'
Requires-Dist: sphinxcontrib-apidoc; extra == 'doc'
Requires-Dist: sphinxcontrib-bibtex; extra == 'doc'
Requires-Dist: sphinxcontrib-napoleon; extra == 'doc'
Requires-Dist: sphinxcontrib-versioning; extra == 'doc'
Provides-Extra: docs
Requires-Dist: attrs>=20.1.0; extra == 'docs'
Requires-Dist: furo>=2024.01.29; extra == 'docs'
Requires-Dist: matplotlib>=2.2.0; extra == 'docs'
Requires-Dist: nbsphinx; extra == 'docs'
Requires-Dist: packaging; extra == 'docs'
Requires-Dist: pydot>=1.2.3; extra == 'docs'
Requires-Dist: pydotplus; extra == 'docs'
Requires-Dist: sphinx-argparse; extra == 'docs'
Requires-Dist: sphinx-rtd-theme; extra == 'docs'
Requires-Dist: sphinx<8,>=4.5; extra == 'docs'
Requires-Dist: sphinxcontrib-apidoc; extra == 'docs'
Requires-Dist: sphinxcontrib-bibtex; extra == 'docs'
Requires-Dist: sphinxcontrib-napoleon; extra == 'docs'
Requires-Dist: sphinxcontrib-versioning; extra == 'docs'
Provides-Extra: notebooks
Requires-Dist: jupyter; extra == 'notebooks'
Requires-Dist: mriqc-learn; extra == 'notebooks'
Requires-Dist: nbclient; extra == 'notebooks'
Requires-Dist: nbmake; extra == 'notebooks'
Requires-Dist: nipreps-synthstrip; extra == 'notebooks'
Provides-Extra: plotting
Requires-Dist: nilearn; extra == 'plotting'
Provides-Extra: resmon
Requires-Dist: psutil>=5.4; extra == 'resmon'
Provides-Extra: test
Requires-Dist: coverage; extra == 'test'
Requires-Dist: ipykernel; extra == 'test'
Requires-Dist: mriqc-learn; extra == 'test'
Requires-Dist: pytest-cov; extra == 'test'
Requires-Dist: pytest-env; extra == 'test'
Requires-Dist: pytest-xdist>=1.28; extra == 'test'
Requires-Dist: pytest>=4.4; extra == 'test'
Provides-Extra: tests
Requires-Dist: coverage; extra == 'tests'
Requires-Dist: ipykernel; extra == 'tests'
Requires-Dist: mriqc-learn; extra == 'tests'
Requires-Dist: pytest-cov; extra == 'tests'
Requires-Dist: pytest-env; extra == 'tests'
Requires-Dist: pytest-xdist>=1.28; extra == 'tests'
Requires-Dist: pytest>=4.4; extra == 'tests'
Provides-Extra: types
Requires-Dist: pandas-stubs; extra == 'types'
Requires-Dist: pytest; extra == 'types'
Requires-Dist: scipy-stubs; extra == 'types'
Requires-Dist: types-attrs; extra == 'types'
Requires-Dist: types-pyyaml; extra == 'types'
Requires-Dist: types-setuptools; extra == 'types'
Requires-Dist: types-tqdm; extra == 'types'
Description-Content-Type: text/x-rst

*NiFreeze*
==========

**Model-based estimation and correction of head motion and eddy current distortions in 4D neuroimaging**.

*NiFreeze* is a flexible framework for volume-to-volume motion estimation and correction in d/fMRI and PET,
and eddy-current-derived distortion estimation in dMRI.

.. important:: *NiFreeze* is a fork of *eddymotion*

   In November 2024, the *NiPreps Steering Committee* brought to the *Bi-monthly Roundup*
   the discussion about re-branding *eddymotion* to better reflect its aspirations to
   perform on diverse modalities.

   The `repository of the project <https://github.com/nipreps/eddymotion>`__
   has been archived, and development will continue under the *NiFreeze* project.

   The contributor list of *eddymotion* is found under the credit file
   ``.maint/EDDYMOTION.md`` in this repository.

.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.4680599.svg
   :target: https://doi.org/10.5281/zenodo.4680599
   :alt: DOI

.. image:: https://img.shields.io/badge/License-Apache_2.0-blue.svg
   :target: https://github.com/nipreps/nifreeze/blob/main/LICENSE
   :alt: License

.. image:: https://img.shields.io/pypi/v/nifreeze.svg
   :target: https://pypi.python.org/pypi/nifreeze/
   :alt: Latest Version

.. image:: https://github.com/nipreps/nifreeze/actions/workflows/test.yml/badge.svg
   :target: https://github.com/nipreps/nifreeze/actions/workflows/test.yml
   :alt: Testing

.. image:: https://github.com/nipreps/nifreeze/actions/workflows/notebooks.yml/badge.svg
   :target: https://github.com/nipreps/nifreeze/actions/workflows/notebooks.yml
   :alt: Examples

.. image:: https://github.com/nipreps/nifreeze/actions/workflows/pages/pages-build-deployment/badge.svg
   :target: https://www.nipreps.org/nifreeze/main/index.html
   :alt: Documentation

.. image:: https://github.com/nipreps/nifreeze/actions/workflows/pythonpackage.yml/badge.svg
   :target: https://github.com/nipreps/nifreeze/actions/workflows/pythonpackage.yml
   :alt: Python package

.. image:: https://github.com/nipreps/nifreeze/actions/workflows/contrib.yml/badge.svg
   :target: https://github.com/nipreps/nifreeze/actions/workflows/contrib.yml
   :alt: Contribution checks

.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
   :target: https://github.com/astral-sh/ruff
   :alt: Code format

Diffusion and functional MRI (d/fMRI) generally employ echo-planar imaging (EPI) for fast
whole-brain acquisition.
Despite the rapid collection of volumes, typical repetition times are long enough for head motion
to occur, which has been proven detrimental to both diffusion [1]_ and functional [2]_ MRI.
In the case of dMRI, additional volume-wise, low-order spatial distortions are caused by
eddy currents (EC), which appear as a result of quickly switching diffusion gradients.
Unaccounted for EC distortion can result in incorrect local model fitting and poor downstream
tractography results [3]_, [4]_.
*FSL*'s ``eddy`` [5]_ is the most popular tool for EC distortion correction, and
implements a leave-one-volume-out approach to estimate EC distortions.
However, *FSL* has commercial restrictions that hinder application within open-source initiatives
such as *NiPreps* [6]_.
In addition, *FSL*'s development model discourages the implementation of alternative data-modeling
approaches to broaden the scope of application (e.g., modalities beyond dMRI).
*NiFreeze* is an open-source implementation of ``eddy``'s approach to estimate artifacts
that permits alternative models that apply to, for instance, head motion estimation in fMRI 
and positron-emission tomography (PET) data.

.. BEGIN FLOWCHART

.. image:: https://raw.githubusercontent.com/nipreps/nifreeze/main/docs/_static/nifreeze-flowchart.png
   :alt: The nifreeze flowchart

.. END FLOWCHART

.. [1] Yendiki et al. (2014) *Spurious group differences due to head motion in a diffusion MRI study*.
    NeuroImage **88**:79-90.

.. [2] Power et al. (2012) *Spurious but systematic correlations in functional connectivity MRI
    networks arise from subject motion*. NeuroImage **59**:2142-2154.

.. [3] Zhuang et al. (2006) *Correction of eddy-current distortions in diffusion tensor images using
    the known directions and strengths of diffusion gradients*. J Magn Reson Imaging **24**:1188-1193.

.. [4] Andersson et al. (2012) *A comprehensive Gaussian Process framework for correcting distortions
    and movements in diffusion images*. In: 20th SMRT & 21st ISMRM, Melbourne, Australia.

.. [5] Andersson & Sotiropoulos (2015) *Non-parametric representation and prediction of single- and
    multi-shell diffusion-weighted MRI data using Gaussian processes*. NeuroImage **122**:166-176.

.. [6] Esteban (2025) *Standardized preprocessing in neuroimaging: enhancing reliability and reproducibility*.
    In: Whelan, R., & Lemaître, H. (eds.) *Methods for Analyzing Large Neuroimaging Datasets. Neuromethods*,
    vol. **218**, pp. 153-179. Humana, New York, NY.
    doi:`10.1007/978-1-0716-4260-3_8 <https://doi.org/10.1007/978-1-0716-4260-3_8>`__.
