BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RootRawEvtReader.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 "TBranch.h"
7#include "TFile.h"
8#include "TObjArray.h"
9#include "TTree.h"
10
11#include "RawEvent/DigiEvent.h" //TDS object
12
13// Digi
14#include "EmcRawEvent/EmcDigi.h"
15#include "MdcRawEvent/MdcDigi.h"
16#include "MucRawEvent/MucDigi.h"
17#include "TofRawEvent/TofDigi.h"
18
19#include "RootEventData/TEmcDigi.h"
20#include "RootEventData/TMdcDigi.h"
21#include "RootEventData/TMucDigi.h"
22#include "RootEventData/TTofDigi.h"
23
24#include "RootRawEvtReader.h"
25
26/////////////////////////////////////////////////////////////////////////////
28
29RootRawEvtReader::RootRawEvtReader( const std::string& name, ISvcLocator* pSvcLocator )
30 : Algorithm( name, pSvcLocator ) {
31
32 declareProperty( "MdcDigi", m_mdcDigi = 1 );
33 declareProperty( "TofDigi", m_tofDigi = 1 );
34 declareProperty( "EmcDigi", m_emcDigi = 1 );
35 declareProperty( "MucDigi", m_mucDigi = 1 );
36 declareProperty( "InputFiles", m_inputFiles );
37
38 m_totalEvents = 0;
39 m_fileNumber = 0;
40 m_tempNumber = -1;
41 m_currentEntries = -1;
42 m_currentEntry = -1;
43}
44
46
47// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
49
50 MsgStream log( msgSvc(), name() );
51 log << MSG::INFO << "in initialize()" << endmsg;
52
53 ISvcLocator* svcLocator = Gaudi::svcLocator();
54 StatusCode sc = svcLocator->service( "EventDataSvc", m_evtSvc );
55 if ( sc.isFailure() ) std::cout << "Could not accesss EventDataSvc!" << std::endl;
56
57 return StatusCode::SUCCESS;
58}
59
60// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
62
63 MsgStream log( msgSvc(), name() );
64 log << MSG::INFO << "in execute()" << endmsg;
65
66 DigiEvent* aDigiEvent = new DigiEvent;
67 StatusCode sc = m_evtSvc->registerObject( "/Event/Digi", aDigiEvent );
68 if ( sc != StatusCode::SUCCESS )
69 { std::cout << "Could not register DigiEvent" << std::endl; }
70
71 if ( m_tempNumber != m_fileNumber )
72 {
73 m_currentEntry = 0;
74 TFile* m_input = TFile::Open( m_inputFiles[m_fileNumber].c_str(), "READ" );
75 std::cout << "input file: " << m_inputFiles[m_fileNumber].c_str() << std::endl;
76 m_tree = (TTree*)m_input->Get( "Event" );
77 m_tree->SetMakeClass( 1 );
78 m_currentEntries = (Int_t)m_tree->GetEntries();
79 std::cout << "m_currentEntries: " << m_currentEntries << std::endl;
80
81 m_tempNumber = m_fileNumber;
82 }
83
84 if ( m_mdcDigi ) readMdc( m_currentEntry ).ignore();
85
86 if ( m_tofDigi ) readTof( m_currentEntry ).ignore();
87
88 if ( m_emcDigi ) readEmc( m_currentEntry ).ignore();
89
90 if ( m_mucDigi ) readMuc( m_currentEntry ).ignore();
91
92 log << MSG::INFO << "current Entry: " << m_currentEntry << endmsg;
93 // std::cout << "current Entry: "<< m_currentEntry << std::endl;
94 m_currentEntry++;
95
96 if ( m_currentEntry == m_currentEntries ) { m_fileNumber++; }
97
98 m_totalEvents++;
99 log << MSG::INFO << "total events: " << m_totalEvents << endmsg;
100 // std::cout << "total events: "<< m_totalEvents << std::endl;
101
102 return StatusCode::SUCCESS;
103}
104
105// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
106StatusCode RootRawEvtReader::readMdc( int entry ) {
107 TBranch* branch = m_tree->GetBranch( "m_mdcDigiCol" );
108
109 TObjArray* mdcDigiCol;
110 branch->SetAddress( &mdcDigiCol );
111 mdcDigiCol = 0;
112
113 branch->GetEntry( entry );
114
115 // commonData m_common;
116
117 TIter mdcDigiIter( mdcDigiCol );
118 MdcDigiCol* mdcDigiTdsCol = new MdcDigiCol;
119 TMdcDigi* mdcDigiRoot = 0;
120
121 while ( ( mdcDigiRoot = (TMdcDigi*)mdcDigiIter.Next() ) )
122 {
123 unsigned int id = mdcDigiRoot->getIntId();
124 unsigned int time = mdcDigiRoot->getTimeChannel();
125 unsigned int charge = mdcDigiRoot->getChargeChannel();
126 unsigned int overflow = mdcDigiRoot->getOverflow();
127 int trackIndex = mdcDigiRoot->getTrackIndex();
128
129 MdcDigi* mdcDigiTds = new MdcDigi( id );
130 // m_common.m_rootMdcDigiMap[mdcDigiRoot] = mdcDigiTds;
131 mdcDigiTds->setTimeChannel( time );
132 mdcDigiTds->setChargeChannel( charge );
133 mdcDigiTds->setOverflow( overflow );
134 mdcDigiTds->setTrackIndex( trackIndex );
135 mdcDigiTdsCol->push_back( mdcDigiTds );
136 /*std::cout<<"trackID: "<<trackIndex;
137 std::cout<<" charge: "<<charge;
138 std::cout<<" time: "<<time<<std::endl;*/
139 }
140
141 // register MDC digits collection to TDS
142 StatusCode scMdc = m_evtSvc->registerObject( "/Event/Digi/MdcDigiCol", mdcDigiTdsCol );
143 if ( scMdc != StatusCode::SUCCESS )
144 std::cout << "Could not register MDC digi collection" << std::endl;
145
146 return StatusCode::SUCCESS;
147}
148
149StatusCode RootRawEvtReader::readTof( int entry ) {
150 TBranch* branch = m_tree->GetBranch( "m_tofDigiCol" );
151
152 TObjArray* tofDigiCol;
153 branch->SetAddress( &tofDigiCol );
154 tofDigiCol = 0;
155
156 branch->GetEntry( entry );
157
158 // commonData m_common;
159
160 TIter tofDigiIter( tofDigiCol );
161 TofDigiCol* tofDigiTdsCol = new TofDigiCol;
162 TTofDigi* tofDigiRoot = 0;
163
164 while ( ( tofDigiRoot = (TTofDigi*)tofDigiIter.Next() ) )
165 {
166 unsigned int id = tofDigiRoot->getIntId();
167 unsigned int time = tofDigiRoot->getTimeChannel();
168 unsigned int charge = tofDigiRoot->getChargeChannel();
169 unsigned int overflow = tofDigiRoot->getOverflow();
170 int trackIndex = tofDigiRoot->getTrackIndex();
171
172 TofDigi* tofDigiTds = new TofDigi( id );
173 // m_common.m_rootTofDigiMap[tofDigiRoot] = tofDigiTds;
174 tofDigiTds->setTimeChannel( time );
175 tofDigiTds->setChargeChannel( charge );
176 tofDigiTds->setOverflow( overflow );
177 tofDigiTds->setTrackIndex( trackIndex );
178 tofDigiTdsCol->push_back( tofDigiTds );
179 }
180
181 // register TOF digits collection to TDS
182 StatusCode scTof = m_evtSvc->registerObject( "/Event/Digi/TofDigiCol", tofDigiTdsCol );
183 if ( scTof != StatusCode::SUCCESS )
184 std::cout << "Could not register TOF digi collection" << std::endl;
185
186 return StatusCode::SUCCESS;
187}
188
189StatusCode RootRawEvtReader::readEmc( int entry ) {
190 TBranch* branch = m_tree->GetBranch( "m_emcDigiCol" );
191
192 TObjArray* emcDigiCol;
193 branch->SetAddress( &emcDigiCol );
194 emcDigiCol = 0;
195
196 branch->GetEntry( entry );
197
198 // commonData m_common;
199
200 TIter emcDigiIter( emcDigiCol );
201 EmcDigiCol* emcDigiTdsCol = new EmcDigiCol;
202 TEmcDigi* emcDigiRoot = 0;
203
204 while ( ( emcDigiRoot = (TEmcDigi*)emcDigiIter.Next() ) )
205 {
206 unsigned int id = emcDigiRoot->getIntId();
207 unsigned int time = emcDigiRoot->getTimeChannel();
208 unsigned int charge = emcDigiRoot->getChargeChannel();
209 unsigned int measure = emcDigiRoot->getMeasure();
210 int trackIndex = emcDigiRoot->getTrackIndex();
211
212 EmcDigi* emcDigiTds = new EmcDigi( id );
213 // m_common.m_rootEmcDigiMap[emcDigiRoot] = emcDigiTds;
214 emcDigiTds->setTimeChannel( time );
215 emcDigiTds->setChargeChannel( charge );
216 emcDigiTds->setMeasure( measure );
217 emcDigiTds->setTrackIndex( trackIndex );
218 emcDigiTdsCol->push_back( emcDigiTds );
219 }
220
221 // register EMC digits collection to TDS
222 StatusCode scEmc = m_evtSvc->registerObject( "/Event/Digi/EmcDigiCol", emcDigiTdsCol );
223 if ( scEmc != StatusCode::SUCCESS )
224 std::cout << "Could not register EMC digi collection" << std::endl;
225
226 return StatusCode::SUCCESS;
227}
228
229StatusCode RootRawEvtReader::readMuc( int entry ) {
230 TBranch* branch = m_tree->GetBranch( "m_mucDigiCol" );
231
232 TObjArray* mucDigiCol;
233 branch->SetAddress( &mucDigiCol );
234 mucDigiCol = 0;
235
236 branch->GetEntry( entry );
237
238 // commonData m_common;
239
240 TIter mucDigiIter( mucDigiCol );
241 MucDigiCol* mucDigiTdsCol = new MucDigiCol;
242 TMucDigi* mucDigiRoot = 0;
243
244 while ( ( mucDigiRoot = (TMucDigi*)mucDigiIter.Next() ) )
245 {
246 unsigned int id = mucDigiRoot->getIntId();
247 unsigned int time = mucDigiRoot->getTimeChannel();
248 unsigned int charge = mucDigiRoot->getChargeChannel();
249 int trackIndex = mucDigiRoot->getTrackIndex();
250
251 MucDigi* mucDigiTds = new MucDigi( id );
252 // m_common.m_rootMucDigiMap[mucDigiRoot] = mucDigiTds;
253 mucDigiTds->setTimeChannel( time );
254 mucDigiTds->setChargeChannel( charge );
255 mucDigiTds->setTrackIndex( trackIndex );
256 mucDigiTdsCol->push_back( mucDigiTds );
257 }
258
259 // register MUC digits collection to TDS
260 StatusCode scMuc = m_evtSvc->registerObject( "/Event/Digi/MucDigiCol", mucDigiTdsCol );
261 if ( scMuc != StatusCode::SUCCESS )
262 std::cout << "Could not register MUC digi collection" << std::endl;
263
264 return StatusCode::SUCCESS;
265}
266
267// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
269
270 MsgStream log( msgSvc(), name() );
271 log << MSG::INFO << "in finalize()" << endmsg;
272
273 return StatusCode::SUCCESS;
274}
DECLARE_COMPONENT(BesBdkRc)
Double_t time
ObjectVector< EmcDigi > EmcDigiCol
IMessageSvc * msgSvc()
void setMeasure(const unsigned int measure)
void setTrackIndex(const int trackIndex)
Definition RawData.cxx:29
void setChargeChannel(const unsigned int chargeChannel)
Definition RawData.cxx:24
void setTimeChannel(const unsigned int timeChannel)
Definition RawData.cxx:21
StatusCode initialize()
StatusCode readTof(int entry)
StatusCode readMuc(int entry)
StatusCode readEmc(int entry)
RootRawEvtReader(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode readMdc(int entry)
UInt_t getMeasure() const
Definition TEmcDigi.cxx:29
UInt_t getOverflow() const
Definition TMdcDigi.cxx:35
UInt_t getIntId() const
Definition TRawData.cxx:42
int getTrackIndex() const
Definition TRawData.cxx:39
UInt_t getChargeChannel() const
Definition TRawData.cxx:48
UInt_t getTimeChannel() const
Definition TRawData.cxx:45
UInt_t getOverflow() const
Definition TTofDigi.cxx:35