CASToR
2.0
Tomographic Reconstruction (PET/SPECT/CT)
|
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>
Public Member Functions | |
oIterativeAlgorithm () | |
oIterativeAlgorithm constructor. Initialize the member variables to their default values. More... | |
virtual | ~oIterativeAlgorithm () |
oIterativeAlgorithm destructor. More... | |
int | Iterate () |
Just call either the IterateCPU or the IterateGPU function as asked for. More... | |
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. More... | |
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. More... | |
void | SetSaveSubsetImageFlag (bool a_saveImageAfterSubsets) |
Set the flag that specifies if the image has to be saved for each subset. More... | |
void | SetOptimizerManager (oOptimizerManager *ap_OptimizerManager) |
Set the Optimizer Manager Object. More... | |
void | SetImageDimensionsAndQuantification (oImageDimensionsAndQuantification *ap_ImageDimensionsAndQuantification) |
Set the Image Dimensions and Quantification Object. More... | |
void | SetImageSpace (oImageSpace *ap_ImageSpace) |
Set the Image Space Object. More... | |
void | SetProjectorManager (oProjectorManager *ap_ProjectorManager) |
Set the Projector Manager Object. More... | |
void | SetImageConvolverManager (oImageConvolverManager *ap_ImageConvolverManager) |
Set the Image Convolver Manager Object. More... | |
void | SetImageProcessingManager (oImageProcessingManager *ap_ImageProcessingManager) |
Set the Image Processing Manager Object. More... | |
void | SetDynamicModelManager (oDynamicModelManager *ap_DynamicModelManager) |
Set the Dynamic Model Manager Object. More... | |
void | SetDeformationManager (oDeformationManager *ap_DeformationManager) |
Set the Deformation Manager Object. More... | |
void | SetDataFile (vDataFile **a2p_DataFile) |
Set the list of DataFile. More... | |
void | SetGPUflag (bool a_flagGPU) |
Set the GPU flag. More... | |
void | SetVerbose (int a_verboseLevel) |
Set Verbosity. More... | |
void | SetNbBeds (int a_nbBeds) |
Set number of beds (bed positions) More... | |
void | SetPathInitImage (string a_pathToInitialImage) |
Set path to an initial image. More... | |
void | SetPathToAttenuationImage (string a_pathToAttenuationImage) |
This function is used to set the path to the attenuation image. More... | |
void | SetPathToSensitivityImage (string a_pathToSensitivityImage) |
Set path to the sensitivity image. More... | |
void | SetPathToMultiModalImage (vector< string > a_pathToMultiModalImage) |
Set path to multimodal images. More... | |
void | SetPathToMaskImage (string a_pathToMaskImage) |
Set path to a mask image. More... | |
int | SetNbIterationsAndSubsets (const string &a_nbIterationsSubsets) |
Set the number of iterations and subsets. More... | |
int | SetOutputIterations (const string &a_outputIterations) |
Set the selected output iterations. More... | |
virtual int | InitSpecificOptions (string a_specificOptions) |
Set the selected output iterations. More... | |
Protected Member Functions | |
virtual int | StepBeforeIterationLoop () |
This function is called at the beginning of the IterateCPU function. More... | |
virtual int | StepAfterIterationLoop () |
This function is called at the end of the IterateCPU function. More... | |
virtual int | StepBeforeSubsetLoop (int a_iteration) |
This function is called before starting the subset loop. More... | |
virtual int | StepAfterSubsetLoop (int a_iteration) |
This function is called after finishing the subset loop. More... | |
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. More... | |
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. More... | |
void | ThreadBarrierIncrement () |
Increment (thread safe) the m_nbThreadsWaiting variable. More... | |
bool | ThreadBarrierFlag () |
Check if the m_releaseThreads boolean is enabled or not. More... | |
bool | ThreadBarrierCheck () |
Check if all the threads are currently in waiting condition. More... | |
void | ThreadBarrierSetOff () |
Disable the thread locking variable (thread safe), and reset the number of waiting threads to 0. More... | |
void | ThreadBarrierSetOn () |
Enable the thread locking variable (thread safe), and reset the number of waiting threads to 0. More... | |
Protected Attributes | |
int | m_nbIterations |
int * | mp_nbSubsets |
bool * | mp_outputIterations |
int | m_verbose |
bool | m_flagGPU |
oImageDimensionsAndQuantification * | mp_ID |
vDataFile ** | m2p_DataFile |
oProjectorManager * | mp_ProjectorManager |
oOptimizerManager * | mp_OptimizerManager |
oDeformationManager * | mp_DeformationManager |
oDynamicModelManager * | mp_DynamicModelManager |
oImageSpace * | mp_ImageSpace |
oImageConvolverManager * | mp_ImageConvolverManager |
oImageProcessingManager * | mp_ImageProcessingManager |
int | m_nbBeds |
string | m_pathToInitialImg |
string | m_pathToAtnImg |
string | m_pathToSensitivityImg |
vector< string > | m_pathToMultiModalImg |
string | m_pathToMaskImg |
bool | m_saveSensitivityHistoFlag |
bool | m_saveImageAfterSubsets |
bool | m_generalizedImplementation |
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 53 of file oIterativeAlgorithm.hh.
oIterativeAlgorithm::oIterativeAlgorithm | ( | ) |
oIterativeAlgorithm constructor. Initialize the member variables to their default values.
Definition at line 46 of file oIterativeAlgorithm.cc.
|
virtual |
oIterativeAlgorithm destructor.
Definition at line 81 of file oIterativeAlgorithm.cc.
|
virtual |
Set the selected output iterations.
a_specificOptions |
Not Implemented yet
Definition at line 1036 of file oIterativeAlgorithm.cc.
int oIterativeAlgorithm::Iterate | ( | ) |
Just call either the IterateCPU or the IterateGPU function as asked for.
Definition at line 262 of file oIterativeAlgorithm.cc.
int oIterativeAlgorithm::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.
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()
Definition at line 301 of file oIterativeAlgorithm.cc.
|
inline |
Set the list of DataFile.
a2p_DataFile |
Definition at line 178 of file oIterativeAlgorithm.hh.
|
inline |
Set the Deformation Manager Object.
ap_DeformationManager |
Definition at line 172 of file oIterativeAlgorithm.hh.
|
inline |
Set the Dynamic Model Manager Object.
ap_DynamicModelManager |
Definition at line 166 of file oIterativeAlgorithm.hh.
|
inline |
Set the GPU flag.
a_flagGPU |
Definition at line 184 of file oIterativeAlgorithm.hh.
|
inline |
Set the Image Convolver Manager Object.
ap_ImageConvolverManager |
Definition at line 154 of file oIterativeAlgorithm.hh.
|
inline |
Set the Image Dimensions and Quantification Object.
ap_ImageDimensionsAndQuantification |
Definition at line 136 of file oIterativeAlgorithm.hh.
|
inline |
Set the Image Processing Manager Object.
ap_ImageProcessingManager |
Definition at line 160 of file oIterativeAlgorithm.hh.
|
inline |
Set the Image Space Object.
ap_ImageSpace |
Definition at line 142 of file oIterativeAlgorithm.hh.
|
inline |
Set number of beds (bed positions)
a_nbBeds |
Definition at line 196 of file oIterativeAlgorithm.hh.
int oIterativeAlgorithm::SetNbIterationsAndSubsets | ( | const string & | a_nbIterationsSubsets | ) |
Set the number of iterations and subsets.
a_nbIterationsSubsets |
The provided string is a list of iteration:subset pairs separated by commas.
Definition at line 226 of file oIterativeAlgorithm.hh.
|
inline |
Set the Optimizer Manager Object.
ap_OptimizerManager |
Definition at line 130 of file oIterativeAlgorithm.hh.
int oIterativeAlgorithm::SetOutputIterations | ( | const string & | a_outputIterations | ) |
Set the selected output iterations.
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.
Definition at line 169 of file oIterativeAlgorithm.cc.
|
inline |
Set path to an initial image.
a_pathToInitialImage |
Definition at line 202 of file oIterativeAlgorithm.hh.
|
inline |
This function is used to set the path to the attenuation image.
string | a_pathToAttenuationImage |
Definition at line 208 of file oIterativeAlgorithm.hh.
|
inline |
Set path to a mask image.
a_pathToMaskImage |
Definition at line 226 of file oIterativeAlgorithm.hh.
|
inline |
Set path to multimodal images.
a_pathToMultiModalImage |
Definition at line 220 of file oIterativeAlgorithm.hh.
|
inline |
Set path to the sensitivity image.
a_pathToSensitivityImage |
Definition at line 214 of file oIterativeAlgorithm.hh.
|
inline |
Set the Projector Manager Object.
ap_ProjectorManager |
Definition at line 148 of file oIterativeAlgorithm.hh.
|
inline |
Set the flag that specifies if the sensitivity image in histogram mode has to be saved for each subset/iteration.
bool | a_saveSensitivityHistoFlag |
Definition at line 118 of file oIterativeAlgorithm.hh.
|
inline |
Set the flag that specifies if the image has to be saved for each subset.
bool | a_saveImageAfterSubsets |
Definition at line 124 of file oIterativeAlgorithm.hh.
|
inline |
Set Verbosity.
a_verboseLevel |
Definition at line 190 of file oIterativeAlgorithm.hh.
|
protectedvirtual |
This function is called at the end of the IterateCPU function.
Free Memory for the imageSpace and some managers
Definition at line 1006 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
This function is called after finishing the subset loop.
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
Definition at line 935 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
This function is called at the beginning of the IterateCPU function.
Initialization and memory allocation for the imageSpace and some managers
Definition at line 430 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
This function is called before starting the subset loop.
a_iteration | : iteration index |
Definition at line 495 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
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.
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)
Definition at line 579 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
Definition at line 802 of file oIterativeAlgorithm.cc.
|
protectedvirtual |
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.
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)
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
Definition at line 519 of file oIterativeAlgorithm.cc.
|
protected |
Check if all the threads are currently in waiting condition.
Definition at line 1099 of file oIterativeAlgorithm.cc.
|
protected |
Check if the m_releaseThreads boolean is enabled or not.
Definition at line 1079 of file oIterativeAlgorithm.cc.
|
protected |
Increment (thread safe) the m_nbThreadsWaiting variable.
Definition at line 1058 of file oIterativeAlgorithm.cc.
|
protected |
Disable the thread locking variable (thread safe), and reset the number of waiting threads to 0.
Definition at line 1117 of file oIterativeAlgorithm.cc.
|
protected |
Enable the thread locking variable (thread safe), and reset the number of waiting threads to 0.
Definition at line 1137 of file oIterativeAlgorithm.cc.
|
protected |
Pointer to the array of vDataFile object
Definition at line 386 of file oIterativeAlgorithm.hh.
|
protected |
Do we use GPU or not (default=false)
Definition at line 384 of file oIterativeAlgorithm.hh.
|
protected |
No purpose yet. For upcoming features
Definition at line 402 of file oIterativeAlgorithm.hh.
|
protected |
number of bed FOVs (1 datafile by bed) (default=-1)
Definition at line 394 of file oIterativeAlgorithm.hh.
|
protected |
Number of iterations (default=1)
Definition at line 380 of file oIterativeAlgorithm.hh.
|
protected |
String of the path to the attenuation images
Definition at line 396 of file oIterativeAlgorithm.hh.
|
protected |
String containing the path to an initialization image
Definition at line 395 of file oIterativeAlgorithm.hh.
|
protected |
String containing the path to a mask image
Definition at line 399 of file oIterativeAlgorithm.hh.
|
protected |
String vector containing paths to multimodal images
Definition at line 398 of file oIterativeAlgorithm.hh.
|
protected |
String containing the path to a sensitivity image
Definition at line 397 of file oIterativeAlgorithm.hh.
|
protected |
Flag specifying that the image has to be saved after each subset
Definition at line 401 of file oIterativeAlgorithm.hh.
|
protected |
Flag specifying that the sensitivity image has to be saved for each subset/iteration in histogram mode
Definition at line 400 of file oIterativeAlgorithm.hh.
|
protected |
Verbosity (default=-1)
Definition at line 383 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Deformation Manager object
Definition at line 389 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Dynamic Model Manager object
Definition at line 390 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the oImageDimensionsAndQuantification object
Definition at line 385 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Image Convolver Manager object
Definition at line 392 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Image Processing Manager object
Definition at line 393 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Image Space object
Definition at line 391 of file oIterativeAlgorithm.hh.
|
protected |
Number of subsets (default=1)
Definition at line 381 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Optimizer Manager object
Definition at line 388 of file oIterativeAlgorithm.hh.
|
protected |
A boolean for each iteration saying if we save it or not
Definition at line 382 of file oIterativeAlgorithm.hh.
|
protected |
Pointer to the Projector Manager object
Definition at line 387 of file oIterativeAlgorithm.hh.