Newer
Older
TB_Chris / TbIO / src / .svn / text-base / TbRawFile.cpp.svn-base
  1. // ROOT
  2. #include "TFile.h"
  3.  
  4. // Local
  5. #include "TbRawFile.h"
  6.  
  7. //=============================================================================
  8. // Standard constructor
  9. //=============================================================================
  10. TbRawFile::TbRawFile(const std::string& filename,
  11. TbHeaderDecoder* headerDecoder)
  12. : TbBufferedFile(filename, 0) {
  13.  
  14. if (!is_open()) {
  15. m_good = false;
  16. return;
  17. }
  18. const size_t pos = m_filename.find(".dat");
  19. const size_t dash = m_filename.find_last_of("-");
  20.  
  21. if (pos == std::string::npos) {
  22. m_good = false;
  23. return;
  24. }
  25.  
  26. if (!(pos - dash > 1)) {
  27. m_good = false;
  28. return;
  29. }
  30. m_split_index = atoi(m_filename.substr(dash + 1, pos - dash - 1).c_str());
  31. if (m_split_index == 1) initialise();
  32. m_good = true;
  33.  
  34. char header[16];
  35. m_file->ReadBuffer(header, 0, 16);
  36. unsigned int format = 0;
  37. headerDecoder->readCommon(header, m_headerSize, format);
  38.  
  39. char* devHeader = new char[m_headerSize];
  40. m_file->ReadBuffer(devHeader, 0, m_headerSize);
  41.  
  42. if (!headerDecoder->read(devHeader, format, m_id)) {
  43. m_good = false;
  44. return;
  45. }
  46. m_file->Seek(m_headerSize);
  47. m_size = m_file->GetSize();
  48. m_nPackets = (m_size - m_headerSize) / 8;
  49. m_bytesRead = m_headerSize;
  50. m_good = true;
  51. }