CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
oImageDimensionsAndQuantification.hh
Go to the documentation of this file.
00001 
00009 #ifndef OIMAGEDIMENSIONSANDQUANTIFICATION_HH
00010 #define OIMAGEDIMENSIONSANDQUANTIFICATION_HH 1
00011 
00012 #include "gVariables.hh"
00013 #include "sOutputManager.hh"
00014 #include "gOptions.hh"
00015 #include "oDynamicDataManager.hh"
00016 
00017 
00025 class oImageDimensionsAndQuantification
00026 {
00027   // -----------------------------------------------------------------------------------------
00028   // Constructor & Destructor
00029   public:
00036     oImageDimensionsAndQuantification();
00043     ~oImageDimensionsAndQuantification();
00044 
00045 
00046   // -----------------------------------------------------------------------------------------
00047   // Public member functions
00048   public:
00056     int CheckParameters();
00066     int Initialize();
00067 
00068 
00069   // -----------------------------------------------------------------------------------------
00070   // Private member functions
00071   private:
00079     int InitializeFramingAndQuantification();
00088     int InitializeTimeBasisFunctions();
00097     int InitializeRespBasisFunctions();
00106     int InitializeCardBasisFunctions();
00115     int InitializeIgnoredCorrections();
00116 
00117 
00118   // -----------------------------------------------------------------------------------------
00119   // Public dynamic data management functions
00120   public:
00125     inline void ResetCurrentDynamicIndices()
00126            {mp_DynamicDataManager->ResetCurrentDynamicIndices();}
00139     int InitDynamicData( string a_pathTo4DDataSplittingFile,
00140                          int a_respMotionCorrectionFlag, int a_cardMotionCorrectionFlag, int a_invMotionCorrectionFlag,
00141                          int a_nbRespGates, int a_nbCardGates );
00148     int CheckDynamicParameters(int64_t a_nbEvents);
00158     inline int DynamicSwitch( int64_t a_currentEventIndex, uint32_t a_currentTime, int a_bed, int a_th )
00159            {return mp_DynamicDataManager->DynamicSwitch(a_currentEventIndex, a_currentTime, a_bed, a_th);}
00160 
00161 
00162   // -----------------------------------------------------------------------------------------
00163   // Public Get & Set functions related to the dynamic data management
00164   public:
00169     inline void SetRespMotionFlagOn()
00170            {mp_DynamicDataManager->SetRespMotionFlagOn();}
00175     inline void SetCardMotionFlagOn()
00176            {mp_DynamicDataManager->SetCardMotionFlagOn();}
00181     inline void SetPMotionFlagOn()
00182            {mp_DynamicDataManager->SetPMotionFlagOn();}   
00189     inline int GetCurrentRespGate(int a_th)
00190            {return mp_DynamicDataManager->GetCurrentRespGate(a_th);}
00197     inline int GetCurrentCardGate(int a_th)
00198            {return mp_DynamicDataManager->GetCurrentCardGate(a_th);}
00204     inline int GetSensNbRespGates()
00205            {return mp_DynamicDataManager->GetSensNbRespGates();}
00211     inline int GetSensNbCardGates()
00212            {return mp_DynamicDataManager->GetSensNbCardGates();}
00219     inline int GetCurrentRespImage(int a_th)
00220            {return mp_DynamicDataManager->GetCurrentRespImage(a_th);}
00227     inline int GetCurrentCardImage(int a_th)
00228            {return mp_DynamicDataManager->GetCurrentCardImage(a_th);}
00235     inline int GetCurrentTimeFrame(int a_th)
00236            {return mp_DynamicDataManager->GetCurrentTimeFrame(a_th);}
00243     inline int GetCurrentPMotionIndex(int a_th)
00244            {return mp_DynamicDataManager->GetCurrentPMotionIndex(a_th);}
00245 
00246 
00247   // -----------------------------------------------------------------------------------------
00248   // Get & Set functions
00249   public:
00255     inline void SetVerbose(int a_verbose)
00256            {m_verbose = a_verbose;}
00262     inline int GetNbThreadsForProjection()
00263            {return m_nbThreadsForProjection;}
00269     inline int GetNbThreadsForImageComputation()
00270            {return m_nbThreadsForImageComputation;}
00276     inline int GetNbThreadsMax()
00277            { if (m_nbThreadsForProjection>m_nbThreadsForImageComputation) return m_nbThreadsForProjection;
00278              else return m_nbThreadsForImageComputation; }
00287     int SetNbThreads(const string& a_nbThreads);
00294     inline void SetMPIRankAndSize(int a_mpiRank, int a_mpiSize)
00295            {m_mpiRank = a_mpiRank; m_mpiSize = a_mpiSize;}
00301     inline int GetMPISize()
00302            {return m_mpiSize;}
00308     inline int GetMPIRank()
00309            {return m_mpiRank;}
00315     inline int GetNbBeds()
00316            {return m_nbBeds;}
00322     inline void SetNbBeds(int a_nbBeds)
00323            {m_nbBeds = a_nbBeds;}
00329     inline int GetNbTimeFrames()
00330            {return m_nbTimeFrames;}
00336     inline int GetNbTimeBasisFunctions()
00337            {return m_nbTimeBasisFunctions;}
00345     inline FLTNB GetTimeBasisCoefficient(int a_timeBasisFunction, int a_timeFrame)
00346            {return m2p_timeBasisFunctions[a_timeBasisFunction][a_timeFrame];}
00354     inline FLTNB GetFrameDurationInSec(int a_bed, int a_frame)
00355            {return ((FLTNB)(m2p_frameDurationsInMs[a_bed][a_frame]))/1000.;}
00363     inline FLTNB GetFrameTimeStartInSec(int a_bed, int a_frame)
00364            {return ((FLTNB)(m2p_frameTimeStartInMs[a_bed][a_frame]))/1000.;}
00372     inline FLTNB GetFrameTimeStopInSec(int a_bed, int a_frame)
00373            {return ((FLTNB)(m2p_frameTimeStopInMs[a_bed][a_frame]))/1000.;}
00380     inline FLTNB GetFinalTimeStopInSec(int a_bed)
00381            {return ((FLTNB)(m2p_frameTimeStopInMs[a_bed][m_nbTimeFrames-1]))/1000.;}
00389     inline uint32_t GetFrameDurationInMs(int a_bed, int a_frame)
00390            {return m2p_frameDurationsInMs[a_bed][a_frame];}
00398     inline uint32_t GetFrameTimeStartInMs(int a_bed, int a_frame)
00399            {return m2p_frameTimeStartInMs[a_bed][a_frame];}
00407     inline uint32_t GetFrameTimeStopInMs(int a_bed, int a_frame)
00408            {return m2p_frameTimeStopInMs[a_bed][a_frame];}
00415     inline uint32_t GetFinalTimeStopInMs(int a_bed)
00416            {return m2p_frameTimeStopInMs[a_bed][m_nbTimeFrames-1];}
00422     inline void SetFrames(const string& a_frameList)
00423            {m_frameList = a_frameList;}
00429     inline void SetNbTimeBasisFunctions(int a_nbTimeBasisFunctions)
00430            {m_nbTimeBasisFunctions = a_nbTimeBasisFunctions;}
00436     inline void SetTimeBasisFunctionsFile(const string& a_timeBasisFunctionsFile)
00437            {m_timeBasisFunctionsFile = a_timeBasisFunctionsFile;}
00447     int SetAcquisitionTime(int a_bed, FLTNB a_timeStartInSec, FLTNB a_durationInSec);
00453     inline bool GetTimeStaticFlag()
00454            {return m_timeStaticFlag;}
00460     inline int GetNbRespGates()
00461            {return m_nbRespGates;}
00467     inline int GetNbRespBasisFunctions()
00468            {return m_nbRespBasisFunctions;}
00476     inline FLTNB GetRespBasisCoefficient(int a_respBasisFunction, int a_respGate)
00477            {return m2p_respBasisFunctions[a_respBasisFunction][a_respGate];}
00483     inline void SetNbRespGates(int a_nbRespGates)
00484            {m_nbRespGates = a_nbRespGates;}
00490     inline void SetNbRespBasisFunctions(int a_nbRespBasisFunctions)
00491            {m_nbRespBasisFunctions = a_nbRespBasisFunctions;}
00497     inline void SetRespBasisFunctionsFile(const string& a_respBasisFunctionsFile)
00498            {m_respBasisFunctionsFile = a_respBasisFunctionsFile;}
00504     inline bool GetRespStaticFlag()
00505            {return m_respStaticFlag;}
00511     inline int GetNbCardGates()
00512            {return m_nbCardGates;}
00518     inline int GetNbCardBasisFunctions()
00519            {return m_nbCardBasisFunctions;}
00527     inline FLTNB GetCardBasisCoefficient(int a_cardBasisFunction, int a_cardGate)
00528            {return m2p_cardBasisFunctions[a_cardBasisFunction][a_cardGate];}
00534     inline void SetNbCardGates(int a_nbCardGates)
00535            {m_nbCardGates = a_nbCardGates;}
00541     inline void SetNbCardBasisFunctions(int a_nbCardBasisFunctions)
00542            {m_nbCardBasisFunctions = a_nbCardBasisFunctions;}
00548     inline void SetCardBasisFunctionsFile(const string& a_cardBasisFunctionsFile)
00549            {m_cardBasisFunctionsFile = a_cardBasisFunctionsFile;}
00555     inline bool GetCardStaticFlag()
00556            {return m_cardStaticFlag;}
00562     inline INTNB GetNbVoxX()
00563            {return m_nbVoxX;}
00569     inline INTNB GetNbVoxY()
00570            {return m_nbVoxY;}
00576     inline INTNB GetNbVoxZ()
00577            {return m_nbVoxZ;}
00583     inline INTNB GetNbVoxXY()
00584            {return m_nbVoxXY;}
00590     inline INTNB GetNbVoxXYZ()
00591            {return m_nbVoxXYZ;}
00597     inline INTNB GetNbVoxDiagonal()
00598            { return ((INTNB)(sqrt( ((FLTNB)m_nbVoxX) * ((FLTNB)m_nbVoxX) +
00599                                    ((FLTNB)m_nbVoxY) * ((FLTNB)m_nbVoxY) +
00600                                    ((FLTNB)m_nbVoxZ) * ((FLTNB)m_nbVoxZ) ))); }
00606     inline void SetNbVoxX(INTNB a_nbVoxX)
00607            {m_nbVoxX = a_nbVoxX;}
00613     inline void SetNbVoxY(INTNB a_nbVoxY)
00614            {m_nbVoxY = a_nbVoxY;}
00620     inline void SetNbVoxZ(INTNB a_nbVoxZ)
00621            {m_nbVoxZ = a_nbVoxZ;}
00627     inline FLTNB GetVoxSizeX()
00628            {return m_voxSizeX;}
00634     inline FLTNB GetVoxSizeY()
00635            {return m_voxSizeY;}
00641     inline FLTNB GetVoxSizeZ()
00642            {return m_voxSizeZ;}
00648     inline FLTNB GetFOVSizeX()
00649            {return m_fovSizeX;}
00655     inline FLTNB GetFOVSizeY()
00656            {return m_fovSizeY;}
00662     inline FLTNB GetFOVSizeZ()
00663            {return m_fovSizeZ;}
00669     inline void SetVoxSizeX(FLTNB a_voxSizeX)
00670            {m_voxSizeX = a_voxSizeX;}
00676     inline void SetVoxSizeY(FLTNB a_voxSizeY)
00677            {m_voxSizeY = a_voxSizeY;}
00683     inline void SetVoxSizeZ(FLTNB a_voxSizeZ)
00684            {m_voxSizeZ = a_voxSizeZ;}
00690     inline void SetFOVSizeX(FLTNB a_fovSizeX)
00691            {m_fovSizeX = a_fovSizeX;}
00697     inline void SetFOVSizeY(FLTNB a_fovSizeY)
00698            {m_fovSizeY = a_fovSizeY;}
00704     inline void SetFOVSizeZ(FLTNB a_fovSizeZ)
00705            {m_fovSizeZ = a_fovSizeZ;}
00712     inline void SetFOVOutMasking(FLTNB a_fovOutPercent, INTNB a_nbSliceOutMask)
00713            {m_fovOutPercent = a_fovOutPercent; m_nbSliceOutMask = a_nbSliceOutMask;}
00719     inline FLTNB GetFOVOutPercent()
00720            {return m_fovOutPercent;}
00726     inline INTNB GetNbSliceOutMask()
00727            {return m_nbSliceOutMask;}
00734     int SetFlipOut(const string& a_flipOut);
00740     inline bool GetFlipOutX()
00741            {return m_flipOutX;}
00747     inline bool GetFlipOutY()
00748            {return m_flipOutY;}
00754     inline bool GetFlipOutZ()
00755            {return m_flipOutZ;}
00761     inline FLTNB GetOffsetX()
00762            {return m_offsetX;}
00768     inline FLTNB GetOffsetY()
00769            {return m_offsetY;}
00775     inline FLTNB GetOffsetZ()
00776            {return m_offsetZ;}
00782     inline void SetOffsetX(FLTNB a_offsetX)
00783            {m_offsetX = a_offsetX;}
00789     inline void SetOffsetY(FLTNB a_offsetY)
00790            {m_offsetY = a_offsetY;}
00796     inline void SetOffsetZ(FLTNB a_offsetZ)
00797            {m_offsetZ = a_offsetZ;}
00806     FLTNB GetQuantificationFactor(int a_bed, int a_frame, int a_respGate, int a_cardGate);
00815     int SetCalibrationFactor(int a_bed, FLTNB a_calibrationFactor);
00824     int SetPETIsotope(int a_bed, const string& a_isotope);
00833     int SetSPECTIsotope(int a_bed, const string& a_isotope);
00841     int SetDynamicSpecificQuantificationFactors(const string& a_quantificationFile);
00847     inline void SetIgnoredCorrections(const string& a_ignoredCorrectionsList)
00848            {m_ignoredCorrectionsList = a_ignoredCorrectionsList;}
00854     inline bool GetIgnoreAttnCorrectionFlag()
00855            {return m_ignoreAttnCorrectionFlag;}
00861     inline bool GetIgnoreNormCorrectionFlag()
00862            {return m_ignoreNormCorrectionFlag;}
00868     inline bool GetIgnoreScatCorrectionFlag()
00869            {return m_ignoreScatCorrectionFlag;}
00875     inline bool GetIgnoreRandCorrectionFlag()
00876            {return m_ignoreRandCorrectionFlag;}
00882     inline bool GetIgnoreDecaCorrectionFlag()
00883            {return m_ignoreDecaCorrectionFlag;}
00889     inline bool GetIgnoreBratCorrectionFlag()
00890            {return m_ignoreBratCorrectionFlag;}
00896     inline bool GetIgnoreFdurCorrectionFlag()
00897            {return m_ignoreFdurCorrectionFlag;}
00903     inline bool GetIgnoreCaliCorrectionFlag()
00904            {return m_ignoreCaliCorrectionFlag;}
00905 
00906 
00907   // -----------------------------------------------------------------------------------------
00908   // Data members
00909   private:
00910     oDynamicDataManager* mp_DynamicDataManager; 
00911     // Number of threads
00912     int m_nbThreadsForProjection;       
00913     int m_nbThreadsForImageComputation; 
00914     // MPI size and rank
00915     int m_mpiRank;                      
00916     int m_mpiSize;                      
00917     // Number of beds
00918     int m_nbBeds;                       
00919     // Framing of the acquisition
00920     string m_frameList;                 
00921     int m_nbTimeBasisFunctions;         
00922     int m_nbTimeFrames;                 
00923     FLTNB** m2p_timeBasisFunctions;     
00924     uint32_t** m2p_frameDurationsInMs;  
00925     uint32_t** m2p_frameTimeStartInMs;  
00926     uint32_t** m2p_frameTimeStopInMs;   
00927     string m_timeBasisFunctionsFile;    
00928     bool m_timeStaticFlag;              
00929     // Quantification
00930     FLTNB*** m3p_quantificationFactors; 
00931     string m_ignoredCorrectionsList;    
00932     bool m_ignoreAttnCorrectionFlag;    
00933     bool m_ignoreNormCorrectionFlag;    
00934     bool m_ignoreRandCorrectionFlag;    
00935     bool m_ignoreScatCorrectionFlag;    
00936     bool m_ignoreDecaCorrectionFlag;    
00937     bool m_ignoreBratCorrectionFlag;    
00938     bool m_ignoreFdurCorrectionFlag;    
00939     bool m_ignoreCaliCorrectionFlag;    
00940     // Respiratory gating
00941     int m_nbRespBasisFunctions;         
00942     int m_nbRespGates;                  
00943     FLTNB** m2p_respBasisFunctions;     
00944     string m_respBasisFunctionsFile;    
00945     bool m_respStaticFlag;              
00946     // Cardiac gating
00947     int m_nbCardBasisFunctions;         
00948     int m_nbCardGates;                  
00949     FLTNB** m2p_cardBasisFunctions;     
00950     string m_cardBasisFunctionsFile;    
00951     bool m_cardStaticFlag;              
00952     // Image discretization
00953     INTNB m_nbVoxX;                    
00954     INTNB m_nbVoxY;                    
00955     INTNB m_nbVoxZ;                    
00956     INTNB m_nbVoxXY;                   
00957     INTNB m_nbVoxXYZ;                  
00958     FLTNB m_voxSizeX;                  
00959     FLTNB m_voxSizeY;                  
00960     FLTNB m_voxSizeZ;                  
00961     FLTNB m_fovSizeX;                  
00962     FLTNB m_fovSizeY;                  
00963     FLTNB m_fovSizeZ;                  
00964     FLTNB m_offsetX;                   
00965     FLTNB m_offsetY;                   
00966     FLTNB m_offsetZ;                   
00967     // Percentage of transaxial FOV unmasked before saving
00968     FLTNB m_fovOutPercent;             
00969     INTNB m_nbSliceOutMask;            
00970     // Output flip
00971     bool m_flipOutX;                   
00972     bool m_flipOutY;                   
00973     bool m_flipOutZ;                   
00974     // Parameters checked
00975     bool m_checked;                    
00976     // Object initialized
00977     bool m_initialized;                
00978     // Verbose
00979     int m_verbose;                     
00980 };
00981 
00982 #endif
 All Classes Files Functions Variables Typedefs Defines