- // ROOT
- #include "TFile.h"
-
- // Local
- #include "TbRawFile.h"
-
- //=============================================================================
- // Standard constructor
- //=============================================================================
- TbRawFile::TbRawFile(const std::string& filename,
- TbHeaderDecoder* headerDecoder)
- : TbBufferedFile(filename, 0) {
-
- if (!is_open()) {
- m_good = false;
- return;
- }
- const size_t pos = m_filename.find(".dat");
- const size_t dash = m_filename.find_last_of("-");
-
- if (pos == std::string::npos) {
- m_good = false;
- return;
- }
-
- if (!(pos - dash > 1)) {
- m_good = false;
- return;
- }
- m_split_index = atoi(m_filename.substr(dash + 1, pos - dash - 1).c_str());
- if (m_split_index == 1) initialise();
- m_good = true;
-
- char header[16];
- m_file->ReadBuffer(header, 0, 16);
- unsigned int format = 0;
- headerDecoder->readCommon(header, m_headerSize, format);
-
- char* devHeader = new char[m_headerSize];
- m_file->ReadBuffer(devHeader, 0, m_headerSize);
-
- if (!headerDecoder->read(devHeader, format, m_id)) {
- m_good = false;
- return;
- }
- m_file->Seek(m_headerSize);
- m_size = m_file->GetSize();
- m_nPackets = (m_size - m_headerSize) / 8;
- m_bytesRead = m_headerSize;
- m_good = true;
- }