rordenlab / dcm2niix

dcm2nii DICOM to NIfTI converter: compiled versions available from NITRC
https://www.nitrc.org/plugins/mwiki/index.php/dcm2nii:MainPage
Other
879 stars 228 forks source link

GE bias value for b-value #602

Closed mr-jaemin closed 2 years ago

mr-jaemin commented 2 years ago

GE reports b-value in both Private tag (0043,1039) and Public tag (0018,9087)

Multi b-values DWI and synthetic b-value DWI have always BIAS_FOR_BVALUE of 1000000000 added to b-value in the private tag (0043,1039), not in the public tag (0018,9087). The BIAS_FOR_BVALUE is stored in the private tag (0043,107F)

Note that DTI doesn't have any bias value for b-value.

Because of this bias value, dcm2niix includes the following operation under set_bValGE(): bVal = (bVal % 10000); which handles b-value with/without bias value correctly up to b-value=9999. However, b-value >= 10k caused an issue: ex) 10000 (DICOM) --> 0 (bval), 11000 (DICOM) --> 1000 (bval)

Now, user starts to collect very high b-value data with GE 7T or UHP or MAGNUS system (ex. b=30k).

I would propose to update the code to: bVal = (bVal % 1000000000);

Alternately, the BIAS_FOR_BVALUE can be extracted from the private tag (0043,107F). This is for a future reference.

I will share sample datasets with/without the bias value: 01_Ax_DWI_ALL_b1000 03_Ax_DWI_DTI_b1k 04_Ax_DWI_DTI_b10k 05_Ax_DWI_ALL_b1k_Syn_b2kb3k 500_DW_Synthetic__Ax_DWI_ALL_b1k_Syn_b2kb3k --> Bias valued added to b-value.

Also, I can submit Pull request if easier for you.

mr-jaemin commented 2 years ago

Output from dcmdump * | egrep '0043,1039|0018,9087|0043,107f':

01_Ax_DWI_ALL_b1000: Regular DWI

(0018,9087) FD 1000                                     #   8, 1 DiffusionBValue
(0043,1039) IS [1000\8\0\0]                             #  10, 4 SlopInteger6ToSlopInteger9

03_Ax_DWI_DTI_b1k

(0018,9087) FD 1000                                     #   8, 1 DiffusionBValue
(0043,1039) IS [1000\8\0\0]                             #  10, 4 SlopInteger6ToSlopInteger9

04_Ax_DWI_DTI_b10k

(0018,9087) FD 10000                                    #   8, 1 DiffusionBValue
(0043,1039) IS [10000\8\0\0]                            #  12, 4 SlopInteger6ToSlopInteger9

05_Ax_DWI_ALL_b1k_Syn_b2kb3k

(0018,9087) FD 1000                                     #   8, 1 DiffusionBValue
(0043,1039) IS [1000\8\0\0]                             #  10, 4 SlopInteger6ToSlopInteger9

500_DW_Synthetic__Ax_DWI_ALL_b1k_Syn_b2kb3k: Synthetic DWI

(0018,9087) FD 2000                                     #   8, 1 DiffusionBValue
(0043,1039) IS [1000002000\8\0\0]                       #  16, 4 SlopInteger6ToSlopInteger9
(0043,107f) DS [1000000000]                             #  10, 1 EDWIScaleFactor
neurolabusc commented 2 years ago

Thanks, the pull request is merged.