The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

Specific handling of Simenes MRI data

MRI:

Key 0029,1010 is the Siemens specific field that contains the ICE mini-headers with dimension information - and position in matrix 0029,1020 is deleted from the header, it is big, containing the whole protocol. They are now parsed into the csa header structure. The important part, the Siemens protocol ASCCONV part, is stored in the ascconv key, see read_text_hdr.

MRS:

In this case, 0029,1110 and 0029,1120 are the proprietary parts of the header.

FUNCTIONS

create_data

Plugin-specific code to create the data structure, in patricular dimensions.

fill_data

fill the data structure from individual DICOM images (slices, echoes, phases ...).

getx, gety, getz

returns name of x .. z dimensions in scanner (or patient?) orientation.

handle_duplicates

What to do if two images with the same position in the stack arrive. Throws an error, atm. Should handle duplicate exports

init_dims

provides support for PDL::Dims. Useful in combination with PDL::IO::Sereal to have a fully qualified data set.

This will fail for vNav navigator scans where the ascconv protocol is missing. It could be copied from the last setter.

map_slicegroup

returns the number, size and first slice of the current slice group.

parser

plugin specific stuff to parse all the headers

populate_header

Here happens the vendor/modallity specific stuff like parsing private fields. It is required to return a position vector in the series' piddle.

read_csa

parses the 0029,XX10 or 20 fields containing Siemens CSA header information.

read_dcm

plugin specific stuff to read a DICOM file

read_text_hdr

parses the ASCCONV part of Siemens data header into the ascconv field of the piddle header. All special characters except [a-z0-9]i are converted to _ -- no quoting of hash keys required! You don't need to load this yourself.

This should handle setter/vNav, ascconv data is available from the target only, even though the series contains the navigator. Storing data from the last setter should be done somehow.

setup_dcm

sets useful options for this modality.

sort_protid

alternative to split based on lProtID (matches raw data key). To activate, after running setup_dcm, point option id to \&sort_protid.

Specific options

Nifti

Do we want Nifti output? May be used by your plugin to apply additional steps, eg. more clumps, reorders, setting header fields ...

c_phase_t

Serialize phase and t dimensions