BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RawEventReader.cxx
Go to the documentation of this file.
1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/IDataProviderSvc.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/MsgStream.h"
5
6#include "IRawFile/RawFileExceptions.h"
7#include "RawDataCnv/EventManagement/RAWEVENT.h"
8#include "RawDataCnv/SniperJSON.h"
9#include "RawDataCnv/Util/EmcConverter.h"
10#include "RawDataCnv/Util/MdcConverter.h"
11#include "RawDataCnv/Util/MucConverter.h"
12#include "RawDataCnv/Util/TofConverter.h"
13
14#include "RawEvent/DigiEvent.h"
15#include "RawFile/RawFileReader.h"
16
17#include "RawEventReader.h"
18
19/////////////////////////////////////////////////////////////////////////////
21RawEventReader::RawEventReader( const std::string& name, ISvcLocator* pSvcLocator )
22 : Algorithm( name, pSvcLocator ) {
23
24 declareProperty( "MdcDigi", m_mdcdigi = 1 );
25 declareProperty( "TofDigi", m_tofdigi = 1 );
26 declareProperty( "EmcDigi", m_emcdigi = 1 );
27 declareProperty( "MucDigi", m_mucdigi = 1 );
28 declareProperty( "InputFiles", m_inputFiles );
29 declareProperty( "RawDataReviseConfFile", m_rawReviseConfig );
30}
31
38
39// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
41
42 MsgStream log( msgSvc(), name() );
43 log << MSG::INFO << "in initialize()" << endmsg;
44
45 m_mdcCnv = MdcConverter::instance();
46 m_tofCnv = TofConverter::instance();
47 m_emcCnv = EmcConverter::instance();
48 m_mucCnv = MucConverter::instance();
49
50 m_raw_event = new RAWEVENT;
51
52 std::ifstream conff( m_rawReviseConfig.c_str() );
53 m_mdcCnv->init( SniperJSON::load( conff )["MDCID_FIX"] );
54
55 ISvcLocator* svcLocator = Gaudi::svcLocator();
56 StatusCode sc = svcLocator->service( "EventDataSvc", m_evtSvc );
57 if ( sc.isFailure() ) std::cout << "Could not accesss EventDataSvc!" << std::endl;
58
59 return StatusCode::SUCCESS;
60}
61
62// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
64
65 MsgStream log( msgSvc(), name() );
66 log << MSG::INFO << "in execute()" << endmsg;
67
68 DigiEvent* aDigiEvent = new DigiEvent;
69 StatusCode sc = m_evtSvc->registerObject( "/Event/Digi", aDigiEvent );
70 if ( sc != StatusCode::SUCCESS )
71 { std::cout << "Could not register DigiEvent" << std::endl; }
72
73 readEvent().ignore();
74
75 if ( m_mdcdigi )
76 {
77 const BufferHolder& mdcBuf = m_raw_event->getMdcBuf();
78
79 MdcDigiCol* mdcDigiCol = new MdcDigiCol;
80 m_mdcCnv->convert( mdcBuf, mdcDigiCol ).ignore();
81 /*MdcDigiCol::const_iterator mdcDigi = mdcDigiCol->begin();
82 for(; mdcDigi!=mdcDigiCol->end(); mdcDigi++ )
83 {
84 (*mdcDigi)->getTrackIndex();
85 std::cout<<"mdc digi: "<< " trackIndex: "<<(*mdcDigi)->getTrackIndex()<<std::endl;
86 }*/
87 // register MdcDigiCol to TDS...
88 StatusCode scMdc = m_evtSvc->registerObject( "/Event/Digi/MdcDigiCol", mdcDigiCol );
89 if ( scMdc != StatusCode::SUCCESS )
90 { std::cout << "Could not register MDC digi collection" << std::endl; }
91 }
92
93 if ( m_tofdigi )
94 {
95 const BufferHolder& tofBuf = m_raw_event->getTofBuf();
96 const BufferHolder& etfBuf = m_raw_event->getEtfBuf();
97
98 TofDigiCol* tofDigiCol = new TofDigiCol;
99 // m_tofCnv->convert(tofBuf, tofDigiCol);
100 m_tofCnv->convert( tofBuf, etfBuf, tofDigiCol ).ignore();
101
102 /*TofDigiCol::const_iterator tofDigi = tofDigiCol->begin();
103 for(; tofDigi!=tofDigiCol->end(); tofDigi++ )
104 {
105 (*tofDigi)->getTrackIndex();
106 const Identifier ident = (*tofDigi)->identify();
107 std::cout<<"print tof digi in RawEventReader"<<std::endl;
108 std::cout<<"partId: "<<TofID::barrel_ec(ident);
109 std::cout<<" layer: "<<TofID::layer(ident);
110 std::cout<<" scinNb: "<<TofID::phi_module(ident);
111 std::cout<<" end: "<<TofID::end(ident);
112 std::cout<<" charge: "<<(*tofDigi)->getChargeChannel();
113 std::cout<<" time: "<<(*tofDigi)->getTimeChannel()<<std::endl;
114 }*/
115
116 // register TofDigiCol to TDS...
117 StatusCode scTof = m_evtSvc->registerObject( "/Event/Digi/TofDigiCol", tofDigiCol );
118 if ( scTof != StatusCode::SUCCESS )
119 { std::cout << "Could not register TOF digi collection" << std::endl; }
120 }
121
122 if ( m_emcdigi )
123 {
124 const BufferHolder& emcBuf = m_raw_event->getEmcBuf();
125
126 EmcDigiCol* emcDigiCol = new EmcDigiCol;
127 m_emcCnv->convert( emcBuf, emcDigiCol ).ignore();
128 // register EmcDigiCol to TDS...
129 StatusCode scEmc = m_evtSvc->registerObject( "/Event/Digi/EmcDigiCol", emcDigiCol );
130 if ( scEmc != StatusCode::SUCCESS )
131 { std::cout << "Could not register EMC digi collection" << std::endl; }
132 }
133
134 if ( m_mucdigi )
135 {
136 const BufferHolder& mucBuf = m_raw_event->getMucBuf();
137
138 MucDigiCol* mucDigiCol = new MucDigiCol;
139 m_mucCnv->convert( mucBuf, mucDigiCol ).ignore();
140 // register MucDigiCol to TDS...
141 StatusCode scMuc = m_evtSvc->registerObject( "/Event/Digi/MucDigiCol", mucDigiCol );
142 if ( scMuc != StatusCode::SUCCESS )
143 { std::cout << "Could not register MUC digi collection" << std::endl; }
144 }
145 // clear the Memory Buffer, so that m_raw_event can be used directly during next event loop
146 m_raw_event->reset();
147
148 return StatusCode::SUCCESS;
149}
150
152 static RawFileReader* fileReader = new RawFileReader( m_inputFiles );
153 const uint32_t* fragment = nullptr;
154
155 try
156 { fragment = fileReader->nextEvent(); } catch ( RawFileException& ex )
157 { ex.print(); } catch ( ... )
158 { std::cerr << std::endl << "Uncaught unknown exception" << std::endl; }
159
160 RawEvent f( fragment );
161 uint32_t* robs[64];
162 int nrobs = eformat::get_robs( fragment, (const uint32_t**)robs, 64 );
163 for ( int robi = 0; robi < nrobs; robi++ )
164 {
165 eformat::ROBFragment<uint32_t*> rob( robs[robi] );
166 if ( ( rob.rod_detev_type() & 0x2 ) != 0 ) continue; // bad data caogf add
167 uint32_t* dataptr = NULL;
168 rob.rod_data( dataptr );
169 uint32_t source_id_number = rob.rod_source_id();
170 source_id_number <<= 8;
171 source_id_number >>= 24;
172 switch ( source_id_number )
173 {
174 case 161: m_raw_event->addReMdcDigi( dataptr, rob.rod_ndata() ); break;
175 case 163: m_raw_event->addReEmcDigi( dataptr, rob.rod_ndata() ); break;
176 case 162: m_raw_event->addReTofDigi( dataptr, rob.rod_ndata() ); break;
177 case 164: m_raw_event->addReMucDigi( dataptr, rob.rod_ndata() ); break;
178 case 167: m_raw_event->addReEtfDigi( dataptr, rob.rod_ndata() ); break;
179 }
180 }
181 return StatusCode::SUCCESS;
182}
183// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
185
186 MsgStream log( msgSvc(), name() );
187 log << MSG::INFO << "in finalize()" << endmsg;
188
189 // TODO: release ...
190 delete m_raw_event;
191 // delete fileReader;
192
193 return StatusCode::SUCCESS;
194}
DECLARE_COMPONENT(BesBdkRc)
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
ObjectVector< EmcDigi > EmcDigiCol
eformat::FullEventFragment< const uint32_t * > RawEvent
IMessageSvc * msgSvc()
static EmcConverter * instance(int runMode=2)
static void destroy()
static MdcConverter * instance(int runMode=2)
static void destroy()
static MucConverter * instance()
static void destroy()
virtual ~RawEventReader()
RawEventReader(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize()
StatusCode finalize()
StatusCode execute()
StatusCode readEvent()
virtual void print() const
const uint32_t * nextEvent()
static SniperJSON load(std::istream &is)
static void destroy()
static TofConverter * instance()
size_t get_robs(const uint32_t *fragment, const uint32_t **rob, size_t max_count)
Definition util.cxx:104