BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TofRecTDS.cxx
Go to the documentation of this file.
1#include "TofRecTDS.h"
2#include "GaudiKernel/Bootstrap.h"
3#include "GaudiKernel/IDataProviderSvc.h"
4#include "GaudiKernel/IMessageSvc.h"
5#include "GaudiKernel/ISvcLocator.h"
6#include "GaudiKernel/MsgStream.h"
7#include "GaudiKernel/SmartDataPtr.h"
8#include "GaudiKernel/StatusCode.h"
9#include "ReconEvent/ReconEvent.h"
10#include "TofRecEvent/RecBTofCalHit.h"
11#include "TofRecEvent/RecETofCalHit.h"
12#include "TofRecEvent/RecTofTrack.h"
13#include "TofTrack.h"
14
16 if ( RegisterReconEvent() == StatusCode::FAILURE ) return StatusCode::FAILURE;
17 if ( RegisterNullRecTofTrackCol() == StatusCode::FAILURE ) return StatusCode::FAILURE;
18 return StatusCode::SUCCESS;
19}
20
22 IMessageSvc* msgSvc;
23 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
24 MsgStream log( msgSvc, "TofRecTDS" );
25 log << MSG::INFO << "Initialize: TofRecTDS::RegisterNullRecTofTrack()" << endmsg;
26
27 IDataProviderSvc* eventSvc;
28 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
29
30 RecTofTrackCol* recTofTrackCol = new RecTofTrackCol;
31
32 // Check whether the RecTofTrackCol has been registered.
33 StatusCode sc;
34 DataObject* aRecTofTrackCol;
35 eventSvc->findObject( "/Event/Recon/RecTofTrackCol", aRecTofTrackCol );
36 if ( aRecTofTrackCol != NULL )
37 {
38 sc = eventSvc->unregisterObject( "/Event/Recon/RecTofTrackCol" );
39 if ( sc != StatusCode::SUCCESS )
40 {
41 log << MSG::FATAL << "Initialize: Could not unregister RecTofTrack collection!"
42 << endmsg;
43 delete recTofTrackCol;
44 return StatusCode::FAILURE;
45 }
46 }
47 delete aRecTofTrackCol;
48
49 sc = eventSvc->registerObject( "/Event/Recon/RecTofTrackCol", recTofTrackCol );
50 if ( sc != StatusCode::SUCCESS )
51 {
52 log << MSG::FATAL << "Initialize: TofRec could not register Null Rec TOF track collection!"
53 << endmsg;
54 delete recTofTrackCol;
55 return StatusCode::FAILURE;
56 }
57
58 return StatusCode::SUCCESS;
59}
60
61StatusCode TofRecTDS::RegisterTDS( int runNumber, int eventNumber,
62 std::vector<TofTrack*>*& tofTrackVec, bool forCalibration,
63 std::string calibData ) {
64 // if( RegisterReconEvent() == StatusCode::FAILURE ) return StatusCode::FAILURE;
65 if ( RegisterRecTofTrackCol( tofTrackVec ) == StatusCode::FAILURE )
66 return StatusCode::FAILURE;
67 if ( forCalibration )
68 {
69 if ( RegisterRecBTofCalHitCol( runNumber, eventNumber, tofTrackVec, calibData ) ==
70 StatusCode::FAILURE )
71 return StatusCode::FAILURE;
72 if ( RegisterRecETofCalHitCol( runNumber, eventNumber, tofTrackVec, calibData ) ==
73 StatusCode::FAILURE )
74 return StatusCode::FAILURE;
75 }
76 return StatusCode::SUCCESS;
77}
78
80 IMessageSvc* msgSvc;
81 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
82 MsgStream log( msgSvc, "TofRecTDS" );
83
84 IDataProviderSvc* eventSvc;
85 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
86
87 // Register Reconstructed Track To TDS
88 DataObject* aReconEvent;
89 eventSvc->findObject( "/Event/Recon", aReconEvent );
90 if ( aReconEvent == NULL )
91 {
92 log << MSG::INFO << "TofRecTDS::RegisterReconEvent()" << endmsg;
93 aReconEvent = new ReconEvent();
94 StatusCode sc = eventSvc->registerObject( "/Event/Recon", aReconEvent );
95 if ( sc != StatusCode::SUCCESS )
96 {
97 log << MSG::FATAL << "TofRec could not register ReconEvent!" << endmsg;
98 return StatusCode::FAILURE;
99 }
100 }
101 return StatusCode::SUCCESS;
102}
103
104StatusCode TofRecTDS::RegisterRecTofTrackCol( std::vector<TofTrack*>*& tofTrackVec ) {
105 IMessageSvc* msgSvc;
106 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
107 MsgStream log( msgSvc, "TofRecTDS" );
108 log << MSG::INFO << "TofRecTDS::RegisterRecTofTrack()" << endmsg;
109
110 IDataProviderSvc* eventSvc;
111 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
112
113 RecTofTrackCol* recTofTrackCol = new RecTofTrackCol;
114
115 std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
116 for ( ; iter < tofTrackVec->end(); iter++ )
117 { ( *iter )->convert2RecTofTrackCol( recTofTrackCol ); }
118
119 // Check whether the RecTofTrackCol has been registered.
120 StatusCode sc;
121 DataObject* aRecTofTrackCol;
122 eventSvc->findObject( "/Event/Recon/RecTofTrackCol", aRecTofTrackCol );
123 if ( aRecTofTrackCol != NULL )
124 {
125
126 sc = eventSvc->unregisterObject( "/Event/Recon/RecTofTrackCol" );
127
128 delete aRecTofTrackCol;
129
130 if ( sc != StatusCode::SUCCESS )
131 {
132 log << MSG::FATAL << "Could not unregister RecTofTrack collection!" << endmsg;
133
134 RecTofTrackCol::iterator iter_tof = recTofTrackCol->begin();
135 for ( ; iter_tof != recTofTrackCol->end(); iter_tof++ ) { delete ( *iter_tof ); }
136 recTofTrackCol->clear();
137 delete recTofTrackCol;
138
139 std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
140 for ( ; iter_data != tofTrackVec->end(); iter_data++ ) { delete ( *iter_data ); }
141 tofTrackVec->clear();
142 delete tofTrackVec;
143
144 return StatusCode::FAILURE;
145 }
146 }
147
148 sc = eventSvc->registerObject( "/Event/Recon/RecTofTrackCol", recTofTrackCol );
149 if ( sc != StatusCode::SUCCESS )
150 {
151 log << MSG::FATAL << "TofRec could not register Rec TOF track collection!" << endmsg;
152 RecTofTrackCol::iterator iter_tof = recTofTrackCol->begin();
153 for ( ; iter_tof != recTofTrackCol->end(); iter_tof++ ) { delete ( *iter_tof ); }
154 recTofTrackCol->clear();
155 delete recTofTrackCol;
156 return StatusCode::FAILURE;
157 }
158
159 return StatusCode::SUCCESS;
160}
161
162StatusCode TofRecTDS::RegisterRecBTofCalHitCol( int runNumber, int eventNumber,
163 std::vector<TofTrack*>*& tofTrackVec,
164 std::string m_calibData ) {
165 IMessageSvc* msgSvc;
166 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
167 MsgStream log( msgSvc, "TofRecTDS" );
168 log << MSG::INFO << "TofRecTDS::RegisterRecBTofCalHitCol()" << endmsg;
169
170 IDataProviderSvc* eventSvc;
171 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
172
173 RecBTofCalHitCol* recBTofCalHitCol = new RecBTofCalHitCol;
174
175 std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
176 for ( ; iter < tofTrackVec->end(); iter++ )
177 {
178 ExtTrackCase hitcase = ( *iter )->hitCase();
179 // if( ( hitcase == InnerLayer ) || ( hitcase == OuterLayer ) || ( hitcase ==
180 // DoubleLayer ) ) {
181 if ( ( hitcase == InnerLayer ) || ( hitcase == DoubleLayer ) )
182 {
183 ( *iter )->convert2RecBTofCalHitColBarrel( runNumber, eventNumber, recBTofCalHitCol,
184 m_calibData );
185 }
186 if ( ( hitcase == EastEndcapMRPC ) || ( hitcase == WestEndcapMRPC ) )
187 {
188 ( *iter )->convert2RecBTofCalHitColETF( runNumber, eventNumber, recBTofCalHitCol,
189 m_calibData );
190 }
191 }
192
193 // Check whether the RecBTofCalHitCol has been registered.
194 StatusCode scb;
195 DataObject* aRecBTofCalHitCol;
196 eventSvc->findObject( "/Event/Recon/RecBTofCalhitCol", aRecBTofCalHitCol );
197 if ( aRecBTofCalHitCol != NULL )
198 {
199 scb = eventSvc->unregisterObject( "/Event/Recon/RecBTofCalHitCol" );
200 if ( scb != StatusCode::SUCCESS )
201 {
202 log << MSG::FATAL << "Could not unregister RecBTofCalHit collection!" << endmsg;
203
204 RecBTofCalHitCol::iterator iter_btof = recBTofCalHitCol->begin();
205 for ( ; iter_btof != recBTofCalHitCol->end(); iter_btof++ ) { delete ( *iter_btof ); }
206 recBTofCalHitCol->clear();
207 delete recBTofCalHitCol;
208
209 std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
210 for ( ; iter_data != tofTrackVec->end(); iter_data++ ) { delete ( *iter_data ); }
211 tofTrackVec->clear();
212 delete tofTrackVec;
213
214 return StatusCode::FAILURE;
215 }
216 }
217
218 StatusCode sh1 =
219 eventSvc->registerObject( "/Event/Recon/RecBTofCalHitCol", recBTofCalHitCol );
220 if ( sh1 != StatusCode::SUCCESS )
221 {
222 log << MSG::FATAL << "TofRec could not register BTOF CalHit collection!!" << endmsg;
223 RecBTofCalHitCol::iterator iter_btof = recBTofCalHitCol->begin();
224 for ( ; iter_btof != recBTofCalHitCol->end(); iter_btof++ ) { delete ( *iter_btof ); }
225 recBTofCalHitCol->clear();
226 delete recBTofCalHitCol;
227 return StatusCode::FAILURE;
228 }
229
230 return StatusCode::SUCCESS;
231}
232
233StatusCode TofRecTDS::RegisterRecETofCalHitCol( int runNumber, int eventNumber,
234 std::vector<TofTrack*>*& tofTrackVec,
235 std::string m_calibData ) {
236 IMessageSvc* msgSvc;
237 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
238 MsgStream log( msgSvc, "TofRecTDS" );
239 log << MSG::INFO << "TofRecTDS::RegisterRecETofCalHitCol()" << endmsg;
240
241 IDataProviderSvc* eventSvc;
242 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
243
244 // sunss add 08/10/16
245
246 if ( tofTrackVec->size() != 2 ) return StatusCode::SUCCESS;
247 std::vector<TofTrack*>::iterator iter1 = tofTrackVec->begin();
248 std::vector<TofTrack*>::iterator iter2 = iter1 + 1;
249 if ( ( *iter1 )->tdc1() < 0.0 || ( *iter2 )->tdc1() < 0.0 ) return StatusCode::SUCCESS;
250 if ( abs( ( *iter1 )->tdc1() - ( *iter2 )->tdc1() ) > 2.0 ) return StatusCode::SUCCESS;
251
252 // sunss add 08/10/16
253
254 RecETofCalHitCol* recETofCalHitCol = new RecETofCalHitCol;
255
256 std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
257 for ( ; iter < tofTrackVec->end(); iter++ )
258 {
259 ExtTrackCase hitcase = ( *iter )->hitCase();
260 if ( ( hitcase == EastEndcap ) || ( hitcase == WestEndcap ) )
261 {
262 ( *iter )->convert2RecETofCalHitCol( runNumber, eventNumber, recETofCalHitCol,
263 m_calibData );
264 }
265 }
266
267 // Check whether the RecETofCalHitCol has been registered.
268 StatusCode sce;
269
270 DataObject* aRecETofCalHitCol;
271 eventSvc->findObject( "/Event/Recon/RecETofCalhitCol", aRecETofCalHitCol );
272 if ( aRecETofCalHitCol != NULL )
273 {
274 sce = eventSvc->unregisterObject( "/Event/Recon/RecETofCalHitCol" );
275 if ( sce != StatusCode::SUCCESS )
276 {
277 log << MSG::FATAL << "Could not unregister RecETofCalHit collection!" << endmsg;
278
279 RecETofCalHitCol::iterator iter_etof = recETofCalHitCol->begin();
280 for ( ; iter_etof != recETofCalHitCol->end(); iter_etof++ ) { delete ( *iter_etof ); }
281 recETofCalHitCol->clear();
282 delete recETofCalHitCol;
283
284 std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
285 for ( ; iter_data != tofTrackVec->end(); iter_data++ ) { delete ( *iter_data ); }
286 tofTrackVec->clear();
287 delete tofTrackVec;
288
289 return StatusCode::FAILURE;
290 }
291 }
292
293 StatusCode sh2 =
294 eventSvc->registerObject( "/Event/Recon/RecETofCalHitCol", recETofCalHitCol );
295 if ( sh2 != StatusCode::SUCCESS )
296 {
297 log << MSG::FATAL << "TofRec could not register ETOF CalHit collection!!" << endmsg;
298 RecETofCalHitCol::iterator iter_etof = recETofCalHitCol->begin();
299 for ( ; iter_etof != recETofCalHitCol->end(); iter_etof++ ) { delete ( *iter_etof ); }
300 recETofCalHitCol->clear();
301 delete recETofCalHitCol;
302 return StatusCode::FAILURE;
303 }
304
305 return StatusCode::SUCCESS;
306}
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
IMessageSvc * msgSvc()
ExtTrackCase
Definition TofTrack.h:21
@ WestEndcap
Definition TofTrack.h:26
@ EastEndcapMRPC
Definition TofTrack.h:27
@ InnerLayer
Definition TofTrack.h:22
@ EastEndcap
Definition TofTrack.h:25
@ DoubleLayer
Definition TofTrack.h:24
@ WestEndcapMRPC
Definition TofTrack.h:28
StatusCode RegisterRecTofTrackCol(std::vector< TofTrack * > *&tofTrackVec)
StatusCode RegisterTDS(int runNumber, int eventNumber, std::vector< TofTrack * > *&tofTrackVec, bool m_forCalibration, std::string m_calibData)
Definition TofRecTDS.cxx:61
StatusCode RegisterNullRecTofTrackCol()
Definition TofRecTDS.cxx:21
StatusCode RegisterRecETofCalHitCol(int runNumber, int eventNumber, std::vector< TofTrack * > *&tofTrackVec, std::string calibData)
StatusCode RegisterRecBTofCalHitCol(int runNumber, int eventNumber, std::vector< TofTrack * > *&tofTrackVec, std::string calibData)
StatusCode InitializeTDS()
Definition TofRecTDS.cxx:15
StatusCode RegisterReconEvent()
Definition TofRecTDS.cxx:79