![]() |
CASToR
3.2
Tomographic Reconstruction (PET/SPECT/CT)
|
This class implements the ADMM with non-negativity on projection space. More...
#include <iOptimizerADMMLim.hh>
Public Member Functions | |
iOptimizerADMMLim () | |
The constructor of iOptimizerADMMLim. More... | |
~iOptimizerADMMLim () | |
The destructor of iOptimizerADMMLim. 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... | |
virtual int | DataStep4Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
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_thread) |
A public function to compute the analytical solution of ADMM equation on v and update u. More... | |
![]() | |
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 () |
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 | PreImageUpdateStep () |
A public function used to do stuff that need to be done between the loop over events and the image update step. 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) |
virtual int | DataStep2Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep3BackwardProjectSensitivity (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep7BackwardProjectCorrections (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep8ComputeFOM (oProjectionLine *ap_Line, vEvent *ap_Event, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
void | SetVerbose (int a_verbose) |
void | SetImageDimensionsAndQuantification (oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification) |
void | SetImageSpace (oImageSpace *ap_ImageSpace) |
void | SetNbTOFBins (int a_nbTOFBins) |
void | SetDataMode (int a_dataMode) |
void | SetDataType (int a_dataType) |
void | SetDataSpec (int a_dataSpec) |
void | SetAttenuationImage (FLTNB *ap_attenuationImage, int a_thread) |
void | SetFOMFlag (bool a_optimizerFOMFlag) |
void | SetImageStatFlag (bool a_optimizerImageStatFlag) |
void | SetNumbersOfIterationsAndSubsets (int a_nbIterations, int *ap_nbSubsets) |
void | SetCurrentIteration (int a_currentIteration) |
void | SetCurrentSubset (int a_currentSubset) |
int | GetNbBackwardImages () |
Get the number of backward images used by the specific optimizer. More... | |
FLTNB | GetInitialValue () |
Get the initial image value (for initialization) More... | |
void | SetOptimizerID (const string &a_optimizerID) |
const string & | GetOptimizerID () |
int | GetRequiredPenaltyDerivativesOrder () |
Get the penalty derivative order needed for this algorithm. More... | |
bool | GetAcceptPenalty () |
Get the boolean saying if the optimizer accepts penalties. More... | |
void | SetPenalty (vPenalty *ap_penalty) |
bool | GetNeedGlobalSensitivity () |
Get the boolean saying if the sensitivity has to be computed globally for all data channels and not per subset. More... | |
vOptimizer () | |
virtual | ~vOptimizer () |
void | ShowHelp () |
int | CheckParameters () |
int | Initialize () |
int | UpdateVisitedVoxels () |
int | PreDataUpdateStep () |
int | PreImageUpdateStep () |
virtual int | DataStep1ForwardProjectModel (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep2Optional (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep3BackwardProjectSensitivity (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep7BackwardProjectCorrections (oProjectionLine *ap_Line, vEvent *ap_Event, int a_bed, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
virtual int | DataStep8ComputeFOM (oProjectionLine *ap_Line, vEvent *ap_Event, int a_timeFrame, int a_respGate, int a_cardGate, int a_thread) |
void | SetVerbose (int a_verbose) |
void | SetImageDimensionsAndQuantification (oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification) |
void | SetImageSpace (oImageSpace *ap_ImageSpace) |
void | SetDataFile (vDataFile *ap_DataFile) |
Set the data file in use. More... | |
void | SetNbTOFBins (int a_nbTOFBins) |
void | SetDataMode (int a_dataMode) |
void | SetDataType (int a_dataType) |
void | SetDataSpec (int a_dataSpec) |
void | SetAttenuationImage (FLTNB *ap_attenuationImage, int a_thread) |
void | SetFOMFlag (bool a_optimizerFOMFlag) |
void | SetImageStatFlag (bool a_optimizerImageStatFlag) |
void | SetNumbersOfIterationsAndSubsets (int a_nbSubIterationsTotal, int *ap_nbSubsets) |
void | SetOutputIterations (bool *ap_outputIterations) |
Set the selected output iterations. More... | |
void | SetCurrentIteration (int a_currentTotalSubIteration) |
int | GetNbSubIterationsInOneIteration () |
Get the number of sub iterations in one iteration. More... | |
void | SetImageConvolverManager (oImageConvolverManager *ap_ImageConvolverManager) |
Set the Image Convolver Manager Object. More... | |
void | SetCurrentSubset (int a_currentSubset) |
int | GetNbBackwardImages () |
FLTNB | GetInitialValue () |
void | SetOptimizerID (const string &a_optimizerID) |
const string & | GetOptimizerID () |
int | GetRequiredPenaltyDerivativesOrder () |
bool | GetAcceptPenalty () |
void | SetPenalty (vPenalty *ap_penalty) |
bool | GetNeedGlobalSensitivity () |
void | EnterPreIteration () |
Set pre-process flag to true. More... | |
void | ExitPreIteration () |
Set pre-process flag to false. More... | |
bool | NeedPreIteration () |
Say if the optimizer needs a pre-process loop before iterations are done. More... | |
void | EnterPostIteration () |
Set post-process flag to true. More... | |
void | ExitPostIteration () |
Set post-process flag to false. More... | |
bool | NeedPostIteration () |
Say if the optimizer needs a post-process loop after iterations are done. More... | |
Private Member Functions | |
virtual int | PreDataUpdateSpecificStep () |
A private function used to compute some norms for the image update. More... | |
int | PreImageUpdateSpecificStep () |
A private function used to compute the penalty term update adaptive alpha of the ADMM algorithm. 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 *apImageValue, FLTNB a_sensitivity, FLTNB *ap_correctionValues, INTNB a_voxel, int a_tbf=-1, int a_rbf=-1, int a_cbf=-1) |
This function perform the image update step specific to the optimizer. More... | |
virtual int | ImageUpdateStep () |
A public function used to perform the image update step of the optimizer. More... | |
This class implements the ADMM with non-negativity on projection space.
This class inherits from vOptimizer and implements the ADMM algorithm proposed by Lim et al. to ensure positivity of the projections.
Definition at line 30 of file iOptimizerADMMLim.hh.
iOptimizerADMMLim::iOptimizerADMMLim | ( | ) |
The constructor of iOptimizerADMMLim.
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 17 of file iOptimizerADMMLim.cc.
iOptimizerADMMLim::~iOptimizerADMMLim | ( | ) |
The destructor of iOptimizerADMMLim.
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 87 of file iOptimizerADMMLim.cc.
|
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.
Implements vOptimizer.
Definition at line 372 of file iOptimizerADMMLim.cc.
|
privatevirtual |
This function performs the data space operations specific to the optimizer (computes the values to be backprojected)
FLTNB | a_data |
FLTNB | a_forwardModel |
FLTNB* | ap_backwardValues |
FLTNB | a_multiplicativeCorrections |
FLTNB | a_additiveCorrections |
FLTNB | a_blankValue |
FLTNB | a_quantificationFactor |
oProjectionLine* | ap_Line |
int | a_th |
It is the implementation of the pure virtual function from vOptimizer. It is not useful in this optimizer this function is directly written in DataStep5ComputeCorrections function as used variables depend on the current thread
Implements vOptimizer.
Definition at line 959 of file iOptimizerADMMLim.cc.
|
virtual |
Reimplemented from vOptimizer.
Definition at line 887 of file iOptimizerADMMLim.cc.
|
virtual |
A public function used to compute the correction terms in the data space, for the provided event.
oProjectionLine* | ap_Line |
vEvent* | ap_Event |
int | a_bed |
int | a_timeFrame |
int | a_respGate |
int | a_cardGate |
int | a_thread |
Inside the DataUpdateStep() of the oOptimizerManager, this is the fifth function called. Its role is to compute the correction terms in the data space, based on the forward model and the data. Here, it is overrided to get Ax, y, r_bar for u and v computation
Reimplemented from vOptimizer.
Definition at line 927 of file iOptimizerADMMLim.cc.
|
virtual |
A public function to compute the analytical solution of ADMM equation on v and update u.
oProjectionLine* | ap_Line |
vEvent* | ap_Event |
int | a_bed |
int | a_timeFrame |
int | a_respGate |
int | a_cardGate |
int | a_thread |
Inside the DataUpdateStep() of the oOptimizerManager, this is the sixth function called. For this optimizer, here is computed u^{k+1} and v^{k+1} update thanks to the paper analytical formulas, using preivously stored variables and x update.
Reimplemented from vOptimizer.
Definition at line 973 of file iOptimizerADMMLim.cc.
|
privatevirtual |
This function perform the image update step specific to the optimizer.
FLTNB | a_currentImageValue |
FLTNB* | apImageValue |
FLTNB | a_sensitivity |
FLTNB* | ap_correctionValues |
INTNB | a_voxel |
int | a_tbf |
int | a_rbf |
int | a_cbf |
int | a_th |
It is the implementation of the pure virtual function from vOptimizer. The new image value is put at the apImageValue location.
Implements vOptimizer.
Definition at line 1478 of file iOptimizerADMMLim.cc.
|
privatevirtual |
A public function used to perform the image update step of the optimizer.
int | a_iteration |
int | a_nbSubsets |
This function is called by the eponym function from the oOptimizerManager. It will manage the dynamic loops, compute the sensitivity using the private ComputeSensitivity() function, and update each voxel according to the specific optimizer by calling the pure virtual ImageSpaceSpecificOperations() function.
Reimplemented from vOptimizer.
Definition at line 1283 of file iOptimizerADMMLim.cc.
|
privatevirtual |
This function is used to initialize specific stuff to the child optimizer.
It is called by the public Initialize() function from the mother.
Implements vOptimizer.
Definition at line 452 of file iOptimizerADMMLim.cc.
|
privatevirtual |
A private function used to compute some norms for the image update.
This function computes some norms for the optimized stepsize used for the image update. so it can be overloaded by the child optimizer if needed.
Reimplemented from vOptimizer.
Definition at line 633 of file iOptimizerADMMLim.cc.
|
privatevirtual |
A private function used to compute the penalty term update adaptive alpha of the ADMM algorithm.
This function implements the virtual eponym function of vOptimizer. It computes the penalty term of the ADMM algorithm, and the residuals to compute adaptive alpha.
Reimplemented from vOptimizer.
Definition at line 1058 of file iOptimizerADMMLim.cc.
|
virtual |
A function used to read options from a configuration file.
const | string& 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.
Implements vOptimizer.
Definition at line 254 of file iOptimizerADMMLim.cc.
|
virtual |
A function used to read options from a list of options.
const | string& a_optionsList |
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.
Implements vOptimizer.
Definition at line 343 of file iOptimizerADMMLim.cc.
|
privatevirtual |
This function compute the weight associated to the provided event (for sensitivity computation)
FLTNB | a_data |
FLTNB | a_forwardModel |
FLTNB* | ap_weight |
FLTNB | a_multiplicativeCorrections |
FLTNB | a_additiveCorrections |
FLTNB | a_blankValue |
FLTNB | a_quantificationFactor |
oProjectionLine* | ap_Line |
It is the implementation of the pure virtual function from vOptimizer. The result is put at ap_weight location.
Implements vOptimizer.
Definition at line 912 of file iOptimizerADMMLim.cc.
|
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 220 of file iOptimizerADMMLim.cc.
|
private |
r_bar variable in original paper, to store background events (scatter + randoms), indexed on current thread and TOF bin
Definition at line 254 of file iOptimizerADMMLim.hh.
|
private |
Sinogram u (scaled dual variable), to be used for next iteration and to be written at the end of optimizer computation, with u the scaled dual variable in second ADMM derivation
Definition at line 266 of file iOptimizerADMMLim.hh.
|
private |
Sinogram v (ADMM constraint is Ax=v), to be used for next iteration and to be written at the end of optimizer computation, with v=Ax in second ADMM derivation
Definition at line 267 of file iOptimizerADMMLim.hh.
|
private |
Sinogram containing the forward projection of the image (for each lor and each TOF bin)
Definition at line 268 of file iOptimizerADMMLim.hh.
|
private |
y variable in original paper, to store raw data, indexed on current thread and TOF bin
Definition at line 255 of file iOptimizerADMMLim.hh.
|
private |
Current gradient vector (indexed on basis functions) to compute gradient norm in gradient descent in next x update and needed to compute projection of it
Definition at line 264 of file iOptimizerADMMLim.hh.
|
private |
Current gradient vector (indexed on frames)
Definition at line 265 of file iOptimizerADMMLim.hh.
|
private |
Image containing the penalty terms of the algorithm
Definition at line 252 of file iOptimizerADMMLim.hh.
|
private |
Integer to define which variables are adaptive : nothing, alpha, or tau (which means alpha and tau)
Definition at line 279 of file iOptimizerADMMLim.hh.
|
private |
Alpha variable in original paper (ADMM penalty parameter), computed at each iteration if adaptive mode
Definition at line 257 of file iOptimizerADMMLim.hh.
|
private |
Boolean to define when stopping criterion is reached, to stop the algorithm (if asked)
Definition at line 283 of file iOptimizerADMMLim.hh.
|
private |
Integer to define at which iteration the stopping criterion is reached, to stop the algorithm (if asked)
Definition at line 282 of file iOptimizerADMMLim.hh.
|
private |
Integer to define value of first computed iteration (if some are skipped), for u and v initialization
Definition at line 284 of file iOptimizerADMMLim.hh.
|
private |
Boolean to check if value of first computed iteration is set
Definition at line 285 of file iOptimizerADMMLim.hh.
|
private |
Mu variable in adaptive alpha computation, factor to balance primal and dual residual in adaptive alpha computation
Definition at line 260 of file iOptimizerADMMLim.hh.
|
private |
Alpha variable at previous iteration, used to scale u if adaptive mode
Definition at line 258 of file iOptimizerADMMLim.hh.
|
private |
Norm of relative dual residual (used in adaptive modes)
Definition at line 274 of file iOptimizerADMMLim.hh.
|
private |
Norm of relative primal residual (used in adaptive modes)
Definition at line 273 of file iOptimizerADMMLim.hh.
|
private |
Integer to save (or not) sinograms u and v at same iterations as the image
Definition at line 281 of file iOptimizerADMMLim.hh.
|
private |
Value to use as stopping criterion based on relative residuals (0 means do not used the stopping criterion)
Definition at line 280 of file iOptimizerADMMLim.hh.
|
private |
Tau variable in Wohlberg's paper, computed at each iteration if adaptive mode for alpha and tau
Definition at line 259 of file iOptimizerADMMLim.hh.
|
private |
Tau_max variable in adaptive alpha and tau computation
Definition at line 261 of file iOptimizerADMMLim.hh.
|
private |
Xi variable in adaptive alpha computation, factor to balance primal and dual residual convergence speed in adaptive computations
Definition at line 262 of file iOptimizerADMMLim.hh.
|
private |
Norm of current gradient indexed on basis functions, to be used in gradient descent (to compute stepsize) in x update
Definition at line 270 of file iOptimizerADMMLim.hh.
|
private |
Norm of finite difference matrix times gradient vector, to be used in gradient descent with quadratic MRF penalty in x update
Definition at line 272 of file iOptimizerADMMLim.hh.
|
private |
Norm of primal residual (used in adaptive modes)
Definition at line 275 of file iOptimizerADMMLim.hh.
|
private |
Norm of projection of current gradient, to be used in gradient descent (to compute stepsize) in x update
Definition at line 271 of file iOptimizerADMMLim.hh.
|
private |
Norm of projection of image (used in adaptive modes)
Definition at line 276 of file iOptimizerADMMLim.hh.
|
private |
Norm of sinogram v (used in adaptive modes)
Definition at line 277 of file iOptimizerADMMLim.hh.
|
private |
Boolean to check if user gave sinograms u and v in command line
Definition at line 286 of file iOptimizerADMMLim.hh.