CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
oIterativeAlgorithm.hh
Go to the documentation of this file.
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 
 All Classes Files Functions Variables Typedefs Defines