CASToR  1.0
Tomographic Reconstruction (PET/SPECT)
vDataFile.hh
Go to the documentation of this file.
00001 
00009 #ifndef VDATAFILE_HH
00010 #define VDATAFILE_HH 1
00011 
00012 #include "gVariables.hh"
00013 #include "vEvent.hh"
00014 #include "iEventPET.hh"
00015 #include "iEventListPET.hh"
00016 #include "iEventHistoPET.hh"
00017 #include "iEventSPECT.hh"
00018 #include "iEventTransmission.hh"
00019 #include "iEventNorm.hh"
00020 #include "sOutputManager.hh"
00021 #include "sScannerManager.hh"
00022 #include "oImageDimensionsAndQuantification.hh"
00023 
00030 #define MODE_UNKNOWN -1
00031 
00032 #define MODE_LIST 0
00033 
00034 #define MODE_HISTOGRAM 1
00035 
00036 #define MODE_NORMALIZATION 2
00037 
00045 #define TYPE_UNKNOWN -1
00046 
00047 #define TYPE_PET 0
00048 
00049 #define TYPE_SPECT 1
00050 
00051 #define TYPE_TRANSMISSION 2
00052 
00063 class vDataFile
00064 {
00065   // -------------------------------------------------------------------
00066   // Constructor & Destructor
00067   public:
00072     vDataFile ();
00076     virtual ~vDataFile();
00077 
00078   // -------------------------------------------------------------------
00079   // Public member functions
00080   public:
00087     int ReadInfoInHeader();
00094     int CheckParameters();
00101     int InitializeFile();
00108     virtual int ComputeSizeEvent() = 0;
00116     virtual int PrepareDataFile() = 0;
00123     void ResetBufferRange();
00131     int FillBuffer(int64_t a_eventIndex);
00144     vEvent* GetEventWithAscendingOrderAssumption(int64_t a_eventIndex, int64_t a_eventIndexLimit, int a_th);
00157     vEvent* GetEventWithoutOrderAssumption(int64_t a_eventIndex, int a_th);
00165     vEvent* GetEventFromFile(int64_t a_eventIndex, int a_th);
00174     virtual vEvent* GetEventFromBuffer(char* ap_buffer, int a_th) = 0;
00183     void GetEventIndexStartAndStop(int64_t* ap_indexStart, int64_t* ap_indexStop, int a_subsetNum, int a_NbSubsets);
00184 
00185   // -------------------------------------------------------------------
00186   // Functions dedicated to analytical projections
00187   public:
00194     virtual int PROJ_InitFile() = 0;
00202     virtual int PROJ_GetScannerSpecificParameters() = 0;
00211     virtual int PROJ_WriteEvent(vEvent* ap_Event, int a_th) = 0;
00212     
00213 
00220     virtual int PROJ_WriteHeader() = 0;
00221 
00222 
00223 
00224 
00231     int PROJ_WriteData();
00238     int PROJ_DeleteTmpDatafile();
00248     vEvent* PROJ_GenerateEvent(int idx_elt1, int idx_elt2, int a_th);
00249 
00250   // -------------------------------------------------------------------
00251   // Public Get & Set FUNCTIONS
00252   public:
00257     inline int GetBedIndex()
00258            {return m_bedIndex;}
00263     inline int GetDataMode()
00264            {return m_dataMode;}
00269     inline int GetDataType()
00270            {return m_dataType;}
00275     int64_t GetSize()
00276          {return m_totalNbEvents;};
00281     inline string GetHeaderDataFileName()
00282            {return m_headerFileName;};
00287     inline string GetDataFileName()
00288            {return m_dataFileName;};
00293     inline int64_t GetStartTime()
00294            {return m_startTimeInSec;};
00299     inline int64_t GetDuration()
00300            {return m_durationInSec;};
00305     inline FLTNB GetCalibrationFactor()
00306            {return m_calibrationFactor;}
00311     inline FLTNB* GetResolutionPOI()
00312            {return mp_POIResolution;}
00317     inline bool GetPOIInfoFlag()
00318            {return m_POIInfoFlag;}
00323     inline bool GetIgnorePOIFlag()
00324            {return m_ignorePOIFlag;}
00331     virtual int GetMaxRingDiff();
00337     inline void SetDataMode(int a_dataMode)
00338            {m_dataMode = a_dataMode;}
00344     inline void SetDataType(int a_dataType)
00345            {m_dataType = a_dataType;}
00351     inline void SetBedIndex(int a_bedIndex)
00352            {m_bedIndex = a_bedIndex;}
00358     inline void SetPercentageLoad(int a_percentageLoad)
00359            {m_percentageLoad = a_percentageLoad;}
00365     inline int GetPercentageLoad()
00366            {return m_percentageLoad;}
00372     inline void SetVerbose(int a_verboseLevel)
00373            {m_verbose = a_verboseLevel;}
00379     inline int GetVerbose()
00380            {return m_verbose;}
00386     inline void SetImageDimensionsAndQuantification(oImageDimensionsAndQuantification* ap_ImageDimensionsAndQuantification)
00387            {mp_ID = ap_ImageDimensionsAndQuantification;}
00394     inline void SetPOIResolution(FLTNB ap_value[3])
00395            {for (int i=0 ; i<3 ; i++) mp_POIResolution[i] = ap_value[i];} 
00401     inline void SetIgnorePOIFlag(bool a_ignorePOIFlag)
00402            {m_ignorePOIFlag = a_ignorePOIFlag;}
00408     inline void SetHeaderDataFileName(const string& a_headerFileName)
00409            {m_headerFileName = a_headerFileName;}
00416     inline void SetCalibrationFactor(FLTNB a_value)
00417            {m_calibrationFactor = a_value;} 
00424     inline void SetNbEvents(int64_t a_value)
00425            {m_totalNbEvents = a_value;} 
00432     inline void SetStartTime(FLTNB a_value)
00433            {m_startTimeInSec = a_value;} 
00440     inline void SetDuration(FLTNB a_value)
00441            {m_durationInSec = a_value;} 
00442 
00443   // -------------------------------------------------------------------
00444   // Private member functions
00445   private:
00452     virtual int CheckSpecificParameters() = 0;
00459     virtual int CheckFileSizeConsistency() = 0;
00466     virtual int ReadSpecificInfoInHeader() = 0;
00467     
00468     
00469     virtual int Shuffle( int64_t );
00470 
00471     
00472   // -------------------------------------------------------------------
00473   // Data members
00474   protected:
00475     oImageDimensionsAndQuantification* mp_ID; 
00476     int m_verbose;                            
00478     // Variables related to the acquisition
00479     fstream** m2p_dataFile;                   
00480     string m_headerFileName;                  
00481     string m_dataFileName;                    
00482     int64_t m_totalNbEvents;                  
00483     int m_dataMode;                           
00484     int m_dataType;                           
00485     FLTNB m_startTimeInSec;                   
00486     FLTNB m_durationInSec;                    
00487     FLTNB m_calibrationFactor;                
00488     int m_bedIndex;                           
00489     int64_t m_sizeEvent;                      
00490     string m_scannerName;                     
00492     // POI: Position Of Interaction
00493     bool m_POIInfoFlag;                       
00494     bool m_ignorePOIFlag;                     
00495     bool mp_POIDirectionFlag[3];              
00496     FLTNB mp_POIResolution[3];                
00498     // Variable related to Buffer/Container arrays
00499     vEvent** m2p_BufferEvent;                 
00500     char* mp_arrayEvents;                     
00501     char** m2p_bufferEventFromFile;           
00502     int64_t m_mpi1stEvent;                    
00503     int64_t m_mpiLastEvent;                   
00504     int64_t m_mpiNbEvents;                    
00505     int64_t m_1stIdxArrayEvents;              
00506     int64_t m_lastIdxArrayEvents;             
00507     int64_t m_sizeArrayEvents;                
00508     int m_percentageLoad;                     
00509     bool m_requestBufferFilling;              
00510     bool m_currentlyFillingBuffer;            
00511     bool* mp_currentlyReadingBuffer;          
00512     bool* mp_overBufferRange;                
00513     int64_t* mp_nbEventsReadFromFile;         
00514 };
00515 
00516 #endif
 All Classes Files Functions Variables Typedefs Defines