Parse CSA header information from Siemens MRI acquisitions with Python.
Some Siemens MRI scans may include CSA headers that provide valuable information about the acquisition and storage of the data. These headers are stored as private data elements, usually looking something like:
(0029, 1010) CSA Image Header Type OB: 'IMAGE NUM 4'
(0029, 1010) CSA Image Header Version OB: '20100114'
(0029, 1010) CSA Image Header Info OB: Array of 11560 bytes
(0029, 1020) CSA Series Header Type OB: 'MR'
(0029, 1020) CSA Series Header Version OB: '20100114'
(0029, 1020) CSA Series Header Info OB: Array of 80248 bytes
The CSA Image Header Info and CSA Series Header Info elements contain encoded information which is crucial for the correct interpretation of the associated acquisition data.
For a detailed explanation on the CSA encoding scheme, please see this excellent article from NiBabel's documentation site.
Table of Contents
pip install csa_header
Use pydicom
to read a DICOM header:
>>> import pydicom
>>> dcm = pydicom.dcmread("/path/to/file.dcm")
Extract a data element containing a CSA header, e.g., for CSA Series Header Info:
>>> data_element = dcm.get((0x29, 0x1020))
>>> data_element
(0029, 1020) [CSA Series Header Info] OB: Array of 180076 elements
Read the raw byte array from the data element:
>>> raw_csa = data_element.value
>>> raw_csa
b'SV10\x04\x03\x02\x01O\x00\x00\x00M\x00\x00\x00UsedPatientWeight\x00 <Visible> "true" \n \n <ParamStr\x01\x00\x00\x00IS\x00\x00\x06...'
Parse the contents of the CSA header with the CsaHeader
class:
>>> from csa_header import CsaHeader
>>> parsed_csa = CsaHeader(raw_csa).read()
>>> parsed_csa
{
'NumberOfPrescans': {'index': 1, 'VR': 'IS', 'VM': 1, 'value': 0},
'TransmitterCalibration': {'index': 2, 'VR': 'DS', 'VM': 1, 'value': 247.102},
'PhaseGradientAmplitude': {'index': 3, 'VR': 'DS', 'VM': 1, 'value': 0.0},
'ReadoutGradientAmplitude': {'index': 4, 'VR': 'DS', 'VM': 1, 'value': 0.0},
'SelectionGradientAmplitude': {'index': 5, 'VR': 'DS', 'VM': 1, 'value': 0.0},
'GradientDelayTime': {'index': 6,
'VR': 'DS',
'VM': 3,
'value': [36.0, 35.0, 31.0]},
'RfWatchdogMask': {'index': 7, 'VR': 'IS', 'VM': 1, 'value': 0},
'RfPowerErrorIndicator': {'index': 8, 'VR': 'DS', 'VM': 1, 'value': None},
'SarWholeBody': {'index': 9, 'VR': 'DS', 'VM': 3, 'value': None},
'Sed': {'index': 10,
'VR': 'DS',
'VM': 3,
'value': [1000000.0, 324.74800987, 324.74800832]}
...
}
This package uses hatch
to manage development and packaging. To run the tests, simply run:
hatch run test
To run the tests with coverage
, run:
hatch run cov
Or, to automatically generate an HTML report and open it in your default browser:
hatch run cov-show
csa_header
is distributed under the terms of the MIT license.