![]() |
CASToR
1.0
Tomographic Reconstruction (PET/SPECT)
|
00001 00008 #ifndef ISCANNERPET_HH 00009 #define ISCANNERPET_HH 1 00010 00011 #include "gVariables.hh" 00012 #include "vScanner.hh" 00013 #include "sAddonManager.hh" 00014 00015 00021 class iScannerPET : public vScanner 00022 { 00023 // Constructor & Destructor 00024 public: 00029 iScannerPET(); 00030 00034 ~iScannerPET(); 00035 00036 00037 // ------------------------------------------------------------------- 00038 // Public member functions 00039 public: 00040 // Function for automatic insertion (put the class name as the parameters and do not add semi-colon at the end of the line) 00041 FUNCTION_SCANNER(iScannerPET) 00051 int Instantiate(bool a_scannerFileIsLUT); 00057 int CheckParameters(); 00063 int Initialize(); 00072 int BuildLUT(bool a_scannerFileIsLUT); 00090 int GetPositionsAndOrientations( int a_index1, int a_index2, 00091 FLTNB ap_Position1[3], FLTNB ap_Position2[3], 00092 FLTNB ap_Orientation1[3], FLTNB ap_Orientation2[3], 00093 FLTNB* ap_POI1 = NULL, FLTNB* ap_POI2 = NULL ); 00112 int GetRdmPositionsAndOrientations( int a_index1, int a_index2, 00113 FLTNB ap_Position1[3], FLTNB ap_Position2[3], 00114 FLTNB ap_Orientation1[3], FLTNB ap_Orientation2[3] ); 00125 int GetPositionWithRandomDepth( int a_index1, int a_index2, FLTNB ap_Position1[3], FLTNB ap_Position2[3] ); 00138 int GetTwoCorners( int a_index1, int a_index2, 00139 FLTNB ap_CornerInf1[3], FLTNB ap_CornerSup1[3], 00140 FLTNB ap_CornerInf2[3], FLTNB ap_CornerSup2[3] ); 00145 inline int GetSystemNbElts() 00146 {return m_nbCrystals;}; 00154 inline int GetScannerLayerNbRings(int a_layer) 00155 {return (a_layer<m_nbLayers) ? mp_nbRings[a_layer] : -1;} 00170 int IsAvailableLOR(int a_elt1, int a_elt2); 00177 int GetGeometricInfoFromDatafile(string a_pathToDataFilename); 00183 inline int SetPETMaxRingDiff(int a_maxRingDiff) 00184 {m_maxRingDiff = a_maxRingDiff; return 0;} 00190 void ShowHelp(); 00191 00192 00193 // ------------------------------------------------------------------- 00194 // Functions dedicated to Analytic Projection 00202 int PROJ_GetPETSpecificParameters(int* ap_maxRingDiff); 00203 00204 00205 // ------------------------------------------------------------------- 00206 // Private member functions 00207 private: 00215 int LoadLUT(); 00225 int ComputeLUT(); 00232 int GetLayer(int a_idx); 00243 int GetRingID(int a_idx); 00244 00245 00246 // ------------------------------------------------------------------- 00247 // Data members 00248 private: 00249 int m_nbLayers; 00250 int m_nbCrystals; 00251 int* mp_nbRings; 00252 int* mp_nbCrystalsInLayer; 00254 FLTNB* mp_crystalCentralPositionX; 00255 FLTNB* mp_crystalCentralPositionY; 00256 FLTNB* mp_crystalCentralPositionZ; 00258 FLTNB* mp_crystalOrientationX; 00259 FLTNB* mp_crystalOrientationY; 00260 FLTNB* mp_crystalOrientationZ; 00262 FLTNB* mp_sizeCrystalTrans; 00263 FLTNB* mp_sizeCrystalAxial; 00264 FLTNB* mp_sizeCrystalDepth; 00265 FLTNB* mp_meanDepthOfInteraction; 00267 FLTNB m_minAngleDifference; 00269 int m_maxRingDiff; 00270 }; 00271 00272 00273 // Class for automatic insertion (set here the visible scanner type name, put the class name as the parameters and do not add semi-colon at the end of the line) 00274 CLASS_SCANNER(PET,iScannerPET) 00275 00276 #endif