219 {
220 if ( !m_beginRun )
221 {
223 if ( sc.isFailure() )
224 {
225 error() <<
"beginRun failed" << endmsg;
226 return StatusCode::FAILURE;
227 }
228 m_beginRun = true;
229 }
230
231 MsgStream log(
msgSvc(), name() );
232 log << MSG::INFO << "in execute()" << endmsg;
233 cout.precision( 6 );
234
235 m_timer_all->start();
236
237
238 SmartDataPtr<RecEsTimeCol> evTimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
239 if ( !evTimeCol )
240 {
241 log << MSG::WARNING << "Could not find EvTimeCol" << endmsg;
242 return StatusCode::SUCCESS;
243 }
244 else
245 {
246 RecEsTimeCol::iterator iter_evt = evTimeCol->begin();
247 if ( iter_evt != evTimeCol->end() )
248 {
249 m_bunchT0 = ( *iter_evt )->getTest() * 1.e-9;
250 }
251 }
253
254
255 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
256 if ( !eventHeader )
257 {
258 log << MSG::FATAL << "Could not find Event Header" << endmsg;
259 return StatusCode::FAILURE;
260 }
261
262 t_eventNum = eventHeader->eventNumber();
263 t_runNum = eventHeader->runNumber();
264 if ( m_hist )
265 {
266 m_eventNum = eventHeader->eventNumber();
267 m_runNum = eventHeader->runNumber();
268 }
269 if ( m_debug > 0 ) cout << "begin evt " << eventHeader->eventNumber() << endl;
270
271
274 vector<RecMdcTrack*> vec_trackPatTds;
275 int nTdsTk = storeTracks( trackList_tds, hitList_tds, vec_trackPatTds );
276
277 if ( m_debug > 0 )
278 {
279 RecMdcTrackCol::iterator iteritrk_pattsf = vec_trackPatTds.begin();
280 for ( ; iteritrk_pattsf != vec_trackPatTds.end(); iteritrk_pattsf++ )
281 {
282 cout << "in PATTSF LOST: " << ( *iteritrk_pattsf )->helix( 0 ) << " "
283 << ( *iteritrk_pattsf )->helix( 1 ) << " " << ( *iteritrk_pattsf )->helix( 2 )
284 << " " << ( *iteritrk_pattsf )->helix( 3 ) << " "
285 << ( *iteritrk_pattsf )->helix( 4 ) << " chi2 " << ( *iteritrk_pattsf )->chi2()
286 << endl;
287 }
288 }
289
290
291 MdcTrackParams m_par;
292 if ( m_debugArbHit > 0 ) m_par.
lPrint = 8;
294
295
296
297
298
299
300
301 if ( m_filter )
302 {
304 lowPt_Evt.open( m_evtFile.c_str() );
305 vector<int> evtlist;
306 int evtNum;
307 while ( lowPt_Evt >> evtNum ) { evtlist.push_back( evtNum ); }
308 vector<int>::iterator iter_evt = find( evtlist.begin(), evtlist.end(), t_eventNum );
309 if ( iter_evt == evtlist.end() )
310 {
311 setFilterPassed( false );
312 return StatusCode::SUCCESS;
313 }
314 else setFilterPassed( true );
315 }
316
317 if ( m_inputType == -1 ) GetMcInfo();
318
319
320 if ( m_debug > 0 ) cout << "step1 : prepare digi " << endl;
322
323
324 bool debugTruth = false;
325 if ( m_inputType == -1 ) debugTruth = true;
326 if ( m_debug > 0 ) cout << "step2 : hits-> hough hit list " << endl;
327 HoughHitList houghHitList( mdcDigiVec );
328
329
330 if ( houghHitList.nHit() < 10 || houghHitList.nHit() > 500 ) return StatusCode::SUCCESS;
331 if ( m_debug > 0 ) houghHitList.printAll();
332 if ( debugTruth ) houghHitList.addTruthInfo( g_tkParTruth );
333
334 vector<MdcHit*> mdcHitCol_neg;
335 vector<MdcHit*> mdcHitCol_pos;
336 MdcDigiVec::iterator
iter = mdcDigiVec.begin();
337
338 for ( ;
iter != mdcDigiVec.end();
iter++ )
339 {
340 const MdcDigi* digi = ( *iter );
341 if ( HoughHit( digi ).driftTime() > 1000 || HoughHit( digi ).driftTime() <= 0 ) continue;
344 mdcHitCol_neg.push_back( mdcHit );
345 mdcHitCol_pos.push_back( mdcHit_pos );
346 }
347
348 HoughMap* m_map =
349 new HoughMap( -1, houghHitList, m_mapHit, m_nBinTheta, m_nBinRho, -1. * m_rhoRange,
350 m_rhoRange, m_peakWidth, m_peakHigh, m_hitPro );
351
352
353 if ( m_hist ) m_nHit = houghHitList.nHit();
354 if ( m_hist ) dumpHoughMap( *m_map );
355
356
357 if ( m_debug > 0 ) cout << "step3 : neg track list " << endl;
358 vector<HoughTrack*> vec_track_neg;
359 vector<HoughTrack*> vec_track2D_neg;
360 MdcTrackList mdcTrackList_neg( m_par );
361 if ( m_recneg )
362 {
363
364 HoughTrackList trackList_neg( *m_map );
365 int trackList_size = trackList_neg.getTrackNum();
366 vector<vector<int>> stat_2d( 2, vector<int>( trackList_size, 0 ) );
367 vector<vector<int>> stat_3d( 2, vector<int>( trackList_size, 0 ) );
368 int ifit = 0;
369 int ifit3D = 0;
370 for ( int itrack = 0; itrack < trackList_size; itrack++ )
371 {
372 if ( m_debug > 0 ) cout << "begin track: " << itrack << endl;
373
374 if ( m_debug > 0 ) cout << " suppose charge -1 " << endl;
375 HoughTrack& track_neg = trackList_neg.getTrack( itrack );
379 stat_2d[0][itrack] = track_neg.
fit2D( m_bunchT0 );
381 if ( m_debug > 0 )
382 cout << " charge -1 stat2d " << stat_2d[0][itrack] << " " << track_charge_2d << endl;
383
384 if ( stat_2d[0][itrack] == 0 || track_charge_2d == 0 ) continue;
385
386
387 ifit++;
388
391
392
394 if ( m_debug > 0 ) cout << " nhitstereo -1 " << nHit3d << " " << track_charge_3d << endl;
395
396 if ( nHit3d < 3 || track_charge_3d == 0 ) continue;
397
398
399 if ( npair == 0 ) stat_3d[0][itrack] = track_neg.
fit3D();
401
402
403 if ( m_debug > 0 ) cout << " charge -1 stat3d " << stat_3d[0][itrack] << " " << endl;
404
405 if ( stat_3d[0][itrack] == 0 ) continue;
406 vec_track_neg.push_back( &track_neg );
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504 }
505
506 std::sort( vec_track_neg.begin(), vec_track_neg.end(),
more_pt );
507
508 vector<MdcTrack*> vec_MdcTrack_neg;
509 for ( unsigned int i = 0; i < vec_track_neg.size(); i++ )
510 {
511 MdcTrack* mdcTrack = new MdcTrack( vec_track_neg[i]->getTrk() );
512 vec_MdcTrack_neg.push_back( mdcTrack );
513 if ( m_debug > 0 )
514 cout << "trackneg: " << i << " pt " << vec_track_neg[i]->getPt3D() << endl;
515 if ( m_debug > 0 ) vec_track_neg[i]->print();
516 }
517 if ( m_debug > 0 ) cout << "step4 : judge neg track list " << endl;
518 judgeHit( mdcTrackList_neg, vec_MdcTrack_neg );
519 if ( m_debug > 0 ) cout << "finish - charge " << endl;
520 }
521
522
523
524 HoughMap* m_map2 =
525 new HoughMap( 1, houghHitList, m_mapHit, m_nBinTheta, m_nBinRho, -1. * m_rhoRange,
526 m_rhoRange, m_peakWidth, m_peakHigh, m_hitPro );
527 if ( m_debug > 0 ) cout << "step5 : pos track list " << endl;
528 vector<HoughTrack*> vec_track_pos;
529 MdcTrackList mdcTrackList_pos( m_par );
530 if ( m_recpos )
531 {
532 HoughTrackList tracklist_pos( *m_map2 );
533 int tracklist_size2 = tracklist_pos.getTrackNum();
534 vector<vector<int>> stat_2d2( 2, vector<int>( tracklist_size2, 0 ) );
535 vector<vector<int>> stat_3d2( 2, vector<int>( tracklist_size2, 0 ) );
536 int ifit = 0;
537 int ifit3D = 0;
538 for ( int itrack = 0; itrack < tracklist_size2; itrack++ )
539 {
540
541 if ( m_debug > 0 ) cout << " suppose charge +1 " << endl;
542 HoughTrack& track_pos = tracklist_pos.getTrack( itrack );
546 stat_2d2[0][itrack] = track_pos.
fit2D( m_bunchT0 );
548 if ( m_debug > 0 )
549 cout << " charge +1 stat2d " << stat_2d2[1][itrack] << " " << track_charge_2d << endl;
550 if ( stat_2d2[0][itrack] == 0 || track_charge_2d == 0 ) continue;
551
552 ifit++;
553
556
557
559 if ( m_debug > 0 ) cout << " nhitstereo +1 " << nHit3d << " " << track_charge_3d << endl;
560 if ( nHit3d < 3 || track_pos.
trackCharge3D() == 0 )
continue;
561
562 if ( npair == 0 ) stat_3d2[0][itrack] = track_pos.
fit3D();
563 else stat_3d2[0][itrack] = track_pos.
fit3D_inner();
564
565
566 if ( m_debug > 0 ) cout << " charge +1 stat3d " << stat_3d2[1][itrack] << " " << endl;
567 if ( stat_3d2[0][itrack] == 0 ) continue;
568 vec_track_pos.push_back( &track_pos );
569
570 ifit3D++;
571 }
572
573
574 std::sort( vec_track_pos.begin(), vec_track_pos.end(),
more_pt );
575
576
577 vector<MdcTrack*> vec_MdcTrack_pos;
578 for ( unsigned int i = 0; i < vec_track_pos.size(); i++ )
579 {
580 MdcTrack* mdcTrack = new MdcTrack( vec_track_pos[i]->getTrk() );
581 vec_MdcTrack_pos.push_back( mdcTrack );
582 if ( m_debug > 0 )
583 cout << "trackpos : " << i << " pt " << vec_track_pos[i]->getPt3D() << endl;
584 if ( m_debug > 0 ) vec_track_pos[i]->print();
585 }
586 if ( m_debug > 0 ) cout << "step6 : judge pos track list " << endl;
587 judgeHit( mdcTrackList_pos, vec_MdcTrack_pos );
588 }
589
590
591
592 if ( m_combine )
593 {
594 compareHough( mdcTrackList_neg );
595 compareHough( mdcTrackList_pos );
596 }
597 if ( mdcTrackList_neg.length() != 0 && mdcTrackList_pos.length() != 0 )
598 judgeChargeTrack( mdcTrackList_neg, mdcTrackList_pos );
599
600 mdcTrackList_neg += mdcTrackList_pos;
601
602
603 if ( m_combineTracking ) nTdsTk = comparePatTsf( mdcTrackList_neg, trackList_tds );
604
605
606 if ( m_debug > 0 ) cout << "step8 : store tds " << endl;
607 if ( m_debug > 0 ) cout << "store tds " << endl;
608 int tkId = nTdsTk;
609 for ( unsigned int i = 0; i < mdcTrackList_neg.length(); i++ )
610 {
611 if ( m_debug > 0 )
612 cout << "- charge size i : " << i << " " << mdcTrackList_neg.length() << endl;
613 int tkStat = 4;
614 mdcTrackList_neg[i]->storeTrack( tkId, trackList_tds, hitList_tds, tkStat );
615 tkId++;
616 delete mdcTrackList_neg[i];
617 }
618 if ( m_debug > 0 ) m_mdcPrintSvc->printRecMdcTrackCol();
619
620 m_timer_all->stop();
621 double t_teventTime = m_timer_all->elapsed();
622 if ( m_hist ) m_time = t_teventTime;
623
624 if ( m_hist ) ntuple_evt->write();
625
626 delete m_map;
627 delete m_map2;
628 if ( m_debug > 0 ) cout << "after delete map " << endl;
629 for ( int ihit = 0; ihit < mdcHitCol_neg.size(); ihit++ )
630 {
631 delete mdcHitCol_neg[ihit];
632 delete mdcHitCol_pos[ihit];
633 }
634
635 if ( m_debug > 0 ) cout << "after delete hit" << endl;
636
637 if ( m_debug > 0 ) cout << "end event " << endl;
638
639 return StatusCode::SUCCESS;
640}
std::vector< MdcDigi * > MdcDigiVec
bool more_pt(const HoughTrack *tracka, const HoughTrack *trackb)
ObjectVector< RecMdcHit > RecMdcHitCol
ObjectVector< RecMdcTrack > RecMdcTrackCol
static void setBunchTime(double t0)
void setHoughHitList(vector< HoughHit > vec_hit)
int fit2D(double bunchtime)
void setMdcHit(const vector< MdcHit * > *mdchit)
void setCharge(int charge)