SIVIC API  0.9.26
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
svkVarianCSFidMapper Class Reference

#include <svkVarianCSFidMapper.h>

Inheritance diagram for svkVarianCSFidMapper:
svkVarianFidMapper

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 svkVarianCSFidMapperNew ()
 

Protected Member Functions

 svkVarianCSFidMapper ()
 
 ~svkVarianCSFidMapper ()
 
virtual void InitMultiFrameFunctionalGroupsModule ()
 
virtual void InitAcquisitionContextModule ()
 
virtual void InitPlaneOrientationMacro ()
 
virtual void InitSharedFunctionalGroupMacros ()
 
virtual void InitPerFrameFunctionalGroupMacros ()
 
virtual void InitPixelMeasuresMacro ()
 
virtual void InitMRReceiveCoilMacro ()
 
virtual void InitMRSpectroscopyPulseSequenceModule ()
 
virtual void InitMRSpectroscopyModule ()
 
virtual void InitMRSpectroscopyFOVGeometryMacro ()
 
virtual void InitMRSpectroscopyDataModule ()
 
virtual void SetCellSpectrum (vtkImageData *data, int x, int y, int z, int timePt, int coilNum)
 
- Protected Member Functions inherited from svkVarianFidMapper
 svkVarianFidMapper ()
 
 ~svkVarianFidMapper ()
 
void InitPatientModule ()
 
void InitGeneralStudyModule ()
 
void InitGeneralSeriesModule ()
 
void InitGeneralEquipmentModule ()
 
virtual void InitMultiFrameDimensionModule ()
 
virtual void InitMRModifierMacro ()
 
virtual void InitMRTransmitCoilMacro ()
 
virtual void InitMRAveragesMacro ()
 
virtual void InitMREchoMacro ()
 
virtual void InitMRTimingAndRelatedParametersMacro ()
 
string GetDcmPatientPositionString ()
 
virtual void ConvertCmToMm ()
 
int GetHeaderValueAsInt (string keyString, int valueIndex=0, int procparRow=0)
 
float GetHeaderValueAsFloat (string keyString, int valueIndex=0, int procparRow=0)
 
string GetHeaderValueAsString (string keyString, int valueIndex=0, int procparRow=0)
 

Additional Inherited Members

- Protected Attributes inherited from svkVarianFidMapper
map< string, vector< vector
< string > > > 
procparMap
 
svkDcmHeaderdcmHeader
 
float * specData
 
svkDcmHeader::DcmDataOrderingDirection dataSliceOrder
 
int numSlices
 
int numFrames
 
svkMRSIODiod
 
int swapBytes
 

Detailed Description

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.

Constructor & Destructor Documentation

svkVarianCSFidMapper ( )
protected
~svkVarianCSFidMapper ( )
protected

Member Function Documentation

void InitAcquisitionContextModule ( )
protectedvirtual

Reimplemented from svkVarianFidMapper.

void InitMRReceiveCoilMacro ( )
protectedvirtual
void InitMRSpectroscopyDataModule ( )
protectedvirtual
void InitMRSpectroscopyFOVGeometryMacro ( )
protectedvirtual
void InitMRSpectroscopyModule ( )
protectedvirtual
void InitMRSpectroscopyPulseSequenceModule ( )
protectedvirtual
void InitMultiFrameFunctionalGroupsModule ( )
protectedvirtual
void InitPerFrameFunctionalGroupMacros ( )
protectedvirtual
void InitPixelMeasuresMacro ( )
protectedvirtual
void InitPlaneOrientationMacro ( )
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().

void InitSharedFunctionalGroupMacros ( )
protectedvirtual
static svkVarianCSFidMapper* New ( )
static
void ReadFidFile ( string  fidFileName,
svkImageData data 
)
virtual
void SetCellSpectrum ( vtkImageData *  data,
int  x,
int  y,
int  z,
int  timePt,
int  coilNum 
)
protectedvirtual
vtkTypeMacro ( svkVarianCSFidMapper  ,
svkVarianFidMapper   
)

The documentation for this class was generated from the following files: