Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ The **test** folder contains the test files corresponding to the contributed cod

The **utils** folder contains various helpful tools.

## Citing
If this repository was useful, please cite our [upcoming MRM paper](https://eur04.safelinks.protection.outlook.com/?url=https%3A%2F%2Furldefense.com%2Fv3%2F__https%3A%2Fdrive.google.com%2Fdrive%2Fu%2F0%2Ffolders%2F1Yh7cHuBIDQ0fmlWum9banDFgCc6uf3XH__%3B!!K-Hz7m0Vt54!gNxtgp_trP5qT7uJBD7zz5-Wwi7y83_56-qBO2I2Zd9ATILK5_BWzAKmxSah9-y8N8Wsgy67pn1LMeCd9xfaQGM%24&data=05%7C02%7Co.j.gurney-champion%40amsterdamumc.nl%7Cceeee39962fc4098e61708de2e90699a%7C68dfab1a11bb4cc6beb528d756984fb6%7C0%7C0%7C638999394967163935%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=mu6wjTAM1DlCgZjfM3mkKZEuSm1vNiteCxdh5kV29WY%3D&reserved=0). The repository contains a lot of code from other sites. Please cite the appropriate papers depending on the code you used. The citations can be found with the "cite" function from OsipiBase:
```ruby
fit=osipibase(algorithm="IAR_LU_biexp")
fit.cite()
```
DOIs can also be found in [code_contributions_record](doc/code_contributions_record.csv).

## View Testing Reports
[![Unit tests](https://github.com/OSIPI/TF2.4_IVIM-MRI_CodeCollection/actions/workflows/unit_test.yml/badge.svg?branch=main)](https://github.com/OSIPI/TF2.4_IVIM-MRI_CodeCollection/actions/workflows/unit_test.yml)
[![Algorithm Analysis](https://github.com/OSIPI/TF2.4_IVIM-MRI_CodeCollection/actions/workflows/analysis.yml/badge.svg?branch=main)](https://github.com/OSIPI/TF2.4_IVIM-MRI_CodeCollection/actions/workflows/analysis.yml)
Expand Down
6 changes: 3 additions & 3 deletions doc/code_contributions_record.csv
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ IVIM,Fitting,Variable projection,See referenced article. Supports units in mm2/s
IVIM,Fitting,Variable projection,See referenced article. Supports units in mm2/s and µm2/ms,IAR_LundUniversity,TF2.4_IVIM-MRI_CodeCollection/src/original/IAR_LundUniversity/ivim_fit_method_modified_topopro.py,Fadnavis et al. Modified by Ivan A. Rashid,Lund University,IvimModelTopoPro,https://doi.org/10.3389/fnins.2021.779025,IAR_LU_modified_topopro
IVIM,Fitting,Linear fit,Linear fit for D with extrapolation for f. Supports units in mm2/s and µm2/ms,IAR_LundUniversity,TF2.4_IVIM-MRI_CodeCollection/src/original/IAR_LundUniversity/ivim_fit_method_modified_linear.py,Modified by Ivan A. Rashid,Lund University,IvimModelLinear,tba,
IVIM,Fitting,sIVIM fit,NLLS of the simplified IVIM model (sIVIM). Supports units in mm2/s and µm2/ms,IAR_LundUniversity,TF2.4_IVIM-MRI_CodeCollection/src/original/IAR_LundUniversity/ivim_fit_method_modified_sivim.py,Modified by Ivan A. Rashid,Lund University,IvimModelsIVIM,tba,
IVIM,Fitting,Segmented NLLS fitting,MATLAB code,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,IVIM_seg,https://doi.org/10.1007/s10334-018-0697-5,OJ_GU_seg
IVIM,Fitting,Bayesian,MATLAB code,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,IVIM_bayes,https://doi.org/10.1007/s10334-018-0697-5,OJ_GU_segMATLAB
IVIM,Fitting,Segmented NLLS fitting,Specifically tailored algorithm for NLLS segmented fitting,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,seg,https://doi.org/10.1002/mrm.26783,OJ_GU_bayesMATLAB
IVIM,Fitting,Segmented NLLS fitting,MATLAB code,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,IVIM_seg,https://doi.org/10.1007/s10334-018-0697-5,OJ_GU_segMATLAB
IVIM,Fitting,Bayesian,MATLAB code,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,IVIM_bayes,https://doi.org/10.1002/mrm.26783,OJ_GU_bayesMATLAB
IVIM,Fitting,Segmented NLLS fitting,Specifically tailored algorithm for NLLS segmented fitting,OJ_GU,TF2.4_IVIM-MRI_CodeCollection/src/original/OJ_GU/,Oscar Jalnefjord,University of Gothenburg,seg,https://doi.org/10.1007/s10334-018-0697-5,OJ_GU_seg
IVIM,Fitting,Linear fit,Linear fit for D and D* and f. Intended to be extremely fast but not always accurate,ETP_SRI,TF2.4_IVIM-MRI_CodeCollection/src/original/ETP_SRI/LinearFitting.py,Eric Peterson,SRI International,LinearFit,tba,ETP_SRI_LinearFitting
IVIM,Fitting,LSQ fitting,MATLAB code,ASD_MemorialSloanKettering,TF2.4_IVIM-MRI_CodeCollection/src/original/ASD_MemorialSloanKettering/MRI-QAMPER_IVIM,Eve LoCastro/Ramesh Paudyal/Amita Shukla-Dave,Memorial Sloan Kettering,IVIM_standard_bcin,https://doi.org/10.3390/tomography9060161,ASD_MemorialSloanKettering_QAMPER_IVIM
IVIM,Fitting,Neural network,Part of the SUPER-IVIM-DC python package,TCML_TechnionIIT,TF2.4_IVIM-MRI_CodeCollection/src/original/TCML_TechnionIIT/SUPER-IVIM-DC,Noam Korngut/Elad Rotman/Onur Afacan Sila Kurugol/Yael Zaffrani-Reznikov/Shira Nemirovsky-Rotman/Simon Warfield/Moti Freiman,TCML Technion IIT,super_ivim_dc.infer.infer_from_signal,https://doi.org/10.1007/978-3-031-16434-7_71,Super_IVIM_DC
Expand Down
2 changes: 1 addition & 1 deletion src/standardized/ASD_MemorialSloanKettering_QAMPER_IVIM.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class ASD_MemorialSloanKettering_QAMPER_IVIM(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"

id_ref = "https://doi.org/10.3390/tomography9060161"
# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,
Expand Down
3 changes: 2 additions & 1 deletion src/standardized/IAR_LU_modified_mix.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class IAR_LU_modified_mix(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"

id_ref = "https://doi.org/10.1038/srep38927"

# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,0] # Interval from "at least" to "at most", in case submissions allow a custom number of thresholds
Expand Down
3 changes: 2 additions & 1 deletion src/standardized/IAR_LU_modified_topopro.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class IAR_LU_modified_topopro(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"

id_ref = "https://doi.org/10.3389/fnins.2021.779025"

# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,0] # Interval from "at least" to "at most", in case submissions allow a custom number of thresholds
Expand Down
2 changes: 1 addition & 1 deletion src/standardized/IVIM_NEToptim.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class IVIM_NEToptim(OsipiBase):
id_algorithm_type = "Deep learnt bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"

id_ref = "https://doi.org/10.1002/mrm.28852"
# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,
Expand Down
2 changes: 1 addition & 1 deletion src/standardized/OGC_AmsterdamUMC_Bayesian_biexp.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class OGC_AmsterdamUMC_Bayesian_biexp(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"

id_ref = "reference method in https://doi.org/10.1002/mrm.28852"
# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,
Expand Down
1 change: 1 addition & 0 deletions src/standardized/OGC_AmsterdamUMC_biexp.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class OGC_AmsterdamUMC_biexp(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "reference method in https://doi.org/10.1002/mrm.28852"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/OJ_GU_bayesMATLAB.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class OJ_GU_bayesMATLAB(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "https://doi.org/10.1002/mrm.26783"

# Algorithm requirements
required_bvalues = 4
Expand Down
3 changes: 2 additions & 1 deletion src/standardized/OJ_GU_seg.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ class OJ_GU_seg(OsipiBase):
id_algorithm_type = "Segmented bi-exponential fit"
id_return_parameters = "f, D*, D"
id_units = "mm2/s"

id_ref = "https://doi.org/10.1007/s10334-018-0697-5"

# Algorithm requirements
required_bvalues = 4
required_thresholds = [0,0] # Interval from "at least" to "at most", in case submissions allow a custom number of thresholds
Expand Down
1 change: 1 addition & 0 deletions src/standardized/OJ_GU_segMATLAB.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class OJ_GU_segMATLAB(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "https://doi.org/10.1007/s10334-018-0697-5"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/PvH_KB_NKI_IVIMfit.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class PvH_KB_NKI_IVIMfit(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "https://doi.org/10.3389/fonc.2021.705964"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/Super_IVIM_DC.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class Super_IVIM_DC(OsipiBase):
id_algorithm_type = "Supervised Deep learnt bi-exponential fit with data consistency"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "https://doi.org/10.1007/978-3-031-16434-7_71"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_SLS.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_SLS(OsipiBase):
id_algorithm_type = "Bi-exponential fit, segmented fitting"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsqBOBYQA.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsqBOBYQA(OsipiBase):
id_algorithm_type = "Bi-exponential fit, BOBYQO"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsq_sls_BOBYQA.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsq_sls_BOBYQA(OsipiBase):
id_algorithm_type = "Bi-exponential fit, SLS fit followed by Trust Region Reflective algorithm"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsq_sls_lm.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsq_sls_lm(OsipiBase):
id_algorithm_type = "Bi-exponential, segmented as initaition, followed by Levenberg-Marquardt algorithm"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsq_sls_trf.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsq_sls_trf(OsipiBase):
id_algorithm_type = "Bi-exponential fit, SLS fit followed by Trust Region Reflective algorithm"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsqlm.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsqlm(OsipiBase):
id_algorithm_type = "Bi-exponential fit with Levenberg-Marquardt algorithm"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TCML_TechnionIIT_lsqtrf.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TCML_TechnionIIT_lsqtrf(OsipiBase):
id_algorithm_type = "Bi-exponential fit, Trust Region Reflective algorithm"
id_return_parameters = "f, D*, D, S0"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "same github as https://doi.org/10.1007/978-3-031-16434-7_71, but not the main code from the paper"

# Algorithm requirements
required_bvalues = 4
Expand Down
1 change: 1 addition & 0 deletions src/standardized/TF_reference_IVIMfit.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TF_reference_IVIMfit(OsipiBase):
id_algorithm_type = "Bi-exponential fit"
id_return_parameters = "f, D*, D"
id_units = "seconds per milli metre squared or milliseconds per micro metre squared"
id_ref = "code specially written for this repository, based on the IVIM consensus paper (Eric Sigmund, Susi Rauh, et al. 2026) which will appear in JMRI"

# Algorithm requirements
required_bvalues = 4
Expand Down
10 changes: 9 additions & 1 deletion src/wrappers/OsipiBase.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ def __init__(self, bvalues=None, thresholds=None, bounds=None, initial_guess=Non
self.deep_learning = False
self.supervised = False
self.stochastic = False
self.id_ref = None
# If the user inputs an algorithm to OsipiBase, it is intereprete as initiating
# an algorithm object with that name.
if algorithm:
Expand Down Expand Up @@ -505,4 +506,11 @@ def D_and_Ds_swap(self,results):
results['Dp']=results['D']
results['D']=D
results['f']=1-results['f']
return results
return results

def cite(self):
print("thank you for using our repository. If it was useful for your paper, please cite our upcoming paper in MRM.")
if self.id_ref is not None:
print("The current fit method you have loaded should be cited with: " + self.id_ref)
else:
print("The used fit code has not yet provided a code-speicific reference.")