SIVIC API
0.9.26
|
#include <svkVarianCSFidMapper.h>
Public Member Functions | |
vtkTypeMacro (svkVarianCSFidMapper, svkVarianFidMapper) | |
virtual void | ReadFidFile (string fidFileName, svkImageData *data) |
Public Member Functions inherited from svkVarianFidMapper | |
vtkTypeMacro (svkVarianFidMapper, vtkObject) | |
virtual void | InitializeDcmHeader (map< string, vector< vector< string > > > procparMap, svkDcmHeader *header, svkMRSIOD *iod, int swapBytes) |
Static Public Member Functions | |
static svkVarianCSFidMapper * | New () |
Additional Inherited Members | |
Protected Attributes inherited from svkVarianFidMapper | |
map< string, vector< vector < string > > > | procparMap |
svkDcmHeader * | dcmHeader |
float * | specData |
svkDcmHeader::DcmDataOrderingDirection | dataSliceOrder |
int | numSlices |
int | numFrames |
svkMRSIOD * | iod |
int | swapBytes |
This is a concrete instance of an svkVarianFIDMapper for Varian 3D compressed sensing data. This mapper is used by the svkVarianFidReader to convert Varian FID/Procpar data, from the UCSF compressed sensing pulse sequence, into an svkImageData object (includeing a DICOM MR Spectroscopy header). The Varian compressed sensing pulse sequence was implemented by Dr. Sukumar Subramaniam (UCSF NMR Lab) based on the work of Drs. Hu, Lustig et al.: Simon Hu, Michael Lustig, Asha Balakrishnan, Peder E. Z. Larson, Robert Bok, John Kurhanewicz, Sarah J. Nelson, Andrei Goga, John M. Pauly, Daniel B. Vigneron: "3D compressed sensing for highly accelerated hyperpolarized 13c mrsi with in vivo applications to transgenic mouse models of cancer", Magn. Reson. Med., 63(2), 312-321 (2009).
This mapper takes the sparsely sampled compressed sensing k-space data and reorganizes it into a rectalinear data array with kt, kx, ky and kz organized into a regular 4D grid with missing points from undersampling filled in with zeros. At the moment, the data sampling order is hardcoded into this class for this specific acquisition.
This missing k-space data from undersampling (encoded in the output data as zeros) needs to be filled in using the L1 algorithm described here: Lusting M, Donoho D.L., Pauly J.M: "Sparse MRI: the application of compressed sensing for rapid MR imaging", Magn. Reson. Med., 58, 1182-1195 (2007).
Additionally, phase correction for the flyback encoding needs to be accounted for by downstream algorithms.
Thanks to Dr. Simon Hu and Dr. Sukumar Subramaniam from the Vigneron and Kurhanewicz labs at the UCSF Department of Radiology and Biomedical Imaging for help implementing this class.
|
protected |
|
protected |
References svkVarianFidMapper::specData.
|
protectedvirtual |
Reimplemented from svkVarianFidMapper.
|
protectedvirtual |
Receive Coil:
Reimplemented from svkVarianFidMapper.
References svkDcmHeader::AddSequenceItemElement(), and svkVarianFidMapper::dcmHeader.
Referenced by svkVarianCSFidMapper::InitSharedFunctionalGroupMacros().
|
protectedvirtual |
Current PixelData ordering:
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dcmHeader, svkVarianFidMapper::GetHeaderValueAsInt(), and svkDcmHeader::SetValue().
|
protectedvirtual |
Reimplemented from svkVarianFidMapper.
References svkDcmHeader::AddSequenceItemElement(), svkVarianFidMapper::dcmHeader, svkDcmHeader::GetDataDcos(), svkVarianFidMapper::GetHeaderValueAsFloat(), and svkVarianFidMapper::GetHeaderValueAsInt().
Referenced by svkVarianCSFidMapper::InitSharedFunctionalGroupMacros().
|
protectedvirtual |
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dcmHeader, svkVarianFidMapper::GetHeaderValueAsFloat(), svkVarianFidMapper::GetHeaderValueAsString(), and svkDcmHeader::SetValue().
|
protectedvirtual |
|
protectedvirtual |
|
protectedvirtual |
This is initialized to represent the target reconstructed params. FID toplc is the center of the first voxel.
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dataSliceOrder, svkVarianFidMapper::dcmHeader, svkDcmHeader::GetDataDcos(), svkDcmHeader::GetDimensionIndexVector(), svkVarianFidMapper::GetHeaderValueAsFloat(), svkVarianFidMapper::GetHeaderValueAsInt(), svkDcmHeader::GetPixelSize(), svkDcmHeader::InitPerFrameFunctionalGroupSequence(), svkVarianFidMapper::numSlices, svkDcmHeader::SetDimensionVectorValue(), svkDcmHeader::SetSliceOrder(), and svkDcmHeader::SLICE_INDEX.
Referenced by svkVarianCSFidMapper::InitMultiFrameFunctionalGroupsModule().
|
protectedvirtual |
Pixel Spacing:
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dcmHeader, svkVarianFidMapper::GetHeaderValueAsFloat(), svkVarianFidMapper::GetHeaderValueAsInt(), and svkDcmHeader::InitPixelMeasuresMacro().
Referenced by svkVarianCSFidMapper::InitSharedFunctionalGroupMacros().
|
protectedvirtual |
The DICOM PlaneOrientationSequence is set from orientational params defined in the Varian procpar file. According to the VNMR User Programming documentation available at http://www.varianinc.com/cgi-bin/nav?varinc/docs/products/nmr/apps/pubs/sys_vn&cid=975JIOILOKPQNGMKIINKNGK&zsb=1060363007.usergroup (VNMR 6.1C, Pub No. 01-999165-00, Rev B0802, page 155), the Euler angles are defined in the "User Guide Imaging. The Varian User Guide: Imaging (Pub. No. 01-999163-00, Rev. A0201, page 272) provides the following definition of the procpar euler angles:
For this psd, the flyback encoding represents the outer data loop (essentially the slice). This complicates the interpretation of the Varian conventions which define coronal acquisitions as those with readout along the z direction and slice selection along the y direction in the magnet frame (not relevant to mrs and flyback). Therefore the euler angles definitions need to be redefined here for this application context.
Currently only support "coronal" defined by varian to be readout along z, which for us is the most slowly varying outer loop (slice loop) or rather an axial data set.
Reimplemented from svkVarianFidMapper.
References svkDcmHeader::AddSequenceItemElement(), svkVarianFidMapper::dataSliceOrder, svkVarianFidMapper::dcmHeader, svkVarianFidMapper::GetHeaderValueAsFloat(), svkVarianFidMapper::GetHeaderValueAsString(), svkDcmHeader::GetNormalVector(), svkDcmHeader::INCREMENT_ALONG_NEG_NORMAL, and svkDcmHeader::INCREMENT_ALONG_POS_NORMAL.
Referenced by svkVarianCSFidMapper::InitSharedFunctionalGroupMacros().
|
protectedvirtual |
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::InitMRAveragesMacro(), svkVarianFidMapper::InitMREchoMacro(), svkVarianFidMapper::InitMRModifierMacro(), svkVarianCSFidMapper::InitMRReceiveCoilMacro(), svkVarianCSFidMapper::InitMRSpectroscopyFOVGeometryMacro(), svkVarianFidMapper::InitMRTimingAndRelatedParametersMacro(), svkVarianCSFidMapper::InitPixelMeasuresMacro(), and svkVarianCSFidMapper::InitPlaneOrientationMacro().
Referenced by svkVarianCSFidMapper::InitMultiFrameFunctionalGroupsModule().
|
static |
|
virtual |
Reads spec data from compressed sensing fid.
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dcmHeader, svkVarianFidMapper::GetHeaderValueAsInt(), svkDcmHeader::GetIntValue(), svkDcmHeader::GetNumberOfCoils(), svkDcmHeader::GetNumberOfTimePoints(), svkVarianCSFidMapper::SetCellSpectrum(), svkVarianFidMapper::specData, and svkVarianFidMapper::swapBytes.
|
protectedvirtual |
Reimplemented from svkVarianFidMapper.
References svkVarianFidMapper::dcmHeader, svkDcmHeader::GetIntValue(), and svkDcmHeader::GetStringValue().
Referenced by svkVarianCSFidMapper::ReadFidFile().
vtkTypeMacro | ( | svkVarianCSFidMapper | , |
svkVarianFidMapper | |||
) |