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

#include <MdcTrkRecon.h>

Inheritance diagram for MdcTrkRecon:

Public Member Functions

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

Protected Member Functions

bool ignoringUsedHits () const
bool poisoningHits () const
void fillSegList ()
void fillTrackList ()
void dumpDigi ()
void dumpTdsTrack (RecMdcTrackCol *trackList)
void fillMcTruth ()
void fillEvent ()
StatusCode bookNTuple ()

Detailed Description

Definition at line 32 of file MdcTrkRecon.h.

Constructor & Destructor Documentation

◆ MdcTrkRecon()

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

Definition at line 69 of file MdcTrkRecon.cxx.

70 : Algorithm( name, pSvcLocator )
71 , m_hitData( 0 )
72 , m_segs( 0 )
73 , m_tracks( 0 )
74 , m_segFinder( 0 ) {
75 // Declare the properties--------------------------------
76 declareProperty( "FittingMethod", m_fittingMethod = 2 );
77 declareProperty( "ConfigFile", m_configFile = "MDCConfig.xml" );
78 declareProperty( "OnlyUnusedHits", m_onlyUnusedHits = 0 );
79 declareProperty( "PoisonHits", m_poisonHits = 0 );
80 declareProperty( "doLineFit", m_doLineFit = false );
81 declareProperty( "paramFile", m_paramFile = "params" );
82 declareProperty( "pdtFile", m_pdtFile = "pdt.table" );
83 declareProperty( "allHit", m_allHit = 1 );
84 declareProperty( "hist", m_hist = false );
85 declareProperty( "recForEsTime", m_recForEsTime = false );
86 declareProperty( "tryBunch", m_tryBunch = false );
87 declareProperty( "d0Cut", m_d0Cut = -999. );
88 declareProperty( "z0Cut", m_z0Cut = -999. );
89 declareProperty( "dropTrkPt", m_dropTrkPt = -999. );
90 declareProperty( "debug", m_debug = 0 );
91 declareProperty( "mcHist", m_mcHist = false );
92 declareProperty( "fieldCosmic", m_fieldCosmic = false );
93 declareProperty( "doSag", m_doSagFlag = false );
94 declareProperty( "arbitrateHits", m_arbitrateHits = true );
95
96 declareProperty( "helixHitsSigma", m_helixHitsSigma );
97 // for fill hist
98 declareProperty( "getDigiFlag", m_getDigiFlag = 0 );
99 declareProperty( "maxMdcDigi", m_maxMdcDigi = 0 );
100 declareProperty( "keepBadTdc", m_keepBadTdc = 0 );
101 declareProperty( "dropHot", m_dropHot = 0 );
102 declareProperty( "keepUnmatch", m_keepUnmatch = 0 );
103 declareProperty( "minMdcDigi", m_minMdcDigi = 0 );
104 declareProperty( "selEvtNo", m_selEvtNo );
105 declareProperty( "combineTracking", m_combineTracking = false ); // yzhang 2010-05-28
106 declareProperty( "noInner", m_noInner = false ); // yzhang 2016-10-12
107
108#ifdef MDCPATREC_RESLAYER
109 declareProperty( "resLayer", m_resLayer = -1 );
110#endif
111}

Referenced by MdcTrkRecon().

◆ ~MdcTrkRecon()

MdcTrkRecon::~MdcTrkRecon ( )

Definition at line 113 of file MdcTrkRecon.cxx.

113 {
114 m_segs.reset( 0 );
115 m_segFinder.reset( 0 );
116 m_hitData.reset( 0 );
117 m_tracks.reset( 0 );
118}

Member Function Documentation

◆ beginRun()

StatusCode MdcTrkRecon::beginRun ( )

Definition at line 121 of file MdcTrkRecon.cxx.

121 {
122 MsgStream log( msgSvc(), name() );
123 log << MSG::INFO << "in beginRun()" << endmsg;
124
125 // Detector geometry
126 _gm = MdcDetector::instance( m_doSagFlag );
127
128 if ( NULL == _gm ) return StatusCode::FAILURE;
129
130 // Initialize segList
131 m_segs.reset( new MdcSegList( _gm->nSuper(), m_flags.segPar ) );
132
133 return StatusCode::SUCCESS;
134}
IMessageSvc * msgSvc()
static MdcDetector * instance()

Referenced by execute().

◆ bookNTuple()

StatusCode MdcTrkRecon::bookNTuple ( )
protected

Definition at line 561 of file MdcTrkRecon.cxx.

561 {
562 MsgStream log( msgSvc(), name() );
563 StatusCode sc = StatusCode::SUCCESS;
564
565 //--------------book histogram------------------
566 h_sfHit = histoSvc()->book( "sfHit", "Hits after segment finding", 46, -1., 44. );
567 // g_actHit = histoSvc()->book( "actHit", "Active hits",46,-1.,44. );
568 // g_hitEff = histoSvc()->book( "hitEff", "Hit efficiency in the event",100,-0.5,1.2 );
570 histoSvc()->book( "residVsLayer", "Residual vs. layer", 60, -5, 50., 100, -0.5, 1.2 );
572 histoSvc()->book( "residVsDoca", "Residial vs. doca", 50, -2., 2., 100, -0.5, 1.2 );
573 // segment
574 // g_segChi2 = histoSvc()->book( "segChi2", "chi2 per dof in segment finding",101,-1.,100.
575 // );
577 histoSvc()->book( "cirTkChi2", "chi2 per dof in circle finding", 21, -1., 20. );
578 g_3dTkChi2 = histoSvc()->book( "chi2Helix", "maxChisq dof helix fit", 51., -1., 50 );
579 g_nSigAdd = histoSvc()->book(
580 "nSigAdd", "max allowed n sigma to add hit to existing segment", 50, 0, 50 );
581 g_z0Cut =
582 histoSvc()->book( "z0Cut", "z0 for including stereo segs in cluster", 100, 0, 600 );
583 g_ctCut =
584 histoSvc()->book( "ctCut", "ct for including stereo segs in cluster", 100, -50, 50 );
585 g_delCt = histoSvc()->book( "delCt", "del ct cut forming seg group", 100, -20, 20 );
586 g_delZ0 = histoSvc()->book( "delZ0", "del z0 cut forming seg group", 100, -60, 60 );
587 g_phiDiff = histoSvc()->book( "phiDiff", "phidiff mult for drop dup seg", 100, -0.5, 6.5 );
588 g_slopeDiff = histoSvc()->book( "slopeDiff", "slopediff for drop dup seg", 100, -0.3, 0.3 );
590 histoSvc()->book( "maxSegChisqAx", "max chisqDof ax seg combine", 1000, 0., 1000. );
592 histoSvc()->book( "maxSegChisqSt", "max chisqDof st seg combine", 200, -10., 200. );
593 g_pickHitWire = histoSvc()->book( "pickHitWire", "nWire of pickHit", 600, -288, 288 );
594
595 // for(int i=0;i<11;i++){
596 // char title1[80],title2[80];
597 // sprintf(title1,"segChi2Pat3%d",i);
598 // sprintf(title2,"segChi2Pat4%d",i);
599 // g_segChi2SlayPat3[i] = histoSvc()->book( title1, "chi2/dof per layer of
600 // pat3",710,-10.,700. ); g_segChi2SlayPat4[i] = histoSvc()->book( title2, "chi2/dof per
601 // layer of pat4",710,-10.,700. );
602 // }
603
604 // book tuple of wire efficiency
605 NTuplePtr ntWireEff( ntupleSvc(), "MdcWire/mc" );
606 if ( ntWireEff ) { m_tupleWireEff = ntWireEff; }
607 else
608 {
609 m_tupleWireEff = ntupleSvc()->book( "MdcWire/mc", CLID_ColumnWiseTuple, "MdcWire" );
610 if ( m_tupleWireEff )
611 {
612 sc = m_tupleWireEff->addItem( "tkId", m_we_tkId );
613 sc = m_tupleWireEff->addItem( "pdg", m_we_pdg );
614 sc = m_tupleWireEff->addItem( "primary", m_we_primary );
615 sc = m_tupleWireEff->addItem( "layer", m_we_layer );
616 sc = m_tupleWireEff->addItem( "wire", m_we_wire );
617 sc = m_tupleWireEff->addItem( "gwire", m_we_gwire );
618 sc = m_tupleWireEff->addItem( "poisoned", m_we_poisoned );
619 sc = m_tupleWireEff->addItem( "seg", m_we_seg );
620 sc = m_tupleWireEff->addItem( "track", m_we_track );
621 sc = m_tupleWireEff->addItem( "pt", m_we_pt );
622 sc = m_tupleWireEff->addItem( "theta", m_we_theta );
623 sc = m_tupleWireEff->addItem( "phi", m_we_phi );
624 // sc = m_tupleWireEff->addItem ("tdc", m_we_tdc);
625 }
626 else { log << MSG::ERROR << "Cannot book tuple MdcWire/mc" << endmsg; }
627 }
628
629 // book tuple of test
630 NTuplePtr ntt( ntupleSvc(), "MdcRec/test" );
631 if ( ntt ) { m_tuplet = ntt; }
632 else
633 {
634 m_tuplet =
635 ntupleSvc()->book( "MdcRec/test", CLID_ColumnWiseTuple, "MdcTrkRecon t particle" );
636 if ( m_tuplet )
637 {
638 sc = m_tuplet->addItem( "layer", m_tl );
639 sc = m_tuplet->addItem( "wire", m_tw );
640 sc = m_tuplet->addItem( "phi", m_tphi );
641 sc = m_tuplet->addItem( "dphi", m_tdphi );
642 sc = m_tuplet->addItem( "dncell", m_tdncell );
643 }
644 else
645 {
646 log << MSG::ERROR << "Cannot book tuple MdcRec/test" << endmsg;
647 // return StatusCode::FAILURE;
648 }
649 }
650
651 // book tuple of MC truth
652 NTuplePtr ntMc( ntupleSvc(), "MdcMc/mcTk" );
653 if ( ntMc ) { m_tupleMc = ntMc; }
654 else
655 {
656 m_tupleMc =
657 ntupleSvc()->book( "MdcMc/mcTk", CLID_ColumnWiseTuple, "MdcTrkRecon Mc particle" );
658 if ( m_tupleMc )
659 {
660 sc = m_tupleMc->addItem( "evtNo", m_tMcEvtNo );
661 sc = m_tupleMc->addItem( "nDigi", m_tMcNTk );
662 }
663 else
664 {
665 log << MSG::ERROR << "Cannot book tuple MdcMc/mcTk" << endmsg;
666 // return StatusCode::FAILURE;
667 }
668 }
669
670 // book tuple of MC truth
671 NTuplePtr ntMcHit( ntupleSvc(), "MdcMc/mcHit" );
672 if ( ntMcHit ) { m_tupleMcHit = ntMcHit; }
673 else
674 {
676 ntupleSvc()->book( "MdcMc/mcHit", CLID_ColumnWiseTuple, "MdcTrkRecon Mc hit" );
677 if ( m_tupleMcHit )
678 {
679 sc = m_tupleMcHit->addItem( "tkId", m_tMcTkId );
680 sc = m_tupleMcHit->addItem( "pid", m_tMcPid );
681 sc = m_tupleMcHit->addItem( "px", m_tMcPx );
682 sc = m_tupleMcHit->addItem( "py", m_tMcPy );
683 sc = m_tupleMcHit->addItem( "pz", m_tMcPz );
684 sc = m_tupleMcHit->addItem( "d0", m_tMcD0 );
685 sc = m_tupleMcHit->addItem( "z0", m_tMcZ0 );
686 sc = m_tupleMcHit->addItem( "theta", m_tMcTheta );
687 sc = m_tupleMcHit->addItem( "fiterm", m_tMcFiTerm );
688 sc = m_tupleMcHit->addItem( "nMcHit", m_tMcNHit, 0, 6796 );
689 sc = m_tupleMcHit->addIndexedItem( "layer", m_tMcNHit, m_tMcLayer );
690 sc = m_tupleMcHit->addIndexedItem( "wire", m_tMcNHit, m_tMcWire );
691 sc = m_tupleMcHit->addIndexedItem( "drift", m_tMcNHit, m_tMcDrift );
692 sc = m_tupleMcHit->addIndexedItem( "x", m_tMcNHit, m_tMcX );
693 sc = m_tupleMcHit->addIndexedItem( "y", m_tMcNHit, m_tMcY );
694 sc = m_tupleMcHit->addIndexedItem( "z", m_tMcNHit, m_tMcZ );
695 sc = m_tupleMcHit->addIndexedItem( "lr", m_tMcNHit, m_tMcLR );
696 }
697 else
698 {
699 log << MSG::ERROR << "Cannot book tuple MdcMc/mcHit" << endmsg;
700 // return StatusCode::FAILURE;
701 }
702 }
703 // book tuple of recnstruction results
704 NTuplePtr nt1( ntupleSvc(), "MdcRec/rec" );
705 if ( nt1 ) { m_tuple1 = nt1; }
706 else
707 {
708 m_tuple1 = ntupleSvc()->book( "MdcRec/rec", CLID_ColumnWiseTuple, "MdcTrkRecon results" );
709 if ( m_tuple1 )
710 {
711 sc = m_tuple1->addItem( "t0", m_t0 );
712 sc = m_tuple1->addItem( "t0Stat", m_t0Stat );
713 sc = m_tuple1->addItem( "t0Truth", m_t0Truth );
714
715 sc = m_tuple1->addItem( "nTdsTk", m_nTdsTk );
716 sc = m_tuple1->addItem( "nMcTk", m_nMcTk );
717
718 sc = m_tuple1->addItem( "p", m_p );
719 sc = m_tuple1->addItem( "pt", m_pt );
720 sc = m_tuple1->addItem( "nSlay", m_nSlay );
721 sc = m_tuple1->addItem( "pz", m_pz );
722 sc = m_tuple1->addItem( "d0", m_d0 );
723 sc = m_tuple1->addItem( "phi0", m_phi0 );
724 sc = m_tuple1->addItem( "cpa", m_cpa );
725 sc = m_tuple1->addItem( "z0", m_z0 );
726 sc = m_tuple1->addItem( "tanl", m_tanl );
727 sc = m_tuple1->addItem( "q", m_q );
728 sc = m_tuple1->addItem( "pocax", m_pocax );
729 sc = m_tuple1->addItem( "pocay", m_pocay );
730 sc = m_tuple1->addItem( "pocaz", m_pocaz );
731
732 sc = m_tuple1->addItem( "evtNo", m_evtNo );
733 sc = m_tuple1->addItem( "nSt", m_nSt );
734 sc = m_tuple1->addItem( "nAct", m_nAct );
735 sc = m_tuple1->addItem( "nDof", m_nDof );
736 sc = m_tuple1->addItem( "chi2", m_chi2 );
737 sc = m_tuple1->addItem( "tkId", m_tkId );
738 sc = m_tuple1->addItem( "nHit", m_nHit, 0, 6796 );
739 sc = m_tuple1->addIndexedItem( "resid", m_nHit, m_resid );
740 sc = m_tuple1->addIndexedItem( "sigma", m_nHit, m_sigma );
741 sc = m_tuple1->addIndexedItem( "driftD", m_nHit, m_driftD );
742 sc = m_tuple1->addIndexedItem( "driftT", m_nHit, m_driftT );
743 sc = m_tuple1->addIndexedItem( "doca", m_nHit, m_doca );
744 sc = m_tuple1->addIndexedItem( "entra", m_nHit, m_entra );
745 sc = m_tuple1->addIndexedItem( "ambig", m_nHit, m_ambig );
746 sc = m_tuple1->addIndexedItem( "fltLen", m_nHit, m_fltLen );
747 sc = m_tuple1->addIndexedItem( "tof", m_nHit, m_tof );
748 sc = m_tuple1->addIndexedItem( "act", m_nHit, m_act );
749 sc = m_tuple1->addIndexedItem( "tdc", m_nHit, m_tdc );
750 sc = m_tuple1->addIndexedItem( "adc", m_nHit, m_adc );
751 sc = m_tuple1->addIndexedItem( "layer", m_nHit, m_layer );
752 sc = m_tuple1->addIndexedItem( "wire", m_nHit, m_wire );
753 sc = m_tuple1->addIndexedItem( "x", m_nHit, m_x );
754 sc = m_tuple1->addIndexedItem( "y", m_nHit, m_y );
755 sc = m_tuple1->addIndexedItem( "z", m_nHit, m_z );
756 sc = m_tuple1->addIndexedItem( "dx", m_nHit, m_dx );
757 sc = m_tuple1->addIndexedItem( "dy", m_nHit, m_dy );
758 sc = m_tuple1->addIndexedItem( "dz", m_nHit, m_dz );
759 sc = m_tuple1->addIndexedItem( "dDriftD", m_nHit, m_dDriftD );
760 sc = m_tuple1->addIndexedItem( "dlr", m_nHit, m_dlr );
761 sc = m_tuple1->addIndexedItem( "cellWidth", m_nHit, m_cellWidth ); // for pickHits tuning
762 }
763 else
764 {
765 log << MSG::ERROR << "Cannot book tuple MdcRec/rec" << endmsg;
766 // return StatusCode::FAILURE;
767 }
768 }
769 // book tuple of segment
770 NTuplePtr ntSeg( ntupleSvc(), "MdcSeg/seg" );
771 if ( ntSeg ) { m_tupleSeg = ntSeg; }
772 else
773 {
774 m_tupleSeg =
775 ntupleSvc()->book( "MdcSeg/seg", CLID_ColumnWiseTuple, "MdcTrkRecon segment data" );
776 if ( m_tupleSeg )
777 {
778 sc = m_tupleSeg->addItem( "evtNo", m_tsEvtNo );
779 sc = m_tupleSeg->addItem( "nSeg", m_tsNSeg );
780 sc = m_tupleSeg->addItem( "nDigi", m_tsNDigi, 0, 6796 );
781 sc = m_tupleSeg->addIndexedItem( "layer", m_tsNDigi, m_tsLayer );
782 sc = m_tupleSeg->addIndexedItem( "wire", m_tsNDigi, m_tsWire );
783 sc = m_tupleSeg->addIndexedItem( "inSeg", m_tsNDigi, m_tsInSeg );
784 sc = m_tupleSeg->addIndexedItem( "mcTkId", m_tsNDigi, m_tsMcTkId );
785 }
786 else
787 {
788 log << MSG::ERROR << "Cannot book tuple MdcSeg/seg" << endmsg;
789 // return StatusCode::FAILURE;
790 }
791 }
792
793 // book tuple of event
794 NTuplePtr nt4( ntupleSvc(), "MdcRec/evt" );
795 if ( nt4 ) { m_tupleEvt = nt4; }
796 else
797 {
798 m_tupleEvt =
799 ntupleSvc()->book( "MdcRec/evt", CLID_ColumnWiseTuple, "MdcTrkRecon event data" );
800 if ( m_tupleEvt )
801 {
802 sc = m_tupleEvt->addItem( "evtNo", m_t4EvtNo );
803 sc = m_tupleEvt->addItem( "nMcTk", m_t4nMcTk );
804 sc = m_tupleEvt->addItem( "nTdsTk", m_t4nRecTk );
805 sc = m_tupleEvt->addItem( "t0", m_t4t0 );
806 sc = m_tupleEvt->addItem( "t0Stat", m_t4t0Stat );
807 sc = m_tupleEvt->addItem( "t0Truth", m_t4t0Truth );
808 sc = m_tupleEvt->addItem( "nDigiUn", m_t4nDigiUnmatch );
809 sc = m_tupleEvt->addItem( "nDigi", m_t4nDigi, 0, 6796 );
810 sc = m_tupleEvt->addIndexedItem( "layer", m_t4nDigi, m_t4Layer );
811 sc = m_tupleEvt->addIndexedItem( "wire", m_t4nDigi, m_t4Wire );
812 sc = m_tupleEvt->addIndexedItem( "rt", m_t4nDigi, m_t4Time );
813 sc = m_tupleEvt->addIndexedItem( "rc", m_t4nDigi, m_t4Charge );
814 sc = m_tupleEvt->addIndexedItem( "phiMid", m_t4nDigi, m_t4PhiMid );
815 sc = m_tupleEvt->addIndexedItem( "hot", m_t4nDigi, m_t4Hot );
816 // sc = m_tupleEvt->addIndexedItem ("recHit", m_t4nDigi, m_t4recHit);
817 // sc = m_tupleEvt->addIndexedItem ("rawHit", m_t4nDigi, m_t4rawHit);
818 }
819 else
820 {
821 log << MSG::ERROR << "Cannot book N-tuple: MdcRec/evt" << endmsg;
822 // return StatusCode::FAILURE;
823 }
824 }
825
826 // book tuple of residula for every layer
827 NTuplePtr ntCombAx( ntupleSvc(), "MdcCombAx/combAx" );
828 if ( ntCombAx ) { g_tupleCombAx = ntCombAx; }
829 else
830 {
831 g_tupleCombAx = ntupleSvc()->book( "MdcCombAx/combAx", CLID_RowWiseTuple,
832 "MdcTrkRecon cuts in combine ax seg" );
833 if ( g_tupleCombAx )
834 {
835 sc = g_tupleCombAx->addItem( "dPhi0", g_combAxdPhi0 );
836 sc = g_tupleCombAx->addItem( "dCurv", g_combAxdCurv );
837 sc = g_tupleCombAx->addItem( "sigPhi0", g_combAxSigPhi0 );
838 sc = g_tupleCombAx->addItem( "sigCurv", g_combAxSigCurv );
839 sc = g_tupleCombAx->addItem( "slSeed", g_combAxSlSeed );
840 sc = g_tupleCombAx->addItem( "slTest", g_combAxSlTest );
841 sc = g_tupleCombAx->addItem( "qSeed", g_combAxQualitySeed );
842 sc = g_tupleCombAx->addItem( "qTest", g_combAxQualityTest );
843 sc = g_tupleCombAx->addItem( "pSeed", g_combAxPatSeed );
844 sc = g_tupleCombAx->addItem( "pTest", g_combAxPatTest );
845 sc = g_tupleCombAx->addItem( "nHitSeed", g_combAxNhitSeed );
846 sc = g_tupleCombAx->addItem( "nHitTest", g_combAxNhitTest );
847 sc = g_tupleCombAx->addItem( "mc", g_combAxMc );
848 sc = g_tupleCombAx->addItem( "ptTruth", g_combAxMcPt );
849 sc = g_tupleCombAx->addItem( "thetaTruth", g_combAxMcTheta );
850 sc = g_tupleCombAx->addItem( "phiTruth", g_combAxMcPhi );
851 sc = g_tupleCombAx->addItem( "ambigSeed", g_combAxMcAmbigSeed );
852 sc = g_tupleCombAx->addItem( "ambigTest", g_combAxMcAmbigTest );
853 }
854 else
855 {
856 log << MSG::ERROR << "Cannot book N-tuple: FILE101/combAx" << endmsg;
857 // return StatusCode::FAILURE;
858 }
859 }
860
861 // book tuple of residula for every layer
862 NTuplePtr ntFindSeg( ntupleSvc(), "MdcSeg/findSeg" );
863 if ( ntFindSeg ) { g_tupleFindSeg = ntFindSeg; }
864 else
865 {
866 g_tupleFindSeg = ntupleSvc()->book( "MdcSeg/findSeg", CLID_RowWiseTuple,
867 "MdcTrkRecon cuts in segment finder" );
868 if ( g_tupleFindSeg )
869 {
870 sc = g_tupleFindSeg->addItem( "chi2", g_findSegChi2 );
871 sc = g_tupleFindSeg->addItem( "slope", g_findSegSlope );
872 sc = g_tupleFindSeg->addItem( "intercept", g_findSegIntercept );
873 sc = g_tupleFindSeg->addItem( "chi2Refit", g_findSegChi2Refit );
874 sc = g_tupleFindSeg->addItem( "chi2Add", g_findSegChi2Add );
875 sc = g_tupleFindSeg->addItem( "pat", g_findSegPat );
876 sc = g_tupleFindSeg->addItem( "pat34", g_findSegPat34 );
877 sc = g_tupleFindSeg->addItem( "nhit", g_findSegNhit );
878 sc = g_tupleFindSeg->addItem( "slayer", g_findSegSl );
879 sc = g_tupleFindSeg->addItem( "mc", g_findSegMc );
880 sc = g_tupleFindSeg->addItem( "ambig", g_findSegAmbig );
881 }
882 else
883 {
884 log << MSG::ERROR << "Cannot book N-tuple: FILE101/findSeg" << endmsg;
885 // return StatusCode::FAILURE;
886 }
887 }
888
889 // book tuple of event
890 NTuplePtr ntPick( ntupleSvc(), "MdcTrk/pick" );
891 if ( ntPick ) { m_tuplePick = ntPick; }
892 else
893 {
895 ntupleSvc()->book( "MdcTrk/pick", CLID_ColumnWiseTuple, "MdcTrkRecon pickHits" );
896 if ( m_tuplePick )
897 {
898 sc = m_tuplePick->addItem( "layer", m_pickLayer );
899 sc = m_tuplePick->addItem( "nCell", m_pickNCell, 0, 288 );
900 sc = m_tuplePick->addItem( "nCellWithDigi", m_pickNCellWithDigi, 0, 288 );
901 sc = m_tuplePick->addIndexedItem( "wire", m_pickNCellWithDigi, m_pickWire );
902 sc = m_tuplePick->addIndexedItem( "predDrift", m_pickNCellWithDigi, m_pickPredDrift );
903 sc = m_tuplePick->addIndexedItem( "drift", m_pickNCellWithDigi, m_pickDrift );
904 sc = m_tuplePick->addIndexedItem( "driftTruth", m_pickNCellWithDigi, m_pickDriftTruth );
905 sc = m_tuplePick->addIndexedItem( "phiZOk", m_pickNCellWithDigi, m_pickPhizOk );
906 sc = m_tuplePick->addIndexedItem( "z", m_pickNCellWithDigi, m_pickZ );
907 sc = m_tuplePick->addIndexedItem( "resid", m_pickNCellWithDigi, m_pickResid );
908 sc = m_tuplePick->addIndexedItem( "sigma", m_pickNCellWithDigi, m_pickSigma );
909 sc = m_tuplePick->addIndexedItem( "phiLowCut", m_pickNCellWithDigi, m_pickPhiLowCut );
910 sc = m_tuplePick->addIndexedItem( "phiHighCut", m_pickNCellWithDigi, m_pickPhiHighCut );
911 sc = m_tuplePick->addIndexedItem( "goodDriftCut", m_pickNCellWithDigi, m_pickDriftCut );
912 sc = m_tuplePick->addIndexedItem( "mcTk", m_pickNCellWithDigi, m_pickMcTk );
913 sc = m_tuplePick->addIndexedItem( "is2d", m_pickNCellWithDigi, m_pickIs2D );
914 sc = m_tuplePick->addIndexedItem( "pt", m_pickNCellWithDigi, m_pickPt );
915 sc = m_tuplePick->addIndexedItem( "curv", m_pickNCellWithDigi, m_pickCurv );
916 }
917 else
918 {
919 log << MSG::ERROR << "Cannot book N-tuple: MdcTrk/pick" << endmsg;
920 // return StatusCode::FAILURE;
921 }
922 }
923
924#ifdef MDCPATREC_TIMETEST
925 // book tuple of time test
926 NTuplePtr nt5( ntupleSvc(), "MdcTime/ti" );
927 if ( nt5 ) { m_tupleTime = nt5; }
928 else
929 {
930 m_tupleTime = ntupleSvc()->book( "MdcTime/ti", CLID_RowWiseTuple, "MdcTrkRecon time" );
931 if ( m_tupleTime )
932 {
933 sc = m_tupleTime->addItem( "eventtime", m_eventTime );
934 sc = m_tupleTime->addItem( "recTkNum", m_t5recTkNum );
935 sc = m_tupleTime->addItem( "mcTkNum", m_mcTkNum );
936 sc = m_tupleTime->addItem( "evtNo", m_t5EvtNo );
937 sc = m_tupleTime->addItem( "nHit", m_t5nHit );
938 sc = m_tupleTime->addItem( "nDigi", m_t5nDigi );
939 }
940 else
941 {
942 log << MSG::ERROR << "Cannot book N-tuple: FILE101/time" << endmsg;
943 // return StatusCode::FAILURE;
944 }
945 }
946 sc = service( "BesTimerSvc", m_timersvc );
947 if ( sc.isFailure() )
948 {
949 log << MSG::WARNING << " Unable to locate BesTimerSvc" << endmsg;
950 // return StatusCode::FAILURE;
951 }
952 m_timer[1] = m_timersvc->addItem( "Execution" );
953 m_timer[1]->propName( "nExecution" );
954#endif
955
956#ifdef MDCPATREC_RESLAYER
957 // book tuple of residula for every layer
958 NTuplePtr nt6( ntupleSvc(), "MdcRes/res" );
959 if ( nt6 ) { g_tupleres = nt6; }
960 else
961 {
962 g_tupleres = ntupleSvc()->book( "MdcRes/res", CLID_RowWiseTuple, "MdcTrkRecon res" );
963 if ( g_tupleres )
964 {
965 sc = g_tupleres->addItem( "resid", g_resLayer );
966 sc = g_tupleres->addItem( "layer", g_t6Layer );
967 }
968 else
969 {
970 log << MSG::ERROR << "Cannot book N-tuple: FILE101/res" << endmsg;
971 return StatusCode::FAILURE;
972 }
973 }
974#endif
975
976 return sc;
977} // end of bookNTuple()
NTuple::Array< long > m_tsLayer
NTuple::Array< double > m_entra
NTuple::Array< long > m_tsMcTkId
NTuple::Item< double > g_findSegMc
NTuple::Tuple * m_tupleMcHit
NTuple::Tuple * m_tupleSeg
NTuple::Item< double > m_t4nMcTk
NTuple::Array< double > m_tMcLR
NTuple::Array< double > m_adc
NTuple::Item< long > m_tsNDigi
NTuple::Item< double > g_combAxMcPt
NTuple::Item< long > m_tMcNHit
NTuple::Item< double > g_combAxSlTest
NTuple::Array< double > m_dDriftD
NTuple::Array< double > m_dz
NTuple::Array< double > m_ambig
NTuple::Array< long > m_pickIs2D
NTuple::Item< double > m_tMcEvtNo
NTuple::Item< double > m_nSt
NTuple::Item< long > m_we_poisoned
NTuple::Item< double > m_we_pt
NTuple::Item< double > g_combAxQualitySeed
NTuple::Array< long > m_t4Layer
NTuple::Item< double > g_combAxPatSeed
NTuple::Item< double > m_nSlay
NTuple::Item< long > m_tMcTkId
NTuple::Item< long > m_t4nDigi
NTuple::Array< double > m_pickPt
NTuple::Tuple * g_tupleFindSeg
NTuple::Item< long > m_pickLayer
NTuple::Item< double > m_pocax
NTuple::Item< double > m_tMcPz
NTuple::Array< long > m_pickMcTk
NTuple::Array< double > m_dlr
NTuple::Item< double > g_combAxMcAmbigTest
NTuple::Item< int > g_findSegPat34
NTuple::Item< double > m_p
NTuple::Item< double > g_findSegAmbig
NTuple::Item< long > m_tMcNTk
NTuple::Item< int > g_findSegPat
NTuple::Array< long > m_tsWire
AIDA::IHistogram1D * g_pickHitWire
NTuple::Item< long > m_pickNCellWithDigi
NTuple::Array< double > m_tof
NTuple::Array< double > m_tMcWire
NTuple::Item< double > m_we_phi
AIDA::IHistogram1D * g_delCt
AIDA::IHistogram1D * g_phiDiff
NTuple::Array< double > m_pickPhiLowCut
NTuple::Array< double > m_doca
NTuple::Item< double > m_tMcPx
NTuple::Item< double > g_findSegChi2Refit
NTuple::Item< double > m_phi0
NTuple::Item< long > m_tw
NTuple::Item< double > m_nDof
NTuple::Array< double > m_tdc
NTuple::Item< long > m_t4EvtNo
NTuple::Item< double > m_tMcPy
NTuple::Item< long > m_we_layer
NTuple::Tuple * m_tupleWireEff
NTuple::Item< double > m_tdncell
NTuple::Array< double > m_tMcZ
NTuple::Array< long > m_t4Wire
NTuple::Array< double > m_pickDriftCut
NTuple::Item< double > m_z0
NTuple::Item< long > m_nHit
NTuple::Item< double > m_tMcTheta
NTuple::Item< double > g_findSegIntercept
AIDA::IHistogram1D * g_nSigAdd
NTuple::Item< double > m_tdphi
NTuple::Array< double > m_act
NTuple::Item< long > m_we_primary
NTuple::Item< double > m_pz
NTuple::Array< double > m_tMcX
NTuple::Array< double > m_wire
NTuple::Item< double > m_pocay
NTuple::Item< double > m_tMcZ0
NTuple::Item< long > m_we_seg
NTuple::Array< double > m_t4Charge
NTuple::Item< double > m_evtNo
NTuple::Item< long > m_we_tkId
NTuple::Item< double > m_d0
NTuple::Array< double > m_pickCurv
NTuple::Item< double > m_we_theta
NTuple::Item< long > m_we_track
NTuple::Array< double > m_resid
NTuple::Array< double > m_pickDrift
NTuple::Item< long > m_tMcPid
NTuple::Item< long > m_we_pdg
NTuple::Array< double > m_tMcY
NTuple::Item< double > m_tMcD0
NTuple::Item< double > m_t4t0
NTuple::Array< double > m_z
AIDA::IHistogram1D * g_delZ0
AIDA::IHistogram1D * g_z0Cut
NTuple::Array< double > m_pickResid
NTuple::Array< int > m_pickPhizOk
NTuple::Item< long > m_we_wire
NTuple::Item< double > m_t4nRecTk
NTuple::Item< double > m_q
AIDA::IHistogram2D * g_residVsLayer
NTuple::Array< double > m_x
NTuple::Item< double > g_combAxMcTheta
AIDA::IHistogram1D * g_cirTkChi2
AIDA::IHistogram1D * g_maxSegChisqSt
NTuple::Item< long > m_tsNSeg
NTuple::Item< double > g_findSegChi2
NTuple::Item< double > g_combAxQualityTest
AIDA::IHistogram1D * h_sfHit
NTuple::Item< double > m_chi2
NTuple::Item< double > m_t0
NTuple::Array< double > m_pickSigma
AIDA::IHistogram1D * g_3dTkChi2
NTuple::Item< long > m_t4t0Stat
NTuple::Item< double > g_combAxNhitTest
AIDA::IHistogram2D * g_residVsDoca
NTuple::Item< double > g_combAxSigPhi0
NTuple::Item< double > m_nTdsTk
NTuple::Item< double > m_tphi
NTuple::Item< double > g_combAxdCurv
NTuple::Array< long > m_pickWire
NTuple::Item< double > m_pocaz
NTuple::Array< double > m_tMcDrift
NTuple::Tuple * m_tupleEvt
NTuple::Item< double > g_findSegChi2Add
NTuple::Array< double > m_cellWidth
NTuple::Tuple * m_tuplePick
NTuple::Item< double > m_nMcTk
NTuple::Array< double > m_pickDriftTruth
NTuple::Item< double > g_findSegSlope
NTuple::Item< double > g_combAxSigCurv
NTuple::Array< double > m_driftT
NTuple::Item< double > m_tMcFiTerm
NTuple::Item< long > m_tl
NTuple::Array< double > m_dx
NTuple::Array< long > m_tsInSeg
NTuple::Array< double > m_dy
NTuple::Tuple * m_tuple1
NTuple::Item< double > m_t4t0Truth
NTuple::Item< double > m_t0Truth
NTuple::Item< double > g_combAxdPhi0
NTuple::Array< double > m_pickZ
AIDA::IHistogram1D * g_slopeDiff
NTuple::Array< double > m_pickPredDrift
NTuple::Array< double > m_tMcLayer
NTuple::Item< int > g_findSegSl
NTuple::Array< double > m_t4PhiMid
NTuple::Array< double > m_layer
NTuple::Item< double > m_pt
NTuple::Item< double > m_cpa
NTuple::Array< double > m_driftD
NTuple::Item< double > m_tanl
NTuple::Item< double > m_t0Stat
NTuple::Array< double > m_sigma
NTuple::Item< double > g_combAxPatTest
NTuple::Item< double > g_combAxNhitSeed
NTuple::Item< double > m_nAct
NTuple::Item< double > g_combAxMc
NTuple::Item< long > m_we_gwire
NTuple::Item< long > m_t4nDigiUnmatch
NTuple::Array< double > m_y
AIDA::IHistogram1D * g_maxSegChisqAx
AIDA::IHistogram1D * g_ctCut
NTuple::Array< double > m_t4Time
NTuple::Item< double > g_combAxSlSeed
NTuple::Tuple * g_tupleCombAx
NTuple::Tuple * m_tupleMc
NTuple::Item< long > m_pickNCell
NTuple::Item< double > g_combAxMcAmbigSeed
NTuple::Item< long > m_tsEvtNo
NTuple::Item< double > g_combAxMcPhi
NTuple::Array< double > m_fltLen
NTuple::Array< double > m_pickPhiHighCut
NTuple::Item< double > m_tkId
NTuple::Tuple * m_tuplet
NTuple::Array< double > m_t4Hot
NTuple::Item< int > g_findSegNhit
INTupleSvc * ntupleSvc()
IHistogramSvc * histoSvc()

Referenced by initialize().

◆ dumpDigi()

void MdcTrkRecon::dumpDigi ( )
protected

Definition at line 1409 of file MdcTrkRecon.cxx.

1409 {
1410 uint32_t getDigiFlag = 0;
1411 getDigiFlag += m_maxMdcDigi;
1412 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1413 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1414 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1415 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1416 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1417 std::cout << name() << " dump MdcDigiVec, nDigi=" << mdcDigiVec.size() << std::endl;
1418 for ( int iDigi = 0; iter != mdcDigiVec.end(); iter++, iDigi++ )
1419 {
1420 long l = MdcID::layer( ( *iter )->identify() );
1421 long w = MdcID::wire( ( *iter )->identify() );
1422 int tkTruth = ( *iter )->getTrackIndex();
1423 double tdc = RawDataUtil::MdcTime( ( *iter )->getTimeChannel() );
1424 double adc = RawDataUtil::MdcCharge( ( *iter )->getChargeChannel() );
1425 std::cout << "(" << l << "," << w << ";" << tkTruth << ",t " << tdc << ",c " << adc << ")";
1426 if ( iDigi % 4 == 0 ) std::cout << std::endl;
1427 }
1428 std::cout << std::endl;
1429}
double w
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
Definition MdcID.cxx:47
static int wire(const Identifier &id)
Definition MdcID.cxx:52
static double MdcTime(int timeChannel)
static double MdcCharge(int chargeChannel)

Referenced by execute().

◆ dumpTdsTrack()

void MdcTrkRecon::dumpTdsTrack ( RecMdcTrackCol * trackList)
protected

Definition at line 1198 of file MdcTrkRecon.cxx.

1198 {
1199 std::cout << "tksize = " << trackList->size() << std::endl; // yzhang debug
1200 RecMdcTrackCol::iterator it = trackList->begin();
1201 for ( ; it != trackList->end(); it++ )
1202 {
1203 RecMdcTrack* tk = *it;
1204 std::cout << endl << "//====RecMdcTrack " << tk->trackId() << "====:" << std::endl;
1205 cout << " d0 " << tk->helix( 0 ) << " phi0 " << tk->helix( 1 ) << " cpa " << tk->helix( 2 )
1206 << " z0 " << tk->helix( 3 ) << " tanl " << tk->helix( 4 ) << endl;
1207 std::cout << " q " << tk->charge() << " theta " << tk->theta() << " phi " << tk->phi()
1208 << " x0 " << tk->x() << " y0 " << tk->y() << " z0 " << tk->z() << " r0 "
1209 << tk->r() << endl;
1210 std::cout << " p " << tk->p() << " pt " << tk->pxy() << " px " << tk->px() << " py "
1211 << tk->py() << " pz " << tk->pz() << endl;
1212 std::cout << " tkStat " << tk->stat() << " chi2 " << tk->chi2() << " ndof " << tk->ndof()
1213 << " nhit " << tk->getNhits() << " nst " << tk->nster() << endl;
1214 std::cout << "errmat mat " << std::endl;
1215 std::cout << tk->err() << std::endl;
1216 // std::cout<< "errmat array " << std::endl;
1217 // for (int i=0; i<15; i++){ std::cout<< " "<<tk->err(i); }
1218 // std::cout<< " " << std::endl;
1219
1220 int nhits = tk->getVecHits().size();
1221 std::cout << nhits << " Hits: " << std::endl;
1222 for ( int ii = 0; ii < nhits; ii++ )
1223 {
1224 Identifier id( tk->getVecHits()[ii]->getMdcId() );
1225 int layer = MdcID::layer( id );
1226 int wire = MdcID::wire( id );
1227 cout << "(" << layer << "," << wire << "," << tk->getVecHits()[ii]->getStat()
1228 << ",lr:" << tk->getVecHits()[ii]->getFlagLR() << ") ";
1229 } // end of hit list
1230 std::cout << " " << std::endl;
1231 } // end of tk list
1232 std::cout << " " << std::endl;
1233} // end of dumpTdsTrack
const HepSymMatrix err() const
const HepVector helix() const
......

◆ execute()

StatusCode MdcTrkRecon::execute ( )

Definition at line 210 of file MdcTrkRecon.cxx.

210 {
211 if ( !m_beginRun )
212 {
213 StatusCode sc = beginRun();
214 if ( sc.isFailure() )
215 {
216 error() << "beginRun failed" << endmsg;
217 return StatusCode::FAILURE;
218 }
219 m_beginRun = true;
220 }
221
222 setFilterPassed( false );
223
224 MsgStream log( msgSvc(), name() );
225 log << MSG::INFO << "in execute()" << endmsg;
226
227 // Initialize
228 if ( m_hist > 0 )
229 {
230 for ( int ii = 0; ii < 43; ii++ )
231 {
232 for ( int jj = 0; jj < 288; jj++ )
233 {
234 haveDigiTk[ii][jj] = -2;
235 haveDigiPt[ii][jj] = -2;
236 haveDigiTheta[ii][jj] = -999.;
237 haveDigiPhi[ii][jj] = -999.;
238 haveDigiDrift[ii][jj] = -999.;
239 haveDigiAmbig[ii][jj] = -999.;
240 recHitMap[ii][jj] = 0;
241 mcDrift[ii][jj] = -99.;
242 mcX[ii][jj] = -99.;
243 mcY[ii][jj] = -99.;
244 mcZ[ii][jj] = -99.;
245 mcLR[ii][jj] = -99.;
246 hitPoisoned[ii][jj] = -99;
247 }
248 }
249 }
250
251 TrkContextEv context( m_bfield );
252#ifdef MDCPATREC_TIMETEST
253 m_timer[1]->start();
254 ti_nHit = 0;
255#endif
256 //------------------read event header--------------
257 SmartDataPtr<Event::EventHeader> evtHead( eventSvc(), "/Event/EventHeader" );
258 if ( !evtHead )
259 {
260 log << MSG::FATAL << "Could not retrieve event header" << endmsg;
261 return ( StatusCode::FAILURE );
262 }
263 t_eventNo = evtHead->eventNumber();
264 if ( m_debug != 0 )
265 std::cout << t_iExexute << " run " << evtHead->runNumber() << " evt " << t_eventNo
266 << std::endl;
267 t_iExexute++;
268
269 if ( m_selEvtNo.size() > 0 )
270 {
271 std::vector<int>::iterator it = m_selEvtNo.begin();
272 for ( ; it != m_selEvtNo.end(); it++ )
273 {
274 if ( ( *it ) == t_eventNo ) setFilterPassed( true );
275 }
276 }
277 //------------------get event start time-----------
278 double t0 = 0.;
279 t_t0 = -1.;
280 t_t0Stat = -1;
281 bool iterateT0 = false;
282 const int nBunch = 3; // 3 bunch/event
283 double iBunch = 0; // form 0 to 2
284 double BeamDeltaTime = 24. / nBunch; // 8ns
285 SmartDataPtr<RecEsTimeCol> evTimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
286 if ( !evTimeCol || evTimeCol->size() == 0 )
287 {
288 log << MSG::WARNING << " run " << evtHead->runNumber() << " evt " << t_eventNo
289 << " Could not find RecEsTimeCol" << endmsg;
290 if ( m_fieldCosmic )
291 { // yzhang temp for bes3 csmc test
292 return StatusCode::SUCCESS;
293 }
294 }
295 RecEsTimeCol::iterator iter_evt = evTimeCol->begin();
296 // skip RecEsTimeCol no rec data
297 if ( iter_evt != evTimeCol->end() )
298 {
299 t_t0Stat = ( *iter_evt )->getStat();
300 t_t0 = ( *iter_evt )->getTest();
301
302 if ( m_doLineFit )
303 {
304 // t0 -= m_t0Const;
305 if ( abs( t_t0 ) < 0.00001 || ( t_t0 < 0 ) || ( t_t0 > 9999.0 ) )
306 {
307 log << MSG::WARNING << "Skip with t0 = " << t_t0 << endmsg;
308 return StatusCode::SUCCESS; // for bes3 cosmic test
309 }
310 }
311 t0 = t_t0 * 1.e-9;
312 if ( m_debug > 0 ) std::cout << name() << " t0 " << t0 << " " << std::endl;
313 }
314
315restart:
316 if ( !m_recForEsTime && m_tryBunch )
317 {
318 if ( t_t0Stat < 10 ) return StatusCode::SUCCESS;
319 }
320 if ( m_tryBunch )
321 {
322 if ( iBunch > ( nBunch - 1 ) ) return StatusCode::SUCCESS;
323 if ( t_t0Stat < 0 ) { iterateT0 = true; }
324 if ( iterateT0 )
325 {
326 // double EventDeltaTime = 24.;//24ns/event
327 if ( ( t_t0Stat > -1 ) && ( fabs( iBunch * BeamDeltaTime - t_t0 ) < 2. ) )
328 {
329 ++iBunch;
330 goto restart;
331 }
332 else { t0 = iBunch * BeamDeltaTime * 1.e-9; }
333 ++iBunch;
334 }
335 }
336
337 SmartDataPtr<MdcHitMap> hitMap( eventSvc(), "/Event/Hit/MdcHitMap" );
338 if ( !hitMap )
339 {
340 log << MSG::FATAL << "Could not retrieve MDC hit map" << endmsg;
341 return ( StatusCode::FAILURE );
342 }
343 //---------------------Read an event--------------
344 SmartDataPtr<MdcHitCol> hitCol( eventSvc(), "/Event/Hit/MdcHitCol" );
345 if ( !hitCol )
346 {
347 log << MSG::FATAL << "Could not retrieve MDC hit list" << endmsg;
348 return ( StatusCode::FAILURE );
349 }
350 StatusCode sc;
351
352 //---------- register RecMdcTrackCol and RecMdcHitCol to tds---------
353 DataObject* aReconEvent;
354 eventSvc()->findObject( "/Event/Recon", aReconEvent );
355 if ( aReconEvent == NULL )
356 {
357 aReconEvent = new ReconEvent();
358 StatusCode sc = eventSvc()->registerObject( "/Event/Recon", aReconEvent );
359 if ( sc != StatusCode::SUCCESS )
360 {
361 log << MSG::FATAL << "Could not register ReconEvent" << endmsg;
362 return ( StatusCode::FAILURE );
363 }
364 }
365
366 DataObject* aTrackCol;
367 DataObject* aRecHitCol;
368 // yzhang 2010-05-28
369 SmartIF<IDataManagerSvc> dataManSvc( eventSvc() );
370 if ( !m_combineTracking )
371 {
372 eventSvc()->findObject( "/Event/Recon/RecMdcTrackCol", aTrackCol );
373 if ( aTrackCol )
374 {
375 dataManSvc->clearSubTree( "/Event/Recon/RecMdcTrackCol" );
376 eventSvc()->unregisterObject( "/Event/Recon/RecMdcTrackCol" );
377 }
378 eventSvc()->findObject( "/Event/Recon/RecMdcHitCol", aRecHitCol );
379 if ( aRecHitCol )
380 {
381 dataManSvc->clearSubTree( "/Event/Recon/RecMdcHitCol" );
382 eventSvc()->unregisterObject( "/Event/Recon/RecMdcHitCol" );
383 }
384 }
385
386 RecMdcTrackCol* trackList;
387 eventSvc()->findObject( "/Event/Recon/RecMdcTrackCol", aTrackCol );
388 if ( aTrackCol ) { trackList = dynamic_cast<RecMdcTrackCol*>( aTrackCol ); }
389 else
390 {
391 trackList = new RecMdcTrackCol;
392 sc = eventSvc()->registerObject( EventModel::Recon::RecMdcTrackCol, trackList );
393 if ( !sc.isSuccess() )
394 {
395 log << MSG::FATAL << " Could not register RecMdcTrack collection" << endmsg;
396 return StatusCode::FAILURE;
397 }
398 }
399 RecMdcHitCol* hitList;
400 eventSvc()->findObject( "/Event/Recon/RecMdcHitCol", aRecHitCol );
401 if ( aRecHitCol ) { hitList = dynamic_cast<RecMdcHitCol*>( aRecHitCol ); }
402 else
403 {
404 hitList = new RecMdcHitCol;
405 sc = eventSvc()->registerObject( EventModel::Recon::RecMdcHitCol, hitList );
406 if ( !sc.isSuccess() )
407 {
408 log << MSG::FATAL << " Could not register RecMdcHit collection" << endmsg;
409 return StatusCode::FAILURE;
410 }
411 }
412
413 if ( m_debug > 0 ) std::cout << name() << " t0 " << t0 << " " << std::endl;
414 m_hitData->loadevent( hitCol, hitMap, t0 );
415 t_nDigi = hitCol->size();
416
417 if ( poisoningHits() ) { m_hitData->poisonHits( _gm, m_debug ); }
418
419 if ( ( m_hist > 0 ) && m_tupleWireEff )
420 {
421 for ( int i = 0; i < m_hitData->nhits(); i++ )
422 {
423 const MdcHit* thisHit = m_hitData->hit( i );
424 int l = thisHit->layernumber();
425 int w = thisHit->wirenumber();
426 if ( m_hitData->segUsage().get( thisHit )->deadHit() ) { hitPoisoned[l][w] = 1; }
427 else { hitPoisoned[l][w] = 0; }
428 }
429 }
430
431#ifdef MDCPATREC_TIMETEST
432 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
433 if ( !mcParticleCol ) { log << MSG::INFO << "Could not retrieve McParticelCol" << endmsg; }
434 m_mcTkNum = mcParticleCol->size();
435#endif
436
437 if ( m_debug > 1 ) dumpDigi();
438 //--------------------------------------------------------------------------
439 // Segment finding
440 //--------------------------------------------------------------------------
441 int nSegs = 0;
442 if ( m_flags.findSegs )
443 {
444 // Form track segments in superlayers
445 nSegs = m_segFinder->createSegs( _gm, *m_segs, m_hitData->segUsage(), m_hitData->hitMap(),
446 t0 );
447 }
448 log << MSG::INFO << " Found " << nSegs << " segments" << endmsg;
449 if ( m_debug > 1 )
450 {
451 std::cout << "------------------------------------------------" << std::endl;
452 std::cout << "==event " << t_eventNo << " Found " << nSegs << " segments" << std::endl;
453 m_segs->plot();
454 }
455
456 if ( m_flags.lHist || m_flags.segPar.lPrint ) { fillSegList(); }
457
458 //--------------------------------------------------------------------------
459 // Combine segments to form track
460 //--------------------------------------------------------------------------
461 int nTracks = 0;
462 int nDeleted = 0;
463 if ( m_flags.findTracks && m_flags.findSegs )
464 {
465 if ( nSegs > 2 )
466 {
467 nTracks =
468 m_tracks->createFromSegs( m_segs.get(), m_hitData->hitMap(), _gm, context, t0 );
469 }
470
471 if ( m_arbitrateHits ) nDeleted = m_tracks->arbitrateHits();
472 int nKeep = nTracks - nDeleted;
473
474 if ( m_debug > 0 && ( nTracks - nDeleted ) > 0 )
475 {
476 std::cout << "MdcTrkRecon: evt " << setw( 5 ) << t_eventNo << " nDigi " << setw( 4 )
477 << t_nDigi << " t0 " << setw( 5 ) << t_t0 << " keep " << nKeep << " track(s)";
478 if ( nDeleted != 0 ) { std::cout << ",deleted " << nDeleted; }
479 std::cout << std::endl; // yzhang debug
480 }
481 else
482 {
483 if ( m_debug > 0 )
484 {
485 std::cout << "MdcTrkRecon: evt " << setw( 5 ) << t_eventNo << " nDigi " << setw( 4 )
486 << t_nDigi << " t0 " << setw( 5 ) << t_t0 << " found 0 track " << endl;
487 }
488 }
489
490 if ( m_flags.lHist ) t_nRecTk = nKeep;
491
492#ifdef MDCPATREC_RESLAYER
493 m_tracks->setResLayer( m_resLayer );
494#endif
495 if ( m_flags.lHist ) { fillTrackList(); }
496 // Stick the found tracks into the list in TDS
497 m_tracks->store( trackList, hitList );
498 // if (m_debug>1) { dumpTdsTrack(trackList); }
499 if ( m_debug > 1 )
500 {
501 std::cout << name() << " print track list " << std::endl;
502 m_mdcPrintSvc->printRecMdcTrackCol();
503 }
504
505 // if(nKeep != (int)trackList->size()) std::cout<<__FILE__<<"
506 // "<<__LINE__<<"!!!!!!!!!!!!!!!!! nKeep != nTdsTk"<< std::endl;
507#ifdef MDCPATREC_TIMETEST
508 RecMdcTrackCol::iterator iter = trackList->begin();
509 for ( ; iter != trackList->end(); iter++ )
510 {
511 MdcTrack* tk = *iter;
512 ti_nHit += tk->getNhits();
513 }
514#endif
515 }
516 //-------------End track-finding------------------
517 m_segs->destroySegs();
518
519 // if ( t_eventNo% 1000 == 0) {
520 // std::cout<<"evt "<<t_eventNo<< " Found " << trackList->size() << " track(s)"
521 // <<endl;//yzhang debug
522 // }
523 if ( m_flags.lHist && m_mcHist ) fillMcTruth();
524#ifdef MDCPATREC_TIMETEST
525 m_timer[1]->stop();
526 // cout << "m_timer[1]->elapsed()::" << m_timer[1]->elapsed() << endl;
527 // cout << "m_timer[1]->mean()::" << m_timer[1]->mean() << endl;
528 m_eventTime = m_timer[1]->elapsed();
529 m_t5recTkNum = m_tracks->length();
530 m_t5EvtNo = t_eventNo;
531 m_t5nHit = ti_nHit;
532 m_t5nDigi = t_nDigi;
533 sc = m_tupleTime->write();
534#endif
535 // for event start time, if track not found try another t0
536 if ( m_tryBunch )
537 {
538 if ( nTracks < 1 )
539 {
540 iterateT0 = true;
541 goto restart;
542 }
543 }
544 if ( m_flags.lHist ) fillEvent();
545
546 return StatusCode::SUCCESS;
547}
int recHitMap[43][288]
int haveDigiTk[43][288]
double haveDigiDrift[43][288]
int haveDigiAmbig[43][288]
double haveDigiPhi[43][288]
double haveDigiTheta[43][288]
double haveDigiPt[43][288]
void fillTrackList()
StatusCode beginRun()
bool poisoningHits() const
Definition MdcTrkRecon.h:43
void fillMcTruth()

◆ fillEvent()

void MdcTrkRecon::fillEvent ( )
protected

Definition at line 1367 of file MdcTrkRecon.cxx.

1367 {
1368 if ( m_tupleEvt )
1369 {
1370
1371 uint32_t getDigiFlag = 0;
1372 getDigiFlag += m_maxMdcDigi;
1373 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1374 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1375 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1376 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1377 if ( (int)mdcDigiVec.size() < m_minMdcDigi )
1378 { std::cout << " Skip this event for MdcDigiVec.size() < " << m_minMdcDigi << endl; }
1379
1380 m_t4nDigi = mdcDigiVec.size();
1381 int iDigi = 0;
1382 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1383 for ( ; iDigi < m_t4nDigi; iter++ )
1384 {
1385 double tdc = RawDataUtil::MdcTime( ( *iter )->getTimeChannel() );
1386 double adc = RawDataUtil::MdcCharge( ( *iter )->getChargeChannel() );
1387 m_t4Time[iDigi] = tdc;
1388 m_t4Charge[iDigi] = adc;
1389 long l = MdcID::layer( ( *iter )->identify() );
1390 long w = MdcID::wire( ( *iter )->identify() );
1391 m_t4Layer[iDigi] = l;
1392 m_t4Wire[iDigi] = w;
1393 m_t4PhiMid[iDigi] = _gm->Layer( l )->phiWire( w );
1394 m_t4Hot[iDigi] = recHitMap[l][w];
1395 iDigi++;
1396 }
1397 m_t4t0 = t_t0;
1398 m_t4t0Stat = t_t0Stat;
1399 m_t4t0Truth = t_t0Truth;
1400 m_t4EvtNo = t_eventNo;
1401 m_t4nRecTk = t_nRecTk;
1402 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc(), "/Event/Digi/MdcDigiCol" );
1403 if ( mdcDigiCol ) { m_t4nDigiUnmatch = mdcDigiCol->size(); }
1404 m_t4nMcTk = t_mcTkNum;
1405 m_tupleEvt->write();
1406 }
1407} // end of fillEvent

Referenced by execute().

◆ fillMcTruth()

void MdcTrkRecon::fillMcTruth ( )
protected

Definition at line 979 of file MdcTrkRecon.cxx.

979 {
980 MsgStream log( msgSvc(), name() );
981 StatusCode sc;
982 t_mcTkNum = 0;
983 for ( int i = 0; i < 100; i++ )
984 {
985 isPrimaryOfMcTk[i] = -9999;
986 pdgOfMcTk[i] = -9999;
987 }
988 double ptOfMcTk[100] = { 0. };
989 double thetaOfMcTk[100] = { 0. };
990 double phiOfMcTk[100] = { 0. };
991 double nDigiOfMcTk[100] = { 0. };
992 if ( m_mcHist )
993 {
994 //------------------Retrieve MC truth MdcMcHit------------
995 SmartDataPtr<Event::MdcMcHitCol> mcMdcMcHitCol( eventSvc(), "/Event/MC/MdcMcHitCol" );
996 if ( !mcMdcMcHitCol ) { log << MSG::INFO << "Could not find MdcMcHit" << endmsg; }
997 else
998 {
999 Event::MdcMcHitCol::iterator iter_mchit = mcMdcMcHitCol->begin();
1000 for ( ; iter_mchit != mcMdcMcHitCol->end(); iter_mchit++ )
1001 {
1002 const Identifier id = ( *iter_mchit )->identify();
1003 int layer = MdcID::layer( id );
1004 int wire = MdcID::wire( id );
1005 int iMcTk = ( *iter_mchit )->getTrackIndex();
1006 if ( iMcTk < 100 && iMcTk > 0 ) nDigiOfMcTk[iMcTk]++;
1007 mcDrift[layer][wire] = ( *iter_mchit )->getDriftDistance() / 10.; // drift in MC.
1008 // std::cout<<" "<<__FILE__<<" mcDrift "<<mcDrift[layer][wire]<<" "<<std::endl;
1009 mcX[layer][wire] = ( *iter_mchit )->getPositionX() / 10.;
1010 mcY[layer][wire] = ( *iter_mchit )->getPositionY() / 10.;
1011 mcZ[layer][wire] = ( *iter_mchit )->getPositionZ() / 10.;
1012 mcLR[layer][wire] = ( *iter_mchit )->getPositionFlag();
1013 if ( mcLR[layer][wire] == 0 ) mcLR[layer][wire] = -1;
1014 t_nHitInTk[iMcTk]++;
1015 haveDigiAmbig[layer][wire] = mcLR[layer][wire];
1016 haveDigiDrift[layer][wire] = mcDrift[layer][wire];
1017 }
1018 }
1019
1020 //------------------get event start time truth-----------
1021 t_t0Truth = -10.;
1022 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
1023 if ( !mcParticleCol ) { log << MSG::INFO << "Could not retrieve McParticelCol" << endmsg; }
1024 else
1025 {
1026 int nMcTk = 0;
1027 Event::McParticleCol::iterator it = mcParticleCol->begin();
1028 for ( ; it != mcParticleCol->end(); it++ )
1029 {
1030 // int pdg_code = (*it)->particleProperty();
1031 // if ((fabs(pdg_code)!=211) || (fabs(pdg_code)!=13)) continue;
1032 t_mcTkNum++;
1033 nMcTk++;
1034 }
1035 it = mcParticleCol->begin();
1036 for ( ; it != mcParticleCol->end(); it++ )
1037 {
1038 int tkId = ( *it )->trackIndex();
1039 if ( ( *it )->primaryParticle() )
1040 {
1041 t_t0Truth = ( *it )->initialPosition().t();
1042 isPrimaryOfMcTk[tkId] = 1;
1043 }
1044 else
1045 {
1046 isPrimaryOfMcTk[tkId] = 0;
1047 // continue;
1048 }
1049 // fill charged particle
1050 int pdg_code = ( *it )->particleProperty();
1051 pdgOfMcTk[tkId] = pdg_code;
1052 // std::cout<<" tkId "<<tkId<<" pdg_code "<<pdg_code<<" "<<std::endl;
1053 // FIXME skip charged track and track outside MDC
1054 // if ((fabs(pdg_code)!=211) || (fabs(pdg_code)!=13)) continue;
1055 const CLHEP::Hep3Vector& true_mom = ( *it )->initialFourMomentum().vect();
1056 const CLHEP::HepLorentzVector& posIni = ( *it )->initialPosition();
1057 const CLHEP::HepLorentzVector& posFin = ( *it )->finalPosition();
1058 if ( tkId < 100 && tkId >= 0 )
1059 {
1060 ptOfMcTk[tkId] = true_mom.perp();
1061 thetaOfMcTk[tkId] = ( *it )->initialFourMomentum().theta();
1062 phiOfMcTk[tkId] = ( *it )->initialFourMomentum().phi();
1063 }
1064
1065 if ( m_tupleMcHit )
1066 {
1067 m_tMcPx = true_mom.x();
1068 m_tMcPy = true_mom.y();
1069 m_tMcPz = true_mom.z();
1070 m_tMcD0 = posIni.perp() / 10.;
1071 m_tMcZ0 = posIni.z() / 10.;
1072 m_tMcTheta = ( *it )->initialFourMomentum().theta();
1073 m_tMcFiTerm = posFin.phi();
1074 m_tMcPid = pdg_code;
1075 m_tMcTkId = tkId;
1076 m_tMcNHit = t_nHitInTk[tkId];
1077 m_tupleMcHit->write();
1078 }
1079 } // end of loop mcParticleCol
1080 if ( m_tupleMc )
1081 {
1082 m_tMcNTk = nMcTk;
1083 m_tMcEvtNo = t_eventNo;
1084 m_tupleMc->write();
1085 }
1086 }
1087 } // end of m_mcHist
1088
1089 uint32_t getDigiFlag = 0;
1090 getDigiFlag += m_maxMdcDigi;
1091 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1092 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1093 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1094 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1095 if ( (int)mdcDigiVec.size() < m_minMdcDigi )
1096 { std::cout << " Skip this event for MdcDigiVec.size() < " << m_minMdcDigi << endl; }
1097
1098 if ( mdcDigiVec.size() <= 0 ) return;
1099 // fill raw digi and t0 status
1100 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1101 for ( ; iter != mdcDigiVec.end(); iter++ )
1102 {
1103 long l = MdcID::layer( ( *iter )->identify() );
1104 long w = MdcID::wire( ( *iter )->identify() );
1105 int tkId = ( *iter )->getTrackIndex();
1106 haveDigiTk[l][w] = tkId;
1107 // std::cout<<" l "<<l<<" w "<<w<<" tk "<<tkId<<std::endl;
1108 haveDigiPt[l][w] = ptOfMcTk[( *iter )->getTrackIndex()];
1109 haveDigiTheta[l][w] = thetaOfMcTk[( *iter )->getTrackIndex()];
1110 haveDigiPhi[l][w] = phiOfMcTk[( *iter )->getTrackIndex()];
1111 if ( m_tupleWireEff )
1112 {
1113 m_we_tkId = tkId;
1114 if ( tkId >= 0 )
1115 {
1116 if ( tkId >= 1000 ) tkId -= 1000;
1117 m_we_pdg = pdgOfMcTk[tkId];
1118 m_we_primary = isPrimaryOfMcTk[tkId];
1119 // if(pdgOfMcTk[tkId]==-22) cout<<" primaryParticle ? "<< isPrimaryOfMcTk[tkId]<< "
1120 // tkId "<<tkId <<" layer
1121 // "<<l<<" wire "<<w<<" pdg="<<pdgOfMcTk[tkId]<<endl;
1122 }
1123 else
1124 {
1125 m_we_pdg = -999;
1126 m_we_primary = -999;
1127 }
1128 m_we_layer = l;
1129 m_we_wire = w;
1130 int gwire = w + Constants::nWireBeforeLayer[l];
1131 m_we_gwire = gwire;
1132 m_we_poisoned = hitPoisoned[l][w];
1133 if ( hitInSegList[l][w] > 0 ) m_we_seg = 1;
1134 else m_we_seg = 0;
1135 if ( recHitMap[l][w] > 0 ) m_we_track = 1;
1136 else m_we_track = 0;
1137 if ( l == 35 && tkId >= 0 && abs( pdgOfMcTk[tkId] ) == 11 && hitInSegList[l][w] <= 0 )
1138 {
1139 cout << "layer " << l << " cell " << w << " gwire " << gwire << " inseg "
1140 << hitInSegList[l][w] << endl;
1141 }
1142 m_we_pt = ptOfMcTk[tkId];
1143 m_we_theta = thetaOfMcTk[tkId];
1144 m_we_phi = phiOfMcTk[tkId];
1145 m_tupleWireEff->write();
1146 }
1147 }
1148} // end of fillMcTruth()

Referenced by execute().

◆ fillSegList()

void MdcTrkRecon::fillSegList ( )
protected

Definition at line 1150 of file MdcTrkRecon.cxx.

1150 {
1151 if ( 2 == m_flags.segPar.lPrint )
1152 { std::cout << "print after Segment finding " << std::endl; }
1153 if ( !m_flags.lHist ) return;
1154 // Fill hits of every layer after segment finding
1155 for ( int ii = 0; ii < 43; ii++ )
1156 {
1157 for ( int jj = 0; jj < 288; jj++ ) { hitInSegList[ii][jj] = 0; }
1158 }
1159 int nSeg = 0;
1160 for ( int i = 0; i < _gm->nSuper(); i++ )
1161 {
1162 MdcSeg* aSeg = (MdcSeg*)m_segs->oneList( i )->first();
1163 while ( aSeg )
1164 {
1165 nSeg++;
1166 for ( int ihit = 0; ihit < aSeg->nHit(); ihit++ )
1167 {
1168 const MdcHit* hit = aSeg->hit( ihit )->mdcHit();
1169 int layer = hit->layernumber();
1170 int wire = hit->wirenumber();
1171 hitInSegList[layer][wire]++;
1172 }
1173 aSeg = (MdcSeg*)aSeg->next();
1174 }
1175 } // end for slayer
1176 if ( !m_tupleSeg ) return;
1177 m_tsEvtNo = t_eventNo;
1178 m_tsNDigi = t_nDigi;
1179 int iDigi = 0;
1180 for ( int ii = 0; ii < 43; ii++ )
1181 {
1182 for ( int jj = 0; jj < 288; jj++ )
1183 {
1184 if ( haveDigiTk[ii][jj] > -2 )
1185 {
1186 m_tsLayer[iDigi] = ii;
1187 m_tsWire[iDigi] = jj;
1188 m_tsInSeg[iDigi] = hitInSegList[ii][jj];
1189 m_tsMcTkId[iDigi] = haveDigiTk[ii][jj];
1190 iDigi++;
1191 }
1192 }
1193 }
1194 m_tsNSeg = nSeg;
1195 m_tupleSeg->write();
1196} // end of fillSegList
const MdcHit * mdcHit() const
Definition MdcHitUse.cxx:62
int nHit() const
Definition MdcSeg.cxx:372

Referenced by execute().

◆ fillTrackList()

void MdcTrkRecon::fillTrackList ( )
protected

Definition at line 1235 of file MdcTrkRecon.cxx.

1235 {
1236 if ( m_flags.debugFlag() > 1 )
1237 {
1238 std::cout << "=======Print after Track finding=======" << std::endl;
1239 m_tracks->plot();
1240 }
1241
1242 if ( !m_flags.lHist ) return;
1243 //----------- fill hit -----------
1244 int nTk = ( *m_tracks ).nTrack();
1245 for ( int itrack = 0; itrack < nTk; itrack++ )
1246 {
1247 MdcTrack* atrack = ( *m_tracks )[itrack];
1248 if ( atrack == NULL ) continue;
1249 const TrkFit* fitResult = atrack->track().fitResult();
1250 if ( fitResult == 0 ) continue; // check the fit worked
1251
1252 // for fill ntuples
1253 int nSt = 0; // int nSeg=0;
1254 int seg[11] = { 0 };
1255 int segme;
1256 //-----------hit list-------------
1257 const TrkHitList* hitlist = atrack->track().hits();
1258 TrkHitList::hot_iterator hot = hitlist->begin();
1259 int layerCount[43] = { 0 };
1260 for ( int iii = 0; iii < 43; iii++ ) { layerCount[iii] = 0; }
1261 int i = 0;
1262 for ( ; hot != hitlist->end(); hot++ )
1263 {
1264 const MdcRecoHitOnTrack* recoHot;
1265 recoHot = dynamic_cast<const MdcRecoHitOnTrack*>( &( *hot ) );
1266 int layer = recoHot->mdcHit()->layernumber();
1267 int wire = recoHot->mdcHit()->wirenumber();
1268 layerCount[layer]++;
1269 recHitMap[layer][wire]++;
1270 // for n seg
1271 segme = 0;
1272 if ( layer > 0 ) { segme = ( layer - 1 ) / 4; }
1273 seg[segme]++;
1274 if ( recoHot->layer()->view() ) { ++nSt; }
1275
1276 if ( !m_tuple1 ) continue;
1277 m_layer[i] = layer;
1278 m_wire[i] = wire;
1279 m_ambig[i] = recoHot->wireAmbig(); // wire ambig
1280 // fltLen
1281 double fltLen = recoHot->fltLen();
1282 m_fltLen[i] = fltLen;
1283 double tof = recoHot->getParentRep()->arrivalTime( fltLen );
1284 // position
1285 HepPoint3D pos;
1286 Hep3Vector dir;
1287 recoHot->getParentRep()->traj().getInfo( fltLen, pos, dir );
1288 m_x[i] = pos.x();
1289 m_y[i] = pos.y();
1290 m_z[i] = pos.z();
1291 m_driftT[i] = recoHot->mdcHit()->driftTime( tof, pos.z() );
1292 m_tof[i] = tof;
1293 m_driftD[i] = recoHot->drift();
1294 m_sigma[i] = recoHot->hitRms();
1295 m_tdc[i] = recoHot->rawTime();
1296 m_adc[i] = recoHot->mdcHit()->charge();
1297 m_doca[i] = recoHot->dcaToWire(); // sign w.r.t. dirft() FIXME
1298 m_entra[i] = recoHot->entranceAngle();
1299 m_act[i] = recoHot->isActive();
1300 // diff with truth
1301 m_dx[i] = m_x[i] - mcX[layer][wire];
1302 m_dy[i] = m_y[i] - mcY[layer][wire];
1303 m_dz[i] = m_z[i] - mcZ[layer][wire];
1304 m_dDriftD[i] = m_driftD[i] - mcDrift[layer][wire];
1305 m_dlr[i] = m_ambig[i] - mcLR[layer][wire];
1306 // yzhang for pickHits debug
1307 m_cellWidth[i] =
1308 Constants::twoPi * _gm->Layer( layer )->rMid() / _gm->Layer( layer )->nWires();
1309 // zhangy
1310 // resid
1311 double res = 999., rese = 999.;
1312 if ( recoHot->resid( res, rese, false ) ) {}
1313 else {}
1314 m_resid[i] = res;
1315 i++;
1316 } // end fill hit
1317 int nSlay = 0;
1318 for ( int i = 0; i < 11; i++ )
1319 {
1320 if ( seg[i] > 0 ) nSlay++;
1321 }
1322 if ( m_tuple1 )
1323 {
1324 //------------fill track result-------------
1325 m_tkId = itrack;
1326 // track parameters at closest approach to beamline
1327 double fltLenPoca = 0.0;
1328 TrkExchangePar helix = fitResult->helix( fltLenPoca );
1329 m_q = fitResult->charge();
1330 m_phi0 = helix.phi0();
1331 m_tanl = helix.tanDip();
1332 m_z0 = helix.z0();
1333 m_d0 = helix.d0();
1334 m_pt = fitResult->pt();
1335 m_nSlay = nSlay;
1336 if ( m_pt > 0.00001 ) { m_cpa = fitResult->charge() / fitResult->pt(); }
1337 // momenta and position
1338 CLHEP::Hep3Vector p1 = fitResult->momentum( fltLenPoca );
1339 double px, py, pz, pxy;
1340 pxy = fitResult->pt();
1341 px = p1.x();
1342 py = p1.y();
1343 pz = p1.z();
1344 m_p = p1.mag();
1345 m_pz = pz;
1346 HepPoint3D poca = fitResult->position( fltLenPoca );
1347 m_pocax = poca.x();
1348 m_pocay = poca.y();
1349 m_pocaz = poca.z();
1350 m_nAct = fitResult->nActive();
1351 m_nHit = hitlist->nHit();
1352 m_nDof = fitResult->nDof();
1353 m_nSt = nSt;
1354 m_chi2 = fitResult->chisq();
1355 // for (int l=0;l<43;l++) m_layerCount[l] = layerCount[l];
1356 m_t0 = t_t0;
1357 m_t0Stat = t_t0Stat;
1358 m_t0Truth = t_t0Truth;
1359 m_nTdsTk = t_nRecTk;
1360 m_nMcTk = t_mcTkNum;
1361 m_evtNo = t_eventNo;
1362 m_tuple1->write();
1363 }
1364 } // end of loop rec trk list
1365} // end of fillTrackList
double p1[4]
HepGeom::Point3D< double > HepPoint3D
int wireAmbig() const
double rawTime() const
double dcaToWire() const
double entranceAngle() const
const MdcLayer * layer() const
double driftTime(double tof, double z) const
Definition MdcHit.cxx:142
const MdcHit * mdcHit() const
virtual void getInfo(double fltLen, HepPoint3D &pos, Hep3Vector &direction) const =0
virtual Hep3Vector momentum(double fltL=0.) const =0
virtual double pt(double fltL=0.) const =0
virtual double chisq() const =0
virtual int charge() const =0
virtual int nDof() const =0
virtual const TrkDifTraj & traj() const =0
virtual HepPoint3D position(double fltL) const =0
virtual int nActive() const =0
virtual TrkExchangePar helix(double fltL) const =0
double resid(bool exclude=false) const
const TrkFit * fitResult() const
virtual double arrivalTime(double fltL) const
Definition TrkRep.cxx:158

Referenced by execute().

◆ finalize()

StatusCode MdcTrkRecon::finalize ( )

Definition at line 550 of file MdcTrkRecon.cxx.

550 {
551 MsgStream log( msgSvc(), name() );
552 log << MSG::INFO << "in finalize()" << endmsg;
553
554 m_tracks.reset( 0 );
555#ifdef MDCPATREC_TIMETEST
556 m_timersvc->print();
557#endif
558 return StatusCode::SUCCESS;
559}

◆ ignoringUsedHits()

bool MdcTrkRecon::ignoringUsedHits ( ) const
inlineprotected

Definition at line 42 of file MdcTrkRecon.h.

42{ return m_onlyUnusedHits; }

Referenced by initialize().

◆ initialize()

StatusCode MdcTrkRecon::initialize ( )

Definition at line 137 of file MdcTrkRecon.cxx.

137 {
138
139 MsgStream log( msgSvc(), name() );
140 log << MSG::INFO << "in initialize()" << endmsg;
141 StatusCode sc;
142
143 // Pdt
144 Pdt::readMCppTable( m_pdtFile );
145
146 // Flag and Pars
147 m_flags.readPar( m_paramFile );
148 m_flags.lHist = m_hist;
149 m_flags.setDebug( m_debug );
150 for ( int i = 0; i < 43; i++ ) TrkHelixFitter::nSigmaCut[i] = m_helixHitsSigma[i];
151 if ( !m_doLineFit ) MdcTrackListBase::m_d0Cut = m_d0Cut;
152 if ( !m_doLineFit ) MdcTrackListBase::m_z0Cut = m_z0Cut;
153 MdcTrackListBase::m_ptCut = m_dropTrkPt;
154 if ( m_debug > 0 )
155 {
156 std::cout << "MdcTrkRecon d0Cut " << m_d0Cut << " z0Cut " << m_z0Cut << " ptCut "
157 << m_dropTrkPt << std::endl;
158 }
159
160 // Initailize magnetic filed
161 sc = service( "MagneticFieldSvc", m_pIMF );
162 if ( sc != StatusCode::SUCCESS )
163 { log << MSG::ERROR << name() << " Unable to open magnetic field service" << endmsg; }
164 m_bfield = new BField( m_pIMF );
165 log << MSG::INFO << name() << " field z = " << m_bfield->bFieldNominal() << endmsg;
166
167 // Initialize RawDataProviderSvc
168 sc = service( "RawDataProviderSvc", m_rawDataProviderSvc );
169 if ( sc.isFailure() )
170 {
171 log << MSG::FATAL << name() << " Could not load RawDataProviderSvc!" << endmsg;
172 return StatusCode::FAILURE;
173 }
174
175 // Initailize MdcPrintSvc
176 sc = service( "MdcPrintSvc", m_mdcPrintSvc );
177 if ( sc.isFailure() )
178 {
179 log << MSG::FATAL << "Could not load MdcPrintSvc!" << endmsg;
180 return StatusCode::FAILURE;
181 }
182
183 // Initialize hitdata
184 m_hitData.reset( new MdcSegData( ignoringUsedHits() ) );
185
186 // Initialize segFinder
187 if ( m_flags.findSegs )
188 { m_segFinder.reset( new MdcSegFinder( m_flags.segPar.useAllAmbig ) ); }
189
190 // Initialize trackList
191 if ( m_doLineFit ) { m_tracks.reset( new MdcTrackListCsmc( m_flags.tkParTight ) ); }
192 else { m_tracks.reset( new MdcTrackList( m_flags.tkParTight ) ); }
193 m_tracks->setNoInner( m_noInner );
194
195 // Book NTuple and Histograms
196 if ( m_flags.lHist )
197 {
198 StatusCode sc = bookNTuple();
199 if ( !sc.isSuccess() ) { m_flags.lHist = 0; }
200 }
201
202 // yzhang for HelixFitter debug
203 if ( 7 == m_flags.debugFlag() ) TrkHelixFitter::m_debug = true;
204
205 t_iExexute = 0;
206 return StatusCode::SUCCESS;
207}
StatusCode bookNTuple()
bool ignoringUsedHits() const
Definition MdcTrkRecon.h:42
static void readMCppTable(std::string filenm)

◆ poisoningHits()

bool MdcTrkRecon::poisoningHits ( ) const
inlineprotected

Definition at line 43 of file MdcTrkRecon.h.

43{ return m_poisonHits; }

Referenced by execute().


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