CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
oDynamicDataManager.hh
Go to the documentation of this file.
00001 
00009 #ifndef ODYNAMICDATAMANAGER_HH
00010 #define ODYNAMICDATAMANAGER_HH 1
00011 
00012 #define DYNAMIC_SWITCH_NOTHING 0
00013 #define DYNAMIC_SWITCH_CONTINUE 1
00014 #define DYNAMIC_SWITCH_DEFORMATION 2
00015 
00016 #include "gVariables.hh"
00017 #include "gOptions.hh"
00018 #include "sOutputManager.hh"
00019 
00020 class oImageDimensionsAndQuantification;
00021 class vDataFile;
00022 
00023 
00024 
00025 
00033 class oDynamicDataManager
00034 {
00035   // -------------------------------------------------------------------
00036   // Constructor & Destructor
00037   public:
00042     oDynamicDataManager();
00046     ~oDynamicDataManager(); 
00047 
00048   // -------------------------------------------------------------------
00049   // Public member functions
00050   public:
00063     int InitDynamicData( int a_nbRespGates, int a_nbCardGates, const string& a_pathTo4DDataSplittingFile,
00064                          int a_rmMCorrFlag, int a_cMmCorrFlag, int a_pMotionCorrFlag );
00072     int SetDynamicSpecificQuantificationFactors(FLTNB** a2p_quantificationFactors);
00079     int CheckParameters(int64_t a_nbEvents);
00084     void ResetCurrentDynamicIndices();
00098     int DynamicSwitch(int64_t a_index, uint32_t a_time, int a_bed, int a_th);
00099     
00100   // -------------------------------------------------------------------
00101   // Public Get & Set functions
00102   public:
00108     inline void SetVerbose(int a_verboseLevel)
00109            {m_verbose = a_verboseLevel;};
00115     inline void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification* ap_ImageDimensionsAndQuantification)
00116            {mp_ID = ap_ImageDimensionsAndQuantification;};
00121     inline void SetRespMotionFlagOn()
00122            {m_rMotionCorrFlag = true;}
00127     inline void SetCardMotionFlagOn()
00128            {m_cMotionCorrFlag = true;} 
00133     inline void SetPMotionFlagOn()
00134            {m_pMotionCorrFlag = true;} 
00139     inline bool IsRespMotionEnabled()
00140            {return m_rMotionCorrFlag;}
00145     inline bool IsCardMotionEnabled()
00146            {return m_cMotionCorrFlag;}
00151     inline bool IsPMotionEnabled()
00152            {return m_pMotionCorrFlag;}
00159     inline int GetCurrentPMotionIndex(int a_th)
00160            {return mp_currentPMotionIndex[a_th] ;}
00167     inline int GetCurrentTimeFrame(int a_th)
00168            {return mp_currentFrameIndex[a_th];}
00175     inline int GetCurrentRespGate(int a_th)
00176            {return mp_currentRespGateIndex[a_th];}
00184     inline int GetCurrentRespImage(int a_th)
00185            {return m_rMotionCorrFlag ? 0 : mp_currentRespGateIndex[a_th];}
00192     inline int GetCurrentCardGate(int a_th)
00193            {return mp_currentCardGateIndex[a_th];}
00201     inline int GetCurrentCardImage(int a_th)
00202            {return m_cMotionCorrFlag ? 0 : mp_currentCardGateIndex[a_th];}
00208     inline int GetSensNbCardGates()
00209            {return m_nbCardGates;}
00215     inline int GetSensNbRespGates()
00216            {return m_nbRespGates;}
00217 
00218 
00219 
00220   // -------------------------------------------------------------------
00221   // Private member functions  
00222   private:
00230     int InitDynamicDataGating(const string& a_pathToGateFile);
00238     int InitDynamicDataPatientMotion(const string& a_pathToFile);
00239 
00240 
00241 
00242   // -------------------------------------------------------------------
00243   // Data members
00244   private:
00245     oImageDimensionsAndQuantification*  mp_ID; 
00246     int m_verbose;                             
00248     // Framing
00249     int* mp_currentFrameIndex;                 
00250     int m_nbTimeFrames;                        
00252     // Respiratory gating
00253     bool m_respGatingFlag;                     
00254     bool m_rMotionCorrFlag;                    
00255     int m_nbRespGates;                         
00256     int64_t** m2p_nbEventsPerRespGate;         
00257     int64_t** m2p_indexLastEventRespGate;      
00258     int* mp_currentRespGateIndex;              
00260     // Cardiac gating
00261     bool m_cardGatingFlag;                     
00262     bool m_cMotionCorrFlag;                    
00263     int m_nbCardGates;                         
00264     int64_t** m2p_nbEventsPerCardGate;         
00265     int64_t** m2p_indexLastEventCardGate;      
00266     int* mp_currentCardGateIndex;              
00268     // Involuntary motion
00269     bool m_pMotionCorrFlag;                    
00270     int m_nbPMotionTriggers;                   
00271     uint32_t* mp_listPMotionTriggers;          
00272     int* mp_currentPMotionIndex;               
00273 };
00274 #endif
 All Classes Files Functions Variables Typedefs Defines