diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b3e2b9..87a2ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ This document contains the Spec2nii release history in reverse chronological order. +0.8.11 (Monday 20th April 2026) +---------------------------------- +- Fix issues arising in coil names and 31P Siemens CSI with missing DICOM VOI fields. + 0.8.10 (Monday 20th April 2026) ---------------------------------- - Backend only: moved from `versioneer` to `setuptools_scm` diff --git a/spec2nii/Siemens/dicomfunctions.py b/spec2nii/Siemens/dicomfunctions.py index f491bfe..9d822d4 100644 --- a/spec2nii/Siemens/dicomfunctions.py +++ b/spec2nii/Siemens/dicomfunctions.py @@ -461,8 +461,14 @@ def _detect_and_fill_voi_enh(img, meta): imageOrientationPatient = _get_enhanced_dcm_img_orientation_pat(img) - # VoiPosition - this does not have the FOV shift that imagePositionPatient has - vol_loc_seq = img.dcm_data.VolumeLocalizationSequence + try: + # VoiPosition - this does not have the FOV shift that imagePositionPatient has + vol_loc_seq = img.dcm_data.VolumeLocalizationSequence + except AttributeError: + # If VolumeLocalizationSequence doesn't exist return unmodifed meta + # It's possible we might be able to inspect + # img.dcm_data.VolumeLocalizationTechnique as a flag + return meta imagePositionPatient = vol_loc_seq[0].MidSlabPosition # This order needs validating!! diff --git a/spec2nii/Siemens/twixfunctions.py b/spec2nii/Siemens/twixfunctions.py index b034377..39b2def 100644 --- a/spec2nii/Siemens/twixfunctions.py +++ b/spec2nii/Siemens/twixfunctions.py @@ -964,8 +964,11 @@ def extractTwixMetadata_xa(mapVBVDHdr, original_file): # 'InstitutionAddress' obj.set_standard_def('InstitutionAddress', mapVBVDHdr['Dicom'][('InstitutionAddress')]) # 'TxCoil' - tx_coil_tuple = ('sCoilSelectMeas', 'aTxCoilSelectData', '0', 'asList', '0', 'sCoilElementID', 'tCoilID') - obj.set_standard_def('TxCoil', mapVBVDHdr['MeasYaps'][tx_coil_tuple]) + try: + tx_coil_tuple = ('sCoilSelectMeas', 'aTxCoilSelectData', '0', 'asList', '0', 'sCoilElementID', 'tCoilID') + obj.set_standard_def('TxCoil', mapVBVDHdr['MeasYaps'][tx_coil_tuple]) + except KeyError: + pass # 'RxCoil' rx_coil_1 = ('sCoilSelectMeas', 'aRxCoilSelectData', '0', 'asList', '0', 'sCoilElementID', 'tCoilID') rx_coil_2 = ('asCoilSelectMeas', '0', 'asList', '0', 'sCoilElementID', 'tCoilID')