CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
Public Member Functions | Protected Member Functions | Protected Attributes
oIterativeAlgorithm Class Reference

This is the main class for iterative reconstructions, that manages the iteration loops.
This class manages an iterative reconstruction of any kind, using a vDataFile, and through the use of an oProjector, an oOptimizer, a oConvolver, a oImageSpace. More...

#include <oIterativeAlgorithm.hh>

Collaboration diagram for oIterativeAlgorithm:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 oIterativeAlgorithm ()
 oIterativeAlgorithm constructor. Initialize the member variables to their default values.
virtual ~oIterativeAlgorithm ()
 oIterativeAlgorithm destructor.
int Iterate ()
 Just call either the IterateCPU or the IterateGPU function as asked for.
int IterateCPU ()
 Perform the iterative loop of the algorithm, call the different object for optimization, projection, update, etc. Function designed to be executed on the CPU only.
void SetSaveSensitivityHistoFlag (bool a_saveSensitivityHistoFlag)
 Set the flag that specifies if the sensitivity image in histogram mode has to be saved for each subset/iteration.
void SetSaveSubsetImageFlag (bool a_saveImageAfterSubsets)
 Set the flag that specifies if the image has to be saved for each subset.
void SetOptimizerManager (oOptimizerManager *ap_OptimizerManager)
 Set the Optimizer Manager Object.
void SetImageDimensionsAndQuantification (oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification)
 Set the Image Dimensions and Quantification Object.
void SetImageSpace (oImageSpace *ap_ImageSpace)
 Set the Image Space Object.
void SetProjectorManager (oProjectorManager *ap_ProjectorManager)
 Set the Projector Manager Object.
void SetImageConvolverManager (oImageConvolverManager *ap_ImageConvolverManager)
 Set the Image Convolver Manager Object.
void SetImageProcessingManager (oImageProcessingManager *ap_ImageProcessingManager)
 Set the Image Processing Manager Object.
void SetDynamicModelManager (oDynamicModelManager *ap_DynamicModelManager)
 Set the Dynamic Model Manager Object.
void SetDeformationManager (oDeformationManager *ap_DeformationManager)
 Set the Deformation Manager Object.
void SetDataFile (vDataFile **a2p_DataFile)
 Set the list of DataFile.
void SetGPUflag (bool a_flagGPU)
 Set the GPU flag.
void SetVerbose (int a_verboseLevel)
 Set Verbosity.
void SetNbBeds (int a_nbBeds)
 Set number of beds (bed positions)
void SetPathInitImage (string a_pathToInitialImage)
 Set path to an initial image.
void SetPathToAttenuationImage (string a_pathToAttenuationImage)
 This function is used to set the path to the attenuation image.
void SetPathToSensitivityImage (string a_pathToSensitivityImage)
 Set path to the sensitivity image.
void SetPathToAnatomicalImage (string a_pathToAnatomicalImage)
 Set path to an anatomical image.
void SetPathToMaskImage (string a_pathToMaskImage)
 Set path to a mask image.
int SetNbIterationsAndSubsets (const string &a_nbIterationsSubsets)
 Set the number of iterations and subsets.
int SetOutputIterations (const string &a_outputIterations)
 Set the selected output iterations.
virtual int InitSpecificOptions (string a_specificOptions)
 Set the selected output iterations.

Protected Member Functions

virtual int StepBeforeIterationLoop ()
 This function is called at the beginning of the IterateCPU function.
virtual int StepAfterIterationLoop ()
 This function is called at the end of the IterateCPU function.
virtual int StepBeforeSubsetLoop (int a_iteration)
 This function is called before starting the subset loop.
virtual int StepAfterSubsetLoop (int a_iteration)
 This function is called after finishing the subset loop.
virtual int StepPreProcessInsideSubsetLoop (int a_iteration, int a_subset)
 This function is called right after starting the subset loop. Apply any kind of processing on the forward image before projections.
virtual int StepPostProcessInsideSubsetLoop (int a_iteration, int a_subset)
virtual int StepInnerLoopInsideSubsetLoop (int a_iteration, int a_subset, int a_bed)
 This function is called inside the subset loop and manages the main loop over the events
The loop over the events is multithreaded, and involves a thread lock in the case of image-based deformation.
void ThreadBarrierIncrement ()
 Increment (thread safe) the m_nbThreadsWaiting variable.
bool ThreadBarrierFlag ()
 Check if the m_releaseThreads boolean is enabled or not.
bool ThreadBarrierCheck ()
 Check if all the threads are currently in waiting condition.
void ThreadBarrierSetOff ()
 Disable the thread locking variable (thread safe), and reset the number of waiting threads to 0.
void ThreadBarrierSetOn ()
 Enable the thread locking variable (thread safe), and reset the number of waiting threads to 0.

Protected Attributes

int m_nbIterations
int * mp_nbSubsets
bool * mp_outputIterations
int m_verbose
bool m_flagGPU
oImageDimensionsAndQuantificationmp_ID
vDataFile ** m2p_DataFile
oProjectorManagermp_ProjectorManager
oOptimizerManagermp_OptimizerManager
oDeformationManagermp_DeformationManager
oDynamicModelManagermp_DynamicModelManager
oImageSpacemp_ImageSpace
oImageConvolverManagermp_ImageConvolverManager
oImageProcessingManagermp_ImageProcessingManager
int m_nbBeds
string m_pathToInitialImg
string m_pathToAtnImg
string m_pathToSensitivityImg
string m_pathToAnatomicalImg
string m_pathToMaskImg
bool m_saveSensitivityHistoFlag
bool m_saveImageAfterSubsets
bool m_generalizedImplementation

Detailed Description

This is the main class for iterative reconstructions, that manages the iteration loops.
This class manages an iterative reconstruction of any kind, using a vDataFile, and through the use of an oProjector, an oOptimizer, a oConvolver, a oImageSpace.

Definition at line 30 of file oIterativeAlgorithm.hh.


Constructor & Destructor Documentation

oIterativeAlgorithm constructor. Initialize the member variables to their default values.

Definition at line 32 of file oIterativeAlgorithm.cc.

oIterativeAlgorithm destructor.

Definition at line 68 of file oIterativeAlgorithm.cc.


Member Function Documentation

int oIterativeAlgorithm::InitSpecificOptions ( string  a_specificOptions) [virtual]

Set the selected output iterations.

Parameters:
a_specificOptions

Not Implemented yet

Returns:
0

Definition at line 1033 of file oIterativeAlgorithm.cc.

Just call either the IterateCPU or the IterateGPU function as asked for.

Returns:
0 if success, positive value otherwise

Definition at line 249 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

Perform the iterative loop of the algorithm, call the different object for optimization, projection, update, etc. Function designed to be executed on the CPU only.

Loops over the iterations, subsets, bed position
Call functions related to each steps of iterative reconstruction:

StepBeforeIterationLoop()
/ Loop on iterations
| StepBeforeSubsetLoop(iteration)
| / Loop on subsets
| | StepPreProcessInsideSubsetLoop(iteration,subset)
| | / Loop on bed positions
| | | StepInnerLoopInsideSubsetLoop(iteration,subset,bed)
| | StepPostProcessInsideSubsetLoop(iteration,subset)
| StepAfterSubsetLoop(iteration)
StepAfterIterationLoop()

Returns:
0 if success, positive value otherwise

Definition at line 288 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

public oIterativeAlgorithm::SetDataFile ( vDataFile **  a2p_DataFile) [inline]

Set the list of DataFile.

Parameters:
a2p_DataFile

Definition at line 155 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetDeformationManager ( oDeformationManager ap_DeformationManager) [inline]

Set the Deformation Manager Object.

Parameters:
ap_DeformationManager

Definition at line 149 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetDynamicModelManager ( oDynamicModelManager ap_DynamicModelManager) [inline]

Set the Dynamic Model Manager Object.

Parameters:
ap_DynamicModelManager

Definition at line 143 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetGPUflag ( bool  a_flagGPU) [inline]

Set the GPU flag.

Parameters:
a_flagGPU

Definition at line 161 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetImageConvolverManager ( oImageConvolverManager ap_ImageConvolverManager) [inline]

Set the Image Convolver Manager Object.

Parameters:
ap_ImageConvolverManager

Definition at line 131 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetImageDimensionsAndQuantification ( oImageDimensionsAndQuantification ap_ImageDimensionsAndQuantification) [inline]

Set the Image Dimensions and Quantification Object.

Parameters:
ap_ImageDimensionsAndQuantification

Definition at line 113 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetImageProcessingManager ( oImageProcessingManager ap_ImageProcessingManager) [inline]

Set the Image Processing Manager Object.

Parameters:
ap_ImageProcessingManager

Definition at line 137 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetImageSpace ( oImageSpace ap_ImageSpace) [inline]

Set the Image Space Object.

Parameters:
ap_ImageSpace

Definition at line 119 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetNbBeds ( int  a_nbBeds) [inline]

Set number of beds (bed positions)

Parameters:
a_nbBeds

Definition at line 173 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

int oIterativeAlgorithm::SetNbIterationsAndSubsets ( const string &  a_nbIterationsSubsets)

Set the number of iterations and subsets.

Parameters:
a_nbIterationsSubsets

The provided string is a list of iteration:subset pairs separated by commas.

Returns:
0 if success, positive value otherwise

Definition at line 203 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetOptimizerManager ( oOptimizerManager ap_OptimizerManager) [inline]

Set the Optimizer Manager Object.

Parameters:
ap_OptimizerManager

Definition at line 107 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

int oIterativeAlgorithm::SetOutputIterations ( const string &  a_outputIterations)

Set the selected output iterations.

Parameters:
a_outputIterations

The provided string is a list of couple a:b separated by commas.
It means that we save one iteration over a until b is reached.
"b" must be incrementing for each successive couples. If the list is empty, we save all iterations by default.
If the list is equal to "-1", then we save only the last iteration.

Returns:
0 if success, positive value otherwise

Definition at line 156 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetPathInitImage ( string  a_pathToInitialImage) [inline]

Set path to an initial image.

Parameters:
a_pathToInitialImage

Definition at line 179 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetPathToAnatomicalImage ( string  a_pathToAnatomicalImage) [inline]

Set path to an anatomical image.

Parameters:
a_pathToAnatomicalImage

Definition at line 197 of file oIterativeAlgorithm.hh.

public oIterativeAlgorithm::SetPathToAttenuationImage ( string  a_pathToAttenuationImage) [inline]

This function is used to set the path to the attenuation image.

Parameters:
stringa_pathToAttenuationImage

Definition at line 185 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetPathToMaskImage ( string  a_pathToMaskImage) [inline]

Set path to a mask image.

Parameters:
a_pathToMaskImage

Definition at line 203 of file oIterativeAlgorithm.hh.

public oIterativeAlgorithm::SetPathToSensitivityImage ( string  a_pathToSensitivityImage) [inline]

Set path to the sensitivity image.

Parameters:
a_pathToSensitivityImage

Definition at line 191 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetProjectorManager ( oProjectorManager ap_ProjectorManager) [inline]

Set the Projector Manager Object.

Parameters:
ap_ProjectorManager

Definition at line 125 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public void oIterativeAlgorithm::SetSaveSensitivityHistoFlag ( bool  a_saveSensitivityHistoFlag) [inline]

Set the flag that specifies if the sensitivity image in histogram mode has to be saved for each subset/iteration.

Parameters:
boola_saveSensitivityHistoFlag

Definition at line 95 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public void oIterativeAlgorithm::SetSaveSubsetImageFlag ( bool  a_saveImageAfterSubsets) [inline]

Set the flag that specifies if the image has to be saved for each subset.

Parameters:
boola_saveImageAfterSubsets

Definition at line 101 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

public oIterativeAlgorithm::SetVerbose ( int  a_verboseLevel) [inline]

Set Verbosity.

Parameters:
a_verboseLevel

Definition at line 167 of file oIterativeAlgorithm.hh.

Here is the caller graph for this function:

int oIterativeAlgorithm::StepAfterIterationLoop ( ) [protected, virtual]

This function is called at the end of the IterateCPU function.

Free Memory for the imageSpace and some managers

Returns:
0 if success, positive value otherwise.

Definition at line 1003 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int oIterativeAlgorithm::StepAfterSubsetLoop ( int  a_iteration) [protected, virtual]

This function is called after finishing the subset loop.

Parameters:
a_iteration: iteration index

Clean the main images from never visited voxels
Apply post-convolution/post-processing if needed
Write output images on disk as requested by the user

Returns:
0 if success, positive value otherwise.

Definition at line 937 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int oIterativeAlgorithm::StepBeforeIterationLoop ( ) [protected, virtual]

This function is called at the beginning of the IterateCPU function.

Initialization and memory allocation for the imageSpace and some managers

Returns:
0 if success, positive value otherwise.

Definition at line 417 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int oIterativeAlgorithm::StepBeforeSubsetLoop ( int  a_iteration) [protected, virtual]

This function is called before starting the subset loop.

Parameters:
a_iteration: iteration index
Returns:
0 if success, positive value otherwise.

Definition at line 501 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:

int oIterativeAlgorithm::StepInnerLoopInsideSubsetLoop ( int  a_iteration,
int  a_subset,
int  a_bed 
) [protected, virtual]

This function is called inside the subset loop and manages the main loop over the events
The loop over the events is multithreaded, and involves a thread lock in the case of image-based deformation.

Parameters:
a_iteration: iteration index
a_subset: subset index
a_bed: bed position

Step 1: Get the current event for that thread index
Step 2: Call the dynamic switch function that updates the current frame and gate numbers, and also detects involuntary patient motion
Perform image-based deformation if needed (thread lock is required)
Step 3: Compute the projection line
Step 4: Optimize in the data space (forward-proj, update, backward-proj)

Returns:
0 if success, positive value otherwise.

Definition at line 584 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int oIterativeAlgorithm::StepPostProcessInsideSubsetLoop ( int  a_iteration,
int  a_subset 
) [protected, virtual]

Definition at line 822 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

int oIterativeAlgorithm::StepPreProcessInsideSubsetLoop ( int  a_iteration,
int  a_subset 
) [protected, virtual]

This function is called right after starting the subset loop. Apply any kind of processing on the forward image before projections.

This function is called right after starting the subset loop.
Apply any kind of image processing on the backward image and main image after backprojections.

Parameters:
a_iteration: iteration index
a_subset: subset index

Copy current main image into forward image matrix
Reinitialize backward image and 4D gating indices
Apply image processing/convolution on the forward image matrix (image to be projeted)

Returns:
0 if success, positive value otherwise.
Parameters:
a_iteration: iteration index
a_subset: subset index

Synchronize parallel results
Apply image deformation/processing/convolution on the backward image
Update the image using the optimizer functions
Apply dynamic model/image processing/convolution on the main image

Returns:
0 if success, positive value otherwise.

Definition at line 525 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

Check if all the threads are currently in waiting condition.

Returns:
true if all the threads are waiting, false otherwise

Definition at line 1096 of file oIterativeAlgorithm.cc.

Here is the call graph for this function:

Here is the caller graph for this function:

Check if the m_releaseThreads boolean is enabled or not.

Returns:
true if the threads can be released, false otherwise

Definition at line 1076 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:

Increment (thread safe) the m_nbThreadsWaiting variable.

Definition at line 1055 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:

Disable the thread locking variable (thread safe), and reset the number of waiting threads to 0.

Definition at line 1114 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:

Enable the thread locking variable (thread safe), and reset the number of waiting threads to 0.

Definition at line 1134 of file oIterativeAlgorithm.cc.

Here is the caller graph for this function:


Member Data Documentation

Pointer to the array of vDataFile object

Definition at line 363 of file oIterativeAlgorithm.hh.

Do we use GPU or not (default=false)

Definition at line 361 of file oIterativeAlgorithm.hh.

No purpose yet. For upcoming features

Definition at line 379 of file oIterativeAlgorithm.hh.

number of bed FOVs (1 datafile by bed) (default=-1)

Definition at line 371 of file oIterativeAlgorithm.hh.

Number of iterations (default=1)

Definition at line 357 of file oIterativeAlgorithm.hh.

String containing the path to an anatomical image

Definition at line 375 of file oIterativeAlgorithm.hh.

String of the path to the attenuation images

Definition at line 373 of file oIterativeAlgorithm.hh.

String containing the path to an initialization image

Definition at line 372 of file oIterativeAlgorithm.hh.

String containing the path to a mask image

Definition at line 376 of file oIterativeAlgorithm.hh.

String containing the path to a sensitivity image

Definition at line 374 of file oIterativeAlgorithm.hh.

Flag specifying that the image has to be saved after each subset

Definition at line 378 of file oIterativeAlgorithm.hh.

Flag specifying that the sensitivity image has to be saved for each subset/iteration in histogram mode

Definition at line 377 of file oIterativeAlgorithm.hh.

Verbosity (default=-1)

Definition at line 360 of file oIterativeAlgorithm.hh.

Pointer to the Deformation Manager object

Definition at line 366 of file oIterativeAlgorithm.hh.

Pointer to the Dynamic Model Manager object

Definition at line 367 of file oIterativeAlgorithm.hh.

Pointer to the oImageDimensionsAndQuantification object

Definition at line 362 of file oIterativeAlgorithm.hh.

Pointer to the Image Convolver Manager object

Definition at line 369 of file oIterativeAlgorithm.hh.

Pointer to the Image Processing Manager object

Definition at line 370 of file oIterativeAlgorithm.hh.

Pointer to the Image Space object

Definition at line 368 of file oIterativeAlgorithm.hh.

Number of subsets (default=1)

Definition at line 358 of file oIterativeAlgorithm.hh.

Pointer to the Optimizer Manager object

Definition at line 365 of file oIterativeAlgorithm.hh.

A boolean for each iteration saying if we save it or not

Definition at line 359 of file oIterativeAlgorithm.hh.

Pointer to the Projector Manager object

Definition at line 364 of file oIterativeAlgorithm.hh.


The documentation for this class was generated from the following files:
 All Classes Files Functions Variables Typedefs Defines