BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Single.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#include "GaudiKernel/PropertyMgr.h"
6#include "GaudiKernel/SmartDataPtr.h"
7#include "VertexDbSvc/IVertexDbSvc.h"
8
9#include "EventModel/Event.h"
10#include "EventModel/EventModel.h"
11
12#include "DstEvent/TofHitStatus.h"
13#include "EventModel/EventHeader.h"
14#include "EvtRecEvent/EvtRecEvent.h"
15#include "EvtRecEvent/EvtRecTrack.h"
16#include "McTruth/McParticle.h"
17#include "MucRecEvent/RecMucTrack.h"
18
19#include "CLHEP/Vector/LorentzVector.h"
20#include "CLHEP/Vector/ThreeVector.h"
21#include "CLHEP/Vector/TwoVector.h"
22#include "GaudiKernel/Bootstrap.h"
23#include "GaudiKernel/IHistogramSvc.h"
24#include "GaudiKernel/INTupleSvc.h"
25#include "GaudiKernel/NTuple.h"
26#include "TMath.h"
27using CLHEP::Hep2Vector;
28using CLHEP::Hep3Vector;
29using CLHEP::HepLorentzVector;
30#include "CLHEP/Geometry/Point3D.h"
31#ifndef ENABLE_BACKWARDS_COMPATIBILITY
32typedef HepGeom::Point3D<double> HepPoint3D;
33#endif
34#include "Single.h"
35
36#include "ParticleID/ParticleID.h"
37#include "VertexFit/Helix.h"
38#include "VertexFit/KinematicFit.h"
39#include "VertexFit/VertexFit.h"
40
41#include <vector>
42
43typedef std::vector<int> Vint;
44typedef std::vector<HepLorentzVector> Vp4;
45
47
48/////////////////////////////////////////////////////////////////////////////
50Single::Single( const std::string& name, ISvcLocator* pSvcLocator )
51 : Algorithm( name, pSvcLocator ) {
52 // Declare the properties
53 declareProperty( "Vxy0cut", m_vxy0cut = 2.0 );
54 declareProperty( "Vz0cut", m_vz0cut = 20.0 );
55 declareProperty( "angdcut", m_angdcut = 30.0 );
56 declareProperty( "CheckDedx", m_checkDedx = 1 );
57 declareProperty( "CheckTof", m_checkTof = 1 );
58 declareProperty( "CheckExt", m_checkExt = 1 );
59 declareProperty( "CheckEmc", m_checkEmc = 1 );
60 declareProperty( "CheckMuc", m_checkMuc = 1 );
61 declareProperty( "ParticleID", m_particleID = -211 );
62 declareProperty( "Itrack", m_itrack = 0 );
63 declareProperty( "PID_mode", m_pid_mode = 0 ); // 0:Combine 1:Only Dedx 2:Only Tof
64}
65
66// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
67StatusCode Single::initialize() {
68 MsgStream log( msgSvc(), name() );
69
70 log << MSG::INFO << "in initialize()" << endmsg;
71
72 StatusCode status;
73 NTuplePtr nt1( ntupleSvc(), "FILE1/mdctrack" );
74 if ( nt1 ) m_tuple1 = nt1;
75 else
76 {
77 m_tuple1 =
78 ntupleSvc()->book( "FILE1/mdctrack", CLID_ColumnWiseTuple, "ks N-Tuple example" );
79 if ( m_tuple1 )
80 {
81 status = m_tuple1->addItem( "mdc_vx0", m_vx0 );
82 status = m_tuple1->addItem( "mdc_vy0", m_vy0 );
83 status = m_tuple1->addItem( "mdc_vz0", m_vz0 );
84 status = m_tuple1->addItem( "mdc_pch", m_pch );
85 status = m_tuple1->addItem( "mdc_trackid", m_trackid );
86 status = m_tuple1->addItem( "mdc_charge", m_charge );
87 status = m_tuple1->addItem( "mdc_pxy0", m_pxy0 );
88 status = m_tuple1->addItem( "mdc_px0", m_px0 );
89 status = m_tuple1->addItem( "mdc_py0", m_py0 );
90 status = m_tuple1->addItem( "mdc_pz0", m_pz0 );
91 status = m_tuple1->addItem( "mdc_r0", m_r0 );
92 status = m_tuple1->addItem( "mdc_phi", m_phi );
93 status = m_tuple1->addItem( "mdc_theta", m_theta );
94 status = m_tuple1->addItem( "mdc_ndof", m_ndof );
95 status = m_tuple1->addItem( "mdc_nster", m_nster );
96 status = m_tuple1->addItem( "mdc_stat", m_stat );
97 status = m_tuple1->addItem( "mdc_angd", m_angd );
98 status = m_tuple1->addItem( "mdc_rvxy0", m_rvxy0 );
99 status = m_tuple1->addItem( "mdc_rvz0", m_rvz0 );
100 status = m_tuple1->addItem( "mdc_d0", m_d0 );
101 status = m_tuple1->addItem( "mdc_phi0", m_phi0 );
102 status = m_tuple1->addItem( "mdc_kappa", m_kappa );
103 status = m_tuple1->addItem( "mdc_dz", m_dzhelix );
104 status = m_tuple1->addItem( "mdc_tanlamda", m_tanlamda );
105 status = m_tuple1->addItem( "mdc_err11", m_err11 );
106 status = m_tuple1->addItem( "mdc_err21", m_err21 );
107 status = m_tuple1->addItem( "mdc_err22", m_err22 );
108 status = m_tuple1->addItem( "mdc_err31", m_err31 );
109 status = m_tuple1->addItem( "mdc_err32", m_err32 );
110 status = m_tuple1->addItem( "mdc_err33", m_err33 );
111 status = m_tuple1->addItem( "mdc_err41", m_err41 );
112 status = m_tuple1->addItem( "mdc_err42", m_err42 );
113 status = m_tuple1->addItem( "mdc_err43", m_err43 );
114 status = m_tuple1->addItem( "mdc_err44", m_err44 );
115 status = m_tuple1->addItem( "mdc_err51", m_err51 );
116 status = m_tuple1->addItem( "mdc_err52", m_err52 );
117 status = m_tuple1->addItem( "mdc_err53", m_err53 );
118 status = m_tuple1->addItem( "mdc_err54", m_err54 );
119 status = m_tuple1->addItem( "mdc_err55", m_err55 );
120
121 status = m_tuple1->addItem( "mdc_kal_px", m_mdc_kal_px );
122 status = m_tuple1->addItem( "mdc_kal_py", m_mdc_kal_py );
123 status = m_tuple1->addItem( "mdc_kal_pz", m_mdc_kal_pz );
124 status = m_tuple1->addItem( "mdc_kal_p", m_mdc_kal_p );
125 status = m_tuple1->addItem( "mdc_kal_pxy", m_mdc_kal_pxy );
126 status = m_tuple1->addItem( "mdc_kal_costheta", m_mdc_kal_costheta );
127
128 status = m_tuple1->addItem( "NGch", m_ngch );
129 }
130 else
131 {
132 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
133 return StatusCode::FAILURE;
134 }
135 }
136
137 // check mdctrack
138
139 if ( m_checkDedx == 1 )
140 {
141 NTuplePtr nt2( ntupleSvc(), "FILE1/dedx" );
142 if ( nt2 ) m_tuple2 = nt2;
143 else
144 {
145 m_tuple2 = ntupleSvc()->book( "FILE1/dedx", CLID_ColumnWiseTuple, "ks N-Tuple example" );
146 if ( m_tuple2 )
147 {
148 status = m_tuple2->addItem( "dedx_ptrk", m_ptrk );
149 status = m_tuple2->addItem( "dedx_chie", m_chie );
150 status = m_tuple2->addItem( "dedx_chimu", m_chimu );
151 status = m_tuple2->addItem( "dedx_chipi", m_chipi );
152 status = m_tuple2->addItem( "dedx_chik", m_chik );
153 status = m_tuple2->addItem( "dedx_chip", m_chip );
154 status = m_tuple2->addItem( "dedx_probPH", m_probPH );
155 status = m_tuple2->addItem( "dedx_normPH", m_normPH );
156 status = m_tuple2->addItem( "dedx_ghit", m_ghit );
157 status = m_tuple2->addItem( "dedx_thit", m_thit );
158 }
159 else
160 {
161 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple2 ) << endmsg;
162 return StatusCode::FAILURE;
163 }
164 }
165 }
166 // check dE/dx
167
168 if ( m_checkExt == 1 )
169 {
170 NTuplePtr nt3( ntupleSvc(), "FILE1/ext" );
171 if ( nt3 ) m_tuple3 = nt3;
172 else
173 {
174 m_tuple3 = ntupleSvc()->book( "FILE1/ext", CLID_ColumnWiseTuple, "ks N-Tuple example" );
175 if ( m_tuple3 )
176 {
177
178 status = m_tuple3->addItem( "ext_tof1", m_tof1 );
179 status = m_tuple3->addItem( "ext_tof1path", m_tof1path );
180 status = m_tuple3->addItem( "ext_tof1z", m_tof1z );
181 status = m_tuple3->addItem( "ext_tof1t", m_tof1t );
182 status = m_tuple3->addItem( "ext_tof1x", m_tof1x );
183 status = m_tuple3->addItem( "ext_tof1y", m_tof1y );
184
185 status = m_tuple3->addItem( "ext_tof2", m_tof2 );
186 status = m_tuple3->addItem( "ext_tof2path", m_tof2path );
187 status = m_tuple3->addItem( "ext_tof2z", m_tof2z );
188 status = m_tuple3->addItem( "ext_tof2t", m_tof2t );
189 status = m_tuple3->addItem( "ext_tof2x", m_tof2x );
190 status = m_tuple3->addItem( "ext_tof2y", m_tof2y );
191
192 status = m_tuple3->addItem( "ext_emctheta", m_emctheta );
193 status = m_tuple3->addItem( "ext_emcphi", m_emcphi );
194 status = m_tuple3->addItem( "ext_emcpath", m_emcpath );
195
196 status = m_tuple3->addItem( "ext_mucz", m_mucz );
197 status = m_tuple3->addItem( "ext_muct", m_muct );
198 status = m_tuple3->addItem( "ext_mucx", m_mucx );
199 status = m_tuple3->addItem( "ext_mucy", m_mucy );
200 }
201 else
202 {
203 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple3 ) << endmsg;
204 return StatusCode::FAILURE;
205 }
206 }
207 }
208 // check exttrack
209
210 if ( m_checkTof == 1 )
211 {
212 NTuplePtr nt4( ntupleSvc(), "FILE1/tof" );
213 if ( nt4 ) m_tuple4 = nt4;
214 else
215 {
216 m_tuple4 = ntupleSvc()->book( "FILE1/tof", CLID_ColumnWiseTuple, "ks N-Tuple example" );
217 if ( m_tuple2 )
218 {
219 status = m_tuple4->addItem( "tof_path", m_path );
220 status = m_tuple4->addItem( "tof_zrhit", m_zrhit );
221 status = m_tuple4->addItem( "tof_ph", m_ph );
222 status = m_tuple4->addItem( "tof_tof", m_tof );
223 status = m_tuple4->addItem( "tof_errtof", m_errtof );
224 status = m_tuple4->addItem( "tof_beta", m_beta );
225 status = m_tuple4->addItem( "tof_texpe", m_texpe );
226 status = m_tuple4->addItem( "tof_texpmu", m_texpmu );
227 status = m_tuple4->addItem( "tof_texppi", m_texppi );
228 status = m_tuple4->addItem( "tof_texpka", m_texpka );
229 status = m_tuple4->addItem( "tof_texppro", m_texppro );
230 status = m_tuple4->addItem( "tof_toffsete", m_toffsete );
231 status = m_tuple4->addItem( "tof_toffsetmu", m_toffsetmu );
232 status = m_tuple4->addItem( "tof_toffsetpi", m_toffsetpi );
233 status = m_tuple4->addItem( "tof_toffsetka", m_toffsetka );
234 status = m_tuple4->addItem( "tof_toffsetpro", m_toffsetpro );
235 status = m_tuple4->addItem( "tof_toffsetatpr", m_toffsetatpr );
236 status = m_tuple4->addItem( "tof_sigmae", m_sigmae );
237 status = m_tuple4->addItem( "tof_sigmamu", m_sigmamu );
238 status = m_tuple4->addItem( "tof_sigmapi", m_sigmapi );
239 status = m_tuple4->addItem( "tof_sigmaka", m_sigmaka );
240 status = m_tuple4->addItem( "tof_sigmapro", m_sigmapro );
241 status = m_tuple4->addItem( "tof_sigmaatpr", m_sigmaatpr );
242 status = m_tuple4->addItem( "tof_quality", m_quality );
243 status = m_tuple4->addItem( "tof_t0", m_t0 );
244 status = m_tuple4->addItem( "tof_errt0", m_errt0 );
245 status = m_tuple4->addItem( "tof_errz", m_errz );
246 status = m_tuple4->addItem( "tof_phi", m_phitof );
247 status = m_tuple4->addItem( "tof_errphi", m_errphi );
248 status = m_tuple4->addItem( "tof_energy", m_energy );
249 status = m_tuple4->addItem( "tof_errenergy", m_errenergy );
250 }
251 else
252 {
253 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple4 ) << endmsg;
254 return StatusCode::FAILURE;
255 }
256 }
257 }
258 // check tof
259
260 if ( m_checkEmc == 1 )
261 {
262 NTuplePtr nt5( ntupleSvc(), "FILE1/emc" );
263 if ( nt5 ) m_tuple5 = nt5;
264 else
265 {
266 m_tuple5 = ntupleSvc()->book( "FILE1/emc", CLID_ColumnWiseTuple, "ks N-Tuple example" );
267 if ( m_tuple5 )
268 {
269
270 status = m_tuple5->addItem( "emc_x", m_x );
271 status = m_tuple5->addItem( "emc_y", m_y );
272 status = m_tuple5->addItem( "emc_z", m_z );
273 status = m_tuple5->addItem( "emc_theta", m_thetaemc );
274 status = m_tuple5->addItem( "emc_phi", m_phiemc );
275 status = m_tuple5->addItem( "emc_dx", m_dx );
276 status = m_tuple5->addItem( "emc_dy", m_dy );
277 status = m_tuple5->addItem( "emc_dz", m_dz );
278 status = m_tuple5->addItem( "emc_dtheta", m_dtheta );
279 status = m_tuple5->addItem( "emc_dphi", m_dphi );
280 status = m_tuple5->addItem( "emc_energy", m_energyemc );
281 status = m_tuple5->addItem( "emc_dE", m_de );
282 status = m_tuple5->addItem( "emc_eseed", m_eseed );
283 status = m_tuple5->addItem( "emc_e3x3", m_e3x3 );
284 status = m_tuple5->addItem( "emc_e5x5", m_e5x5 );
285 status = m_tuple5->addItem( "emc_secp", m_secp );
286 status = m_tuple5->addItem( "emc_latp", m_latp );
287 }
288 else
289 {
290 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple5 ) << endmsg;
291 return StatusCode::FAILURE;
292 }
293 }
294 }
295 // check emc
296
297 if ( m_checkMuc == 1 )
298 {
299 NTuplePtr nt6( ntupleSvc(), "FILE1/muc" );
300 if ( nt6 ) m_tuple6 = nt6;
301 else
302 {
303 m_tuple6 = ntupleSvc()->book( "FILE1/muc", CLID_ColumnWiseTuple, "ks N-Tuple example" );
304 if ( m_tuple6 )
305 {
306
307 status = m_tuple6->addItem( "muc_depth", m_depth );
308 status = m_tuple6->addItem( "muc_chi2", m_chi2 );
309 status = m_tuple6->addItem( "muc_rms", m_rms );
310 status = m_tuple6->addItem( "muc_xpos", m_xpos );
311 status = m_tuple6->addItem( "muc_ypos", m_ypos );
312 status = m_tuple6->addItem( "muc_zpos", m_zpos );
313 status = m_tuple6->addItem( "muc_xsigma", m_xpossigma );
314 status = m_tuple6->addItem( "muc_ysigma", m_ypossigma );
315 status = m_tuple6->addItem( "muc_zsigma", m_zpossigma );
316 status = m_tuple6->addItem( "muc_px", m_px );
317 status = m_tuple6->addItem( "muc_py", m_py );
318 status = m_tuple6->addItem( "muc_pz", m_pz );
319 status = m_tuple6->addItem( "muc_distance", m_distance );
320 status = m_tuple6->addItem( "muc_deltaphi", m_deltaphi );
321 }
322 else
323 {
324 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple6 ) << endmsg;
325 return StatusCode::FAILURE;
326 }
327 }
328 }
329 // check muc
330
331 NTuplePtr nt7( ntupleSvc(), "FILE1/runinfo" );
332 if ( nt7 ) m_tuple7 = nt7;
333 else
334 {
335 m_tuple7 =
336 ntupleSvc()->book( "FILE1/runinfo", CLID_ColumnWiseTuple, "ks N-Tuple example" );
337 if ( m_tuple7 )
338 {
339
340 status = m_tuple7->addItem( "runinfo_runNo", m_runNo );
341 status = m_tuple7->addItem( "runinfo_event", m_event );
342 status = m_tuple7->addItem( "runinfo_totcharged", m_totcharged );
343 status = m_tuple7->addItem( "runinfo_totneutral", m_totneutral );
344 status = m_tuple7->addItem( "runinfo_tottracks", m_tottracks );
345 status = m_tuple7->addItem( "runinfo_ngood", m_ngood );
346 status = m_tuple7->addItem( "runinfo_ncharge", m_ncharge );
347 status = m_tuple7->addItem( "kal_n", m_kaln );
348 status = m_tuple7->addItem( "costheta_n", m_costhetan );
349 status = m_tuple7->addItem( "p_n", m_pn );
350 status = m_tuple7->addItem( "charge", m_mat_charge );
351 status = m_tuple7->addItem( "diff_pxy", m_diff_pxy );
352 status = m_tuple7->addItem( "diff_p", m_diff_pch );
353 status = m_tuple7->addItem( "diff_costheta", m_diff_costheta );
354 }
355 else
356 {
357 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple7 ) << endmsg;
358 return StatusCode::FAILURE;
359 }
360 }
361 // check runinfo
362
363 NTuplePtr nt8( ntupleSvc(), "FILE1/mcpart" );
364 if ( nt8 ) m_tuple8 = nt8;
365 else
366 {
367 m_tuple8 = ntupleSvc()->book( "FILE1/mcpart", CLID_ColumnWiseTuple, "ks N-Tuple example" );
368 if ( m_tuple8 )
369 {
370 status = m_tuple8->addItem( "mcpart_vx", m_vx );
371 status = m_tuple8->addItem( "mcpart_vy", m_vy );
372 status = m_tuple8->addItem( "mcpart_vz", m_vz );
373 status = m_tuple8->addItem( "mcpart_vr0", m_vr0 );
374 status = m_tuple8->addItem( "mcpart_px", m_pxmc );
375 status = m_tuple8->addItem( "mcpart_py", m_pymc );
376 status = m_tuple8->addItem( "mcpart_pz", m_pzmc );
377 status = m_tuple8->addItem( "mcpart_e", m_e );
378 status = m_tuple8->addItem( "mcpart_p", m_p );
379 status = m_tuple8->addItem( "mcpart_pxy", m_pxymc );
380 status = m_tuple8->addItem( "mcpart_theta", m_thetamc );
381 status = m_tuple8->addItem( "mcpart_costheta", m_costhetamc );
382
383 status = m_tuple8->addItem( "mcpart_phi", m_phimc );
384 status = m_tuple8->addItem( "mcpart_m", m_m );
385 status = m_tuple8->addItem( "mcpart_pro", m_pro );
386 status = m_tuple8->addItem( "mcpart_index", m_index );
387 status = m_tuple8->addItem( "totalcharged", m_mctotcharged );
388 }
389 else
390 {
391 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple8 ) << endmsg;
392 return StatusCode::FAILURE;
393 }
394 }
395 // check mctruth
396
397 NTuplePtr nt9( ntupleSvc(), "FILE1/pid_kal" );
398 if ( nt9 ) m_tuple9 = nt9;
399 else
400 {
401 m_tuple9 =
402 ntupleSvc()->book( "FILE1/pid_kal", CLID_ColumnWiseTuple, "ks N-Tuple example" );
403 if ( m_tuple9 )
404 {
405 status = m_tuple9->addItem( "pid_ptrk", m_ptrk_pid );
406 status = m_tuple9->addItem( "pid_cost", m_cost_pid );
407 status = m_tuple9->addItem( "pid_dedx", m_dedx_pid );
408 status = m_tuple9->addItem( "pid_tof1", m_tof1_pid );
409 status = m_tuple9->addItem( "pid_tof2", m_tof2_pid );
410 status = m_tuple9->addItem( "prob_pion", m_prob_pid_pion );
411 status = m_tuple9->addItem( "prob_kaon", m_prob_pid_kaon );
412 status = m_tuple9->addItem( "prob_proton", m_prob_pid_proton );
413
414 status = m_tuple9->addItem( "kal_px", m_kalpx );
415 status = m_tuple9->addItem( "kal_py", m_kalpy );
416 status = m_tuple9->addItem( "kal_pz", m_kalpz );
417 status = m_tuple9->addItem( "kal_p", m_kalp );
418 status = m_tuple9->addItem( "kal_pxy", m_kalpxy );
419
420 status = m_tuple9->addItem( "kal_costheta", m_kalcostheta );
421
422 status = m_tuple9->addItem( "kal_d0", m_d0kal );
423 status = m_tuple9->addItem( "kal_phi0", m_phi0kal );
424 status = m_tuple9->addItem( "kal_kappa", m_kappakal );
425 status = m_tuple9->addItem( "kal_dz", m_dzhelixkal );
426 status = m_tuple9->addItem( "kal_tanlamda", m_tanlamdakal );
427 status = m_tuple9->addItem( "kal_err11", m_err11kal );
428 status = m_tuple9->addItem( "kal_err21", m_err21kal );
429 status = m_tuple9->addItem( "kal_err22", m_err22kal );
430 status = m_tuple9->addItem( "kal_err31", m_err31kal );
431 status = m_tuple9->addItem( "kal_err32", m_err32kal );
432 status = m_tuple9->addItem( "kal_err33", m_err33kal );
433 status = m_tuple9->addItem( "kal_err41", m_err41kal );
434 status = m_tuple9->addItem( "kal_err42", m_err42kal );
435 status = m_tuple9->addItem( "kal_err43", m_err43kal );
436 status = m_tuple9->addItem( "kal_err44", m_err44kal );
437 status = m_tuple9->addItem( "kal_err51", m_err51kal );
438 status = m_tuple9->addItem( "kal_err52", m_err52kal );
439 status = m_tuple9->addItem( "kal_err53", m_err53kal );
440 status = m_tuple9->addItem( "kal_err54", m_err54kal );
441 status = m_tuple9->addItem( "kal_err55", m_err55kal );
442 status = m_tuple9->addItem( "kal_nn", m_kalnn );
443 status = m_tuple9->addItem( "costheta_nn", m_costhetann );
444 status = m_tuple9->addItem( "p_nn", m_pnn );
445
446 status = m_tuple9->addItem( "comp_costheta", m_comp_costheta );
447 }
448 else
449 {
450 log << MSG::ERROR << " Cannot book N-tuple:" << long( m_tuple9 ) << endmsg;
451 return StatusCode::FAILURE;
452 }
453 }
454 // check pid and kaltrack
455
456 //
457 //--------End of book--------
458 //
459
460 log << MSG::INFO << "successfully return from initialize()" << endmsg;
461 return StatusCode::SUCCESS;
462}
463
464// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
465StatusCode Single::execute() {
466 setFilterPassed( false );
467 // std::cout << "execute()" << std::endl;
468
469 MsgStream log( msgSvc(), name() );
470 log << MSG::INFO << "in execute()" << endmsg;
471
472 // runinfo
473 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
474 int runNo = eventHeader->runNumber();
475 int event = eventHeader->eventNumber();
476 log << MSG::DEBUG << "run, evtnum = " << runNo << " , " << event << endmsg;
477
478 // cout<<"event "<<event<<endl;
479 Ncut0++;
480
481 m_runNo = runNo;
482 m_event = event;
483
484 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), EventModel::EvtRec::EvtRecEvent );
485 // log << MSG::INFO << "get event tag OK" << endmsg;
486 log << MSG::DEBUG << "ncharg, nneu, tottks = " << evtRecEvent->totalCharged() << " , "
487 << evtRecEvent->totalNeutral() << " , " << evtRecEvent->totalTracks() << endmsg;
488
489 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(), EventModel::EvtRec::EvtRecTrackCol );
490
491 Vint iGood;
492 iGood.clear();
493
494 int nCharge = 0;
495
496 Hep3Vector xorigin( 0, 0, 0 );
497 IVertexDbSvc* vtxsvc;
498 Gaudi::svcLocator()->service( "VertexDbSvc", vtxsvc );
499 if ( vtxsvc->isVertexValid() )
500 {
501 double* dbv = vtxsvc->PrimaryVertex();
502 double* vv = vtxsvc->SigmaPrimaryVertex();
503
504 xorigin.setX( dbv[0] );
505 xorigin.setY( dbv[1] );
506 xorigin.setZ( dbv[2] );
507 }
508
509 //
510 // check McParticle infomation
511 //
512
513 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
514 if ( !mcParticleCol )
515 {
516 std::cout << "could not retrieve McParticleCol" << std::endl;
517 return StatusCode::FAILURE;
518 }
519
520 double costhetamc = -9.;
521 Event::McParticleCol::iterator iter_mc = mcParticleCol->begin();
522 HepLorentzVector initialFourMomentum;
523 for ( ; iter_mc != mcParticleCol->end(); iter_mc++ )
524 {
525 if ( abs( ( *iter_mc )->particleProperty() ) != abs( m_particleID ) ) continue;
526 HepLorentzVector initialPosition = ( *iter_mc )->initialPosition();
527 m_vx = initialPosition.x();
528 m_vy = initialPosition.y();
529 m_vz = initialPosition.z();
530 m_vr0 = sqrt( m_vx * m_vx + m_vy * m_vy );
531
532 initialFourMomentum = ( *iter_mc )->initialFourMomentum();
533 m_pxmc = initialFourMomentum.px();
534 m_pymc = initialFourMomentum.py();
535 m_pzmc = initialFourMomentum.pz();
536 m_e = initialFourMomentum.e();
537 m_p = sqrt( m_pxmc * m_pxmc + m_pymc * m_pymc + m_pzmc * m_pzmc );
538 m_pxymc = sqrt( m_pxmc * m_pxmc + m_pymc * m_pymc );
539 m_thetamc = initialFourMomentum.theta() * 180 / ( CLHEP::pi );
540 m_phimc = initialFourMomentum.phi() * 180 / ( CLHEP::pi );
541 m_m = initialFourMomentum.m();
542 m_costhetamc = initialFourMomentum.cosTheta();
543
544 costhetamc = m_costhetamc;
545
546 m_pro = ( *iter_mc )->particleProperty();
547 m_index = ( *iter_mc )->trackIndex();
548 }
549 m_mctotcharged = evtRecEvent->totalCharged();
550
551 int mm = 0;
552 if ( m_costhetamc > -0.7 && m_costhetamc < 0.7 && m_pxymc > 0.2 && m_pxymc < 0.3 ) mm = 1;
553
554 double pxymc = m_pxymc;
555 double pmc = m_p;
556 // if(m_mctotcharged==0&&m_costhetamc>-0.7&&m_costhetamc<-0.6&&m_pxymc>0.25&&m_pxymc<0.3)
557 // cout<<"runNo="<<runNo<<" event"<<event<<endl;
558 // if(m_mctotcharged==0&&m_costhetamc>-0.7&&m_costhetamc<-0.6&&m_pxymc>0.35&&m_pxymc<0.4)
559 // cout<<"runNo1="<<runNo<<" event1"<<event<<endl;
560 m_tuple8->write();
561
562 //
563 // check MdcTrack infomation
564 //
565
566 int itrack = 0;
567
568 double Rz_comp = 30.;
569 double Rxy_comp = 10.;
570 double Rang_comp = 50.;
571
572 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
573 {
574 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
575 if ( !( *itTrk )->isMdcTrackValid() ) continue;
576 if ( !( *itTrk )->isMdcKalTrackValid() ) continue;
577 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
578 RecMdcTrack* mdcKalTrk = ( *itTrk )->mdcTrack();
579 double pch = mdcTrk->p();
580 double x0 = mdcTrk->x();
581 double y0 = mdcTrk->y();
582 double z0 = mdcTrk->z();
583 int trackid = mdcTrk->trackId();
584 int charge = mdcTrk->charge();
585 double pxy0 = mdcTrk->pxy();
586 double px0 = mdcTrk->px();
587 double py0 = mdcTrk->py();
588 double pz0 = mdcTrk->pz();
589 double r0 = mdcTrk->r();
590 double phi = mdcTrk->phi() * 180 / ( CLHEP::pi );
591 double theta = mdcTrk->theta() * 180 / ( CLHEP::pi );
592 int ndof = mdcTrk->ndof();
593 int nster = mdcTrk->nster();
594 int stat = mdcTrk->stat();
595
596 double phi0 = mdcTrk->helix( 1 );
597 double xv = xorigin.x();
598 double yv = xorigin.y();
599 double Rxy = ( x0 - xv ) * cos( phi0 ) + ( y0 - yv ) * sin( phi0 );
600
601 m_vx0 = x0;
602 m_vy0 = y0;
603 m_vz0 = z0;
604 m_pch = pch;
605 m_trackid = trackid;
606 m_charge = charge;
607 m_pxy0 = pxy0;
608 m_px0 = px0;
609 m_py0 = py0;
610 m_pz0 = pz0;
611 m_r0 = r0;
612 m_phi = phi;
613 m_theta = theta;
614 m_ndof = ndof;
615 m_nster = nster;
616 m_stat = stat;
617 m_vr0 = Rxy;
618
619 HepVector a = mdcTrk->helix();
620 m_d0 = a[0];
621 m_phi0 = a[1];
622 m_kappa = a[2];
623 m_dzhelix = a[3];
624 m_tanlamda = a[4];
625
626 HepSymMatrix Ea = mdcTrk->err();
627
628 m_err11 = Ea[0][0];
629 m_err21 = Ea[1][0];
630 m_err22 = Ea[1][1];
631 m_err31 = Ea[2][0];
632 m_err32 = Ea[2][1];
633 m_err33 = Ea[2][2];
634 m_err41 = Ea[3][0];
635 m_err42 = Ea[3][1];
636 m_err43 = Ea[3][2];
637 m_err44 = Ea[3][3];
638 m_err51 = Ea[4][0];
639 m_err52 = Ea[4][1];
640 m_err53 = Ea[4][2];
641 m_err54 = Ea[4][3];
642 m_err55 = Ea[4][4];
643
644 HepPoint3D point0( 0., 0., 0. ); // the initial point for MDC recosntruction
645 HepPoint3D IP( xorigin[0], xorigin[1], xorigin[2] );
646 VFHelix helixip( point0, a, Ea );
647 helixip.pivot( IP );
648 HepVector vecipa = helixip.a();
649 double Rvxy0 = fabs( vecipa[0] ); // the nearest distance to IP in xy plane
650 double Rvz0 = vecipa[3]; // the nearest distance to IP in z direction
651 double Rvphi0 = vecipa[1];
652 m_rvxy0 = Rvxy0;
653 m_rvz0 = Rvz0;
654 // m_rvphi0=Rvphi0;
655
656 HepLorentzVector mdcpos( m_px0, m_py0, m_pz0, m_e );
657 m_angd = initialFourMomentum.angle( mdcpos ) * 180 / ( CLHEP::pi );
658
659 if ( fabs( Rvz0 ) >= m_vz0cut ) continue;
660 if ( fabs( Rvxy0 ) >= m_vxy0cut ) continue;
661 // if(m_angd>m_angdcut) continue;
662
663 if ( m_angd < Rang_comp )
664 {
665 // if(Rvz0<Rz_comp||Rvxy0<Rxy_comp||m_angd<Rang_comp){
666 Rz_comp = Rvz0;
667 Rxy_comp = Rvxy0;
668 Rang_comp = m_angd;
669 itrack = i;
670 }
671 // nCharge += mdcTrk->charge();
672 // if(nCharge!=-1) continue;
673 // m_tuple1->write();
674 iGood.push_back( i );
675 nCharge += mdcTrk->charge();
676 }
677
678 // if(nCharge!=-1) return StatusCode::SUCCESS;
679
680 //
681 // Finish MdcTrack and Good Charged Track Selection
682 //
683
684 int nGood = iGood.size();
685 log << MSG::DEBUG << "nGood, totcharge = " << nGood << " , " << nCharge << endmsg;
686 // cout << "nGood, totcharge = " << nGood << " , " << nCharge << endl;
687 if ( mm == 1 && nGood == 0 ) setFilterPassed( true );
688
689 m_ngch = nGood;
690 m_ncharge = nCharge;
691 for ( int i = 0; i < nGood; i++ )
692 {
693 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i];
694
695 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
696 if ( abs( m_particleID ) == 211 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::pion );
697 if ( abs( m_particleID ) == 321 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::kaon );
698 if ( abs( m_particleID ) == 2212 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::proton );
699 if ( abs( m_particleID ) == 11 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::electron );
700 if ( abs( m_particleID ) == 13 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::muon );
701
702 m_mdc_kal_px = mdcKalTrk->px();
703 m_mdc_kal_py = mdcKalTrk->py();
704 m_mdc_kal_pz = mdcKalTrk->pz();
705 m_mdc_kal_p = sqrt( m_mdc_kal_px * m_mdc_kal_px + m_mdc_kal_py * m_mdc_kal_py +
706 m_mdc_kal_pz * m_mdc_kal_pz );
707 m_mdc_kal_pxy = sqrt( m_mdc_kal_px * m_mdc_kal_px + m_mdc_kal_py * m_mdc_kal_py );
708
709 m_mdc_kal_costheta = cos( mdcKalTrk->theta() );
710 }
711
712 double mdc_pxy0 = m_pxy0;
713 double mdc_pch = m_pch;
714 double mdc_costheta = cos( m_theta );
715
716 m_tuple1->write();
717 // if(nGood!=1) return StatusCode::SUCCESS;
718 // if(fabs(costhetamc)>0.93) return StatusCode::SUCCESS;
719
720 Ncut1++;
721
722 m_totcharged = evtRecEvent->totalCharged();
723 m_totneutral = evtRecEvent->totalNeutral();
724 m_tottracks = evtRecEvent->totalTracks();
725 m_ngood = nGood;
726
727 // if(m_totneutral>0) return StatusCode::SUCCESS;
728
729 // m_kaln=-9;
730 // m_costhetan=-9;
731
732 // for(int i = 0; i < nGood; i++) {
733 // if (i != itrack) continue;
734 m_kaln = pxymc;
735 m_costhetan = costhetamc;
736 m_pn = pmc;
737 //}
738 m_mat_charge = -2;
739 m_diff_pxy = -2;
740 m_diff_pch = -2;
741 m_diff_costheta = -2;
742
743 for ( int i = 0; i < nGood; i++ )
744 {
745 if ( i != itrack ) continue;
746 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i];
747 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
748 m_mat_charge = mdcTrk->charge();
749 m_diff_pxy = fabs( m_kaln - mdc_pxy0 );
750 m_diff_pch = fabs( m_pn - mdc_pch );
751 m_diff_costheta = fabs( m_costhetan - mdc_costheta );
752 }
753
754 m_tuple7->write();
755
756 // Finish runinfo check
757
758 //
759 //
760 // check dedx infomation
761 //
762 //
763 if ( m_checkDedx == 1 )
764 {
765 for ( int i = 0; i < nGood; i++ )
766 {
767 if ( m_itrack == 1 && i != itrack ) continue;
768 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
769 if ( !( *itTrk )->isMdcTrackValid() ) continue;
770 if ( !( *itTrk )->isMdcDedxValid() ) continue;
771 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
772 RecMdcDedx* dedxTrk = ( *itTrk )->mdcDedx();
773 m_ptrk = mdcTrk->p();
774
775 m_chie = dedxTrk->chiE();
776 m_chimu = dedxTrk->chiMu();
777 m_chipi = dedxTrk->chiPi();
778 m_chik = dedxTrk->chiK();
779 m_chip = dedxTrk->chiP();
780 m_ghit = dedxTrk->numGoodHits();
781 m_thit = dedxTrk->numTotalHits();
782 m_probPH = dedxTrk->probPH();
783 m_normPH = dedxTrk->normPH();
784 m_tuple2->write();
785 }
786 }
787
788 //
789 //
790 // check ExtTrack infomation
791 //
792 //
793 if ( m_checkExt == 1 )
794 {
795 for ( int i = 0; i < nGood; i++ )
796 {
797 if ( m_itrack == 1 && i != itrack ) continue;
798 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
799 if ( !( *itTrk )->isExtTrackValid() ) continue;
800 RecExtTrack* extTrk = ( *itTrk )->extTrack();
801
802 m_tof1 = extTrk->tof1();
803 m_tof1path = extTrk->tof1Path();
804 m_tof1z = extTrk->tof1PosSigmaAlongZ();
805 m_tof1t = extTrk->tof1PosSigmaAlongT();
806 m_tof1x = extTrk->tof1PosSigmaAlongX();
807 m_tof1y = extTrk->tof1PosSigmaAlongY();
808
809 m_tof2 = extTrk->tof2();
810 m_tof2path = extTrk->tof2Path();
811 m_tof2z = extTrk->tof2PosSigmaAlongZ();
812 m_tof2t = extTrk->tof2PosSigmaAlongT();
813 m_tof2x = extTrk->tof2PosSigmaAlongX();
814 m_tof2y = extTrk->tof2PosSigmaAlongY();
815
816 m_emctheta = extTrk->emcPosSigmaAlongTheta() * 180 / ( CLHEP::pi );
817 m_emcphi = extTrk->emcPosSigmaAlongPhi() * 180 / ( CLHEP::pi );
818 m_emcpath = extTrk->emcPath();
819
820 m_mucz = extTrk->mucPosSigmaAlongZ();
821 m_muct = extTrk->mucPosSigmaAlongT();
822 m_mucx = extTrk->mucPosSigmaAlongX();
823 m_mucy = extTrk->mucPosSigmaAlongY();
824
825 m_tuple3->write();
826 }
827 }
828
829 //
830 //
831 // check TOF infomation
832 //
833 //
834 if ( m_checkTof == 1 )
835 {
836 for ( int i = 0; i < nGood; i++ )
837 {
838 if ( m_itrack == 1 && i != itrack ) continue;
839 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
840 if ( !( *itTrk )->isTofTrackValid() ) continue;
841
842 SmartRefVector<RecTofTrack> tofTrkCol = ( *itTrk )->tofTrack();
843 SmartRefVector<RecTofTrack>::iterator iter_tof = tofTrkCol.begin();
844
845 m_path = ( *iter_tof )->path();
846 m_zrhit = ( *iter_tof )->zrhit();
847 m_ph = ( *iter_tof )->ph();
848 m_tof = ( *iter_tof )->tof();
849 m_errtof = ( *iter_tof )->errtof();
850 m_beta = ( *iter_tof )->beta();
851 m_texpe = ( *iter_tof )->texpElectron();
852 m_texpmu = ( *iter_tof )->texpMuon();
853 m_texppi = ( *iter_tof )->texpPion();
854 m_texpka = ( *iter_tof )->texpKaon();
855 m_texppro = ( *iter_tof )->texpProton();
856 m_toffsete = ( *iter_tof )->toffsetElectron();
857 m_toffsetmu = ( *iter_tof )->toffsetMuon();
858 m_toffsetpi = ( *iter_tof )->toffsetPion();
859 m_toffsetka = ( *iter_tof )->toffsetKaon();
860 m_toffsetpro = ( *iter_tof )->toffsetProton();
861 m_toffsetatpr = ( *iter_tof )->toffsetAntiProton();
862 m_sigmae = ( *iter_tof )->sigmaElectron();
863 m_sigmamu = ( *iter_tof )->sigmaMuon();
864 m_sigmapi = ( *iter_tof )->sigmaPion();
865 m_sigmaka = ( *iter_tof )->sigmaKaon();
866 m_sigmapro = ( *iter_tof )->sigmaProton();
867 m_sigmaatpr = ( *iter_tof )->sigmaAntiProton();
868 m_quality = ( *iter_tof )->quality();
869 m_t0 = ( *iter_tof )->t0();
870 m_errt0 = ( *iter_tof )->errt0();
871 m_errz = ( *iter_tof )->errz();
872 m_phitof = ( *iter_tof )->phi() * 180 / ( CLHEP::pi );
873 m_errphi = ( *iter_tof )->errphi() * 180 / ( CLHEP::pi );
874 m_energy = ( *iter_tof )->energy();
875 m_errenergy = ( *iter_tof )->errenergy();
876
877 m_tuple4->write();
878 }
879 }
880
881 //
882 //
883 // check EmcTrack infomation
884 //
885 //
886 if ( m_checkEmc == 1 )
887 {
888 for ( int i = 0; i < nGood; i++ )
889 {
890 if ( m_itrack == 1 && i != itrack ) continue;
891 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
892 if ( !( *itTrk )->isEmcShowerValid() ) continue;
893 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
894
895 m_x = emcTrk->x();
896 m_y = emcTrk->y();
897 m_z = emcTrk->z();
898 m_thetaemc = emcTrk->theta() * 180 / ( CLHEP::pi );
899 m_phiemc = emcTrk->phi() * 180 / ( CLHEP::pi );
900 m_dx = emcTrk->dx();
901 m_dy = emcTrk->dy();
902 m_dz = emcTrk->dz();
903 m_dtheta = emcTrk->dtheta() * 180 / ( CLHEP::pi );
904 m_dphi = emcTrk->dphi() * 180 / ( CLHEP::pi );
905 m_energyemc = emcTrk->energy();
906 m_de = emcTrk->dE();
907 m_eseed = emcTrk->eSeed();
908 m_e3x3 = emcTrk->e3x3();
909 m_e5x5 = emcTrk->e5x5();
910 m_secp = emcTrk->secondMoment();
911 m_latp = emcTrk->latMoment();
912
913 m_tuple5->write();
914 }
915 }
916
917 //
918 // Assign 4-momentum to each charged track
919 //
921 for ( int i = 0; i < nGood; i++ )
922 {
923 if ( nGood != 1 ) continue;
924 if ( m_itrack == 1 && i != itrack ) continue;
925 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + iGood[i];
926 // if(pid) delete pid;
927
928 pid->init();
929 pid->setMethod( pid->methodProbability() );
930 // pid->setMethod(pid->methodLikelihood()); //for Likelihood Method
931
932 pid->setChiMinCut( 4 );
933 pid->setRecTrack( *itTrk );
934 if ( m_pid_mode == 0 )
935 pid->usePidSys( pid->useDedx() | pid->useTof1() | pid->useTof2() | pid->useTofE() );
936 if ( m_pid_mode == 1 ) pid->usePidSys( pid->useDedx() );
937 if ( m_pid_mode == 2 ) pid->usePidSys( pid->useTof1() | pid->useTof2() | pid->useTofE() );
938
939 // pid->identify(pid->onlyPion() | pid->onlyKaon()); // seperater Pion/Kaon
940 // pid->identify(pid->onlyPion());
941 pid->identify( pid->onlyPionKaonProton() );
942 pid->calculate();
943
944 // if(!(pid->IsPidInfoValid())&&costhetamc>-0.7&&costhetamc<-0.6&&pxymc>0.25&&pxymc<0.3)
945 // cout<<"pidrunNo="<<runNo<<" pidevent"<<event<<endl;
946 // if(!(pid->IsPidInfoValid())&&costhetamc>-0.7&&costhetamc<-0.6&&pxymc>0.35&&pxymc<0.4)
947 // cout<<"pidrunNo1="<<runNo<<" pidevent1"<<event<<endl;
948 if ( !( pid->IsPidInfoValid() ) ) continue;
949 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
950 m_ptrk_pid = mdcTrk->p();
951 m_cost_pid = cos( mdcTrk->theta() );
952 m_dedx_pid = pid->chiDedx( 2 );
953 m_tof1_pid = pid->chiTof1( 2 );
954 m_tof2_pid = pid->chiTof2( 2 );
955 m_prob_pid_pion = pid->probPion();
956 m_prob_pid_kaon = pid->probKaon();
957 m_prob_pid_proton = pid->probProton();
958
959 //
960 // check KalTrack infomation
961 //
962
963 // if(!(*itTrk)->isMdcKalTrackValid()) {cout<<"kal"<<endl; continue;}
964
965 RecMdcKalTrack* mdcKalTrk = ( *itTrk )->mdcKalTrack();
966 if ( abs( m_particleID ) == 211 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::pion );
967 if ( abs( m_particleID ) == 321 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::kaon );
968 if ( abs( m_particleID ) == 2212 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::proton );
969 if ( abs( m_particleID ) == 11 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::electron );
970 if ( abs( m_particleID ) == 13 ) RecMdcKalTrack::setPidType( RecMdcKalTrack::muon );
971
972 m_kalpx = mdcKalTrk->px();
973 m_kalpy = mdcKalTrk->py();
974 m_kalpz = mdcKalTrk->pz();
975 m_kalp = sqrt( m_kalpx * m_kalpx + m_kalpy * m_kalpy + m_kalpz * m_kalpz );
976 m_kalpxy = sqrt( m_kalpx * m_kalpx + m_kalpy * m_kalpy );
977
978 HepLorentzVector ptr;
979
980 ptr = mdcKalTrk->p4( 0.000511 * 0.000511 );
981 m_kalcostheta = ptr.cosTheta();
982
983 double kalcostheta = m_kalcostheta;
984 m_comp_costheta = costhetamc - kalcostheta;
985 // cout<<" kalcostheta="<<m_kalcostheta<<endl;
986 HepVector k = mdcKalTrk->helix();
987 HepSymMatrix Ek = mdcKalTrk->err();
988
989 m_d0kal = k[0];
990 m_phi0kal = k[1];
991 m_kappakal = k[2];
992 m_dzhelixkal = k[3];
993 m_tanlamdakal = k[4];
994
995 m_err11kal = Ek[0][0];
996 m_err21kal = Ek[1][0];
997 m_err22kal = Ek[1][1];
998
999 m_err31kal = Ek[2][0];
1000 m_err32kal = Ek[2][1];
1001 m_err33kal = Ek[2][2];
1002 m_err41kal = Ek[3][0];
1003 m_err42kal = Ek[3][1];
1004 m_err43kal = Ek[3][2];
1005 m_err44kal = Ek[3][3];
1006 m_err51kal = Ek[4][0];
1007 m_err52kal = Ek[4][1];
1008 m_err53kal = Ek[4][2];
1009 m_err54kal = Ek[4][3];
1010 m_err55kal = Ek[4][4];
1011
1012 m_kalnn = pxymc;
1013 m_costhetann = costhetamc;
1014 m_pnn = pmc;
1015 // cout<<"pxy="<<pxymc<<'\t'<<'\t'<<m_kalpxy<<endl;
1016 // cout<<"costheta="<<costhetamc<<'\t'<<m_kalcostheta<<endl<<endl;
1017
1018 m_tuple9->write();
1019 }
1020
1021 //
1022 //
1023 // check MucTrack infomation
1024 //
1025 //
1026 if ( m_checkMuc == 1 )
1027 {
1028 for ( int i = 0; i < nGood; i++ )
1029 {
1030 if ( m_itrack == 1 && i != itrack ) continue;
1031 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
1032 if ( !( *itTrk )->isMucTrackValid() ) continue;
1033 RecMucTrack* mucTrk = ( *itTrk )->mucTrack();
1034
1035 m_depth = mucTrk->depth();
1036 m_chi2 = mucTrk->chi2();
1037 m_rms = mucTrk->rms();
1038 m_xpos = mucTrk->xPos();
1039 m_ypos = mucTrk->yPos();
1040 m_zpos = mucTrk->zPos();
1041 m_xpossigma = mucTrk->xPosSigma();
1042 m_ypossigma = mucTrk->yPosSigma();
1043 m_zpossigma = mucTrk->zPosSigma();
1044 m_px = mucTrk->px();
1045 m_py = mucTrk->py();
1046 m_pz = mucTrk->pz();
1047 m_distance = mucTrk->distance();
1048 m_deltaphi = mucTrk->deltaPhi() * 180 / ( CLHEP::pi );
1049
1050 m_tuple6->write();
1051 }
1052 }
1053
1054 return StatusCode::SUCCESS;
1055}
1056
1057// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1058StatusCode Single::finalize() {
1059 cout << "mdc" << endl;
1060 cout << "total number: " << Ncut0 << endl;
1061 cout << "nGood: " << Ncut1 << endl;
1062 MsgStream log( msgSvc(), name() );
1063 log << MSG::INFO << "in finalize()" << endmsg;
1064 return StatusCode::SUCCESS;
1065}
DECLARE_COMPONENT(BesBdkRc)
HepGeom::Point3D< double > HepPoint3D
int runNo
Definition DQA_TO_DB.cxx:13
EvtRecTrackCol::iterator EvtRecTrackIterator
std::vector< HepLorentzVector > Vp4
Definition Gam4pikp.cxx:38
std::vector< int > Vint
Definition Gam4pikp.cxx:37
int Ncut2
Definition Ppjrhopi.cxx:35
int Ncut1
Definition Ppjrhopi.cxx:35
int Ncut0
Definition Ppjrhopi.cxx:35
int Ncut3
Definition Ppjrhopi.cxx:35
int Ncut4
Definition Ppjrhopi.cxx:35
INTupleSvc * ntupleSvc()
IMessageSvc * msgSvc()
double dy() const
double dz() const
double dx() const
const HepLorentzVector p4() const
const HepSymMatrix err() const
const HepVector helix() const
......
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
double chiTof2(int n) const
static ParticleID * instance()
bool IsPidInfoValid() const
double chiTof1(int n) const
void calculate()
void init()
double chiDedx(int n) const
Definition Single.h:8
StatusCode initialize()
Definition Single.cxx:67
StatusCode execute()
Definition Single.cxx:465
StatusCode finalize()
Definition Single.cxx:1058
Single(const std::string &name, ISvcLocator *pSvcLocator)
Definition Single.cxx:50
const HepPoint3D & pivot(void) const
returns pivot position.
const HepVector & a(void) const
returns helix parameters.