#include <TrkReco.h>
Public Member Functions | |
TrkReco (const std::string &name, ISvcLocator *pSvcLocator) | |
returns TrkReco. | |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
StatusCode | beginRun () |
StatusCode | endRun () |
void | disp_stat (const char *) |
temporarily required | |
void | dump (const std::string &message=std::string(""), const std::string &prefix=std::string("")) const |
dumps debug information. | |
const TFinderBase * | confFinder (void) const |
returns a pointer to the rphi finder. | |
const TFinderBase * | curlFinder (void) const |
returns a pointer to the curl finder. | |
const TTrackManager & | trackManager (void) const |
returns a pointer to TTrackManager. | |
void | clear (void) |
clears all TMDC information. | |
void | fastClear (void) |
clears TMDC information. | |
const AList< TTrack > & | tracks (void) const |
returns a list of reconstructed tracks. | |
Public Attributes | |
int | b_mcPar |
int | b_mcHit |
int | b_tuple |
int | b_goodTrk |
int | b_timeTest |
bool | m_dropHot |
bool | m_combineTracking |
bool | m_keepBadTdc |
bool | m_keepUnmatch |
int | b_RungeKuttaCorrection |
float | b_cdcVersion |
std::string | _cdcVersion |
float | b_fudgeFactor |
int | useESTime |
int | b_debugLevel |
int | b_useAllHits |
int | b_doT0Reset |
int | b_nT0ResetMax |
int | b_doMCAnalysis |
float | b_helixFitterChisqMax |
int | b_doPerfectFinder |
int | b_perfectFitting |
int | b_conformalFinder |
int | b_doConformalFinder |
int | b_doConformalFastFinder |
int | b_doConformalSlowFinder |
int | b_conformalPerfectSegmentFinding |
int | b_conformalFittingFlag |
float | b_conformalMaxSigma |
int | b_conformalMinNLinksForSegment |
int | b_conformalMinNCores |
int | b_conformalMinNSegments |
float | b_salvageLevel |
int | b_conformalSalvageLoadWidth |
int | b_conformalStereoMode |
int | b_conformalStereoLoadWidth |
float | b_conformalStereoMaxSigma |
float | b_conformalStereoSzSegmentDistance |
float | b_conformalStereoSzLinkDistance |
int | b_doConformalFinderStereo |
int | b_doConformalFinderCosmic |
float | b_conformalFraction |
float | b_conformalStereoZ3 |
float | b_conformalStereoZ4 |
float | b_conformalStereoChisq3 |
float | b_conformalStereoChisq4 |
int | b_conformalFittingCorrections |
int | m_CalibFlag |
double | b_momentumCut |
int | b_fittingFlag |
int | b_doSalvage |
int | b_doMerge |
int | b_doT0Determination |
int | b_nTracksForT0 |
int | b_sortMode |
int | b_doAssociation |
float | b_associateSigma |
int | b_test |
int | b_doCurlFinder |
int | min_segment |
int | min_salvage |
double | bad_distance_for_salvage |
double | good_distance_for_salvage |
int | min_sequence |
int | min_fullwire |
double | range_for_axial_search |
double | range_for_stereo_search |
int | superlayer_for_stereo_search |
double | range_for_axial_last2d_search |
double | range_for_stereo_last2d_search |
double | trace2d_distance |
double | trace2d_first_distance |
double | trace3d_distance |
int | determine_one_track |
double | selector_max_impact |
double | selector_max_sigma |
double | selector_strange_pz |
double | selector_replace_dz |
int | stereo_2dfind |
int | merge_exe |
double | merge_ratio |
double | merge_z_diff |
double | mask_distance |
double | ratio_used_wire |
double | range_for_stereo1 |
double | range_for_stereo2 |
double | range_for_stereo3 |
double | range_for_stereo4 |
double | range_for_stereo5 |
double | range_for_stereo6 |
double | z_cut |
double | z_diff_for_last_attend |
int | svd_reconstruction |
double | min_svd_electrons |
int | on_correction |
int | output_2dtracks |
int | curl_version |
double | minimum_seedLength |
double | minimum_2DTrackLength |
double | minimum_3DTrackLength |
double | minimum_closeHitsLength |
double | MIN_RADIUS_OF_STRANGE_TRACK |
double | ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK |
Private Member Functions | |
void | initPara (void) |
initiate Parameters | |
bool | mcEvent (void) const |
returns true if an event is MC. | |
void | mcInformation (void) |
creates MC info. of reconstructed tracks. | |
double | maxdDistance (TMLink *) const |
cal maxdistance temporary in conformal plane | |
TMDC * | cdcInit (void) |
void | InitTuple (void) |
initiate and fill Tuple | |
void | FillTuple (void) |
Private Attributes | |
TMDC * | _cdc |
TFinderBase * | _perfectFinder |
TFinderBase * | _confFinder |
TCurlFinder * | _curlFinder |
TTrackManager | _trackManager |
TRungeFitter | _rkfitter |
RawDataProviderSvc * | _rawDataProviderSvc |
MdcCalibFunSvc * | _mdcCalibFunSvc |
MdcGeomSvc * | _mdcGeomSvc |
unsigned | _nEvents |
AList< TTrackMC > | _mcTracks |
IBesTimerSvc * | m_timersvc |
BesTimer * | m_timer [2] |
double | t0_bes |
double | t0Sta |
int | havedigi [43][288] |
int | MC_DIGI_SIZE |
NTuple::Tuple * | m_tuple |
NTuple::Item< float > | t_mcphi |
NTuple::Item< float > | t_mctheta |
NTuple::Item< float > | t_mcptot |
NTuple::Item< float > | t_mcpt |
NTuple::Item< float > | t_mcpz |
NTuple::Item< float > | t_mct0 |
NTuple::Item< float > | t_nDigi |
NTuple::Item< float > | t_pt |
NTuple::Item< float > | t_ptot |
NTuple::Item< float > | t_dr |
NTuple::Item< float > | t_dz |
NTuple::Item< float > | t_tanlmd |
NTuple::Item< float > | t_phi |
NTuple::Item< float > | t_radius |
NTuple::Item< float > | t_chi2 |
NTuple::Item< float > | t_ndf |
NTuple::Item< float > | t_nHits |
NTuple::Item< float > | t_nCores |
NTuple::Item< float > | t_nSegs |
NTuple::Item< float > | t_length |
NTuple::Item< float > | t_length2 |
NTuple::Item< float > | t_evtNo |
NTuple::Item< float > | t_dpt |
NTuple::Item< float > | t_dptot |
NTuple::Item< float > | t_dlmd |
NTuple::Item< float > | t_dphi |
NTuple::Item< float > | t_t0 |
NTuple::Item< float > | t0_sta |
NTuple::Item< float > | t_good_theta |
NTuple::Item< float > | t_gdNLayers |
NTuple::Item< float > | t_mcNLayers |
NTuple::Item< float > | t_bestNLayers |
NTuple::Item< float > | t_bestMcNLayers |
NTuple::Tuple * | m_tuple2 |
NTuple::Item< float > | t2_mctheta |
NTuple::Item< float > | t2_mcpt |
NTuple::Item< float > | t2_nDigi |
NTuple::Item< float > | t2_length |
NTuple::Item< float > | t2_ndf |
NTuple::Item< float > | t2_evtNo |
NTuple::Item< float > | t2_chi2 |
NTuple::Item< float > | t2_nHits |
NTuple::Item< float > | t2_nSegs |
NTuple::Item< float > | t2_length2 |
NTuple::Item< float > | t2_radius |
NTuple::Tuple * | m_tuple3 |
NTuple::Item< float > | t3_mct0 |
NTuple::Item< float > | t3_mcptot |
NTuple::Item< float > | t3_mcpt |
NTuple::Item< float > | t3_mctheta |
NTuple::Item< float > | t3_mcphi |
NTuple::Item< float > | t3_mcpid |
NTuple::Item< float > | t3_evtNo |
NTuple::Tuple * | m_tuple31 |
NTuple::Item< float > | t3_nDigi |
NTuple::Item< float > | t3_goodLength |
NTuple::Item< float > | t3_t0Rec |
NTuple::Item< float > | t3_t0 |
NTuple::Item< float > | t3_t0Sta |
NTuple::Item< float > | t3_finalLength |
NTuple::Item< float > | t3_length |
NTuple::Tuple * | m_tuple4 |
NTuple::Item< float > | t4_Dist |
NTuple::Item< float > | t4_drift |
NTuple::Item< float > | t4_dDrift |
NTuple::Item< float > | t4_mcDrift |
NTuple::Item< float > | t4_mcLR |
NTuple::Item< float > | t4_pull |
NTuple::Item< float > | t4_lyrId |
NTuple::Item< float > | t4_localId |
NTuple::Item< float > | t4_LR |
NTuple::Item< float > | t4_tdc |
NTuple::Item< float > | t4_z |
NTuple::Item< float > | t4_bz |
NTuple::Item< float > | t4_fz |
NTuple::Item< float > | t4_fy |
NTuple::Item< float > | t4_phi |
NTuple::Item< float > | t4_nHits |
NTuple::Tuple * | m_tuple5 |
NTuple::Item< float > | t5_ptotPos |
NTuple::Item< float > | t5_ptotNeg |
NTuple::Item< float > | t5_drPos |
NTuple::Item< float > | t5_drNeg |
NTuple::Item< float > | t5_dzPos |
NTuple::Item< float > | t5_dzNeg |
NTuple::Tuple * | m_tuple6 |
NTuple::Item< float > | u_length2 |
NTuple::Item< float > | u_mcptot |
NTuple::Item< float > | u_mcpt |
NTuple::Item< float > | u_mctheta |
NTuple::Item< float > | u_nDigi |
NTuple::Item< float > | u_evtNo |
NTuple::Item< float > | u_mct0 |
NTuple::Item< float > | ut_t0 |
NTuple::Item< float > | ut0_sta |
NTuple::Tuple * | m_tuple7 |
NTuple::Item< float > | ti_eventTime |
NTuple::Item< float > | ti_recTrkNum |
NTuple::Item< float > | ti_evtNo |
NTuple::Item< float > | ti_nHits |
NTuple::Item< float > | ti_nDigi |
NTuple::Tuple * | m_tuple9 |
NTuple::Item< float > | t9_times |
NTuple::Item< float > | t9_nLinks |
NTuple::Item< float > | t9_nUsed |
NTuple::Item< float > | t9_nSL |
NTuple::Item< float > | t9_mctheta |
NTuple::Tuple * | m_tuple10 |
NTuple::Item< float > | t10_tdc |
NTuple::Item< float > | t10_adc |
NTuple::Item< float > | t10_drift |
NTuple::Item< float > | t10_dDrift |
NTuple::Item< float > | t10_lyrId |
NTuple::Item< float > | t10_localId |
Definition at line 46 of file TrkReco.h.
TrkReco::TrkReco | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
returns TrkReco.
Initiate Parameters for TrkReco
Definition at line 80 of file TrkReco.cxx.
References b_helixFitterChisqMax, initPara(), and TrkRecoHelixFitterChisqMax.
00080 : 00081 Algorithm(name, pSvcLocator), 00082 _cdc(0), 00083 _perfectFinder(0), 00084 _rkfitter("range fitter", 00085 false, 00086 0, 00087 true), 00088 _confFinder(0), 00089 _curlFinder(0), 00090 _nEvents(0) { 00091 00093 initPara(); 00094 00095 TrkRecoHelixFitterChisqMax = b_helixFitterChisqMax; 00096 }
StatusCode TrkReco::beginRun | ( | ) |
Definition at line 302 of file TrkReco.cxx.
References _cdc, _mdcGeomSvc, and cdcInit().
00302 { 00304 IMdcGeomSvc* imdcGeomSvc; 00305 StatusCode sc1 =Gaudi::svcLocator()->service("MdcGeomSvc", imdcGeomSvc); 00306 _mdcGeomSvc = dynamic_cast<MdcGeomSvc*> (imdcGeomSvc); 00307 if (sc1.isFailure()) { 00308 return( StatusCode::FAILURE); 00309 } 00310 _cdc = cdcInit(); 00311 00312 return StatusCode::SUCCESS; 00313 }
TMDC * TrkReco::cdcInit | ( | void | ) | [private] |
Definition at line 260 of file TrkReco.cxx.
References _cdc, _cdcVersion, b_cdcVersion, b_debugLevel, b_fudgeFactor, TMDC::debugLevel(), TMDC::fudgeFactor(), and TMDC::getTMDC().
Referenced by beginRun().
00260 { 00261 _cdcVersion = dtostring(b_cdcVersion); 00262 if (! _cdc) _cdc = TMDC::getTMDC(_cdcVersion); 00263 _cdc->debugLevel(b_debugLevel); 00264 00265 //...Obtain fudge factor... 00266 float fudgeFactor = b_fudgeFactor; 00267 00268 /* if (fudgeFactor == 0.) { 00269 const calcdc_const4 & c = * (calcdc_const4 *) BsGetEnt(CALMDC_CONST4, 00270 1, 00271 BBS_No_Index); 00272 if (!(& c)) fudgeFactor = 1.; 00273 else fudgeFactor = c.m_fudge; 00274 }*/ 00275 00276 //...Turn off fudge factor before checking performance... 00277 fudgeFactor = 1.0; 00278 00279 _cdc->fudgeFactor(fudgeFactor); 00280 return _cdc; 00281 }
void TrkReco::clear | ( | void | ) |
clears all TMDC information.
Definition at line 956 of file TrkReco.cxx.
References _confFinder, _curlFinder, _mcTracks, _perfectFinder, _trackManager, b_doConformalFinder, b_doCurlFinder, b_doPerfectFinder, TTrackManager::clear(), TCurlFinder::clear(), TFinderBase::clear(), and TTrackManager::clearTables().
Referenced by execute(), and fastClear().
00956 { 00957 00958 //...Clear track candidates of the last event... 00959 HepAListDeleteAll(_mcTracks); 00960 00961 //...Clear finders... 00962 if (b_doPerfectFinder) _perfectFinder->clear(); 00963 if (b_doConformalFinder) _confFinder->clear(); 00964 if (b_doCurlFinder) _curlFinder->clear(); 00965 _trackManager.clear(); 00966 _trackManager.clearTables(); 00967 }
const TFinderBase * TrkReco::confFinder | ( | void | ) | const [inline] |
returns a pointer to the rphi finder.
Definition at line 320 of file TrkReco.h.
References _confFinder.
00320 { 00321 return (TFinderBase *) _confFinder; 00322 }
const TFinderBase * TrkReco::curlFinder | ( | void | ) | const [inline] |
returns a pointer to the curl finder.
Definition at line 326 of file TrkReco.h.
References _curlFinder.
00326 { 00327 return (TFinderBase *) _curlFinder; 00328 }
void TrkReco::disp_stat | ( | const char * | ) |
temporarily required
Definition at line 315 of file TrkReco.cxx.
References deljobs::string.
00315 { 00316 std::string msg = m; 00317 // dump(msg); 00318 }
void TrkReco::dump | ( | const std::string & | message = std::string("") , |
|
const std::string & | prefix = std::string("") | |||
) | const |
dumps debug information.
StatusCode TrkReco::execute | ( | ) |
Definition at line 321 of file TrkReco.cxx.
References _cdc, _confFinder, _curlFinder, _mdcCalibFunSvc, _mdcGeomSvc, _nEvents, _perfectFinder, _rawDataProviderSvc, _rkfitter, _trackManager, MdcRec_wirhit::adc, TTrackBase::append(), TTrackManager::append(), TTrackManager::append2D(), TMDC::axialHits(), b_conformalFinder, b_doConformalFinder, b_doCurlFinder, b_doMCAnalysis, b_doPerfectFinder, b_doSalvage, b_doT0Determination, b_doT0Reset, MdcRawDataProvider::b_dropHot, b_goodTrk, MdcRawDataProvider::b_keepBadTdc, MdcRawDataProvider::b_keepUnmatch, b_nT0ResetMax, b_nTracksForT0, b_RungeKuttaCorrection, b_timeTest, b_tuple, b_useAllHits, clear(), TConformalFinder0::conformalTransformationDriftCircle(), counter, MdcRec_wirhit::ddl, MdcRec_wirhit::ddr, Bes_Common::DEBUG, TTrackManager::determineT0(), TCurlFinder::doit(), TFinderBase::doit(), MdcCalibFunSvc::driftTimeToDist(), TTrackBase::DropWorst(), MdcRec_wirhit::erddl, MdcRec_wirhit::erddr, showlog::err, calibUtil::ERROR, Bes_Common::FATAL, FillTuple(), TRungeFitter::fit(), MdcRec_wirhit::geo, RawDataProviderSvc::getMdcDigiVec(), MdcRecWirhitCol::getMdcRecWirhitCol(), MdcCalibFunSvc::getSigma(), MdcCalibFunSvc::getT0(), MdcCalibFunSvc::getTimeWalk(), havedigi, TMDC::hits(), genRecEmupikp::i, MdcRec_wirhit::id, Bes_Common::INFO, MdcID::layer(), TTrackBase::links(), MdcRec_wirhit::lr, MdcGeoWire::Lyr(), m_CalibFlag, m_combineTracking, m_dropHot, m_keepBadTdc, m_keepUnmatch, m_timer, m_tuple10, TTrackManager::makeTds(), TTrackManager::mask(), TTrackManager::maskCurlHits(), MC_DIGI_SIZE, RawDataUtil::MdcTime(), TTrackManager::merge(), msgSvc(), ORIGIN, TTrackManager::paraT0(), MdcGeoLayer::Radius(), EventModel::Recon::RecMdcHitCol, EventModel::Recon::RecMdcTrackCol, TTrackBase::removeLinks(), TTrackManager::salvage(), TTrackManager::sett0bes(), BesTimer::start(), MdcRec_wirhit::stat, TMDC::stereoHits(), t(), t0_bes, t0Sta, t10_adc, t10_dDrift, t10_drift, t10_localId, t10_lyrId, t10_tdc, t3_t0Rec, MdcRec_wirhit::tdc, MdcRec_wirhit::timechannel, TTrackManager::tracks(), tracks(), TMDC::update(), useESTime, Bes_Common::WARNING, MdcGeomSvc::Wire(), MdcID::wire(), and WireHitFindingValid.
00321 { 00322 MsgStream log(msgSvc(), name()); 00323 log << MSG::INFO << "in execute()" << endreq; 00324 StatusCode sc; 00325 if (b_timeTest && b_tuple) m_timer[1]->start(); 00326 00327 // Initiate state of all sense wire 00328 if (b_goodTrk && b_tuple) 00329 for (int ii=0;ii<43;ii++){ 00330 for (int jj=0;jj<288;jj++){ 00331 havedigi[ii][jj]= -99;//no hit/noise 00332 } 00333 } 00334 00335 //------------------------------------ 00336 // Initialize track collection in TDS 00337 //------------------------------------ 00338 //yzhang add 2010-04-30 00339 //Clear TDS tracks and hits 00340 if(!b_RungeKuttaCorrection){ 00341 IDataManagerSvc *dataManSvc; 00342 DataObject *aTrackCol; 00343 DataObject *aRecHitCol; 00344 if(!m_combineTracking){ 00345 dataManSvc = dynamic_cast<IDataManagerSvc*> (eventSvc().get()); 00346 eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol); 00347 if(aTrackCol != NULL) { 00348 dataManSvc->clearSubTree("/Event/Recon/RecMdcTrackCol"); 00349 eventSvc()->unregisterObject("/Event/Recon/RecMdcTrackCol"); 00350 } 00351 eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aRecHitCol); 00352 if(aRecHitCol != NULL) { 00353 dataManSvc->clearSubTree("/Event/Recon/RecMdcHitCol"); 00354 eventSvc()->unregisterObject("/Event/Recon/RecMdcHitCol"); 00355 } 00356 } 00357 DataObject *aReconEvent; 00358 eventSvc()->findObject("/Event/Recon",aReconEvent); 00359 if(!aReconEvent) { 00360 ReconEvent* recevt = new ReconEvent; 00361 StatusCode sc = eventSvc()->registerObject("/Event/Recon",recevt ); 00362 if(sc!=StatusCode::SUCCESS) { 00363 log << MSG::FATAL << "Could not register ReconEvent" <<endreq; 00364 return( StatusCode::FAILURE); 00365 } 00366 } 00367 RecMdcTrackCol* trkcol; 00368 eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol); 00369 if (aTrackCol) { 00370 trkcol = dynamic_cast<RecMdcTrackCol*> (aTrackCol); 00371 }else{ 00372 trkcol= new RecMdcTrackCol; 00373 sc = eventSvc()->registerObject(EventModel::Recon::RecMdcTrackCol, trkcol); 00374 if(!sc.isSuccess()) { 00375 log << MSG::FATAL << " Could not register RecMdcTrack collection" <<endreq; 00376 return StatusCode::FAILURE; 00377 } 00378 } 00379 RecMdcHitCol* hitcol; 00380 eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aRecHitCol); 00381 if (aRecHitCol) { 00382 hitcol = dynamic_cast<RecMdcHitCol*> (aRecHitCol); 00383 }else{ 00384 hitcol= new RecMdcHitCol; 00385 sc = eventSvc()->registerObject(EventModel::Recon::RecMdcHitCol, hitcol); 00386 if(!sc.isSuccess()) { 00387 log << MSG::FATAL << " Could not register RecMdcHit collection" <<endreq; 00388 return StatusCode::FAILURE; 00389 } 00390 } 00391 // Part 1: Get Tev 00392 t0_bes = 0.; 00393 t0Sta = -1; 00394 if (useESTime) { 00395 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol"); 00396 //bugcheck jialk 00397 if (aevtimeCol && aevtimeCol->size() ) { 00398 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin(); 00399 t0_bes = (*iter_evt)->getTest(); 00400 t0Sta = (*iter_evt)->getStat(); 00401 }else{ 00402 log << MSG::WARNING << "Could not find EsTimeCol" << endreq; 00403 return StatusCode::SUCCESS; 00404 } 00405 } 00406 00407 // Part 2: Get the event header 00408 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00409 if (!eventHeader) { 00410 log << MSG::FATAL << "Could not find Event Header" << endreq; 00411 return( StatusCode::FAILURE); 00412 } 00413 _nEvents = eventHeader->eventNumber(); 00414 if (b_tuple) std::cout << "TrkReco ... processing ev# " << _nEvents << std::endl; 00415 00416 // Part 3: Retrieve MDC digi 00417 int digiId; 00418 uint32_t getDigiFlag = 0; 00419 if(m_dropHot || m_combineTracking)getDigiFlag |= MdcRawDataProvider::b_dropHot; 00420 if(m_keepBadTdc) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc; 00421 if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch; 00422 MdcDigiVec mdcDigiVec = _rawDataProviderSvc->getMdcDigiVec(getDigiFlag); 00423 if (0 == mdcDigiVec.size()){ 00424 log << MSG::WARNING << " No hits in MdcDigiVec" << endreq; 00425 return StatusCode::SUCCESS; 00426 } 00427 /* //jialk in order to reject events with exceeding # of total hits 2009/03/31 00428 if (mdcDigiVec.size() > 2000){ 00429 log << MSG::WARNING << " Too many hits in MdcDigiVec" << endreq; 00430 return StatusCode::SUCCESS; 00431 }*/ 00432 MdcDigiVec::iterator iter1 = mdcDigiVec.begin(); 00433 MC_DIGI_SIZE = mdcDigiVec.size(); 00434 00435 digiId = 0; 00436 Identifier mdcId; 00437 int layerId; 00438 int wireId; 00439 00440 //Clear the old MdcRec_wirhit tables and create the hits' info for the new event. 00441 unsigned nt = MdcRecWirhitCol::getMdcRecWirhitCol()->size(); 00442 //cout<<"Col size of last Event's WirHit = "<<nt<<endl; 00443 MdcRecWirhitCol::getMdcRecWirhitCol()->clear(); 00444 00445 for (;iter1 != mdcDigiVec.end(); iter1++, digiId++) { 00446 //log << MSG::INFO << "MDC digit No: " << digiId << endreq; 00447 mdcId = (*iter1)->identify(); 00448 layerId = MdcID::layer(mdcId); 00449 wireId = MdcID::wire(mdcId); 00450 /*log << MSG::INFO 00451 << " time_channel = " << (*iter1)->getTimeChannel() 00452 <<" time = "<<(*iter1)->getTimeChannel()* 40./10000/1000000 00453 << " charge_channel = " << (*iter1)->getChargeChannel() 00454 << " layerId = " << layerId 00455 << " wireId = " << wireId 00456 << endreq;*/ 00457 00458 if (b_goodTrk && b_tuple) havedigi[layerId][wireId] = (*iter1)->getTrackIndex(); //-1:noise 0-n:tracks 00459 00460 MdcRec_wirhit mhit; 00461 00462 mhit.id = digiId; 00463 mhit.geo = _mdcGeomSvc->Wire(layerId,wireId); 00464 //Apply crude TOF, Belle: tof=1.074*radius/c, here we use 1.28 instead of 1.074. 00465 double tof; 00466 tof = 1.28 * mhit.geo->Lyr()->Radius()/299.8; //unit of Radius is mm. 00467 mhit.tdc = RawDataUtil::MdcTime((*iter1)->getTimeChannel()); 00468 00469 //cout<<" .. mhit.tdc = "<<mhit.tdc<<" t0_bes = "<<t0_bes<<endl; 00470 mhit.tdc -= t0_bes; 00471 00472 //jialk 00473 _trackManager.sett0bes(t0_bes); 00474 //mhit.adc = RawDataUtil::MdcCharge((*iter1)->getChargeChannel()); 00475 //mhit.tdc = (*iter1)->getTimeChannel(); 00476 mhit.adc = (*iter1)->getChargeChannel(); 00477 //cout<<"raw tdc(ns): "<<mhit.tdc<<"; tof(ns): "<<tof<<endl; 00478 // double dist2 = _mdcCalibFunSvc->rawTimeNoTOFToDist(mhit.tdc-tof, layerId, wireId, 2, 0.0); 00479 // mhit.erddl = _mdcCalibFunSvc->getSigma(layerId, 2, dist2, 0.0); 00480 double timewalk=_mdcCalibFunSvc->getTimeWalk(layerId,mhit.adc); 00481 double T0 = _mdcCalibFunSvc->getT0(layerId,wireId); 00482 double drifttime = mhit.tdc-tof-timewalk-T0; 00483 double dist2 = _mdcCalibFunSvc->driftTimeToDist(drifttime,layerId, wireId, 2, 0);//by liucy 2010/05/12 00484 mhit.erddl = _mdcCalibFunSvc->getSigma(layerId, 2 , dist2, 0.0,0.0,0.0,mhit.adc); 00485 //cout<<"getSigma: "<<mhit.erddl<<endl; 00486 mhit.ddl = dist2/10.; //mm->cm 00487 mhit.ddr = mhit.ddl; 00488 mhit.erddl = mhit.erddl/10.; //mm->cm 00489 mhit.erddr = mhit.erddl; 00490 00491 mhit.lr = 2; 00492 mhit.stat = 0; 00493 mhit.stat = mhit.stat |= 1048576; //bit20 WireHitTimeValid 00494 mhit.stat = mhit.stat |= 2097152; //bit21 WireHitChargeValid 00495 mhit.stat = mhit.stat |= 4194304; //bit22 WireHitFindingValid 00496 mhit.stat = mhit.stat |= 1073741824; //bit30 00497 //cout<<"layerNo = "<<mhit.geo->Layer()<<"; "<<mdigi.digi[i].layerNo<<endl; 00498 //cout<<"cellNo = "<<mhit.geo->Cell()<<"; "<<mdigi.digi[i].cellNo<<endl; 00499 //cout<<"NCell of this layer = "<<mhit.geo->Lyr()->NCell()<<endl; 00500 //cout<<"NCell of this layer = "<<mhit.geo->Lyr()->NCell()<<endl; 00501 MdcRecWirhitCol::getMdcRecWirhitCol()->push_back(mhit); 00502 00503 if (b_tuple) { 00504 t10_tdc = mhit.tdc; 00505 t10_adc = mhit.adc; 00506 t10_drift = mhit.ddl; 00507 t10_dDrift = mhit.erddl; 00508 t10_lyrId = layerId; 00509 t10_localId = wireId; 00510 m_tuple10->write(); 00511 } 00512 } 00513 00514 unsigned nT0Reset = 0; 00515 00516 //...Starting point... 00517 TrkReco_start: 00518 00519 //...Clear myself... 00520 clear(); 00521 00522 //jialk in order to reject events with exceeding # of total hits 2009/03/31 00523 if (mdcDigiVec.size() > 2000){ 00524 log << MSG::WARNING << " Too many hits in MdcDigiVec" << endreq; 00525 return StatusCode::SUCCESS; 00526 } 00527 00528 //...Update TMDC... 00529 _cdc->update(b_doMCAnalysis); 00530 00531 //...Get lists of hits... 00532 unsigned mask = 0; 00533 if (! b_useAllHits) mask = WireHitFindingValid; 00534 const AList<TMDCWireHit> & axialHits = _cdc->axialHits(mask); 00535 const AList<TMDCWireHit> & stereoHits = _cdc->stereoHits(mask); 00536 const AList<TMDCWireHit> & allHits = _cdc->hits(mask); 00537 //cout<<"axial: "<<axialHits.length()<<" stereo: "<<stereoHits.length()<<endl; 00538 00539 //...Storage for tracks... 00540 AList<TTrack> tracks; 00541 AList<TTrack> tracks2D; 00542 00543 //...Perfect finder... 00544 if (b_doPerfectFinder) { 00545 _perfectFinder->doit(axialHits, stereoHits, tracks, tracks2D); 00546 _trackManager.append(tracks); 00547 } 00548 00549 else { 00550 //...Conformal finder... 00551 if (b_doConformalFinder) { 00552 00553 //...T0 reset option... 00554 if (b_doT0Reset) { 00555 if (b_nT0ResetMax > nT0Reset) 00556 ((TConformalFinder *) _confFinder)->doT0Reset(true); 00557 else 00558 ((TConformalFinder *) _confFinder)->doT0Reset(false); 00559 } 00560 00561 _confFinder->doit(axialHits, stereoHits, tracks, tracks2D); 00562 00563 //...T0 reset... 00564 if (b_doT0Reset) { 00565 ++nT0Reset; 00566 if (((TConformalFinder *) _confFinder)->T0ResetDone()) 00567 goto TrkReco_start; 00568 } 00569 00570 //cout<<"tracks: "<<tracks.length()<<endl; 00571 00572 //...Stores tracks... 00573 _trackManager.append(tracks); 00574 _trackManager.append2D(tracks2D); 00575 if (b_conformalFinder == 0) { 00576 if (b_doSalvage == 1) _trackManager.salvage(allHits); 00577 if (b_doSalvage) _trackManager.mask(); 00578 } 00579 } 00580 00581 //...Curl finder... 00582 if (b_doCurlFinder) { 00583 if ((! b_doSalvage) && (b_conformalFinder == 0)) 00584 _trackManager.maskCurlHits(axialHits, 00585 stereoHits, 00586 _trackManager.tracks()); 00587 AList<TTrack> confTracks = _trackManager.tracks(); 00588 tracks.append(confTracks); 00589 _curlFinder->doit(axialHits, stereoHits, tracks, tracks2D); 00590 tracks.remove(confTracks); 00591 //_trackManager.append(tracks); 00592 } 00593 00594 //...Finishes tracks... 00595 // if ((b_doSalvage) && (b_conformalFinder == 0)) _trackManager.refit(); 00596 00597 //...Appends tracks which are reconstructed by CurlFinder... 00598 if (b_doCurlFinder) { 00599 _trackManager.append(tracks); 00600 _trackManager.append2D(tracks2D); 00601 } 00602 00603 //...Merge & Mask ... 00604 //if ((b_doMerge) && (b_conformalFinder == 0)) _trackManager.merge(); 00605 _trackManager.merge(); //Liuqg 00606 //if (b_conformalFinder != 0) _trackManager.setCurlerFlags(); 00607 00608 //...Salvage for dE/dx... 00609 //if (b_doAssociation) 00610 // _trackManager.salvageAssociateHits(allHits, b_associateSigma); 00611 } 00612 00613 //...Move a pivot... //move to the innermost hit, remove this step now 2005/10/17 zang shilei 00614 //_trackManager.movePivot(); 00615 00616 //...Save Panther tables... 00617 // _trackManager.checkNumberOfHits(); 00618 //if (b_sortMode == 0) _trackManager.sortTracksByQuality(); 00619 //else _trackManager.sortTracksByPt(); 00620 /*if (b_doMCAnalysis) { 00621 if (mcEvent()) { 00622 mcInformation(); 00623 _trackManager.saveMCTables(); 00624 } 00625 }*/ 00626 00627 if (b_tuple) FillTuple(); 00628 00629 //write Tds 00630 int t_tkStat = 2; 00631 if (!b_doConformalFinder && b_doCurlFinder) t_tkStat = 3;//FIXME 00632 StatusCode scTds = _trackManager.makeTds(trkcol, hitcol, t_tkStat,b_RungeKuttaCorrection,m_CalibFlag); 00633 if (scTds != StatusCode::SUCCESS) return( StatusCode::FAILURE); 00634 00635 //...T0 correction... 00636 if (b_doT0Determination) { 00637 _trackManager.determineT0(b_doT0Determination, b_nTracksForT0); 00638 if (b_tuple) t3_t0Rec = _trackManager.paraT0(); 00639 } 00640 } 00641 else if(b_RungeKuttaCorrection==1){ 00642 if (useESTime) { 00643 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol"); 00644 if (aevtimeCol && aevtimeCol->size() ) { 00645 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin(); 00646 t0_bes = (*iter_evt)->getTest(); 00647 t0Sta = (*iter_evt)->getStat(); 00648 }else{ 00649 log << MSG::WARNING << "Could not find EsTimeCol" << endreq; 00650 return StatusCode::SUCCESS; 00651 } 00652 } 00653 00654 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00655 if (!eventHeader) { 00656 log << MSG::FATAL << "Could not find Event Header" << endreq; 00657 return( StatusCode::FAILURE); 00658 } 00659 _nEvents = eventHeader->eventNumber(); 00660 if (b_tuple) std::cout << "TrkReco ... processing ev# " << _nEvents << std::endl; 00661 AList<TTrack> rktracks; 00662 int digiId; 00663 uint32_t getDigiFlag = 0; 00664 if(m_dropHot || m_combineTracking)getDigiFlag |= MdcRawDataProvider::b_dropHot; 00665 if(m_keepBadTdc) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc; 00666 if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch; 00667 MdcDigiVec mdcDigiVec = _rawDataProviderSvc->getMdcDigiVec(getDigiFlag); 00668 if (0 == mdcDigiVec.size()){ 00669 log << MSG::WARNING << " No hits in MdcDigiVec" << endreq; 00670 return StatusCode::SUCCESS; 00671 } 00672 MdcDigiVec::iterator iter1 = mdcDigiVec.begin(); 00673 MC_DIGI_SIZE = mdcDigiVec.size(); 00674 00675 digiId = 0; 00676 Identifier mdcId; 00677 int layerId; 00678 int wireId; 00679 00680 unsigned nt = MdcRecWirhitCol::getMdcRecWirhitCol()->size(); 00681 MdcRecWirhitCol::getMdcRecWirhitCol()->clear(); 00682 00683 for (;iter1 != mdcDigiVec.end(); iter1++, digiId++) { 00684 mdcId = (*iter1)->identify(); 00685 layerId = MdcID::layer(mdcId); 00686 wireId = MdcID::wire(mdcId); 00687 if (b_goodTrk && b_tuple) havedigi[layerId][wireId] = (*iter1)->getTrackIndex(); 00688 00689 MdcRec_wirhit mhit; 00690 00691 mhit.id = digiId; 00692 mhit.geo = _mdcGeomSvc->Wire(layerId,wireId); 00693 double tof; 00694 tof = 1.28 * mhit.geo->Lyr()->Radius()/299.8; 00695 mhit.tdc = RawDataUtil::MdcTime((*iter1)->getTimeChannel()); 00696 mhit.timechannel=(*iter1)->getTimeChannel(); 00697 mhit.tdc -= t0_bes; 00698 00699 _trackManager.sett0bes(t0_bes); 00700 mhit.adc = (*iter1)->getChargeChannel(); 00701 double timewalk=_mdcCalibFunSvc->getTimeWalk(layerId,mhit.adc); 00702 double T0 = _mdcCalibFunSvc->getT0(layerId,wireId); 00703 double drifttime = mhit.tdc-tof-timewalk-T0; 00704 double dist2 = _mdcCalibFunSvc->driftTimeToDist(drifttime,layerId, wireId, 2, 0); 00705 mhit.erddl = _mdcCalibFunSvc->getSigma(layerId, 2 , dist2, 0.0,0.0,0.0,mhit.adc); 00706 mhit.ddl = dist2/10.; 00707 mhit.ddr = mhit.ddl; 00708 mhit.erddl = mhit.erddl/10.; 00709 mhit.erddr = mhit.erddl; 00710 00711 mhit.lr = 2; 00712 mhit.stat = 0; 00713 mhit.stat = mhit.stat |= 1048576; 00714 mhit.stat = mhit.stat |= 2097152; 00715 mhit.stat = mhit.stat |= 4194304; 00716 mhit.stat = mhit.stat |= 1073741824; 00717 MdcRecWirhitCol::getMdcRecWirhitCol()->push_back(mhit); 00718 00719 if (b_tuple) { 00720 t10_tdc = mhit.tdc; 00721 t10_adc = mhit.adc; 00722 t10_drift = mhit.ddl; 00723 t10_dDrift = mhit.erddl; 00724 t10_lyrId = layerId; 00725 t10_localId = wireId; 00726 m_tuple10->write(); 00727 } 00728 } 00729 00730 unsigned nT0Reset = 0; 00731 00732 clear(); 00733 if (mdcDigiVec.size() > 2000){ 00734 log << MSG::WARNING << " Too many hits in MdcDigiVec" << endreq; 00735 return StatusCode::SUCCESS; 00736 } 00737 int counter=0; 00738 _cdc->update(b_doMCAnalysis); 00739 00740 unsigned mask = 0; 00741 if (! b_useAllHits) mask = WireHitFindingValid; 00742 const AList<TMDCWireHit> & axialHits = _cdc->axialHits(mask); 00743 const AList<TMDCWireHit> & stereoHits = _cdc->stereoHits(mask); 00744 const AList<TMDCWireHit> & allHits = _cdc->hits(mask); 00745 AList<TMLink> _allHits[3]; 00746 TConformalFinder0::conformalTransformationDriftCircle(ORIGIN, axialHits, _allHits[0]); 00747 TConformalFinder0::conformalTransformationDriftCircle(ORIGIN, stereoHits, _allHits[1]); 00748 _allHits[2].append(_allHits[0]); 00749 _allHits[2].append(_allHits[1]); 00750 00751 00752 SmartDataPtr<RecMdcTrackCol> mdcTracks(eventSvc(),EventModel::Recon::RecMdcTrackCol); 00753 if( ! mdcTracks ) 00754 { 00755 log << MSG::ERROR << "Unable to retrieve RecMdcTrackCol" << endreq; 00756 return StatusCode::FAILURE; 00757 } else { 00758 log << MSG::DEBUG << "RecMdcTrackCol retrieved of size "<< mdcTracks->size() << endreq; 00759 int ntrk=0; 00760 for(RecMdcTrackCol::iterator it=mdcTracks->begin(); it!=mdcTracks->end(); it++) 00761 {ntrk++; 00762 TRunge *r = new TRunge(**it); 00763 TTrack *t1 = new TTrack(*r); 00764 HitRefVec gothits = (*it)->getVecHits(); 00765 HitRefVec::iterator it_gothit = gothits.begin(); 00766 unsigned stat=(*it)->stat(); 00767 int nhit=0; 00768 for( ; it_gothit != gothits.end(); it_gothit++){ 00769 for(int i=0;i<_allHits[2].length();i++){ 00770 int lyrraw=_allHits[2][i]->wire()->layerId(); 00771 int wireraw=_allHits[2][i]->wire()->localId(); 00772 int g_layer = MdcID::layer((*it_gothit)->getMdcId()); 00773 int g_wire = MdcID::wire((*it_gothit)->getMdcId()); 00774 if(lyrraw==g_layer&&g_wire==wireraw){ 00775 nhit++; 00776 t1->append(*_allHits[2][i]); 00777 } 00778 } 00779 } 00780 TRunge *rr = new TRunge(*t1); 00781 TRunge *tt = new TRunge(*t1); 00782 int err=_rkfitter.fit(*rr); 00783 int nhits=rr->links().length(); 00784 int ndrop=0; 00785 int nmax=0; 00786 if(nhits<=10)nmax=0; 00787 if(nhits>10)nmax=(int)nhit*0.3; 00788 for(int ii=0;ii<nmax;ii++){ 00789 00790 ndrop=rr->DropWorst(); 00791 if(ndrop)err=_rkfitter.fit(*rr); 00792 if(err)break; 00793 } 00794 if(err==-2) counter++; 00795 if(m_CalibFlag==1) {//This is for Calibration 00796 tt->removeLinks(); 00797 tt->append(rr->links()); 00798 for(int i=0;i<43;i++){ 00799 err= _rkfitter.fit(*tt,0,i); 00800 } 00801 rr->removeLinks(); 00802 rr->append(tt->links()); 00803 TTrack *t =new TTrack(*rr); 00804 if(err==0){ 00805 rktracks.append(*t); 00806 t->setFinderType(100+stat); 00807 } 00808 } 00809 if(m_CalibFlag==0){ 00810 TTrack *t =new TTrack(*rr); 00811 if(err==0){ 00812 00813 t->setFinderType(100+stat); 00814 rktracks.append(*t); 00815 } 00816 } 00817 delete r ; 00818 delete t1; 00819 delete rr; 00820 delete tt; 00821 } 00822 } 00823 00824 _trackManager.append(rktracks); 00825 IDataManagerSvc *dataManSvc; 00826 DataObject *aTrackCol; 00827 DataObject *aRecHitCol; 00828 if(!m_combineTracking){ 00829 dataManSvc = dynamic_cast<IDataManagerSvc*> (eventSvc().get()); 00830 eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol); 00831 if(aTrackCol != NULL) { 00832 dataManSvc->clearSubTree("/Event/Recon/RecMdcTrackCol"); 00833 eventSvc()->unregisterObject("/Event/Recon/RecMdcTrackCol"); 00834 } 00835 eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aRecHitCol); 00836 if(aRecHitCol != NULL) { 00837 dataManSvc->clearSubTree("/Event/Recon/RecMdcHitCol"); 00838 eventSvc()->unregisterObject("/Event/Recon/RecMdcHitCol"); 00839 } 00840 } 00841 DataObject *aReconEvent; 00842 eventSvc()->findObject("/Event/Recon",aReconEvent); 00843 if(!aReconEvent) { 00844 ReconEvent* recevt = new ReconEvent; 00845 StatusCode sc = eventSvc()->registerObject("/Event/Recon",recevt ); 00846 if(sc!=StatusCode::SUCCESS) { 00847 log << MSG::FATAL << "Could not register ReconEvent" <<endreq; 00848 return( StatusCode::FAILURE); 00849 } 00850 } 00851 RecMdcTrackCol* trkcol; 00852 eventSvc()->findObject("/Event/Recon/RecMdcTrackCol",aTrackCol); 00853 if (aTrackCol) { 00854 trkcol = dynamic_cast<RecMdcTrackCol*> (aTrackCol); 00855 }else{ 00856 trkcol= new RecMdcTrackCol; 00857 sc = eventSvc()->registerObject(EventModel::Recon::RecMdcTrackCol, trkcol); 00858 if(!sc.isSuccess()) { 00859 log << MSG::FATAL << " Could not register RecMdcTrack collection" <<endreq; 00860 return StatusCode::FAILURE; 00861 } 00862 } 00863 RecMdcHitCol* hitcol; 00864 eventSvc()->findObject("/Event/Recon/RecMdcHitCol",aRecHitCol); 00865 if (aRecHitCol) { 00866 hitcol = dynamic_cast<RecMdcHitCol*> (aRecHitCol); 00867 }else{ 00868 hitcol= new RecMdcHitCol; 00869 sc = eventSvc()->registerObject(EventModel::Recon::RecMdcHitCol, hitcol); 00870 if(!sc.isSuccess()) { 00871 log << MSG::FATAL << " Could not register RecMdcHit collection" <<endreq; 00872 return StatusCode::FAILURE; 00873 } 00874 } 00875 if (b_tuple) FillTuple(); 00876 00877 int t_tkStat = 2; 00878 if (!b_doConformalFinder && b_doCurlFinder) t_tkStat = 3;//FIXME 00879 StatusCode scTds = _trackManager.makeTds(trkcol, hitcol, t_tkStat,b_RungeKuttaCorrection,m_CalibFlag); 00880 if (b_doT0Determination) { 00881 _trackManager.determineT0(b_doT0Determination, b_nTracksForT0); 00882 if (b_tuple) t3_t0Rec = _trackManager.paraT0(); 00883 } 00884 for (unsigned i = 0; i < 3; i++) { 00885 if (i == 2) 00886 HepAListDeleteAll(_allHits[i]); 00887 else 00888 _allHits[i].removeAll(); 00889 } 00890 00891 rktracks.removeAll(); 00892 } 00893 //...For debug... 00894 /*if (b_debugLevel) { 00895 std::cout << "TrkReco ... ev# " << _nEvents << " processed," 00896 << " #tracks found=" << _trackManager.allTracks().length() 00897 << ", #good tracks=" << _trackManager.tracks().length() 00898 << ", #2D tracks=" << _trackManager.tracks2D().length() 00899 << std::endl; 00900 if (b_debugLevel > 1) _trackManager.dump("eventSummary hits"); 00901 else _trackManager.dump("eventSummary"); 00902 }*/ 00903 00904 //TUpdater::update(); 00905 return StatusCode::SUCCESS; 00906 }
void TrkReco::fastClear | ( | void | ) |
clears TMDC information.
Definition at line 970 of file TrkReco.cxx.
References clear().
00970 { 00971 clear(); 00972 }
void TrkReco::FillTuple | ( | void | ) | [private] |
Definition at line 1249 of file TrkReco.cxx.
References _cdc, _nEvents, _trackManager, b_goodTrk, b_mcHit, b_mcPar, b_timeTest, b_tuple, cos(), BesTimer::elapsed(), havedigi, genRecEmupikp::i, Bes_Common::INFO, ganga-rec::j, MdcID::layer(), TMDC::layer(), m_timer, m_tuple, m_tuple2, m_tuple3, m_tuple31, m_tuple4, m_tuple5, m_tuple6, m_tuple7, m_tuple9, maxdDistance(), MC_DIGI_SIZE, msgSvc(), TMDCLayer::nWires(), TMDCLayer::offset(), phi0, pi, BesTimer::stop(), t0_bes, t0_sta, t0Sta, t2_chi2, t2_evtNo, t2_length, t2_length2, t2_mcpt, t2_mctheta, t2_ndf, t2_nDigi, t2_nHits, t2_nSegs, t2_radius, t3_evtNo, t3_finalLength, t3_goodLength, t3_length, t3_mcphi, t3_mcpid, t3_mcpt, t3_mcptot, t3_mct0, t3_mctheta, t3_nDigi, t3_t0, t3_t0Sta, t4_bz, t4_dDrift, t4_Dist, t4_drift, t4_fy, t4_fz, t4_localId, t4_LR, t4_lyrId, t4_mcDrift, t4_mcLR, t4_nHits, t4_phi, t4_pull, t4_tdc, t4_z, t5_drNeg, t5_drPos, t5_dzNeg, t5_dzPos, t5_ptotNeg, t5_ptotPos, t9_mctheta, t9_nLinks, t9_nSL, t9_times, t_bestMcNLayers, t_bestNLayers, t_chi2, t_dlmd, t_dphi, t_dpt, t_dptot, t_dr, t_dz, t_evtNo, t_gdNLayers, t_good_theta, t_length, t_length2, t_mcNLayers, t_mcphi, t_mcpt, t_mcptot, t_mcpz, t_mct0, t_mctheta, t_nCores, t_ndf, t_nDigi, t_nHits, t_nSegs, t_phi, t_pt, t_ptot, t_radius, t_t0, t_tanlmd, ti_eventTime, ti_evtNo, ti_nDigi, ti_nHits, ti_recTrkNum, TTrackManager::tracks(), tracks(), TTrackManager::tracks2D(), u_evtNo, u_length2, u_mcpt, u_mcptot, u_mct0, u_mctheta, u_nDigi, ut0_sta, ut_t0, MdcID::wire(), and x.
Referenced by execute().
01249 { 01250 MsgStream log(msgSvc(), name()); 01251 log << MSG::INFO << "fill Tuple()" << endreq; 01252 01254 AList<TTrack> tracks; 01255 AList<TTrack> tracks2D; 01256 tracks = _trackManager.tracks(); 01257 tracks2D = _trackManager.tracks2D(); 01258 //if(t3_t0Rec!=999. && fabs(t3_t0Rec + t0_bes - MC_EVENT_TIME) > 4) 01259 //cout<<"3Dtrack in manager: "<<tracks.length()<<endl; 01260 if(tracks.length()==0) cout<<"zslength: 3D length=0, and the 2D length is"<<tracks2D.length()<<endl; 01261 01263 if (b_timeTest && b_tuple) { 01264 m_timer[1]->stop(); 01265 ti_eventTime = m_timer[1]->elapsed(); 01266 ti_nDigi = MC_DIGI_SIZE; 01267 ti_recTrkNum = tracks.length(); 01268 ti_evtNo = _nEvents; 01269 for (unsigned i = 0; i < ti_recTrkNum; ++i) 01270 ti_nHits += tracks[i]->nLinks(); 01271 m_tuple7->write(); 01272 } 01273 01275 CLHEP::Hep3Vector MC_TRACK_VEC; 01276 CLHEP::HepLorentzVector MC_TRACK_LRZVEC; 01277 float MC_TRACK_NUM; 01278 double MC_EVENT_TIME; 01279 01280 int digiId; 01281 int num_par = 0; 01282 MC_EVENT_TIME = -1; 01283 if (b_mcPar) { 01284 SmartDataPtr<Event::McParticleCol> mcParticleCol(eventSvc(),"/Event/MC/McParticleCol"); 01285 if (mcParticleCol) { 01286 Event::McParticleCol::iterator iter_mc = mcParticleCol->begin(); 01287 digiId = 0; 01288 for (;iter_mc != mcParticleCol->end(); iter_mc++, digiId++) { 01289 if((*iter_mc)->statusFlags()==8320||(*iter_mc)->statusFlags()==128) { 01290 MC_EVENT_TIME = (*iter_mc)->initialFourMomentum().t(); 01291 break; 01292 } 01293 } 01294 //jialk bugcheck 01295 iter_mc = mcParticleCol->begin(); 01296 MC_TRACK_LRZVEC = (*iter_mc)->initialFourMomentum(); //particularly for 1 track events. 01297 MC_TRACK_VEC = (*iter_mc)->initialFourMomentum().vect(); 01298 MC_TRACK_NUM = mcParticleCol->size(); 01299 01300 #ifdef TRKRECO_DEBUG 01301 iter_mc = mcParticleCol->begin(); 01302 digiId = 0; 01303 for (;iter_mc != mcParticleCol->end(); iter_mc++, digiId++) { 01304 log << MSG::INFO << "MDC digit No: " << digiId << endreq; 01305 log << MSG::INFO 01306 << " particleId = " << (*iter_mc)->particleProperty() 01307 << " theta = " << (*iter_mc)->initialFourMomentum().theta() 01308 <<" phi= "<< (*iter_mc)->initialFourMomentum().phi() 01309 <<" px= "<< (*iter_mc)->initialFourMomentum().px() 01310 <<" py= "<< (*iter_mc)->initialFourMomentum().py() 01311 <<" pz= "<< (*iter_mc)->initialFourMomentum().pz() 01312 << endreq; 01313 } 01314 #endif 01315 digiId = 0; 01316 iter_mc = mcParticleCol->begin(); 01317 for (;iter_mc != mcParticleCol->end(); iter_mc++, digiId++) { 01318 CLHEP::HepLorentzVector LRZVEC = (*iter_mc)->initialFourMomentum(); 01319 CLHEP::Hep3Vector VEC = (*iter_mc)->initialFourMomentum().vect(); 01320 //staFlag = (*iter_mc)->statusFlags(); 01321 01322 t3_mctheta = LRZVEC.theta(); 01323 t3_mcphi = VEC.phi(); 01324 t3_mcptot = VEC.mag()/1000.; 01325 t3_mcpt = VEC.perp()/1000.; 01326 t3_mct0 = (*iter_mc)->initialFourMomentum().t(); 01327 t3_mcpid = (*iter_mc)->particleProperty(); 01328 t3_evtNo = _nEvents; 01329 if((t3_mcpid==211||t3_mcpid==-211||t3_mcpid==321)&&fabs(cos(t3_mctheta))<0.93) ++num_par; 01330 m_tuple3->write(); 01331 } 01332 } 01333 } 01334 01336 if (tracks.length()==0) { 01337 u_length2 = tracks2D.length(); 01338 u_mct0 = MC_EVENT_TIME; 01339 u_mcptot = MC_TRACK_VEC.mag()/1000.; 01340 u_mcpt = MC_TRACK_VEC.perp()/1000.; 01341 u_mctheta = MC_TRACK_LRZVEC.theta(); 01342 u_nDigi = MC_DIGI_SIZE; 01343 u_evtNo = _nEvents; 01344 ut0_sta = -1; 01345 ut_t0 = t0_bes; 01346 ut0_sta = t0Sta; 01347 m_tuple6->write(); //unrec...tracks 01348 } 01349 01350 //---Pos and Neg 01351 float dDot = 2; 01352 int flagi = -1, flagj = -1; 01353 HepVector3D ppp1, ppp2; 01354 float pppdDot = 2; 01355 for (unsigned i = 0; i < tracks.length(); i++){ 01356 if(tracks.length()<2) break; 01357 if(tracks[i]->charge()>0) { 01358 ppp1 = tracks[i]->p().unit(); 01359 for (unsigned j = 0; j < tracks.length(); j++){ 01360 if (tracks[j]->charge()<0) { 01361 ppp2 = tracks[j]->p().unit(); 01362 pppdDot = ppp1.dot(ppp2); 01363 if (pppdDot<dDot) { 01364 flagi = i; 01365 flagj = j; 01366 dDot = pppdDot; 01367 } 01368 } 01369 } 01370 } 01371 } 01372 if (flagi != -1 && flagj != -1 && dDot < 0) { 01373 t5_ptotPos = tracks[flagi]->ptot(); 01374 t5_ptotNeg = tracks[flagj]->ptot(); 01375 t5_drPos = tracks[flagi]->helix().dr(); 01376 t5_drNeg = tracks[flagj]->helix().dr(); 01377 t5_dzPos = tracks[flagi]->helix().dz(); 01378 t5_dzNeg = tracks[flagj]->helix().dz(); 01379 m_tuple5->write(); 01380 } //Pos and Neg...back on back 01381 01382 unsigned nGood = 0; 01383 for (unsigned i = 0; i < tracks.length(); i++){ 01384 for(unsigned k = 0; k < tracks[i]->links().length(); k++){ 01385 t4_Dist = tracks[i]->links()[k]->distance(); //_onTrack - _onWire 01386 t4_drift = tracks[i]->links()[k]->drift(); //drift updated in THelixFitter. 01387 t4_dDrift= tracks[i]->links()[k]->dDrift(); //dDrift updated in THelixFitter. 01388 t4_pull = tracks[i]->links()[k]->pull(); 01389 t4_LR = 2; //initial 01390 t4_LR = tracks[i]->links()[k]->leftRight(); 01391 if (t4_LR == 0) t4_LR = -1; 01392 t4_lyrId = tracks[i]->links()[k]->wire()->layerId(); 01393 t4_localId = tracks[i]->links()[k]->wire()->localId(); 01394 t4_tdc = tracks[i]->links()[k]->hit()->reccdc()->tdc; 01395 t4_z = tracks[i]->links()[k]->positionOnTrack().z(); 01396 t4_bz = tracks[i]->links()[k]->wire()->backwardPosition().z(); 01397 t4_fz = tracks[i]->links()[k]->wire()->forwardPosition().z(); 01398 t4_fy = tracks[i]->links()[k]->wire()->forwardPosition().y(); 01399 t4_nHits = tracks[i]->links().length(); 01400 unsigned lyrID = tracks[i]->links()[k]->wire()->layerId(); 01401 float phi0 = _cdc->layer(lyrID)->offset(); 01402 int nWir = (int) _cdc->layer(lyrID)->nWires(); 01403 t4_phi = phi0 + t4_localId*2*pi/nWir; 01404 if(t4_phi<0) t4_phi+=2*pi; 01405 01406 if (b_mcHit) { 01407 SmartDataPtr<Event::MdcMcHitCol> mcMdcMcHitCol(eventSvc(),"/Event/MC/MdcMcHitCol"); 01408 if (mcMdcMcHitCol) { 01409 Event::MdcMcHitCol::iterator iter_mchit1 = mcMdcMcHitCol->begin(); 01410 digiId=0; 01411 for (;iter_mchit1 != mcMdcMcHitCol->end(); iter_mchit1++, digiId++) { 01412 const Identifier ident = (*iter_mchit1)->identify(); 01413 if(MdcID::layer(ident) != t4_lyrId) continue; 01414 if(MdcID::wire(ident)==t4_localId) { 01415 t4_mcDrift = (*iter_mchit1)->getDriftDistance(); //drift in MC. 01416 t4_mcLR = (*iter_mchit1)->getPositionFlag(); 01417 if (t4_mcLR == 0) t4_mcLR = -1; 01418 break; 01419 } 01420 } 01421 } 01422 } 01423 //cout<<" lyrId, localId: "<<t4_lyrId<<" "<<t4_localId<<endl; 01424 //cout<<" tdc: "<<t4_tdc<<" mcDrift: " << t4_mcDrift<<" Drift: "<<t4_drift<<" t4_Dist: "<<t4_Dist<<endl; 01425 m_tuple4->write(); //rec Hits 01426 } 01427 01428 unsigned segSize = tracks[i]->segments().length(); 01429 for(unsigned kk = 0; kk < segSize; ++kk) { 01430 unsigned segLength = tracks[i]->segments()[kk]->links().length(); 01431 AList<TMLink> ll = tracks[i]->segments()[kk]->links(); 01432 int nSmall = 0; 01433 for(unsigned nn = 0; nn < segLength; ++nn) { 01434 double tmpX = ll[nn]->positionD().x(); 01435 double tmpY = ll[nn]->positionD().y(); 01436 double tmpA = tracks[i]->segments()[kk]->lineTsf().x(); 01437 double tmpB = tracks[i]->segments()[kk]->lineTsf().y(); 01438 double tmpC = tracks[i]->segments()[kk]->lineTsf().z(); 01439 double dis = fabs(tmpA * tmpX + tmpB * tmpY + tmpC) / sqrt(tmpA * tmpA + tmpB * tmpB); 01440 double idealDis = maxdDistance(ll[nn]); 01441 if(fabs(dis-ll[nn]->cDrift())/idealDis<0.001 && nSmall<2) { 01442 ++nSmall; 01443 continue; 01444 } 01445 t9_times += fabs(dis-ll[nn]->cDrift())/idealDis; 01446 } 01447 t9_nSL = ll[0]->wire()->superLayerId(); 01448 t9_nLinks = segLength; 01449 t9_mctheta = MC_TRACK_LRZVEC.theta(); 01450 t9_times = t9_times / (t9_nLinks - nSmall); 01451 m_tuple9->write(); //seg info 01452 } 01453 01454 t_mcphi = MC_TRACK_VEC.phi(); 01455 t_mctheta = MC_TRACK_LRZVEC.theta(); 01456 t_mcptot = MC_TRACK_VEC.mag()/1000.; 01457 t_mcpt = MC_TRACK_VEC.perp()/1000.; 01458 t_mcpz = MC_TRACK_LRZVEC.pz()/1000.; 01459 t_mct0 = MC_EVENT_TIME; 01460 t_nDigi = MC_DIGI_SIZE; 01461 01462 t_dr = tracks[i]->helix().dr(); 01463 t_dz = tracks[i]->helix().dz(); 01464 t_pt = tracks[i]->pt(); 01465 t_ptot = tracks[i]->ptot(); 01466 t_tanlmd = tracks[i]->helix().tanl(); 01467 t_phi = tracks[i]->helix().phi0(); 01468 t_chi2 = tracks[i]->chi2(); 01469 t_nHits = tracks[i]->nLinks(); 01470 t_nCores = tracks[i]->nCores(); 01471 t_nSegs = tracks[i]->segments().length(); 01472 t_ndf = tracks[i]->ndf(); 01473 t_radius = tracks[i]->radius(); 01474 t_evtNo = _nEvents; 01475 t_length = tracks.length(); 01476 t_length2 = tracks2D.length(); 01477 01478 t_dpt = tracks[i]->pt() - t_mcpt; 01479 t_dptot = tracks[i]->ptot() - t_mcptot; 01480 t_dlmd = atan(tracks[i]->helix().tanl()) - (pi/2 - t_mctheta); 01481 t_dphi = tracks[i]->helix().phi0() - t_mcphi; 01482 01483 t_t0 = t0_bes; 01484 t0_sta = t0Sta; 01485 01486 if (b_mcPar) { 01487 if (b_goodTrk && b_tuple) { 01488 unsigned mcTrackSize = MC_TRACK_NUM; 01489 unsigned recTrackSize = tracks.length(); 01490 const unsigned matchSize = 20; 01491 // if(recTrackSize>40 || mcTrackSize>40) matchSize = 50; 01492 01493 int mLayers[matchSize]; 01494 for (int ii=0; ii<matchSize; ii++) 01495 mLayers[ii] = 0; 01496 for(int jj = 0; jj < 43; ++jj) { 01497 int tmp[matchSize]; 01498 for(unsigned kk = 0; kk < matchSize; ++kk) 01499 tmp[kk] = 0; 01500 for(int kk = 0; kk < 288; ++kk) { 01501 if (havedigi[jj][kk]<0) continue; 01502 tmp[havedigi[jj][kk]] = 1; 01503 } 01504 for(int kk = 0; kk < matchSize; ++kk) 01505 if(tmp[kk] == 1) ++mLayers[kk]; 01506 } 01507 01508 unsigned trackSize = tracks[i]->nLinks(); 01509 int trkIndex[43]; 01510 int nLayers[matchSize]; 01511 for (int j = 0; j < 43; ++j) 01512 trkIndex[j] = -99; 01513 for (int j = 0; j < matchSize; ++j) 01514 nLayers[j] = 0; 01515 01516 for (int j = 0; j < trackSize; ++j) { 01517 unsigned lId = tracks[i]->links()[j]->wire()->layerId(); 01518 unsigned loId = tracks[i]->links()[j]->wire()->localId(); 01519 if (havedigi[lId][loId] >= 0) trkIndex[lId] = havedigi[lId][loId]; 01520 } 01521 for (int j = 0; j < 43; ++j) 01522 if (trkIndex[j] >= 0) ++nLayers[trkIndex[j]]; 01523 01524 for (int j = 0; j < matchSize; ++j) { 01525 //cout<<"nLayers: "<<nLayers[j]<<" mLayers:"<<mLayers[j]<<endl; 01526 if (nLayers[j]==0) continue; 01527 if ((float)nLayers[j]/(float)mLayers[j] > 0.51) { 01528 t_gdNLayers = nLayers[j]; 01529 t_mcNLayers = mLayers[j]; 01530 t_good_theta = MC_TRACK_LRZVEC.theta(); 01531 ++nGood; 01532 break; 01533 } 01534 } 01535 if (t_good_theta == 0.) { 01536 int tmpLayers = 0; 01537 int tmpi = -1; 01538 for (int j = 0; j < matchSize; ++j) { 01539 if (nLayers[j]==0) continue; 01540 if (nLayers[j] > tmpLayers) { 01541 tmpLayers = nLayers[j]; 01542 tmpi = j; 01543 } 01544 } 01545 if (tmpi != -1) { 01546 t_bestNLayers = nLayers[tmpi]; 01547 t_bestMcNLayers = mLayers[tmpi]; 01548 } 01549 else { 01550 t_bestNLayers = -1; 01551 t_bestMcNLayers = -1; 01552 } 01553 } 01554 else { 01555 t_bestNLayers = -2; 01556 t_bestMcNLayers = -2; 01557 } 01558 } //if b_goodTrk 01559 } 01560 m_tuple->write(); //rec track 01561 } 01562 01563 t3_mctheta = MC_TRACK_LRZVEC.theta(); 01564 t3_mcptot = MC_TRACK_VEC.mag()/1000.; 01565 t3_mcpt = MC_TRACK_VEC.perp()/1000.; 01566 01567 t3_nDigi = MC_DIGI_SIZE; 01568 t3_t0 = t0_bes; 01569 t3_t0Sta = t0Sta; 01570 t3_goodLength = nGood; 01571 t3_length = tracks.length(); 01572 t3_finalLength = num_par; 01573 m_tuple31->write(); //raw... 01574 01575 for (unsigned i = 0; i < tracks2D.length(); i++) { 01576 t2_mctheta = MC_TRACK_LRZVEC.theta(); 01577 t2_mcpt = MC_TRACK_VEC.perp()/1000.; 01578 01579 t2_nDigi = MC_DIGI_SIZE; 01580 t2_nHits = tracks2D[i]->nLinks(); 01581 t2_nSegs = tracks2D[i]->segments().length(); 01582 t2_chi2 = tracks2D[i]->chi2(); 01583 t2_ndf = tracks2D[i]->ndf(); 01584 t2_radius = tracks2D[i]->radius(); 01585 t2_evtNo = _nEvents; 01586 t2_length = tracks.length(); 01587 t2_length2 = tracks2D.length(); 01588 m_tuple2->write(); //unused 2D tracks 01589 } 01590 }
StatusCode TrkReco::finalize | ( | ) |
Definition at line 284 of file TrkReco.cxx.
References _cdc, _confFinder, _curlFinder, b_doConformalFinder, b_doCurlFinder, b_timeTest, b_tuple, TCurlFinder::clear(), TFinderBase::clear(), TMDC::fastClear(), m_timersvc, and IBesTimerSvc::print().
00284 { 00285 00286 if (b_timeTest && b_tuple) m_timersvc->print(); 00287 00288 //...Clear TrkReco objects... 00289 if (_cdc) _cdc->fastClear(); 00290 if (b_doConformalFinder && _confFinder) _confFinder->clear(); 00291 if (b_doCurlFinder && _curlFinder) _curlFinder->clear(); 00292 00293 //...Summary... 00294 // dump("summary"); 00295 00296 //...Delete TrkReco objects... 00297 if (_confFinder) delete _confFinder; 00298 if (_curlFinder) delete _curlFinder; 00299 00300 return StatusCode::SUCCESS; 00301 }
StatusCode TrkReco::initialize | ( | ) |
Definition at line 99 of file TrkReco.cxx.
References _confFinder, _curlFinder, _mdcCalibFunSvc, _rawDataProviderSvc, _trackManager, IBesTimerSvc::addItem(), b_conformalFinder, b_conformalFittingCorrections, b_conformalFittingFlag, b_conformalFraction, b_conformalMaxSigma, b_conformalMinNCores, b_conformalMinNLinksForSegment, b_conformalMinNSegments, b_conformalPerfectSegmentFinding, b_conformalSalvageLoadWidth, b_conformalStereoChisq3, b_conformalStereoChisq4, b_conformalStereoLoadWidth, b_conformalStereoMaxSigma, b_conformalStereoMode, b_conformalStereoSzLinkDistance, b_conformalStereoSzSegmentDistance, b_conformalStereoZ3, b_conformalStereoZ4, b_debugLevel, b_doConformalFastFinder, b_doConformalFinderCosmic, b_doConformalFinderStereo, b_doConformalSlowFinder, b_doSalvage, b_fittingFlag, b_helixFitterChisqMax, b_momentumCut, b_salvageLevel, b_test, b_timeTest, b_tuple, bad_distance_for_salvage, curl_version, TTrackManager::debugLevel(), TFinderBase::debugLevel(), determine_one_track, TFinderBase::doSalvage(), TFinderBase::doStereo(), Bes_Common::FATAL, TTrackManager::fittingFlag(), good_distance_for_salvage, Bes_Common::INFO, InitTuple(), m_timer, m_timersvc, mask_distance, TTrackManager::maxMomentum(), merge_exe, merge_ratio, merge_z_diff, min_fullwire, MIN_RADIUS_OF_STRANGE_TRACK, min_salvage, min_segment, min_sequence, min_svd_electrons, minimum_2DTrackLength, minimum_3DTrackLength, minimum_closeHitsLength, minimum_seedLength, msgSvc(), on_correction, output_2dtracks, BesTimer::propName(), range_for_axial_last2d_search, range_for_axial_search, range_for_stereo1, range_for_stereo2, range_for_stereo3, range_for_stereo4, range_for_stereo5, range_for_stereo6, range_for_stereo_last2d_search, range_for_stereo_search, ratio_used_wire, selector_max_impact, selector_max_sigma, selector_replace_dz, selector_strange_pz, stereo_2dfind, superlayer_for_stereo_search, svd_reconstruction, trace2d_distance, trace2d_first_distance, trace3d_distance, TrkRecoHelixFitterChisqMax, TrkRecoTest, ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK, Bes_Common::WARNING, z_cut, and z_diff_for_last_attend.
00099 { 00100 MsgStream log(msgSvc(), name()); 00101 log << MSG::INFO << "in initialize()" << endreq; 00102 00103 StatusCode sc; 00104 00106 IRawDataProviderSvc* irawDataProviderSvc; 00107 sc = service ("RawDataProviderSvc", irawDataProviderSvc); 00108 _rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*> (irawDataProviderSvc); 00109 if ( sc.isFailure() ){ 00110 log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq; 00111 return StatusCode::FAILURE; 00112 } 00113 00115 // IMdcGeomSvc* imdcGeomSvc; 00116 // sc = service("MdcGeomSvc", imdcGeomSvc); 00117 // _mdcGeomSvc = dynamic_cast<MdcGeomSvc*> (imdcGeomSvc); 00118 // if (sc.isFailure()) { 00119 // return( StatusCode::FAILURE); 00120 // } 00121 00123 IMdcCalibFunSvc* imdcCalibSvc; 00124 sc = service ("MdcCalibFunSvc",imdcCalibSvc); 00125 _mdcCalibFunSvc = dynamic_cast<MdcCalibFunSvc*> (imdcCalibSvc); 00126 if ( sc.isFailure() ){ 00127 log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endreq; 00128 } 00129 00131 if (b_tuple) InitTuple(); 00132 00133 #ifdef TRKRECO_DEBUG 00134 b_debugLevel = 2; 00135 #endif 00136 00137 //...Create TMDC... 00138 // _cdc = cdcInit(); 00139 00140 //...TrkReco... 00141 TrkRecoHelixFitterChisqMax = b_helixFitterChisqMax; 00142 00143 //...Create rphi finder... 00144 /* _perfectFinder = new TPerfectFinder(b_perfectFitting, 00145 b_conformalMaxSigma, 00146 b_conformalStereoMaxSigma, 00147 b_conformalFittingCorrections); 00148 */ 00149 if ((! _confFinder) && (b_conformalFinder == 0)) { 00150 _confFinder = new TConformalFinder0(b_conformalMaxSigma, 00151 b_conformalFraction, 00152 b_conformalStereoZ3, 00153 b_conformalStereoZ4, 00154 b_conformalStereoChisq3, 00155 b_conformalStereoChisq4, 00156 b_conformalStereoMaxSigma, 00157 b_conformalFittingCorrections, 00158 b_salvageLevel, 00159 b_doConformalFinderCosmic); 00160 } 00161 else if (! _confFinder) { 00162 _confFinder = new TConformalFinder(b_doConformalFastFinder, 00163 b_doConformalSlowFinder, 00164 b_conformalPerfectSegmentFinding, 00165 b_conformalMaxSigma, 00166 b_conformalStereoMaxSigma, 00167 b_salvageLevel, 00168 b_conformalMinNLinksForSegment, 00169 b_conformalMinNCores, 00170 b_conformalMinNSegments, 00171 b_conformalSalvageLoadWidth, 00172 b_conformalStereoMode, 00173 b_conformalStereoLoadWidth, 00174 b_conformalStereoSzSegmentDistance, 00175 b_conformalStereoSzLinkDistance, 00176 b_conformalFittingFlag); 00177 } 00178 _confFinder->debugLevel(b_debugLevel); 00179 _confFinder->doStereo(b_doConformalFinderStereo); 00180 00181 //...Salvage flag is ignored in new conf. finder... 00182 if (b_doSalvage == 2) _confFinder->doSalvage(true); 00183 00184 //...Create curl finder... 00185 if (! _curlFinder) 00186 _curlFinder = new TCurlFinder((unsigned)min_segment, 00187 (unsigned)min_salvage, 00188 bad_distance_for_salvage, 00189 good_distance_for_salvage, 00190 (unsigned)min_sequence, 00191 (unsigned)min_fullwire, 00192 range_for_axial_search, 00193 range_for_stereo_search, 00194 (unsigned)superlayer_for_stereo_search, 00195 range_for_axial_last2d_search, 00196 range_for_stereo_last2d_search, 00197 trace2d_distance, 00198 trace2d_first_distance, 00199 trace3d_distance, 00200 (unsigned)determine_one_track, 00201 selector_max_impact, 00202 selector_max_sigma, 00203 selector_strange_pz, 00204 selector_replace_dz, 00205 (unsigned)stereo_2dfind, 00206 (unsigned)merge_exe, 00207 merge_ratio, 00208 merge_z_diff, 00209 mask_distance, 00210 ratio_used_wire, 00211 range_for_stereo1, 00212 range_for_stereo2, 00213 range_for_stereo3, 00214 range_for_stereo4, 00215 range_for_stereo5, 00216 range_for_stereo6, 00217 z_cut, 00218 z_diff_for_last_attend, 00219 (unsigned)svd_reconstruction, 00220 min_svd_electrons, 00221 (unsigned)on_correction, 00222 (unsigned)output_2dtracks, 00223 (unsigned)curl_version, 00224 //jialk 00225 minimum_seedLength, 00226 minimum_2DTrackLength, 00227 minimum_3DTrackLength, 00228 minimum_closeHitsLength, 00229 MIN_RADIUS_OF_STRANGE_TRACK, 00230 ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK); 00231 _curlFinder->debugLevel(b_debugLevel); 00232 00233 //...Track manager setup... 00234 _trackManager.maxMomentum(b_momentumCut); 00235 _trackManager.debugLevel(b_debugLevel); 00236 _trackManager.fittingFlag(b_fittingFlag); 00237 00238 //...Initialize... 00239 //zsl TUpdater::initialize(); 00240 00241 //...For debug... 00242 // dump("parameter"); 00243 00244 TrkRecoTest = b_test; 00245 00246 if (b_timeTest && b_tuple) { 00247 StatusCode sc = service( "BesTimerSvc", m_timersvc); 00248 if( sc.isFailure() ) { 00249 log << MSG::WARNING << " Unable to locate BesTimerSvc" << endreq; 00250 return StatusCode::FAILURE; 00251 } 00252 m_timer[1] = m_timersvc->addItem("Execution"); 00253 m_timer[1]->propName("nExecution"); 00254 } 00255 00256 return StatusCode::SUCCESS; 00257 }
void TrkReco::initPara | ( | void | ) | [private] |
initiate Parameters
Definition at line 992 of file TrkReco.cxx.
References _rkfitter, b_associateSigma, b_cdcVersion, b_conformalFinder, b_conformalFittingCorrections, b_conformalFittingFlag, b_conformalFraction, b_conformalMaxSigma, b_conformalMinNCores, b_conformalMinNLinksForSegment, b_conformalMinNSegments, b_conformalPerfectSegmentFinding, b_conformalSalvageLoadWidth, b_conformalStereoChisq3, b_conformalStereoChisq4, b_conformalStereoLoadWidth, b_conformalStereoMaxSigma, b_conformalStereoMode, b_conformalStereoSzLinkDistance, b_conformalStereoSzSegmentDistance, b_conformalStereoZ3, b_conformalStereoZ4, b_debugLevel, b_doAssociation, b_doConformalFastFinder, b_doConformalFinder, b_doConformalFinderCosmic, b_doConformalFinderStereo, b_doConformalSlowFinder, b_doCurlFinder, b_doMCAnalysis, b_doMerge, b_doPerfectFinder, b_doSalvage, b_doT0Determination, b_doT0Reset, b_fittingFlag, b_fudgeFactor, b_goodTrk, b_helixFitterChisqMax, b_mcHit, b_mcPar, b_momentumCut, b_nT0ResetMax, b_nTracksForT0, b_perfectFitting, b_RungeKuttaCorrection, b_salvageLevel, b_sortMode, b_test, b_timeTest, b_tuple, b_useAllHits, bad_distance_for_salvage, curl_version, determine_one_track, good_distance_for_salvage, m_CalibFlag, m_combineTracking, m_dropHot, m_keepBadTdc, m_keepUnmatch, mask_distance, merge_exe, merge_ratio, merge_z_diff, min_fullwire, MIN_RADIUS_OF_STRANGE_TRACK, min_salvage, min_segment, min_sequence, minimum_2DTrackLength, minimum_3DTrackLength, minimum_closeHitsLength, minimum_seedLength, on_correction, output_2dtracks, range_for_axial_last2d_search, range_for_axial_search, range_for_stereo1, range_for_stereo2, range_for_stereo3, range_for_stereo4, range_for_stereo5, range_for_stereo6, range_for_stereo_last2d_search, range_for_stereo_search, ratio_used_wire, selector_max_impact, selector_max_sigma, selector_replace_dz, selector_strange_pz, TRungeFitter::setBesFromGdml(), stereo_2dfind, superlayer_for_stereo_search, trace2d_distance, trace2d_first_distance, trace3d_distance, ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK, useESTime, z_cut, and z_diff_for_last_attend.
Referenced by TrkReco().
00992 { 00993 _rkfitter.setBesFromGdml(); 00994 declareProperty("mcPar", b_mcPar = 0); 00995 declareProperty("mcHit", b_mcHit = 0); 00996 declareProperty("tuple", b_tuple = 0); 00997 declareProperty("goodTrk", b_goodTrk = 0); 00998 declareProperty("timeTest", b_timeTest = 0); 00999 01000 declareProperty("cdcVersion", b_cdcVersion = 1.0); 01001 declareProperty("fudgeFactor", b_fudgeFactor = 1.0); 01002 01003 declareProperty("useESTime", useESTime = 1.0); 01004 01005 declareProperty("debugLevel", b_debugLevel = 0); 01006 declareProperty("useAllHits", b_useAllHits = 0); 01007 declareProperty("doT0Reset", b_doT0Reset = 0); 01008 declareProperty("nT0ResetMax", b_nT0ResetMax = 1); 01009 declareProperty("doMCAnalysis", b_doMCAnalysis = 1); 01010 declareProperty("helixFitterChisqMax", b_helixFitterChisqMax = 0.); 01011 01012 declareProperty("RungeKuttaCorrection", b_RungeKuttaCorrection = 0); 01013 declareProperty("doPerfectFinder", b_doPerfectFinder = 0); 01014 declareProperty("perfectFitting", b_perfectFitting = 0); 01015 01016 declareProperty("conformalFinder", b_conformalFinder = 1); 01017 declareProperty("doConformalFinder", b_doConformalFinder = 0); 01018 declareProperty("doConformalFastFinder", b_doConformalFastFinder = 1); 01019 declareProperty("doConformalSlowFinder", b_doConformalSlowFinder = 1); 01020 declareProperty("conformalPerfectSegmentFinding", b_conformalPerfectSegmentFinding = 0); 01021 declareProperty("conformalFittingFlag", b_conformalFittingFlag = 4); //1: sag 2: propagation 4: tof 8: freeT0 01022 declareProperty("conformalMaxSigma", b_conformalMaxSigma = 30.); 01023 declareProperty("conformalMinNLinksForSegment", b_conformalMinNLinksForSegment = 2); 01024 declareProperty("conformalMinNCores", b_conformalMinNCores = 2); //min core for a seg 01025 declareProperty("conformalMinNSegments", b_conformalMinNSegments = 2); //min seg for trk, default: 3 01026 declareProperty("salvageLevel", b_salvageLevel = 30.); 01027 declareProperty("conformalSalvageLoadWidth", b_conformalSalvageLoadWidth = 1); 01028 declareProperty("conformalStereoMode", b_conformalStereoMode = 1); 01029 declareProperty("conformalStereoLoadWidth", b_conformalStereoLoadWidth = 5); 01030 declareProperty("conformalStereoMaxSigma", b_conformalStereoMaxSigma = 30.); 01031 declareProperty("conformalStereoSzSegmentDistance", b_conformalStereoSzSegmentDistance = 10.); 01032 declareProperty("conformalStereoSzLinkDistance", b_conformalStereoSzLinkDistance = 15.); 01033 01034 declareProperty("doConformalFinderStereo", b_doConformalFinderStereo = 1); //cosmic, use stereo 01035 declareProperty("doConformalFinderCosmic", b_doConformalFinderCosmic = 0); 01036 declareProperty("conformalFraction", b_conformalFraction = 0.7); //cores fraction in trk 01037 declareProperty("conformalStereoZ3", b_conformalStereoZ3 = 20.); 01038 declareProperty("conformalStereoZ4", b_conformalStereoZ4 = 20.); 01039 declareProperty("conformalStereoChisq3", b_conformalStereoChisq3 = 30.); 01040 declareProperty("conformalStereoChisq4", b_conformalStereoChisq4 = 30.); 01041 declareProperty("conformalFittingCorrections", b_conformalFittingCorrections = 0); 01042 01043 declareProperty("doCurlFinder", b_doCurlFinder = 1); //CurlFinder on: 1 off: 0 01044 declareProperty("doSalvage", b_doSalvage = 2); 01045 declareProperty("doMerge", b_doMerge = 0); 01046 declareProperty("momentumCut", b_momentumCut = 0.0); 01047 declareProperty("doT0Determination", b_doT0Determination = 7); 01048 declareProperty("nTracksForT0", b_nTracksForT0 = 2); 01049 declareProperty("sortMode", b_sortMode = 0); 01050 declareProperty("test", b_test = 0); 01051 declareProperty("fittingFlag", b_fittingFlag = 0); 01052 declareProperty("doAssociation", b_doAssociation = 1); 01053 declareProperty("associateSigma", b_associateSigma = 60); 01054 01055 declareProperty("dropHot", m_dropHot= 0);//jialk 20090624 01056 declareProperty("combineTracking",m_combineTracking=0); 01057 declareProperty("keepBadTdc",m_keepBadTdc=0); 01058 declareProperty("keepUnmatch",m_keepUnmatch=0); 01059 01060 declareProperty("CalibFlag",m_CalibFlag=0); 01061 // For Curl Finder --> 01062 declareProperty("min_segment", min_segment = 5); //min links for a segment 01063 declareProperty("min_salvage", min_salvage = 10); //salvage while trk.links < min 01064 declareProperty("bad_distance_for_salvage", bad_distance_for_salvage = 1.0); 01065 declareProperty("good_distance_for_salvage", good_distance_for_salvage = 0.2); 01066 declareProperty("min_sequence", min_sequence = 6); 01067 declareProperty("min_fullwire", min_fullwire = 5); //Belle: 7 01068 declareProperty("range_for_axial_search", range_for_axial_search = 1.5); 01069 declareProperty("range_for_stereo_search", range_for_stereo_search = 2.5); 01070 declareProperty("superlayer_for_stereo_search", superlayer_for_stereo_search = 3); 01071 declareProperty("range_for_axial_last2d_search", range_for_axial_last2d_search = 1.5); 01072 declareProperty("range_for_stereo_last2d_search", range_for_stereo_last2d_search = 2.0); 01073 declareProperty("trace2d_distance", trace2d_distance = 35.0); 01074 declareProperty("trace2d_first_distance", trace2d_first_distance = 0.5); 01075 declareProperty("trace3d_distance", trace3d_distance = 30.0); 01076 declareProperty("determine_one_track", determine_one_track = 0); 01077 declareProperty("selector_max_impact", selector_max_impact = 4.0); 01078 declareProperty("selector_max_sigma", selector_max_sigma = 36.0); 01079 declareProperty("selector_strange_pz", selector_strange_pz = 10.0); 01080 declareProperty("selector_replace_dz", selector_replace_dz = 15.0); 01081 declareProperty("stereo_2dfind", stereo_2dfind = 0); 01082 declareProperty("merge_exe", merge_exe = 1); 01083 declareProperty("merge_ratio", merge_ratio = 0.1); 01084 declareProperty("merge_z_diff", merge_z_diff = 10.0); 01085 declareProperty("mask_distance", mask_distance = 0.5); 01086 declareProperty("ratio_used_wire", ratio_used_wire = 0.3); 01087 declareProperty("range_for_stereo1", range_for_stereo1 = 2.4); 01088 declareProperty("range_for_stereo2", range_for_stereo2 = 2.7); 01089 declareProperty("range_for_stereo3", range_for_stereo3 = 2.9); 01090 declareProperty("range_for_stereo4", range_for_stereo4 = 3.4); 01091 declareProperty("range_for_stereo5", range_for_stereo5 = 4.1); 01092 declareProperty("range_for_stereo6", range_for_stereo6 = 5.0); //Liuqg 01093 declareProperty("z_cut", z_cut = 50.0); 01094 declareProperty("z_diff_for_last_attend", z_diff_for_last_attend = 1.5); 01095 declareProperty("on_correction", on_correction = 4); //1 sag, 2 propagation, 4 tof. definition changed in BES 01096 declareProperty("output_2dtracks", output_2dtracks = 1); //fill 2D track 01097 declareProperty("curl_version", curl_version = 0); 01098 //jialk 01099 declareProperty("minimum_seedLength", minimum_seedLength = 5); 01100 declareProperty("minimum_2DTrackLength", minimum_2DTrackLength = 7); 01101 declareProperty("minimum_3DTrackLength", minimum_3DTrackLength = 10); 01102 declareProperty("minimum_closeHitsLength", minimum_closeHitsLength = 5); 01103 declareProperty("MIN_RADIUS_OF_STRANGE_TRACK",MIN_RADIUS_OF_STRANGE_TRACK = 50); 01104 declareProperty("ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK",ULTIMATE_MIN_RADIUS_OF_STRANGE_TRACK = 5); 01105 // <-- For Curl Finder 01106 }
void TrkReco::InitTuple | ( | void | ) | [private] |
initiate and fill Tuple
Definition at line 1109 of file TrkReco.cxx.
References b_timeTest, b_tuple, m_tuple, m_tuple10, m_tuple2, m_tuple3, m_tuple31, m_tuple4, m_tuple5, m_tuple6, m_tuple7, m_tuple9, ntupleSvc(), t0_sta, t10_adc, t10_dDrift, t10_drift, t10_localId, t10_lyrId, t10_tdc, t2_chi2, t2_evtNo, t2_length, t2_length2, t2_mcpt, t2_mctheta, t2_ndf, t2_nDigi, t2_nHits, t2_nSegs, t2_radius, t3_evtNo, t3_finalLength, t3_goodLength, t3_length, t3_mcphi, t3_mcpid, t3_mcpt, t3_mcptot, t3_mct0, t3_mctheta, t3_nDigi, t3_t0, t3_t0Rec, t3_t0Sta, t4_bz, t4_dDrift, t4_Dist, t4_drift, t4_fy, t4_fz, t4_localId, t4_LR, t4_lyrId, t4_mcDrift, t4_mcLR, t4_nHits, t4_phi, t4_pull, t4_tdc, t4_z, t5_drNeg, t5_drPos, t5_dzNeg, t5_dzPos, t5_ptotNeg, t5_ptotPos, t9_mctheta, t9_nLinks, t9_nSL, t9_nUsed, t9_times, t_bestMcNLayers, t_bestNLayers, t_chi2, t_dlmd, t_dphi, t_dpt, t_dptot, t_dr, t_dz, t_evtNo, t_gdNLayers, t_good_theta, t_length, t_length2, t_mcNLayers, t_mcphi, t_mcpt, t_mcptot, t_mcpz, t_mct0, t_mctheta, t_nCores, t_ndf, t_nDigi, t_nHits, t_nSegs, t_phi, t_pt, t_ptot, t_radius, t_t0, t_tanlmd, ti_eventTime, ti_evtNo, ti_nDigi, ti_nHits, ti_recTrkNum, u_evtNo, u_length2, u_mcpt, u_mcptot, u_mct0, u_mctheta, u_nDigi, ut0_sta, and ut_t0.
Referenced by initialize().
01109 { 01110 m_tuple=ntupleSvc()->book("FILE101/rec3D",CLID_ColumnWiseTuple,"MdcRecEvent"); 01111 m_tuple->addItem ("mc_phi", t_mcphi); 01112 m_tuple->addItem ("mc_theta", t_mctheta); 01113 m_tuple->addItem ("mc_ptot", t_mcptot); 01114 m_tuple->addItem ("mc_pt", t_mcpt); 01115 m_tuple->addItem ("mc_pz", t_mcpz); 01116 m_tuple->addItem ("mc_t0", t_mct0); 01117 m_tuple->addItem ("nDigi", t_nDigi); 01118 01119 m_tuple->addItem ("dr", t_dr); 01120 m_tuple->addItem ("dz", t_dz); 01121 m_tuple->addItem ("pt", t_pt); 01122 m_tuple->addItem ("ptot", t_ptot); 01123 m_tuple->addItem ("tanlmd",t_tanlmd); 01124 m_tuple->addItem ("phi", t_phi); 01125 m_tuple->addItem ("radius",t_radius); 01126 m_tuple->addItem ("chi2", t_chi2); 01127 m_tuple->addItem ("nHits", t_nHits); 01128 m_tuple->addItem ("nCores",t_nCores); 01129 m_tuple->addItem ("nSegs", t_nSegs); 01130 m_tuple->addItem ("ndf", t_ndf); 01131 01132 m_tuple->addItem ("dpt", t_dpt); 01133 m_tuple->addItem ("dptot", t_dptot); 01134 m_tuple->addItem ("dlmd", t_dlmd); 01135 m_tuple->addItem ("dphi", t_dphi); 01136 01137 m_tuple->addItem ("t0", t_t0); 01138 m_tuple->addItem ("t0_sta",t0_sta); //mdc, tof 01139 01140 m_tuple->addItem ("evtNo", t_evtNo); 01141 m_tuple->addItem ("length", t_length); 01142 m_tuple->addItem ("length2", t_length2); 01143 01144 m_tuple->addItem ("gd_theta", t_good_theta); 01145 m_tuple->addItem ("gd_nLayers", t_gdNLayers); 01146 m_tuple->addItem ("mc_nLayers", t_mcNLayers); 01147 m_tuple->addItem ("best_nLayers",t_bestNLayers); 01148 m_tuple->addItem ("best_mc_nLayers",t_bestMcNLayers); 01149 01150 m_tuple3=ntupleSvc()->book("FILE101/raw",CLID_ColumnWiseTuple,"Raw Data"); 01151 m_tuple3->addItem ("mc_t0", t3_mct0); 01152 m_tuple3->addItem ("mc_theta", t3_mctheta); 01153 m_tuple3->addItem ("mc_phi", t3_mcphi); 01154 m_tuple3->addItem ("mc_ptot", t3_mcptot); 01155 m_tuple3->addItem ("mc_pt", t3_mcpt); 01156 m_tuple3->addItem ("mc_pid", t3_mcpid); 01157 m_tuple3->addItem ("evtNo", t3_evtNo); 01158 01159 m_tuple31=ntupleSvc()->book("FILE101/rawEvt",CLID_ColumnWiseTuple,"Raw Data"); 01160 m_tuple31->addItem ("nDigi", t3_nDigi); 01161 m_tuple31->addItem ("goodLength", t3_goodLength); 01162 m_tuple31->addItem ("length", t3_length); 01163 m_tuple31->addItem ("t0_rec", t3_t0Rec); 01164 m_tuple31->addItem ("t0", t3_t0); 01165 m_tuple31->addItem ("t0_sta", t3_t0Sta); 01166 m_tuple31->addItem ("finalLength", t3_finalLength); 01167 01168 m_tuple31->addItem ("mc_theta", t3_mctheta); 01169 m_tuple31->addItem ("mc_ptot", t3_mcptot); 01170 m_tuple31->addItem ("mc_pt", t3_mcpt); 01171 m_tuple31->addItem ("evtNo", t3_evtNo); 01172 01173 m_tuple2=ntupleSvc()->book("FILE101/rec2D",CLID_ColumnWiseTuple,"MdcRecEvent 2D"); 01174 m_tuple2->addItem ("mc_theta", t2_mctheta); 01175 m_tuple2->addItem ("mc_pt", t2_mcpt); 01176 m_tuple2->addItem ("nDigi", t2_nDigi); 01177 m_tuple2->addItem ("nHits", t2_nHits); 01178 m_tuple2->addItem ("nSegs", t2_nSegs); 01179 m_tuple2->addItem ("chi2", t2_chi2); 01180 m_tuple2->addItem ("evtNo", t2_evtNo); 01181 m_tuple2->addItem ("ndf", t2_ndf); 01182 m_tuple2->addItem ("length", t2_length); 01183 m_tuple2->addItem ("length2", t2_length2); 01184 m_tuple2->addItem ("radius", t2_radius); 01185 01186 m_tuple4=ntupleSvc()->book("FILE101/hit",CLID_ColumnWiseTuple,"MdcRecEvent Hits"); 01187 m_tuple4->addItem ("d_cal", t4_Dist); 01188 m_tuple4->addItem ("d_meas", t4_drift); //d_cal-d_meas 01189 m_tuple4->addItem ("e_meas", t4_dDrift); //error measure 01190 m_tuple4->addItem ("mc_drift", t4_mcDrift); 01191 m_tuple4->addItem ("mcLR", t4_mcLR); 01192 m_tuple4->addItem ("pull", t4_pull); 01193 m_tuple4->addItem ("lyrId", t4_lyrId); 01194 m_tuple4->addItem ("localId", t4_localId); 01195 m_tuple4->addItem ("LR", t4_LR); 01196 m_tuple4->addItem ("tdc", t4_tdc); 01197 m_tuple4->addItem ("z", t4_z); 01198 m_tuple4->addItem ("bz", t4_bz); //backward 01199 m_tuple4->addItem ("fz", t4_fz); //forward 01200 m_tuple4->addItem ("fy", t4_fy); //forward 01201 m_tuple4->addItem ("phi", t4_phi); 01202 m_tuple4->addItem ("nHits", t4_nHits); 01203 01204 m_tuple5=ntupleSvc()->book("FILE101/char",CLID_ColumnWiseTuple,"MdcRecEvent Charge"); 01205 m_tuple5->addItem ("ptotPos", t5_ptotPos); 01206 m_tuple5->addItem ("ptotNeg", t5_ptotNeg); 01207 m_tuple5->addItem ("drPos", t5_drPos); 01208 m_tuple5->addItem ("drNeg", t5_drNeg); 01209 m_tuple5->addItem ("dzPos", t5_dzPos); 01210 m_tuple5->addItem ("dzNeg", t5_dzNeg); 01211 01212 m_tuple6=ntupleSvc()->book("FILE101/urec",CLID_ColumnWiseTuple,"MdcRecEvent urec"); 01213 m_tuple6->addItem ("length2", u_length2); 01214 m_tuple6->addItem ("mc_ptot", u_mcptot); 01215 m_tuple6->addItem ("mc_pt", u_mcpt); 01216 m_tuple6->addItem ("mc_theta", u_mctheta); 01217 m_tuple6->addItem ("nDigi", u_nDigi); 01218 m_tuple6->addItem ("evtNo", u_evtNo); 01219 m_tuple6->addItem ("mc_t0", u_mct0); 01220 m_tuple6->addItem ("t0", ut_t0); 01221 m_tuple6->addItem ("t0_sta", ut0_sta); 01222 01223 if (b_timeTest && b_tuple) { 01224 m_tuple7=ntupleSvc()->book("FILE101/time",CLID_ColumnWiseTuple,"MdcRecEvent time"); 01225 m_tuple7->addItem ("time", ti_eventTime); //total time in a event. 01226 m_tuple7->addItem ("recNum", ti_recTrkNum); //total raw-tracks, include decayed tracks! 01227 m_tuple7->addItem ("evtNo", ti_evtNo); 01228 m_tuple7->addItem ("nHits", ti_nHits); //total hits of rec-tracks 01229 m_tuple7->addItem ("nDigi", ti_nDigi); //total hits in rawdata 01230 } 01231 01232 m_tuple9=ntupleSvc()->book("FILE101/seg",CLID_ColumnWiseTuple,"MdcRecEvent segments"); 01233 m_tuple9->addItem ("times", t9_times); 01234 m_tuple9->addItem ("nLinks", t9_nLinks); 01235 m_tuple9->addItem ("nUsed", t9_nUsed); 01236 m_tuple9->addItem ("nSL", t9_nSL); 01237 m_tuple9->addItem ("mctheta", t9_mctheta); 01238 01239 m_tuple10=ntupleSvc()->book("FILE101/rawHit",CLID_ColumnWiseTuple,"MdcRecEvent mchitCOL"); 01240 m_tuple10->addItem ("tdc", t10_tdc); 01241 m_tuple10->addItem ("adc", t10_adc); 01242 m_tuple10->addItem ("Drift", t10_drift); 01243 m_tuple10->addItem ("dDrift", t10_dDrift); 01244 m_tuple10->addItem ("lyrId", t10_lyrId); 01245 m_tuple10->addItem ("localId", t10_localId); 01246 }
double TrkReco::maxdDistance | ( | TMLink * | ) | const [private] |
cal maxdistance temporary in conformal plane
Definition at line 1593 of file TrkReco.cxx.
References TMLink::dDrift(), TMDCWire::layerId(), TMDCWire::superLayerId(), and TMLink::wire().
Referenced by FillTuple().
01593 { 01594 unsigned sl = l->wire()->superLayerId(); 01595 unsigned lId = l->wire()->layerId(); 01596 double _averR[11] = {9.7, 14.5, 22.14, 28.62, 35.1, 42.39, 48.87, 55.35, 61.83, 69.12, 74.79}; 01597 double _averR2[43] = { 7.885, 9.07, 10.29, 11.525, 01598 12.72, 13.875, 15.01, 16.16, 01599 19.7, 21.3, 22.955, 24.555, 01600 26.215, 27.82, 29.465, 31.06, 01601 32.69, 34.265, 35.875, 37.455, 01602 39.975, 41.52, 43.12, 44.76, 01603 46.415, 48.02, 49.685, 51.37, 01604 53.035, 54.595, 56.215, 57.855, 01605 59.475, 60.995, 62.565, 64.165, 01606 66.68, 68.285, 69.915, 71.57, 01607 73.21, 74.76, 76.345}; 01608 double radius = _averR2[lId]; 01609 const double singleSigma = l->dDrift(); 01610 return 2 * singleSigma / (radius * radius); 01611 }
bool TrkReco::mcEvent | ( | void | ) | const [private] |
returns true if an event is MC.
Definition at line 975 of file TrkReco.cxx.
00975 { 00976 // struct belle_event * ev = 00977 // (struct belle_event *) BsGetEnt(BELLE_EVENT, 1, BBS_No_Index); 00978 00979 //...No BELLE_EVENT ???... 00980 // if (! ev) return false; 00981 // if (ev->m_ExpMC == 2) return true; 00982 // return false; 00983 return true; 00984 }
void TrkReco::mcInformation | ( | void | ) | [private] |
creates MC info. of reconstructed tracks.
Definition at line 909 of file TrkReco.cxx.
References _mcTracks, _trackManager, genRecEmupikp::i, if(), ganga-rec::j, TTrackHEP::list(), TrigConf::N, TTrackManager::tracksFinal(), TTrackGhost, TTrackGood, and TTrackUnique.
00909 { 00910 00911 //...Preparation... 00912 // const AList<TTrack> & allTracks = _trackManager.allTracks(); 00913 const AList<TTrack> & allTracks = _trackManager.tracksFinal(); 00914 00915 unsigned nHep = TTrackHEP::list().length(); 00916 unsigned nTrk = allTracks.length(); 00917 unsigned * N = (unsigned *) malloc(nHep * sizeof(unsigned)); 00918 for (unsigned i = 0; i < nHep; i++) N[i] = 0; 00919 00920 //...Loop over all tracks... 00921 for (unsigned i = 0; i < nTrk; i++) { 00922 TTrackMC * mc = allTracks[i]->_mc; 00923 if (! mc) { 00924 mc = new TTrackMC(* allTracks[i]); 00925 _mcTracks.append(mc); 00926 allTracks[i]->_mc = mc; 00927 } 00928 00929 mc->update(); 00930 if (mc->hepId() != -1) 00931 if (mc->charge()) 00932 ++N[mc->hepId()]; 00933 } 00934 00935 //...Check uniqueness... 00936 for (unsigned i = 0; i < nHep; i++) { 00937 if (N[i] < 2) { 00938 for (unsigned j = 0; j < nTrk; j++) 00939 if (allTracks[j]->_mc->hepId() == i) 00940 allTracks[j]->_mc->_quality += TTrackUnique; 00941 } 00942 } 00943 00944 //...Good tracks... 00945 for (unsigned i = 0; i < nTrk; i++) { 00946 unsigned & quality = allTracks[i]->_mc->_quality; 00947 if ((quality & TTrackGhost) && (quality & TTrackUnique)) 00948 quality += TTrackGood; 00949 } 00950 00951 //...Termination... 00952 free(N); 00953 }
const TTrackManager & TrkReco::trackManager | ( | void | ) | const [inline] |
returns a pointer to TTrackManager.
Definition at line 346 of file TrkReco.h.
References _trackManager.
00346 { 00347 return _trackManager; 00348 }
const AList< TTrack > & TrkReco::tracks | ( | void | ) | const [inline] |
returns a list of reconstructed tracks.
Definition at line 332 of file TrkReco.h.
References _trackManager, and TTrackManager::tracksFinal().
Referenced by execute(), and FillTuple().
00332 { 00333 return _trackManager.tracksFinal(); 00334 }
TMDC* TrkReco::_cdc [private] |
Definition at line 249 of file TrkReco.h.
Referenced by beginRun(), cdcInit(), execute(), FillTuple(), and finalize().
TFinderBase* TrkReco::_confFinder [private] |
Definition at line 251 of file TrkReco.h.
Referenced by clear(), confFinder(), execute(), finalize(), and initialize().
TCurlFinder* TrkReco::_curlFinder [private] |
Definition at line 252 of file TrkReco.h.
Referenced by clear(), curlFinder(), execute(), finalize(), and initialize().
AList<TTrackMC> TrkReco::_mcTracks [private] |
MdcCalibFunSvc* TrkReco::_mdcCalibFunSvc [private] |
MdcGeomSvc* TrkReco::_mdcGeomSvc [private] |
unsigned TrkReco::_nEvents [private] |
TFinderBase* TrkReco::_perfectFinder [private] |
RawDataProviderSvc* TrkReco::_rawDataProviderSvc [private] |
TRungeFitter TrkReco::_rkfitter [private] |
TTrackManager TrkReco::_trackManager [private] |
Definition at line 253 of file TrkReco.h.
Referenced by clear(), execute(), FillTuple(), initialize(), mcInformation(), trackManager(), and tracks().
float TrkReco::b_cdcVersion |
Definition at line 158 of file TrkReco.h.
Referenced by clear(), execute(), finalize(), and initPara().
Definition at line 199 of file TrkReco.h.
Referenced by clear(), execute(), finalize(), and initPara().
float TrkReco::b_fudgeFactor |
int TrkReco::b_mcHit |
int TrkReco::b_mcPar |
double TrkReco::b_momentumCut |
float TrkReco::b_salvageLevel |
int TrkReco::b_test |
Definition at line 130 of file TrkReco.h.
Referenced by execute(), FillTuple(), finalize(), initialize(), initPara(), and InitTuple().
int TrkReco::b_tuple |
Definition at line 128 of file TrkReco.h.
Referenced by execute(), FillTuple(), finalize(), initialize(), initPara(), and InitTuple().
int TrkReco::havedigi[43][288] [private] |
BesTimer* TrkReco::m_timer[2] [private] |
IBesTimerSvc* TrkReco::m_timersvc [private] |
NTuple::Tuple* TrkReco::m_tuple [private] |
NTuple::Tuple* TrkReco::m_tuple10 [private] |
NTuple::Tuple* TrkReco::m_tuple2 [private] |
NTuple::Tuple* TrkReco::m_tuple3 [private] |
NTuple::Tuple* TrkReco::m_tuple31 [private] |
NTuple::Tuple* TrkReco::m_tuple4 [private] |
NTuple::Tuple* TrkReco::m_tuple5 [private] |
NTuple::Tuple* TrkReco::m_tuple6 [private] |
NTuple::Tuple* TrkReco::m_tuple7 [private] |
NTuple::Tuple* TrkReco::m_tuple9 [private] |
double TrkReco::mask_distance |
int TrkReco::MC_DIGI_SIZE [private] |
double TrkReco::merge_ratio |
double TrkReco::merge_z_diff |
double TrkReco::min_svd_electrons |
double TrkReco::minimum_seedLength |
double TrkReco::range_for_stereo1 |
double TrkReco::range_for_stereo2 |
double TrkReco::range_for_stereo3 |
double TrkReco::range_for_stereo4 |
double TrkReco::range_for_stereo5 |
double TrkReco::range_for_stereo6 |
double TrkReco::ratio_used_wire |
double TrkReco::selector_max_impact |
double TrkReco::selector_max_sigma |
double TrkReco::selector_replace_dz |
double TrkReco::selector_strange_pz |
double TrkReco::t0_bes [private] |
NTuple::Item<float> TrkReco::t0_sta [private] |
double TrkReco::t0Sta [private] |
NTuple::Item<float> TrkReco::t10_adc [private] |
NTuple::Item<float> TrkReco::t10_dDrift [private] |
NTuple::Item<float> TrkReco::t10_drift [private] |
NTuple::Item<float> TrkReco::t10_localId [private] |
NTuple::Item<float> TrkReco::t10_lyrId [private] |
NTuple::Item<float> TrkReco::t10_tdc [private] |
NTuple::Item<float> TrkReco::t2_chi2 [private] |
NTuple::Item<float> TrkReco::t2_evtNo [private] |
NTuple::Item<float> TrkReco::t2_length [private] |
NTuple::Item<float> TrkReco::t2_length2 [private] |
NTuple::Item<float> TrkReco::t2_mcpt [private] |
NTuple::Item<float> TrkReco::t2_mctheta [private] |
NTuple::Item<float> TrkReco::t2_ndf [private] |
NTuple::Item<float> TrkReco::t2_nDigi [private] |
NTuple::Item<float> TrkReco::t2_nHits [private] |
NTuple::Item<float> TrkReco::t2_nSegs [private] |
NTuple::Item<float> TrkReco::t2_radius [private] |
NTuple::Item<float> TrkReco::t3_evtNo [private] |
NTuple::Item<float> TrkReco::t3_finalLength [private] |
NTuple::Item<float> TrkReco::t3_goodLength [private] |
NTuple::Item<float> TrkReco::t3_length [private] |
NTuple::Item<float> TrkReco::t3_mcphi [private] |
NTuple::Item<float> TrkReco::t3_mcpid [private] |
NTuple::Item<float> TrkReco::t3_mcpt [private] |
NTuple::Item<float> TrkReco::t3_mcptot [private] |
NTuple::Item<float> TrkReco::t3_mct0 [private] |
NTuple::Item<float> TrkReco::t3_mctheta [private] |
NTuple::Item<float> TrkReco::t3_nDigi [private] |
NTuple::Item<float> TrkReco::t3_t0 [private] |
NTuple::Item<float> TrkReco::t3_t0Rec [private] |
NTuple::Item<float> TrkReco::t3_t0Sta [private] |
NTuple::Item<float> TrkReco::t4_bz [private] |
NTuple::Item<float> TrkReco::t4_dDrift [private] |
NTuple::Item<float> TrkReco::t4_Dist [private] |
NTuple::Item<float> TrkReco::t4_drift [private] |
NTuple::Item<float> TrkReco::t4_fy [private] |
NTuple::Item<float> TrkReco::t4_fz [private] |
NTuple::Item<float> TrkReco::t4_localId [private] |
NTuple::Item<float> TrkReco::t4_LR [private] |
NTuple::Item<float> TrkReco::t4_lyrId [private] |
NTuple::Item<float> TrkReco::t4_mcDrift [private] |
NTuple::Item<float> TrkReco::t4_mcLR [private] |
NTuple::Item<float> TrkReco::t4_nHits [private] |
NTuple::Item<float> TrkReco::t4_phi [private] |
NTuple::Item<float> TrkReco::t4_pull [private] |
NTuple::Item<float> TrkReco::t4_tdc [private] |
NTuple::Item<float> TrkReco::t4_z [private] |
NTuple::Item<float> TrkReco::t5_drNeg [private] |
NTuple::Item<float> TrkReco::t5_drPos [private] |
NTuple::Item<float> TrkReco::t5_dzNeg [private] |
NTuple::Item<float> TrkReco::t5_dzPos [private] |
NTuple::Item<float> TrkReco::t5_ptotNeg [private] |
NTuple::Item<float> TrkReco::t5_ptotPos [private] |
NTuple::Item<float> TrkReco::t9_mctheta [private] |
NTuple::Item<float> TrkReco::t9_nLinks [private] |
NTuple::Item<float> TrkReco::t9_nSL [private] |
NTuple::Item<float> TrkReco::t9_nUsed [private] |
NTuple::Item<float> TrkReco::t9_times [private] |
NTuple::Item<float> TrkReco::t_bestMcNLayers [private] |
NTuple::Item<float> TrkReco::t_bestNLayers [private] |
NTuple::Item<float> TrkReco::t_chi2 [private] |
NTuple::Item<float> TrkReco::t_dlmd [private] |
NTuple::Item<float> TrkReco::t_dphi [private] |
NTuple::Item<float> TrkReco::t_dpt [private] |
NTuple::Item<float> TrkReco::t_dptot [private] |
NTuple::Item<float> TrkReco::t_dr [private] |
NTuple::Item<float> TrkReco::t_dz [private] |
NTuple::Item<float> TrkReco::t_evtNo [private] |
NTuple::Item<float> TrkReco::t_gdNLayers [private] |
NTuple::Item<float> TrkReco::t_good_theta [private] |
NTuple::Item<float> TrkReco::t_length [private] |
NTuple::Item<float> TrkReco::t_length2 [private] |
NTuple::Item<float> TrkReco::t_mcNLayers [private] |
NTuple::Item<float> TrkReco::t_mcphi [private] |
NTuple::Item<float> TrkReco::t_mcpt [private] |
NTuple::Item<float> TrkReco::t_mcptot [private] |
NTuple::Item<float> TrkReco::t_mcpz [private] |
NTuple::Item<float> TrkReco::t_mct0 [private] |
NTuple::Item<float> TrkReco::t_mctheta [private] |
NTuple::Item<float> TrkReco::t_nCores [private] |
NTuple::Item<float> TrkReco::t_ndf [private] |
NTuple::Item<float> TrkReco::t_nDigi [private] |
NTuple::Item<float> TrkReco::t_nHits [private] |
NTuple::Item<float> TrkReco::t_nSegs [private] |
NTuple::Item<float> TrkReco::t_phi [private] |
NTuple::Item<float> TrkReco::t_pt [private] |
NTuple::Item<float> TrkReco::t_ptot [private] |
NTuple::Item<float> TrkReco::t_radius [private] |
NTuple::Item<float> TrkReco::t_t0 [private] |
NTuple::Item<float> TrkReco::t_tanlmd [private] |
NTuple::Item<float> TrkReco::ti_eventTime [private] |
NTuple::Item<float> TrkReco::ti_evtNo [private] |
NTuple::Item<float> TrkReco::ti_nDigi [private] |
NTuple::Item<float> TrkReco::ti_nHits [private] |
NTuple::Item<float> TrkReco::ti_recTrkNum [private] |
double TrkReco::trace2d_distance |
double TrkReco::trace3d_distance |
NTuple::Item<float> TrkReco::u_evtNo [private] |
NTuple::Item<float> TrkReco::u_length2 [private] |
NTuple::Item<float> TrkReco::u_mcpt [private] |
NTuple::Item<float> TrkReco::u_mcptot [private] |
NTuple::Item<float> TrkReco::u_mct0 [private] |
NTuple::Item<float> TrkReco::u_mctheta [private] |
NTuple::Item<float> TrkReco::u_nDigi [private] |
NTuple::Item<float> TrkReco::ut0_sta [private] |
NTuple::Item<float> TrkReco::ut_t0 [private] |
double TrkReco::z_cut |