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