![]() |
CASToR
1.0
Tomographic Reconstruction (PET/SPECT)
|
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