BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RawDataMdcDigiCnv.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "Gaudi/Interfaces/IOptionsSvc.h"
4#include "GaudiKernel/Parsers.h"
5
6#include "MdcRawEvent/MdcDigi.h"
7#include "RawDataCnv/Util/MdcConverter.h"
8
9#include "RawDataBaseCnv.h"
10
11extern const CLID& CLID_MdcDigiCol;
12
14
15private:
16 MdcConverter* m_cnv;
17
18 int m_runFrom;
19 int m_runTo;
20
21public:
22 RawDataMdcDigiCnv( ISvcLocator* svc ) : RawDataBaseCnv( svc, classID() ) {}
24
25 StatusCode initialize() override {
26 MsgStream log( msgSvc(), "RawDataMdcDigiCnv" );
27 log << MSG::INFO << "RawDataMdcDigiCnv::initialize()" << endmsg;
28
30 if ( sc.isFailure() )
31 {
32 log << MSG::ERROR << "Failed to initialize RawDataBaseCnv" << endmsg;
33 return sc;
34 }
35
36 auto jobSvc = serviceLocator()->service<Gaudi::Interfaces::IOptionsSvc>( "JobOptionsSvc" );
37 Gaudi::Parsers::parse( m_runFrom, jobSvc->get( "RawDataMdcDigiCnv.ExWireFromRun", "0" ) );
38 Gaudi::Parsers::parse( m_runTo, jobSvc->get( "RawDataMdcDigiCnv.ExWireToRun", "999999" ) );
39
40 m_cnv = MdcConverter::instance( m_inputSvc->runMode() );
41 m_cnv->init( m_inputSvc->config( "MDCID_FIX" ) );
42
43 return StatusCode::SUCCESS;
44 }
45
46 static const CLID& classID() { return CLID_MdcDigiCol; }
47
48 StatusCode createObj( IOpaqueAddress* pAddr, DataObject*& pObj ) {
49 // MsgStream log(msgSvc(), "RawDataMdcDigiCnv");
50
51 // Purpose and Method: This converter will create an empty MdcDigiCol on
52 // the TDS.
53 MdcDigiCol* digiCol = new MdcDigiCol;
54 pObj = digiCol;
55
56 RAWEVENT* evt = m_inputSvc->currentEvent();
57
58 if ( evt == NULL )
59 {
60 // log << MSG::ERROR << "RawDataMdcDigiCnv::createObj has event!" << endmsg;
61 return StatusCode::FAILURE;
62 }
63
64 int runId = evt->eventHeader().run_number();
65 m_cnv->setRunId( runId );
66
67 const BufferHolder& mdcBuf = evt->getMdcBuf();
68
69 return m_cnv->convert( mdcBuf, digiCol );
70 }
71
72 StatusCode createRep( DataObject* pObj, IOpaqueAddress*& pAddr ) {
73 // convert PixelRaw in the container into ByteStream
74 MsgStream log( msgSvc(), "RawDataMdcDigiCnv" );
75
76 WriteRawEvent*& re = m_cnvSvc->getRawEvent();
77 if ( re == 0 )
78 {
79 log << " get RawEvent failed !" << endmsg;
80 return StatusCode::FAILURE;
81 }
82
83 SmartDataPtr<MdcDigiCol> digiCol( dataProvider(), EventModel::Digi::MdcDigiCol );
84 if ( digiCol == 0 )
85 {
86 log << "no MdcDigiCol found" << endmsg;
87 return StatusCode::FAILURE;
88 }
89
90 return m_cnv->convert( digiCol, re );
91 }
92};
const CLID & CLID_MdcDigiCol
eformat::write::FullEventFragment WriteRawEvent
const CLID & CLID_MdcDigiCol
IMessageSvc * msgSvc()
static MdcConverter * instance(int runMode=2)
static void destroy()
IRawDataCnvSvc * m_cnvSvc
IRawDataInputSvc * m_inputSvc
RawDataBaseCnv(long storageType, const CLID &clid, ISvcLocator *svc)
StatusCode initialize()
StatusCode createObj(IOpaqueAddress *pAddr, DataObject *&pObj)
StatusCode initialize() override
StatusCode createRep(DataObject *pObj, IOpaqueAddress *&pAddr)
static const CLID & classID()
RawDataMdcDigiCnv(ISvcLocator *svc)