#include <MdcNavigation.h>
Public Member Functions | |
MdcNavigation (const std::string &name, ISvcLocator *pSvcLocator) | |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
StatusCode | beginRun () |
Private Member Functions | |
Hep3Vector | momentum (const RecMdcTrack *trk) |
StatusCode | bookNTuple () |
StatusCode | fillInit () |
StatusCode | fillRecTrack (const RecMdcTrack *it, int mcTkNum, int recTkNum) |
StatusCode | fillRecHits (RecMdcHitCol &hitCol) |
StatusCode | fillEvent () |
StatusCode | skipMcParticle (const Event::McParticle *it, int nKindSkiped, int *keepedPart) |
double | poca (const MdcDigi *aDigi, const HepVector helixPar, const HepSymMatrix errMat) |
double | probab (const int &ndof, const double &chisq) |
Private Attributes | |
HepPDT::ParticleDataTable * | m_particleTable |
RawDataProviderSvc * | m_rawDataProviderSvc |
IMagneticFieldSvc * | m_pIMF |
bool | m_poca |
bool | m_debug |
const MdcDetector * | m_gm |
int | havedigi [43][288] |
short | multiTdcCount [43][288] |
bool | m_hist |
int | m_mc |
bool | m_doSag |
bool | m_rawData |
int | m_maxMdcDigi |
bool | m_keepBadTdc |
bool | m_dropHot |
bool | m_keepUnmatch |
long | t_eventNo |
long | t_runNo |
double | t_t0 |
double | t_t0Stat |
double | t_t0Truth |
int | t_nTk |
int | t_recTkNum |
int | t_mcTkNum |
int | t_trkRecoTk |
int | t_curlTk |
int | t_patRecTk |
int | t_xRecTk |
int | m_nMcHit |
int * | keepedParticles |
double | m_d0Cut |
double | m_z0Cut |
double | nNoise |
long | nDigiTk [100] |
long | digiLayer [100] |
NTuple::Tuple * | g_tupleMc |
NTuple::Tuple * | g_tupleRec |
NTuple::Tuple * | g_tupleEvt |
AIDA::IHistogram1D * | g_layerEff |
NTuple::Item< double > | m_na_p |
NTuple::Item< double > | m_na_pt |
NTuple::Item< double > | m_na_pz |
NTuple::Item< double > | m_na_d0 |
NTuple::Item< double > | m_na_phi0 |
NTuple::Item< double > | m_na_cpa |
NTuple::Item< double > | m_na_z0 |
NTuple::Item< double > | m_na_tanl |
NTuple::Item< double > | m_na_q |
NTuple::Item< double > | m_na_d0E |
NTuple::Item< double > | m_na_phi0E |
NTuple::Item< double > | m_na_cpaE |
NTuple::Item< double > | m_na_z0E |
NTuple::Item< double > | m_na_tanlE |
NTuple::Item< double > | m_na_dP |
NTuple::Item< double > | m_na_dPt |
NTuple::Item< double > | m_na_dPz |
NTuple::Item< double > | m_na_dD0 |
NTuple::Item< double > | m_na_dPhi0 |
NTuple::Item< double > | m_na_dCpa |
NTuple::Item< double > | m_na_dZ0 |
NTuple::Item< double > | m_na_dTanl |
NTuple::Item< double > | m_na_d0Res |
NTuple::Item< double > | m_na_phi0Res |
NTuple::Item< double > | m_na_cpaRes |
NTuple::Item< double > | m_na_z0Res |
NTuple::Item< double > | m_na_tanlRes |
NTuple::Item< long > | m_na_nHit |
NTuple::Item< long > | m_na_nDigi |
NTuple::Item< double > | m_na_nEvtNoise |
NTuple::Item< double > | m_na_nAct |
NTuple::Item< double > | m_na_nNoise |
NTuple::Item< double > | m_na_nMatch |
NTuple::Item< double > | m_na_nSt |
NTuple::Item< double > | m_na_nDof |
NTuple::Item< double > | m_na_fiTerm |
NTuple::Item< double > | m_na_chi2 |
NTuple::Item< double > | m_na_chi2Dof |
NTuple::Item< double > | m_na_chi2Prob |
NTuple::Item< double > | m_na_mcTkNum |
NTuple::Item< double > | m_na_mcTkId |
NTuple::Item< double > | m_na_recTkNum |
NTuple::Item< double > | m_na_mcpid |
NTuple::Item< double > | m_na_mcp |
NTuple::Item< double > | m_na_mcpt |
NTuple::Item< double > | m_na_mcpx |
NTuple::Item< double > | m_na_mcpy |
NTuple::Item< double > | m_na_mcpz |
NTuple::Item< double > | m_na_mcd0 |
NTuple::Item< double > | m_na_mcphi0 |
NTuple::Item< double > | m_na_mcz0 |
NTuple::Item< double > | m_na_mctheta |
NTuple::Item< double > | m_na_mccpa |
NTuple::Item< double > | m_na_mcq |
NTuple::Item< double > | m_na_mcfifin |
NTuple::Item< double > | m_na_mcflag |
NTuple::Item< long > | m_na_tkStat |
NTuple::Item< long > | m_na_tkId |
NTuple::Item< double > | m_na_evtNo |
NTuple::Array< double > | m_na_resid |
NTuple::Array< double > | m_na_driftD |
NTuple::Array< long > | m_na_act |
NTuple::Array< double > | m_na_driftT |
NTuple::Array< double > | m_na_doca |
NTuple::Array< double > | m_na_entra |
NTuple::Array< double > | m_na_zhit |
NTuple::Array< double > | m_na_chi2add |
NTuple::Array< double > | m_na_flaglr |
NTuple::Array< double > | m_na_hitStat |
NTuple::Array< double > | m_na_Tdc |
NTuple::Array< double > | m_na_Adc |
NTuple::Array< double > | m_na_layer |
NTuple::Array< double > | m_na_wire |
NTuple::Array< double > | m_na_gwire |
NTuple::Array< double > | m_na_hitTkId |
NTuple::Array< double > | m_na_digiTkId |
NTuple::Array< double > | m_na_digiLayer |
NTuple::Item< double > | m_na_t2mcp |
NTuple::Item< double > | m_na_t2mcpt |
NTuple::Item< double > | m_na_t2mcphi |
NTuple::Item< double > | m_na_t2mctheta |
NTuple::Item< double > | m_na_t2tanl |
NTuple::Item< double > | m_na_t2recTkNum |
NTuple::Item< double > | m_na_t2mcTkNum |
NTuple::Item< double > | m_na_t2p |
NTuple::Item< double > | m_na_t2pt |
NTuple::Item< double > | m_na_t3recTk |
NTuple::Item< double > | m_na_t3mcTk |
NTuple::Item< long > | m_na_t3TrkReco |
NTuple::Item< long > | m_na_t3Curl |
NTuple::Item< long > | m_na_t3PatRec |
NTuple::Item< long > | m_na_t3XRec |
NTuple::Item< double > | m_na_t3evtNo |
NTuple::Item< double > | m_na_t3t0 |
NTuple::Item< double > | m_na_t3t0Truth |
NTuple::Item< double > | m_na_t3t0Stat |
NTuple::Item< double > | m_na_t3timing |
NTuple::Item< long > | m_na_t3runNo |
NTuple::Item< long > | m_na_t3nDigi |
NTuple::Array< long > | m_na_t3layer |
NTuple::Array< long > | m_na_t3wire |
NTuple::Array< long > | m_na_t3gwire |
NTuple::Array< double > | m_na_t3rt |
NTuple::Array< double > | m_na_t3rtNot0 |
NTuple::Array< double > | m_na_t3rc |
NTuple::Array< double > | m_na_t3phi |
NTuple::Array< double > | m_na_t3xMid |
NTuple::Array< double > | m_na_t3yMid |
NTuple::Array< long > | m_na_t3ovfl |
NTuple::Array< long > | m_na_t3tNum |
Definition at line 23 of file MdcNavigation.h.
MdcNavigation::MdcNavigation | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 44 of file MdcNavigation.cxx.
References m_d0Cut, m_debug, m_doSag, m_dropHot, m_hist, m_keepBadTdc, m_keepUnmatch, m_maxMdcDigi, m_mc, m_nMcHit, m_poca, and m_z0Cut.
00044 : 00045 Algorithm(name, pSvcLocator) { 00046 declareProperty("hist", m_hist = 0); 00047 declareProperty("nMcHit", m_nMcHit= 5); 00048 declareProperty("mc", m_mc = 1); 00049 00050 declareProperty("maxMdcDigi", m_maxMdcDigi= 0); 00051 declareProperty("keepBadTdc", m_keepBadTdc= 0); 00052 declareProperty("dropHot", m_dropHot= 0); 00053 declareProperty("keepUnmatch", m_keepUnmatch= 0); 00054 00055 declareProperty("poca", m_poca = false); 00056 declareProperty("doSag", m_doSag = false); 00057 00058 declareProperty("d0Cut", m_d0Cut= 1.); 00059 declareProperty("z0Cut", m_z0Cut= 10.); 00060 declareProperty("debug", m_debug = 0); 00061 00062 }
StatusCode MdcNavigation::beginRun | ( | ) |
Definition at line 114 of file MdcNavigation.cxx.
References Bes_Common::INFO, MdcDetector::instance(), m_doSag, m_gm, and msgSvc().
00114 { 00115 MsgStream log(msgSvc(), name()); 00116 log << MSG::INFO << "in beginRun()" << endreq; 00117 00118 m_gm = MdcDetector::instance(m_doSag); 00119 if(NULL == m_gm) return StatusCode::FAILURE; 00120 00121 return StatusCode::SUCCESS; 00122 }
StatusCode MdcNavigation::bookNTuple | ( | ) | [private] |
Definition at line 366 of file MdcNavigation.cxx.
References calibUtil::ERROR, g_layerEff, g_tupleEvt, g_tupleMc, histoSvc(), m_na_act, m_na_Adc, m_na_chi2, m_na_chi2add, m_na_chi2Dof, m_na_chi2Prob, m_na_cpa, m_na_cpaE, m_na_cpaRes, m_na_d0, m_na_d0E, m_na_d0Res, m_na_dCpa, m_na_dD0, m_na_digiLayer, m_na_digiTkId, m_na_doca, m_na_dP, m_na_dPhi0, m_na_dPt, m_na_dPz, m_na_driftD, m_na_driftT, m_na_dTanl, m_na_dZ0, m_na_entra, m_na_evtNo, m_na_fiTerm, m_na_flaglr, m_na_gwire, m_na_hitStat, m_na_hitTkId, m_na_layer, m_na_mcTkId, m_na_mcTkNum, m_na_nAct, m_na_nDigi, m_na_nDof, m_na_nEvtNoise, m_na_nHit, m_na_nMatch, m_na_nNoise, m_na_nSt, m_na_p, m_na_phi0, m_na_phi0E, m_na_phi0Res, m_na_pt, m_na_pz, m_na_q, m_na_recTkNum, m_na_resid, m_na_t3Curl, m_na_t3evtNo, m_na_t3gwire, m_na_t3layer, m_na_t3mcTk, m_na_t3nDigi, m_na_t3ovfl, m_na_t3PatRec, m_na_t3phi, m_na_t3rc, m_na_t3recTk, m_na_t3rt, m_na_t3rtNot0, m_na_t3runNo, m_na_t3t0, m_na_t3t0Stat, m_na_t3t0Truth, m_na_t3tNum, m_na_t3TrkReco, m_na_t3wire, m_na_t3XRec, m_na_tanl, m_na_tanlE, m_na_tanlRes, m_na_Tdc, m_na_tkStat, m_na_wire, m_na_z0, m_na_z0E, m_na_z0Res, m_na_zhit, msgSvc(), and ntupleSvc().
Referenced by initialize().
00366 { 00367 MsgStream log(msgSvc(), name()); 00368 StatusCode sc = StatusCode::SUCCESS; 00369 g_layerEff = histoSvc()->book( "layerEff", "layerEff",43,-0.5,42.5 ); 00370 00371 NTuplePtr nt1(ntupleSvc(), "MdcNavigation/rec"); 00372 if ( nt1 ) { g_tupleMc = nt1;} 00373 else { 00374 g_tupleMc = ntupleSvc()->book ("MdcNavigation/rec", CLID_ColumnWiseTuple, "rec and delta with mc truth"); 00375 if ( g_tupleMc ) { 00376 sc = g_tupleMc->addItem ("tkStat", m_na_tkStat); 00377 sc = g_tupleMc->addItem ("p", m_na_p); 00378 sc = g_tupleMc->addItem ("pt", m_na_pt); 00379 sc = g_tupleMc->addItem ("pz", m_na_pz); 00380 sc = g_tupleMc->addItem ("d0", m_na_d0); 00381 sc = g_tupleMc->addItem ("phi0", m_na_phi0); 00382 sc = g_tupleMc->addItem ("cpa", m_na_cpa); 00383 sc = g_tupleMc->addItem ("z0", m_na_z0); 00384 sc = g_tupleMc->addItem ("tanl", m_na_tanl); 00385 sc = g_tupleMc->addItem ("d0E", m_na_d0E); 00386 sc = g_tupleMc->addItem ("phi0E", m_na_phi0E); 00387 sc = g_tupleMc->addItem ("cpaE", m_na_cpaE); 00388 sc = g_tupleMc->addItem ("z0E", m_na_z0E); 00389 sc = g_tupleMc->addItem ("tanlE", m_na_tanlE); 00390 sc = g_tupleMc->addItem ("q", m_na_q); 00391 00392 sc = g_tupleMc->addItem ("dP", m_na_dP); 00393 sc = g_tupleMc->addItem ("dPt", m_na_dPt); 00394 sc = g_tupleMc->addItem ("dPz", m_na_dPz); 00395 sc = g_tupleMc->addItem ("dD0", m_na_dD0); 00396 sc = g_tupleMc->addItem ("dPhi0", m_na_dPhi0); 00397 sc = g_tupleMc->addItem ("dCpa", m_na_dCpa); 00398 sc = g_tupleMc->addItem ("dZ0", m_na_dZ0); 00399 sc = g_tupleMc->addItem ("dTanl", m_na_dTanl); 00400 00401 sc = g_tupleMc->addItem ("d0Res", m_na_d0Res); 00402 sc = g_tupleMc->addItem ("phiRes", m_na_phi0Res); 00403 sc = g_tupleMc->addItem ("z0Res", m_na_z0Res); 00404 sc = g_tupleMc->addItem ("tanlRes", m_na_tanlRes); 00405 sc = g_tupleMc->addItem ("cpaRes", m_na_cpaRes); 00406 00407 sc = g_tupleMc->addItem ("recTkNum",m_na_recTkNum); 00408 sc = g_tupleMc->addItem ("mcTkId", m_na_mcTkId); 00409 sc = g_tupleMc->addItem ("mcTkNum", m_na_mcTkNum); 00410 sc = g_tupleMc->addItem ("evtNo", m_na_evtNo); 00411 sc = g_tupleMc->addItem ("nSt", m_na_nSt); 00412 sc = g_tupleMc->addItem ("nDof", m_na_nDof); 00413 sc = g_tupleMc->addItem ("chi2", m_na_chi2); 00414 sc = g_tupleMc->addItem ("chi2Dof", m_na_chi2Dof); 00415 sc = g_tupleMc->addItem ("chi2Porb",m_na_chi2Prob); 00416 sc = g_tupleMc->addItem ("fiTerm", m_na_fiTerm); 00417 sc = g_tupleMc->addItem ("nMatch", m_na_nMatch); 00418 sc = g_tupleMc->addItem ("nAct", m_na_nAct); 00419 sc = g_tupleMc->addItem ("nTkNoise",m_na_nNoise); 00420 sc = g_tupleMc->addItem ("nEvtNoise",m_na_nEvtNoise); 00421 sc = g_tupleMc->addItem ("nHit", m_na_nHit, 0, 10000); 00422 sc = g_tupleMc->addItem ("nDigi", m_na_nDigi, 0, 10000); 00423 sc = g_tupleMc->addIndexedItem ("resid", m_na_nHit, m_na_resid); 00424 sc = g_tupleMc->addIndexedItem ("driftD", m_na_nHit, m_na_driftD); 00425 sc = g_tupleMc->addIndexedItem ("driftT", m_na_nHit, m_na_driftT); 00426 sc = g_tupleMc->addIndexedItem ("doca", m_na_nHit, m_na_doca); 00427 sc = g_tupleMc->addIndexedItem ("entra", m_na_nHit, m_na_entra); 00428 sc = g_tupleMc->addIndexedItem ("zhit", m_na_nHit, m_na_zhit); 00429 sc = g_tupleMc->addIndexedItem ("chi2add", m_na_nHit, m_na_chi2add); 00430 sc = g_tupleMc->addIndexedItem ("flaglr", m_na_nHit, m_na_flaglr); 00431 sc = g_tupleMc->addIndexedItem ("hitStat", m_na_nHit, m_na_hitStat); 00432 sc = g_tupleMc->addIndexedItem ("tdc", m_na_nHit, m_na_Tdc); 00433 sc = g_tupleMc->addIndexedItem ("adc", m_na_nHit, m_na_Adc); 00434 sc = g_tupleMc->addIndexedItem ("act", m_na_nHit, m_na_act); 00435 sc = g_tupleMc->addIndexedItem ("layer", m_na_nHit, m_na_layer); 00436 sc = g_tupleMc->addIndexedItem ("wire", m_na_nHit, m_na_wire); 00437 sc = g_tupleMc->addIndexedItem ("gwire", m_na_nHit, m_na_gwire); 00438 sc = g_tupleMc->addIndexedItem ("hitTkId", m_na_nHit, m_na_hitTkId); 00439 sc = g_tupleMc->addIndexedItem ("digiTkId", m_na_nDigi, m_na_digiTkId); 00440 sc = g_tupleMc->addIndexedItem ("mclayer", m_na_nDigi, m_na_digiLayer); 00441 } else { 00442 log << MSG::ERROR << " Cannot book N-tuple:" << long(g_tupleMc) << endmsg; 00443 return StatusCode::FAILURE; 00444 } 00445 }//end book of g_tupleMc 00446 NTuplePtr nt3(ntupleSvc(), "MdcNavigation/evt"); 00447 if ( nt3 ) { g_tupleEvt = nt3;} 00448 else { 00449 g_tupleEvt = ntupleSvc()->book ("MdcNavigation/evt", CLID_ColumnWiseTuple, "event"); 00450 if ( g_tupleEvt ) { 00451 sc = g_tupleEvt->addItem ("nTdsTk", m_na_t3recTk); 00452 sc = g_tupleEvt->addItem ("trkReco", m_na_t3TrkReco); 00453 sc = g_tupleEvt->addItem ("curlFinder", m_na_t3Curl); 00454 sc = g_tupleEvt->addItem ("patRec", m_na_t3PatRec); 00455 sc = g_tupleEvt->addItem ("xRec", m_na_t3XRec); 00456 sc = g_tupleEvt->addItem ("mcTkNum", m_na_t3mcTk); 00457 sc = g_tupleEvt->addItem ("evtNo", m_na_t3evtNo); 00458 sc = g_tupleEvt->addItem ("t0", m_na_t3t0); 00459 sc = g_tupleEvt->addItem ("t0Truth", m_na_t3t0Truth); 00460 sc = g_tupleEvt->addItem ("t0Stat", m_na_t3t0Stat); 00461 sc = g_tupleEvt->addItem ("runNo", m_na_t3runNo); 00462 sc = g_tupleEvt->addItem ("nDigi", m_na_t3nDigi, 0, 10000); 00463 sc = g_tupleEvt->addIndexedItem ("layer", m_na_t3nDigi, m_na_t3layer); 00464 sc = g_tupleEvt->addIndexedItem ("wire", m_na_t3nDigi, m_na_t3wire); 00465 sc = g_tupleEvt->addIndexedItem ("gwire", m_na_t3nDigi, m_na_t3gwire); 00466 sc = g_tupleEvt->addIndexedItem ("rt", m_na_t3nDigi, m_na_t3rt); 00467 sc = g_tupleEvt->addIndexedItem ("rtNot0",m_na_t3nDigi, m_na_t3rtNot0); 00468 sc = g_tupleEvt->addIndexedItem ("rc", m_na_t3nDigi, m_na_t3rc); 00469 sc = g_tupleEvt->addIndexedItem ("phi", m_na_t3nDigi, m_na_t3phi); 00470 sc = g_tupleEvt->addIndexedItem ("ovfl", m_na_t3nDigi, m_na_t3ovfl); 00471 sc = g_tupleEvt->addIndexedItem ("tNum", m_na_t3nDigi, m_na_t3tNum); 00472 } 00473 } 00474 }
StatusCode MdcNavigation::execute | ( | ) |
Definition at line 126 of file MdcNavigation.cxx.
References fillEvent(), fillInit(), fillRecHits(), fillRecTrack(), Bes_Common::INFO, m_hist, m_mc, m_rawData, msgSvc(), t_mcTkNum, t_nTk, t_recTkNum, and Bes_Common::WARNING.
00126 { 00127 setFilterPassed(false); 00128 MsgStream log(msgSvc(), name()); 00129 StatusCode sc = StatusCode::SUCCESS; 00130 00131 // Get EventNavigator from the TDS 00132 SmartDataPtr<EventNavigator> navigator (eventSvc(),"/Event/Navigator"); 00133 if( ! navigator ) { 00134 log << MSG::WARNING<< " Unable to retrieve EventNavigator" << endreq; 00135 m_rawData = true; 00136 } 00137 SmartDataPtr<RecMdcTrackCol> recMdcTrackCol(eventSvc(), "/Event/Recon/RecMdcTrackCol"); 00138 SmartDataPtr<RecMdcHitCol> recMdcHitCol(eventSvc(), "/Event/Recon/RecMdcHitCol"); 00139 00140 // get eventNo, t0 and MdcDigi 00141 if(m_hist){ 00142 sc = fillInit(); 00143 if ( sc!=StatusCode::SUCCESS ) { 00144 return StatusCode::FAILURE; 00145 } 00146 } 00147 if (m_mc){ 00148 // Get McParticleCol 00149 SmartDataPtr<Event::McParticleCol> mcParticles(eventSvc(),"/Event/MC/McParticleCol"); 00150 SmartDataPtr<Event::MdcMcHitCol> mcHit(eventSvc(),"/Event/MC/MdcMcHitCol"); 00151 if( ! mcParticles ) { 00152 log << MSG::WARNING<< " Unable to retrieve McParticleCol" << endreq; 00153 }else{ 00154 // For each McParticle ... 00155 t_mcTkNum = 0; 00156 McParticleCol::iterator it= mcParticles->begin(); 00157 log <<MSG::INFO << "mcParticles size = "<<mcParticles->size() << endreq;//yzhang debug 00158 for(; it!= mcParticles->end(); it++ ) { 00159 //int tkId = (*it)->trackIndex(); 00160 t_mcTkNum++; 00161 } 00162 } 00163 } 00164 t_mcTkNum = 0; 00165 t_recTkNum = 0; 00166 //for each rec track 00167 00168 if (!recMdcTrackCol){ 00169 log << MSG::WARNING<< " Unable to retrieve recMdcTrackCol" << endreq; 00170 return StatusCode::SUCCESS; 00171 } 00172 t_recTkNum = recMdcTrackCol->size(); 00173 00174 //=============loop over tracks============== 00175 RecMdcTrackCol::iterator it = recMdcTrackCol->begin(); 00176 for(;it != recMdcTrackCol->end(); it++ ) { 00177 if ( m_mc && navigator ) { 00178 McParticleVector particles = navigator->getMcParticles(*it); 00179 t_mcTkNum = particles.size(); 00180 RecMdcTrackVector tracks = navigator->getMdcTracks(particles[0]); 00181 // for FIRST parent particle 00182 if ( sc!=StatusCode::SUCCESS ) return StatusCode::FAILURE; 00183 } 00184 sc = fillRecTrack(*it, t_mcTkNum, t_recTkNum); 00185 t_nTk++; 00186 if ( sc!=StatusCode::SUCCESS ) return StatusCode::FAILURE; 00187 }//end of loop over tracks 00188 00189 //=============loop over hits============== 00190 fillRecHits(*recMdcHitCol); 00191 00192 00193 if(m_hist){fillEvent();} 00194 00195 return StatusCode::SUCCESS; 00196 }
StatusCode MdcNavigation::fillEvent | ( | ) | [private] |
Definition at line 608 of file MdcNavigation.cxx.
References MdcRawDataProvider::b_dropHot, MdcRawDataProvider::b_keepBadTdc, MdcRawDataProvider::b_keepUnmatch, g_tupleEvt, RawDataProviderSvc::getMdcDigiVec(), iter(), MdcID::layer(), m_dropHot, m_keepBadTdc, m_keepUnmatch, m_maxMdcDigi, m_na_t3Curl, m_na_t3evtNo, m_na_t3gwire, m_na_t3layer, m_na_t3mcTk, m_na_t3nDigi, m_na_t3ovfl, m_na_t3PatRec, m_na_t3rc, m_na_t3recTk, m_na_t3rt, m_na_t3rtNot0, m_na_t3runNo, m_na_t3t0, m_na_t3t0Stat, m_na_t3tNum, m_na_t3TrkReco, m_na_t3wire, m_na_t3XRec, m_rawDataProviderSvc, RawDataUtil::MdcTime(), Constants::nWireBeforeLayer, t(), t_curlTk, t_eventNo, t_mcTkNum, t_patRecTk, t_recTkNum, t_runNo, t_t0, t_t0Stat, t_trkRecoTk, t_xRecTk, w, and MdcID::wire().
Referenced by execute().
00608 { 00609 if (!g_tupleEvt) return StatusCode::FAILURE; 00610 uint32_t getDigiFlag = 0; 00611 getDigiFlag += m_maxMdcDigi; 00612 if(m_dropHot) getDigiFlag |= MdcRawDataProvider::b_dropHot; 00613 if(m_keepBadTdc) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc; 00614 if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch; 00615 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag); 00616 00617 MdcDigiCol::iterator iter = mdcDigiVec.begin(); 00618 int t_i =0; 00619 for (;iter != mdcDigiVec.end(); iter++,++t_i ) { 00620 double t = RawDataUtil::MdcTime((*iter)->getTimeChannel()); 00621 double c = (*iter)->getChargeChannel(); 00622 int l = MdcID::layer((*iter)->identify()); 00623 int w = MdcID::wire((*iter)->identify()); 00624 if(g_tupleEvt){ 00625 m_na_t3layer[t_i] = l; 00626 m_na_t3wire[t_i] = w; 00627 m_na_t3gwire[t_i] = Constants::nWireBeforeLayer[l] + w; 00628 m_na_t3rt[t_i] = t; 00629 m_na_t3rtNot0[t_i] = t - t_t0; 00630 m_na_t3rc[t_i] = c; 00631 const MdcDigi* digi =const_cast<const MdcDigi*> (*iter); 00632 m_na_t3ovfl[t_i] = (*iter)->getOverflow(); 00633 m_na_t3tNum[t_i] = ((*iter)->getOverflow()&0xF0)>>4; 00634 } 00635 } 00636 if(g_tupleEvt) m_na_t3nDigi = t_i; 00637 00638 m_na_t3TrkReco = t_trkRecoTk; 00639 m_na_t3Curl = t_curlTk; 00640 m_na_t3PatRec= t_patRecTk; 00641 m_na_t3XRec= t_xRecTk; 00642 00643 m_na_t3t0 = t_t0; 00644 m_na_t3t0Stat = t_t0Stat; 00645 00646 m_na_t3recTk = t_recTkNum; 00647 m_na_t3mcTk = t_mcTkNum; 00648 00649 m_na_t3evtNo = t_eventNo; 00650 m_na_t3runNo = t_runNo; 00651 g_tupleEvt->write(); 00652 00653 return StatusCode::SUCCESS; 00654 }
StatusCode MdcNavigation::fillInit | ( | ) | [private] |
Definition at line 476 of file MdcNavigation.cxx.
References MdcRawDataProvider::b_dropHot, MdcRawDataProvider::b_keepBadTdc, MdcRawDataProvider::b_keepUnmatch, digiLayer, g_tupleMc, RawDataProviderSvc::getMdcDigiVec(), havedigi, iter(), MdcID::layer(), m_debug, m_dropHot, m_keepBadTdc, m_keepUnmatch, m_maxMdcDigi, m_rawData, m_rawDataProviderSvc, RawDataUtil::MdcTime(), msgSvc(), multiTdcCount, nDigiTk, nNoise, t(), t_curlTk, t_eventNo, t_patRecTk, t_runNo, t_t0, t_t0Stat, t_trkRecoTk, t_xRecTk, w, Bes_Common::WARNING, and MdcID::wire().
Referenced by execute().
00476 { 00477 MsgStream log(msgSvc(), name()); 00478 StatusCode sc = StatusCode::SUCCESS; 00479 00480 //int mcTkId = m_na_mcTkId; 00481 //m_na_nDigi = nDigiTk[mcTkId];//fill # of hit in this mc track 00482 t_trkRecoTk = 0; 00483 t_curlTk = 0; 00484 t_patRecTk = 0; 00485 t_xRecTk = 0; 00486 //-------------Get event header 00487 SmartDataPtr<Event::EventHeader> evtHead(eventSvc(),"/Event/EventHeader"); 00488 if (evtHead) { 00489 t_runNo = evtHead->runNumber(); 00490 t_eventNo = evtHead->eventNumber(); 00491 }else{ 00492 log << MSG::WARNING<< "Could not retrieve event header" << endreq; 00493 return StatusCode::FAILURE; 00494 } 00495 if(m_debug) std::cout<< "evtNo:"<<t_eventNo << std::endl; 00496 00497 //------------Get event time 00498 t_t0 = -1; 00499 t_t0Stat = -1; 00500 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol"); 00501 00502 if (!aevtimeCol || aevtimeCol->size()==0) { 00503 log << MSG::WARNING << "Could not find RecEsTimeCol" << endreq; 00504 }else{ 00505 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin(); 00506 t_t0 = (*iter_evt)->getTest(); 00507 t_t0Stat = (*iter_evt)->getStat(); 00508 } 00509 00510 //------------- Get McDigi collection 00511 uint32_t getDigiFlag = 0; 00512 getDigiFlag += m_maxMdcDigi; 00513 if(m_dropHot) getDigiFlag |= MdcRawDataProvider::b_dropHot; 00514 if(m_keepBadTdc) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc; 00515 if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch; 00516 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag); 00517 if ((mdcDigiVec.size()==0)) { 00518 log << MSG::WARNING << t_eventNo <<"No digi or could not find event in MdcDigiVec" << endreq; 00519 } 00520 00521 for (int ii=0;ii<43;ii++){ 00522 for (int jj=0;jj<288;jj++){ 00523 havedigi[ii][jj]= -99;//no hit or noise 00524 } 00525 } 00526 00527 for(int imc=0;imc<100;imc++){ 00528 nDigiTk[imc]=0; 00529 digiLayer[imc]=0; 00530 } 00531 00532 for(int ii=0;ii<43;ii++) for(int jj=0;jj<288;jj++) multiTdcCount[ii][jj]=0; 00533 MdcDigiCol::iterator iter = mdcDigiVec.begin(); 00534 for (;iter != mdcDigiVec.end(); iter++ ) { 00535 double t = RawDataUtil::MdcTime((*iter)->getTimeChannel()); 00536 double c = (*iter)->getChargeChannel(); 00537 int l = MdcID::layer((*iter)->identify()); 00538 int w = MdcID::wire((*iter)->identify()); 00539 multiTdcCount[l][w]++; 00540 } 00541 00542 int t_i=0; 00543 iter = mdcDigiVec.begin(); 00544 for (;iter != mdcDigiVec.end(); iter++,++t_i ) { 00545 double t = RawDataUtil::MdcTime((*iter)->getTimeChannel()); 00546 double c = (*iter)->getChargeChannel(); 00547 int l = MdcID::layer((*iter)->identify()); 00548 int w = MdcID::wire((*iter)->identify()); 00549 if(!m_rawData){ 00550 int tkid = (*iter)->getTrackIndex(); 00551 havedigi[l][w]= tkid; 00552 if (g_tupleMc){ 00553 //m_na_digiTkId[t_i] = tkid; 00554 } 00555 if(tkid>-1){ 00556 ++nDigiTk[tkid]; 00557 }else{ 00558 nNoise++; 00559 } 00560 } 00561 //if (g_tupleMc) m_na_digiLayer[t_i] = l; 00562 } 00563 return sc; 00564 }
StatusCode MdcNavigation::fillRecHits | ( | RecMdcHitCol & | hitCol | ) | [private] |
Definition at line 696 of file MdcNavigation.cxx.
References MdcID::layer(), m_na_act, m_na_Adc, m_na_chi2add, m_na_doca, m_na_driftD, m_na_driftT, m_na_entra, m_na_flaglr, m_na_gwire, m_na_hitStat, m_na_layer, m_na_nHit, m_na_resid, m_na_Tdc, m_na_wire, m_na_zhit, Constants::nWireBeforeLayer, and MdcID::wire().
Referenced by execute().
00696 { 00697 int ihit=0; 00698 RecMdcHitCol::iterator itHit = hitCol.begin(); 00699 for(;itHit != hitCol.end(); itHit++ ) { 00700 RecMdcHit* h = *itHit; 00701 if ( !h ) continue; 00702 double m_na_lr = h->getFlagLR(); 00703 double ddrift = -999; 00704 double ddoca = -999; 00705 ddoca = h->getDoca(); 00706 if( 0 == m_na_lr ){ ddrift = h->getDriftDistLeft(); 00707 }else{ ddrift = h->getDriftDistRight();} 00708 m_na_resid[ihit] = fabs(ddrift) - fabs(ddoca); 00709 if( 0 == m_na_lr ){ m_na_resid[ihit] *= -1.0;} 00710 m_na_driftD[ihit] = ddrift; 00711 m_na_driftT[ihit] = h->getDriftT(); 00712 m_na_doca[ihit] = ddoca; 00713 m_na_entra[ihit] = h->getEntra(); 00714 m_na_zhit[ihit] = h->getZhit(); 00715 m_na_chi2add[ihit] = h->getChisqAdd(); 00716 m_na_flaglr[ihit] = h->getFlagLR(); 00717 m_na_hitStat[ihit] = h->getStat(); 00718 m_na_Tdc[ihit] = h->getTdc(); 00719 m_na_Adc[ihit] = h->getAdc(); 00720 m_na_act[ihit] = h->getStat(); 00721 int tlayer = MdcID::layer(h->getMdcId()); 00722 int twire = MdcID::wire(h->getMdcId()); 00723 m_na_layer[ihit] = tlayer; 00724 m_na_wire[ihit] = twire; 00725 m_na_gwire[ihit] = Constants::nWireBeforeLayer[tlayer] + twire; 00726 ++ihit; 00727 }//end of loop over hits 00728 m_na_nHit = ihit; 00729 return StatusCode::SUCCESS; 00730 }
StatusCode MdcNavigation::fillRecTrack | ( | const RecMdcTrack * | it, | |
int | mcTkNum, | |||
int | recTkNum | |||
) | [private] |
Definition at line 227 of file MdcNavigation.cxx.
References MdcRawDataProvider::b_dropHot, MdcRawDataProvider::b_keepBadTdc, MdcRawDataProvider::b_keepUnmatch, DstMdcTrack::charge(), DstMdcTrack::chi2(), DstMdcTrack::err(), g_tupleMc, RecMdcTrack::getFiTerm(), RawDataProviderSvc::getMdcDigiVec(), RecMdcTrack::getVecHits(), havedigi, DstMdcTrack::helix(), iter(), MdcID::layer(), m_d0Cut, m_dropHot, m_keepBadTdc, m_keepUnmatch, m_maxMdcDigi, m_na_chi2, m_na_chi2Dof, m_na_chi2Prob, m_na_cpa, m_na_cpaE, m_na_d0, m_na_d0E, m_na_fiTerm, m_na_nAct, m_na_nDof, m_na_nEvtNoise, m_na_nMatch, m_na_nNoise, m_na_nSt, m_na_p, m_na_phi0, m_na_phi0E, m_na_pt, m_na_pz, m_na_q, m_na_recTkNum, m_na_tanl, m_na_tanlE, m_na_tkStat, m_na_z0, m_na_z0E, m_poca, m_rawDataProviderSvc, m_z0Cut, momentum(), DstMdcTrack::ndof(), nNoise, DstMdcTrack::nster(), poca(), probab(), DstMdcTrack::stat(), t_curlTk, t_eventNo, t_patRecTk, t_trkRecoTk, t_xRecTk, and MdcID::wire().
Referenced by execute().
00227 { 00228 00229 //int mcTkId = m_na_mcTkId; 00230 //m_na_nDigi = nDigiTk[mcTkId];//fill # of hit in this mc track 00231 m_na_nEvtNoise = nNoise;//fill # of noise hit in this event 00232 //m_na_mcTkNum = mcTkNum;// how many mc track are this track include 00233 m_na_recTkNum = recTkNum;//how many rec track are this track's mc particle include 00234 CLHEP::Hep3Vector rec_mom = momentum(tk); 00235 // fill rec momentum 00236 m_na_p = rec_mom.mag(); 00237 m_na_pt = rec_mom.perp(); 00238 m_na_pz = rec_mom.z(); 00239 //cout << "MSG::INFO Retrieved McParticles for for RecMdcTrack # " << it->getId() 00240 // << " of reconstructed momentum " << rec_mom << " GeV/c" << endl; 00241 //five param and it's error matrix 00242 m_na_d0 = tk->helix(0); 00243 m_na_phi0 = tk->helix(1); 00244 m_na_cpa = tk->helix(2); 00245 m_na_z0 = tk->helix(3); 00246 m_na_tanl = tk->helix(4); 00247 00248 if( m_na_d0 > m_d0Cut ) { 00249 std::cout<<__FILE__<<" "<<__LINE__<<" evtNo: "<<t_eventNo<<" d0:"<<std::setw(5)<<m_na_d0<<">"<<m_d0Cut<< std::endl; 00250 setFilterPassed(true); 00251 } 00252 if( m_na_z0 > m_z0Cut ) { 00253 std::cout<<__FILE__<<" "<<__LINE__<<" evtNo: "<<t_eventNo<<" z0:"<<std::setw(5)<<m_na_z0<<">"<<m_z0Cut<< std::endl; 00254 setFilterPassed(true); 00255 } 00256 //const CLHEP::HepSymMatrix tkErrM = tk->err(); 00257 m_na_d0E = tk->err(0); 00258 m_na_phi0E = tk->err(2); 00259 m_na_cpaE = tk->err(5); 00260 m_na_z0E = tk->err(9); 00261 m_na_tanlE = tk->err(14); 00262 m_na_q = tk->charge(); 00263 //fill track about 00264 m_na_chi2 = tk->chi2(); 00265 //m_na_nHit = tk->getNhits(); 00266 m_na_nDof = tk->ndof(); 00267 if ( m_na_nDof > 0 ) { 00268 m_na_chi2Dof = m_na_chi2/(float)m_na_nDof; 00269 } else { 00270 m_na_chi2Dof = 200.; 00271 } 00272 m_na_chi2Prob = probab(m_na_nDof, m_na_chi2); 00273 m_na_nSt = tk->nster(); 00274 m_na_fiTerm = tk->getFiTerm(); 00275 00276 if (tk->stat()==0){ 00277 t_trkRecoTk++; 00278 }else if(tk->stat()==1){ 00279 t_curlTk++; 00280 }else if(tk->stat()==2){ 00281 t_patRecTk++; 00282 }else if(tk->stat()==3){ 00283 t_xRecTk++; 00284 } 00285 m_na_tkStat = tk->stat(); 00286 00288 //int ihit = 0; 00289 //int layerEff[43]; 00290 //for (int ii=0;ii<43;ii++){ 00291 // layerEff[ii]=0; 00292 //} 00293 int noiseHit=0; 00294 int matchHit=0; 00295 int nAct = 0; 00296 HitRefVec hl = tk->getVecHits(); 00297 HitRefVec::iterator hitIt = hl.begin(); 00298 for (;hitIt!=hl.end();++hitIt){ 00299 RecMdcHit* h = *hitIt; 00300 if ( !h ) continue; 00301 if (h->getStat()!=0) nAct++; 00302 // //fill residual 00303 // double m_na_lr = h->getFlagLR(); 00304 // double ddrift = -999;double ddoca = -999; 00305 // ddoca = h->getDoca(); 00306 // if( 0 == m_na_lr ){ ddrift = h->getDriftDistLeft(); 00307 // }else{ ddrift = h->getDriftDistRight();} 00308 // m_na_resid[ihit] = fabs(ddrift) - fabs(ddoca); 00309 // if( 0 == m_na_lr ){ m_na_resid[ihit] *= -1.0;} 00310 // m_na_driftD[ihit] = ddrift; 00311 // m_na_driftT[ihit] = h->getDriftT(); 00312 // m_na_doca[ihit] = ddoca; 00313 // m_na_entra[ihit] = h->getEntra(); 00314 // m_na_zhit[ihit] = h->getZhit(); 00315 // m_na_chi2add[ihit] = h->getChisqAdd(); 00316 // m_na_flaglr[ihit] = h->getFlagLR(); 00317 // m_na_hitStat[ihit] = h->getStat(); 00318 // m_na_Tdc[ihit] = h->getTdc(); 00319 // m_na_Adc[ihit] = h->getAdc(); 00320 // m_na_act[ihit] = h->getStat(); 00321 00322 00323 int tlayer = MdcID::layer(h->getMdcId()); 00324 int twire = MdcID::wire(h->getMdcId()); 00325 // m_na_layer[ihit] = tlayer; 00326 // m_na_wire[ihit] = twire; 00327 // m_na_gwire[ihit] = Constants::nWireBeforeLayer[tlayer] + twire; 00328 // if (0==layerEff[tlayer]){ 00329 // layerEff[tlayer]=1; 00330 // g_layerEff->fill(tlayer); 00331 // } 00332 00333 if(havedigi[tlayer][twire]<0){ 00334 ++noiseHit; 00335 } 00336 //else{ 00337 //if(havedigi[tlayer][twire] == mcTkId) ++matchHit; 00338 // m_na_hitTkId[ihit] = havedigi[tlayer][twire]; 00339 //} 00340 // ++ihit; 00341 } 00342 m_na_nAct = nAct; 00343 m_na_nNoise = noiseHit; 00344 m_na_nMatch = matchHit; 00345 g_tupleMc->write(); 00346 //------------------------------------------ 00347 // fill Rec Track 00348 //------------------------------------------ 00349 00350 if (m_poca){ 00351 uint32_t getDigiFlag = 0; 00352 getDigiFlag += m_maxMdcDigi; 00353 if(m_dropHot) getDigiFlag |= MdcRawDataProvider::b_dropHot; 00354 if(m_keepBadTdc) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc; 00355 if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch; 00356 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag); 00357 MdcDigiCol::iterator iter = mdcDigiVec.begin(); 00358 for (;iter != mdcDigiVec.end(); iter++) { 00359 poca((*iter),tk->helix(),tk->err()); 00360 } 00361 } 00362 00363 return StatusCode::SUCCESS; 00364 }
StatusCode MdcNavigation::finalize | ( | ) |
Definition at line 200 of file MdcNavigation.cxx.
References Bes_Common::INFO, keepedParticles, msgSvc(), and t_nTk.
00200 { 00201 MsgStream log(msgSvc(), name()); 00202 log << MSG::INFO << "in finalize()" << endreq; 00203 std::cout<< "nTk == "<<t_nTk << std::endl;//yzhang debug 00204 delete keepedParticles; //FIXME 00205 return StatusCode::SUCCESS; 00206 }
StatusCode MdcNavigation::initialize | ( | ) |
Definition at line 67 of file MdcNavigation.cxx.
References bookNTuple(), calibUtil::ERROR, Bes_Common::FATAL, keepedParticles, m_hist, m_particleTable, m_pIMF, m_rawDataProviderSvc, msgSvc(), t_nTk, and Bes_Common::WARNING.
00067 { 00068 MsgStream log(msgSvc(), name()); 00069 StatusCode sc = StatusCode::SUCCESS; 00070 00071 t_nTk = 0; 00072 //Initailize magnetic filed 00073 sc = service ("MagneticFieldSvc",m_pIMF); 00074 if(sc!=StatusCode::SUCCESS) { 00075 log << MSG::ERROR << "Unable to open Magnetic field service"<<endreq; 00076 return StatusCode::FAILURE; 00077 } 00078 00079 00080 // Get the Particle Properties Service 00081 IPartPropSvc* p_PartPropSvc; 00082 static const bool CREATEIFNOTTHERE(true); 00083 sc = service("PartPropSvc", p_PartPropSvc, CREATEIFNOTTHERE); 00084 if (!sc.isSuccess() || 0 == p_PartPropSvc) { 00085 log << MSG::ERROR << " Could not initialize PartPropSvc" << endreq; 00086 return sc; 00087 } 00088 00089 m_particleTable = p_PartPropSvc->PDT(); 00090 00091 IRawDataProviderSvc* irawDataProviderSvc; 00092 sc = service ("RawDataProviderSvc", irawDataProviderSvc); 00093 m_rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*> (irawDataProviderSvc); 00094 if ( sc.isFailure() ){ 00095 log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq; 00096 return StatusCode::FAILURE; 00097 } 00098 00099 00100 if (m_hist){ 00101 sc = bookNTuple(); 00102 if (!sc.isSuccess()) { 00103 log << MSG::WARNING << " Could not book NTuple" << endreq; 00104 m_hist = 0; 00105 } 00106 } 00107 00108 keepedParticles = new int(211); 00109 00110 00111 return StatusCode::SUCCESS; 00112 }
Hep3Vector MdcNavigation::momentum | ( | const RecMdcTrack * | trk | ) | [private] |
Definition at line 209 of file MdcNavigation.cxx.
References cos(), DstMdcTrack::helix(), and sin().
Referenced by fillRecTrack().
00209 { 00210 // double dr = trk->helix(0); 00211 double fi0 = trk->helix(1); 00212 double cpa = trk->helix(2); 00213 double tanl = trk->helix(4); 00214 00215 double pxy = 0.; 00216 if(cpa != 0) pxy = 1/fabs(cpa); 00217 00218 double px = pxy * (-sin(fi0)); 00219 double py = pxy * cos(fi0); 00220 double pz = pxy * tanl; 00221 00222 Hep3Vector p; 00223 p.set(px, py, pz); // MeV/c 00224 return p; 00225 }
double MdcNavigation::poca | ( | const MdcDigi * | aDigi, | |
const HepVector | helixPar, | |||
const HepSymMatrix | errMat | |||
) | [private] |
Definition at line 656 of file MdcNavigation.cxx.
References IMagneticFieldSvc::getReferField(), RawData::identify(), MdcDetector::Layer(), MdcID::layer(), m_gm, m_pIMF, MdcLayer::nWires(), MdcLayer::phiEPOffset(), pi, MdcLayer::rMid(), and MdcID::wire().
Referenced by fillRecTrack().
00656 { 00657 int lay = MdcID::layer(aDigi->identify()); 00658 int wire = MdcID::wire(aDigi->identify()); 00659 //======from five track parameter to calculate the exact position=====// 00660 double ALPHA_loc,rho,pt,kappa,phiIn; 00661 int charge; 00662 double Bz = m_pIMF->getReferField()*1000.; 00663 ALPHA_loc = 333.567*Bz; //magnetic field const 00664 charge = ( kappa >=0 ) ? 1 : -1 ; 00665 rho = ALPHA_loc/kappa ; 00666 pt = fabs( 1.0 / kappa); 00667 HepVector helix(helix); 00668 helix[0] = -helixPar[0]; //cm 00669 helix[1] = helixPar[1]+ pi/2; 00670 helix[2] = -1./helixPar[2]; 00671 helix[3] = helixPar[3]; //cm 00672 helix[4] = helixPar[4]; 00673 HelixTraj* m_helixTraj; 00674 MdcSagTraj* m_wireTraj_I; 00675 MdcSWire* m_mdcSWire_I; 00676 TrkPoca* m_trkPoca; 00677 TrkPoca* m_trkPoca_I; 00678 TrkPoca* m_trkPoca_O; 00679 MdcSagTraj* m_wireTraj_O; 00680 MdcSWire* m_mdcSWire_O; 00681 m_helixTraj = new HelixTraj(helix,errMat); 00682 //---------------wire in and wire out of this layer--------------------- 00683 const MdcLayer* layPtr = m_gm->Layer(lay); 00684 double fltLenIn = layPtr->rMid(); 00685 phiIn = helix[1] + helix[2]*fltLenIn;//phi0 + omega * L 00686 BesAngle tmp(phiIn - layPtr->phiEPOffset()); 00687 int wlow = (int)floor(layPtr->nWires() * tmp.rad() / twopi ); 00688 int wbig = (int)ceil(layPtr->nWires() * tmp.rad() / twopi ); 00689 if (tmp == 0 ){ wlow = -1; wbig = 1; } 00690 int wireIn,wireOut; 00691 wireIn = wbig; 00692 wireOut = wlow; 00693 std::cout<<" in MdcNavigation lay/4 "<<lay/4<<" phi "<<tmp<<" wire "<<wireIn<<" "<<wireOut<<std::endl; 00694 }
double MdcNavigation::probab | ( | const int & | ndof, | |
const double & | chisq | |||
) | [private] |
Definition at line 732 of file MdcNavigation.cxx.
References exp(), genRecEmupikp::i, M_PI, and subSeperate::temp.
Referenced by fillRecTrack().
00732 { 00733 00734 //constants 00735 static double srtopi=2.0/sqrt(2.0*M_PI); 00736 static double upl=100.0; 00737 00738 double prob=0.0; 00739 if(ndof<=0) {return prob;} 00740 if(chisq<0.0) {return prob;} 00741 if(ndof<=60) { 00742 //full treatment 00743 if(chisq>upl) {return prob;} 00744 double sum=exp(-0.5*chisq); 00745 double term=sum; 00746 00747 int m=ndof/2; 00748 if(2*m==ndof){ 00749 if(m==1){return sum;} 00750 for(int i=2; i<=m;i++){ 00751 term=0.5*term*chisq/(i-1); 00752 sum+=term; 00753 }//(int i=2; i<=m) 00754 return sum; 00755 //even 00756 00757 }else{ 00758 //odd 00759 double srty=sqrt(chisq); 00760 double temp=srty/M_SQRT2; 00761 prob=erfc(temp); 00762 if(ndof==1) {return prob;} 00763 if(ndof==3) {return (srtopi*srty*sum+prob);} 00764 m=m-1; 00765 for(int i=1; i<=m; i++){ 00766 term=term*chisq/(2*i+1); 00767 sum+=term; 00768 }//(int i=1; i<=m; i++) 00769 return (srtopi*srty*sum+prob); 00770 00771 }//(2*m==ndof) 00772 00773 }else{ 00774 //asymtotic Gaussian approx 00775 double srty=sqrt(chisq)-sqrt(ndof-0.5); 00776 if(srty<12.0) {prob=0.5*erfc(srty);}; 00777 00778 }//ndof<30 00779 00780 return prob; 00781 }//endof probab
StatusCode MdcNavigation::skipMcParticle | ( | const Event::McParticle * | it, | |
int | nKindSkiped, | |||
int * | keepedPart | |||
) | [private] |
Definition at line 566 of file MdcNavigation.cxx.
References abs, genRecEmupikp::i, Bes_Common::INFO, m_nMcHit, m_particleTable, msgSvc(), and Bes_Common::WARNING.
00566 { 00567 00568 MsgStream log(msgSvc(), name()); 00569 00570 int pdg_code = (*it).particleProperty(); 00571 if (fabs(pdg_code)>=8) { 00572 const HepPDT::ParticleData* particles = m_particleTable->particle(abs(pdg_code)); 00573 if( ! particles ){ 00574 log<<MSG::WARNING<<"Exotic particle found with PDG code "<<pdg_code<<endreq; 00575 }else{ 00576 // skip neutrals 00577 if( particles->charge() == 0 ){ 00578 log<<MSG::INFO<<"Skip charge == 0 mc particle "<<pdg_code<<endreq; 00579 return StatusCode::FAILURE; 00580 } 00581 } 00582 } 00583 00584 int mcTkId = (*it).trackIndex(); 00585 int nMcHit=0; 00586 SmartDataPtr<Event::MdcMcHitCol> mcMdcMcHitCol(eventSvc(),"/Event/MC/MdcMcHitCol"); 00587 if (!mcMdcMcHitCol) { 00588 log << MSG::INFO << "Could not find MdcMcHit" << endreq; 00589 }else{ 00590 Event::MdcMcHitCol::iterator iter_mchit = mcMdcMcHitCol->begin(); 00591 for (;iter_mchit != mcMdcMcHitCol->end(); iter_mchit++ ) { 00592 int iMcTk = (*iter_mchit)->getTrackIndex(); 00593 if (mcTkId == iMcTk) nMcHit++; 00594 } 00595 } 00596 if(nMcHit<m_nMcHit) return StatusCode::FAILURE;//5 for default 00597 00598 bool keeped = false; 00599 for (int i=0; i<nKindKeeped; i++){ 00600 if (abs(pdg_code) == pid[i]) keeped = true; 00601 } 00602 00603 if (!keeped) return StatusCode::FAILURE; 00604 00605 return StatusCode::SUCCESS; 00606 }//end of skipMcParticle()
long MdcNavigation::digiLayer[100] [private] |
AIDA::IHistogram1D* MdcNavigation::g_layerEff [private] |
NTuple::Tuple* MdcNavigation::g_tupleEvt [private] |
NTuple::Tuple* MdcNavigation::g_tupleMc [private] |
Definition at line 80 of file MdcNavigation.h.
Referenced by bookNTuple(), fillInit(), and fillRecTrack().
NTuple::Tuple* MdcNavigation::g_tupleRec [private] |
Definition at line 81 of file MdcNavigation.h.
int MdcNavigation::havedigi[43][288] [private] |
int* MdcNavigation::keepedParticles [private] |
double MdcNavigation::m_d0Cut [private] |
bool MdcNavigation::m_debug [private] |
bool MdcNavigation::m_doSag [private] |
bool MdcNavigation::m_dropHot [private] |
Definition at line 58 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), fillRecTrack(), and MdcNavigation().
const MdcDetector* MdcNavigation::m_gm [private] |
bool MdcNavigation::m_hist [private] |
Definition at line 52 of file MdcNavigation.h.
Referenced by execute(), initialize(), and MdcNavigation().
bool MdcNavigation::m_keepBadTdc [private] |
Definition at line 57 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), fillRecTrack(), and MdcNavigation().
bool MdcNavigation::m_keepUnmatch [private] |
Definition at line 59 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), fillRecTrack(), and MdcNavigation().
int MdcNavigation::m_maxMdcDigi [private] |
Definition at line 56 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), fillRecTrack(), and MdcNavigation().
int MdcNavigation::m_mc [private] |
NTuple::Array<long> MdcNavigation::m_na_act [private] |
NTuple::Array<double> MdcNavigation::m_na_Adc [private] |
NTuple::Item<double> MdcNavigation::m_na_chi2 [private] |
NTuple::Array<double> MdcNavigation::m_na_chi2add [private] |
NTuple::Item<double> MdcNavigation::m_na_chi2Dof [private] |
NTuple::Item<double> MdcNavigation::m_na_chi2Prob [private] |
NTuple::Item<double> MdcNavigation::m_na_cpa [private] |
NTuple::Item<double> MdcNavigation::m_na_cpaE [private] |
NTuple::Item<double> MdcNavigation::m_na_cpaRes [private] |
NTuple::Item<double> MdcNavigation::m_na_d0 [private] |
NTuple::Item<double> MdcNavigation::m_na_d0E [private] |
NTuple::Item<double> MdcNavigation::m_na_d0Res [private] |
NTuple::Item<double> MdcNavigation::m_na_dCpa [private] |
NTuple::Item<double> MdcNavigation::m_na_dD0 [private] |
NTuple::Array<double> MdcNavigation::m_na_digiLayer [private] |
NTuple::Array<double> MdcNavigation::m_na_digiTkId [private] |
NTuple::Array<double> MdcNavigation::m_na_doca [private] |
NTuple::Item<double> MdcNavigation::m_na_dP [private] |
NTuple::Item<double> MdcNavigation::m_na_dPhi0 [private] |
NTuple::Item<double> MdcNavigation::m_na_dPt [private] |
NTuple::Item<double> MdcNavigation::m_na_dPz [private] |
NTuple::Array<double> MdcNavigation::m_na_driftD [private] |
NTuple::Array<double> MdcNavigation::m_na_driftT [private] |
NTuple::Item<double> MdcNavigation::m_na_dTanl [private] |
NTuple::Item<double> MdcNavigation::m_na_dZ0 [private] |
NTuple::Array<double> MdcNavigation::m_na_entra [private] |
NTuple::Item<double> MdcNavigation::m_na_evtNo [private] |
NTuple::Item<double> MdcNavigation::m_na_fiTerm [private] |
NTuple::Array<double> MdcNavigation::m_na_flaglr [private] |
NTuple::Array<double> MdcNavigation::m_na_gwire [private] |
NTuple::Array<double> MdcNavigation::m_na_hitStat [private] |
NTuple::Array<double> MdcNavigation::m_na_hitTkId [private] |
NTuple::Array<double> MdcNavigation::m_na_layer [private] |
NTuple::Item<double> MdcNavigation::m_na_mccpa [private] |
Definition at line 141 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcd0 [private] |
Definition at line 137 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcfifin [private] |
Definition at line 143 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcflag [private] |
Definition at line 144 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcp [private] |
Definition at line 132 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcphi0 [private] |
Definition at line 138 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcpid [private] |
Definition at line 131 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcpt [private] |
Definition at line 133 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcpx [private] |
Definition at line 134 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcpy [private] |
Definition at line 135 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcpz [private] |
Definition at line 136 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcq [private] |
Definition at line 142 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mctheta [private] |
Definition at line 140 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_mcTkId [private] |
NTuple::Item<double> MdcNavigation::m_na_mcTkNum [private] |
NTuple::Item<double> MdcNavigation::m_na_mcz0 [private] |
Definition at line 139 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_nAct [private] |
NTuple::Item<long> MdcNavigation::m_na_nDigi [private] |
NTuple::Item<double> MdcNavigation::m_na_nDof [private] |
NTuple::Item<double> MdcNavigation::m_na_nEvtNoise [private] |
NTuple::Item<long> MdcNavigation::m_na_nHit [private] |
NTuple::Item<double> MdcNavigation::m_na_nMatch [private] |
NTuple::Item<double> MdcNavigation::m_na_nNoise [private] |
NTuple::Item<double> MdcNavigation::m_na_nSt [private] |
NTuple::Item<double> MdcNavigation::m_na_p [private] |
NTuple::Item<double> MdcNavigation::m_na_phi0 [private] |
NTuple::Item<double> MdcNavigation::m_na_phi0E [private] |
NTuple::Item<double> MdcNavigation::m_na_phi0Res [private] |
NTuple::Item<double> MdcNavigation::m_na_pt [private] |
NTuple::Item<double> MdcNavigation::m_na_pz [private] |
NTuple::Item<double> MdcNavigation::m_na_q [private] |
NTuple::Item<double> MdcNavigation::m_na_recTkNum [private] |
NTuple::Array<double> MdcNavigation::m_na_resid [private] |
NTuple::Item<double> MdcNavigation::m_na_t2mcp [private] |
Definition at line 169 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2mcphi [private] |
Definition at line 171 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2mcpt [private] |
Definition at line 170 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2mctheta [private] |
Definition at line 172 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2mcTkNum [private] |
Definition at line 175 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2p [private] |
Definition at line 176 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2pt [private] |
Definition at line 177 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2recTkNum [private] |
Definition at line 174 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_t2tanl [private] |
Definition at line 173 of file MdcNavigation.h.
NTuple::Item<long> MdcNavigation::m_na_t3Curl [private] |
NTuple::Item<double> MdcNavigation::m_na_t3evtNo [private] |
NTuple::Array<long> MdcNavigation::m_na_t3gwire [private] |
NTuple::Array<long> MdcNavigation::m_na_t3layer [private] |
NTuple::Item<double> MdcNavigation::m_na_t3mcTk [private] |
NTuple::Item<long> MdcNavigation::m_na_t3nDigi [private] |
NTuple::Array<long> MdcNavigation::m_na_t3ovfl [private] |
NTuple::Item<long> MdcNavigation::m_na_t3PatRec [private] |
NTuple::Array<double> MdcNavigation::m_na_t3phi [private] |
NTuple::Array<double> MdcNavigation::m_na_t3rc [private] |
NTuple::Item<double> MdcNavigation::m_na_t3recTk [private] |
NTuple::Array<double> MdcNavigation::m_na_t3rt [private] |
NTuple::Array<double> MdcNavigation::m_na_t3rtNot0 [private] |
NTuple::Item<long> MdcNavigation::m_na_t3runNo [private] |
NTuple::Item<double> MdcNavigation::m_na_t3t0 [private] |
NTuple::Item<double> MdcNavigation::m_na_t3t0Stat [private] |
NTuple::Item<double> MdcNavigation::m_na_t3t0Truth [private] |
NTuple::Item<double> MdcNavigation::m_na_t3timing [private] |
Definition at line 189 of file MdcNavigation.h.
NTuple::Array<long> MdcNavigation::m_na_t3tNum [private] |
NTuple::Item<long> MdcNavigation::m_na_t3TrkReco [private] |
NTuple::Array<long> MdcNavigation::m_na_t3wire [private] |
NTuple::Array<double> MdcNavigation::m_na_t3xMid [private] |
Definition at line 200 of file MdcNavigation.h.
NTuple::Item<long> MdcNavigation::m_na_t3XRec [private] |
NTuple::Array<double> MdcNavigation::m_na_t3yMid [private] |
Definition at line 201 of file MdcNavigation.h.
NTuple::Item<double> MdcNavigation::m_na_tanl [private] |
NTuple::Item<double> MdcNavigation::m_na_tanlE [private] |
NTuple::Item<double> MdcNavigation::m_na_tanlRes [private] |
NTuple::Array<double> MdcNavigation::m_na_Tdc [private] |
NTuple::Item<long> MdcNavigation::m_na_tkId [private] |
Definition at line 148 of file MdcNavigation.h.
NTuple::Item<long> MdcNavigation::m_na_tkStat [private] |
NTuple::Array<double> MdcNavigation::m_na_wire [private] |
NTuple::Item<double> MdcNavigation::m_na_z0 [private] |
NTuple::Item<double> MdcNavigation::m_na_z0E [private] |
NTuple::Item<double> MdcNavigation::m_na_z0Res [private] |
NTuple::Array<double> MdcNavigation::m_na_zhit [private] |
int MdcNavigation::m_nMcHit [private] |
HepPDT::ParticleDataTable* MdcNavigation::m_particleTable [private] |
IMagneticFieldSvc* MdcNavigation::m_pIMF [private] |
bool MdcNavigation::m_poca [private] |
bool MdcNavigation::m_rawData [private] |
Definition at line 44 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), fillRecTrack(), and initialize().
double MdcNavigation::m_z0Cut [private] |
short MdcNavigation::multiTdcCount[43][288] [private] |
long MdcNavigation::nDigiTk[100] [private] |
double MdcNavigation::nNoise [private] |
int MdcNavigation::t_curlTk [private] |
Definition at line 69 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), and fillRecTrack().
long MdcNavigation::t_eventNo [private] |
Definition at line 60 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), and fillRecTrack().
int MdcNavigation::t_mcTkNum [private] |
int MdcNavigation::t_nTk [private] |
Definition at line 65 of file MdcNavigation.h.
Referenced by execute(), finalize(), and initialize().
int MdcNavigation::t_patRecTk [private] |
Definition at line 70 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), and fillRecTrack().
int MdcNavigation::t_recTkNum [private] |
long MdcNavigation::t_runNo [private] |
double MdcNavigation::t_t0 [private] |
double MdcNavigation::t_t0Stat [private] |
double MdcNavigation::t_t0Truth [private] |
Definition at line 64 of file MdcNavigation.h.
int MdcNavigation::t_trkRecoTk [private] |
Definition at line 68 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), and fillRecTrack().
int MdcNavigation::t_xRecTk [private] |
Definition at line 71 of file MdcNavigation.h.
Referenced by fillEvent(), fillInit(), and fillRecTrack().