BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcHoughFinder Class Reference

#include <Hough.h>

Inheritance diagram for MdcHoughFinder:

Public Member Functions

 MdcHoughFinder (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()
StatusCode beginRun ()
StatusCode bookTuple ()

Detailed Description

Definition at line 40 of file Hough.h.

Constructor & Destructor Documentation

◆ MdcHoughFinder()

MdcHoughFinder::MdcHoughFinder ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 49 of file Hough.cxx.

50 : Algorithm( name, pSvcLocator ) {
51 // Declare the properties
52 declareProperty( "debug", m_debug = 0 );
53 declareProperty( "debugMap", m_debugMap = 0 );
54 declareProperty( "debug2D", m_debug2D = 0 );
55 declareProperty( "debugTrack", m_debugTrack = 0 );
56 declareProperty( "debugStereo", m_debugStereo = 0 );
57 declareProperty( "debugZs", m_debugZs = 0 );
58 declareProperty( "debug3D", m_debug3D = 0 );
59 declareProperty( "debugArbHit", m_debugArbHit = 0 );
60 declareProperty( "hist", m_hist = 1 );
61 declareProperty( "filter", m_filter = 0 );
62 // read raw data setup
63 declareProperty( "keepBadTdc", m_keepBadTdc = 0 );
64 declareProperty( "dropHot", m_dropHot = 0 );
65 declareProperty( "keepUnmatch", m_keepUnmatch = 0 );
66 // combine pattsf
67 declareProperty( "combineTracking", m_combineTracking = false );
68 declareProperty( "removeBadTrack", m_removeBadTrack = 0 );
69 declareProperty( "dropTrkDrCut", m_dropTrkDrCut = 1. );
70 declareProperty( "dropTrkDzCut", m_dropTrkDzCut = 10. );
71 declareProperty( "dropTrkPtCut", m_dropTrkPtCut = 0.12 );
72 declareProperty( "dropTrkChi2Cut", m_dropTrkChi2Cut = 10000. );
73 // input setup
74 declareProperty( "inputType", m_inputType = 0 );
75 // set MdcHoughFinder map
76 declareProperty( "mapCharge", m_mapCharge = -1 ); // 0 use whole ; 1 only half
77 declareProperty( "useHalf", m_useHalf = 0 ); // 0 use whole ; 1 only half
78 declareProperty( "mapHitStyle", m_mapHit = 0 ); // 0 : all ; 1 :axial
79 declareProperty( "nbinTheta", m_nBinTheta = 100 );
80 declareProperty( "nbinRho", m_nBinRho = 100 );
81 declareProperty( "rhoRange", m_rhoRange = 0.1 );
82 declareProperty( "peakWidth", m_peakWidth = 3 );
83 declareProperty( "peakHigh", m_peakHigh = 1 );
84 declareProperty( "hitPro", m_hitPro = 0.4 );
85
86 declareProperty( "recpos", m_recpos = 1 );
87 declareProperty( "recneg", m_recneg = 1 );
88 declareProperty( "combineSelf", m_combine = 1 );
89 declareProperty( "z0CutCompareHough", m_z0Cut_compareHough = 10 );
90
91 // split drift circle
92 declareProperty( "n1", m_npart = 100 );
93 declareProperty( "n2", m_n2 = 16 );
94
95 declareProperty( "pdtFile", m_pdtFile = "pdt.table" );
96 declareProperty( "eventFile", m_evtFile = "EventList" );
97}

Referenced by MdcHoughFinder().

Member Function Documentation

◆ beginRun()

StatusCode MdcHoughFinder::beginRun ( )

Definition at line 99 of file Hough.cxx.

99 {
100 // Initailize MdcDetector
102 if ( NULL == Global::m_gm ) return StatusCode::FAILURE;
103
104 return StatusCode::SUCCESS;
105}
static MdcDetector * instance()
const MdcDetector * m_gm

Referenced by execute().

◆ bookTuple()

StatusCode MdcHoughFinder::bookTuple ( )

Definition at line 1486 of file Hough.cxx.

1486 {
1487 MsgStream log( msgSvc(), name() );
1488 NTuplePtr nt1( ntupleSvc(), "MdcHoughFinder/evt" );
1489 if ( nt1 ) { ntuple_evt = nt1; }
1490 else
1491 {
1492 ntuple_evt = ntupleSvc()->book( "MdcHoughFinder/evt", CLID_ColumnWiseTuple, "evt" );
1493 if ( ntuple_evt )
1494 {
1495 ntuple_evt->addItem( "eventNum", m_eventNum );
1496 ntuple_evt->addItem( "runNum", m_runNum );
1497
1498 ntuple_evt->addItem( "nHit", m_nHit, 0, 6796 );
1499
1500 // ntuple_evt->addItem("layer", m_nHit, m_layer);
1501 // ntuple_evt->addItem("cell", m_nHit, m_cell);
1502 // ntuple_evt->addItem("x", m_nHit, m_x);
1503 // ntuple_evt->addItem("y", m_nHit, m_y);
1504 // ntuple_evt->addItem("u", m_nHit, m_u);
1505 // ntuple_evt->addItem("v", m_nHit, m_v);
1506 // ntuple_evt->addItem("drift", m_nHit, m_drift);
1507 // ntuple_evt->addItem("r", m_nHit, m_r);
1508
1509 // ntuple_evt->addItem("uTruth", m_nHit, m_uTruth);
1510 // ntuple_evt->addItem("vTruth", m_nHit, m_vTruth);
1511 // ntuple_evt->addItem("xTruth", m_nHit, m_xTruth);
1512 // ntuple_evt->addItem("yTruth", m_nHit, m_yTruth);
1513 // ntuple_evt->addItem("driftTruth", m_nHit, m_driftTruth);
1514 // ntuple_evt->addItem("rTruth", m_nHit, m_rTruth);
1515 // ntuple_evt->addItem("type", m_nHit, m_type);
1516
1517 // ntuple_evt->addItem("deltaD", m_nHit, m_deltaD);
1518 // ntuple_evt->addItem("flt", m_nHit, m_flt);
1519 // ntuple_evt->addItem("slant", m_nHit, m_slant);
1520
1521 // ntuple_evt->addItem("nSigAxial", m_nSig_Axial, 0, 6796);
1522 // ntuple_evt->addItem("xybinNum", m_xybinNum, 0,10000000);
1523 // ntuple_evt->addItem("xybinMax", m_xybinMax);
1524 // ntuple_evt->addItem("xybinNL", m_xybinNum, m_xybinNL);
1525 // ntuple_evt->addItem("xybinRL", m_xybinNum, m_xybinRL);
1526 // ntuple_evt->addItem("xybinS", m_xybinNum, m_xybinS);
1527 // ntuple_evt->addItem("theta_left", m_theta_left);
1528 // ntuple_evt->addItem("theta_right", m_theta_right);
1529 // ntuple_evt->addItem("rho_down", m_rho_down);
1530 // ntuple_evt->addItem("rho_up", m_rho_up);
1531 ////by houghmap maxbin value 0~M_PI
1532 // ntuple_evt->addItem("theta", m_theta);
1533 // ntuple_evt->addItem("rho", m_rho);
1534 // ntuple_evt->addItem("height", m_height);
1535 // ntuple_evt->addItem("aver", m_aver);
1536 // ntuple_evt->addItem("sigma", m_sigma);
1537
1538 ////multiturn
1539 // ntuple_evt->addItem("multiturn", m_exit_multiturn);
1540
1541 ////diff two charge
1542 // ntuple_evt->addItem("nMap1pk", m_nMap1Pk, 0,100);
1543 // ntuple_evt->addItem("nMap1tk", m_nMap1Tk, 0,100);
1544 // ntuple_evt->addItem("nMap2pk", m_nMap2Pk, 0,100);
1545 // ntuple_evt->addItem("nMap2tk", m_nMap2Tk, 0,100);
1546 // ntuple_evt->addItem("map1_pkrho", m_nMap1Pk, m_PkRho1);
1547 // ntuple_evt->addItem("map1_pktheta", m_nMap1Pk, m_PkTheta1);
1548 // ntuple_evt->addItem("map1_tkrho", m_nMap1Tk, m_TkRho1);
1549 // ntuple_evt->addItem("map1_tktheta", m_nMap1Tk, m_TkTheta1);
1550 // ntuple_evt->addItem("map2_pkrho", m_nMap2Pk, m_PkRho2);
1551 // ntuple_evt->addItem("map2_pktheta", m_nMap2Pk, m_PkTheta2);
1552 // ntuple_evt->addItem("map2_tkrho", m_nMap2Tk, m_TkRho2);
1553 // ntuple_evt->addItem("map2_tktheta", m_nMap2Tk, m_TkTheta2);
1554
1555 ////MC truth
1556 // ntuple_evt->addItem("thetaline", m_theta_line);
1557 // ntuple_evt->addItem("rholine", m_rho_line);
1558
1559 // ntuple_evt->addItem("nmax", m_nMaxLayerSlant,0,200);
1560 // ntuple_evt->addItem("maxslant", m_nMaxLayerSlant, m_MaxLayerSlant);
1561 // ntuple_evt->addItem("maxslantlayer", m_nMaxLayerSlant, m_MaxLayer);
1562 // ntuple_evt->addItem("nnomax", m_nNoMaxLayerSlant,0,1000);
1563 // ntuple_evt->addItem("nomaxslant", m_nNoMaxLayerSlant, m_NoMaxLayerSlant);
1564 // ntuple_evt->addItem("nomaxlayerid", m_nNoMaxLayerSlant, m_NoMaxLayerid);
1565
1566 // ntuple_evt->addItem("MapMax", m_MapMax );
1567 ntuple_evt->addItem( "nMapPk", m_nMapPk, 0, 100 );
1568 // ntuple_evt->addItem("nPeakNum", m_nMapPk, m_PeakOrder);
1569 // ntuple_evt->addItem("nPeakRho", m_nMapPk, m_PeakRho);
1570 // ntuple_evt->addItem("nPeakTheta", m_nMapPk, m_PeakTheta);
1571 // ntuple_evt->addItem("nPeakHeight", m_nMapPk, m_PeakHeight);
1572 // ntuple_evt->addItem("nPeakHit", m_nMapPk, m_PeakHit);
1573 // ntuple_evt->addItem("nPeakHitA", m_nMapPk, m_PeakHitA);
1574 // ntuple_evt->addItem("nMapTrk", m_nMapTrk, 0,1000);
1575 // ntuple_evt->addItem("nTrkRho", m_nMapTrk, m_TrackRho);
1576 // ntuple_evt->addItem("nTrkTheta", m_nMapTrk, m_TrackTheta);
1577 // ntuple_evt->addItem("nTrkHitA", m_nMapTrk, m_TrackHitA);
1578
1579 // rec - charge
1580 // global 2d fit
1581 // ntuple_evt->addItem("nTrk2D_neg", m_nTrk2D_neg, 0,100);
1582 // ntuple_evt->addItem("pt2D_neg", m_nTrk2D_neg, m_pt2D_neg);
1583 // ntuple_evt->addItem("nHit2D_neg", m_nTrk2D_neg, m_nHit2D_neg);
1584 // ntuple_evt->addItem("chi2_2D_neg", m_nTrk2D_neg, m_chi2_2D_neg);
1585 // //global 3d fit
1586 // ntuple_evt->addItem("nTrk3D_neg", m_nTrk3D_neg, 0,100);
1587 // ntuple_evt->addItem("tanl_neg", m_nTrk3D_neg, m_tanl_neg);
1588 // ntuple_evt->addItem("tanl3D_neg", m_nTrk3D_neg, m_tanl3D_neg);
1589 // ntuple_evt->addItem("z0_neg", m_nTrk3D_neg, m_z0_neg);
1590 // ntuple_evt->addItem("z0_3D_neg", m_nTrk3D_neg, m_z0_3D_neg);
1591 // ntuple_evt->addItem("pro_neg", m_nTrk3D_neg, m_pro_neg);
1592 // ntuple_evt->addItem("pt3D_neg", m_nTrk3D_neg, m_pt3D_neg);
1593 // ntuple_evt->addItem("nHit3D_neg", m_nTrk3D_neg, m_nHit3D_neg);
1594 // ntuple_evt->addItem("chi2_3D_neg", m_nTrk3D_neg, m_chi2_3D_neg);
1595 //
1596 // //truth inf
1597 // // ntuple_evt->addItem("nTrkMC", m_nTrkMC,0,10);
1598 // ntuple_evt->addItem("pidTruth", m_pidTruth);
1599 // ntuple_evt->addItem("costaTruth", m_costaTruth);
1600 // ntuple_evt->addItem("ptTruth", m_ptTruth);
1601 // ntuple_evt->addItem("pzTruth", m_pzTruth);
1602 // ntuple_evt->addItem("pTruth", m_pTruth);
1603 // ntuple_evt->addItem("qTruth", m_qTruth);
1604 // ntuple_evt->addItem("drTruth", m_drTruth);
1605 // ntuple_evt->addItem("phiTruth", m_phi0Truth);
1606 // ntuple_evt->addItem("omegaTruth", m_omegaTruth);
1607 // ntuple_evt->addItem("dzTruth", m_dzTruth);
1608 // ntuple_evt->addItem("tanlTruth", m_tanl_mc);
1609 // ntuple_evt->addItem("rhoTruth", m_rho_mc);
1610 // ntuple_evt->addItem("thetaTruth", m_theta_mc);
1611
1612 ntuple_evt->addItem( "time", m_time );
1613 }
1614 else
1615 {
1616 log << MSG::ERROR << "Cannot book tuple MdcHoughFinder/hough" << endmsg;
1617 return StatusCode::FAILURE;
1618 }
1619 }
1620 /*
1621 NTuplePtr nt2(ntupleSvc(), "MdcHoughFinder/hit");
1622 if ( nt2 ){
1623 ntuplehit= nt2;
1624 } else {
1625 ntuplehit= ntupleSvc()->book("MdcHoughFinder/hit", CLID_ColumnWiseTuple, "hit");
1626 if(ntuplehit){
1627 ntuplehit->addItem("evt_stereo", m_evt_stereo);
1628 ntuplehit->addItem("run_stereo", m_run_stereo);
1629 ntuplehit->addItem("cos_stereo", m_cos_stereo);
1630 ntuplehit->addItem("tanlTruth_stereo", m_tanlTruth_stereo);
1631 ntuplehit->addItem("ncir_stereo", m_ncir_stereo);
1632 ntuplehit->addItem("npair_stereo", m_npair_stereo);
1633 ntuplehit->addItem("tanl_stereo", m_tanl_stereo);
1634 ntuplehit->addItem("tanl3D_stereo", m_tanl3D_stereo);
1635 ntuplehit->addItem("z0_stereo", m_z0_stereo);
1636 ntuplehit->addItem("z03D_stereo", m_z03D_stereo);
1637 ntuplehit->addItem("nHit_axial", m_nHit_axial, 0, 6796);
1638 ntuplehit->addItem("axial_layer", m_nHit_axial, m_axial_layer);
1639 ntuplehit->addItem("axial_wire", m_nHit_axial, m_axial_wire);
1640 ntuplehit->addItem("axial_deltaD", m_nHit_axial, m_axial_deltaD);
1641 ntuplehit->addItem("axial_flt", m_nHit_axial, m_axial_flt);
1642 ntuplehit->addItem("nHit_stereo", m_nHit_stereo, 0, 6796);
1643 ntuplehit->addItem("stereo_layer", m_nHit_stereo, m_stereo_layer);
1644 ntuplehit->addItem("stereo_wire", m_nHit_stereo, m_stereo_wire);
1645 ntuplehit->addItem("stereo_style", m_nHit_stereo, m_stereo_style);
1646 ntuplehit->addItem("stereo_z0", m_nHit_stereo, m_stereo_z0);
1647 ntuplehit->addItem("stereo_z1", m_nHit_stereo, m_stereo_z1);
1648 ntuplehit->addItem("stereo_s0", m_nHit_stereo, m_stereo_s0);
1649 ntuplehit->addItem("stereo_s1", m_nHit_stereo, m_stereo_s1);
1650 ntuplehit->addItem("stereo_z", m_nHit_stereo, m_stereo_z);
1651 ntuplehit->addItem("stereo_s", m_nHit_stereo, m_stereo_s);
1652 ntuplehit->addItem("stereo_zTruth", m_nHit_stereo, m_stereo_zTruth);
1653 ntuplehit->addItem("stereo_sTruth", m_nHit_stereo, m_stereo_sTruth);
1654 ntuplehit->addItem("stereo_deltaZ", m_nHit_stereo, m_stereo_deltaZ);
1655 ntuplehit->addItem("stereo_nsol", m_nHit_stereo, m_stereo_nsol);
1656 ntuplehit->addItem("stereo_ambig", m_nHit_stereo, m_stereo_ambig);
1657 ntuplehit->addItem("stereo_ambig_truth", m_nHit_stereo, m_stereo_ambig_truth);
1658 ntuplehit->addItem("stereo_disToCir", m_nHit_stereo, m_stereo_disToCir);
1659 ntuplehit->addItem("stereo_cirlist", m_nHit_stereo, m_stereo_cirlist);
1660 }
1661 }
1662 */
1663
1664 return StatusCode::SUCCESS;
1665}
INTupleSvc * ntupleSvc()
IMessageSvc * msgSvc()

Referenced by initialize().

◆ execute()

StatusCode MdcHoughFinder::execute ( )

Definition at line 219 of file Hough.cxx.

219 {
220 if ( !m_beginRun )
221 {
222 StatusCode sc = beginRun();
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 // event start time
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; // m_bunchT0-s, getTest-ns
250 }
251 }
252 HoughHit::setBunchTime( m_bunchT0 );
253
254 //-- Get the event header, print out event and run number
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 // prepare tds
272 RecMdcTrackCol* trackList_tds;
273 RecMdcHitCol* hitList_tds;
274 vector<RecMdcTrack*> vec_trackPatTds;
275 int nTdsTk = storeTracks( trackList_tds, hitList_tds, vec_trackPatTds );
276 // print track in pattsf with bad vertex
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 // for arbi hits
291 MdcTrackParams m_par;
292 if ( m_debugArbHit > 0 ) m_par.lPrint = 8;
293 m_par.lRemoveInActive = 1;
294 // m_par.lUseQualCuts=0;
295 // m_par.maxGapLength=99;
296 // m_par.maxChisq=99;
297 // m_par.minHits=99;
298
299 // if filter read eventNum in file
300
301 if ( m_filter )
302 {
303 ifstream lowPt_Evt;
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 //-- Get MDC digi vector
320 if ( m_debug > 0 ) cout << "step1 : prepare digi " << endl;
321 MdcDigiVec mdcDigiVec = prepareDigi();
322
323 //-- Create MdcHoughFinder hit list
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 // if( mdcDigiVec.size() < 10 ) return StatusCode::SUCCESS;
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;
342 MdcHit* mdcHit = new MdcHit( digi, Global::m_gm );
343 MdcHit* mdcHit_pos = new MdcHit( digi, Global::m_gm );
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 ); //, 2dOr3d);
351
352 // if(m_hist) dumpHoughHitList(houghHitList);
353 if ( m_hist ) m_nHit = houghHitList.nHit();
354 if ( m_hist ) dumpHoughMap( *m_map );
355
356 // track
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 // suppose charge -
374 if ( m_debug > 0 ) cout << " suppose charge -1 " << endl;
375 HoughTrack& track_neg = trackList_neg.getTrack( itrack );
376 track_neg.setMdcHit( &mdcHitCol_neg );
377 track_neg.setHoughHitList( houghHitList.getList() );
378 track_neg.setCharge( -1 );
379 stat_2d[0][itrack] = track_neg.fit2D( m_bunchT0 );
380 int track_charge_2d = track_neg.trackCharge2D();
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 // vec_track2D_neg.push_back( &track_neg );
386 // fill 2D inf
387 ifit++;
388 // 3D fit
389 int nHit3d = track_neg.find_stereo_hit();
390 int npair = track_neg.find_pair_hit();
391 // cout<<"npair "<<npair<<endl;
392
393 int track_charge_3d = track_neg.trackCharge3D();
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 // choose fit method
399 if ( npair == 0 ) stat_3d[0][itrack] = track_neg.fit3D();
400 else stat_3d[0][itrack] = track_neg.fit3D_inner();
401 // else stat_3d[0][itrack] = track_neg.fit3D();
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 // fill 3D inf
408 /*
409 if(m_hist){
410 m_tanl_neg[ifit3D] = track_neg.getTanl_zs();
411 m_tanl3D_neg[ifit3D] = track_neg.getTanl();
412 m_z0_neg[ifit3D] = track_neg.getZ0_zs();
413 m_z0_3D_neg[ifit3D] = track_neg.getZ0();
414 m_pro_neg[ifit3D] = track_neg.getPro();
415 m_pt3D_neg[ifit3D] = track_neg.getPt3D();
416 m_nHit3D_neg[ifit3D] = track_neg.getNfit3D();
417 m_chi2_3D_neg[ifit3D] = track_neg.getChi2_3D();
418 }
419 ifit3D++;
420 int axial_use=0;
421 int stereo_use=0;
422 int cir0=0;
423 int cirmore=0;
424 int ncir_track;
425 for(int ister =0;ister<track_neg.getHoughHitList().size();ister++){
426 HoughRecHit *rechit = &(track_neg.getHoughHitList().at(ister));
427 if( rechit->getSlayerType()==0 ) {
428 double deltaD = rechit->getDeltaD();
429 double flt= rechit->getFltLen();
430 if(m_hist){
431 m_axial_layer[axial_use]=rechit->getLayerId();
432 m_axial_wire[axial_use]=rechit->getWireId();
433 m_axial_deltaD[axial_use] = deltaD;
434 m_axial_flt[axial_use] = flt;
435 }
436 //judge which circle
437 int cirlist = rechit->getCirList();
438 if(cirlist == 0) cir0++;
439 else cirmore++;
440 axial_use++;
441 }
442 if( rechit->getSlayerType()!=0 ) {
443 //stereo hit info
444 double z0= rechit->getzAmb(0);
445 double z1= rechit->getzAmb(1);
446 double s0= rechit->getsAmb(0);
447 double s1= rechit->getsAmb(1);
448 int ambig = rechit->getAmbig();
449 int ambigTruth = rechit->getLrTruth();
450 int style = rechit->getStyle();
451 //cout<<"ambig ambigTruth "<<ambig<<" "<<ambigTruth<<endl;
452 double z = rechit->getzPos();
453 double s = rechit->getsPos();
454 double zTruth;
455 double sTruth;
456 if(ambigTruth == 1 ) {zTruth = z0;sTruth=s0;}
457 else if(ambigTruth == -1 ) {zTruth = z1;sTruth=s1;}
458 //calcu dist of hitz to zsline
459 double deltaZ = zTruth - ( sTruth * track_neg.getTanl_zs()+track_neg.getZ0_zs());
460 //else cout<<" not get ambig truth info "<<endl;
461 int nsol = rechit->getnsol();
462 double disToCir= rechit->getDisToCir();
463 int multicir = rechit->getCirList();
464 if(m_hist){
465 m_stereo_layer[stereo_use]=rechit->getLayerId();
466 m_stereo_wire[stereo_use]=rechit->getWireId();
467 m_stereo_style[stereo_use]=style;
468 m_stereo_z0[stereo_use]=z0;
469 m_stereo_z1[stereo_use]=z1;
470 m_stereo_s0[stereo_use]=s0;
471 m_stereo_s1[stereo_use]=s1;
472 m_stereo_z[stereo_use]=z;
473 m_stereo_s[stereo_use]=s;
474 m_stereo_zTruth[stereo_use]=zTruth;
475 m_stereo_sTruth[stereo_use]=sTruth;
476 m_stereo_deltaZ[stereo_use]=deltaZ;
477 m_stereo_nsol[stereo_use]=nsol;
478 m_stereo_ambig[stereo_use]=ambig;
479 m_stereo_ambig_truth[stereo_use]=ambigTruth;
480 m_stereo_disToCir[stereo_use]=disToCir;
481 m_stereo_cirlist[stereo_use]=multicir;
482 }
483 stereo_use++;
484 }
485 }
486 if( cir0>cirmore ) ncir_track = 0;
487 else ncir_track = 1;
488 if(m_hist){
489 m_evt_stereo= t_eventNum;
490 m_run_stereo= t_runNum;
491 m_cos_stereo= t_cos;
492 m_tanlTruth_stereo= t_tanl;
493 m_ncir_stereo= ncir_track;
494 m_npair_stereo= npair;
495 m_tanl_stereo= track_neg.getTanl_zs();
496 m_z0_stereo= track_neg.getZ0_zs();
497 m_tanl3D_stereo= track_neg.getTanl();
498 m_z03D_stereo= track_neg.getZ0();
499 m_nHit_axial= axial_use;
500 m_nHit_stereo = stereo_use;
501 ntuplehit->write();
502 }
503 */
504 }
505
506 std::sort( vec_track_neg.begin(), vec_track_neg.end(), more_pt );
507 // track for clear
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 // do rec pos charge
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 ); //, 2dOr3d);
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 // suppose charge +
541 if ( m_debug > 0 ) cout << " suppose charge +1 " << endl;
542 HoughTrack& track_pos = tracklist_pos.getTrack( itrack );
543 track_pos.setMdcHit( &mdcHitCol_pos );
544 track_pos.setHoughHitList( houghHitList.getList() );
545 track_pos.setCharge( 1 );
546 stat_2d2[0][itrack] = track_pos.fit2D( m_bunchT0 );
547 int track_charge_2d = track_pos.trackCharge2D();
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 // fill 2d inf
552 ifit++;
553 // 3d fit
554 int nHit3d = track_pos.find_stereo_hit();
555 int npair = track_pos.find_pair_hit();
556 // cout<<"npair "<<npair<<endl;
557
558 int track_charge_3d = track_pos.trackCharge3D();
559 if ( m_debug > 0 ) cout << " nhitstereo +1 " << nHit3d << " " << track_charge_3d << endl;
560 if ( nHit3d < 3 || track_pos.trackCharge3D() == 0 ) continue;
561 // choose fit method
562 if ( npair == 0 ) stat_3d2[0][itrack] = track_pos.fit3D();
563 else stat_3d2[0][itrack] = track_pos.fit3D_inner();
564 // else stat_3d2[0][itrack] = track_neg.fit3D();
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 // fill 3d inf
570 ifit3D++;
571 }
572
573 // sort pos tracklist
574 std::sort( vec_track_pos.begin(), vec_track_pos.end(), more_pt );
575
576 // clear pos track
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 // combine hough itself
591 // if(m_debug>0) cout<<"step7 : combine neg&pos track list "<<endl;
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 // add tracklist
600 mdcTrackList_neg += mdcTrackList_pos; // neg -> all charge
601
602 // compare pattsf&hough self
603 if ( m_combineTracking ) nTdsTk = comparePatTsf( mdcTrackList_neg, trackList_tds );
604
605 // store tds
606 if ( m_debug > 0 ) cout << "step8 : store tds " << endl;
607 if ( m_debug > 0 ) cout << "store tds " << endl;
608 int tkId = nTdsTk; // trkid
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; // track find by houghspace set stat=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 // clearMem(mdcTrackList_neg,mdcTrackList_pos);
637 if ( m_debug > 0 ) cout << "end event " << endl;
638
639 return StatusCode::SUCCESS;
640}
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
bool more_pt(const HoughTrack *tracka, const HoughTrack *trackb)
Definition Hough.cxx:1018
static void setBunchTime(double t0)
Definition HoughHit.h:37
void setHoughHitList(vector< HoughHit > vec_hit)
Definition HoughTrack.h:66
int trackCharge2D()
int find_stereo_hit()
int fit2D(double bunchtime)
int trackCharge3D()
void setMdcHit(const vector< MdcHit * > *mdchit)
Definition HoughTrack.h:94
int fit3D_inner()
void setCharge(int charge)
Definition HoughTrack.h:34
int find_pair_hit()
StatusCode beginRun()
Definition Hough.cxx:99

◆ finalize()

StatusCode MdcHoughFinder::finalize ( )

Definition at line 643 of file Hough.cxx.

643 {
644 MsgStream log( msgSvc(), name() );
645 delete m_bfield;
646 log << MSG::INFO << "in finalize()" << endmsg;
647
648 return StatusCode::SUCCESS;
649}

◆ initialize()

StatusCode MdcHoughFinder::initialize ( )

Definition at line 108 of file Hough.cxx.

108 {
109
110 MsgStream log( msgSvc(), name() );
111 log << MSG::INFO << "in initialize()" << endmsg;
112
113 StatusCode sc;
114
115 // particle
116 IPartPropSvc* p_PartPropSvc;
117 static const bool CREATEIFNOTTHERE( true );
118 sc = service( "PartPropSvc", p_PartPropSvc, CREATEIFNOTTHERE );
119 if ( !sc.isSuccess() || 0 == p_PartPropSvc )
120 {
121 log << MSG::ERROR << " Could not initialize PartPropSvc" << endmsg;
122 return sc;
123 }
124 m_particleTable = p_PartPropSvc->PDT();
125
126 // RawData
127 IRawDataProviderSvc* irawDataProviderSvc;
128 sc = service( "RawDataProviderSvc", irawDataProviderSvc );
129 m_rawDataProviderSvc = irawDataProviderSvc;
130 if ( sc.isFailure() )
131 {
132 log << MSG::FATAL << name() << " Could not load RawDataProviderSvc!" << endmsg;
133 return StatusCode::FAILURE;
134 }
135
136 // Geometry
137 IMdcGeomSvc* imdcGeomSvc;
138 sc = service( "MdcGeomSvc", imdcGeomSvc );
139 m_mdcGeomSvc = imdcGeomSvc;
140 if ( sc.isFailure() )
141 {
142 log << MSG::FATAL << "Could not load MdcGeoSvc!" << endmsg;
143 return StatusCode::FAILURE;
144 }
145
146 // magneticfield
147 sc = service( "MagneticFieldSvc", m_pIMF );
148 if ( sc != StatusCode::SUCCESS )
149 { log << MSG::ERROR << "Unable to open Magnetic field service" << endmsg; }
150 m_bfield = new BField( m_pIMF );
151 log << MSG::INFO << "field z = " << m_bfield->bFieldNominal() << endmsg;
152 m_context = new TrkContextEv( m_bfield );
153
154 // read pdt
155 Pdt::readMCppTable( m_pdtFile );
156
157 // Get MdcCalibFunSvc
158 IMdcCalibFunSvc* imdcCalibSvc;
159 sc = service( "MdcCalibFunSvc", imdcCalibSvc );
160 m_mdcCalibFunSvc = imdcCalibSvc;
161 if ( sc.isFailure() )
162 {
163 log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endmsg;
164 return StatusCode::FAILURE;
165 }
166
167 // initialize MdcPrintSvc
168 IMdcPrintSvc* imdcPrintSvc;
169 sc = service( "MdcPrintSvc", imdcPrintSvc );
170 m_mdcPrintSvc = imdcPrintSvc;
171 if ( sc.isFailure() )
172 {
173 log << MSG::FATAL << "Could not load MdcPrintSvc!" << endmsg;
174 return StatusCode::FAILURE;
175 }
176
177 // time
178 sc = service( "BesTimerSvc", m_timersvc );
179 if ( sc.isFailure() )
180 {
181 log << MSG::WARNING << " Unable to locate BesTimerSvc" << endmsg;
182 return StatusCode::FAILURE;
183 }
184 m_timer_all = m_timersvc->addItem( "Execution" );
185 m_timer_all->propName( "nExecution" );
186
187 // initialize static
188 HoughHit::setMdcCalibFunSvc( m_mdcCalibFunSvc );
189 HoughHit::setMdcGeomSvc( m_mdcGeomSvc );
190 HoughHit::setBunchTime( m_bunchT0 );
191 Hough2D::setContext( m_context );
192 Hough2D::setCalib( m_mdcCalibFunSvc );
193 Hough3D::setContext( m_context );
194 Hough3D::setCalib( m_mdcCalibFunSvc );
195
196 HoughHit::_npart = m_npart;
197 HoughMap::m_useHalfCir = m_useHalf;
198 HoughMap::m_N1 = m_npart;
199 HoughMap::m_N2 = m_n2;
200
201 if ( m_debugMap > 0 ) HoughMap::m_debug = 1;
202 if ( m_debug2D > 0 ) Hough2D::m_debug = 1;
203 if ( m_debug3D > 0 ) Hough3D::m_debug = 1;
204 if ( m_debugTrack > 0 ) HoughTrack::m_debug = 1;
205 if ( m_debugStereo > 0 ) HoughStereo::m_debug = 1;
206 if ( m_debugZs > 0 ) HoughZsFit::m_debug = 1;
207 if ( m_debug3D > 4 ) TrkHelixFitter::m_debug = 1;
208
209 if ( m_hist ) sc = bookTuple();
210 if ( sc.isFailure() )
211 {
212 log << MSG::FATAL << "Could not book Tuple !" << endmsg;
213 return StatusCode::FAILURE;
214 }
215 return StatusCode::SUCCESS;
216}
static void setContext(TrkContextEv *context)
Definition Hough2D.h:54
static int m_debug
Definition Hough2D.h:68
static void setCalib(const IMdcCalibFunSvc *mdcCalibFunSvc)
Definition Hough2D.h:55
static int m_debug
Definition Hough3D.h:72
static void setContext(TrkContextEv *context)
Definition Hough3D.h:58
static void setCalib(const IMdcCalibFunSvc *mdcCalibFunSvc)
Definition Hough3D.h:59
static int _npart
Definition HoughHit.h:48
static void setMdcGeomSvc(IMdcGeomSvc *geomSvc)
Definition HoughHit.h:36
static void setMdcCalibFunSvc(const IMdcCalibFunSvc *calibSvc)
Definition HoughHit.h:35
static int m_useHalfCir
Definition HoughMap.h:60
static int m_N2
Definition HoughMap.h:62
static int m_N1
Definition HoughMap.h:61
static int m_debug
Definition HoughMap.h:59
static int m_debug
Definition HoughStereo.h:27
static bool m_debug
Definition HoughTrack.h:79
static int m_debug
Definition HoughZsFit.h:26
StatusCode bookTuple()
Definition Hough.cxx:1486
static void readMCppTable(std::string filenm)

The documentation for this class was generated from the following files: