![]() |
CASToR
1.0
Tomographic Reconstruction (PET/SPECT)
|
00001 00008 #ifndef OITERATIVEALGORITHM_HH 00009 #define OITERATIVEALGORITHM_HH 1 00010 00011 #include "gVariables.hh" 00012 #include "oImageDimensionsAndQuantification.hh" 00013 #include "oProjectorManager.hh" 00014 #include "oImageConvolverManager.hh" 00015 #include "oImageProcessingManager.hh" 00016 #include "oOptimizerManager.hh" 00017 #include "oDeformationManager.hh" 00018 #include "oDynamicModelManager.hh" 00019 #include "oImageSpace.hh" 00020 #include "vDataFile.hh" 00021 00022 00023 00024 00030 class oIterativeAlgorithm 00031 { 00032 // Constructor & Destructor 00033 public: 00039 oIterativeAlgorithm(); 00044 virtual ~oIterativeAlgorithm(); 00045 00046 00047 00048 // ------------------------------------------------------------------- 00049 // Public member functions 00050 public: 00056 int Iterate(); 00078 int IterateCPU(); 00079 #ifdef CASTOR_GPU 00080 00088 int IterateGPU(); 00089 #endif 00090 00095 inline void SetSaveSensitivityHistoFlag(bool a_saveSensitivityHistoFlag) {m_saveSensitivityHistoFlag = a_saveSensitivityHistoFlag;} 00101 inline void SetSaveSubsetImageFlag(bool a_saveImageAfterSubsets) {m_saveImageAfterSubsets = a_saveImageAfterSubsets;} 00107 inline void SetOptimizerManager(oOptimizerManager* ap_OptimizerManager) {mp_OptimizerManager = ap_OptimizerManager;} 00113 inline void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification* ap_ImageDimensionsAndQuantification) {mp_ID = ap_ImageDimensionsAndQuantification;}; 00119 inline void SetImageSpace(oImageSpace* ap_ImageSpace) {mp_ImageSpace = ap_ImageSpace;}; 00125 inline void SetProjectorManager(oProjectorManager* ap_ProjectorManager) {mp_ProjectorManager = ap_ProjectorManager;}; 00131 inline void SetImageConvolverManager(oImageConvolverManager* ap_ImageConvolverManager) {mp_ImageConvolverManager = ap_ImageConvolverManager;} 00137 inline void SetImageProcessingManager(oImageProcessingManager* ap_ImageProcessingManager) {mp_ImageProcessingManager = ap_ImageProcessingManager;} 00143 inline void SetDynamicModelManager(oDynamicModelManager* ap_DynamicModelManager) {mp_DynamicModelManager = ap_DynamicModelManager;} 00149 inline void SetDeformationManager(oDeformationManager* ap_DeformationManager) {mp_DeformationManager = ap_DeformationManager;} 00155 inline void SetDataFile(vDataFile** a2p_DataFile) {m2p_DataFile = a2p_DataFile;}; 00161 inline void SetGPUflag(bool a_flagGPU) {m_flagGPU = a_flagGPU;}; 00167 inline void SetVerbose(int a_verboseLevel) {m_verbose = a_verboseLevel;}; 00173 inline void SetNbBeds(int a_nbBeds) {m_nbBeds = a_nbBeds;}; 00179 inline void SetPathInitImage(string a_pathToInitialImage) {m_pathToInitialImg = a_pathToInitialImage;}; 00185 inline void SetPathToAttenuationImage(string a_pathToAttenuationImage) {m_pathToAtnImg = a_pathToAttenuationImage;}; 00191 inline void SetPathToSensitivityImage(string a_pathToSensitivityImage) {m_pathToSensitivityImg = a_pathToSensitivityImage;}; 00197 inline void SetPathToAnatomicalImage(string a_pathToAnatomicalImage) {m_pathToAnatomicalImg = a_pathToAnatomicalImage;}; 00203 inline void SetPathToMaskImage(string a_pathToMaskImage) {m_pathToMaskImg = a_pathToMaskImage;}; 00212 int SetNbIterationsAndSubsets(const string& a_nbIterationsSubsets); 00224 int SetOutputIterations(const string& a_outputIterations); 00232 virtual int InitSpecificOptions(string a_specificOptions); 00233 00234 00235 00236 // ------------------------------------------------------------------- 00237 // Protected member functions 00238 protected: 00246 virtual int StepBeforeIterationLoop(); 00254 virtual int StepAfterIterationLoop(); 00261 virtual int StepBeforeSubsetLoop(int a_iteration); 00272 virtual int StepAfterSubsetLoop(int a_iteration); 00286 virtual int StepPreProcessInsideSubsetLoop(int a_iteration, int a_subset); 00300 virtual int StepPostProcessInsideSubsetLoop(int a_iteration, int a_subset); 00316 virtual int StepInnerLoopInsideSubsetLoop(int a_iteration, int a_subset, int a_bed); 00317 00318 00319 00320 // ------------------------------------------------------------------- 00321 // ----- Functions related to OpenMP barrier ----- 00326 void ThreadBarrierIncrement(); 00332 bool ThreadBarrierFlag(); 00338 bool ThreadBarrierCheck(); 00344 void ThreadBarrierSetOff(); 00350 void ThreadBarrierSetOn(); 00351 00352 00353 00354 // ------------------------------------------------------------------- 00355 // Data members 00356 protected: 00357 int m_nbIterations; 00358 int* mp_nbSubsets; 00359 bool* mp_outputIterations; 00360 int m_verbose; 00361 bool m_flagGPU; 00362 oImageDimensionsAndQuantification* mp_ID; 00363 vDataFile** m2p_DataFile; 00364 oProjectorManager* mp_ProjectorManager; 00365 oOptimizerManager* mp_OptimizerManager; 00366 oDeformationManager* mp_DeformationManager; 00367 oDynamicModelManager* mp_DynamicModelManager; 00368 oImageSpace* mp_ImageSpace; 00369 oImageConvolverManager* mp_ImageConvolverManager; 00370 oImageProcessingManager* mp_ImageProcessingManager; 00371 int m_nbBeds; 00372 string m_pathToInitialImg; 00373 string m_pathToAtnImg; 00374 string m_pathToSensitivityImg; 00375 string m_pathToAnatomicalImg; 00376 string m_pathToMaskImg; 00377 bool m_saveSensitivityHistoFlag; 00378 bool m_saveImageAfterSubsets; 00379 bool m_generalizedImplementation; 00380 }; 00381 00382 #endif 00383 00384 00385 00386 00387 00388 00389 00390 00391 00392 00393 00394 00395