68 ISvcLocator* svcLocator = Gaudi::svcLocator();
70 StatusCode sc = svcLocator->service(
"TofCaliSvc",
tofCaliSvc );
71 if ( sc != StatusCode::SUCCESS )
72 { cout <<
"TofEnergyRec Get Calibration Service Failed !! " << endl; }
75 sc = svcLocator->service(
"TofQCorrSvc",
tofQCorrSvc );
76 if ( sc != StatusCode::SUCCESS )
77 { cout <<
"TofEnergyRec Get QCorr Service Failed !! " << endl; }
80 sc = svcLocator->service(
"TofQElecSvc",
tofQElecSvc );
81 if ( sc != StatusCode::SUCCESS )
82 { cout <<
"TofEnergyRec Get QElec Service Failed !! " << endl; }
85 sc = svcLocator->service(
"TofEnergyCalibSvc", m_TofEnergyCalibSvc );
86 if ( sc != StatusCode::SUCCESS ) { cout <<
"can not use TofEnergyCalibSvc" << endmsg; }
101 vector<TofData*>::iterator it;
102 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
121 if ( ( *it )->barrel() )
126 if ( bTofData->
tdc1() <= 0 || bTofData->
tdc1() > 8000 || bTofData->
tdc2() <= 0 ||
127 bTofData->
tdc2() > 8000 )
130 double adc1, adc2, tdc1, tdc2;
131 tdc1 = bTofData->
tdc1();
132 tdc2 = bTofData->
tdc2();
133 adc1 = bTofData->
adc1();
134 adc2 = bTofData->
adc2();
138 if ( fabs( zpos ) > 115 )
continue;
140 if ( tofq < 100 || tofq > 10000 )
continue;
151 CalibPar[0] = m_TofEnergyCalibSvc->
getPara1();
152 CalibPar[1] = m_TofEnergyCalibSvc->
getPara2();
153 CalibPar[2] = m_TofEnergyCalibSvc->
getPara3();
154 CalibPar[3] = m_TofEnergyCalibSvc->
getPara4();
155 CalibPar[4] = m_TofEnergyCalibSvc->
getPara5();
157 double TofEnCalibConst = CalibPar[0] + CalibPar[1] * zpos +
158 CalibPar[2] * pow( zpos, 2 ) + CalibPar[3] * pow( zpos, 3 ) +
159 CalibPar[4] * pow( zpos, 4 );
160 double energy = tofq * TofEnCalibConst;
174 m_adc1 = bTofData->
adc1();
175 m_adc2 = bTofData->
adc2();
176 m_tdc1 = bTofData->
tdc1();
177 m_tdc2 = bTofData->
tdc2();
200 if ( barrel_ec != 3 || ( endcap != 0 && endcap != 1 ) )
202 cout <<
"TofEnergyRec Get ETF(MRPC) data ERROR !! barrel_ec:" << barrel_ec
203 <<
" endcap:" << endcap << endl;
217 if ( etfData->
tdc1() <= 0 || etfData->
tdc1() > 8000 || etfData->
tdc2() <= 0 ||
218 etfData->
tdc2() > 8000 )
221 double adc1, adc2, tdc1, tdc2;
222 tdc1 = etfData->
tdc1();
223 tdc2 = etfData->
tdc2();
224 adc1 = etfData->
adc1();
225 adc2 = etfData->
adc2();
229 if ( fabs( zpos ) > 115 )
continue;
231 if ( tofq < 100 || tofq > 10000 )
continue;
233 double energy = tofq * m_calibConst;
246 m_adc1 = etfData->
adc1();
247 m_adc2 = etfData->
adc2();
248 m_tdc1 = etfData->
tdc1();
249 m_tdc2 = etfData->
tdc2();
260 vector<int> NeighborVec;
261 vector<Identifier> NeighborIdVec;
263 NeighborIdVec.clear();
272 if ( barrel_ec == 1 )
274 int num = im + layer * 88;
279 NeighborVec.push_back( 1 );
280 NeighborVec.push_back( 87 );
281 NeighborVec.push_back( 88 );
282 NeighborVec.push_back( 89 );
284 else if (
num == 87 )
286 NeighborVec.push_back( 0 );
287 NeighborVec.push_back( 86 );
288 NeighborVec.push_back( 88 );
289 NeighborVec.push_back( 175 );
293 NeighborVec.push_back(
num + 1 );
294 NeighborVec.push_back(
num - 1 );
295 NeighborVec.push_back(
num + 88 );
296 NeighborVec.push_back(
num + 88 + 1 );
303 NeighborVec.push_back( 89 );
304 NeighborVec.push_back( 175 );
305 NeighborVec.push_back( 0 );
306 NeighborVec.push_back( 87 );
308 else if (
num == 175 )
310 NeighborVec.push_back( 88 );
311 NeighborVec.push_back( 174 );
312 NeighborVec.push_back( 86 );
313 NeighborVec.push_back( 87 );
317 NeighborVec.push_back(
num + 1 );
318 NeighborVec.push_back(
num - 1 );
319 NeighborVec.push_back(
num - 88 );
320 NeighborVec.push_back(
num - 88 - 1 );
324 int size = NeighborVec.size();
325 for (
int i = 0; i < size; i++ )
327 layer = NeighborVec[i] / 88;
328 im = NeighborVec[i] % 88;
329 NeighborIdVec.push_back(
TofID::cell_id( barrel_ec, layer, im, end ) );
337 NeighborVec.push_back( 1 );
338 NeighborVec.push_back( 47 );
342 NeighborVec.push_back( 0 );
343 NeighborVec.push_back( 46 );
347 NeighborVec.push_back( im - 1 );
348 NeighborVec.push_back( im + 1 );
351 int size = NeighborVec.size();
352 for (
int i = 0; i < size; i++ )
355 NeighborIdVec.push_back(
TofID::cell_id( barrel_ec, layer, im, end ) );
369 NeighborVec.push_back( 1 );
370 NeighborVec.push_back( 35 );
372 else if ( module == 35 )
374 NeighborVec.push_back( 0 );
375 NeighborVec.push_back( 34 );
378 NeighborVec.push_back( module - 1 );
379 NeighborVec.push_back( module + 1 );
382 int size = NeighborVec.size();
383 for (
int i = 0; i < size; i++ )
385 int im = NeighborVec[i];
386 for (
int j = -2; j < 3; j++ )
389 if ( ist < 0 || ist > 11 )
continue;
390 NeighborIdVec.push_back(
TofID::cell_id( barrel_ec, endcap, module, ist, end ) );
395 return NeighborIdVec;
399 vector<Identifier> NeighborVec, tmpNeighborVec, tmpNextNeighborVec;
400 vector<Identifier>::iterator ci_NV, ci_tmpNV, ci_tmpNNV;
404 bool flagNeighbor =
false;
407 for ( ci_tmpNV = tmpNeighborVec.begin(); ci_tmpNV != tmpNeighborVec.end(); ci_tmpNV++ )
411 for ( ci_tmpNNV = tmpNextNeighborVec.begin(); ci_tmpNNV != tmpNextNeighborVec.end();
415 for ( ci_NV = NeighborVec.begin(); ci_NV != NeighborVec.end(); ci_NV++ )
417 if ( *ci_tmpNNV == *ci_NV )
435 if ( *ci_tmpNNV ==
id ) flagNeighbor =
true;
437 if ( !flagNeighbor ) NeighborVec.push_back( *ci_tmpNNV );
438 else flagNeighbor =
false;
453 vector<TofData*>::iterator it;
454 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
457 if ( !( ( *it )->is_mrpc() ) )
459 if ( ( *it )->barrel() )
466 if ( bTofData->
energy() < 5. )
continue;
469 vector<Identifier> NeighborVec =
477 vector<Identifier>::iterator iNeigh;
478 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
485 vector<TofData*>::iterator it2;
486 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
488 if ( ( *it2 )->identify() == *iNeigh )
502 if ( eTofData->
energy() < 5. )
continue;
504 vector<Identifier> NeighborVec =
506 vector<Identifier>::iterator iNeigh;
507 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
509 vector<TofData*>::iterator it2;
510 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
512 if ( ( *it2 )->identify() == *iNeigh )
526 if ( etfData->
energy() < 2. )
continue;
529 vector<Identifier>::iterator iNeigh;
530 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
534 vector<TofData*>::iterator it2;
535 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
537 if ( ( *it2 )->identify() == *iNeigh )
548 if (
max ) { m_seedVec.push_back(
Identifier( ( *it )->identify() ) ); }
561 vector<Identifier>::iterator iSeed;
563 for ( iSeed = m_seedVec.begin(); iSeed != m_seedVec.end(); iSeed++ )
578 RecTofTrackCol::iterator iTrack, iMatch;
579 for ( iTrack = recTofTrackCol->begin(); iTrack != recTofTrackCol->end(); iTrack++ )
582 status->
setStatus( ( *iTrack )->status() );
583 if ( barrel_ec == 1 && status->
is_barrel() )
585 dphi =
abs( im - ( *iTrack )->tofID() );
586 dphi = dphi >= 44 ? 88 - dphi : dphi;
588 else if ( barrel_ec == 2 && !( status->
is_barrel() ) && ( ( *iTrack )->tofID() > 47 ) )
590 dphi =
abs( im - ( *iTrack )->tofID() + 48 );
591 dphi = dphi >= 24 ? 48 - dphi : dphi;
593 else if ( barrel_ec == 0 && !( status->
is_barrel() ) && ( ( *iTrack )->tofID() < 48 ) )
595 dphi =
abs( im - ( *iTrack )->tofID() );
596 dphi = dphi >= 24 ? 48 - dphi : dphi;
598 if (
abs( dphi ) <= 2 )
613 vector<TofData*>::iterator it;
614 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
616 if ( ( *it )->identify() == *iSeed )
619 if ( ( *it )->barrel() )
622 zpos += bTofData->
zpos() * bTofData->
energy();
624 seedPos = bTofData->
zpos();
642 vector<Identifier>::iterator iNeigh;
643 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
646 vector<TofData*>::iterator it2;
647 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
649 if ( ( *it2 )->identify() == *iNeigh )
652 if ( ( *it )->barrel() )
656 if ( fabs( bTofData2->
zpos() ) > 2 )
continue;
659 m_seed_dist = seedPos - bTofData2->
zpos();
662 if ( fabs( seedPos - bTofData2->
zpos() ) > 0.3 )
continue;
663 zpos += bTofData2->
zpos() * bTofData2->
energy();
681 if ( neutral ==
false )
683 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
684 { ( *iMatch )->setEnergy(
energy / 1000 ); }
689 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
698 recTofTrackCol->push_back( tof );
702 m_shower_part = barrel_ec;
703 m_shower_layer = layer;
705 m_shower_zpos = zpos;
725 int dphi = 999, dtheta = 999;
726 RecTofTrackCol::iterator iTrack, iMatch;
727 for ( iTrack = recTofTrackCol->begin(); iTrack != recTofTrackCol->end(); iTrack++ )
730 status->
setStatus( ( *iTrack )->status() );
731 if ( barrel_ec == 3 && endcap == 0 && ( ( *iTrack )->tofID() < 36 ) )
733 dphi =
abs( im - ( *iTrack )->tofID() );
734 dphi = dphi >= 18 ? 36 - dphi : dphi;
735 dtheta =
abs( strip -
int( status->
layer() ) );
737 else if ( barrel_ec == 3 && endcap == 1 && ( ( *iTrack )->tofID() > 35 ) )
739 dphi =
abs( im - ( *iTrack )->tofID() + 36 );
740 dphi = dphi >= 18 ? 36 - dphi : dphi;
741 dtheta =
abs( strip -
int( status->
layer() ) );
743 if ( (
abs( dphi ) == 0 &&
abs( dtheta ) <= 2 ) ||
744 (
abs( dphi ) == 1 &&
abs( dtheta ) <= 1 ) )
759 vector<TofData*>::iterator it;
760 for ( it = tofDataVec.begin(); it != tofDataVec.end(); it++ )
762 if ( ( *it )->identify() == *iSeed )
767 seedPos = etfData->
zpos();
773 vector<Identifier>::iterator iNeigh;
774 for ( iNeigh = NeighborVec.begin(); iNeigh != NeighborVec.end(); iNeigh++ )
776 vector<TofData*>::iterator it2;
777 for ( it2 = tofDataVec.begin(); it2 != tofDataVec.end(); it2++ )
779 if ( ( *it )->barrel() )
continue;
780 if ( ( *it2 )->identify() == *iNeigh )
783 if ( fabs( etfData2->
zpos() ) > 2 )
continue;
786 m_seed_dist = seedPos - etfData2->
zpos();
789 if ( fabs( seedPos - etfData2->
zpos() ) > 0.3 )
continue;
790 zpos += etfData2->
zpos() * etfData2->
energy();
802 if ( neutral ==
false )
804 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
805 { ( *iMatch )->setEnergy(
energy / 1000 ); }
810 if ( fabs( zpos ) < 1.15 &&
energy > 5. &&
energy < 1000 )
819 recTofTrackCol->push_back( tof );
823 m_shower_part = barrel_ec;
824 m_shower_layer = strip;
826 m_shower_zpos = zpos;