BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MucConverter.cxx
Go to the documentation of this file.
1#include "RawDataCnv/Util/MucConverter.h"
2
3MucConverter* MucConverter::s_instance = 0;
4
5MucConverter* MucConverter::instance() {
6 if ( s_instance == 0 ) { s_instance = new MucConverter(); }
7
8 return s_instance;
9}
10
12 if ( s_instance != 0 )
13 {
14 delete s_instance;
15 s_instance = 0;
16 }
17}
18
19StatusCode MucConverter::convert( const BufferHolder& src, MucDigiCol* des ) {
20 uint32_t REId, TEId, FecData, StrSqc;
21 uint32_t nbuf = src.nBuf();
22
23 for ( uint32_t i = 0; i < nbuf; ++i )
24 {
25 uint32_t* buf = src( i );
26 uint32_t bufSize = src.bufSize( i );
27 for ( uint32_t j = 0; j < bufSize; ++j )
28 {
29 m_builder.unPack( buf[j], REId, FecData, StrSqc );
30 TEId = m_builder.getTEID( REId );
31 if ( TEId == 0xFFFFFFFF ) continue;
32
33 uint32_t teidBase = TEId & 0xFF0FFFFF;
34 uint32_t teid;
35 for ( uint32_t k = 0; FecData != 0 && k < 16; FecData >>= 1, ++k )
36 {
37 if ( ( FecData & 1 ) == 0 ) continue;
38 if ( StrSqc == 0 ) { teid = teidBase + 15 - k; }
39 else { teid = teidBase + k; }
40 MucDigi* mucDigi = new MucDigi( teid );
41 des->push_back( mucDigi );
42 }
43 }
44 }
45
46 return StatusCode::SUCCESS;
47}
48
50 return m_builder.pack( src, des );
51}
52
53MucConverter::MucConverter() {}
54
55MucConverter::~MucConverter() {}
eformat::write::FullEventFragment WriteRawEvent
static MucConverter * instance()
static void destroy()
StatusCode convert(const BufferHolder &src, MucDigiCol *des)