BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RawDataMining.cxx
Go to the documentation of this file.
1#include "RawFile/RawDataMining.h"
2#include "IRawFile/RawFileExceptions.h"
3
4RawDataMining::RawDataMining( const std::string& filename )
5 : m_fname(filename)
6{
7 m_ifstream = new raw_ifstream( std::vector<std::string>{ filename } );
8 m_cache = new RawDataCache(512*1024);
9
10 auto p = m_ifstream->tellg();
11 m_ifstream->seekg( -sizeof( FileEndRecord ), std::ios::end );
12 *m_ifstream >> m_fileEndRecord;
13 m_ifstream->seekg( p );
14}
15
16RawDataMining::~RawDataMining() { delete m_ifstream; }
17
19{
20 try {
21 *m_ifstream >> m_dataSeparatorRecord;
22 }
23 catch ( ReachEndOfFile& e ) {
24 //makeEndRecord(m_dataSeparatorRecord, *m_ifstream, m_fileEndRecord);
25 m_eof = true;
26 return nullptr;
27 }
28 catch ( ... ) {
29 std::cerr << "Error: invalid data in file " << m_fname << std::endl;
30 return nullptr;
31 }
32
33 uint32_t size = m_dataSeparatorRecord.getRecord().data_block_size;
34 if ( size > m_cache->capacity() ) {
35 uint32_t _capacity = m_cache->capacity();
36 do {
37 _capacity *= 2;
38 } while ( size > _capacity );
39 m_cache->reserve<char>(_capacity);
40 }
41
42 uint32_t* dptr = m_cache->data<uint32_t>();
43
44 m_ifstream->read(reinterpret_cast<char*>(dptr), size);
45
46 if ( dptr[0] != 0xaa1234aa ) {
47 std::cerr << "Error: wrong event marker" << std::endl;
48 dptr = nullptr;
49 }
50
51 return dptr;
52}
53
55 m_ifstream->fileStartRecord().dump();
56 m_ifstream->fileNameStrings().dump();
57 m_ifstream->runParametersRecord().dump();
58 //m_dataSeparatorRecord.dump();
59 m_fileEndRecord.dump();
60}
uint32_t * nextEvent()
RawDataMining()=delete