BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcConverter.cxx
Go to the documentation of this file.
1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/MsgStream.h"
3
4#include "RawDataCnv/Util/EmcConverter.h"
5#include "RawDataProviderSvc/IRawDataProviderSvc.h"
6
7EmcConverter* EmcConverter::s_instance = 0;
8
9EmcConverter* EmcConverter::instance( int runMode ) {
10 if ( s_instance == 0 ) { s_instance = new EmcConverter( runMode ); }
11
12 return s_instance;
13}
14
16 if ( s_instance != 0 )
17 {
18 delete s_instance;
19 s_instance = 0;
20 }
21}
22
23StatusCode EmcConverter::convert( const BufferHolder& src, EmcDigiCol* des ) {
24 uint32_t REId, TEId, TETDC, TEADC, measure;
25 uint32_t nbuf = src.nBuf();
26
27 for ( uint32_t i = 0; i < nbuf; ++i )
28 { // loop the buffer
29 uint32_t* buf = src( i );
30 uint32_t* bufend = buf + src.bufSize( i );
31 for ( ; buf < bufend; ++buf )
32 { // loop the digit
33
34 m_builder.unPack( *buf, REId, TETDC, TEADC, measure );
35
36 TEId = m_builder.getTEID( REId );
37 if ( TEId == 0xFFFFFFFF ) continue;
38
39 if ( m_EmcProvider )
40 {
41 // by fucd: if not good digi, reject. Only for online mode now
42 if ( !m_EmcProvider->isGoodEmcDigi( EmcRawDataProvider::DropLow |
45 TEId, measure, TEADC, TETDC ) )
46 continue;
47 Identifier id( TEId );
48 m_EmcProvider->doCalib( id, measure, TEADC );
49 }
50
51 // create and set the DataObject
52 EmcDigi* emcDigi = new EmcDigi( Identifier( TEId ), TETDC, TEADC );
53 emcDigi->setMeasure( measure );
54 des->push_back( emcDigi );
55 }
56 }
57
58 return StatusCode::SUCCESS;
59}
60
62 return m_builder.pack( src, des );
63}
64
65EmcConverter::EmcConverter( int runMode ) : m_runMode( runMode ), m_EmcProvider( 0 ) {
66 if ( m_runMode == 1 )
67 {
68 // by fucd: only when online mode, use raw data provider here
69 IService* svc;
70 StatusCode sc = Gaudi::svcLocator()->getService( "RawDataProviderSvc", svc );
71 // if ( sc.isFailure() ) {
72 // log << MSG::ERROR << "Cannot get Raw Data Provider Service!" << endmsg;
73 // }
74 IRawDataProviderSvc* rawSvc = dynamic_cast<IRawDataProviderSvc*>( svc );
75 if ( rawSvc != 0 ) { m_EmcProvider = rawSvc->getEmcProvider(); }
76 else { std::cerr << "Failed to get the RawDataProviderSvc" << std::endl; }
77 }
78}
79
80EmcConverter::~EmcConverter() {}
ObjectVector< EmcDigi > EmcDigiCol
eformat::write::FullEventFragment WriteRawEvent
static EmcConverter * instance(int runMode=2)
static void destroy()
StatusCode convert(const BufferHolder &src, EmcDigiCol *des)
void setMeasure(const unsigned int measure)
virtual EmcRawDataProvider * getEmcProvider()=0