CASToR  2.0
Tomographic Reconstruction (PET/SPECT/CT)
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
iOptimizerMLTR Class Reference

This class implements a version of the Maximum Likelihood Transmission algorithm. More...

#include <iOptimizerMLTR.hh>

Inheritance diagram for iOptimizerMLTR:
Inheritance graph
Collaboration diagram for iOptimizerMLTR:
Collaboration graph

Public Member Functions

 iOptimizerMLTR ()
 The constructor of iOptimizerMLTR. More...
 
 ~iOptimizerMLTR ()
 The destructor of iOptimizerMLTR. More...
 
int ReadConfigurationFile (const string &a_configurationFile)
 A function used to read options from a configuration file. More...
 
int ReadOptionsList (const string &a_optionsList)
 A function used to read options from a list of options. More...
 
- Public Member Functions inherited from vOptimizer
 vOptimizer ()
 The constructor of vOptimizer. More...
 
virtual ~vOptimizer ()
 The destructor of vOptimizer. More...
 
void ShowHelp ()
 A function used to show help about the optimizer. More...
 
int CheckParameters ()
 A public function used to check the parameters settings. More...
 
int Initialize ()
 A public function used to initialize the optimizer. More...
 
int UpdateVisitedVoxels ()
 A public function used to update the 'visited' voxels after each subset. More...
 
int PreDataUpdateStep (int a_iteration, int a_nbIterations, int a_subset, int *ap_nbSubsets)
 A public function used to do stuff that need to be done at the beginning of a subset (before the data update step; i.e. the loop over all events) More...
 
int PostDataUpdateStep (int a_iteration, int a_nbIterations, int a_subset, int *ap_nbSubsets)
 A public function used to do stuff that need to be done at the beginning of a subset (before the data update step; i.e. the loop over all events) More...
 
virtual int DataStep1ForwardProjectModel (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread)
 A public function used to compute the model: forward projection of the provided event. More...
 
virtual int DataStep2Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_iteration, int a_thread)
 A public function which does nothing but being virtual. More...
 
virtual int DataStep3BackwardProjectSensitivity (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread)
 A public function used to back-project the sensitivity terms for the provided event. More...
 
virtual int DataStep4Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_iteration, int a_thread)
 A public function which does nothing but being virtual. More...
 
virtual int DataStep5ComputeCorrections (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread)
 A public function used to compute the correction terms in the data space, for the provided event. More...
 
virtual int DataStep6Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_iteration, int a_thread)
 A public function which does nothing but being virtual. More...
 
virtual int DataStep7BackwardProjectCorrections (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread)
 A public function used to back-project the correction terms into the backward correction image. More...
 
virtual int DataStep8ComputeFOM (oProjectionLine *ap_Line, vEvent *ap_Event, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread)
 A public function used to update the computation of figures-of-merit in the data space. More...
 
virtual int ImageUpdateStep (int a_iteration, int a_nbSubsets)
 A public function used to perform the image update step of the optimizer. More...
 
void SetVerbose (int a_verbose)
 Set the verbose level. More...
 
void SetImageDimensionsAndQuantification (oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification)
 Set the pointer to the image dimensions in use. More...
 
void SetImageSpace (oImageSpace *ap_ImageSpace)
 Set the pointer to the image space in use. More...
 
void SetNbTOFBins (int a_nbTOFBins)
 Set the number of TOF bins in use. More...
 
void SetDataMode (int a_dataMode)
 Set the data mode in use. More...
 
void SetDataType (int a_dataType)
 Set the data type in use. More...
 
void SetDataSpec (int a_dataSpec)
 Set the data physical specificity in use. More...
 
void SetAttenuationImage (FLTNB *ap_attenuationImage, int a_thread)
 Set the attenuation image corresponding to the current thread and current event. More...
 
void SetFOMFlag (bool a_optimizerFOMFlag)
 Set the FOM flag specifying if figures-of-merit will be computed or not. More...
 
void SetImageStatFlag (bool a_optimizerImageStatFlag)
 Set the image stat flag specifying if basic statistics about image udpate will be computed or not. More...
 
int GetNbBackwardImages ()
 Get the number of backward images used by the specific optimizer. More...
 
FLTNB GetInitialValue ()
 Get the initial image value (for initialization) More...
 

Private Member Functions

int PostDataUpdateSpecificStep (int a_iteration, int a_nbIterations, int a_subset, int *ap_nbSubsets)
 This function is overloaded from the vOptimizer that does nothing by default. More...
 
void ShowHelpSpecific ()
 A function used to show help about the child optimizer. More...
 
int CheckSpecificParameters ()
 A private function used to check the parameters settings specific to the child optimizer. More...
 
int InitializeSpecific ()
 This function is used to initialize specific stuff to the child optimizer. More...
 
int SensitivitySpecificOperations (FLTNB a_data, FLTNB a_forwardModel, FLTNB *ap_weight, FLTNB a_multiplicativeCorrections, FLTNB a_additiveCorrections, FLTNB a_blankValue, FLTNB a_quantificationFactor, oProjectionLine *ap_Line)
 This function compute the weight associated to the provided event (for sensitivity computation) More...
 
int DataSpaceSpecificOperations (FLTNB a_data, FLTNB a_forwardModel, FLTNB *ap_backwardValues, FLTNB a_multiplicativeCorrections, FLTNB a_additiveCorrections, FLTNB a_blankValue, FLTNB a_quantificationFactor, oProjectionLine *ap_Line)
 This function performs the data space operations specific to the optimizer (computes the values to be backprojected) More...
 
int ImageSpaceSpecificOperations (FLTNB a_currentImageValue, FLTNB *ap_newImageValue, FLTNB a_sensitivity, FLTNB *ap_correctionValues, INTNB a_voxel)
 This function perform the image update step specific to the optimizer. More...
 

Private Attributes

FLTNBmp_alpha
 
FLTNB m_alphaRatio
 
FLTNB m_currentRelaxationFactor
 
FLTNB m_initialRelaxationFactor
 
FLTNB m_finalRelaxationFactor
 
bool m_nonNegativityConstraint
 

Additional Inherited Members

- Protected Member Functions inherited from vOptimizer
FLTNB ComputeSensitivity (FLTNB ****a4p_sensitivityImage, int a_timeBasisFunction, int a_respBasisFunction, int a_cardBasisFunction, int a_voxel, int a_nbSubsets)
 A function used to compute the sensitivity of a given voxel and a given set of dynamic basis functions. More...
 
FLTNB ForwardProject (oProjectionLine *ap_Line, FLTNB *ap_image=NULL)
 A function used to forward project the provided image (or 1 if NULL), based on the provided oProjectionLine. More...
 
void BackwardProject (oProjectionLine *ap_Line, FLTNB *ap_image, FLTNB a_value)
 A function used to backward project the provided value into the provided image, based on the provided oProjectionLine. More...
 
- Protected Attributes inherited from vOptimizer
int m_verbose
 
int m_nbBackwardImages
 
int m_nbTOFBins
 
FLTNB ** m2p_forwardValues
 
FLTNB *** m3p_backwardValues
 
FLTNB m_initialValue
 
bool m_listmodeCompatibility
 
bool m_histogramCompatibility
 
bool m_emissionCompatibility
 
bool m_transmissionCompatibility
 
oImageDimensionsAndQuantificationmp_ImageDimensionsAndQuantification
 
oImageSpacemp_ImageSpace
 
int m_dataMode
 
int m_dataType
 
int m_dataSpec
 
FLTNB ** m2p_attenuationImage
 
bool m_optimizerFOMFlag
 
FLTNB **** m4p_FOMLogLikelihood
 
FLTNB **** m4p_FOMRMSE
 
uint64_t **** m4p_FOMNbBins
 
HPFLTNB **** m4p_FOMNbData
 
bool m_optimizerImageStatFlag
 
INTNBmp_imageStatNbVox
 
FLTNBmp_imageStatMin
 
FLTNBmp_imageStatMax
 
HPFLTNBmp_imageStatMean
 
HPFLTNBmp_imageStatVariance
 
HPFLTNBmp_correctionStatMean
 
HPFLTNBmp_correctionStatVariance
 

Detailed Description

This class implements a version of the Maximum Likelihood Transmission algorithm.

This class inherits from vOptimizer and implements the MLTR algorithm described in equation 16 of the paper from K. Van Slambrouck and J. Nuyts "Reconstruction scheme for accelerated maximum lihelihood reconstruction: the patchwork structure", IEEE. Trans. Nucl. Sci., vol. 61, pp. 173-81, 2014.

Definition at line 46 of file iOptimizerMLTR.hh.

Constructor & Destructor Documentation

iOptimizerMLTR::iOptimizerMLTR ( )

The constructor of iOptimizerMLTR.

This is the default and unique constructor. It does not take any parameter and its role is only to affect default values to each member of the class.

Definition at line 39 of file iOptimizerMLTR.cc.

iOptimizerMLTR::~iOptimizerMLTR ( )

The destructor of iOptimizerMLTR.

This is the default and unique destructor. It does not take any parameter and its role is only to free or delete all structures that were built by this class.

Definition at line 79 of file iOptimizerMLTR.cc.

Member Function Documentation

int iOptimizerMLTR::CheckSpecificParameters ( )
privatevirtual

A private function used to check the parameters settings specific to the child optimizer.

This function is used to check that all parameters specific to the optimizer are correctly set within allowed values. It is called by the CheckParameters() function of the mother class. It is the implementation of the pure virtual function inherited from the abstract mother class vOptimizer.

Returns
An integer reflecting the check status; 0 if no problem, another value otherwise.

Implements vOptimizer.

Definition at line 183 of file iOptimizerMLTR.cc.

int iOptimizerMLTR::DataSpaceSpecificOperations ( FLTNB  a_data,
FLTNB  a_forwardModel,
FLTNB ap_backwardValues,
FLTNB  a_multiplicativeCorrections,
FLTNB  a_additiveCorrections,
FLTNB  a_blankValue,
FLTNB  a_quantificationFactor,
oProjectionLine ap_Line 
)
privatevirtual

This function performs the data space operations specific to the optimizer (computes the values to be backprojected)

Parameters
FLTNBa_data
FLTNBa_forwardModel
FLTNB*ap_backwardValues
FLTNBa_multiplicativeCorrections
FLTNBa_additiveCorrections
FLTNBa_blankValue
FLTNBa_quantificationFactor
oProjectionLine*ap_Line

It is the implementation of the pure virtual function from vOptimizer. The results to be backprojected is put at ap_backwardValues location.

Returns
An integer reflecting the process status; 0 if no problem, another value otherwise.

Implements vOptimizer.

Definition at line 356 of file iOptimizerMLTR.cc.

int iOptimizerMLTR::ImageSpaceSpecificOperations ( FLTNB  a_currentImageValue,
FLTNB ap_newImageValue,
FLTNB  a_sensitivity,
FLTNB ap_correctionValues,
INTNB  a_voxel 
)
privatevirtual

This function perform the image update step specific to the optimizer.

Parameters
FLTNBa_currentImageValue
FLTNB*ap_newImageValue
FLTNBa_sensitivity
FLTNB*ap_correctionValues

It is the implementation of the pure virtual function from vOptimizer. The new image value is put at the ap_newImageValue location.

Returns
An integer reflecting the process status; 0 if no problem, another value otherwise.

Implements vOptimizer.

Definition at line 373 of file iOptimizerMLTR.cc.

int iOptimizerMLTR::InitializeSpecific ( )
privatevirtual

This function is used to initialize specific stuff to the child optimizer.

It is called by the public Initialize() function from the mother.

Returns
An integer reflecting the initialization status; 0 if no problem, another value otherwise.

Implements vOptimizer.

Definition at line 211 of file iOptimizerMLTR.cc.

Here is the call graph for this function:

int iOptimizerMLTR::PostDataUpdateSpecificStep ( int  a_iteration,
int  a_nbIterations,
int  a_subset,
int *  ap_nbSubsets 
)
privatevirtual

This function is overloaded from the vOptimizer that does nothing by default.

Parameters
inta_iteration
inta_nbIterations
inta_subset
int*ap_nbSubsets

Here, this function is used to update the value of the current relaxation factor with respect to the provided initial and final values, and to the current update index.

Returns
An integer reflecting the process status; 0 if no problem, another value otherwise.

Reimplemented from vOptimizer.

Definition at line 296 of file iOptimizerMLTR.cc.

int iOptimizerMLTR::ReadConfigurationFile ( const string &  a_configurationFile)
virtual

A function used to read options from a configuration file.

Parameters
conststring& a_configurationFile

This function implements the reading of all options associated to the child optimizer, from a configuration file. It is the implementation of the pure virtual function inherited from the abstract class vOptimizer. It checks the reading status but not the options values that will be checked by the CheckSpecificParameters() function.

Returns
An integer reflecting the reading success; 0 if success, another value otherwise.

Implements vOptimizer.

Definition at line 109 of file iOptimizerMLTR.cc.

Here is the call graph for this function:

int iOptimizerMLTR::ReadOptionsList ( const string &  a_optionsList)
virtual

A function used to read options from a list of options.

Parameters
conststring& a_configurationFile

This function implements the reading of all options associated to the child optimizer, from a list of options. It is the implementation of the pure virtual function inherited from the abstract class vOptimizer. It checks the reading status but not the options values that will be checked by the CheckSpecificParameters() function.

Returns
An integer reflecting the reading success; 0 if success, another value otherwise.

Implements vOptimizer.

Definition at line 156 of file iOptimizerMLTR.cc.

Here is the call graph for this function:

int iOptimizerMLTR::SensitivitySpecificOperations ( FLTNB  a_data,
FLTNB  a_forwardModel,
FLTNB ap_weight,
FLTNB  a_multiplicativeCorrections,
FLTNB  a_additiveCorrections,
FLTNB  a_blankValue,
FLTNB  a_quantificationFactor,
oProjectionLine ap_Line 
)
privatevirtual

This function compute the weight associated to the provided event (for sensitivity computation)

Parameters
FLTNBa_data
FLTNBa_forwardModel
FLTNB*ap_weight
FLTNBa_multiplicativeCorrections
FLTNBa_additiveCorrections
FLTNBa_blankValue
FLTNBa_quantificationFactor
oProjectionLine*ap_Line

It is the implementation of the pure virtual function from vOptimizer. The result is put at ap_weight location.

Returns
An integer reflecting the process status; 0 if no problem, another value otherwise.

Implements vOptimizer.

Definition at line 341 of file iOptimizerMLTR.cc.

Here is the call graph for this function:

void iOptimizerMLTR::ShowHelpSpecific ( )
privatevirtual

A function used to show help about the child optimizer.

This function must describe what the module does and how to use it. It describes in details the different parameters of the optimizer, and how to set them through the use of a configuration file or a list of options. It is the implementation of the pure virtual function inherited from the abstract class vOptimizer. It is called by the public ShowHelp() function.

Implements vOptimizer.

Definition at line 88 of file iOptimizerMLTR.cc.

Member Data Documentation

FLTNB iOptimizerMLTR::m_alphaRatio
private

The ratio of alpha values between the interior and the exterior of the cylindrical FOV

Definition at line 197 of file iOptimizerMLTR.hh.

FLTNB iOptimizerMLTR::m_currentRelaxationFactor
private

The current relaxation to be used at this iteration

Definition at line 198 of file iOptimizerMLTR.hh.

FLTNB iOptimizerMLTR::m_finalRelaxationFactor
private

The final relaxation factor to be used at the final update

Definition at line 200 of file iOptimizerMLTR.hh.

FLTNB iOptimizerMLTR::m_initialRelaxationFactor
private

The initial relaxation factor to be used at the first update

Definition at line 199 of file iOptimizerMLTR.hh.

bool iOptimizerMLTR::m_nonNegativityConstraint
private

Do we apply a non-negativity constraint during the image update or not

Definition at line 201 of file iOptimizerMLTR.hh.

FLTNB* iOptimizerMLTR::mp_alpha
private

The alpha image described in the paper from Katrien Van Slambrouck

Definition at line 196 of file iOptimizerMLTR.hh.


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