MdcxTrackFinder Class Reference

#include <MdcxTrackFinder.h>

List of all members.

Public Member Functions

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

Private Member Functions

StatusCode FitMdcxTrack (HepAList< MdcxFittedHel > &trkList, const HepAList< MdcxHit > &dchitlist, MdcHitCol *hitCol, RecMdcTrackCol *trackList, RecMdcHitCol *hitList)
void MdcxHitsToHots (MdcxHel &mdcxHelix, const HepAList< MdcxHit > &mdcxHits, TrkHitList *m_trkHitList, MdcHitCol *hitCol)
void MdcxHitsToHots (TrkHitList *m_trkHitList, HitRefVec &recMdcHits, HitRefVec &skipedHits)
void store (TrkRecoTrk *aTrack, RecMdcTrackCol *, RecMdcHitCol *)
void printTrack (RecMdcTrack *tk)
void dumpTrackList (const HepAList< MdcxFittedHel > &trackList) const
void dumpTrack (RecMdcTrackCol *trackList)
void dumpMdcxSegs (const HepAList< MdcxSeg > &segList) const
void bookNTuple ()
void fillMdcxSegs (const HepAList< MdcxSeg > &segList) const
void fillTrkl (const HepAList< MdcxFittedHel > &firsttrkl) const
void fillMcTruth ()
void fillTrack (TrkRecoTrk *aTrack)
void fillEvent ()
void dropMultiHotInLayer (TrkHitList *list)
void dumpTdsTrack (RecMdcTrackCol *trackList)
void dumpTdsHits (RecMdcHitCol *hitList)

Private Attributes

int haveDigi [43][288]
int nTk
bool b_saveEvent
int t_nTdsTk
int t_nDigi
int t_nTkTot
int t_nTkNum [20]
double m_bunchT0
double m_timing
int m_t0Stat
double m_t0Truth
int m_eventNo
int m_debug
int m_hist
bool m_mcHist
bool m_dropUnmatch
bool m_keepBadTdc
bool m_dropHot
bool m_keepUnmatch
uint32_t m_getDigiFlag
int m_maxMdcDigi
int m_minMdcDigi
bool m_dropMultiHotInLayer
bool m_salvageTrk
bool m_lineFit
bool m_countPropTime
bool m_doSag
double m_cresol
std::vector< float > m_dropHitsSigma
std::vector< float > m_helixFitCut
double m_dropTrkPt
double m_addHitCut
double m_minTrkProb
double m_csmax4
double m_csmax3
double m_helixFitSigma
double m_maxRcsInAddSeg
double m_nSigAddHitTrk
double m_maxProca
double m_d0Cut
double m_z0Cut
BFieldm_bfield
IMagneticFieldSvcm_pIMF
const MdcCalibFunSvcm_mdcCalibFunSvc
RawDataProviderSvcm_rawDataProviderSvc
std::string m_pdtFile
HepAList< MdcHit > * m_junkHitList
MdcxHits m_mdcxHits
TrkContextEvm_context
const MdcDetectorm_gm
MdcDigiVec mdcDigiVec
const MdcDigim_digiMap [43][288]


Detailed Description

Definition at line 60 of file MdcxTrackFinder.h.


Constructor & Destructor Documentation

MdcxTrackFinder::MdcxTrackFinder ( const std::string name,
ISvcLocator *  pSvcLocator 
)

Definition at line 107 of file MdcxTrackFinder.cxx.

References m_addHitCut, m_countPropTime, m_cresol, m_csmax3, m_csmax4, m_d0Cut, m_debug, m_doSag, m_dropHitsSigma, m_dropHot, m_dropMultiHotInLayer, m_dropTrkPt, m_getDigiFlag, m_helixFitCut, m_helixFitSigma, m_hist, m_keepBadTdc, m_keepUnmatch, m_lineFit, m_maxMdcDigi, m_maxProca, m_maxRcsInAddSeg, m_mcHist, m_minMdcDigi, m_minTrkProb, m_nSigAddHitTrk, m_pdtFile, m_salvageTrk, and m_z0Cut.

00107                                                                                 :
00108   Algorithm(name, pSvcLocator), m_mdcCalibFunSvc(0)
00109 {
00110   //input
00111   declareProperty("pdtFile",      m_pdtFile = "pdt.table");
00112   //debug control
00113   declareProperty("debug",        m_debug= 0);
00114   declareProperty("hist",         m_hist= 0);
00115   declareProperty("mcHist",       m_mcHist = false);
00116   //cuts and control
00117   declareProperty("cresol",       m_cresol = 0.013);
00118 
00119   declareProperty("getDigiFlag",  m_getDigiFlag = 0);
00120   declareProperty("maxMdcDigi",   m_maxMdcDigi= 0);
00121   declareProperty("keepBadTdc",   m_keepBadTdc= 0);
00122   declareProperty("dropHot",      m_dropHot= 0);
00123   declareProperty("keepUnmatch",  m_keepUnmatch= 0);
00124   declareProperty("salvageTrk",   m_salvageTrk = false);
00125   declareProperty("dropMultiHotInLayer",m_dropMultiHotInLayer = false);
00126   declareProperty("dropTrkPt",    m_dropTrkPt = -999.);
00127   declareProperty("d0Cut",        m_d0Cut = 999.);
00128   declareProperty("z0Cut",        m_z0Cut = 999.);
00129 
00130   declareProperty("minMdcDigi",   m_minMdcDigi = 0);
00131   declareProperty("countPropTime",m_countPropTime = true);
00132   declareProperty("addHitCut",    m_addHitCut = 5.);
00133   declareProperty("dropHitsSigma",m_dropHitsSigma);
00134   declareProperty("helixFitCut",  m_helixFitCut);
00135   declareProperty("minTrkProb",   m_minTrkProb = 0.01);
00136   declareProperty("csmax4",       m_csmax4 = 50.);
00137   declareProperty("csmax3",       m_csmax3 = 1.);
00138   declareProperty("helixFitSigma",m_helixFitSigma= 5.);
00139   declareProperty("maxRcsInAddSeg",m_maxRcsInAddSeg= 50.);
00140   declareProperty("nSigAddHitTrk", m_nSigAddHitTrk= 5.);
00141   declareProperty("maxProca",      m_maxProca= 0.6);
00142   declareProperty("doSag",         m_doSag= false);
00143   declareProperty("lineFit",       m_lineFit = false);
00144   //declareProperty("cosmicFit",     m_cosmicFit= false);
00145 }

MdcxTrackFinder::~MdcxTrackFinder (  )  [virtual]

Definition at line 150 of file MdcxTrackFinder.cxx.

References m_bfield.

00150                                   {
00151   delete m_bfield;
00152 }


Member Function Documentation

StatusCode MdcxTrackFinder::beginRun (  ) 

Definition at line 154 of file MdcxTrackFinder.cxx.

References MdcDetector::instance(), m_doSag, m_gm, and MdcxHit::setMdcDetector().

00154                                     {  
00155   // Get Mdc Detector Geometry
00156   m_gm = MdcDetector::instance(m_doSag); 
00157   if(NULL == m_gm) return StatusCode::FAILURE;
00158   MdcxHit::setMdcDetector(m_gm);
00159 
00160   return StatusCode::SUCCESS;
00161 }

void MdcxTrackFinder::bookNTuple (  )  [private]

Definition at line 843 of file MdcxTrackFinder.cxx.

References calibUtil::ERROR, g_addHitCut, g_addHitCut2d, g_addSegPhi, g_csmax3, g_csmax4, g_dPhiAU, g_dPhiAU_0, g_dPhiAU_1, g_dPhiAU_5, g_dPhiAU_7, g_dPhiAV, g_dPhiAV_0, g_dPhiAV_1, g_dPhiAV_6, g_dPhiAV_8, g_dropHitsSigma, g_omegag, g_poison, g_trklappend1, g_trklappend2, g_trklappend3, g_trklcircle, g_trkld, g_trkldl, g_trkldoca, g_trkldrop1, g_trkldrop2, g_trkle, g_trklel, g_trklfirstProb, g_trklgood, g_trklhelix, g_trkllayer, g_trkllmk, g_trklproca, g_trkltemp, histoSvc(), m_addSegAddD0, m_addSegAddLen, m_addSegAddPhi, m_addSegAddPhi0, m_addSegAddPhiLay, m_addSegAddSl, m_addSegEvtNo, m_addSegLen, m_addSegPoca, m_addSegSame, m_addSegSeedD0, m_addSegSeedLen, m_addSegSeedPhi, m_addSegSeedPhi0, m_addSegSeedPhiLay, m_addSegSeedSl, m_addSegSlayer, m_csmcD0, m_csmcOmega, m_csmcPhi0, m_csmcPt, m_csmcTanl, m_csmcZ0, m_hist, m_segCombDLenAU, m_segCombDLenUV, m_segCombEvtNo, m_segCombOmega, m_segCombPhiA, m_segCombPhiU, m_segCombPhiV, m_segCombSameAU, m_segCombSameUV, m_segCombSlA, m_segCombSlU, m_segCombSlV, m_segDropHitsDoca, m_segDropHitsDrift, m_segDropHitsEvtNo, m_segDropHitsLayer, m_segDropHitsMcTkId, m_segDropHitsPull, m_segDropHitsSigma, m_segDropHitsWire, m_xact, m_xadc, m_xambig, m_xchi2, m_xcpa, m_xd0, m_xdoca, m_xdriftD, m_xdriftT, m_xentra, m_xevtNo, m_xfltLen, m_xlayer, m_xnAct, m_xnDof, m_xnHit, m_xnSlay, m_xnSt, m_xp, m_xphi0, m_xpocax, m_xpocay, m_xpocaz, m_xpt, m_xpz, m_xq, m_xresid, m_xsigma, m_xt0, m_xt0Stat, m_xt0Truth, m_xt4Charge, m_xt4EvtNo, m_xt4Layer, m_xt4nDigi, m_xt4nRecTk, m_xt4nTdsTk, m_xt4t0, m_xt4t0Stat, m_xt4t0Truth, m_xt4Time, m_xt4time, m_xt5Layer, m_xt5Wire, m_xtanl, m_xtdc, m_xtiming, m_xtkId, m_xtof, m_xtsChisq, m_xtsD0, m_xtsD0_sl_approx, m_xtsInSeg, m_xtsLayer, m_xtsNDigi, m_xtsOmega, m_xtsPat, m_xtsPhi0, m_xtsPhi0_sl_approx, m_xtsSl, m_xtsWire, m_xtsXline_bbrrf, m_xtsXline_slope, m_xtsYline_bbrrf, m_xtsYline_slope, m_xtuple1, m_xtupleAddSeg1, m_xtupleAddSeg2, m_xtupleCsmcSew, m_xtupleDropHits, m_xtupleEvt, m_xtupleSeg, m_xtupleSegComb, m_xtupleTrkl, m_xwire, m_xx, m_xy, m_xz, m_xz0, msgSvc(), and ntupleSvc().

Referenced by initialize().

00843                                 {
00844   MsgStream log(msgSvc(), name());
00845   StatusCode sc;
00846   if(!m_hist) return;
00847 
00848   g_poison = histoSvc()->book( "poison", "poison",43,0,42,288,0,288 );
00849   g_csmax4 = histoSvc()->book( "csmax4", "csmax4",100,0,100 );
00850   g_csmax3 = histoSvc()->book( "csmax3", "csmax3",50000,0,500000 );
00851   g_omegag = histoSvc()->book( "omegag", "omegag",1000 ,0.,1.);
00852   g_dPhiAU = histoSvc()->book( "dPhiAU", "dPhiAU",1000 ,0.,3.5);
00853   g_dPhiAU_0 = histoSvc()->book( "dPhiAU_0", "dPhiAU_0",1000 ,0.,3.5);
00854   g_dPhiAU_1 = histoSvc()->book( "dPhiAU_1", "dPhiAU_1",1000 ,0.,3.5);
00855   g_dPhiAU_5 = histoSvc()->book( "dPhiAU_5", "dPhiAU_5",1000 ,0.,3.5);
00856   g_dPhiAU_7 = histoSvc()->book( "dPhiAU_7", "dPhiAU_7",1000 ,0.,3.5);
00857   g_dPhiAV = histoSvc()->book( "dPhiAV", "dPhiAV",1000 ,0.,3.5);
00858   g_addSegPhi = histoSvc()->book( "addSegPhi", "addSegPhi",1000 ,0.,3.5);
00859   g_dPhiAV_0 = histoSvc()->book( "dPhiAV_0", "dPhiAV_0",1000 ,0.,3.5);
00860   g_dPhiAV_1 = histoSvc()->book( "dPhiAV_1", "dPhiAV_1",1000 ,0.,3.5);
00861   g_dPhiAV_6 = histoSvc()->book( "dPhiAV_6", "dPhiAV_6",1000 ,0.,3.5);
00862   g_dPhiAV_8 = histoSvc()->book( "dPhiAV_8", "dPhiAV_8",1000 ,0.,3.5);
00863   g_trkllmk = histoSvc()->book( "trkllmk", "trkllmk",43,0.,42);
00864   g_trklgood = histoSvc()->book( "trklgood", "trklgood",43,0.,42);
00865   g_trklcircle = histoSvc()->book( "trklcircle", "trklcircle",43,0.,42);
00866   g_trklhelix= histoSvc()->book( "trklhelix", "trklhelix",43,0.,42);
00867   g_trkldrop1= histoSvc()->book( "trkldrop1", "trkldrop1",43,0.,42);
00868   g_trkldrop2= histoSvc()->book( "trkldrop2", "trkldrop2",43,0.,42);
00869   g_trklappend1= histoSvc()->book( "trklappend1", "trklappend1",43,0.,42);
00870   g_trklappend2= histoSvc()->book( "trklappend2", "trklappend2",43,0.,42);
00871   g_trklappend3= histoSvc()->book( "trklappend3", "trklappend3",43,0.,42);
00872   //g_fitOmega= histoSvc()->book( "fitOmega", "fitOmega",200,0.,100.);
00873   g_trklfirstProb= histoSvc()->book( "trklfirstProb", "trklfirstProb",200,0.,2.);
00874   g_trkltemp= histoSvc()->book( "trkltemp", "trkltemp",200,-3.5,3.5);
00875 
00876   g_trklproca= histoSvc()->book( "trklproca", "trklproca",100,0.,5.);
00877   g_trkle= histoSvc()->book( "trkle", "trkle",200,0.,0.025);
00878   g_trkld= histoSvc()->book( "trkld", "trkld",200,-1.2,1.2);
00879   g_trklel= histoSvc()->book( "trklel", "trklel",200,0.,0.025,43,0,43);
00880   g_trkldl= histoSvc()->book( "trkldl", "trkldl",200,-1.2,1.2,43,0,43);
00881   g_trkldoca= histoSvc()->book( "trkldoca", "trkldoca",200,-1.2,1.2);
00882   g_trkllayer= histoSvc()->book( "trkllayer", "trkllayer",43,0,43);
00883   g_dropHitsSigma= histoSvc()->book( "dropHitsSigma", "dropHitsSigma",43,0,43,100,0,11);
00884   g_addHitCut= histoSvc()->book( "addHitCut", "addHitCut",100,0,10);
00885   g_addHitCut2d= histoSvc()->book( "addHitCut2d", "addHitCut2d",43,0,43,100,0,10);
00886   //g_addSegPhiDiff = histoSvc()->book( "addSegPhiDiff", "addSegPhiDiff",100,-6.28,6.28);
00887 
00888   NTuplePtr nt1(ntupleSvc(), "MdcxReco/rec");
00889   if ( nt1 ) { m_xtuple1 = nt1;}
00890   else {
00891     m_xtuple1 = ntupleSvc()->book ("MdcxReco/rec", CLID_ColumnWiseTuple, "MdcxReco reconsturction results");
00892     if ( m_xtuple1 ) {
00893       sc = m_xtuple1->addItem ("t0",      m_xt0);
00894       sc = m_xtuple1->addItem ("timing",  m_xtiming);
00895       sc = m_xtuple1->addItem ("t0Stat",  m_xt0Stat);
00896       sc = m_xtuple1->addItem ("t0Truth", m_xt0Truth);
00897 
00898       sc = m_xtuple1->addItem ("nSlay",   m_xnSlay);
00899       sc = m_xtuple1->addItem ("p",       m_xp);
00900       sc = m_xtuple1->addItem ("pt",      m_xpt);
00901       sc = m_xtuple1->addItem ("pz",      m_xpz);
00902       sc = m_xtuple1->addItem ("d0",      m_xd0);
00903       sc = m_xtuple1->addItem ("phi0",    m_xphi0);
00904       sc = m_xtuple1->addItem ("cpa",     m_xcpa);
00905       sc = m_xtuple1->addItem ("z0",      m_xz0);
00906       sc = m_xtuple1->addItem ("tanl",    m_xtanl);
00907       sc = m_xtuple1->addItem ("q",       m_xq);
00908       sc = m_xtuple1->addItem ("pocax",   m_xpocax);
00909       sc = m_xtuple1->addItem ("pocay",   m_xpocay);
00910       sc = m_xtuple1->addItem ("pocaz",   m_xpocaz);
00911 
00912       sc = m_xtuple1->addItem ("evtNo",   m_xevtNo);
00913       sc = m_xtuple1->addItem ("nSt",     m_xnSt);
00914       sc = m_xtuple1->addItem ("nAct",    m_xnAct);
00915       sc = m_xtuple1->addItem ("nDof",    m_xnDof);
00916       sc = m_xtuple1->addItem ("chi2",    m_xchi2);
00917       sc = m_xtuple1->addItem ("tkId",    m_xtkId);
00918       sc = m_xtuple1->addItem ("nHit",    m_xnHit, 0, 7000);//# of hit/rec track
00919       sc = m_xtuple1->addIndexedItem ("resid",    m_xnHit, m_xresid);
00920       sc = m_xtuple1->addIndexedItem ("sigma",    m_xnHit, m_xsigma);
00921       sc = m_xtuple1->addIndexedItem ("driftD",   m_xnHit, m_xdriftD);
00922       sc = m_xtuple1->addIndexedItem ("driftT",   m_xnHit, m_xdriftT);
00923       sc = m_xtuple1->addIndexedItem ("doca",     m_xnHit, m_xdoca);
00924       sc = m_xtuple1->addIndexedItem ("entra",    m_xnHit, m_xentra);
00925       sc = m_xtuple1->addIndexedItem ("ambig",    m_xnHit, m_xambig);
00926       sc = m_xtuple1->addIndexedItem ("fltLen",   m_xnHit, m_xfltLen);
00927       sc = m_xtuple1->addIndexedItem ("tof",      m_xnHit, m_xtof);
00928       sc = m_xtuple1->addIndexedItem ("act",      m_xnHit, m_xact);
00929       sc = m_xtuple1->addIndexedItem ("tdc",      m_xnHit, m_xtdc);
00930       sc = m_xtuple1->addIndexedItem ("adc",      m_xnHit, m_xadc);
00931       sc = m_xtuple1->addIndexedItem ("layer",    m_xnHit, m_xlayer);
00932       sc = m_xtuple1->addIndexedItem ("wire",     m_xnHit, m_xwire);
00933       sc = m_xtuple1->addIndexedItem ("x",        m_xnHit, m_xx);
00934       sc = m_xtuple1->addIndexedItem ("y",        m_xnHit, m_xy);
00935       sc = m_xtuple1->addIndexedItem ("z",        m_xnHit, m_xz);
00936     } else {   // did not manage to book the N tuple....
00937       log << MSG::ERROR << "    Cannot book N-tuple: MdcxReco/rec" << endmsg;
00938       //return;
00939     }
00940   }//end book of nt1
00941   NTuplePtr nt4(ntupleSvc(), "MdcxReco/evt");
00942   if ( nt4 ) { m_xtupleEvt = nt4;}
00943   else {
00944     m_xtupleEvt = ntupleSvc()->book ("MdcxReco/evt", CLID_ColumnWiseTuple, "MdcxReco event data");
00945     if ( m_xtupleEvt ) {
00946       sc = m_xtupleEvt->addItem ("evtNo",        m_xt4EvtNo );
00947       sc = m_xtupleEvt->addItem ("nRecTk",       m_xt4nRecTk );
00948       sc = m_xtupleEvt->addItem ("nTdsTk",       m_xt4nTdsTk );
00949       sc = m_xtupleEvt->addItem ("t0",           m_xt4t0);
00950       sc = m_xtupleEvt->addItem ("t0Stat",       m_xt4t0Stat);
00951       sc = m_xtupleEvt->addItem ("t0Truth",      m_xt4t0Truth);
00952       sc = m_xtupleEvt->addItem ("time",         m_xt4time);
00953       sc = m_xtupleEvt->addItem ("nDigi",        m_xt4nDigi, 0, 7000);//# of hit/mc track 
00954       sc = m_xtupleEvt->addIndexedItem ("layer",  m_xt4nDigi, m_xt4Layer);
00955       sc = m_xtupleEvt->addIndexedItem ("rt",     m_xt4nDigi, m_xt4Time);
00956       sc = m_xtupleEvt->addIndexedItem ("rc",     m_xt4nDigi, m_xt4Charge);
00957       //sc = m_xtupleEvt->addIndexedItem ("rawHit", m_xt4nDigi, m_xt4rawHit);
00958       //sc = m_xtupleEvt->addIndexedItem ("recHit", m_xt4nDigi, m_xt4recHit);
00959     } else {   // did not manage to book the N tuple....
00960       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/evt"   << endmsg;
00961       //return;
00962     }
00963   }// end of book nt4
00964 
00965   //book tuple of segment
00966   NTuplePtr ntSeg(ntupleSvc(), "MdcxReco/seg");
00967   if ( ntSeg ) { m_xtupleSeg = ntSeg;}
00968   else {
00969     m_xtupleSeg = ntupleSvc()->book ("MdcxReco/seg", CLID_ColumnWiseTuple, "MdcxTrackFinder segment data");
00970     if ( m_xtupleSeg ) {
00971       sc = m_xtupleSeg->addItem ("sl",            m_xtsSl);
00972       sc = m_xtupleSeg->addItem ("d0",            m_xtsD0);
00973       sc = m_xtupleSeg->addItem ("omega",         m_xtsOmega);
00974       sc = m_xtupleSeg->addItem ("phi0",          m_xtsPhi0);
00975       sc = m_xtupleSeg->addItem ("d0sl",          m_xtsD0_sl_approx);
00976       sc = m_xtupleSeg->addItem ("phi0sl",        m_xtsPhi0_sl_approx);
00977       sc = m_xtupleSeg->addItem ("xbbrrf",        m_xtsXline_bbrrf);
00978       sc = m_xtupleSeg->addItem ("ybbrrf",        m_xtsYline_bbrrf);
00979       sc = m_xtupleSeg->addItem ("xslope",        m_xtsXline_slope);
00980       sc = m_xtupleSeg->addItem ("yslope",        m_xtsYline_slope);
00981       sc = m_xtupleSeg->addItem ("pat",           m_xtsPat);
00982       sc = m_xtupleSeg->addItem ("chisq",         m_xtsChisq);
00983       sc = m_xtupleSeg->addItem ("nDigi",         m_xtsNDigi, 0, 20);
00984       sc = m_xtupleSeg->addIndexedItem ("layer",  m_xtsNDigi, m_xtsLayer);
00985       sc = m_xtupleSeg->addIndexedItem ("wire",   m_xtsNDigi, m_xtsWire);
00986       sc = m_xtupleSeg->addIndexedItem ("inSeg",  m_xtsNDigi, m_xtsInSeg);
00987     }else{
00988       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/evt"   << endmsg;
00989       //return;
00990     }
00991   }
00992   NTuplePtr nt5(ntupleSvc(), "MdcxReco/trkl");
00993   if ( nt5 ) { m_xtupleTrkl= nt5;}
00994   else {
00995     m_xtupleTrkl= ntupleSvc()->book ("MdcxReco/trkl", CLID_RowWiseTuple, "MdcxReco track info");
00996     if ( m_xtupleTrkl) {
00997       sc = m_xtupleTrkl->addItem ("layer",       m_xt5Layer);
00998       sc = m_xtupleTrkl->addItem ("wire",        m_xt5Wire);
00999     }else{
01000       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/trkl"   << endmsg;
01001       //return;
01002     }
01003   }
01004 
01005   NTuplePtr ntCsmcSew(ntupleSvc(), "MdcxReco/csmc");
01006   if ( ntCsmcSew ) { m_xtupleCsmcSew = ntCsmcSew;}
01007   else {
01008     m_xtupleCsmcSew = ntupleSvc()->book ("MdcxReco/csmc", CLID_ColumnWiseTuple, "MdcxReco reconsturction results");
01009     if ( m_xtupleCsmcSew ) {
01010       sc = m_xtupleCsmcSew->addItem ("dD0",      m_csmcD0);
01011       sc = m_xtupleCsmcSew->addItem ("dPhi0",    m_csmcPhi0);
01012       sc = m_xtupleCsmcSew->addItem ("dZ0",      m_csmcZ0);
01013       sc = m_xtupleCsmcSew->addItem ("dOmega",   m_csmcOmega);
01014       sc = m_xtupleCsmcSew->addItem ("dPt",      m_csmcPt);
01015       sc = m_xtupleCsmcSew->addItem ("dTanl",    m_csmcTanl);
01016     }else{
01017       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/csmc"   << endmsg;
01018       //return;
01019     }
01020   }
01021   NTuplePtr ntSegAdd1(ntupleSvc(), "MdcxReco/addSeg1");
01022   if ( ntSegAdd1 ) { m_xtupleAddSeg1 = ntSegAdd1;}
01023   else {
01024     m_xtupleAddSeg1 = ntupleSvc()->book ("MdcxReco/addSeg1", CLID_ColumnWiseTuple, "MdcxReco event data");
01025     if ( m_xtupleAddSeg1 ) {
01026       sc = m_xtupleAddSeg1->addItem ("same",     m_addSegSame);
01027       sc = m_xtupleAddSeg1->addItem ("seedSl",   m_addSegSeedSl );
01028       sc = m_xtupleAddSeg1->addItem ("seedPhi",  m_addSegSeedPhi );
01029       sc = m_xtupleAddSeg1->addItem ("seedPhiLay",m_addSegSeedPhiLay );
01030       sc = m_xtupleAddSeg1->addItem ("seedLen",  m_addSegSeedLen );
01031       sc = m_xtupleAddSeg1->addItem ("seedD0",   m_addSegSeedD0 );
01032       sc = m_xtupleAddSeg1->addItem ("seedPhi0",         m_addSegSeedPhi0 );
01033       sc = m_xtupleAddSeg1->addItem ("addSl",    m_addSegAddSl );
01034       sc = m_xtupleAddSeg1->addItem ("addPhi",   m_addSegAddPhi );
01035       sc = m_xtupleAddSeg1->addItem ("addPhiLay", m_addSegAddPhiLay );
01036       sc = m_xtupleAddSeg1->addItem ("addLen",   m_addSegAddLen );
01037       sc = m_xtupleAddSeg1->addItem ("addD0",    m_addSegAddD0 );
01038       sc = m_xtupleAddSeg1->addItem ("addPhi0",  m_addSegAddPhi0 );
01039     }
01040     else{
01041       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/addSeg1"   << endmsg;
01042       //return;
01043     }
01044   }
01045 
01046   NTuplePtr ntSegComb(ntupleSvc(), "MdcxReco/segComb");
01047   if ( ntSegComb ) { m_xtupleSegComb = ntSegComb;}
01048   else {
01049     m_xtupleSegComb = ntupleSvc()->book ("MdcxReco/segComb", CLID_ColumnWiseTuple, "MdcxReco event data");
01050     if ( m_xtupleSegComb ) {
01051       sc = m_xtupleSegComb->addItem ("evtNo",   m_segCombEvtNo);
01052       sc = m_xtupleSegComb->addItem ("omega",   m_segCombOmega);
01053       sc = m_xtupleSegComb->addItem ("sameAU",  m_segCombSameAU);
01054       sc = m_xtupleSegComb->addItem ("sameUV",  m_segCombSameUV);
01055       sc = m_xtupleSegComb->addItem ("dlenAU",  m_segCombDLenAU);
01056       sc = m_xtupleSegComb->addItem ("dlenUV",  m_segCombDLenUV);
01057       sc = m_xtupleSegComb->addItem ("slA",     m_segCombSlA);
01058       sc = m_xtupleSegComb->addItem ("slU",     m_segCombSlU);
01059       sc = m_xtupleSegComb->addItem ("slV",     m_segCombSlV);
01060       sc = m_xtupleSegComb->addItem ("phiA",    m_segCombPhiA);
01061       sc = m_xtupleSegComb->addItem ("phiU",    m_segCombPhiU);
01062       sc = m_xtupleSegComb->addItem ("phiV",    m_segCombPhiV);
01063     }
01064     else{
01065       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/segComb"   << endmsg;
01066       //return;
01067     }
01068   }
01069 
01070   NTuplePtr ntDropHits(ntupleSvc(), "MdcxReco/dropHits");
01071   if ( ntDropHits ) { m_xtupleDropHits = ntDropHits;}
01072   else {
01073     m_xtupleDropHits = ntupleSvc()->book ("MdcxReco/dropHits", CLID_ColumnWiseTuple, "MdcxReco event data");
01074     if ( m_xtupleDropHits ) {
01075       sc = m_xtupleDropHits->addItem ("evtNo",  m_segDropHitsEvtNo);
01076       sc = m_xtupleDropHits->addItem ("layer",  m_segDropHitsLayer);
01077       sc = m_xtupleDropHits->addItem ("wire",   m_segDropHitsWire);
01078       sc = m_xtupleDropHits->addItem ("pull",   m_segDropHitsPull);
01079       sc = m_xtupleDropHits->addItem ("doca",   m_segDropHitsDoca);
01080       sc = m_xtupleDropHits->addItem ("sigma",  m_segDropHitsSigma);
01081       sc = m_xtupleDropHits->addItem ("drift",  m_segDropHitsDrift);
01082       sc = m_xtupleDropHits->addItem ("mcTkId", m_segDropHitsMcTkId);
01083     } else{
01084       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/dropHits"   << endmsg;
01085       //return;
01086     }
01087   }
01088   NTuplePtr ntAddSeg2(ntupleSvc(), "MdcxReco/addSeg2");
01089   if ( ntAddSeg2 ) { m_xtupleAddSeg2 = ntAddSeg2;}
01090   else {
01091     m_xtupleAddSeg2 = ntupleSvc()->book ("MdcxReco/addSeg2", CLID_ColumnWiseTuple, "MdcxReco event data");
01092     if ( m_xtupleAddSeg2 ) {
01093       sc = m_xtupleAddSeg2->addItem ("evtNo",   m_addSegEvtNo);
01094       sc = m_xtupleAddSeg2->addItem ("slayer",  m_addSegSlayer);
01095       sc = m_xtupleAddSeg2->addItem ("poca",    m_addSegPoca);
01096       sc = m_xtupleAddSeg2->addItem ("len",     m_addSegLen);
01097     } else{
01098       log << MSG::ERROR << "Cannot book N-tuple: MdcxReco/addSeg2"   << endmsg;
01099       //return;
01100     }
01101   }
01102   //--------------end of book ntuple------------------
01103 }

void MdcxTrackFinder::dropMultiHotInLayer ( TrkHitList list  )  [private]

Definition at line 1417 of file MdcxTrackFinder.cxx.

References TrkHotList::begin(), dt, TrkHotList::end(), TrkHitList::hotList(), TrkHitList::removeHit(), and TrkHitOnTrk::setActivity().

Referenced by FitMdcxTrack().

01417                                                                {
01418   double tdr[43];
01419   double tdr_wire[43];
01420   for(int i=0; i<43; i++){tdr[i]=9999.;}
01421 
01422   // make flag
01423   TrkHotList::hot_iterator hotIter = trkHitList->hotList().begin();
01424   while (hotIter!=trkHitList->hotList().end()) {
01425     MdcHitOnTrack* hot = const_cast<MdcHitOnTrack*> (&(*hotIter->mdcHitOnTrack()));
01426 
01427     //driftTime(tof,z)
01428     double dt = hot->mdcHit()->driftTime(0.,0.);
01429     int layer = hot->mdcHit()->layernumber();
01430     int wire = hot->mdcHit()->wirenumber();
01431 
01432     //std::cout<<__FILE__<<" "<<dt<<  std::endl;
01433     if (dt < tdr[layer]) {
01434       tdr[layer] = dt;  
01435       tdr_wire[layer] = wire;  
01436     }
01437     hotIter++;
01438   }
01439 
01440   //std::cout<<" tdr wire ";
01441   //for(int i=0;i<43;i++){
01442   //std::cout<<i<<","<<tdr_wire[i]<<" tdr="<<tdr[i]<<"\n";
01443   //}
01444   // inactive multi hit 
01445   hotIter = trkHitList->hotList().begin();
01446   while (hotIter!=trkHitList->hotList().end()) {
01447     int layer = hotIter->mdcHitOnTrack()->mdcHit()->layernumber();
01448     int wire = hotIter->mdcHitOnTrack()->mdcHit()->wirenumber();
01449     //double dt = hotIter->mdcHitOnTrack()->mdcHit()->driftTime(0.,0.)-m_bunchT0;
01450 
01451     if ((tdr[layer] <9998.) && (tdr_wire[layer]!=wire)){
01452       MdcHitOnTrack* hot = const_cast<MdcHitOnTrack*> (&(*hotIter->mdcHitOnTrack()));
01453       hot->setActivity(false);
01454       trkHitList->removeHit( hotIter->mdcHitOnTrack()->mdcHit() );
01455       //std::cout<<__FILE__<<" inactive "<< layer<<" "<<wire<<" dt "<<dt <<  std::endl;
01456     }else{
01457       hotIter++;
01458     }
01459   }
01460 }

void MdcxTrackFinder::dumpMdcxSegs ( const HepAList< MdcxSeg > &  segList  )  const [private]

Definition at line 1253 of file MdcxTrackFinder.cxx.

Referenced by execute().

01253                                                                          {
01254   cout << name()<<" found " <<segList.length() << " segs :" << endl;
01255   for (int i =0; i< segList.length(); i++){
01256     std::cout<<i<<" ";
01257     segList[i]->printSeg();
01258   }
01259 }

void MdcxTrackFinder::dumpTdsHits ( RecMdcHitCol hitList  )  [private]

Definition at line 1510 of file MdcxTrackFinder.cxx.

References MdcID::layer(), and MdcID::wire().

01510                                                       {
01511   std::cout<<__FILE__<<" "<<__LINE__<<" All hits in TDS, nhit="<<hitList->size()<<  std::endl;
01512   RecMdcHitCol::iterator it = hitList->begin();
01513   for(;it!= hitList->end(); it++){
01514     RecMdcHit* h = (*it);
01515     Identifier id(h->getMdcId());
01516     int layer = MdcID::layer(id);
01517     int wire = MdcID::wire(id);
01518     cout<<"("<< layer <<","<<wire<<") lr:"<<h->getFlagLR()<<" stat:"<<h->getStat()<<" tk:"<<h->getTrkId() <<" doca:"<<setw(10)<<h->getDoca()<<std::endl;
01519   }//end of hit list
01520 }

void MdcxTrackFinder::dumpTdsTrack ( RecMdcTrackCol trackList  )  [private]

Definition at line 1461 of file MdcxTrackFinder.cxx.

References MdcID::layer(), and MdcID::wire().

Referenced by execute(), and FitMdcxTrack().

01461                                                            {
01462   std::cout<< "tksize = "<<trackList->size() << std::endl;//yzhang debug
01463   RecMdcTrackCol::iterator it = trackList->begin();
01464   for (;it!= trackList->end();it++){
01465     RecMdcTrack *tk = *it;
01466     std::cout<< "//====RecMdcTrack "<<tk->trackId()<<"====:" << std::endl;
01467     cout <<" d0 "<<tk->helix(0)
01468       <<" phi0 "<<tk->helix(1)
01469       <<" cpa "<<tk->helix(2)
01470       <<" z0 "<<tk->helix(3)
01471       <<" tanl "<<tk->helix(4)
01472       <<endl;
01473     std::cout<<" q "<<tk->charge() 
01474       <<" theta "<<tk->theta()
01475       <<" phi "<<tk->phi()
01476       <<" x0 "<<tk->x()
01477       <<" y0 "<<tk->y()
01478       <<" z0 "<<tk->z()
01479       <<" r0 "<<tk->r()
01480       <<endl;
01481     std::cout <<" p "<<tk->p()
01482       <<" pt "<<tk->pxy()
01483       <<" px "<<tk->px()
01484       <<" py "<<tk->py()
01485       <<" pz "<<tk->pz()
01486       <<endl;
01487     std::cout<<" tkStat "<<tk->stat()
01488       <<" chi2 "<<tk->chi2()
01489       <<" ndof "<<tk->ndof()
01490       <<" nhit "<<tk->getNhits()
01491       <<" nst "<<tk->nster()
01492       <<endl;
01493 
01494     int nhits = tk->getVecHits().size();
01495     std::cout<<nhits <<" Hits: " << std::endl;
01496     for(int ii=0; ii <nhits ; ii++){
01497       Identifier id(tk->getVecHits()[ii]->getMdcId());
01498       int layer = MdcID::layer(id);
01499       int wire = MdcID::wire(id);
01500       cout<<"("<< layer <<","<<wire<<","<<tk->getVecHits()[ii]->getStat()
01501         <<",lr:"<<tk->getVecHits()[ii]->getFlagLR()<<") ";
01502     }//end of hit list
01503     std::cout << "  "<< std::endl;
01504   }//end of tk list
01505   std::cout << "  "<< std::endl;
01506 
01507 
01508 }//end of dumpTdsTrack

void MdcxTrackFinder::dumpTrack ( RecMdcTrackCol trackList  )  [private]

Definition at line 780 of file MdcxTrackFinder.cxx.

References printTrack().

Referenced by execute().

00780                                                         {
00781   RecMdcTrackCol::iterator i_tk = trackList->begin();
00782   for (;i_tk != trackList->end(); i_tk++) {
00783     printTrack(*(i_tk));
00784   }
00785 }// dumpTrack 

void MdcxTrackFinder::dumpTrackList ( const HepAList< MdcxFittedHel > &  trackList  )  const [private]

Definition at line 1326 of file MdcxTrackFinder.cxx.

Referenced by execute().

01326                                                                                   {
01327   std::cout<< "dump track list   " <<std::endl;
01328   for (int i=0;i<trackList.length();i++){
01329     std::cout<< "track  "<<i<<std::endl;
01330     for (int ihit=0 ; ihit< trackList[i]->Nhits() ; ihit++){
01331       const MdcxHit* hit = trackList[i]->XHitList()[ihit];
01332       int layer = hit->Layer();
01333       int wire = hit->WireNo();
01334       std::cout<< " ("<<layer << ","<< wire<<") ";
01335     }
01336     std::cout<<std::endl;
01337   }
01338 }// end of dumpTrackList

StatusCode MdcxTrackFinder::execute (  ) 

Definition at line 242 of file MdcxTrackFinder.cxx.

References MdcRawDataProvider::b_dropHot, MdcRawDataProvider::b_keepBadTdc, MdcRawDataProvider::b_keepUnmatch, b_saveEvent, MdcxHits::create(), dumpMdcxSegs(), dumpTdsTrack(), dumpTrack(), dumpTrackList(), Bes_Common::FATAL, fillEvent(), FitMdcxTrack(), g_eventNo, RawDataProviderSvc::getMdcDigiVec(), MdcxHits::GetMdcxHitList(), MdcxFindSegs::GetMdcxSeglist(), MdcxFindTracks::GetMdcxTrklist(), MdcxMergeDups::GetMergedTrklist(), genRecEmupikp::i, Bes_Common::INFO, m_bunchT0, m_cresol, m_debug, m_dropHot, m_eventNo, m_hist, m_keepBadTdc, m_keepUnmatch, m_maxMdcDigi, m_mdcxHits, m_minMdcDigi, m_rawDataProviderSvc, m_salvageTrk, m_t0Stat, m_timing, m_xt4time, m_xtupleEvt, mdcDigiVec, msgSvc(), nTk, EventModel::Recon::RecMdcHitCol, EventModel::Recon::RecMdcTrackCol, MdcxHits::reset(), t_nDigi, t_nTdsTk, t_nTkNum, t_nTkTot, and Bes_Common::WARNING.

00242                                     {
00243 
00244 
00245   b_saveEvent=false;
00246   setFilterPassed(b_saveEvent);
00247 #ifdef MDCXTIMEDEBUG
00248   m_timer[0]->start();
00249 #endif
00250   MsgStream log(msgSvc(), name());
00251   log << MSG::INFO << "in execute()" << endreq;
00252   StatusCode sc;
00253 
00254   nTk = 0; t_nTdsTk = 0;  //yzhang  for fill 
00255   //------------------------------------
00256   // Get event No.
00257   //------------------------------------
00258   SmartDataPtr<Event::EventHeader> evtHead(eventSvc(),"/Event/EventHeader");
00259   if (!evtHead) {
00260     log << MSG::FATAL<< "Could not retrieve event header" << endreq;
00261     return StatusCode::FAILURE;
00262   } 
00263   m_eventNo = evtHead->eventNumber();
00264   //std::cout << "x evt: "<<evtHead->runNumber()<<" " << m_eventNo<< std::endl;
00265   long t_evtNo = m_eventNo;
00266   g_eventNo = m_eventNo;
00267   //if (t_evtNo % 1000 == 0) std::cout << "x evt: " << t_evtNo << std::endl;
00268   IDataManagerSvc *dataManSvc;
00269   DataObject *aTrackCol;
00270   DataObject *aHitCol;
00271   if (!m_salvageTrk) { 
00272     SmartIF<IDataManagerSvc> dataManSvc(eventSvc()); 
00273     eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol);
00274     if(aTrackCol != NULL) {
00275       dataManSvc->clearSubTree("/Event/Recon/RecMdcTrackCol");
00276       eventSvc()->unregisterObject("/Event/Recon/RecMdcTrackCol");
00277     }
00278     eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aHitCol);
00279     if(aHitCol != NULL) {
00280       dataManSvc->clearSubTree("/Event/Recon/RecMdcHitCol");
00281       eventSvc()->unregisterObject("/Event/Recon/RecMdcHitCol");
00282     }
00283   }
00284 
00285   //------------------------------------
00286   // Initialize track collection in TDS
00287   //------------------------------------
00288   DataObject *aReconEvent;
00289   eventSvc()->findObject("/Event/Recon",aReconEvent);
00290   if (aReconEvent==NULL) {
00291     aReconEvent = new ReconEvent();
00292     sc = eventSvc()->registerObject("/Event/Recon",aReconEvent);
00293     if(sc != StatusCode::SUCCESS) {
00294       log << MSG::FATAL << "Could not register ReconEvent" <<endreq;
00295       return StatusCode::FAILURE;
00296     }
00297   }
00298   RecMdcTrackCol* trackList;
00299   eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol);
00300   if (aTrackCol) {
00301     trackList = dynamic_cast<RecMdcTrackCol*> (aTrackCol);
00302   }else{
00303     trackList = new RecMdcTrackCol;
00304     sc =  eventSvc()->registerObject(EventModel::Recon::RecMdcTrackCol, trackList);
00305     if(!sc.isSuccess()) {
00306       log << MSG::FATAL << " Could not register RecMdcTrack collection" <<endreq;
00307       return StatusCode::FAILURE;
00308     }
00309   }
00310   RecMdcHitCol* hitList;
00311   eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aHitCol);
00312   if (aHitCol) {
00313     hitList = dynamic_cast<RecMdcHitCol*> (aHitCol);
00314   }else{
00315     hitList = new RecMdcHitCol;
00316     sc =  eventSvc()->registerObject(EventModel::Recon::RecMdcHitCol, hitList);
00317     if(!sc.isSuccess()) {
00318       log << MSG::FATAL << " Could not register RecMdcHit collection" <<endreq;
00319       return StatusCode::FAILURE;
00320     }
00321   }
00322 
00323   //------------------------------------
00324   // Initialize hit collection in TDS
00325   //------------------------------------
00326   DataObject *pnode = 0;
00327   sc = eventSvc()->retrieveObject("/Event/Hit",pnode);
00328   if(!sc.isSuccess()) {
00329     pnode = new DataObject;
00330     sc = eventSvc()->registerObject("/Event/Hit",pnode);
00331     if(!sc.isSuccess()) {
00332       log << MSG::FATAL << " Could not register /Event/Hit branch " <<endreq;
00333       return StatusCode::FAILURE;
00334     }
00335   }
00336   SmartDataPtr<MdcHitCol> m_hitCol(eventSvc(), "/Event/Hit/MdcHitCol");
00337   if (!m_hitCol){
00338     m_hitCol= new MdcHitCol;
00339     sc = eventSvc()->registerObject("/Event/Hit/MdcHitCol",m_hitCol);
00340     if(!sc.isSuccess()) {
00341       log << MSG::FATAL << " Could not register hit collection" <<endreq;
00342       return StatusCode::FAILURE;
00343     }
00344   } 
00345 
00346 
00347   //------------------------------------
00348   // Get bunch time t0 (ns) and timing
00349   //------------------------------------
00350   m_bunchT0 = -999.;
00351   SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol");
00352   if (!aevtimeCol || aevtimeCol->size()==0) {
00353     log << MSG::WARNING<< "evt "<<m_eventNo<<" Could not find RecEsTimeCol"<< endreq;
00354     return StatusCode::SUCCESS;
00355   }
00356 
00357   RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
00358   for(; iter_evt!=aevtimeCol->end(); iter_evt++){
00359     m_bunchT0 =  (*iter_evt)->getTest();
00360     m_t0Stat = (*iter_evt)->getStat();
00361     if ((m_t0Stat==0) || (m_bunchT0 < 0.) || (m_bunchT0 > 9999.0) ){
00362       log << MSG::WARNING << "Skip evt:"<<m_eventNo<< " by  t0 = "<<m_bunchT0 << endreq;
00363       //return StatusCode::SUCCESS;
00364     }
00365   }
00366   if(m_debug>1) std::cout<<name()<<" t0  "<<m_bunchT0<<" t0Stat  "<<m_t0Stat<<std::endl;
00367   int trigtiming=-10;
00368   SmartDataPtr<TrigData> trigData(eventSvc(),"/Event/Trig/TrigData");
00369   if(trigData){
00370     log << MSG::INFO <<"Trigger conditions 0--43:"<<endreq;
00371     for(int i = 0; i < 48; i++) {
00372       log << MSG::INFO << trigData->getTrigCondName(i)<<" ---- "<<trigData->getTrigCondition(i)<< endreq;
00373     }
00374     for(int i = 0; i < 16; i++) log << MSG::INFO << "Trigger channel "<< i << ": " << trigData->getTrigChannel(i) << endreq;
00375     m_timing=trigData->getTimingType();
00376     //cout<<"-----------------trigger timing type-----------------------: "<<trigtiming<<endl;
00377     log << MSG::INFO <<"Tigger Timing type: "<< trigtiming << endreq;
00378   }
00379 
00380   //------------------------------------
00381   //  Initialize MdcxHits
00382   //------------------------------------
00383   m_mdcxHits.reset();
00384   uint32_t getDigiFlag = 0;
00385   getDigiFlag += m_maxMdcDigi;
00386   if(m_dropHot||m_salvageTrk) getDigiFlag |= MdcRawDataProvider::b_dropHot;
00387   if(m_keepBadTdc)  getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
00388   if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
00389   mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag);
00390   t_nDigi = mdcDigiVec.size();
00391 
00392   if (0 == t_nDigi ){
00393     log << MSG::WARNING << " No hits in MdcDigiVec" << endreq;
00394     return StatusCode::SUCCESS;
00395   }
00396 
00397 
00398   // fill Mc truth
00399   //if(m_hist) fillMcTruth();
00400 
00401   //skip event by hit numbe
00402   if (t_nDigi < m_minMdcDigi){
00403     log << MSG::WARNING << " Skip this event for MdcDigiVec.size() < "<<m_minMdcDigi << endreq;
00404     return StatusCode::SUCCESS;
00405   }
00406   m_mdcxHits.create(mdcDigiVec, m_bunchT0, m_cresol); 
00407   const HepAList<MdcxHit>& dchitlist = m_mdcxHits.GetMdcxHitList();
00408 
00409   //--------------------------------------------
00410   //  Make segments (MdcxSeg's) out of MdcxHit's
00411   //-------------------------------------------- 
00412   MdcxFindSegs dcsegs(dchitlist,m_debug);
00413   const HepAList<MdcxSeg>& seglist = dcsegs.GetMdcxSeglist();
00414   if(m_debug > 1 ){ dumpMdcxSegs(seglist);}
00415   //if(m_hist){ fillMdcxSegs(seglist);}
00416 
00417   //--------------------------------------------
00418   //  Make tracks (MdcxFittedHel's) out of MdcxSeg's
00419   //--------------------------------------------
00420   MdcxFindTracks dctrks(seglist,m_debug);
00421   HepAList<MdcxFittedHel>& firsttrkl = (HepAList<MdcxFittedHel>&)dctrks.GetMdcxTrklist();
00422   if(m_debug>1) dumpTrackList(firsttrkl);
00423 
00424   //if(m_hist){ fillTrkl(firsttrkl);}
00425 
00426   //if(m_debug>1){
00427   //  std::cout << "dchitlist after find tracks before MergeDups, nhits=" << dchitlist.length() << std::endl;
00428   //  for (int ii = 0; ii < dchitlist.length(); ii++) {
00429   //    dchitlist[ii]->print(std::cout, ii);
00430   //  }
00431   //  std::cout<<std::endl;
00432   //}
00433   MdcxMergeDups dcmergeem(firsttrkl,m_debug);
00434   HepAList<MdcxFittedHel>& trkl = (HepAList<MdcxFittedHel>&)dcmergeem.GetMergedTrklist();
00435 
00436   //if (m_debug > 1 ){
00437   //  cout << "MdcxTrackFinder: after MergeDups, have "
00438   //  << trkl.length() << " track(s). nhits=" << dchitlist.length() << endl;
00439   //  for (int ii = 0; ii < dchitlist.length(); ii++) {
00440   //    dchitlist[ii]->print(std::cout, ii);
00441   //  }
00442   //  std::cout<<std::endl;
00443   //}
00444 
00445   //---------------------------------------------------------
00446   //  Put my tracks into official fitter and store to TDS 
00447   //---------------------------------------------------------- 
00448 
00449 
00450   sc = FitMdcxTrack(trkl, dchitlist, m_hitCol, trackList, hitList);
00451   if (!sc.isSuccess()) {return StatusCode::SUCCESS;}
00452   t_nTdsTk = trackList->size();
00453 
00454   t_nTkTot += trackList->size();
00455   if(t_nTdsTk<20) t_nTkNum[t_nTdsTk]++;
00456 
00457 #ifdef MDCXTIMEDEBUG
00458   m_timer[0]->stop();
00459   m_xt4time = m_timer[0]->elapsed();
00460   m_xtupleEvt->write();
00461 #endif
00462 
00463   if(m_hist) fillEvent();
00464   if (m_debug > 0) {
00465     DataObject* pNode;
00466     eventSvc()->retrieveObject("/Event/Recon/RecMdcTrackCol",pNode);
00467     RecMdcTrackCol *tmpTrackCol = dynamic_cast<RecMdcTrackCol*> (pNode);
00468     eventSvc()->retrieveObject("/Event/Recon/RecMdcHitCol",pNode);
00469     int nTdsTk = 0;
00470     if(tmpTrackCol) nTdsTk = tmpTrackCol->size(); 
00471 
00472     //if (t_evtNo % 1000 == 0) {
00473     std::cout<< "MdcxTrackFinder: evtNo "<< m_eventNo << " t0="<<m_bunchT0
00474       <<" Found " <<trkl.length() 
00475       <<" keep "<< t_nTdsTk
00476       <<" finialy keep "<< nTdsTk;
00477 
00478     int ndelete =0; trkl.length() - trackList->size();
00479     if( ndelete>0 ) std::cout <<" delete "<< ndelete;
00480     std::cout <<" track(s)" <<endl;
00481     //}
00482 
00483     if(m_debug>1)dumpTdsTrack(tmpTrackCol);
00484     if(m_debug>1)dumpTrack(tmpTrackCol);
00485     //dumpTdsHits(tmpHitCol);
00486 
00487   }
00488   if((trackList->size()!=4) ) b_saveEvent = true;
00489   setFilterPassed(b_saveEvent); 
00490   return StatusCode::SUCCESS;
00491 }

void MdcxTrackFinder::fillEvent (  )  [private]

Definition at line 1106 of file MdcxTrackFinder.cxx.

References iter(), MdcID::layer(), m_bunchT0, m_eventNo, m_t0Stat, m_t0Truth, m_xt4Charge, m_xt4EvtNo, m_xt4Layer, m_xt4nDigi, m_xt4nRecTk, m_xt4nTdsTk, m_xt4t0, m_xt4t0Stat, m_xt4t0Truth, m_xt4Time, m_xtupleEvt, RawDataUtil::MdcCharge(), mdcDigiVec, RawDataUtil::MdcTime(), nTk, t_nDigi, and t_nTdsTk.

Referenced by execute().

01106                                {
01107   //-----------get raw digi-----------------------
01108   if (t_nDigi<=0) return;
01109   if (m_xtupleEvt == NULL ) return;
01110   m_xt4EvtNo = m_eventNo;
01111   m_xt4t0 = m_bunchT0;
01112   m_xt4t0Stat = m_t0Stat;
01113   m_xt4t0Truth = m_t0Truth;
01114   m_xt4nRecTk = nTk;
01115   m_xt4nTdsTk = t_nTdsTk;
01116   m_xt4nDigi = t_nDigi;
01117   int iDigi=0;
01118   MdcDigiCol::iterator iter = mdcDigiVec.begin();
01119   for (;iDigi<t_nDigi; iter++ ) {
01120     int l = MdcID::layer((*iter)->identify());
01121     m_xt4Layer[iDigi] = l;
01122     //int w = MdcID::wire((*iter)->identify());
01123     m_xt4Time[iDigi] = RawDataUtil::MdcTime((*iter)->getTimeChannel());
01124     m_xt4Charge[iDigi] = RawDataUtil::MdcCharge((*iter)->getChargeChannel());
01125     //m_xt4rawHit[l]++;
01126     iDigi++;
01127   }//end for iter
01128   m_xtupleEvt->write();
01129 }

void MdcxTrackFinder::fillMcTruth (  )  [private]

Definition at line 1360 of file MdcxTrackFinder.cxx.

References haveDigi, Bes_Common::INFO, MdcID::layer(), m_mcHist, m_t0Truth, mdcDigiVec, msgSvc(), w, and MdcID::wire().

01360                                  {
01361   MsgStream log(msgSvc(), name());
01362   StatusCode sc;
01363   //Initialize
01364   for (int ii=0;ii<43;ii++){
01365     for (int jj=0;jj<288;jj++){
01366       haveDigi[ii][jj] = -2;
01367     }
01368   }
01369   int nDigi = mdcDigiVec.size();
01370   for (int iDigi =0 ;iDigi<nDigi; iDigi++ ) {
01371     int l = MdcID::layer((mdcDigiVec[iDigi])->identify());
01372     int w = MdcID::wire((mdcDigiVec[iDigi])->identify());
01373     //haveDigi[l][w]=(mdcDigiVec[iDigi])->getTrackIndex();
01374     haveDigi[l][w]=1;
01375   }
01376 
01377   if( m_mcHist ){
01378     //------------------get event start time truth-----------
01379     m_t0Truth = -10.;
01380     SmartDataPtr<Event::McParticleCol> mcParticleCol(eventSvc(),"/Event/MC/McParticleCol");
01381     if(!mcParticleCol){
01382       log << MSG::INFO << "Could not retrieve McParticelCol" << endreq;
01383     }else {
01384       Event::McParticleCol::iterator iter_mc = mcParticleCol->begin();
01385       for (;iter_mc != mcParticleCol->end(); iter_mc++){
01386         if ((*iter_mc)->primaryParticle()){
01387           m_t0Truth = (*iter_mc)->initialPosition().t();
01388           //px = (*iter_mc)->initialFourMomentum().x()/1000.;//GeV
01389           //py = (*iter_mc)->initialFourMomentum().y()/1000.;//GeV
01390           //pz = (*iter_mc)->initialFourMomentum().z()/1000.;//GeV
01391         }
01392       }
01393     }
01394   }
01395   //------------------Retrieve MC truth MdcMcHit------------
01396   /*
01397      SmartDataPtr<Event::MdcMcHitCol> mcMdcMcHitCol(eventSvc(),"/Event/MC/MdcMcHitCol"); 
01398      if (!mcMdcMcHitCol) {
01399      log << MSG::WARNING << "Could not find MdcMcHit" << endreq; 
01400      }else{
01401      Event::MdcMcHitCol::iterator iter_mchit = mcMdcMcHitCol->begin();
01402      for (;iter_mchit != mcMdcMcHitCol->end(); iter_mchit++ ) {
01403      const Identifier id= (*iter_mchit)->identify();
01404      int layer = MdcID::layer(id);
01405      int wire = MdcID::wire(id);
01406      mcDrift[layer][wire] = (*iter_mchit)->getDriftDistance();  //drift in MC.
01407      mcLR[layer][wire] = (*iter_mchit)->getPositionFlag();
01408      mcX[layer][wire] = (*iter_mchit)->getPositionX();
01409      mcY[layer][wire] = (*iter_mchit)->getPositionY();
01410      mcZ[layer][wire] = (*iter_mchit)->getPositionZ();
01411      if (mcLR[layer][wire] == 0) mcLR[layer][wire] = -1;
01412      }
01413      }
01414      */
01415 }

void MdcxTrackFinder::fillMdcxSegs ( const HepAList< MdcxSeg > &  segList  )  const [private]

Definition at line 1261 of file MdcxTrackFinder.cxx.

References m_xtsChisq, m_xtsD0, m_xtsD0_sl_approx, m_xtsInSeg, m_xtsLayer, m_xtsNDigi, m_xtsOmega, m_xtsPat, m_xtsPhi0, m_xtsPhi0_sl_approx, m_xtsSl, m_xtsWire, m_xtsXline_bbrrf, m_xtsXline_slope, m_xtsYline_bbrrf, m_xtsYline_slope, m_xtupleSeg, MdcxSegPatterns::patt3, and MdcxSegPatterns::patt4.

01261                                                                          {
01262   if(!m_xtupleSeg) return;
01263 
01264   int cellMax[43] ={
01265     40,44,48,56,     64,72,80,80,     76,76,88,88,
01266     100,100,112,112, 128,128,140,140, 160,160,160,160,
01267     176,176,176,176, 208,208,208,208, 240,240,240,240,
01268     256,256,256,256, 288,288,288 };
01269   // Fill hits of every layer after segment finding
01270   int hitInSegList[43][288];
01271   for (int ii=0;ii<43;ii++){
01272     for (int jj=0;jj<cellMax[ii];jj++){ hitInSegList[ii][jj] = 0; }
01273   }
01274   for (int i = 0; i < segList.length(); i++) {
01275     MdcxSeg* aSeg = segList[i];
01276     for (int ihit=0 ; ihit< aSeg->Nhits() ; ihit++){
01277       const MdcxHit* hit = aSeg->XHitList()[ihit];
01278       int layer = hit->Layer();
01279       int wire = hit->WireNo();
01280       hitInSegList[layer][wire]++;
01281     }
01282   }
01283   for (int i = 0; i < segList.length(); i++) {
01284     MdcxSeg* aSeg = segList[i];
01285     if(aSeg==NULL)continue;
01286     m_xtsSl = aSeg->SuperLayer();  
01287     m_xtsD0 = aSeg->D0();  
01288     m_xtsOmega = aSeg->Omega();  
01289     m_xtsPhi0 = aSeg->Phi0();  
01290     m_xtsD0_sl_approx = aSeg->D0_sl_approx();
01291     m_xtsPhi0_sl_approx = aSeg->Phi0_sl_approx();
01292     m_xtsXline_bbrrf = aSeg->Xline_bbrrf();
01293     m_xtsYline_bbrrf = aSeg->Yline_bbrrf();
01294     m_xtsXline_slope = aSeg->Xline_slope();
01295     m_xtsYline_slope = aSeg->Yline_slope();
01296     int patIndex = -1;
01297     for (int ii = 0;ii<14;ii++){
01298       if (aSeg->Pat() == (int) MdcxSegPatterns::patt4[ii]){
01299         patIndex = ii;
01300         break;
01301       }
01302     }
01303     for (int ii = 0;ii<20;ii++){
01304       if (aSeg->Pat() == (int) MdcxSegPatterns::patt3[ii]){
01305         patIndex = ii +15;
01306         break;
01307       }
01308     }
01309     m_xtsPat = patIndex;
01310     m_xtsChisq = aSeg->Chisq();
01311     m_xtsNDigi = aSeg->Nhits();
01312     for (int ihit=0 ; ihit< aSeg->Nhits() ; ihit++){
01313       const MdcxHit* hit = aSeg->XHitList()[ihit];
01314       int layer = hit->Layer();
01315       int wire = hit->WireNo();
01316       m_xtsLayer[ihit] = layer;
01317       m_xtsWire[ihit] = wire;
01318       m_xtsInSeg[ihit] = hitInSegList[layer][wire];
01319       //std::cout<< "hitInSegList   "<<hitInSegList[layer][wire] << std::endl;//yzhang debug
01320     }
01321     m_xtupleSeg->write();
01322   }
01323 
01324 }//end of fillMdcxSegs

void MdcxTrackFinder::fillTrack ( TrkRecoTrk aTrack  )  [private]

Definition at line 1131 of file MdcxTrackFinder.cxx.

References TrkHitList::begin(), TrkAbsFit::charge(), TrkAbsFit::chisq(), TrkExchangePar::d0(), TrkHitList::end(), TrkRecoTrk::fitResult(), TrkFit::helix(), TrkRecoTrk::hits(), genRecEmupikp::i, m_bunchT0, m_debug, m_eventNo, m_t0Stat, m_t0Truth, m_timing, m_xact, m_xadc, m_xambig, m_xchi2, m_xcpa, m_xd0, m_xdoca, m_xdriftD, m_xdriftT, m_xentra, m_xevtNo, m_xfltLen, m_xlayer, m_xnAct, m_xnDof, m_xnHit, m_xnSlay, m_xnSt, m_xp, m_xphi0, m_xpocax, m_xpocay, m_xpocaz, m_xpt, m_xpz, m_xq, m_xresid, m_xsigma, m_xt0, m_xt0Stat, m_xt0Truth, m_xtanl, m_xtdc, m_xtiming, m_xtof, m_xtuple1, m_xwire, m_xx, m_xy, m_xz, m_xz0, TrkAbsFit::momentum(), TrkFit::nActive(), TrkAbsFit::nDof(), TrkHitList::nHit(), TrkExchangePar::phi0(), boss::pos, TrkAbsFit::position(), TrkAbsFit::pt(), recHitMap, TrkExchangePar::tanDip(), and TrkExchangePar::z0().

Referenced by store().

01131                                                  {
01132 
01133   if(!m_xtuple1) return;
01134   //-----------get MC truth data-------------------
01135   m_xevtNo = m_eventNo;
01136   int recHitMap[43][288]={0};
01137   //int nTk = (*m_tracks).nTrack();
01138   //for (int itrack = 0; itrack < nTk; itrack++) {
01139   if (atrack==NULL) return;
01140 
01141   const TrkFit* fitResult = atrack->fitResult();
01142   if (fitResult == 0) return;//check the fit worked
01143 
01144   //for fill ntuples
01145   int nSt=0; //int nSeg=0; 
01146   int seg[11] = {0}; int segme;
01147   //-----------hit list-------------
01148   HitRefVec  hitRefVec; 
01149   const TrkHitList* hitlist = atrack->hits();
01150 
01151   TrkHitList::hot_iterator hot = hitlist->begin();
01152   int layerCount[43]={0};
01153   int i=0;
01154   for (;hot!= hitlist->end();hot++){
01155 
01156     const MdcRecoHitOnTrack* recoHot;                     
01157     recoHot = dynamic_cast<const MdcRecoHitOnTrack*> (&(*hot));
01158     int layer = recoHot->mdcHit()->layernumber();
01159     int wire  = recoHot->mdcHit()->wirenumber();
01160     m_xlayer[i]    = layer;
01161     //m_xt4recHit[layer]++;//fill rec hit for hit eff
01162     m_xwire[i]      = wire;
01163     layerCount[layer]++;
01164     recHitMap[layer][wire]++;
01165     m_xambig[i]    = recoHot->wireAmbig();// wire ambig
01166     //fltLen
01167     double fltLen = recoHot->fltLen(); 
01168     m_xfltLen[i]   = fltLen;
01169     double tof    = recoHot->getParentRep()->arrivalTime(fltLen);
01170     //position
01171     HepPoint3D pos; Hep3Vector dir;    
01172     recoHot->getParentRep()->traj().getInfo(fltLen,pos,dir);
01173     m_xx[i] = pos.x();       
01174     m_xy[i] = pos.y();       
01175     m_xz[i] = pos.z();       
01176     m_xdriftT[i]   = recoHot->mdcHit()->driftTime(tof,pos.z());
01177     m_xtof[i]       = tof;
01178     m_xdriftD[i]   = recoHot->drift();
01179     m_xsigma[i]    = recoHot->hitRms();     
01180     m_xtdc[i]       = recoHot->rawTime();
01181     m_xadc[i]       = recoHot->mdcHit()->charge(); 
01182     m_xdoca[i]      = recoHot->dcaToWire();//sign w.r.t. dirft() FIXME 
01183     m_xentra[i]    = recoHot->entranceAngle();
01184     //m_xentraHit[i]    = recoHot->entranceAngleHit();
01185     m_xact[i] = recoHot->isActive();
01186     //resid
01187     double res=999.,rese=999.;
01188     if (recoHot->resid(res,rese,false)){
01189     }else{}
01190     m_xresid[i] = res;
01191     //for n seg
01192     segme=0;
01193     if ( layer >0 ) {segme=(layer-1)/4;}
01194     seg[segme]++;
01195     if (recoHot->layer()->view()) { ++nSt; }
01196     i++;
01197   }// end fill hit
01198 
01199   int nSlay=0;
01200   for(int i=0;i<11;i++){
01201     if (seg[i]>0) nSlay++;
01202   }
01203   m_xnSlay = nSlay;
01204 
01205   //------------fill track result-------------
01206   //m_xtkId = itrack;
01207   //track parameters at closest approach to beamline
01208   double fltLenPoca = 0.0;
01209   TrkExchangePar helix = fitResult->helix(fltLenPoca);
01210   m_xphi0 = helix.phi0();
01211   m_xtanl = helix.tanDip();
01212   m_xz0 = helix.z0();
01213   m_xd0 = helix.d0();
01214   if(fabs(m_xz0)>20||fabs(m_xd0)>2) {
01215     //b_saveEvent = true;
01216     if(m_debug>1) std::cout<<"evt:"<<m_eventNo<<" BigVtx:"
01217       <<" d0 "<<helix.d0()<<" z0 "<<helix.z0()<<std::endl;
01218   }
01219   m_xpt = fitResult->pt();
01220   if (m_xpt > 0.00001){
01221     m_xcpa = fitResult->charge()/fitResult->pt();
01222   }
01223   //momenta and position
01224   CLHEP::Hep3Vector p1 = fitResult->momentum(fltLenPoca);
01225   double px,py,pz,pxy;
01226   pxy = fitResult->pt();
01227   px = p1.x();
01228   py = p1.y();
01229   pz = p1.z();
01230   m_xp = p1.mag();
01231   m_xpz = pz;
01232   HepPoint3D poca = fitResult->position(fltLenPoca);
01233   m_xpocax = poca.x();
01234   m_xpocay = poca.y();
01235   m_xpocaz = poca.z(); 
01236 
01237   m_xq    = fitResult->charge();
01238   m_xnAct = fitResult->nActive();
01239   m_xnHit = hitlist->nHit();
01240   m_xnDof = fitResult->nDof();
01241   m_xnSt  = nSt;
01242   m_xchi2 = fitResult->chisq();
01243   //for (int l=0;l<43;l++) m_xlayerCount[l] = layerCount[l];
01244   m_xt0 = m_bunchT0;
01245   m_xtiming = m_timing;
01246   m_xt0Stat = m_t0Stat;
01247   m_xt0Truth= m_t0Truth;
01248   m_xtuple1->write();
01249   //}//end of loop rec trk list
01250 
01251 }//end of 

void MdcxTrackFinder::fillTrkl ( const HepAList< MdcxFittedHel > &  firsttrkl  )  const [private]

Definition at line 1340 of file MdcxTrackFinder.cxx.

References m_xt5Layer, m_xt5Wire, and m_xtupleTrkl.

01340                                                                              {
01341   if(!m_xtupleTrkl) return;
01342   int nDigi = 0;
01343   int iDigi = 0;
01344   for (int i =0; i< firsttrkl.length(); i++){
01345     nDigi+= firsttrkl[i]->Nhits();
01346   }
01347   for (int i=0;i<firsttrkl.length();i++){
01348     for (int ihit=0 ; ihit< firsttrkl[i]->Nhits() ; ihit++){
01349       const MdcxHit* hit = firsttrkl[i]->XHitList()[ihit];
01350       int layer = hit->Layer();
01351       int wire = hit->WireNo();
01352       m_xt5Layer = layer;
01353       m_xt5Wire = wire;
01354       m_xtupleTrkl->write();
01355       iDigi++;
01356     }
01357   }
01358 }//end of fillTrkl

StatusCode MdcxTrackFinder::finalize (  ) 

Definition at line 493 of file MdcxTrackFinder.cxx.

References genRecEmupikp::i, Bes_Common::INFO, msgSvc(), t_nTkNum, and t_nTkTot.

00493                                      {
00494   MsgStream log(msgSvc(), name());
00495   log << MSG::INFO << "in finalize()" << endreq;
00496 
00497   std::cout<< " --after " << name() << " keep " << t_nTkTot<< " tracks  "<<std::endl;
00498   for(int i=0; i<20; i++){
00499     if(t_nTkNum[i]>0)std::cout<< " nTk="<< i << " "<< t_nTkNum[i]<< std::endl;
00500   }
00501 
00502   //tot evtNo, trkNum
00503   return StatusCode::SUCCESS;
00504 }

StatusCode MdcxTrackFinder::FitMdcxTrack ( HepAList< MdcxFittedHel > &  trkList,
const HepAList< MdcxHit > &  dchitlist,
MdcHitCol hitCol,
RecMdcTrackCol trackList,
RecMdcHitCol hitList 
) [private]

Definition at line 546 of file MdcxTrackFinder.cxx.

References EvtCyclic3::c_str(), TrkAbsFit::chisq(), MdcxFittedHel::Chisq(), MdcxHel::D0(), dropMultiHotInLayer(), dumpTdsTrack(), showlog::err, MdcxFittedHel::Fail(), TrkHitList::fit(), MdcxAddHits::GetAssociates(), MdcxFittedHel::Grow(), genRecEmupikp::i, m_addHitCut, m_bunchT0, m_context, m_debug, m_dropMultiHotInLayer, m_lineFit, TrkSimpleMaker< T >::makeTrack(), MdcxHitsToHots(), msgSvc(), TrkFit::nActive(), MdcxHel::Omega(), MdcxHel::Phi0(), TrkErrCode::print(), MdcxFittedHel::ReFit(), MdcxFittedHel::SetChiDofBail(), TrkSimpleMaker< T >::setFlipAndDrop(), store(), TrkErrCode::success(), MdcxHel::Tanl(), MdcxFittedHel::VaryRes(), MdcxFittedHel::XHitList(), and MdcxHel::Z0().

Referenced by execute().

00548                                                      {
00549   StatusCode sc;
00550   MsgStream log(msgSvc(), name());
00551 
00552   //--Add Hit to MdcxFittedHel
00553   //if(m_debug>1){
00554   //  std::cout << "dchitlist before addHits nhits=" << dchitlist.length() << std::endl;
00555   //  for (int ii = 0; ii < dchitlist.length(); ii++) {
00556   //    dchitlist[ii]->print(std::cout, ii);
00557   //  }
00558   //  std::cout<<std::endl;
00559   //}
00560   MdcxAddHits dcaddem(trkl, dchitlist, m_addHitCut);
00561   //if (m_debug > 1){
00562   //  cout << "MdcxTrackFinder: after AddHits, have "
00563   //    << trkl.length() << " track(s). nhits=" << dchitlist.length() << endl;
00564   //  for (int ii = 0; ii < dchitlist.length(); ii++) {
00565   //    dchitlist[ii]->print(std::cout, ii);
00566   //  }
00567   //  std::cout<<std::endl;
00568   //}
00569 
00570   TrkLineMaker linefactory; 
00571   TrkHelixMaker helixfactory;
00572 
00573 
00574   int tkLen = trkl.length();//FIXME
00575   for (int kk=0; kk< tkLen; kk++){
00576     const HepAList<MdcxHit>& xhits = trkl[kk]->XHitList();
00577     if(m_debug>2){
00578       std::cout<<__FILE__<<" FitMdcxTrack "<<kk<<  std::endl;
00579       for(int i=0; i<xhits.length(); i++){ xhits[i]->print(std::cout); }
00580       std::cout<<std::endl;
00581     }
00582 
00583     if(m_debug>2) std::cout<<" before add hits nhits="<<xhits.length()<<  std::endl;
00584     HepAList<MdcxHit> xass = dcaddem.GetAssociates(kk);
00585     if(m_debug>2){
00586       std::cout<<" after,add "<<xass.length()<<" hits"<<std::endl;
00587     }
00588 
00589     MdcxFittedHel mdcxHelix = *trkl[kk];
00590     double thechisq = mdcxHelix.Chisq();
00591     TrkExchangePar tt(-mdcxHelix.D0(),mdcxHelix.Phi0(),mdcxHelix.Omega(),-mdcxHelix.Z0(),-mdcxHelix.Tanl());
00592     TrkRecoTrk* aTrack;
00593     int nparm;
00594 
00595     if (m_lineFit) {
00597       aTrack = linefactory.makeTrack(tt, thechisq, *m_context, m_bunchT0*1.e-9);
00598       nparm = 4;
00599       linefactory.setFlipAndDrop(*aTrack, true, true);
00600     } else {
00601       aTrack = helixfactory.makeTrack(tt, thechisq, *m_context, m_bunchT0*1.e-9);
00602       nparm = 5;
00603       helixfactory.setFlipAndDrop(*aTrack, true, true);
00604     }
00605 
00606     TrkHitList* m_trkHitList = aTrack->hits();
00607     if (0 == m_trkHitList) {
00608       delete aTrack; 
00609       aTrack = NULL;
00610       continue;
00611     }
00612 
00613 
00614     MdcxHitsToHots(mdcxHelix, xhits, m_trkHitList, m_hitCol);
00615     //std::cout<<"xhits---------------------"<<std::endl;//debug
00616     //m_trkHitList->hotList().printAll(cout);//debug
00617     MdcxHitsToHots(mdcxHelix, xass, m_trkHitList, m_hitCol);
00618     //std::cout<<"xass----------------------"<<std::endl;//debug
00619     //m_trkHitList->hotList().printAll(cout);//debug
00620     //std::cout<<"size "<<m_trkHitList->hotList().nHit()<<std::endl;
00621     //int beforDrop = m_trkHitList->hotList().nHit();
00622     if(m_dropMultiHotInLayer) dropMultiHotInLayer(m_trkHitList);//yzhang debug FIXME
00623     //int afterDrop = m_trkHitList->hotList().nHit();
00624     //std::cout<<"drop "<<beforDrop-afterDrop<<" keep:"<<afterDrop<<::endl;
00625     if(m_debug>1){ std::cout<< "== put to official fitter  "<<std::endl;}
00626     TrkErrCode err = m_trkHitList->fit();
00627 
00628     if(m_debug>1){
00629       std::cout<< "== after official fitter  "<<std::endl;
00630       aTrack->printAll(std::cout);
00631     }
00632 
00633     const TrkFit* theFit = aTrack->fitResult();
00634     float rcs = 10000.0;
00635 
00636     if (theFit) {
00637       int ndof = theFit->nActive()-nparm;
00638       if (ndof > 0) rcs = theFit->chisq()/float(ndof);
00639       if (m_debug>1) {
00640         if (4 == nparm) cout << " TrkLineMaker";  
00641         else  cout << " TrkHelixMaker"; 
00642         cout << " trkNo. " << kk << " success " << err.success() << " rcs " << rcs
00643           << " chi2 " << theFit->chisq() << " nactive  " << theFit->nActive() << endl;
00644       }
00645     }
00646 
00647     if ( (1 == err.success()) && (rcs < 20.0) ) {
00648       if(m_debug>1) std::cout<<"== fit success "<<std::endl;//yzhang debug
00649       if (4 == nparm) {
00650         linefactory.setFlipAndDrop(*aTrack, false, false);
00651       } else {
00652         helixfactory.setFlipAndDrop(*aTrack, false, false);
00653       }
00654       //-------------Stick the found tracks into the list in RecMdcTrackCol--------
00655       if (m_debug>1) { cout << "MdcxTrackFinder: accept a track " << endl; }
00656       // update history
00657       aTrack->status()->addHistory(err,name().c_str()); //yzhang FIXME 
00658       store(aTrack, trackList, hitList);//aTrack have been deleted
00659     } else if ( (2 == err.success()) && (rcs < 150.0) ) {  
00660       if(m_debug > 1) std::cout<<"== fit success = 2, refit now"<<std::endl;//yzhang debug
00661       int nrefit = 0;
00662       while (nrefit++ < 5) {
00663         if (m_debug>1) std::cout << "refit time " << nrefit << std::endl;
00664         err = m_trkHitList->fit();
00665         if (err.success() == 1) break;
00666       }
00667       if (err.success() == 1) {
00668         if (4 == nparm) {
00669           linefactory.setFlipAndDrop(*aTrack, false, false);
00670         } else {
00671           helixfactory.setFlipAndDrop(*aTrack, false, false);
00672         }
00673         //-------------Stick the found tracks into the list in RecMdcTrackCol--------
00674         //if (m_debug>1) { cout << "MdcxTrackFinder: accept a track and store to TDS" << endl; }
00675         // update history
00676         aTrack->status()->addHistory(err,name().c_str()); //yzhang FIXME 
00677         store(aTrack, trackList, hitList);//aTrack have been deleted
00678       }      
00679     } else {
00680       if (m_debug >1) {
00681         std::cout<<"== fit faild "<<std::endl;//yzhang debug
00682         err.print(cout);
00683         cout << endl;
00684       }
00685       delete aTrack;
00686       aTrack = NULL;
00687       //---------------------------------------  
00688       //  Fit no good; try a better input helix
00689       //---------------------------------------
00690       if(m_debug>1) std::cout<<"== Fit no good; try a better input helix"<<std::endl;//yzhang debug
00691       mdcxHelix.Grow(*trkl[kk],xass);
00692       mdcxHelix.VaryRes(); 
00693       mdcxHelix.SetChiDofBail(1500);//yzhang add 2009-11-03 
00694       int fail = mdcxHelix.ReFit();
00695       if(m_debug>1)std::cout<<__FILE__<<" refit fail:"<<fail<<  std::endl;
00696       if (!mdcxHelix.Fail()) {
00697         const HepAList<MdcxHit>& bxhits = mdcxHelix.XHitList(); 
00698         thechisq = mdcxHelix.Chisq();
00699         TrkExchangePar tb(mdcxHelix.D0(),mdcxHelix.Phi0(),mdcxHelix.Omega(),mdcxHelix.Z0(),mdcxHelix.Tanl());
00700         TrkRecoTrk* bTrack;
00701         if (4 == nparm){
00702           bTrack = linefactory.makeTrack(tb,thechisq,*m_context,m_bunchT0*1.e-9);
00703           linefactory.setFlipAndDrop(*bTrack, false, false);
00704         }else{
00705           bTrack = helixfactory.makeTrack(tb,thechisq,*m_context,m_bunchT0*1.e-9); 
00706           helixfactory.setFlipAndDrop(*bTrack, false, false);
00707         }
00708         TrkHitList* bhits = bTrack->hits();  
00709         if (0 == bhits){delete bTrack; bTrack = NULL; continue;}
00710 
00711         MdcxHitsToHots(mdcxHelix, bxhits, bhits, m_hitCol);
00712         TrkErrCode berr = bhits->fit();
00713         const TrkFit* bFit = bTrack->fitResult();
00714         rcs=10000.0;
00715         if (bFit) {
00716           int ndof = bFit->nActive() - nparm;
00717           if (ndof > 0) rcs = bFit->chisq()/float(ndof);
00718           if (m_debug >1) {
00719             if (4 == nparm) cout << " TrkLineMaker";
00720             else cout << " TrkHelixMaker";
00721             cout << " success trkNo. " << kk << " status " << berr.success() << " rcs " << rcs
00722               << " chi2 " << bFit->chisq() << " nactive  "<< bFit->nActive() << endl;
00723           }
00724         }
00725         if ( ( 1 == berr.success() ) && ( rcs < 50.0 ) ) {
00726           // update history
00727           bTrack->status()->addHistory(berr,name().c_str());//yzhang FIXME
00728           if (m_debug>1) { 
00729             cout << "MdcxTrackFinder: accept b track and store to TDS" << endl;  
00730             bTrack->printAll(cout); 
00731           }
00732           store(bTrack, trackList, hitList);//bTrack have been deleted
00733         } else {
00734           if (m_debug>1) {
00735             cout<< " fit failed "<<endl;
00736             berr.print(cout);
00737             cout << endl;
00738           }
00739           if (bTrack!=NULL) { delete bTrack; bTrack = NULL; }
00740         }
00741       }else{
00742         //cout<< " grow and refit failed "<<endl;
00743       }
00744     } 
00745   }
00746   if(m_debug >1) dumpTdsTrack(trackList);
00747   return StatusCode::SUCCESS;
00748 
00749 }// end of FitMdcxTrack

StatusCode MdcxTrackFinder::initialize (  ) 

Definition at line 165 of file MdcxTrackFinder.cxx.

References BField::bFieldNominal(), bookNTuple(), MdcxParameters::csmax3, MdcxParameters::csmax4, MdcxFittedHel::debug, MdcxParameters::debug, MdcxParameters::dropHitsSigma, calibUtil::ERROR, Bes_Common::FATAL, MdcxParameters::helixFitSigma, genRecEmupikp::i, Bes_Common::INFO, m_bfield, m_context, m_countPropTime, m_csmax3, m_csmax4, TrkHelixFitter::m_debug, m_debug, m_dropHitsSigma, m_helixFitCut, m_helixFitSigma, m_hist, m_maxProca, m_maxRcsInAddSeg, m_mdcCalibFunSvc, m_minTrkProb, m_nSigAddHitTrk, m_pdtFile, m_pIMF, m_rawDataProviderSvc, MdcxParameters::maxProca, MdcxParameters::maxRcsInAddSeg, MdcxParameters::minTrkProb, msgSvc(), MdcxParameters::nSigAddHitTrk, TrkHelixFitter::nSigmaCut, Pdt::readMCppTable(), MdcxHit::setCountPropTime(), MdcxHit::setMdcCalibFunSvc(), t_nTkNum, t_nTkTot, and Bes_Common::WARNING.

00165                                       {  
00166   MsgStream log(msgSvc(), name());
00167   log << MSG::INFO << "in initialize()" << endreq;      
00168 
00169   t_nTkTot = 0;
00170   for (int i=0;i<20;i++) t_nTkNum[i]=0;
00171 
00172   //m_flags.readPar(m_paramFile);
00173 #ifdef MDCXTIMEDEBUG
00174   StatusCode tsc = service( "BesTimerSvc", m_timersvc);
00175   if( tsc.isFailure() ) {
00176     log << MSG::WARNING << name() << ": Unable to locate BesTimer Service" << endreq;
00177     return StatusCode::FAILURE;
00178   }
00179   m_timer[0] = m_timersvc->addItem("Execution");
00180   m_timer[0]->propName("Execution");
00181 #endif
00182 
00183   if (m_helixFitCut.size() == 43){
00184     for(int i=0; i<43; i++){
00185       //MdcTrkReconCut_helix_fit[i] = m_helixFitCut[i]; 
00186       TrkHelixFitter::nSigmaCut[i] = m_helixFitCut[i];
00187     }
00188   }
00189   MdcxParameters::debug = m_debug;
00190   MdcxParameters::minTrkProb = m_minTrkProb;
00191   MdcxParameters::csmax4 = m_csmax4;
00192   MdcxParameters::csmax3 = m_csmax3;
00193   MdcxParameters::helixFitSigma = m_helixFitSigma;
00194   MdcxParameters::maxRcsInAddSeg= m_maxRcsInAddSeg;
00195   MdcxParameters::nSigAddHitTrk = m_nSigAddHitTrk;
00196   MdcxParameters::maxProca      = m_maxProca;
00197   TrkHelixFitter::m_debug       = (m_debug>7);
00198   Pdt::readMCppTable(m_pdtFile); 
00199   MdcxFittedHel::debug = m_debug;
00200 
00201 
00202   // Get MdcCalibFunSvc
00203   IMdcCalibFunSvc* imdcCalibSvc; 
00204   StatusCode sc = service ("MdcCalibFunSvc", imdcCalibSvc);
00205   m_mdcCalibFunSvc = dynamic_cast<MdcCalibFunSvc*>(imdcCalibSvc);
00206   if ( sc.isFailure() ){
00207     log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endreq;
00208     return StatusCode::FAILURE;
00209   }
00210   MdcxHit::setMdcCalibFunSvc(m_mdcCalibFunSvc);
00211   MdcxHit::setCountPropTime(m_countPropTime);
00212 
00213   // Get RawDataProviderSvc
00214   IRawDataProviderSvc* iRawDataProvider; 
00215   sc = service ("RawDataProviderSvc", iRawDataProvider);
00216   if ( sc.isFailure() ){
00217     log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq;
00218     return StatusCode::FAILURE;
00219   }
00220   m_rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*>(iRawDataProvider);
00221 
00222 
00223   //Initailize magnetic filed 
00224   sc = service ("MagneticFieldSvc",m_pIMF);
00225   if(sc!=StatusCode::SUCCESS) {
00226     log << MSG::ERROR << "Unable to open Magnetic field service"<<endreq;
00227   }
00228   m_bfield = new BField(m_pIMF);
00229   log << MSG::INFO << "field z = "<<m_bfield->bFieldNominal()<< endreq;
00230   m_context = new TrkContextEv(m_bfield);
00231 
00232   if (m_hist) {bookNTuple();}
00233   if (m_dropHitsSigma.size()==43){
00234     for (int ii=0;ii<43;ii++) {
00235       MdcxParameters::dropHitsSigma[ii]=m_dropHitsSigma[ii];
00236     }
00237   }
00238 
00239   return StatusCode::SUCCESS;
00240 }

void MdcxTrackFinder::MdcxHitsToHots ( TrkHitList m_trkHitList,
HitRefVec recMdcHits,
HitRefVec skipedHits 
) [private]

void MdcxTrackFinder::MdcxHitsToHots ( MdcxHel mdcxHelix,
const HepAList< MdcxHit > &  mdcxHits,
TrkHitList m_trkHitList,
MdcHitCol hitCol 
) [private]

Definition at line 507 of file MdcxTrackFinder.cxx.

References TrkHitList::appendHot(), MdcID::layer(), m_bunchT0, m_countPropTime, m_digiMap, m_gm, m_mdcCalibFunSvc, TrkHitOnTrk::setActivity(), MdcHit::setCalibSvc(), MdcHit::setCountPropTime(), TrkHitOnTrk::setUsability(), subSeperate::temp, and MdcID::wire().

Referenced by FitMdcxTrack().

00508                                                     {
00509 
00510   if ( 0 == mdcxHits.length() ) return;
00511 
00512   int ihits = 0; 
00513   while(mdcxHits[ihits]) {
00514     int ambig = 0;//=mdcxHelix.Doca_Samb();//yzhang delete 2011-10-13 
00515     const MdcHit* newhit = mdcxHits[ihits]->getMdcHit();
00516     if ( 0 == newhit ) {
00517       const MdcDigi* theDigi = mdcxHits[ihits]->getDigi();
00518       int layer =  MdcID::layer(mdcxHits[ihits]->getDigi()->identify());
00519       int wire  =  MdcID::wire(mdcxHits[ihits]->getDigi()->identify());
00520       m_digiMap[layer][wire] = mdcxHits[ihits]->getDigi();
00521       MdcHit *thehit = new MdcHit(theDigi, m_gm); 
00522       thehit->setCalibSvc(m_mdcCalibFunSvc);
00523       thehit->setCountPropTime(m_countPropTime);
00524       //thehit->setCosmicFit(m_cosmicFit);
00525 
00526       mdcHitCol->push_back(thehit);
00527       newhit = thehit;
00528     }
00529     MdcRecoHitOnTrack temp(*newhit, ambig, m_bunchT0);//m_bunchT0 nano second here
00530     MdcHitOnTrack* newhot = &temp;
00531     //double fltLen = mdcxHelix.Doca_FLen();
00532     //std::cout<<" fltLen-- "<<fltLen<<"   "<<std::endl;
00533     //newhot->setFltLen(fltLen);
00534     //newhot->print(std::cout);
00535     //std::cout<< __FILE__ << " ambig  " << ambig << " append  "<<std::endl;
00536 
00537     // Store MdcxHits to TrkHitList
00538     m_trkHitList->appendHot(newhot);   //yzhang TEMP FIXME
00539     newhot->setUsability(true);//yzhang add 2011-10-12 TEMP
00540     newhot->setActivity(true);//yzhang add 2011-10-12 TEMP
00541 
00542     ihits++;
00543   }
00544 }

void MdcxTrackFinder::printTrack ( RecMdcTrack tk  )  [private]

Definition at line 787 of file MdcxTrackFinder.cxx.

References DstMdcTrack::charge(), DstMdcTrack::chi2(), DstMdcTrack::err(), RecMdcTrack::getFiTerm(), RecMdcTrack::getNhits(), RecMdcTrack::getVecHits(), DstMdcTrack::helix(), MdcDetector::Layer(), MdcID::layer(), m_gm, DstMdcTrack::ndof(), DstMdcTrack::nster(), DstMdcTrack::poca(), DstMdcTrack::trackId(), Constants::vpropInner, Constants::vpropOuter, MdcID::wire(), and MdcLayer::zLength().

Referenced by dumpTrack().

00787                                                {
00788   //yzhang debug
00789   std::cout<< " MdcTrack Id:"<<tk->trackId() <<" q:"<< tk->charge()<< std::endl;
00790   std::cout<< "dr   Fi0   Cpa   Dz   Tanl   Chi2   Ndf   nSt   FiTerm  poca" << std::endl;
00791   std::cout<<"(" <<setw(5) << tk->helix(0)<<","<< setw(5) << tk->helix(1)<<"," << setw(5) << tk->helix(2) <<","
00792     << setw(5) << tk->helix(3) << ","<< setw(5) << tk->helix(4) <<")"
00793     << setw(5) << tk->chi2() << setw(4) << tk->ndof() 
00794     << setw(4) << tk->getNhits() << setw(4) << tk->nster() 
00795     << setw(5) << tk->getFiTerm() <<tk->poca()<<std::endl;
00796   std::cout<< " ErrMat  "<<tk->err() << std::endl;
00797 
00798   std::cout<< "hitId  tkId  (l,w) fltLen  lr  dt  ddl  tdc "//<<chi2Add
00799     <<"doca  entr  z  tprop stat  " << std::endl;
00800 
00801   HitRefVec hl = tk->getVecHits();
00802   HitRefVec::iterator it = hl.begin();   
00803   for (;it!=hl.end();++it){
00804     RecMdcHit* h = *it;
00805     int layer = MdcID::layer(h->getMdcId());
00806     double _vprop = (layer<8) ? Constants::vpropInner : Constants::vpropOuter;
00807     const MdcLayer* _layerPtr = m_gm->Layer(layer);
00808     double _zlen     = _layerPtr->zLength();
00809     double z = h->getZhit();
00810     double tprop;
00811     if (0 == layer%2){
00812       tprop = (0.5*_zlen + z)/_vprop; //odd
00813     }else{
00814       tprop = (0.5*_zlen - z)/_vprop; //even
00815     }
00816     // build the sense wires
00817     //const MdcSWire* wire = m_gm->Wire(MdcID::layer(h->getMdcId()),MdcID::wire(h->getMdcId()));
00818     //double z = wire->zForw();
00819     //while(z<wire->zRear()){
00820     //HepPoint3D pos;
00821     //Hep3Vector dir; 
00822     //if(!(wire->getTraj()==NULL)){
00823     //wire->getTraj()->getInfo(z,pos,dir);
00824     //}
00825     //std::cout<<"("<< wire->layer()->layNum()<<","<<wire->cell()<<" "<<wire->Id()<<")";
00826     //std::cout<<" z, sag:"<<z
00827     //<<", "<<wire->getTraj()->deltaY(z-wire->zForw())<<std::endl;
00829     //z+=1.;
00830     //}
00831     std::cout<< setw(3) << h->getId() << setw(2) << h->getTrkId() <<
00832       "(" << MdcID::layer(h->getMdcId()) <<"," << MdcID::wire(h->getMdcId()) <<")"<<
00833       setw(10) << h->getFltLen() <<
00834       setw(2) << h->getFlagLR() <<setw(10) << h->getDriftT() <<
00835       setw(12) << h->getDriftDistLeft() <<//setw(8) << h->getErrDriftDistRight() <<
00836       setw(8) << h->getTdc() <<//setw(10) << h->getChisqAdd() <<
00837       setw(10) << h->getDoca() <<setw(10) << h->getEntra() <<
00838       setw(10) << h->getZhit() << setw(10) << tprop<<
00839       setw(2)<< h->getStat() << std::endl;
00840   }
00841 }//print track

void MdcxTrackFinder::store ( TrkRecoTrk aTrack,
RecMdcTrackCol ,
RecMdcHitCol  
) [private]

Definition at line 751 of file MdcxTrackFinder.cxx.

References TrkExchangePar::d0(), fillTrack(), TrkRecoTrk::fitResult(), TrkFit::helix(), m_d0Cut, m_debug, m_dropTrkPt, m_hist, m_z0Cut, nTk, TrkAbsFit::pt(), MdcTrack::storeTrack(), and TrkExchangePar::z0().

Referenced by FitMdcxTrack().

00752                            {
00753   assert (aTrack != NULL);
00754   nTk++;
00755   int trackId = trackList->size();
00756   TrkExchangePar helix = aTrack->fitResult()->helix(0.);
00757   if(m_dropTrkPt>0. && (aTrack->fitResult()->pt()<m_dropTrkPt)) {
00758     if(m_debug>1) std::cout<<"MdcxTrackFinder delete track by pt "
00759     <<aTrack->fitResult()->pt()<<"<ptCut "<<m_dropTrkPt << std::endl;
00760     return;
00761   }
00762 
00763   if( ( (fabs(helix.d0())>m_d0Cut) ||( fabs(helix.z0())>m_z0Cut) ) ){
00764     if(m_debug>1) std::cout<< name()<<" delete track by d0 "<<helix.d0()<<">d0Cut "<<m_d0Cut
00765     <<" or z0 "<<helix.z0()<<" >z0Cut "<<m_z0Cut << std::endl;
00766     return;
00767   }
00768 
00769   if(m_hist) fillTrack(aTrack);
00770   MdcTrack mdcTrack(aTrack);//aTrack have been deleted in ~MdcTrack() 
00771   //tkStat:  0,PatRec 1,MdcxReco 2,Tsf 3,CurlFinder -1,Combined cosmic
00772   int tkStat = 1;
00773   int nHitbefore = hitList->size();
00774 
00775   mdcTrack.storeTrack(trackId, trackList, hitList, tkStat);
00776   int nHitAfter = hitList->size();
00777   if (nHitAfter - nHitbefore <10 ) setFilterPassed(true);
00778 }


Member Data Documentation

bool MdcxTrackFinder::b_saveEvent [private]

Definition at line 83 of file MdcxTrackFinder.h.

Referenced by execute().

int MdcxTrackFinder::haveDigi[43][288] [private]

Definition at line 81 of file MdcxTrackFinder.h.

Referenced by fillMcTruth().

double MdcxTrackFinder::m_addHitCut [private]

Definition at line 124 of file MdcxTrackFinder.h.

Referenced by FitMdcxTrack(), and MdcxTrackFinder().

BField* MdcxTrackFinder::m_bfield [private]

Definition at line 136 of file MdcxTrackFinder.h.

Referenced by initialize(), and ~MdcxTrackFinder().

double MdcxTrackFinder::m_bunchT0 [private]

Definition at line 89 of file MdcxTrackFinder.h.

Referenced by execute(), fillEvent(), fillTrack(), FitMdcxTrack(), and MdcxHitsToHots().

TrkContextEv* MdcxTrackFinder::m_context [private]

Definition at line 144 of file MdcxTrackFinder.h.

Referenced by FitMdcxTrack(), and initialize().

bool MdcxTrackFinder::m_countPropTime [private]

Definition at line 116 of file MdcxTrackFinder.h.

Referenced by initialize(), MdcxHitsToHots(), and MdcxTrackFinder().

double MdcxTrackFinder::m_cresol [private]

Definition at line 120 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

double MdcxTrackFinder::m_csmax3 [private]

Definition at line 127 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

double MdcxTrackFinder::m_csmax4 [private]

Definition at line 126 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

double MdcxTrackFinder::m_d0Cut [private]

Definition at line 132 of file MdcxTrackFinder.h.

Referenced by MdcxTrackFinder(), and store().

int MdcxTrackFinder::m_debug [private]

Definition at line 96 of file MdcxTrackFinder.h.

Referenced by execute(), fillTrack(), FitMdcxTrack(), initialize(), MdcxTrackFinder(), and store().

const MdcDigi* MdcxTrackFinder::m_digiMap[43][288] [private]

Definition at line 169 of file MdcxTrackFinder.h.

Referenced by MdcxHitsToHots().

bool MdcxTrackFinder::m_doSag [private]

Definition at line 117 of file MdcxTrackFinder.h.

Referenced by beginRun(), and MdcxTrackFinder().

std::vector<float> MdcxTrackFinder::m_dropHitsSigma [private]

Definition at line 121 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

bool MdcxTrackFinder::m_dropHot [private]

Definition at line 103 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

bool MdcxTrackFinder::m_dropMultiHotInLayer [private]

Definition at line 108 of file MdcxTrackFinder.h.

Referenced by FitMdcxTrack(), and MdcxTrackFinder().

double MdcxTrackFinder::m_dropTrkPt [private]

Definition at line 123 of file MdcxTrackFinder.h.

Referenced by MdcxTrackFinder(), and store().

bool MdcxTrackFinder::m_dropUnmatch [private]

Definition at line 101 of file MdcxTrackFinder.h.

int MdcxTrackFinder::m_eventNo [private]

Definition at line 93 of file MdcxTrackFinder.h.

Referenced by execute(), fillEvent(), and fillTrack().

uint32_t MdcxTrackFinder::m_getDigiFlag [private]

Definition at line 105 of file MdcxTrackFinder.h.

Referenced by MdcxTrackFinder().

const MdcDetector* MdcxTrackFinder::m_gm [private]

Definition at line 145 of file MdcxTrackFinder.h.

Referenced by beginRun(), MdcxHitsToHots(), and printTrack().

std::vector<float> MdcxTrackFinder::m_helixFitCut [private]

Definition at line 122 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

double MdcxTrackFinder::m_helixFitSigma [private]

Definition at line 128 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

int MdcxTrackFinder::m_hist [private]

Definition at line 97 of file MdcxTrackFinder.h.

Referenced by bookNTuple(), execute(), initialize(), MdcxTrackFinder(), and store().

HepAList<MdcHit>* MdcxTrackFinder::m_junkHitList [private]

Definition at line 141 of file MdcxTrackFinder.h.

bool MdcxTrackFinder::m_keepBadTdc [private]

Definition at line 102 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

bool MdcxTrackFinder::m_keepUnmatch [private]

Definition at line 104 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

bool MdcxTrackFinder::m_lineFit [private]

Definition at line 112 of file MdcxTrackFinder.h.

Referenced by FitMdcxTrack(), and MdcxTrackFinder().

int MdcxTrackFinder::m_maxMdcDigi [private]

Definition at line 106 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

double MdcxTrackFinder::m_maxProca [private]

Definition at line 131 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

double MdcxTrackFinder::m_maxRcsInAddSeg [private]

Definition at line 129 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

bool MdcxTrackFinder::m_mcHist [private]

Definition at line 98 of file MdcxTrackFinder.h.

Referenced by fillMcTruth(), and MdcxTrackFinder().

const MdcCalibFunSvc* MdcxTrackFinder::m_mdcCalibFunSvc [private]

Definition at line 138 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxHitsToHots().

MdcxHits MdcxTrackFinder::m_mdcxHits [private]

Definition at line 142 of file MdcxTrackFinder.h.

Referenced by execute().

int MdcxTrackFinder::m_minMdcDigi [private]

Definition at line 107 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

double MdcxTrackFinder::m_minTrkProb [private]

Definition at line 125 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

double MdcxTrackFinder::m_nSigAddHitTrk [private]

Definition at line 130 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

std::string MdcxTrackFinder::m_pdtFile [private]

Definition at line 140 of file MdcxTrackFinder.h.

Referenced by initialize(), and MdcxTrackFinder().

IMagneticFieldSvc* MdcxTrackFinder::m_pIMF [private]

Definition at line 137 of file MdcxTrackFinder.h.

Referenced by initialize().

RawDataProviderSvc* MdcxTrackFinder::m_rawDataProviderSvc [private]

Definition at line 139 of file MdcxTrackFinder.h.

Referenced by execute(), and initialize().

bool MdcxTrackFinder::m_salvageTrk [private]

Definition at line 111 of file MdcxTrackFinder.h.

Referenced by execute(), and MdcxTrackFinder().

int MdcxTrackFinder::m_t0Stat [private]

Definition at line 91 of file MdcxTrackFinder.h.

Referenced by execute(), fillEvent(), and fillTrack().

double MdcxTrackFinder::m_t0Truth [private]

Definition at line 92 of file MdcxTrackFinder.h.

Referenced by fillEvent(), fillMcTruth(), and fillTrack().

double MdcxTrackFinder::m_timing [private]

Definition at line 90 of file MdcxTrackFinder.h.

Referenced by execute(), and fillTrack().

double MdcxTrackFinder::m_z0Cut [private]

Definition at line 133 of file MdcxTrackFinder.h.

Referenced by MdcxTrackFinder(), and store().

MdcDigiVec MdcxTrackFinder::mdcDigiVec [private]

Definition at line 146 of file MdcxTrackFinder.h.

Referenced by execute(), fillEvent(), and fillMcTruth().

int MdcxTrackFinder::nTk [private]

Definition at line 82 of file MdcxTrackFinder.h.

Referenced by execute(), fillEvent(), and store().

int MdcxTrackFinder::t_nDigi [private]

Definition at line 85 of file MdcxTrackFinder.h.

Referenced by execute(), and fillEvent().

int MdcxTrackFinder::t_nTdsTk [private]

Definition at line 84 of file MdcxTrackFinder.h.

Referenced by execute(), and fillEvent().

int MdcxTrackFinder::t_nTkNum[20] [private]

Definition at line 87 of file MdcxTrackFinder.h.

Referenced by execute(), finalize(), and initialize().

int MdcxTrackFinder::t_nTkTot [private]

Definition at line 86 of file MdcxTrackFinder.h.

Referenced by execute(), finalize(), and initialize().


Generated on Tue Nov 29 23:20:22 2016 for BOSS_7.0.2 by  doxygen 1.4.7