12#include "TofCaliSvc/TofCaliSvc.h"
13#include "TofCaliSvc/BTofCal.h"
14#include "TofCaliSvc/BTofCommonCal.h"
15#include "TofCaliSvc/ETofCal.h"
16#include "TofCaliSvc/EtfCal.h"
17#include "TofCaliSvc/EtfBunchCal.h"
18#include "TofCaliSvc/TofInfoCal.h"
19#include "GaudiKernel/Kernel.h"
20#include "GaudiKernel/IInterface.h"
21#include "GaudiKernel/StatusCode.h"
22#include "GaudiKernel/SvcFactory.h"
23#include "GaudiKernel/MsgStream.h"
28#include "GaudiKernel/IIncidentSvc.h"
29#include "GaudiKernel/Incident.h"
30#include "GaudiKernel/IIncidentListener.h"
31#include "GaudiKernel/IDataProviderSvc.h"
32#include "GaudiKernel/Service.h"
33#include "GaudiKernel/MsgStream.h"
34#include "GaudiKernel/SmartDataPtr.h"
35#include "CalibData/Tof/TofCalibData.h"
36#include "CalibData/Tof/bTofCalibBase.h"
37#include "CalibData/CalibModel.h"
38#include "GaudiKernel/DataSvc.h"
46 declareProperty(
"Run",m_run=1);
51 if ( IID_ITofCaliSvc.versionMatch(riid) ) {
54 return Service::queryInterface(riid, ppvInterface) ;
56 return StatusCode::SUCCESS;
60 m_hasbeeninitialized=
false;
63 MsgStream log(
msgSvc(), name());
64 log << MSG::INFO << name() <<
": Start of run initialisation" << endreq;
66 StatusCode sc = Service::initialize();
67 if ( sc.isFailure() )
return sc;
70 sc = service(
"IncidentSvc", incsvc);
73 incsvc -> addListener(
this,
"NewRun", priority);
78 log<<MSG::INFO <<
"setProperties()" << endreq;
79 scc = service(
"CalibDataSvc", m_pCalibDataSvc,
true);
80 if ( !scc.isSuccess() ) {
81 log<<MSG::ERROR<<
"Could not get IDataProviderSvc interface of CalibXmlCnvSvc"<<endreq;
84 log << MSG::DEBUG<<
"Retrieved IDataProviderSvc interface of CalibXmlCnvSvc"<<endreq;
87 scc = setProperties();
93 MsgStream log(
msgSvc(), name());
94 log << MSG::INFO << name() <<
": End of Run" << endreq;
95 return StatusCode::SUCCESS;
99 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) {
delete (*it1); }
101 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) {
delete (*it2); }
104 if( fEtfCal.size()!=0 ) {
105 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) {
delete (*it5); }
108 if( fEtfBunchCal.size()!=0 ) {
109 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) {
delete (*it6); }
110 fEtfBunchCal.clear();
112 for(vector<BTofCommonCal*>::iterator it3 = fBTofCommonCal.begin(); it3 != fBTofCommonCal.end(); it3++) {
delete (*it3); }
113 fBTofCommonCal.clear();
114 for(vector<TofInfoCal*>::iterator it4 = fTofInfoCal.begin(); it4 != fTofInfoCal.end(); it4++) {
delete (*it4); }
119StatusCode TofCaliSvc::FillfromDatabase(){
121 MsgStream log(
msgSvc(), name());
122 std::string fullPath =
"/Calib/TofCal";
123 log << MSG::INFO<<
" Tof calib fullPath = "<<fullPath<< endreq;
125 SmartDataPtr<CalibData::TofCalibData>
test(m_pCalibDataSvc, fullPath);
127 log << MSG::FATAL <<
"TofCaliSvc could not find TofCalibData in TCDS!!" << endreq;
128 return StatusCode::FAILURE;
131 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) {
delete (*it1); }
133 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) {
delete (*it2); }
135 if( fEtfCal.size()!=0 ) {
136 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) {
delete (*it5); }
139 if( fEtfBunchCal.size()!=0 ) {
140 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) {
delete (*it6); }
141 fEtfBunchCal.clear();
143 for(vector<BTofCommonCal*>::iterator it3 = fBTofCommonCal.begin(); it3 != fBTofCommonCal.end(); it3++) {
delete (*it3); }
144 fBTofCommonCal.clear();
145 for(vector<TofInfoCal*>::iterator it4 = fTofInfoCal.begin(); it4 != fTofInfoCal.end(); it4++) {
delete (*it4); }
148 unsigned int ibSize =
test->getBTofSize();
149 unsigned int ibcomSize =
test->getBTofComSize();
150 unsigned int ieSize =
test->getETofSize();
151 unsigned int ietfSize =
test->getEtfSize();
152 ietfSize = ietfSize/12;
153 unsigned int ietfBSize =
test->getEtfBunchSize();
154 unsigned int iinfoSize =
test->getTofInfoSize();
156 for(
int ib=0;ib<ibSize;ib++){
158 for(
int j=0; j<static_cast<int>(
nBarAtten); j++ ) {
161 for(
int j=0; j<static_cast<int>(
nBarSpeed); j++ ) {
164 for(
int j=0; j<static_cast<int>(
nBarPar); j++){
166 btof->
setP2(j,
test->getBTofPright(ib,j));
168 for(
int j=0; j<static_cast<int>(
nBarParOff); j++){
178 for(
int j=0; j<static_cast<int>(
nBarSigma); j++){
182 for(
int j=0; j<static_cast<int>(
nBarSigCnt); j++){
186 fBTofCal.push_back(btof);
189 for(
int ie=0;ie<ieSize;ie++){
191 for(
int j=0; j<static_cast<int>(
nEndAtten); j++ ) {
194 for(
int j=0; j<static_cast<int>(
nEndSpeed); j++ ) {
197 for(
int j=0; j<static_cast<int>(
nEndPar); j++ ) {
200 for(
int j=0; j<static_cast<int>(
nEndSigma); j++ ) {
203 fETofCal.push_back(etof);
206 for(
int ietf=0;ietf<ietfSize;ietf++) {
207 for(
int jetf=0;jetf<12;jetf++) {
209 for(
int k=0; k<static_cast<int>(
nEtfSpeed); k++ ) {
212 for(
int k=0; k<static_cast<int>(
nEtfPar); k++ ) {
213 etf->
setP( k,
test->getEtfPcombine(ietf,jetf,k));
214 etf->
setP1(k,
test->getEtfPleft(ietf,jetf,k));
215 etf->
setP2(k,
test->getEtfPright(ietf,jetf,k));
217 fEtfCal.push_back(etf);
221 for(
int ietfb=0;ietfb<ietfBSize;ietfb++ ) {
223 for(
int k=0; k<static_cast<int>(
nEtfBunch); k++ ) {
226 fEtfBunchCal.push_back(etfbunch);
229 for(
int ibcom=0; ibcom<ibcomSize; ibcom++ ) {
231 for(
int j=0; j<static_cast<int>(
nBarOffset); j++) {
234 for(
int j=0; j<static_cast<int>(
nBarSigCor); j++) {
237 fBTofCommonCal.push_back(bcomtof);
241 for(
int iinfo=0; iinfo<iinfoSize; iinfo++ ) {
249 for(
unsigned int j=0; j<5; j++ ) {
252 if( (
test->getVersion(iinfo))<=8 ) {
256 tofinfo->
setEtf( j,
test->getEndcap(iinfo, j) );
263 fTofInfoCal.push_back(tofinfo);
266 return StatusCode::SUCCESS;
272 MsgStream log(
msgSvc(), name());
276 unsigned int inumber = 0;
278 std::vector<TofInfoCal*>::iterator it = fTofInfoCal.begin();
279 if( (*it)->getRunFrom() == -1 ) {
280 if( fTofInfoCal.size() == 1 ) {
281 log << MSG::INFO <<
"TofCaliSvc::chooseConstants() -- Run From is equal to -1! The ONLY TOF calibration constants are used!" << endreq;
282 return StatusCode::SUCCESS;
285 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- Run From is equal to -1! The NUMBER of calibration constants are NOT equal to 1!" << endreq;
286 return StatusCode::FAILURE;
290 for( ; it!= fTofInfoCal.end(); it++, inumber++ ) {
291 if( ( (*it)->getRunTo() != -1 ) && ( (*it)->getRunTo() < (*it)->getRunFrom() ) ) {
292 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- The " << inumber <<
"th calibration constatns is ABNORMAL! Run From is LARGER than RUN To!" << endreq;
293 return StatusCode::FAILURE;
295 if( ( (*it)->getRunFrom() == (*it)->getRunTo() ) && ( (*it)->getEventFrom() != -1 ) && ( (*it)->getEventTo() != -1 ) && ( (*it)->getEventFrom() > (*it)->getEventTo() ) ) {
296 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- The " << inumber <<
"th calibration constatns is ABNORMAL! Event From is LARGER than Event To!" << endreq;
297 return StatusCode::FAILURE;
301 it = fTofInfoCal.begin();
303 for( ; it!= fTofInfoCal.end(); it++, inumber++ ) {
304 int runFrom = (*it)->getRunFrom();
305 int runTo = (*it)->getRunTo();
306 int eventFrom = (*it)->getEventFrom();
307 int eventTo = (*it)->getEventTo();
308 if( ( run == runFrom ) && ( ( eventFrom == -1 ) || ( event >= eventFrom ) ) ) {
309 if( ( run < runTo ) || ( ( run == runTo ) && ( ( eventTo == -1 ) || ( event <= eventTo ) ) ) ) {
314 if( run > runFrom ) {
315 if( ( run < runTo ) || ( ( run == runTo ) && ( ( eventTo == -1 ) || ( event <= eventTo ) ) ) ) {
323 m_sequence = inumber;
324 return StatusCode::SUCCESS;
327 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- The event with run number " << run <<
" and event number " <<
event <<
" is NOT suitable for this group of calibration constants" << endreq;
328 return StatusCode::FAILURE;
331 return StatusCode::SUCCESS;
338 tdelay = fBTofCal[176*m_sequence+id]->getP1(0);
341 MsgStream log(
msgSvc(), name());
342 log<<MSG::ERROR<<
"TofCaliSvc::BTDelay1() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
351 tdelay = fBTofCal[176*m_sequence+id]->getP2(0);
354 MsgStream log(
msgSvc(), name());
355 log<<MSG::ERROR<<
"TofCaliSvc::BTDelay2() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
364 tdelay = fETofCal[96*m_sequence+id]->getP(0);
367 MsgStream log(
msgSvc(), name());
368 log<<MSG::ERROR<<
"TofCaliSvc::ETDelay() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
375 MsgStream log(
msgSvc(), name());
378 for(
int i=0; i<static_cast<int>(
nBarPar); i++ ) {
379 p1[i]=fBTofCal[176*m_sequence+id]->getP1(i);
382 log << MSG::DEBUG <<
"BTCorr1 id =" <<
id <<
" 1=" << p1[0] <<
" 2=" << p1[1] <<
" 3=" << p1[2] <<
" 4=" << p1[3] <<
" 5=" << p1[4] <<
" 6=" << p1[5] <<
" 7=" << p1[6] <<
" 8=" << p1[7] <<
" 9=" << p1[8] << endreq;
384 double tcorr1 = p1[0] + p1[1]/TMath::Sqrt(ADC) + p1[2]*z/TMath::Sqrt(ADC) + p1[3]/ADC + p1[4]*z + p1[5]*z*z + p1[6]*z*z*z;
391 MsgStream log(
msgSvc(), name());
394 for(
int i=0; i<static_cast<int>(
nBarPar); i++ ) {
395 p2[i]=fBTofCal[176*m_sequence+id]->getP2(i);
398 log << MSG::DEBUG <<
"BTCorr2 id =" <<
id <<
" 1=" << p2[0] <<
" 2=" << p2[1] <<
" 3=" << p2[2] <<
" 4=" << p2[3] <<
" 5=" << p2[4] <<
" 6=" << p2[5] <<
" 7=" << p2[6] <<
" 8=" << p2[7] <<
" 9=" << p2[8] << endreq;
400 double tcorr2 = p2[0] + p2[1]/TMath::Sqrt(ADC) + p2[2]*z/TMath::Sqrt(ADC) + p2[3]/ADC + p2[4]*z + p2[5]*z*z + p2[6]*z*z*z;
407 MsgStream log(
msgSvc(), name());
409 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
410 int whichBunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
413 if( whichBunch==0 ) {
414 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
415 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch0(i);
418 else if( whichBunch==1 ) {
419 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
420 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch1(i);
423 else if( whichBunch==2 ) {
424 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
425 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch2(i);
428 else if( whichBunch==3 ) {
429 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
430 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch3(i);
434 double tCorrOffset1 = 0.0;
436 tCorrOffset1 = poff1[0] + poff1[1]*z + poff1[2]*z*z + poff1[3]*z*z*z + poff1[4]*z*z*z*z + poff1[5]*z*z*z*z*z + poff1[6]*z*z*z*z*z*z;
439 tCorrOffset1 = poff1[10] + poff1[11]*z + poff1[12]*z*z + poff1[13]*z*z*z + poff1[14]*z*z*z*z + poff1[15]*z*z*z*z*z + poff1[16]*z*z*z*z*z*z;
442 log << MSG::DEBUG <<
"BTCorrOff1 id =" <<
id <<
" bunch number=" << whichBunch <<
" TCorrOffset1=" << tCorrOffset1 <<
" 1=" << poff1[0] <<
" 2=" << poff1[1] <<
" 3=" << poff1[2] <<
" 4=" << poff1[3] <<
" 5=" << poff1[4] <<
" 6=" << poff1[5] <<
" 7=" << poff1[6] <<
" 8=" << poff1[7] <<
" 9=" << poff1[8] << endreq;
449 MsgStream log(
msgSvc(), name());
451 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
452 int whichBunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
455 if( whichBunch==0 ) {
456 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
457 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch0(i);
460 else if( whichBunch==1 ) {
461 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
462 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch1(i);
465 else if( whichBunch==2 ) {
466 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
467 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch2(i);
470 else if( whichBunch==3 ) {
471 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
472 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch3(i);
476 double tCorrOffset2 = 0.0;
478 tCorrOffset2 = poff2[0] + poff2[1]*z + poff2[2]*z*z + poff2[3]*z*z*z + poff2[4]*z*z*z*z + poff2[5]*z*z*z*z*z + poff2[6]*z*z*z*z*z*z;
481 tCorrOffset2 = poff2[10] + poff2[11]*z + poff2[12]*z*z + poff2[13]*z*z*z + poff2[14]*z*z*z*z + poff2[15]*z*z*z*z*z + poff2[16]*z*z*z*z*z*z;
484 log << MSG::DEBUG <<
"BTCorrOff2 id =" <<
id <<
" bunch number=" << whichBunch <<
" TCorrOffset2=" << tCorrOffset2 <<
" 1=" << poff2[0] <<
" 2=" << poff2[1] <<
" 3=" << poff2[2] <<
" 4=" << poff2[3] <<
" 5=" << poff2[4] <<
" 6=" << poff2[5] <<
" 7=" << poff2[6] <<
" 8=" << poff2[7] <<
" 9=" << poff2[8] << endreq;
491 double toffset = fBTofCommonCal[m_sequence]->getOffset(0);
497 MsgStream log(
msgSvc(), name());
499 double tcorr1 =
BTCorr1( ADC, z,
id );
501 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
503 log << MSG::DEBUG <<
"BTime1 id =" <<
id <<
" tcorr=" << tcorr1 <<
" toffset=" << tcorr2 <<
" total offset=" << tcorr3 << endreq;
505 double time = TDC - tcorr1 - tcorr2 - tcorr3;
508 log<<MSG::WARNING<<
"TofCaliSvc::BTime1() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" z = "<<z<<
" ID = "<<
id<<endreq;
514const double TofCaliSvc::BTime2(
double ADC,
double TDC,
double z,
unsigned id,
double t0){
515 MsgStream log(
msgSvc(), name());
517 double tcorr1 =
BTCorr2( ADC, z,
id );
519 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
521 log << MSG::DEBUG <<
"BTime2 id =" <<
id <<
" tcorr=" << tcorr1 <<
" toffset=" << tcorr2 <<
" total offset=" << tcorr3 << endreq;
523 double time = TDC - tcorr1 - tcorr2 - tcorr3;
526 log<<MSG::WARNING<<
"TofCaliSvc::BTime2() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" z = "<<z<<
" ID = "<<
id<<endreq;
551 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
552 double sigmaCorr2 = sigmaCorr*sigmaCorr;
554 double sigmaLeft =
BSigma1( z,
id );
555 double sigmaLeft2 = sigmaLeft*sigmaLeft;
556 double sigmaRight =
BSigma2( z,
id );
557 double sigmaRight2 = sigmaRight*sigmaRight;
559 double fraction = ( sigmaRight2 - sigmaCorr2 )/( sigmaLeft2 + sigmaRight2 - 2.0*sigmaCorr2);
561 double wt=fraction*tleft + (1.0-fraction)*tright;
563 MsgStream log(
msgSvc(), name());
564 log<<MSG::WARNING<<
"TofCaliSvc::BTimeCounter() -- A minus time is given : "<<wt <<
" [Input] z = "<<z<<
" ID = "<<
id<<endreq;
572 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
573 double sigmaCorr2 = sigmaCorr*sigmaCorr;
576 double sigmaInner2 = sigmaInner*sigmaInner;
578 double sigmaOuter2 = sigmaOuter*sigmaOuter;
580 double fraction = ( sigmaOuter2 - sigmaCorr2 )/( sigmaInner2 + sigmaOuter2 - 2.0*sigmaCorr2);
582 double wt=fraction*tlayer1 + (1.0-fraction)*tlayer2;
584 MsgStream log(
msgSvc(), name());
585 log<<MSG::WARNING<<
"TofCaliSvc::BTimeCluster() -- A minus time is given : "<<wt <<
" [Input] z1 = "<<z1<<
" [Input] z2 = "<<z2<<
" ID1 = "<< id1 <<
" ID2=" << id2 << endreq;
592 MsgStream log(
msgSvc(), name());
595 for(
int i=0; i<static_cast<int>(
nBarSigma); i++ ) {
596 fpleft[i]=fBTofCal[176*m_sequence+id]->getFPLeft(i);
599 log << MSG::DEBUG <<
"BSigma1 id =" <<
id <<
" 1=" << fpleft[0] <<
" 2=" << fpleft[1] <<
" 3=" << fpleft[2] <<
" 4=" << fpleft[3] <<
" 5=" << fpleft[4] << endreq;
601 double sigmaLeft = fpleft[0] + fpleft[1]*z + fpleft[2]*z*z + fpleft[3]*z*z*z + fpleft[4]*z*z*z*z;
608 MsgStream log(
msgSvc(), name());
611 for(
int i=0; i<static_cast<int>(
nBarSigma); i++ ) {
612 fpright[i]=fBTofCal[176*m_sequence+id]->getFPRight(i);
615 log << MSG::DEBUG <<
"BSigma2 id =" <<
id <<
" 1=" << fpright[0] <<
" 2=" << fpright[1] <<
" 3=" << fpright[2] <<
" 4=" << fpright[3] <<
" 5=" << fpright[4] << endreq;
617 double sigmaRight = fpright[0] + fpright[1]*z + fpright[2]*z*z + fpright[3]*z*z*z + fpright[4]*z*z*z*z;
624 MsgStream log(
msgSvc(), name());
627 for(
int i=0; i<static_cast<int>(
nBarSigCnt); i++ ) {
628 fplayer[i]=fBTofCal[176*m_sequence+id]->getFPCounter(i);
631 log << MSG::DEBUG <<
"BSigmaCounter id =" <<
id <<
" 1=" << fplayer[0] <<
" 2=" << fplayer[1] <<
" 3=" << fplayer[2] <<
" 4=" << fplayer[3] <<
" 5=" << fplayer[4] << endreq;
633 double sigma = fplayer[0] + fplayer[1]*z + fplayer[2]*z*z + fplayer[3]*z*z*z + fplayer[4]*z*z*z*z;
641 double sigmaInner2 = sigmaInner*sigmaInner;
643 double sigmaOuter2 = sigmaOuter*sigmaOuter;
644 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
645 double sigmaCorr2 = sigmaCorr*sigmaCorr;
646 double sigma = (sigmaInner2*sigmaOuter2-sigmaCorr2*sigmaCorr2)/(sigmaInner2+sigmaOuter2-2.0*sigmaCorr2);
653 MsgStream log(
msgSvc(), name());
656 for(
int i=0; i<static_cast<int>(
nEndPar); i++ ) {
657 p[i]=fETofCal[96*m_sequence+id]->getP(i);
660 log << MSG::DEBUG <<
"ETime id =" <<
id <<
" 1=" << p[0] <<
" 2=" << p[1] <<
" 3=" << p[2] <<
" 4=" << p[3] <<
" 5=" << p[4] <<
" 6=" << p[5] <<
" 7=" << p[6] << endreq;
662 double time=TDC-(p[0]+p[1]/TMath::Sqrt(ADC)+p[2]/ADC+p[3]*ADC+p[4]*rHit+p[5]*rHit*rHit+p[6]*rHit*rHit*rHit);
665 MsgStream log(
msgSvc(), name());
666 log<<MSG::WARNING<<
"TofCaliSvc::ETime() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" r = "<< rHit <<
" ID = "<<
id<<endreq;
674 MsgStream log(
msgSvc(), name());
677 for(
int i=0; i<static_cast<int>(
nEndSigma); i++) {
678 fp[i]=fETofCal[96*m_sequence+id]->getFPCounter(i);
681 log << MSG::DEBUG <<
"ESigma id =" <<
id <<
" 1=" << fp[0] <<
" 2=" << fp[1] <<
" 3=" << fp[2] << endreq;
683 double sigma = fp[0] + fp[1]*r + fp[2]*r*r;
689const double TofCaliSvc::EtfTime(
double ADC1,
double ADC2,
double TDC1,
double TDC2,
unsigned id,
unsigned int strip,
double t0){
690 MsgStream log(
msgSvc(), name());
692 double q = (ADC1+ADC2)/2.0;
693 double t = (TDC1+TDC2)/2.0;
696 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
697 p[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP(i);
701 + p[1]/TMath::Sqrt(
q)
707 double time =
t - tcorr;
709 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
710 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
715 log << MSG::DEBUG <<
"EtfTime module =" <<
id <<
" strip=" << strip <<
" 1=" << p[0] <<
" 2=" << p[1] <<
" 3=" << p[2] <<
" 4=" << p[3] <<
" 5=" << p[4] <<
" 6=" << p[5] <<
" 7=" << p[6] <<
" 8=" << p[7] <<
" 9=" << p[8] <<
" tcorr=" << tcorr <<
" t0=" << t0 <<
" pbunch=" << pbunch <<
" time=" <<
time << endreq;
721const double TofCaliSvc::EtfTime1(
double ADC,
double TDC,
double z,
unsigned id,
unsigned int strip,
double t0){
722 MsgStream log(
msgSvc(), name());
725 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
726 p1[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP1(i);
729 double tcorr1 = p1[0]
730 + p1[1]/TMath::Sqrt(ADC)
734 + p1[5]*ADC*ADC*ADC*ADC
735 + p1[6]*z/TMath::Sqrt(ADC)
742 double time1 = TDC - tcorr1;
744 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
745 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
748 time1 = time1 - pbunch;
750 log << MSG::DEBUG <<
"EtfTime1 module =" <<
id <<
" strip=" << strip <<
" 1=" << p1[0] <<
" 2=" << p1[1] <<
" 3=" << p1[2] <<
" 4=" << p1[3] <<
" 5=" << p1[4] <<
" 6=" << p1[5] <<
" 7=" << p1[6] <<
" 8=" << p1[7] <<
" 9=" << p1[8] <<
" tcorr=" << tcorr1 <<
" t0=" << t0 <<
" pbunch=" << pbunch <<
" time1=" << time1 << endreq;
756const double TofCaliSvc::EtfTime2(
double ADC,
double TDC,
double z,
unsigned id,
unsigned int strip,
double t0){
757 MsgStream log(
msgSvc(), name());
760 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
761 p2[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP2(i);
764 double tcorr2 = p2[0]
765 + p2[1]/TMath::Sqrt(ADC)
769 + p2[5]*ADC*ADC*ADC*ADC
770 + p2[6]*z/TMath::Sqrt(ADC)
777 double time2 = TDC - tcorr2;
779 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
780 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
783 time2 = time2 - pbunch;
785 log << MSG::DEBUG <<
"EtfTime2 module =" <<
id <<
" strip=" << strip <<
" 1=" << p2[0] <<
" 2=" << p2[1] <<
" 3=" << p2[2] <<
" 4=" << p2[3] <<
" 5=" << p2[4] <<
" 6=" << p2[5] <<
" 7=" << p2[6] <<
" 8=" << p2[7] <<
" 9=" << p2[8] <<
" tcorr=" << tcorr2 <<
" t0=" << t0 <<
" pbunch=" << pbunch <<
" time2=" << time2 << endreq;
791const double TofCaliSvc::EtfTimeMC(
double ADC1,
double ADC2,
double TDC1,
double TDC2,
unsigned id,
unsigned int strip,
double t0){
792 MsgStream log(
msgSvc(), name());
794 double q = (ADC1+ADC2)/2.0;
795 double t = (TDC1+TDC2)/2.0;
798 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
799 p[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP(i);
802 double tcorr = p[0] + p[1]/TMath::Sqrt(
q);
803 double time =
t - tcorr;
805 log << MSG::DEBUG <<
"EtfTime module =" <<
id <<
" strip=" << strip <<
" 1=" << p[0] <<
" 2=" << p[1] <<
" tcorr=" << tcorr <<
" t0=" << t0 <<
" time=" <<
time << endreq;
811const double TofCaliSvc::EtfTimeMC1(
double ADC,
double TDC,
double z,
unsigned id,
unsigned int strip,
double t0){
812 MsgStream log(
msgSvc(), name());
815 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
816 p1[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP1(i);
819 double tcorr1 = p1[0] + p1[1]/TMath::Sqrt(ADC) + p1[2]*z;
820 double time1 = TDC - tcorr1;
822 log << MSG::DEBUG <<
"EtfTime1 module =" <<
id <<
" strip=" << strip <<
" 1=" << p1[0] <<
" 2=" << p1[1] <<
" 3=" << p1[2] <<
" tcorr=" << tcorr1 <<
" t0=" << t0 <<
" time1=" << time1 << endreq;
828const double TofCaliSvc::EtfTimeMC2(
double ADC,
double TDC,
double z,
unsigned id,
unsigned int strip,
double t0){
829 MsgStream log(
msgSvc(), name());
832 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
833 p2[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP2(i);
836 double tcorr2 = p2[0] + p2[1]/TMath::Sqrt(ADC) + p2[2]*z;
837 double time2 = TDC - tcorr2;
839 log << MSG::DEBUG <<
"EtfTime2 module =" <<
id <<
" strip=" << strip <<
" 1=" << p2[0] <<
" 2=" << p2[1] <<
" 3=" << p2[2] <<
" tcorr=" << tcorr2 <<
" t0=" << t0 <<
" time2=" << time2 << endreq;
846 MsgStream log(
msgSvc(), name());
848 double time = (tleft+tright)/2.0;
849 log << MSG::DEBUG <<
"EtfTime tleft=" << tleft <<
" tright=" << tright <<
" time=" <<
time << endreq;
856 MsgStream log(
msgSvc(), name());
859 if( fEtfBunchCal.size()>0 && index>=0 && index<4 ) {
860 pbunch=fEtfBunchCal[m_sequence]->getBunchP(index);
868 double length = 230.0;
870 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
871 double q0 = ADC*sint*TMath::Exp((0.5*length-zHit)/Latten)/A;
877 double length = 230.0;
879 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
880 double q0 = ADC*sint*TMath::Exp((0.5*length+zHit)/Latten)/A;
886 double length = 230.0;
887 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
888 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
889 double A2 = fBTofCal[176*m_sequence+id]->getAtten(2);
890 double q = ( ADC1*sint*TMath::Exp((0.5*length-zHit)/Latten)+ADC2*sint*TMath::Exp((0.5*length+zHit)/Latten) )/( A2*(1.0+TMath::Exp(gainRatio)) );
895const double TofCaliSvc::BPh(
double ADC1,
double ADC2,
double zHit,
unsigned int id ) {
896 double length = 230.0;
897 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
898 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
899 double q = ( ADC1*TMath::Exp((0.5*length-zHit)/Latten)+ADC2*TMath::Exp((0.5*length+zHit)/Latten) )/(1.0+TMath::Exp(gainRatio));
905 double length = 44.5;
906 double a0 = fETofCal[96*m_sequence+id]->getAtten(0);
907 double a1 = fETofCal[96*m_sequence+id]->getAtten(1);
908 double a2 = fETofCal[96*m_sequence+id]->getAtten(2);
909 double a3 = fETofCal[96*m_sequence+id]->getAtten(3);
911 double q0 = ADC*fabs(cost)*TMath::Exp(-(a1*(rHit-length)+a2*(rHit-length)*(rHit-length)))/a3;
918 double length = 44.5;
919 double a0 = fETofCal[96*m_sequence+id]->getAtten(0);
920 double a1 = fETofCal[96*m_sequence+id]->getAtten(1);
921 double a2 = fETofCal[96*m_sequence+id]->getAtten(2);
922 double q0 = ADC*TMath::Exp(-(a0+a1*(rHit-length)+a2*(rHit-length)*(rHit-length)));
928 return fBTofCal[176*m_sequence+id]->getAtten(3);
934 return fBTofCal[176*m_sequence+id]->getVeff(0);
936 std::cout<<
"bad id="<<
id<<std::endl;
942 if(
id > 175 )
return -1;
943 return fBTofCal[176*m_sequence+id]->getAtten(0);
947 if(
id > 175 )
return -1;
948 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
949 double A2 = fBTofCal[176*m_sequence+id]->getAtten(2);
950 double A1 = A2*TMath::Exp(gainRatio);
955 if(
id > 175 )
return -1;
956 return fBTofCal[176*m_sequence+id]->getAtten(2);
960 if(
id > 175 )
return -1;
961 return fETofCal[96*m_sequence+id]->getVeff(0);
965 if(
id<72 && strip<12){
966 return fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(0);
968 std::cout<<
"bad id="<<
id<<
" strip="<<strip<<std::endl;
975 double ztdc = -1000.0;
976 if(
id > 175 )
return ztdc;
977 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
978 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
979 ztdc = 0.5*veff*(tright-tleft-delay);
984 double tleft = -1000.0;
985 if(
id > 175 )
return tleft;
986 if( tright < -900.0 )
return tleft;
987 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
988 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
989 tleft = tright-delay-2.0*z/veff;
994 double tright = -1000.0;
995 if(
id > 175 )
return tright;
996 if( tleft < -900.0 )
return tright;
997 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
998 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
999 tright = tleft+delay+2.0*z/veff;
1004 double zadc = -1000.0;
1005 if(
id > 175 )
return zadc;
1006 if( qright < 1.0e-6 )
return zadc;
1007 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1008 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1009 double q1overq2 = log(qleft/qright);
1010 zadc = 0.5*ldecay*( q1overq2 - a1overa2 );
1015 double qleft = -1000.0;
1016 if(
id > 175 )
return qleft;
1017 if( qright < 1.0e-6 )
return qleft;
1018 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1019 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1020 double q1overq2 = 2.0*z/ldecay + a1overa2;
1021 qleft = qright*
exp(q1overq2);
1026 double qright = -1000.0;
1027 if(
id > 175 )
return qright;
1028 if( qleft < 1.0e-6 )
return qright;
1029 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1030 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1031 double q1overq2 = 2.0*z/ldecay + a1overa2;
1032 qright = qleft*
exp(-q1overq2);
1036const double TofCaliSvc::EtfZTDC(
double tleft,
double tright,
unsigned id,
unsigned int strip) {
1037 double ztdc = -1000.0;
1038 if(
id>71 || strip>11 )
return ztdc;
1039 double delay = fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(0);
1040 double veff = fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(1);
1041 ztdc = (tright-tleft-delay)/veff;
1047 if(
id > 95 )
return -1;
1048 return fETofCal[96*m_sequence+id]->getAtten(0);
1052 if(
id > 95 )
return -1;
1053 return fETofCal[96*m_sequence+id]->getAtten(1);
1057 return fTofInfoCal[m_sequence]->getRunBegin();
1061 return fTofInfoCal[m_sequence]->getRunEnd();
1065 return fTofInfoCal[m_sequence]->getVersion();
1069 return fTofInfoCal[m_sequence]->getQCorr();
1073 return fTofInfoCal[m_sequence]->getQElec();
1077 return fTofInfoCal[m_sequence]->getMisLable();
1081 return fTofInfoCal[m_sequence]->getBrEast(im);
1085 return fTofInfoCal[m_sequence]->getBrWest(im);
1089 return fTofInfoCal[m_sequence]->getEndcap(im);
1093 return fTofInfoCal[m_sequence]->getEndcap(im);
1097 return fBTofCal[176*m_sequence+id];
1101 return fETofCal[96*m_sequence+id];
1105 return fEtfCal[72*12*m_sequence+id];
1109 return fBTofCommonCal[m_sequence];
1113 return fTofInfoCal[m_sequence];
1117 std::cout<<
"Now We can get the TOF Calibtration Service"<<std::endl;
1118 std::cout<<
"Barrel TOF Counter Number = "<<fBTofCal.size()<<std::endl;
1119 std::cout<<
"Endcap TOF Counter Number = "<<fETofCal.size()<<std::endl;
1121 cout<<
"The O Barrel TOF PMT1 p1[0] is"<<
" "<<
BTof(0)->
getP1(0)<<endl;
1122 cout<<
"The 0 Barrel TOF PMT1 p1[1] is"<<
" "<<
BTof(0)->
getP1(1)<<endl;
1123 cout<<
"The 0 Barrel TOF veff is"<<
" "<<
BTof(0)->
getVeff(0)<<endl;
1128 MsgStream log( messageService(), name() );
1129 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
1131 if ( inc.type() ==
"NewRun" ){
1132 log << MSG::DEBUG <<
"New Run" << endreq;
1135 StatusCode sc= FillfromDatabase();
1137 m_hasbeeninitialized=
true;
EvtComplex exp(const EvtComplex &c)
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
const unsigned int nBarOffset
const unsigned int nBarParOff
const unsigned int nEndPar
const unsigned int nEtfPar
const unsigned int nBarPar
const unsigned int nBarSigma
const unsigned int nEndSigma
const unsigned int nBarSigCor
const unsigned int nEndSpeed
const unsigned int nEtfSpeed
const unsigned int nEtfBunch
const unsigned int nBarSpeed
const unsigned int nEndAtten
const unsigned int nBarAtten
const unsigned int nBarSigCnt
void setPOff1_bunch0(int idx, double poff1_bunch0)
void setPOff2_bunch1(int idx, double poff2_bunch1)
void setPOff1_bunch2(int idx, double poff1_bunch2)
void setAtten(int idx, double atten)
double getP1(int idx) const
void setFPCounter(int idx, double fp3)
void setPOff1_bunch3(int idx, double poff1_bunch3)
void setP1(int idx, double p1)
void setP2(int idx, double p2)
void setVeff(int idx, double veff)
void setPOff2_bunch2(int idx, double poff2_bunch2)
void setPOff2_bunch3(int idx, double poff2_bunch3)
double getVeff(int idx) const
void setFPRight(int idx, double fp2)
void setFPLeft(int idx, double fp1)
void setPOff2_bunch0(int idx, double poff2_bunch0)
void setPOff1_bunch1(int idx, double poff1_bunch1)
void setSigmaCorr(int idx, double sigmac)
void setOffset(int idx, double offset)
void setVeff(int idx, double veff)
void setP(int i, double p)
void setFPCounter(int idx, double fp)
void setAtten(int idx, double atten)
void setBunchP(int idx, double pbunch)
void setP1(int idx, double p1)
void setVeff(int idx, double veff)
void setP(int idx, double p)
void setP2(int idx, double p2)
const double BTimeCounter(double tleft, double tright, double z, unsigned int id)
const double ZADC(double qleft, double qright, unsigned int id)
const double EtfTime(double ADC1, double ADC2, double TDC1, double TDC2, unsigned int id, unsigned int strip, double t0)
const double BPulseHeight1(double ADC, double zHit, double sint, unsigned int id)
const double BPh(double ADC1, double ADC2, double zHit, unsigned int id)
const double ZTDC2(double tleft, unsigned int id, double z)
const double BPulseHeight2(double ADC, double zHit, double sint, unsigned int id)
const double EGain(unsigned int id)
const double BTimeCluster(double tlayer1, double tlayer2, double z1, double z2, unsigned int id1, unsigned int id2)
const double EPh(double ADC, double rHit, unsigned int id)
const double ZTDC1(double tright, unsigned int id, double z)
TofInfoCal * TofInfo() const
const double BPulseHeight(double ADC1, double ADC2, double zHit, double sint, unsigned int id)
const int BrEast(unsigned int No)
const double BGainForward(unsigned int id)
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown)
const int Etf(unsigned int No)
const double EtfBunchP(int index)
const double BTCorrOffset2(double zHit, unsigned int id, double t0)
const double BTime2(double ADC, double TDC, double zHit, unsigned int id, double t0)
const double EPulseHeight(double ADC, double rHit, double cost, unsigned int id)
const double BSigma1(double zHit, unsigned int id)
const double BAtten(unsigned int id)
virtual StatusCode finalize()
const double EtfTimeMC(double ADC1, double ADC2, double TDC1, double TDC2, unsigned int id, unsigned int strip, double t0)
const double BSigma2(double zHit, unsigned int id)
const double EtfTime1(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
StatusCode chooseConstants(int run, int number)
const double BTime1(double ADC, double TDC, double zHit, unsigned int id, double t0)
BTofCal * BTof(unsigned int id) const
const double ETime(double ADC, double TDC, double rHit, unsigned int id)
const double BTCorrOffset1(double zHit, unsigned int id, double t0)
const double EtfTimeMC1(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
const double EtfTimeMC2(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
const double EtfTime2(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
const double BSigmaCluster(double zHit1, double zHit2, unsigned int id1, unsigned int id2)
const double EtfVeff(unsigned int id, unsigned int strip)
const double ZADC1(double qright, unsigned int id, double z)
virtual StatusCode initialize()
const double BGainBackward(unsigned int id)
const double BVeff(unsigned int id)
const double ESigma(double rHit, unsigned int id)
const double EtfZTDC(double tleft, double tright, unsigned int id, unsigned int strip)
const double ZADC2(double qleft, unsigned int id, double z)
const double getQ0(unsigned int id)
const int BrWest(unsigned int No)
const double ZTDC(double tleft, double tright, unsigned int id)
const double ETDelay(unsigned int id)
const double EVeff(unsigned int id)
const double EAtten(unsigned int id)
const int Endcap(unsigned int No)
const double BTCorr2(double ADC, double zHit, unsigned int id)
BTofCommonCal * BTofCommon() const
const double BTCorr1(double ADC, double zHit, unsigned int id)
void handle(const Incident &)
const double BTDelay1(unsigned int id)
const double BTDelay2(unsigned int id)
EtfCal * EtfTof(unsigned int id) const
TofCaliSvc(const std::string &name, ISvcLocator *svcloc)
ETofCal * ETof(unsigned int id) const
const double BSigmaCounter(double zHit, unsigned int id)
void setEventTo(int evtTo)
void setRunFrom(int runFrom)
void setVersion(int version)
void setMisLable(int mis)
void setEventFrom(int evtFrom)
void setEtf(unsigned int i, int id4)
void setRunBegin(int run1)
void setBrEast(unsigned int i, int id1)
void setBrWest(unsigned int i, int id2)
void setEndcap(unsigned int i, int id3)