CSA Headers

Some Siemens MRI scans may include CSA headers that provide valuable information regarding the acquisition and storage of the data (for more information see this excellent NiBabel article. These headers are stored as two private data elements:

  • (0029, 1010) - CSA Image Header Info

  • (0029, 1020) - CSA Series Header Info

By default, the Header instance’s get() method will parsed the CSA header information as a dict:

>>> from dicom_parser import Image
>>> image = Image("/path/to/siemens/csa.dcm")
>>> csa = image.header.get("CSASeriesHeaderInfo")
>>> csa["SliceAcceleration"]["MultiBandFactor"]
3

dicom_parser uses the CsaHeader class in order to created the parsed dictionary.

To learn more about the CsaHeader class, let’s have a look at the raw CSA header value returned by pydicom:

>>> from dicom_parser.utils.siemens.csa.header import CsaHeader
>>> raw_csa = image.header.get("CSASeriesHeaderInfo", parsed=False)
>>> type(raw_csa)
bytes
>>> raw_csa[:35]
b"SV10\x04\x03\x02\x01O\x00\x00\x00M\x00\x00\x00UsedPatientWeight\x00\x00\x00\xdc\xf7"

Now, we will create an instance of the CsaHeader class and use it to parse the raw header:

>>> csa_header = CsaHeader(raw_csa)

>>> parsed_csa = csa_header.parse()
>>> type(parsed_csa)
dict

# (we can also use the `parsed` property)
>>> csa_header.parsed["SliceArray"]["Size"]
60

>>> instance_number = image.header.get("InstanceNumber")
>>> parsed_csa["SliceArray"]["Slice"][instance_number]["Position"]["Tra"]
-58.1979682425