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