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