Read raw data from Siemens MRI scanners with IDEA VB15.
Project description
Python implementation based on MATLAB version written by Eugene G. Kholmovski, PhD (UCAIR, Department of Radiology, University of Utah).
The name of the project pays homage to the naming convention of the main antagonist in Disney’s hit cartoon “Phineas and Ferb” (see List of Doofenshmirtz’s schemes and inventions).
Installation
This package is known to work with Python 2.7.14 and Python 3.6.3 using Ubuntu 17.10 and Windows 10. requirements.txt contains package dependencies. You can install it using pip like this:
git clone https://github.com/mckib2/rawdatarinator.git cd rawdatarinator pip install -r requirements.txt
readMeasDataVB15
Read raw data from Siemens MRI scanners with IDEA VB15.
Will return an array of measured k-space data from raw data from Siemens MRI scanners using IDEA VB15 (single value). If the option -I is used, then image space data will be returned instead.
Usage:
Call with arguments:
readMeasDataVB15 filename [ -t ] [ -rfft ] [ -r1 ] [ -rp ] [ -rn ] [ -skipts ] [ -nnavek ] [ -ros ] [ -rosa ] [ -I ] [ -w ]
Example - Executable
From the terminal:
./readMeasDataVB15.py raw.dat -w
Example - Specify Python
Specify python from the terminal:
python readMeasData15.py raw.dat -w
Example - Import
Import into python script:
from readMeasDataVB15 import readMeasDataVB15 class DataLoader: def __init__(self): data = readMeasDataVB15('raw.dat') if __name__ == "__main__": DataLoader()
Function Arguments
Function definition:
def readMeasDataVB15(filename, resetFFTscale=False, readOneCoil=False, readPhaseCorInfo=False, readNavigator=False, readTimeStamp=True, nNavEK=False, removeOS=False, removeOSafter=False, transformToImageSpace=False, writeToFile=False)
See Command-line Options for more details.
Command-line Options:
Terminal options:
filename Filename of file containing raw measurements. -rfft (resetFFTscale) Resets FFTscale and DataCorrection for each coil to 1. -r1 (readOneCoil) Read measurement data from from individual coil. -rp (readPhaseCorInfo) _ -rn (readNavigator) _ -skipts (skip readTimeStamp) _ -nnavek (nNavEK) _ -ros (removeOS) Flag to remove oversampling (OS) in the x direction. removeOS=True is more efficient as it processes each readout line independently, reducing the required memory space to keep all measured data. -rosa (removeOSafter) Flag to remove oversampling (OS) in the x direction. This works in image space, cutting FOV. Not likely a good idea for radial. -I (transformToImageSpace) Produce image space representation. Note that there is no correction for partial Fourier or parallel imaging k-space undersampling. The given version of code only uses numpy's FFT operation. -w (writeToFile) Save k-space or image space volume. Currently the output filename is auto generated. -h (help) Displays this documentation.
Testing
testsuite.py compares the values generated in the Python implementation to the workspace variables of the MATLAB implementation to ensure correct output.
Quick View
Display processed MRI data from .npz file. No arguments displays the IFFT of the k-space data.
Command-line Options
Options for QuickView:
-nifft (no IFFT) Display k-space data, log magnitude and phase plots.
Examples
To view image domain data:
python quickview.py processed_data.npz
To view log magnitude and phase plots of k-space data:
python quickview.py processed_data.npz -nifft
Lexer and Parser
Siemens raw MRI data comes packaged all in a .dat file. The structure does not follow Siemens’ PLM XML format, but is quasi-XML followed by a dump of the binary data. It is described in the IDEA Documentation.
The game plan I used was to extract the quasi-XML portion of the file, obtain the structure of the document by parsing it, and then reconstructing an equivalent XML document that is easy to traverse using standard libraries. Python Lex-Yacc (PLY) is used to create a lexer (infolex.py) identifying each unique token and a parser (infoparser.py) that builds an XML string as grammar productions are matched. The actual grammar is unknown to me, so the tokens and grammar may not be comprehensive. This functionality is captured in the raw2xml function in infoparser.py.
cleanraw.py sanitizes the raw data by removing illegal characters (such as carriage returns or null characters in the quasi-XML portion of the document) or data not needing to be parsed.
- The resultant XML document mirrors the original quasio-XML document and is split into roughly six subtrees/section::
<XProtocol> … </XProtocol>
<XProtocol name=”Dicom”> … </XProtocol>
<XProtocol name=”Meas”> … </XProtocol>
- The MeasYaps portion, looks like:
<value>Key</value>
<value>Value</value>
…
<XProtocol name=”Phoenix”> … </XProtocol>
<XProtocol name=”Spice”> … </XProtocol>
MeasYaps is a collection of keys and values whereas each <XProtocol> has a standard tree structure. Every XML document must have a root and is called <doc_root>.
Many measurements come from MeasYaps. A utility function called get_val_by_text() is used to find a value given a key.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file RawDatarInator-0.1.1.tar.gz
.
File metadata
- Download URL: RawDatarInator-0.1.1.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6771d125ff31bdd894d97d0aa0abc1a88f5d117be1e8049caa4ca3a759c55ef |
|
MD5 | fda2df962ddbf922d01b47f0691c9671 |
|
BLAKE2b-256 | 77988ceac93f0e38cbba76bf03942217d7aeddcc10dc87f02cede5acfc9f4fed |
File details
Details for the file RawDatarInator-0.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: RawDatarInator-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee81d855f7eb0abe66e37573089ed174fba5ea57db6b47713ead2a7d61bd6011 |
|
MD5 | 990a3f485b3f31f43d52ed875b092b47 |
|
BLAKE2b-256 | 8b3e626fb1963760198aac3539817c56b9c2b8ed3de99cf85821c41b2c3f6b95 |