BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcTrkRecon.cxx
Go to the documentation of this file.
1#include "MdcTrkRecon.h"
2#include "EvTimeEvent/RecEsTime.h"
3#include "EventModel/EventHeader.h"
4#include "GaudiKernel/Bootstrap.h"
5#include "GaudiKernel/DataSvc.h"
6#include "GaudiKernel/IDataManagerSvc.h"
7#include "GaudiKernel/IDataProviderSvc.h"
8#include "GaudiKernel/INTupleSvc.h"
9#include "GaudiKernel/ISvcLocator.h"
10#include "GaudiKernel/MsgStream.h"
11#include "GaudiKernel/PropertyMgr.h"
12#include "GaudiKernel/SmartDataPtr.h"
13#include "Identifier/Identifier.h"
14#include "Identifier/MdcID.h"
15#include "MdcData/MdcHit.h"
16#include "MdcData/MdcHitMap.h"
17#include "MdcData/MdcHitOnTrack.h"
18#include "MdcData/MdcHitUse.h"
19#include "MdcData/MdcRecoHitOnTrack.h"
20#include "MdcGeom/Constants.h"
21#include "MdcGeom/MdcDetector.h"
22#include "MdcRawEvent/MdcDigi.h"
23#include "MdcRecEvent/RecMdcHit.h"
24#include "MdcRecEvent/RecMdcTrack.h"
25#include "MdcRecoUtil/Pdt.h"
26#include "MdcTrkRecon/GmsList.h"
27#include "MdcTrkRecon/MdcHistItem.h"
28#include "MdcTrkRecon/MdcSeg.h"
29#include "MdcTrkRecon/MdcSegData.h"
30#include "MdcTrkRecon/MdcSegFinder.h"
31#include "MdcTrkRecon/MdcSegList.h"
32#include "MdcTrkRecon/MdcTrack.h"
33#include "MdcTrkRecon/MdcTrackList.h"
34#include "MdcTrkRecon/MdcTrackListCsmc.h"
35#include "PatBField/BField.h"
36#include "RawDataProviderSvc/IRawDataProviderSvc.h"
37#include "RawDataProviderSvc/MdcRawDataProvider.h"
38#include "RawEvent/RawDataUtil.h"
39#include "ReconEvent/ReconEvent.h"
40#include "TrkBase/TrkDifTraj.h"
41#include "TrkBase/TrkExchangePar.h"
42#include "TrkBase/TrkRep.h"
43#include "TrkFitter/TrkContextEv.h"
44#include "TrkFitter/TrkHelixFitter.h"
45
46#include "McTruth/McParticle.h"
47#include "McTruth/MdcMcHit.h"
48#include "MdcPrintSvc/IMdcPrintSvc.h"
49#include "MdcTrkRecon/MdcSegUsage.h"
50
51#ifdef MDCPATREC_TIMETEST
52# include "BesTimerSvc/BesTimer.h"
53# include "BesTimerSvc/BesTimerSvc.h"
54# include "BesTimerSvc/IBesTimerSvc.h"
55#endif
56
57#include <fstream>
58#include <iostream>
59#include <vector>
60
61using namespace std;
62using namespace Event;
64
65//-----------------------------------------
66
67/////////////////////////////////////////////////////////////////////////////
69MdcTrkRecon::MdcTrkRecon( const std::string& name, ISvcLocator* pSvcLocator )
70 : Algorithm( name, pSvcLocator )
71 , m_hitData( 0 )
72 , m_segs( 0 )
73 , m_tracks( 0 )
74 , m_segFinder( 0 ) {
75 // Declare the properties--------------------------------
76 declareProperty( "FittingMethod", m_fittingMethod = 2 );
77 declareProperty( "ConfigFile", m_configFile = "MDCConfig.xml" );
78 declareProperty( "OnlyUnusedHits", m_onlyUnusedHits = 0 );
79 declareProperty( "PoisonHits", m_poisonHits = 0 );
80 declareProperty( "doLineFit", m_doLineFit = false );
81 declareProperty( "paramFile", m_paramFile = "params" );
82 declareProperty( "pdtFile", m_pdtFile = "pdt.table" );
83 declareProperty( "allHit", m_allHit = 1 );
84 declareProperty( "hist", m_hist = false );
85 declareProperty( "recForEsTime", m_recForEsTime = false );
86 declareProperty( "tryBunch", m_tryBunch = false );
87 declareProperty( "d0Cut", m_d0Cut = -999. );
88 declareProperty( "z0Cut", m_z0Cut = -999. );
89 declareProperty( "dropTrkPt", m_dropTrkPt = -999. );
90 declareProperty( "debug", m_debug = 0 );
91 declareProperty( "mcHist", m_mcHist = false );
92 declareProperty( "fieldCosmic", m_fieldCosmic = false );
93 declareProperty( "doSag", m_doSagFlag = false );
94 declareProperty( "arbitrateHits", m_arbitrateHits = true );
95
96 declareProperty( "helixHitsSigma", m_helixHitsSigma );
97 // for fill hist
98 declareProperty( "getDigiFlag", m_getDigiFlag = 0 );
99 declareProperty( "maxMdcDigi", m_maxMdcDigi = 0 );
100 declareProperty( "keepBadTdc", m_keepBadTdc = 0 );
101 declareProperty( "dropHot", m_dropHot = 0 );
102 declareProperty( "keepUnmatch", m_keepUnmatch = 0 );
103 declareProperty( "minMdcDigi", m_minMdcDigi = 0 );
104 declareProperty( "selEvtNo", m_selEvtNo );
105 declareProperty( "combineTracking", m_combineTracking = false ); // yzhang 2010-05-28
106 declareProperty( "noInner", m_noInner = false ); // yzhang 2016-10-12
107
108#ifdef MDCPATREC_RESLAYER
109 declareProperty( "resLayer", m_resLayer = -1 );
110#endif
111}
112
114 m_segs.reset( 0 );
115 m_segFinder.reset( 0 );
116 m_hitData.reset( 0 );
117 m_tracks.reset( 0 );
118}
119
120// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
122 MsgStream log( msgSvc(), name() );
123 log << MSG::INFO << "in beginRun()" << endmsg;
124
125 // Detector geometry
126 _gm = MdcDetector::instance( m_doSagFlag );
127
128 if ( NULL == _gm ) return StatusCode::FAILURE;
129
130 // Initialize segList
131 m_segs.reset( new MdcSegList( _gm->nSuper(), m_flags.segPar ) );
132
133 return StatusCode::SUCCESS;
134}
135
136// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
138
139 MsgStream log( msgSvc(), name() );
140 log << MSG::INFO << "in initialize()" << endmsg;
141 StatusCode sc;
142
143 // Pdt
144 Pdt::readMCppTable( m_pdtFile );
145
146 // Flag and Pars
147 m_flags.readPar( m_paramFile );
148 m_flags.lHist = m_hist;
149 m_flags.setDebug( m_debug );
150 for ( int i = 0; i < 43; i++ ) TrkHelixFitter::nSigmaCut[i] = m_helixHitsSigma[i];
151 if ( !m_doLineFit ) MdcTrackListBase::m_d0Cut = m_d0Cut;
152 if ( !m_doLineFit ) MdcTrackListBase::m_z0Cut = m_z0Cut;
153 MdcTrackListBase::m_ptCut = m_dropTrkPt;
154 if ( m_debug > 0 )
155 {
156 std::cout << "MdcTrkRecon d0Cut " << m_d0Cut << " z0Cut " << m_z0Cut << " ptCut "
157 << m_dropTrkPt << std::endl;
158 }
159
160 // Initailize magnetic filed
161 sc = service( "MagneticFieldSvc", m_pIMF );
162 if ( sc != StatusCode::SUCCESS )
163 { log << MSG::ERROR << name() << " Unable to open magnetic field service" << endmsg; }
164 m_bfield = new BField( m_pIMF );
165 log << MSG::INFO << name() << " field z = " << m_bfield->bFieldNominal() << endmsg;
166
167 // Initialize RawDataProviderSvc
168 sc = service( "RawDataProviderSvc", m_rawDataProviderSvc );
169 if ( sc.isFailure() )
170 {
171 log << MSG::FATAL << name() << " Could not load RawDataProviderSvc!" << endmsg;
172 return StatusCode::FAILURE;
173 }
174
175 // Initailize MdcPrintSvc
176 sc = service( "MdcPrintSvc", m_mdcPrintSvc );
177 if ( sc.isFailure() )
178 {
179 log << MSG::FATAL << "Could not load MdcPrintSvc!" << endmsg;
180 return StatusCode::FAILURE;
181 }
182
183 // Initialize hitdata
184 m_hitData.reset( new MdcSegData( ignoringUsedHits() ) );
185
186 // Initialize segFinder
187 if ( m_flags.findSegs )
188 { m_segFinder.reset( new MdcSegFinder( m_flags.segPar.useAllAmbig ) ); }
189
190 // Initialize trackList
191 if ( m_doLineFit ) { m_tracks.reset( new MdcTrackListCsmc( m_flags.tkParTight ) ); }
192 else { m_tracks.reset( new MdcTrackList( m_flags.tkParTight ) ); }
193 m_tracks->setNoInner( m_noInner );
194
195 // Book NTuple and Histograms
196 if ( m_flags.lHist )
197 {
198 StatusCode sc = bookNTuple();
199 if ( !sc.isSuccess() ) { m_flags.lHist = 0; }
200 }
201
202 // yzhang for HelixFitter debug
203 if ( 7 == m_flags.debugFlag() ) TrkHelixFitter::m_debug = true;
204
205 t_iExexute = 0;
206 return StatusCode::SUCCESS;
207}
208
209// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
211 if ( !m_beginRun )
212 {
213 StatusCode sc = beginRun();
214 if ( sc.isFailure() )
215 {
216 error() << "beginRun failed" << endmsg;
217 return StatusCode::FAILURE;
218 }
219 m_beginRun = true;
220 }
221
222 setFilterPassed( false );
223
224 MsgStream log( msgSvc(), name() );
225 log << MSG::INFO << "in execute()" << endmsg;
226
227 // Initialize
228 if ( m_hist > 0 )
229 {
230 for ( int ii = 0; ii < 43; ii++ )
231 {
232 for ( int jj = 0; jj < 288; jj++ )
233 {
234 haveDigiTk[ii][jj] = -2;
235 haveDigiPt[ii][jj] = -2;
236 haveDigiTheta[ii][jj] = -999.;
237 haveDigiPhi[ii][jj] = -999.;
238 haveDigiDrift[ii][jj] = -999.;
239 haveDigiAmbig[ii][jj] = -999.;
240 recHitMap[ii][jj] = 0;
241 mcDrift[ii][jj] = -99.;
242 mcX[ii][jj] = -99.;
243 mcY[ii][jj] = -99.;
244 mcZ[ii][jj] = -99.;
245 mcLR[ii][jj] = -99.;
246 hitPoisoned[ii][jj] = -99;
247 }
248 }
249 }
250
251 TrkContextEv context( m_bfield );
252#ifdef MDCPATREC_TIMETEST
253 m_timer[1]->start();
254 ti_nHit = 0;
255#endif
256 //------------------read event header--------------
257 SmartDataPtr<Event::EventHeader> evtHead( eventSvc(), "/Event/EventHeader" );
258 if ( !evtHead )
259 {
260 log << MSG::FATAL << "Could not retrieve event header" << endmsg;
261 return ( StatusCode::FAILURE );
262 }
263 t_eventNo = evtHead->eventNumber();
264 if ( m_debug != 0 )
265 std::cout << t_iExexute << " run " << evtHead->runNumber() << " evt " << t_eventNo
266 << std::endl;
267 t_iExexute++;
268
269 if ( m_selEvtNo.size() > 0 )
270 {
271 std::vector<int>::iterator it = m_selEvtNo.begin();
272 for ( ; it != m_selEvtNo.end(); it++ )
273 {
274 if ( ( *it ) == t_eventNo ) setFilterPassed( true );
275 }
276 }
277 //------------------get event start time-----------
278 double t0 = 0.;
279 t_t0 = -1.;
280 t_t0Stat = -1;
281 bool iterateT0 = false;
282 const int nBunch = 3; // 3 bunch/event
283 double iBunch = 0; // form 0 to 2
284 double BeamDeltaTime = 24. / nBunch; // 8ns
285 SmartDataPtr<RecEsTimeCol> evTimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
286 if ( !evTimeCol || evTimeCol->size() == 0 )
287 {
288 log << MSG::WARNING << " run " << evtHead->runNumber() << " evt " << t_eventNo
289 << " Could not find RecEsTimeCol" << endmsg;
290 if ( m_fieldCosmic )
291 { // yzhang temp for bes3 csmc test
292 return StatusCode::SUCCESS;
293 }
294 }
295 RecEsTimeCol::iterator iter_evt = evTimeCol->begin();
296 // skip RecEsTimeCol no rec data
297 if ( iter_evt != evTimeCol->end() )
298 {
299 t_t0Stat = ( *iter_evt )->getStat();
300 t_t0 = ( *iter_evt )->getTest();
301
302 if ( m_doLineFit )
303 {
304 // t0 -= m_t0Const;
305 if ( abs( t_t0 ) < 0.00001 || ( t_t0 < 0 ) || ( t_t0 > 9999.0 ) )
306 {
307 log << MSG::WARNING << "Skip with t0 = " << t_t0 << endmsg;
308 return StatusCode::SUCCESS; // for bes3 cosmic test
309 }
310 }
311 t0 = t_t0 * 1.e-9;
312 if ( m_debug > 0 ) std::cout << name() << " t0 " << t0 << " " << std::endl;
313 }
314
315restart:
316 if ( !m_recForEsTime && m_tryBunch )
317 {
318 if ( t_t0Stat < 10 ) return StatusCode::SUCCESS;
319 }
320 if ( m_tryBunch )
321 {
322 if ( iBunch > ( nBunch - 1 ) ) return StatusCode::SUCCESS;
323 if ( t_t0Stat < 0 ) { iterateT0 = true; }
324 if ( iterateT0 )
325 {
326 // double EventDeltaTime = 24.;//24ns/event
327 if ( ( t_t0Stat > -1 ) && ( fabs( iBunch * BeamDeltaTime - t_t0 ) < 2. ) )
328 {
329 ++iBunch;
330 goto restart;
331 }
332 else { t0 = iBunch * BeamDeltaTime * 1.e-9; }
333 ++iBunch;
334 }
335 }
336
337 SmartDataPtr<MdcHitMap> hitMap( eventSvc(), "/Event/Hit/MdcHitMap" );
338 if ( !hitMap )
339 {
340 log << MSG::FATAL << "Could not retrieve MDC hit map" << endmsg;
341 return ( StatusCode::FAILURE );
342 }
343 //---------------------Read an event--------------
344 SmartDataPtr<MdcHitCol> hitCol( eventSvc(), "/Event/Hit/MdcHitCol" );
345 if ( !hitCol )
346 {
347 log << MSG::FATAL << "Could not retrieve MDC hit list" << endmsg;
348 return ( StatusCode::FAILURE );
349 }
350 StatusCode sc;
351
352 //---------- register RecMdcTrackCol and RecMdcHitCol to tds---------
353 DataObject* aReconEvent;
354 eventSvc()->findObject( "/Event/Recon", aReconEvent );
355 if ( aReconEvent == NULL )
356 {
357 aReconEvent = new ReconEvent();
358 StatusCode sc = eventSvc()->registerObject( "/Event/Recon", aReconEvent );
359 if ( sc != StatusCode::SUCCESS )
360 {
361 log << MSG::FATAL << "Could not register ReconEvent" << endmsg;
362 return ( StatusCode::FAILURE );
363 }
364 }
365
366 DataObject* aTrackCol;
367 DataObject* aRecHitCol;
368 // yzhang 2010-05-28
369 SmartIF<IDataManagerSvc> dataManSvc( eventSvc() );
370 if ( !m_combineTracking )
371 {
372 eventSvc()->findObject( "/Event/Recon/RecMdcTrackCol", aTrackCol );
373 if ( aTrackCol )
374 {
375 dataManSvc->clearSubTree( "/Event/Recon/RecMdcTrackCol" );
376 eventSvc()->unregisterObject( "/Event/Recon/RecMdcTrackCol" );
377 }
378 eventSvc()->findObject( "/Event/Recon/RecMdcHitCol", aRecHitCol );
379 if ( aRecHitCol )
380 {
381 dataManSvc->clearSubTree( "/Event/Recon/RecMdcHitCol" );
382 eventSvc()->unregisterObject( "/Event/Recon/RecMdcHitCol" );
383 }
384 }
385
386 RecMdcTrackCol* trackList;
387 eventSvc()->findObject( "/Event/Recon/RecMdcTrackCol", aTrackCol );
388 if ( aTrackCol ) { trackList = dynamic_cast<RecMdcTrackCol*>( aTrackCol ); }
389 else
390 {
391 trackList = new RecMdcTrackCol;
392 sc = eventSvc()->registerObject( EventModel::Recon::RecMdcTrackCol, trackList );
393 if ( !sc.isSuccess() )
394 {
395 log << MSG::FATAL << " Could not register RecMdcTrack collection" << endmsg;
396 return StatusCode::FAILURE;
397 }
398 }
399 RecMdcHitCol* hitList;
400 eventSvc()->findObject( "/Event/Recon/RecMdcHitCol", aRecHitCol );
401 if ( aRecHitCol ) { hitList = dynamic_cast<RecMdcHitCol*>( aRecHitCol ); }
402 else
403 {
404 hitList = new RecMdcHitCol;
405 sc = eventSvc()->registerObject( EventModel::Recon::RecMdcHitCol, hitList );
406 if ( !sc.isSuccess() )
407 {
408 log << MSG::FATAL << " Could not register RecMdcHit collection" << endmsg;
409 return StatusCode::FAILURE;
410 }
411 }
412
413 if ( m_debug > 0 ) std::cout << name() << " t0 " << t0 << " " << std::endl;
414 m_hitData->loadevent( hitCol, hitMap, t0 );
415 t_nDigi = hitCol->size();
416
417 if ( poisoningHits() ) { m_hitData->poisonHits( _gm, m_debug ); }
418
419 if ( ( m_hist > 0 ) && m_tupleWireEff )
420 {
421 for ( int i = 0; i < m_hitData->nhits(); i++ )
422 {
423 const MdcHit* thisHit = m_hitData->hit( i );
424 int l = thisHit->layernumber();
425 int w = thisHit->wirenumber();
426 if ( m_hitData->segUsage().get( thisHit )->deadHit() ) { hitPoisoned[l][w] = 1; }
427 else { hitPoisoned[l][w] = 0; }
428 }
429 }
430
431#ifdef MDCPATREC_TIMETEST
432 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
433 if ( !mcParticleCol ) { log << MSG::INFO << "Could not retrieve McParticelCol" << endmsg; }
434 m_mcTkNum = mcParticleCol->size();
435#endif
436
437 if ( m_debug > 1 ) dumpDigi();
438 //--------------------------------------------------------------------------
439 // Segment finding
440 //--------------------------------------------------------------------------
441 int nSegs = 0;
442 if ( m_flags.findSegs )
443 {
444 // Form track segments in superlayers
445 nSegs = m_segFinder->createSegs( _gm, *m_segs, m_hitData->segUsage(), m_hitData->hitMap(),
446 t0 );
447 }
448 log << MSG::INFO << " Found " << nSegs << " segments" << endmsg;
449 if ( m_debug > 1 )
450 {
451 std::cout << "------------------------------------------------" << std::endl;
452 std::cout << "==event " << t_eventNo << " Found " << nSegs << " segments" << std::endl;
453 m_segs->plot();
454 }
455
456 if ( m_flags.lHist || m_flags.segPar.lPrint ) { fillSegList(); }
457
458 //--------------------------------------------------------------------------
459 // Combine segments to form track
460 //--------------------------------------------------------------------------
461 int nTracks = 0;
462 int nDeleted = 0;
463 if ( m_flags.findTracks && m_flags.findSegs )
464 {
465 if ( nSegs > 2 )
466 {
467 nTracks =
468 m_tracks->createFromSegs( m_segs.get(), m_hitData->hitMap(), _gm, context, t0 );
469 }
470
471 if ( m_arbitrateHits ) nDeleted = m_tracks->arbitrateHits();
472 int nKeep = nTracks - nDeleted;
473
474 if ( m_debug > 0 && ( nTracks - nDeleted ) > 0 )
475 {
476 std::cout << "MdcTrkRecon: evt " << setw( 5 ) << t_eventNo << " nDigi " << setw( 4 )
477 << t_nDigi << " t0 " << setw( 5 ) << t_t0 << " keep " << nKeep << " track(s)";
478 if ( nDeleted != 0 ) { std::cout << ",deleted " << nDeleted; }
479 std::cout << std::endl; // yzhang debug
480 }
481 else
482 {
483 if ( m_debug > 0 )
484 {
485 std::cout << "MdcTrkRecon: evt " << setw( 5 ) << t_eventNo << " nDigi " << setw( 4 )
486 << t_nDigi << " t0 " << setw( 5 ) << t_t0 << " found 0 track " << endl;
487 }
488 }
489
490 if ( m_flags.lHist ) t_nRecTk = nKeep;
491
492#ifdef MDCPATREC_RESLAYER
493 m_tracks->setResLayer( m_resLayer );
494#endif
495 if ( m_flags.lHist ) { fillTrackList(); }
496 // Stick the found tracks into the list in TDS
497 m_tracks->store( trackList, hitList );
498 // if (m_debug>1) { dumpTdsTrack(trackList); }
499 if ( m_debug > 1 )
500 {
501 std::cout << name() << " print track list " << std::endl;
502 m_mdcPrintSvc->printRecMdcTrackCol();
503 }
504
505 // if(nKeep != (int)trackList->size()) std::cout<<__FILE__<<"
506 // "<<__LINE__<<"!!!!!!!!!!!!!!!!! nKeep != nTdsTk"<< std::endl;
507#ifdef MDCPATREC_TIMETEST
508 RecMdcTrackCol::iterator iter = trackList->begin();
509 for ( ; iter != trackList->end(); iter++ )
510 {
511 MdcTrack* tk = *iter;
512 ti_nHit += tk->getNhits();
513 }
514#endif
515 }
516 //-------------End track-finding------------------
517 m_segs->destroySegs();
518
519 // if ( t_eventNo% 1000 == 0) {
520 // std::cout<<"evt "<<t_eventNo<< " Found " << trackList->size() << " track(s)"
521 // <<endl;//yzhang debug
522 // }
523 if ( m_flags.lHist && m_mcHist ) fillMcTruth();
524#ifdef MDCPATREC_TIMETEST
525 m_timer[1]->stop();
526 // cout << "m_timer[1]->elapsed()::" << m_timer[1]->elapsed() << endl;
527 // cout << "m_timer[1]->mean()::" << m_timer[1]->mean() << endl;
528 m_eventTime = m_timer[1]->elapsed();
529 m_t5recTkNum = m_tracks->length();
530 m_t5EvtNo = t_eventNo;
531 m_t5nHit = ti_nHit;
532 m_t5nDigi = t_nDigi;
533 sc = m_tupleTime->write();
534#endif
535 // for event start time, if track not found try another t0
536 if ( m_tryBunch )
537 {
538 if ( nTracks < 1 )
539 {
540 iterateT0 = true;
541 goto restart;
542 }
543 }
544 if ( m_flags.lHist ) fillEvent();
545
546 return StatusCode::SUCCESS;
547}
548
549// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
551 MsgStream log( msgSvc(), name() );
552 log << MSG::INFO << "in finalize()" << endmsg;
553
554 m_tracks.reset( 0 );
555#ifdef MDCPATREC_TIMETEST
556 m_timersvc->print();
557#endif
558 return StatusCode::SUCCESS;
559}
560
562 MsgStream log( msgSvc(), name() );
563 StatusCode sc = StatusCode::SUCCESS;
564
565 //--------------book histogram------------------
566 h_sfHit = histoSvc()->book( "sfHit", "Hits after segment finding", 46, -1., 44. );
567 // g_actHit = histoSvc()->book( "actHit", "Active hits",46,-1.,44. );
568 // g_hitEff = histoSvc()->book( "hitEff", "Hit efficiency in the event",100,-0.5,1.2 );
570 histoSvc()->book( "residVsLayer", "Residual vs. layer", 60, -5, 50., 100, -0.5, 1.2 );
572 histoSvc()->book( "residVsDoca", "Residial vs. doca", 50, -2., 2., 100, -0.5, 1.2 );
573 // segment
574 // g_segChi2 = histoSvc()->book( "segChi2", "chi2 per dof in segment finding",101,-1.,100.
575 // );
577 histoSvc()->book( "cirTkChi2", "chi2 per dof in circle finding", 21, -1., 20. );
578 g_3dTkChi2 = histoSvc()->book( "chi2Helix", "maxChisq dof helix fit", 51., -1., 50 );
579 g_nSigAdd = histoSvc()->book(
580 "nSigAdd", "max allowed n sigma to add hit to existing segment", 50, 0, 50 );
581 g_z0Cut =
582 histoSvc()->book( "z0Cut", "z0 for including stereo segs in cluster", 100, 0, 600 );
583 g_ctCut =
584 histoSvc()->book( "ctCut", "ct for including stereo segs in cluster", 100, -50, 50 );
585 g_delCt = histoSvc()->book( "delCt", "del ct cut forming seg group", 100, -20, 20 );
586 g_delZ0 = histoSvc()->book( "delZ0", "del z0 cut forming seg group", 100, -60, 60 );
587 g_phiDiff = histoSvc()->book( "phiDiff", "phidiff mult for drop dup seg", 100, -0.5, 6.5 );
588 g_slopeDiff = histoSvc()->book( "slopeDiff", "slopediff for drop dup seg", 100, -0.3, 0.3 );
590 histoSvc()->book( "maxSegChisqAx", "max chisqDof ax seg combine", 1000, 0., 1000. );
592 histoSvc()->book( "maxSegChisqSt", "max chisqDof st seg combine", 200, -10., 200. );
593 g_pickHitWire = histoSvc()->book( "pickHitWire", "nWire of pickHit", 600, -288, 288 );
594
595 // for(int i=0;i<11;i++){
596 // char title1[80],title2[80];
597 // sprintf(title1,"segChi2Pat3%d",i);
598 // sprintf(title2,"segChi2Pat4%d",i);
599 // g_segChi2SlayPat3[i] = histoSvc()->book( title1, "chi2/dof per layer of
600 // pat3",710,-10.,700. ); g_segChi2SlayPat4[i] = histoSvc()->book( title2, "chi2/dof per
601 // layer of pat4",710,-10.,700. );
602 // }
603
604 // book tuple of wire efficiency
605 NTuplePtr ntWireEff( ntupleSvc(), "MdcWire/mc" );
606 if ( ntWireEff ) { m_tupleWireEff = ntWireEff; }
607 else
608 {
609 m_tupleWireEff = ntupleSvc()->book( "MdcWire/mc", CLID_ColumnWiseTuple, "MdcWire" );
610 if ( m_tupleWireEff )
611 {
612 sc = m_tupleWireEff->addItem( "tkId", m_we_tkId );
613 sc = m_tupleWireEff->addItem( "pdg", m_we_pdg );
614 sc = m_tupleWireEff->addItem( "primary", m_we_primary );
615 sc = m_tupleWireEff->addItem( "layer", m_we_layer );
616 sc = m_tupleWireEff->addItem( "wire", m_we_wire );
617 sc = m_tupleWireEff->addItem( "gwire", m_we_gwire );
618 sc = m_tupleWireEff->addItem( "poisoned", m_we_poisoned );
619 sc = m_tupleWireEff->addItem( "seg", m_we_seg );
620 sc = m_tupleWireEff->addItem( "track", m_we_track );
621 sc = m_tupleWireEff->addItem( "pt", m_we_pt );
622 sc = m_tupleWireEff->addItem( "theta", m_we_theta );
623 sc = m_tupleWireEff->addItem( "phi", m_we_phi );
624 // sc = m_tupleWireEff->addItem ("tdc", m_we_tdc);
625 }
626 else { log << MSG::ERROR << "Cannot book tuple MdcWire/mc" << endmsg; }
627 }
628
629 // book tuple of test
630 NTuplePtr ntt( ntupleSvc(), "MdcRec/test" );
631 if ( ntt ) { m_tuplet = ntt; }
632 else
633 {
634 m_tuplet =
635 ntupleSvc()->book( "MdcRec/test", CLID_ColumnWiseTuple, "MdcTrkRecon t particle" );
636 if ( m_tuplet )
637 {
638 sc = m_tuplet->addItem( "layer", m_tl );
639 sc = m_tuplet->addItem( "wire", m_tw );
640 sc = m_tuplet->addItem( "phi", m_tphi );
641 sc = m_tuplet->addItem( "dphi", m_tdphi );
642 sc = m_tuplet->addItem( "dncell", m_tdncell );
643 }
644 else
645 {
646 log << MSG::ERROR << "Cannot book tuple MdcRec/test" << endmsg;
647 // return StatusCode::FAILURE;
648 }
649 }
650
651 // book tuple of MC truth
652 NTuplePtr ntMc( ntupleSvc(), "MdcMc/mcTk" );
653 if ( ntMc ) { m_tupleMc = ntMc; }
654 else
655 {
656 m_tupleMc =
657 ntupleSvc()->book( "MdcMc/mcTk", CLID_ColumnWiseTuple, "MdcTrkRecon Mc particle" );
658 if ( m_tupleMc )
659 {
660 sc = m_tupleMc->addItem( "evtNo", m_tMcEvtNo );
661 sc = m_tupleMc->addItem( "nDigi", m_tMcNTk );
662 }
663 else
664 {
665 log << MSG::ERROR << "Cannot book tuple MdcMc/mcTk" << endmsg;
666 // return StatusCode::FAILURE;
667 }
668 }
669
670 // book tuple of MC truth
671 NTuplePtr ntMcHit( ntupleSvc(), "MdcMc/mcHit" );
672 if ( ntMcHit ) { m_tupleMcHit = ntMcHit; }
673 else
674 {
676 ntupleSvc()->book( "MdcMc/mcHit", CLID_ColumnWiseTuple, "MdcTrkRecon Mc hit" );
677 if ( m_tupleMcHit )
678 {
679 sc = m_tupleMcHit->addItem( "tkId", m_tMcTkId );
680 sc = m_tupleMcHit->addItem( "pid", m_tMcPid );
681 sc = m_tupleMcHit->addItem( "px", m_tMcPx );
682 sc = m_tupleMcHit->addItem( "py", m_tMcPy );
683 sc = m_tupleMcHit->addItem( "pz", m_tMcPz );
684 sc = m_tupleMcHit->addItem( "d0", m_tMcD0 );
685 sc = m_tupleMcHit->addItem( "z0", m_tMcZ0 );
686 sc = m_tupleMcHit->addItem( "theta", m_tMcTheta );
687 sc = m_tupleMcHit->addItem( "fiterm", m_tMcFiTerm );
688 sc = m_tupleMcHit->addItem( "nMcHit", m_tMcNHit, 0, 6796 );
689 sc = m_tupleMcHit->addIndexedItem( "layer", m_tMcNHit, m_tMcLayer );
690 sc = m_tupleMcHit->addIndexedItem( "wire", m_tMcNHit, m_tMcWire );
691 sc = m_tupleMcHit->addIndexedItem( "drift", m_tMcNHit, m_tMcDrift );
692 sc = m_tupleMcHit->addIndexedItem( "x", m_tMcNHit, m_tMcX );
693 sc = m_tupleMcHit->addIndexedItem( "y", m_tMcNHit, m_tMcY );
694 sc = m_tupleMcHit->addIndexedItem( "z", m_tMcNHit, m_tMcZ );
695 sc = m_tupleMcHit->addIndexedItem( "lr", m_tMcNHit, m_tMcLR );
696 }
697 else
698 {
699 log << MSG::ERROR << "Cannot book tuple MdcMc/mcHit" << endmsg;
700 // return StatusCode::FAILURE;
701 }
702 }
703 // book tuple of recnstruction results
704 NTuplePtr nt1( ntupleSvc(), "MdcRec/rec" );
705 if ( nt1 ) { m_tuple1 = nt1; }
706 else
707 {
708 m_tuple1 = ntupleSvc()->book( "MdcRec/rec", CLID_ColumnWiseTuple, "MdcTrkRecon results" );
709 if ( m_tuple1 )
710 {
711 sc = m_tuple1->addItem( "t0", m_t0 );
712 sc = m_tuple1->addItem( "t0Stat", m_t0Stat );
713 sc = m_tuple1->addItem( "t0Truth", m_t0Truth );
714
715 sc = m_tuple1->addItem( "nTdsTk", m_nTdsTk );
716 sc = m_tuple1->addItem( "nMcTk", m_nMcTk );
717
718 sc = m_tuple1->addItem( "p", m_p );
719 sc = m_tuple1->addItem( "pt", m_pt );
720 sc = m_tuple1->addItem( "nSlay", m_nSlay );
721 sc = m_tuple1->addItem( "pz", m_pz );
722 sc = m_tuple1->addItem( "d0", m_d0 );
723 sc = m_tuple1->addItem( "phi0", m_phi0 );
724 sc = m_tuple1->addItem( "cpa", m_cpa );
725 sc = m_tuple1->addItem( "z0", m_z0 );
726 sc = m_tuple1->addItem( "tanl", m_tanl );
727 sc = m_tuple1->addItem( "q", m_q );
728 sc = m_tuple1->addItem( "pocax", m_pocax );
729 sc = m_tuple1->addItem( "pocay", m_pocay );
730 sc = m_tuple1->addItem( "pocaz", m_pocaz );
731
732 sc = m_tuple1->addItem( "evtNo", m_evtNo );
733 sc = m_tuple1->addItem( "nSt", m_nSt );
734 sc = m_tuple1->addItem( "nAct", m_nAct );
735 sc = m_tuple1->addItem( "nDof", m_nDof );
736 sc = m_tuple1->addItem( "chi2", m_chi2 );
737 sc = m_tuple1->addItem( "tkId", m_tkId );
738 sc = m_tuple1->addItem( "nHit", m_nHit, 0, 6796 );
739 sc = m_tuple1->addIndexedItem( "resid", m_nHit, m_resid );
740 sc = m_tuple1->addIndexedItem( "sigma", m_nHit, m_sigma );
741 sc = m_tuple1->addIndexedItem( "driftD", m_nHit, m_driftD );
742 sc = m_tuple1->addIndexedItem( "driftT", m_nHit, m_driftT );
743 sc = m_tuple1->addIndexedItem( "doca", m_nHit, m_doca );
744 sc = m_tuple1->addIndexedItem( "entra", m_nHit, m_entra );
745 sc = m_tuple1->addIndexedItem( "ambig", m_nHit, m_ambig );
746 sc = m_tuple1->addIndexedItem( "fltLen", m_nHit, m_fltLen );
747 sc = m_tuple1->addIndexedItem( "tof", m_nHit, m_tof );
748 sc = m_tuple1->addIndexedItem( "act", m_nHit, m_act );
749 sc = m_tuple1->addIndexedItem( "tdc", m_nHit, m_tdc );
750 sc = m_tuple1->addIndexedItem( "adc", m_nHit, m_adc );
751 sc = m_tuple1->addIndexedItem( "layer", m_nHit, m_layer );
752 sc = m_tuple1->addIndexedItem( "wire", m_nHit, m_wire );
753 sc = m_tuple1->addIndexedItem( "x", m_nHit, m_x );
754 sc = m_tuple1->addIndexedItem( "y", m_nHit, m_y );
755 sc = m_tuple1->addIndexedItem( "z", m_nHit, m_z );
756 sc = m_tuple1->addIndexedItem( "dx", m_nHit, m_dx );
757 sc = m_tuple1->addIndexedItem( "dy", m_nHit, m_dy );
758 sc = m_tuple1->addIndexedItem( "dz", m_nHit, m_dz );
759 sc = m_tuple1->addIndexedItem( "dDriftD", m_nHit, m_dDriftD );
760 sc = m_tuple1->addIndexedItem( "dlr", m_nHit, m_dlr );
761 sc = m_tuple1->addIndexedItem( "cellWidth", m_nHit, m_cellWidth ); // for pickHits tuning
762 }
763 else
764 {
765 log << MSG::ERROR << "Cannot book tuple MdcRec/rec" << endmsg;
766 // return StatusCode::FAILURE;
767 }
768 }
769 // book tuple of segment
770 NTuplePtr ntSeg( ntupleSvc(), "MdcSeg/seg" );
771 if ( ntSeg ) { m_tupleSeg = ntSeg; }
772 else
773 {
774 m_tupleSeg =
775 ntupleSvc()->book( "MdcSeg/seg", CLID_ColumnWiseTuple, "MdcTrkRecon segment data" );
776 if ( m_tupleSeg )
777 {
778 sc = m_tupleSeg->addItem( "evtNo", m_tsEvtNo );
779 sc = m_tupleSeg->addItem( "nSeg", m_tsNSeg );
780 sc = m_tupleSeg->addItem( "nDigi", m_tsNDigi, 0, 6796 );
781 sc = m_tupleSeg->addIndexedItem( "layer", m_tsNDigi, m_tsLayer );
782 sc = m_tupleSeg->addIndexedItem( "wire", m_tsNDigi, m_tsWire );
783 sc = m_tupleSeg->addIndexedItem( "inSeg", m_tsNDigi, m_tsInSeg );
784 sc = m_tupleSeg->addIndexedItem( "mcTkId", m_tsNDigi, m_tsMcTkId );
785 }
786 else
787 {
788 log << MSG::ERROR << "Cannot book tuple MdcSeg/seg" << endmsg;
789 // return StatusCode::FAILURE;
790 }
791 }
792
793 // book tuple of event
794 NTuplePtr nt4( ntupleSvc(), "MdcRec/evt" );
795 if ( nt4 ) { m_tupleEvt = nt4; }
796 else
797 {
798 m_tupleEvt =
799 ntupleSvc()->book( "MdcRec/evt", CLID_ColumnWiseTuple, "MdcTrkRecon event data" );
800 if ( m_tupleEvt )
801 {
802 sc = m_tupleEvt->addItem( "evtNo", m_t4EvtNo );
803 sc = m_tupleEvt->addItem( "nMcTk", m_t4nMcTk );
804 sc = m_tupleEvt->addItem( "nTdsTk", m_t4nRecTk );
805 sc = m_tupleEvt->addItem( "t0", m_t4t0 );
806 sc = m_tupleEvt->addItem( "t0Stat", m_t4t0Stat );
807 sc = m_tupleEvt->addItem( "t0Truth", m_t4t0Truth );
808 sc = m_tupleEvt->addItem( "nDigiUn", m_t4nDigiUnmatch );
809 sc = m_tupleEvt->addItem( "nDigi", m_t4nDigi, 0, 6796 );
810 sc = m_tupleEvt->addIndexedItem( "layer", m_t4nDigi, m_t4Layer );
811 sc = m_tupleEvt->addIndexedItem( "wire", m_t4nDigi, m_t4Wire );
812 sc = m_tupleEvt->addIndexedItem( "rt", m_t4nDigi, m_t4Time );
813 sc = m_tupleEvt->addIndexedItem( "rc", m_t4nDigi, m_t4Charge );
814 sc = m_tupleEvt->addIndexedItem( "phiMid", m_t4nDigi, m_t4PhiMid );
815 sc = m_tupleEvt->addIndexedItem( "hot", m_t4nDigi, m_t4Hot );
816 // sc = m_tupleEvt->addIndexedItem ("recHit", m_t4nDigi, m_t4recHit);
817 // sc = m_tupleEvt->addIndexedItem ("rawHit", m_t4nDigi, m_t4rawHit);
818 }
819 else
820 {
821 log << MSG::ERROR << "Cannot book N-tuple: MdcRec/evt" << endmsg;
822 // return StatusCode::FAILURE;
823 }
824 }
825
826 // book tuple of residula for every layer
827 NTuplePtr ntCombAx( ntupleSvc(), "MdcCombAx/combAx" );
828 if ( ntCombAx ) { g_tupleCombAx = ntCombAx; }
829 else
830 {
831 g_tupleCombAx = ntupleSvc()->book( "MdcCombAx/combAx", CLID_RowWiseTuple,
832 "MdcTrkRecon cuts in combine ax seg" );
833 if ( g_tupleCombAx )
834 {
835 sc = g_tupleCombAx->addItem( "dPhi0", g_combAxdPhi0 );
836 sc = g_tupleCombAx->addItem( "dCurv", g_combAxdCurv );
837 sc = g_tupleCombAx->addItem( "sigPhi0", g_combAxSigPhi0 );
838 sc = g_tupleCombAx->addItem( "sigCurv", g_combAxSigCurv );
839 sc = g_tupleCombAx->addItem( "slSeed", g_combAxSlSeed );
840 sc = g_tupleCombAx->addItem( "slTest", g_combAxSlTest );
841 sc = g_tupleCombAx->addItem( "qSeed", g_combAxQualitySeed );
842 sc = g_tupleCombAx->addItem( "qTest", g_combAxQualityTest );
843 sc = g_tupleCombAx->addItem( "pSeed", g_combAxPatSeed );
844 sc = g_tupleCombAx->addItem( "pTest", g_combAxPatTest );
845 sc = g_tupleCombAx->addItem( "nHitSeed", g_combAxNhitSeed );
846 sc = g_tupleCombAx->addItem( "nHitTest", g_combAxNhitTest );
847 sc = g_tupleCombAx->addItem( "mc", g_combAxMc );
848 sc = g_tupleCombAx->addItem( "ptTruth", g_combAxMcPt );
849 sc = g_tupleCombAx->addItem( "thetaTruth", g_combAxMcTheta );
850 sc = g_tupleCombAx->addItem( "phiTruth", g_combAxMcPhi );
851 sc = g_tupleCombAx->addItem( "ambigSeed", g_combAxMcAmbigSeed );
852 sc = g_tupleCombAx->addItem( "ambigTest", g_combAxMcAmbigTest );
853 }
854 else
855 {
856 log << MSG::ERROR << "Cannot book N-tuple: FILE101/combAx" << endmsg;
857 // return StatusCode::FAILURE;
858 }
859 }
860
861 // book tuple of residula for every layer
862 NTuplePtr ntFindSeg( ntupleSvc(), "MdcSeg/findSeg" );
863 if ( ntFindSeg ) { g_tupleFindSeg = ntFindSeg; }
864 else
865 {
866 g_tupleFindSeg = ntupleSvc()->book( "MdcSeg/findSeg", CLID_RowWiseTuple,
867 "MdcTrkRecon cuts in segment finder" );
868 if ( g_tupleFindSeg )
869 {
870 sc = g_tupleFindSeg->addItem( "chi2", g_findSegChi2 );
871 sc = g_tupleFindSeg->addItem( "slope", g_findSegSlope );
872 sc = g_tupleFindSeg->addItem( "intercept", g_findSegIntercept );
873 sc = g_tupleFindSeg->addItem( "chi2Refit", g_findSegChi2Refit );
874 sc = g_tupleFindSeg->addItem( "chi2Add", g_findSegChi2Add );
875 sc = g_tupleFindSeg->addItem( "pat", g_findSegPat );
876 sc = g_tupleFindSeg->addItem( "pat34", g_findSegPat34 );
877 sc = g_tupleFindSeg->addItem( "nhit", g_findSegNhit );
878 sc = g_tupleFindSeg->addItem( "slayer", g_findSegSl );
879 sc = g_tupleFindSeg->addItem( "mc", g_findSegMc );
880 sc = g_tupleFindSeg->addItem( "ambig", g_findSegAmbig );
881 }
882 else
883 {
884 log << MSG::ERROR << "Cannot book N-tuple: FILE101/findSeg" << endmsg;
885 // return StatusCode::FAILURE;
886 }
887 }
888
889 // book tuple of event
890 NTuplePtr ntPick( ntupleSvc(), "MdcTrk/pick" );
891 if ( ntPick ) { m_tuplePick = ntPick; }
892 else
893 {
895 ntupleSvc()->book( "MdcTrk/pick", CLID_ColumnWiseTuple, "MdcTrkRecon pickHits" );
896 if ( m_tuplePick )
897 {
898 sc = m_tuplePick->addItem( "layer", m_pickLayer );
899 sc = m_tuplePick->addItem( "nCell", m_pickNCell, 0, 288 );
900 sc = m_tuplePick->addItem( "nCellWithDigi", m_pickNCellWithDigi, 0, 288 );
901 sc = m_tuplePick->addIndexedItem( "wire", m_pickNCellWithDigi, m_pickWire );
902 sc = m_tuplePick->addIndexedItem( "predDrift", m_pickNCellWithDigi, m_pickPredDrift );
903 sc = m_tuplePick->addIndexedItem( "drift", m_pickNCellWithDigi, m_pickDrift );
904 sc = m_tuplePick->addIndexedItem( "driftTruth", m_pickNCellWithDigi, m_pickDriftTruth );
905 sc = m_tuplePick->addIndexedItem( "phiZOk", m_pickNCellWithDigi, m_pickPhizOk );
906 sc = m_tuplePick->addIndexedItem( "z", m_pickNCellWithDigi, m_pickZ );
907 sc = m_tuplePick->addIndexedItem( "resid", m_pickNCellWithDigi, m_pickResid );
908 sc = m_tuplePick->addIndexedItem( "sigma", m_pickNCellWithDigi, m_pickSigma );
909 sc = m_tuplePick->addIndexedItem( "phiLowCut", m_pickNCellWithDigi, m_pickPhiLowCut );
910 sc = m_tuplePick->addIndexedItem( "phiHighCut", m_pickNCellWithDigi, m_pickPhiHighCut );
911 sc = m_tuplePick->addIndexedItem( "goodDriftCut", m_pickNCellWithDigi, m_pickDriftCut );
912 sc = m_tuplePick->addIndexedItem( "mcTk", m_pickNCellWithDigi, m_pickMcTk );
913 sc = m_tuplePick->addIndexedItem( "is2d", m_pickNCellWithDigi, m_pickIs2D );
914 sc = m_tuplePick->addIndexedItem( "pt", m_pickNCellWithDigi, m_pickPt );
915 sc = m_tuplePick->addIndexedItem( "curv", m_pickNCellWithDigi, m_pickCurv );
916 }
917 else
918 {
919 log << MSG::ERROR << "Cannot book N-tuple: MdcTrk/pick" << endmsg;
920 // return StatusCode::FAILURE;
921 }
922 }
923
924#ifdef MDCPATREC_TIMETEST
925 // book tuple of time test
926 NTuplePtr nt5( ntupleSvc(), "MdcTime/ti" );
927 if ( nt5 ) { m_tupleTime = nt5; }
928 else
929 {
930 m_tupleTime = ntupleSvc()->book( "MdcTime/ti", CLID_RowWiseTuple, "MdcTrkRecon time" );
931 if ( m_tupleTime )
932 {
933 sc = m_tupleTime->addItem( "eventtime", m_eventTime );
934 sc = m_tupleTime->addItem( "recTkNum", m_t5recTkNum );
935 sc = m_tupleTime->addItem( "mcTkNum", m_mcTkNum );
936 sc = m_tupleTime->addItem( "evtNo", m_t5EvtNo );
937 sc = m_tupleTime->addItem( "nHit", m_t5nHit );
938 sc = m_tupleTime->addItem( "nDigi", m_t5nDigi );
939 }
940 else
941 {
942 log << MSG::ERROR << "Cannot book N-tuple: FILE101/time" << endmsg;
943 // return StatusCode::FAILURE;
944 }
945 }
946 sc = service( "BesTimerSvc", m_timersvc );
947 if ( sc.isFailure() )
948 {
949 log << MSG::WARNING << " Unable to locate BesTimerSvc" << endmsg;
950 // return StatusCode::FAILURE;
951 }
952 m_timer[1] = m_timersvc->addItem( "Execution" );
953 m_timer[1]->propName( "nExecution" );
954#endif
955
956#ifdef MDCPATREC_RESLAYER
957 // book tuple of residula for every layer
958 NTuplePtr nt6( ntupleSvc(), "MdcRes/res" );
959 if ( nt6 ) { g_tupleres = nt6; }
960 else
961 {
962 g_tupleres = ntupleSvc()->book( "MdcRes/res", CLID_RowWiseTuple, "MdcTrkRecon res" );
963 if ( g_tupleres )
964 {
965 sc = g_tupleres->addItem( "resid", g_resLayer );
966 sc = g_tupleres->addItem( "layer", g_t6Layer );
967 }
968 else
969 {
970 log << MSG::ERROR << "Cannot book N-tuple: FILE101/res" << endmsg;
971 return StatusCode::FAILURE;
972 }
973 }
974#endif
975
976 return sc;
977} // end of bookNTuple()
978
980 MsgStream log( msgSvc(), name() );
981 StatusCode sc;
982 t_mcTkNum = 0;
983 for ( int i = 0; i < 100; i++ )
984 {
985 isPrimaryOfMcTk[i] = -9999;
986 pdgOfMcTk[i] = -9999;
987 }
988 double ptOfMcTk[100] = { 0. };
989 double thetaOfMcTk[100] = { 0. };
990 double phiOfMcTk[100] = { 0. };
991 double nDigiOfMcTk[100] = { 0. };
992 if ( m_mcHist )
993 {
994 //------------------Retrieve MC truth MdcMcHit------------
995 SmartDataPtr<Event::MdcMcHitCol> mcMdcMcHitCol( eventSvc(), "/Event/MC/MdcMcHitCol" );
996 if ( !mcMdcMcHitCol ) { log << MSG::INFO << "Could not find MdcMcHit" << endmsg; }
997 else
998 {
999 Event::MdcMcHitCol::iterator iter_mchit = mcMdcMcHitCol->begin();
1000 for ( ; iter_mchit != mcMdcMcHitCol->end(); iter_mchit++ )
1001 {
1002 const Identifier id = ( *iter_mchit )->identify();
1003 int layer = MdcID::layer( id );
1004 int wire = MdcID::wire( id );
1005 int iMcTk = ( *iter_mchit )->getTrackIndex();
1006 if ( iMcTk < 100 && iMcTk > 0 ) nDigiOfMcTk[iMcTk]++;
1007 mcDrift[layer][wire] = ( *iter_mchit )->getDriftDistance() / 10.; // drift in MC.
1008 // std::cout<<" "<<__FILE__<<" mcDrift "<<mcDrift[layer][wire]<<" "<<std::endl;
1009 mcX[layer][wire] = ( *iter_mchit )->getPositionX() / 10.;
1010 mcY[layer][wire] = ( *iter_mchit )->getPositionY() / 10.;
1011 mcZ[layer][wire] = ( *iter_mchit )->getPositionZ() / 10.;
1012 mcLR[layer][wire] = ( *iter_mchit )->getPositionFlag();
1013 if ( mcLR[layer][wire] == 0 ) mcLR[layer][wire] = -1;
1014 t_nHitInTk[iMcTk]++;
1015 haveDigiAmbig[layer][wire] = mcLR[layer][wire];
1016 haveDigiDrift[layer][wire] = mcDrift[layer][wire];
1017 }
1018 }
1019
1020 //------------------get event start time truth-----------
1021 t_t0Truth = -10.;
1022 SmartDataPtr<Event::McParticleCol> mcParticleCol( eventSvc(), "/Event/MC/McParticleCol" );
1023 if ( !mcParticleCol ) { log << MSG::INFO << "Could not retrieve McParticelCol" << endmsg; }
1024 else
1025 {
1026 int nMcTk = 0;
1027 Event::McParticleCol::iterator it = mcParticleCol->begin();
1028 for ( ; it != mcParticleCol->end(); it++ )
1029 {
1030 // int pdg_code = (*it)->particleProperty();
1031 // if ((fabs(pdg_code)!=211) || (fabs(pdg_code)!=13)) continue;
1032 t_mcTkNum++;
1033 nMcTk++;
1034 }
1035 it = mcParticleCol->begin();
1036 for ( ; it != mcParticleCol->end(); it++ )
1037 {
1038 int tkId = ( *it )->trackIndex();
1039 if ( ( *it )->primaryParticle() )
1040 {
1041 t_t0Truth = ( *it )->initialPosition().t();
1042 isPrimaryOfMcTk[tkId] = 1;
1043 }
1044 else
1045 {
1046 isPrimaryOfMcTk[tkId] = 0;
1047 // continue;
1048 }
1049 // fill charged particle
1050 int pdg_code = ( *it )->particleProperty();
1051 pdgOfMcTk[tkId] = pdg_code;
1052 // std::cout<<" tkId "<<tkId<<" pdg_code "<<pdg_code<<" "<<std::endl;
1053 // FIXME skip charged track and track outside MDC
1054 // if ((fabs(pdg_code)!=211) || (fabs(pdg_code)!=13)) continue;
1055 const CLHEP::Hep3Vector& true_mom = ( *it )->initialFourMomentum().vect();
1056 const CLHEP::HepLorentzVector& posIni = ( *it )->initialPosition();
1057 const CLHEP::HepLorentzVector& posFin = ( *it )->finalPosition();
1058 if ( tkId < 100 && tkId >= 0 )
1059 {
1060 ptOfMcTk[tkId] = true_mom.perp();
1061 thetaOfMcTk[tkId] = ( *it )->initialFourMomentum().theta();
1062 phiOfMcTk[tkId] = ( *it )->initialFourMomentum().phi();
1063 }
1064
1065 if ( m_tupleMcHit )
1066 {
1067 m_tMcPx = true_mom.x();
1068 m_tMcPy = true_mom.y();
1069 m_tMcPz = true_mom.z();
1070 m_tMcD0 = posIni.perp() / 10.;
1071 m_tMcZ0 = posIni.z() / 10.;
1072 m_tMcTheta = ( *it )->initialFourMomentum().theta();
1073 m_tMcFiTerm = posFin.phi();
1074 m_tMcPid = pdg_code;
1075 m_tMcTkId = tkId;
1076 m_tMcNHit = t_nHitInTk[tkId];
1077 m_tupleMcHit->write();
1078 }
1079 } // end of loop mcParticleCol
1080 if ( m_tupleMc )
1081 {
1082 m_tMcNTk = nMcTk;
1083 m_tMcEvtNo = t_eventNo;
1084 m_tupleMc->write();
1085 }
1086 }
1087 } // end of m_mcHist
1088
1089 uint32_t getDigiFlag = 0;
1090 getDigiFlag += m_maxMdcDigi;
1091 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1092 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1093 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1094 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1095 if ( (int)mdcDigiVec.size() < m_minMdcDigi )
1096 { std::cout << " Skip this event for MdcDigiVec.size() < " << m_minMdcDigi << endl; }
1097
1098 if ( mdcDigiVec.size() <= 0 ) return;
1099 // fill raw digi and t0 status
1100 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1101 for ( ; iter != mdcDigiVec.end(); iter++ )
1102 {
1103 long l = MdcID::layer( ( *iter )->identify() );
1104 long w = MdcID::wire( ( *iter )->identify() );
1105 int tkId = ( *iter )->getTrackIndex();
1106 haveDigiTk[l][w] = tkId;
1107 // std::cout<<" l "<<l<<" w "<<w<<" tk "<<tkId<<std::endl;
1108 haveDigiPt[l][w] = ptOfMcTk[( *iter )->getTrackIndex()];
1109 haveDigiTheta[l][w] = thetaOfMcTk[( *iter )->getTrackIndex()];
1110 haveDigiPhi[l][w] = phiOfMcTk[( *iter )->getTrackIndex()];
1111 if ( m_tupleWireEff )
1112 {
1113 m_we_tkId = tkId;
1114 if ( tkId >= 0 )
1115 {
1116 if ( tkId >= 1000 ) tkId -= 1000;
1117 m_we_pdg = pdgOfMcTk[tkId];
1118 m_we_primary = isPrimaryOfMcTk[tkId];
1119 // if(pdgOfMcTk[tkId]==-22) cout<<" primaryParticle ? "<< isPrimaryOfMcTk[tkId]<< "
1120 // tkId "<<tkId <<" layer
1121 // "<<l<<" wire "<<w<<" pdg="<<pdgOfMcTk[tkId]<<endl;
1122 }
1123 else
1124 {
1125 m_we_pdg = -999;
1126 m_we_primary = -999;
1127 }
1128 m_we_layer = l;
1129 m_we_wire = w;
1130 int gwire = w + Constants::nWireBeforeLayer[l];
1131 m_we_gwire = gwire;
1132 m_we_poisoned = hitPoisoned[l][w];
1133 if ( hitInSegList[l][w] > 0 ) m_we_seg = 1;
1134 else m_we_seg = 0;
1135 if ( recHitMap[l][w] > 0 ) m_we_track = 1;
1136 else m_we_track = 0;
1137 if ( l == 35 && tkId >= 0 && abs( pdgOfMcTk[tkId] ) == 11 && hitInSegList[l][w] <= 0 )
1138 {
1139 cout << "layer " << l << " cell " << w << " gwire " << gwire << " inseg "
1140 << hitInSegList[l][w] << endl;
1141 }
1142 m_we_pt = ptOfMcTk[tkId];
1143 m_we_theta = thetaOfMcTk[tkId];
1144 m_we_phi = phiOfMcTk[tkId];
1145 m_tupleWireEff->write();
1146 }
1147 }
1148} // end of fillMcTruth()
1149
1151 if ( 2 == m_flags.segPar.lPrint )
1152 { std::cout << "print after Segment finding " << std::endl; }
1153 if ( !m_flags.lHist ) return;
1154 // Fill hits of every layer after segment finding
1155 for ( int ii = 0; ii < 43; ii++ )
1156 {
1157 for ( int jj = 0; jj < 288; jj++ ) { hitInSegList[ii][jj] = 0; }
1158 }
1159 int nSeg = 0;
1160 for ( int i = 0; i < _gm->nSuper(); i++ )
1161 {
1162 MdcSeg* aSeg = (MdcSeg*)m_segs->oneList( i )->first();
1163 while ( aSeg )
1164 {
1165 nSeg++;
1166 for ( int ihit = 0; ihit < aSeg->nHit(); ihit++ )
1167 {
1168 const MdcHit* hit = aSeg->hit( ihit )->mdcHit();
1169 int layer = hit->layernumber();
1170 int wire = hit->wirenumber();
1171 hitInSegList[layer][wire]++;
1172 }
1173 aSeg = (MdcSeg*)aSeg->next();
1174 }
1175 } // end for slayer
1176 if ( !m_tupleSeg ) return;
1177 m_tsEvtNo = t_eventNo;
1178 m_tsNDigi = t_nDigi;
1179 int iDigi = 0;
1180 for ( int ii = 0; ii < 43; ii++ )
1181 {
1182 for ( int jj = 0; jj < 288; jj++ )
1183 {
1184 if ( haveDigiTk[ii][jj] > -2 )
1185 {
1186 m_tsLayer[iDigi] = ii;
1187 m_tsWire[iDigi] = jj;
1188 m_tsInSeg[iDigi] = hitInSegList[ii][jj];
1189 m_tsMcTkId[iDigi] = haveDigiTk[ii][jj];
1190 iDigi++;
1191 }
1192 }
1193 }
1194 m_tsNSeg = nSeg;
1195 m_tupleSeg->write();
1196} // end of fillSegList
1197
1199 std::cout << "tksize = " << trackList->size() << std::endl; // yzhang debug
1200 RecMdcTrackCol::iterator it = trackList->begin();
1201 for ( ; it != trackList->end(); it++ )
1202 {
1203 RecMdcTrack* tk = *it;
1204 std::cout << endl << "//====RecMdcTrack " << tk->trackId() << "====:" << std::endl;
1205 cout << " d0 " << tk->helix( 0 ) << " phi0 " << tk->helix( 1 ) << " cpa " << tk->helix( 2 )
1206 << " z0 " << tk->helix( 3 ) << " tanl " << tk->helix( 4 ) << endl;
1207 std::cout << " q " << tk->charge() << " theta " << tk->theta() << " phi " << tk->phi()
1208 << " x0 " << tk->x() << " y0 " << tk->y() << " z0 " << tk->z() << " r0 "
1209 << tk->r() << endl;
1210 std::cout << " p " << tk->p() << " pt " << tk->pxy() << " px " << tk->px() << " py "
1211 << tk->py() << " pz " << tk->pz() << endl;
1212 std::cout << " tkStat " << tk->stat() << " chi2 " << tk->chi2() << " ndof " << tk->ndof()
1213 << " nhit " << tk->getNhits() << " nst " << tk->nster() << endl;
1214 std::cout << "errmat mat " << std::endl;
1215 std::cout << tk->err() << std::endl;
1216 // std::cout<< "errmat array " << std::endl;
1217 // for (int i=0; i<15; i++){ std::cout<< " "<<tk->err(i); }
1218 // std::cout<< " " << std::endl;
1219
1220 int nhits = tk->getVecHits().size();
1221 std::cout << nhits << " Hits: " << std::endl;
1222 for ( int ii = 0; ii < nhits; ii++ )
1223 {
1224 Identifier id( tk->getVecHits()[ii]->getMdcId() );
1225 int layer = MdcID::layer( id );
1226 int wire = MdcID::wire( id );
1227 cout << "(" << layer << "," << wire << "," << tk->getVecHits()[ii]->getStat()
1228 << ",lr:" << tk->getVecHits()[ii]->getFlagLR() << ") ";
1229 } // end of hit list
1230 std::cout << " " << std::endl;
1231 } // end of tk list
1232 std::cout << " " << std::endl;
1233} // end of dumpTdsTrack
1234
1236 if ( m_flags.debugFlag() > 1 )
1237 {
1238 std::cout << "=======Print after Track finding=======" << std::endl;
1239 m_tracks->plot();
1240 }
1241
1242 if ( !m_flags.lHist ) return;
1243 //----------- fill hit -----------
1244 int nTk = ( *m_tracks ).nTrack();
1245 for ( int itrack = 0; itrack < nTk; itrack++ )
1246 {
1247 MdcTrack* atrack = ( *m_tracks )[itrack];
1248 if ( atrack == NULL ) continue;
1249 const TrkFit* fitResult = atrack->track().fitResult();
1250 if ( fitResult == 0 ) continue; // check the fit worked
1251
1252 // for fill ntuples
1253 int nSt = 0; // int nSeg=0;
1254 int seg[11] = { 0 };
1255 int segme;
1256 //-----------hit list-------------
1257 const TrkHitList* hitlist = atrack->track().hits();
1258 TrkHitList::hot_iterator hot = hitlist->begin();
1259 int layerCount[43] = { 0 };
1260 for ( int iii = 0; iii < 43; iii++ ) { layerCount[iii] = 0; }
1261 int i = 0;
1262 for ( ; hot != hitlist->end(); hot++ )
1263 {
1264 const MdcRecoHitOnTrack* recoHot;
1265 recoHot = dynamic_cast<const MdcRecoHitOnTrack*>( &( *hot ) );
1266 int layer = recoHot->mdcHit()->layernumber();
1267 int wire = recoHot->mdcHit()->wirenumber();
1268 layerCount[layer]++;
1269 recHitMap[layer][wire]++;
1270 // for n seg
1271 segme = 0;
1272 if ( layer > 0 ) { segme = ( layer - 1 ) / 4; }
1273 seg[segme]++;
1274 if ( recoHot->layer()->view() ) { ++nSt; }
1275
1276 if ( !m_tuple1 ) continue;
1277 m_layer[i] = layer;
1278 m_wire[i] = wire;
1279 m_ambig[i] = recoHot->wireAmbig(); // wire ambig
1280 // fltLen
1281 double fltLen = recoHot->fltLen();
1282 m_fltLen[i] = fltLen;
1283 double tof = recoHot->getParentRep()->arrivalTime( fltLen );
1284 // position
1285 HepPoint3D pos;
1286 Hep3Vector dir;
1287 recoHot->getParentRep()->traj().getInfo( fltLen, pos, dir );
1288 m_x[i] = pos.x();
1289 m_y[i] = pos.y();
1290 m_z[i] = pos.z();
1291 m_driftT[i] = recoHot->mdcHit()->driftTime( tof, pos.z() );
1292 m_tof[i] = tof;
1293 m_driftD[i] = recoHot->drift();
1294 m_sigma[i] = recoHot->hitRms();
1295 m_tdc[i] = recoHot->rawTime();
1296 m_adc[i] = recoHot->mdcHit()->charge();
1297 m_doca[i] = recoHot->dcaToWire(); // sign w.r.t. dirft() FIXME
1298 m_entra[i] = recoHot->entranceAngle();
1299 m_act[i] = recoHot->isActive();
1300 // diff with truth
1301 m_dx[i] = m_x[i] - mcX[layer][wire];
1302 m_dy[i] = m_y[i] - mcY[layer][wire];
1303 m_dz[i] = m_z[i] - mcZ[layer][wire];
1304 m_dDriftD[i] = m_driftD[i] - mcDrift[layer][wire];
1305 m_dlr[i] = m_ambig[i] - mcLR[layer][wire];
1306 // yzhang for pickHits debug
1307 m_cellWidth[i] =
1308 Constants::twoPi * _gm->Layer( layer )->rMid() / _gm->Layer( layer )->nWires();
1309 // zhangy
1310 // resid
1311 double res = 999., rese = 999.;
1312 if ( recoHot->resid( res, rese, false ) ) {}
1313 else {}
1314 m_resid[i] = res;
1315 i++;
1316 } // end fill hit
1317 int nSlay = 0;
1318 for ( int i = 0; i < 11; i++ )
1319 {
1320 if ( seg[i] > 0 ) nSlay++;
1321 }
1322 if ( m_tuple1 )
1323 {
1324 //------------fill track result-------------
1325 m_tkId = itrack;
1326 // track parameters at closest approach to beamline
1327 double fltLenPoca = 0.0;
1328 TrkExchangePar helix = fitResult->helix( fltLenPoca );
1329 m_q = fitResult->charge();
1330 m_phi0 = helix.phi0();
1331 m_tanl = helix.tanDip();
1332 m_z0 = helix.z0();
1333 m_d0 = helix.d0();
1334 m_pt = fitResult->pt();
1335 m_nSlay = nSlay;
1336 if ( m_pt > 0.00001 ) { m_cpa = fitResult->charge() / fitResult->pt(); }
1337 // momenta and position
1338 CLHEP::Hep3Vector p1 = fitResult->momentum( fltLenPoca );
1339 double px, py, pz, pxy;
1340 pxy = fitResult->pt();
1341 px = p1.x();
1342 py = p1.y();
1343 pz = p1.z();
1344 m_p = p1.mag();
1345 m_pz = pz;
1346 HepPoint3D poca = fitResult->position( fltLenPoca );
1347 m_pocax = poca.x();
1348 m_pocay = poca.y();
1349 m_pocaz = poca.z();
1350 m_nAct = fitResult->nActive();
1351 m_nHit = hitlist->nHit();
1352 m_nDof = fitResult->nDof();
1353 m_nSt = nSt;
1354 m_chi2 = fitResult->chisq();
1355 // for (int l=0;l<43;l++) m_layerCount[l] = layerCount[l];
1356 m_t0 = t_t0;
1357 m_t0Stat = t_t0Stat;
1358 m_t0Truth = t_t0Truth;
1359 m_nTdsTk = t_nRecTk;
1360 m_nMcTk = t_mcTkNum;
1361 m_evtNo = t_eventNo;
1362 m_tuple1->write();
1363 }
1364 } // end of loop rec trk list
1365} // end of fillTrackList
1366
1368 if ( m_tupleEvt )
1369 {
1370
1371 uint32_t getDigiFlag = 0;
1372 getDigiFlag += m_maxMdcDigi;
1373 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1374 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1375 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1376 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1377 if ( (int)mdcDigiVec.size() < m_minMdcDigi )
1378 { std::cout << " Skip this event for MdcDigiVec.size() < " << m_minMdcDigi << endl; }
1379
1380 m_t4nDigi = mdcDigiVec.size();
1381 int iDigi = 0;
1382 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1383 for ( ; iDigi < m_t4nDigi; iter++ )
1384 {
1385 double tdc = RawDataUtil::MdcTime( ( *iter )->getTimeChannel() );
1386 double adc = RawDataUtil::MdcCharge( ( *iter )->getChargeChannel() );
1387 m_t4Time[iDigi] = tdc;
1388 m_t4Charge[iDigi] = adc;
1389 long l = MdcID::layer( ( *iter )->identify() );
1390 long w = MdcID::wire( ( *iter )->identify() );
1391 m_t4Layer[iDigi] = l;
1392 m_t4Wire[iDigi] = w;
1393 m_t4PhiMid[iDigi] = _gm->Layer( l )->phiWire( w );
1394 m_t4Hot[iDigi] = recHitMap[l][w];
1395 iDigi++;
1396 }
1397 m_t4t0 = t_t0;
1398 m_t4t0Stat = t_t0Stat;
1399 m_t4t0Truth = t_t0Truth;
1400 m_t4EvtNo = t_eventNo;
1401 m_t4nRecTk = t_nRecTk;
1402 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc(), "/Event/Digi/MdcDigiCol" );
1403 if ( mdcDigiCol ) { m_t4nDigiUnmatch = mdcDigiCol->size(); }
1404 m_t4nMcTk = t_mcTkNum;
1405 m_tupleEvt->write();
1406 }
1407} // end of fillEvent
1408
1410 uint32_t getDigiFlag = 0;
1411 getDigiFlag += m_maxMdcDigi;
1412 if ( m_dropHot ) getDigiFlag |= MdcRawDataProvider::b_dropHot;
1413 if ( m_keepBadTdc ) getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
1414 if ( m_keepUnmatch ) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
1415 MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec( getDigiFlag );
1416 MdcDigiCol::iterator iter = mdcDigiVec.begin();
1417 std::cout << name() << " dump MdcDigiVec, nDigi=" << mdcDigiVec.size() << std::endl;
1418 for ( int iDigi = 0; iter != mdcDigiVec.end(); iter++, iDigi++ )
1419 {
1420 long l = MdcID::layer( ( *iter )->identify() );
1421 long w = MdcID::wire( ( *iter )->identify() );
1422 int tkTruth = ( *iter )->getTrackIndex();
1423 double tdc = RawDataUtil::MdcTime( ( *iter )->getTimeChannel() );
1424 double adc = RawDataUtil::MdcCharge( ( *iter )->getChargeChannel() );
1425 std::cout << "(" << l << "," << w << ";" << tkTruth << ",t " << tdc << ",c " << adc << ")";
1426 if ( iDigi % 4 == 0 ) std::cout << std::endl;
1427 }
1428 std::cout << std::endl;
1429}
double p1[4]
DECLARE_COMPONENT(BesBdkRc)
double w
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
NTuple::Array< long > m_tsLayer
int recHitMap[43][288]
NTuple::Array< double > m_entra
NTuple::Array< long > m_tsMcTkId
NTuple::Item< double > g_findSegMc
NTuple::Tuple * m_tupleMcHit
NTuple::Tuple * m_tupleSeg
NTuple::Item< double > m_t4nMcTk
NTuple::Array< double > m_tMcLR
NTuple::Array< double > m_adc
NTuple::Item< long > m_tsNDigi
NTuple::Item< double > g_combAxMcPt
NTuple::Item< long > m_tMcNHit
NTuple::Item< double > g_combAxSlTest
NTuple::Array< double > m_dDriftD
NTuple::Array< double > m_dz
NTuple::Array< double > m_ambig
NTuple::Array< long > m_pickIs2D
NTuple::Item< double > m_tMcEvtNo
NTuple::Item< double > m_nSt
NTuple::Item< long > m_we_poisoned
NTuple::Item< double > m_we_pt
NTuple::Item< double > g_combAxQualitySeed
NTuple::Array< long > m_t4Layer
NTuple::Item< double > g_combAxPatSeed
NTuple::Item< double > m_nSlay
NTuple::Item< long > m_tMcTkId
NTuple::Item< long > m_t4nDigi
NTuple::Array< double > m_pickPt
NTuple::Tuple * g_tupleFindSeg
NTuple::Item< long > m_pickLayer
NTuple::Item< double > m_pocax
NTuple::Item< double > m_tMcPz
NTuple::Array< long > m_pickMcTk
NTuple::Array< double > m_dlr
NTuple::Item< double > g_combAxMcAmbigTest
NTuple::Item< int > g_findSegPat34
NTuple::Item< double > m_p
NTuple::Item< double > g_findSegAmbig
NTuple::Item< long > m_tMcNTk
NTuple::Item< int > g_findSegPat
NTuple::Array< long > m_tsWire
AIDA::IHistogram1D * g_pickHitWire
NTuple::Item< long > m_pickNCellWithDigi
NTuple::Array< double > m_tof
NTuple::Array< double > m_tMcWire
NTuple::Item< double > m_we_phi
AIDA::IHistogram1D * g_delCt
AIDA::IHistogram1D * g_phiDiff
NTuple::Array< double > m_pickPhiLowCut
int haveDigiTk[43][288]
NTuple::Array< double > m_doca
NTuple::Item< double > m_tMcPx
NTuple::Item< double > g_findSegChi2Refit
NTuple::Item< double > m_phi0
NTuple::Item< long > m_tw
NTuple::Item< double > m_nDof
NTuple::Array< double > m_tdc
NTuple::Item< long > m_t4EvtNo
NTuple::Item< double > m_tMcPy
double haveDigiDrift[43][288]
NTuple::Item< long > m_we_layer
NTuple::Tuple * m_tupleWireEff
NTuple::Item< double > m_tdncell
NTuple::Array< double > m_tMcZ
NTuple::Array< long > m_t4Wire
NTuple::Array< double > m_pickDriftCut
NTuple::Item< double > m_z0
int haveDigiAmbig[43][288]
NTuple::Item< long > m_nHit
NTuple::Item< double > m_tMcTheta
NTuple::Item< double > g_findSegIntercept
double haveDigiPhi[43][288]
AIDA::IHistogram1D * g_nSigAdd
NTuple::Item< double > m_tdphi
NTuple::Array< double > m_act
NTuple::Item< long > m_we_primary
NTuple::Item< double > m_pz
NTuple::Array< double > m_tMcX
NTuple::Array< double > m_wire
NTuple::Item< double > m_pocay
NTuple::Item< double > m_tMcZ0
NTuple::Item< long > m_we_seg
NTuple::Array< double > m_t4Charge
NTuple::Item< double > m_evtNo
NTuple::Item< long > m_we_tkId
NTuple::Item< double > m_d0
NTuple::Array< double > m_pickCurv
NTuple::Item< double > m_we_theta
NTuple::Item< long > m_we_track
NTuple::Array< double > m_resid
NTuple::Array< double > m_pickDrift
NTuple::Item< long > m_tMcPid
NTuple::Item< long > m_we_pdg
NTuple::Array< double > m_tMcY
NTuple::Item< double > m_tMcD0
NTuple::Item< double > m_t4t0
double haveDigiTheta[43][288]
NTuple::Array< double > m_z
AIDA::IHistogram1D * g_delZ0
AIDA::IHistogram1D * g_z0Cut
NTuple::Array< double > m_pickResid
NTuple::Array< int > m_pickPhizOk
NTuple::Item< long > m_we_wire
NTuple::Item< double > m_t4nRecTk
NTuple::Item< double > m_q
AIDA::IHistogram2D * g_residVsLayer
NTuple::Array< double > m_x
NTuple::Item< double > g_combAxMcTheta
AIDA::IHistogram1D * g_cirTkChi2
AIDA::IHistogram1D * g_maxSegChisqSt
NTuple::Item< long > m_tsNSeg
NTuple::Item< double > g_findSegChi2
NTuple::Item< double > g_combAxQualityTest
AIDA::IHistogram1D * h_sfHit
NTuple::Item< double > m_chi2
NTuple::Item< double > m_t0
NTuple::Array< double > m_pickSigma
AIDA::IHistogram1D * g_3dTkChi2
NTuple::Item< long > m_t4t0Stat
NTuple::Item< double > g_combAxNhitTest
AIDA::IHistogram2D * g_residVsDoca
NTuple::Item< double > g_combAxSigPhi0
NTuple::Item< double > m_nTdsTk
NTuple::Item< double > m_tphi
NTuple::Item< double > g_combAxdCurv
NTuple::Array< long > m_pickWire
NTuple::Item< double > m_pocaz
NTuple::Array< double > m_tMcDrift
NTuple::Tuple * m_tupleEvt
NTuple::Item< double > g_findSegChi2Add
NTuple::Array< double > m_cellWidth
NTuple::Tuple * m_tuplePick
NTuple::Item< double > m_nMcTk
NTuple::Array< double > m_pickDriftTruth
NTuple::Item< double > g_findSegSlope
NTuple::Item< double > g_combAxSigCurv
NTuple::Array< double > m_driftT
NTuple::Item< double > m_tMcFiTerm
NTuple::Item< long > m_tl
NTuple::Array< double > m_dx
NTuple::Array< long > m_tsInSeg
NTuple::Array< double > m_dy
NTuple::Tuple * m_tuple1
NTuple::Item< double > m_t4t0Truth
double haveDigiPt[43][288]
NTuple::Item< double > m_t0Truth
NTuple::Item< double > g_combAxdPhi0
NTuple::Array< double > m_pickZ
AIDA::IHistogram1D * g_slopeDiff
NTuple::Array< double > m_pickPredDrift
NTuple::Array< double > m_tMcLayer
NTuple::Item< int > g_findSegSl
NTuple::Array< double > m_t4PhiMid
NTuple::Array< double > m_layer
NTuple::Item< double > m_pt
NTuple::Item< double > m_cpa
NTuple::Array< double > m_driftD
NTuple::Item< double > m_tanl
NTuple::Item< double > m_t0Stat
NTuple::Array< double > m_sigma
NTuple::Item< double > g_combAxPatTest
NTuple::Item< double > g_combAxNhitSeed
NTuple::Item< double > m_nAct
NTuple::Item< double > g_combAxMc
NTuple::Item< long > m_we_gwire
NTuple::Item< long > m_t4nDigiUnmatch
NTuple::Array< double > m_y
AIDA::IHistogram1D * g_maxSegChisqAx
AIDA::IHistogram1D * g_ctCut
NTuple::Array< double > m_t4Time
NTuple::Item< double > g_combAxSlSeed
NTuple::Tuple * g_tupleCombAx
NTuple::Tuple * m_tupleMc
NTuple::Item< long > m_pickNCell
NTuple::Item< double > g_combAxMcAmbigSeed
NTuple::Item< long > m_tsEvtNo
NTuple::Item< double > g_combAxMcPhi
NTuple::Array< double > m_fltLen
NTuple::Array< double > m_pickPhiHighCut
NTuple::Item< double > m_tkId
NTuple::Tuple * m_tuplet
NTuple::Array< double > m_t4Hot
NTuple::Item< int > g_findSegNhit
INTupleSvc * ntupleSvc()
IHistogramSvc * histoSvc()
IMessageSvc * msgSvc()
const HepSymMatrix err() const
const HepVector helix() const
......
static MdcDetector * instance()
int wireAmbig() const
double rawTime() const
double dcaToWire() const
double entranceAngle() const
const MdcLayer * layer() const
const MdcHit * mdcHit() const
Definition MdcHitUse.cxx:62
double driftTime(double tof, double z) const
Definition MdcHit.cxx:142
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
Definition MdcID.cxx:47
static int wire(const Identifier &id)
Definition MdcID.cxx:52
const MdcHit * mdcHit() const
int nHit() const
Definition MdcSeg.cxx:372
StatusCode bookNTuple()
StatusCode finalize()
void dumpTdsTrack(RecMdcTrackCol *trackList)
StatusCode execute()
void fillTrackList()
StatusCode initialize()
bool ignoringUsedHits() const
Definition MdcTrkRecon.h:42
StatusCode beginRun()
MdcTrkRecon(const std::string &name, ISvcLocator *pSvcLocator)
bool poisoningHits() const
Definition MdcTrkRecon.h:43
void fillMcTruth()
static void readMCppTable(std::string filenm)
static double MdcTime(int timeChannel)
static double MdcCharge(int chargeChannel)
virtual void getInfo(double fltLen, HepPoint3D &pos, Hep3Vector &direction) const =0
virtual Hep3Vector momentum(double fltL=0.) const =0
virtual double pt(double fltL=0.) const =0
virtual double chisq() const =0
virtual int charge() const =0
virtual int nDof() const =0
virtual const TrkDifTraj & traj() const =0
virtual HepPoint3D position(double fltL) const =0
virtual int nActive() const =0
virtual TrkExchangePar helix(double fltL) const =0
double resid(bool exclude=false) const
const TrkFit * fitResult() const
virtual double arrivalTime(double fltL) const
Definition TrkRep.cxx:158