13#include "TofCaliSvc/BTofCal.h"
14#include "TofCaliSvc/BTofCommonCal.h"
15#include "TofCaliSvc/ETofCal.h"
16#include "TofCaliSvc/EtfCal.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"
38#include "GaudiKernel/DataSvc.h"
50{ declareProperty(
"Run",m_run=1);
64 m_hasbeeninitialized=
false;
67 MsgStream log(
msgSvc(), name());
68 log << MSG::INFO << name() <<
": Start of run initialisation" << endreq;
70 StatusCode sc = Service::initialize();
71 if ( sc.isFailure() )
return sc;
74 sc = service(
"IncidentSvc", incsvc);
77 incsvc -> addListener(
this,
"NewRun", priority);
82 log<<MSG::INFO <<
"setProperties()" << endreq;
83 scc = service(
"CalibDataSvc", m_pCalibDataSvc,
true);
84 if ( !scc.isSuccess() ) {
85 log<<MSG::ERROR<<
"Could not get IDataProviderSvc interface of CalibXmlCnvSvc"<<endreq;
88 log << MSG::DEBUG<<
"Retrieved IDataProviderSvc interface of CalibXmlCnvSvc"<<endreq;
91 scc = setProperties();
97 MsgStream log(
msgSvc(), name());
98 log << MSG::INFO << name() <<
": End of Run" << endreq;
99 return StatusCode::SUCCESS;
103 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) {
delete (*it1); }
105 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) {
delete (*it2); }
108 if( fEtfCal.size()!=0 ) {
109 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) {
delete (*it5); }
112 if( fEtfBunchCal.size()!=0 ) {
113 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) {
delete (*it6); }
114 fEtfBunchCal.clear();
116 for(vector<BTofCommonCal*>::iterator it3 = fBTofCommonCal.begin(); it3 != fBTofCommonCal.end(); it3++) {
delete (*it3); }
117 fBTofCommonCal.clear();
118 for(vector<TofInfoCal*>::iterator it4 = fTofInfoCal.begin(); it4 != fTofInfoCal.end(); it4++) {
delete (*it4); }
123StatusCode TofCaliSvc::FillfromDatabase(){
125 MsgStream log(
msgSvc(), name());
126 std::string fullPath =
"/Calib/TofCal";
127 log << MSG::INFO<<
" Tof calib fullPath = "<<fullPath<< endreq;
129 SmartDataPtr<CalibData::TofCalibData>
test(m_pCalibDataSvc, fullPath);
131 log << MSG::FATAL <<
"TofCaliSvc could not find TofCalibData in TCDS!!" << endreq;
132 return StatusCode::FAILURE;
135 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) {
delete (*it1); }
137 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) {
delete (*it2); }
139 if( fEtfCal.size()!=0 ) {
140 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) {
delete (*it5); }
143 if( fEtfBunchCal.size()!=0 ) {
144 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) {
delete (*it6); }
145 fEtfBunchCal.clear();
147 for(vector<BTofCommonCal*>::iterator it3 = fBTofCommonCal.begin(); it3 != fBTofCommonCal.end(); it3++) {
delete (*it3); }
148 fBTofCommonCal.clear();
149 for(vector<TofInfoCal*>::iterator it4 = fTofInfoCal.begin(); it4 != fTofInfoCal.end(); it4++) {
delete (*it4); }
152 unsigned int ibSize =
test->getBTofSize();
153 unsigned int ibcomSize =
test->getBTofComSize();
154 unsigned int ieSize =
test->getETofSize();
155 unsigned int ietfSize =
test->getEtfSize();
156 ietfSize = ietfSize/12;
157 unsigned int ietfBSize =
test->getEtfBunchSize();
158 unsigned int iinfoSize =
test->getTofInfoSize();
160 for(
int ib=0;ib<ibSize;ib++){
162 for(
int j=0; j<static_cast<int>(
nBarAtten); j++ ) {
165 for(
int j=0; j<static_cast<int>(
nBarSpeed); j++ ) {
168 for(
int j=0; j<static_cast<int>(
nBarPar); j++){
170 btof->
setP2(j,
test->getBTofPright(ib,j));
172 for(
int j=0; j<static_cast<int>(
nBarParOff); j++){
182 for(
int j=0; j<static_cast<int>(
nBarSigma); j++){
186 for(
int j=0; j<static_cast<int>(
nBarSigCnt); j++){
190 fBTofCal.push_back(btof);
193 for(
int ie=0;ie<ieSize;ie++){
195 for(
int j=0; j<static_cast<int>(
nEndAtten); j++ ) {
198 for(
int j=0; j<static_cast<int>(
nEndSpeed); j++ ) {
201 for(
int j=0; j<static_cast<int>(
nEndPar); j++ ) {
204 for(
int j=0; j<static_cast<int>(
nEndSigma); j++ ) {
207 fETofCal.push_back(etof);
210 for(
int ietf=0;ietf<ietfSize;ietf++) {
211 for(
int jetf=0;jetf<12;jetf++) {
213 for(
int k=0; k<static_cast<int>(
nEtfSpeed); k++ ) {
216 for(
int k=0; k<static_cast<int>(
nEtfPar); k++ ) {
217 etf->
setP( k,
test->getEtfPcombine(ietf,jetf,k));
218 etf->
setP1(k,
test->getEtfPleft(ietf,jetf,k));
219 etf->
setP2(k,
test->getEtfPright(ietf,jetf,k));
221 fEtfCal.push_back(etf);
225 for(
int ietfb=0;ietfb<ietfBSize;ietfb++ ) {
227 for(
int k=0; k<static_cast<int>(
nEtfBunch); k++ ) {
230 fEtfBunchCal.push_back(etfbunch);
233 for(
int ibcom=0; ibcom<ibcomSize; ibcom++ ) {
235 for(
int j=0; j<static_cast<int>(
nBarOffset); j++) {
238 for(
int j=0; j<static_cast<int>(
nBarSigCor); j++) {
241 fBTofCommonCal.push_back(bcomtof);
245 for(
int iinfo=0; iinfo<iinfoSize; iinfo++ ) {
253 unsigned int iEtfDeadChannel = 0;
254 for(
unsigned int j=0; j<5; j++ ) {
257 if( (
test->getVersion(iinfo))==0 ) {
262 if(
test->getEndcap(iinfo, j) == 1 ) {
267 for(
int istrip=5; istrip<12; istrip++ ) {
274 else if(
test->getEndcap(iinfo, j) == 2 ) {
278 else if(
test->getEndcap(iinfo, j) == 3 ) {
279 for(
int itofid=12; itofid<24; itofid++ ) {
280 for(
int istrip=0; istrip<12; istrip++ ) {
288 else if(
test->getEndcap(iinfo, j) == 4 ) {
289 for(
int istrip=0; istrip<12; istrip++ ) {
296 else if(
test->getEndcap(iinfo, j) == 5 ) {
297 for(
int istrip=0; istrip<12; istrip++ ) {
304 else if(
test->getEndcap(iinfo, j) == 6 ) {
305 for(
int istrip=1; istrip<6; istrip++ ) {
316 fTofInfoCal.push_back(tofinfo);
319 return StatusCode::SUCCESS;
325 MsgStream log(
msgSvc(), name());
329 unsigned int inumber = 0;
331 std::vector<TofInfoCal*>::iterator it = fTofInfoCal.begin();
332 if( (*it)->getRunFrom() == -1 ) {
333 if( fTofInfoCal.size() == 1 ) {
334 log << MSG::INFO <<
"TofCaliSvc::chooseConstants() -- Run From is equal to -1! The ONLY TOF calibration constants are used!" << endreq;
335 return StatusCode::SUCCESS;
338 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- Run From is equal to -1! The NUMBER of calibration constants are NOT equal to 1!" << endreq;
339 return StatusCode::FAILURE;
343 for( ; it!= fTofInfoCal.end(); it++, inumber++ ) {
344 if( ( (*it)->getRunTo() != -1 ) && ( (*it)->getRunTo() < (*it)->getRunFrom() ) ) {
345 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- The " << inumber <<
"th calibration constatns is ABNORMAL! Run From is LARGER than RUN To!" << endreq;
346 return StatusCode::FAILURE;
348 if( ( (*it)->getRunFrom() == (*it)->getRunTo() ) && ( (*it)->getEventFrom() != -1 ) && ( (*it)->getEventTo() != -1 ) && ( (*it)->getEventFrom() > (*it)->getEventTo() ) ) {
349 log << MSG::ERROR <<
"TofCaliSvc::chooseConstants() -- The " << inumber <<
"th calibration constatns is ABNORMAL! Event From is LARGER than Event To!" << endreq;
350 return StatusCode::FAILURE;
354 it = fTofInfoCal.begin();
356 for( ; it!= fTofInfoCal.end(); it++, inumber++ ) {
357 int runFrom = (*it)->getRunFrom();
358 int runTo = (*it)->getRunTo();
359 int eventFrom = (*it)->getEventFrom();
360 int eventTo = (*it)->getEventTo();
361 if( ( run == runFrom ) && ( ( eventFrom == -1 ) || ( event >= eventFrom ) ) ) {
362 if( ( run < runTo ) || ( ( run == runTo ) && ( ( eventTo == -1 ) || ( event <= eventTo ) ) ) ) {
367 if( run > runFrom ) {
368 if( ( run < runTo ) || ( ( run == runTo ) && ( ( eventTo == -1 ) || ( event <= eventTo ) ) ) ) {
376 m_sequence = inumber;
377 return StatusCode::SUCCESS;
380 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;
381 return StatusCode::FAILURE;
384 return StatusCode::SUCCESS;
391 tdelay = fBTofCal[176*m_sequence+id]->getP1(0);
394 MsgStream log(
msgSvc(), name());
395 log<<MSG::ERROR<<
"TofCaliSvc::BTDelay1() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
404 tdelay = fBTofCal[176*m_sequence+id]->getP2(0);
407 MsgStream log(
msgSvc(), name());
408 log<<MSG::ERROR<<
"TofCaliSvc::BTDelay2() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
417 tdelay = fETofCal[96*m_sequence+id]->getP(0);
420 MsgStream log(
msgSvc(), name());
421 log<<MSG::ERROR<<
"TofCaliSvc::ETDelay() -- Wrong TOFID is provided! ID = "<<
id<<endreq;
428 MsgStream log(
msgSvc(), name());
431 for(
int i=0; i<static_cast<int>(
nBarPar); i++ ) {
432 p1[i]=fBTofCal[176*m_sequence+id]->getP1(i);
435 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;
437 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;
444 MsgStream log(
msgSvc(), name());
447 for(
int i=0; i<static_cast<int>(
nBarPar); i++ ) {
448 p2[i]=fBTofCal[176*m_sequence+id]->getP2(i);
451 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;
453 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;
460 MsgStream log(
msgSvc(), name());
462 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
463 int whichBunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
466 if( whichBunch==0 ) {
467 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
468 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch0(i);
471 else if( whichBunch==1 ) {
472 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
473 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch1(i);
476 else if( whichBunch==2 ) {
477 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
478 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch2(i);
481 else if( whichBunch==3 ) {
482 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
483 poff1[i]=fBTofCal[176*m_sequence+id]->getPOff1_bunch3(i);
487 double tCorrOffset1 = 0.0;
489 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;
492 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;
495 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;
502 MsgStream log(
msgSvc(), name());
504 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
505 int whichBunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
508 if( whichBunch==0 ) {
509 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
510 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch0(i);
513 else if( whichBunch==1 ) {
514 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
515 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch1(i);
518 else if( whichBunch==2 ) {
519 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
520 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch2(i);
523 else if( whichBunch==3 ) {
524 for(
int i=0; i<static_cast<int>(
nBarParOff); i++ ) {
525 poff2[i]=fBTofCal[176*m_sequence+id]->getPOff2_bunch3(i);
529 double tCorrOffset2 = 0.0;
531 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;
534 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;
537 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;
544 double toffset = fBTofCommonCal[m_sequence]->getOffset(0);
550 MsgStream log(
msgSvc(), name());
552 double tcorr1 =
BTCorr1( ADC, z,
id );
554 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
556 log << MSG::DEBUG <<
"BTime1 id =" <<
id <<
" tcorr=" << tcorr1 <<
" toffset=" << tcorr2 <<
" total offset=" << tcorr3 << endreq;
558 double time = TDC - tcorr1 - tcorr2 - tcorr3;
561 log<<MSG::WARNING<<
"TofCaliSvc::BTime1() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" z = "<<z<<
" ID = "<<
id<<endreq;
568 MsgStream log(
msgSvc(), name());
570 double tcorr1 =
BTCorr2( ADC, z,
id );
572 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
574 log << MSG::DEBUG <<
"BTime2 id =" <<
id <<
" tcorr=" << tcorr1 <<
" toffset=" << tcorr2 <<
" total offset=" << tcorr3 << endreq;
576 double time = TDC - tcorr1 - tcorr2 - tcorr3;
579 log<<MSG::WARNING<<
"TofCaliSvc::BTime2() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" z = "<<z<<
" ID = "<<
id<<endreq;
604 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
605 double sigmaCorr2 = sigmaCorr*sigmaCorr;
607 double sigmaLeft =
BSigma1( z,
id );
608 double sigmaLeft2 = sigmaLeft*sigmaLeft;
609 double sigmaRight =
BSigma2( z,
id );
610 double sigmaRight2 = sigmaRight*sigmaRight;
612 double fraction = ( sigmaRight2 - sigmaCorr2 )/( sigmaLeft2 + sigmaRight2 - 2.0*sigmaCorr2);
614 double wt=fraction*tleft + (1.0-fraction)*tright;
616 MsgStream log(
msgSvc(), name());
617 log<<MSG::WARNING<<
"TofCaliSvc::BTimeCounter() -- A minus time is given : "<<wt <<
" [Input] z = "<<z<<
" ID = "<<
id<<endreq;
625 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
626 double sigmaCorr2 = sigmaCorr*sigmaCorr;
629 double sigmaInner2 = sigmaInner*sigmaInner;
631 double sigmaOuter2 = sigmaOuter*sigmaOuter;
633 double fraction = ( sigmaOuter2 - sigmaCorr2 )/( sigmaInner2 + sigmaOuter2 - 2.0*sigmaCorr2);
635 double wt=fraction*tlayer1 + (1.0-fraction)*tlayer2;
637 MsgStream log(
msgSvc(), name());
638 log<<MSG::WARNING<<
"TofCaliSvc::BTimeCluster() -- A minus time is given : "<<wt <<
" [Input] z1 = "<<z1<<
" [Input] z2 = "<<z2<<
" ID1 = "<< id1 <<
" ID2=" << id2 << endreq;
645 MsgStream log(
msgSvc(), name());
648 for(
int i=0; i<static_cast<int>(
nBarSigma); i++ ) {
649 fpleft[i]=fBTofCal[176*m_sequence+id]->getFPLeft(i);
652 log << MSG::DEBUG <<
"BSigma1 id =" <<
id <<
" 1=" << fpleft[0] <<
" 2=" << fpleft[1] <<
" 3=" << fpleft[2] <<
" 4=" << fpleft[3] <<
" 5=" << fpleft[4] << endreq;
654 double sigmaLeft = fpleft[0] + fpleft[1]*z + fpleft[2]*z*z + fpleft[3]*z*z*z + fpleft[4]*z*z*z*z;
661 MsgStream log(
msgSvc(), name());
664 for(
int i=0; i<static_cast<int>(
nBarSigma); i++ ) {
665 fpright[i]=fBTofCal[176*m_sequence+id]->getFPRight(i);
668 log << MSG::DEBUG <<
"BSigma2 id =" <<
id <<
" 1=" << fpright[0] <<
" 2=" << fpright[1] <<
" 3=" << fpright[2] <<
" 4=" << fpright[3] <<
" 5=" << fpright[4] << endreq;
670 double sigmaRight = fpright[0] + fpright[1]*z + fpright[2]*z*z + fpright[3]*z*z*z + fpright[4]*z*z*z*z;
677 MsgStream log(
msgSvc(), name());
680 for(
int i=0; i<static_cast<int>(
nBarSigCnt); i++ ) {
681 fplayer[i]=fBTofCal[176*m_sequence+id]->getFPCounter(i);
684 log << MSG::DEBUG <<
"BSigmaCounter id =" <<
id <<
" 1=" << fplayer[0] <<
" 2=" << fplayer[1] <<
" 3=" << fplayer[2] <<
" 4=" << fplayer[3] <<
" 5=" << fplayer[4] << endreq;
686 double sigma = fplayer[0] + fplayer[1]*z + fplayer[2]*z*z + fplayer[3]*z*z*z + fplayer[4]*z*z*z*z;
694 double sigmaInner2 = sigmaInner*sigmaInner;
696 double sigmaOuter2 = sigmaOuter*sigmaOuter;
697 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
698 double sigmaCorr2 = sigmaCorr*sigmaCorr;
699 double sigma = (sigmaInner2*sigmaOuter2-sigmaCorr2*sigmaCorr2)/(sigmaInner2+sigmaOuter2-2.0*sigmaCorr2);
706 MsgStream log(
msgSvc(), name());
709 for(
int i=0; i<static_cast<int>(
nEndPar); i++ ) {
710 p[i]=fETofCal[96*m_sequence+id]->getP(i);
713 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;
715 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);
718 MsgStream log(
msgSvc(), name());
719 log<<MSG::WARNING<<
"TofCaliSvc::ETime() -- A minus time is given : "<<
time <<
" [Input] ADC = "<<ADC<<
" TDC = "<<TDC<<
" r = "<< rHit <<
" ID = "<<
id<<endreq;
727 MsgStream log(
msgSvc(), name());
730 for(
int i=0; i<static_cast<int>(
nEndSigma); i++) {
731 fp[i]=fETofCal[96*m_sequence+id]->getFPCounter(i);
734 log << MSG::DEBUG <<
"ESigma id =" <<
id <<
" 1=" << fp[0] <<
" 2=" << fp[1] <<
" 3=" << fp[2] << endreq;
736 double sigma = fp[0] + fp[1]*r + fp[2]*r*r;
742const double TofCaliSvc::EtfTime(
double ADC1,
double ADC2,
double TDC1,
double TDC2,
unsigned id,
unsigned int strip,
double t0){
743 MsgStream log(
msgSvc(), name());
745 double q = (ADC1+ADC2)/2.0;
746 double t = (TDC1+TDC2)/2.0;
749 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
750 p[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP(i);
754 + p[1]/TMath::Sqrt(
q)
760 double time =
t - tcorr;
762 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
763 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
768 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;
775 MsgStream log(
msgSvc(), name());
778 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
779 p1[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP1(i);
782 double tcorr1 =
p1[0]
783 +
p1[1]/TMath::Sqrt(ADC)
787 +
p1[5]*ADC*ADC*ADC*ADC
788 +
p1[6]*z/TMath::Sqrt(ADC)
795 double time1 = TDC - tcorr1;
797 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
798 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
801 time1 = time1 - pbunch;
803 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;
810 MsgStream log(
msgSvc(), name());
813 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
814 p2[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP2(i);
817 double tcorr2 =
p2[0]
818 +
p2[1]/TMath::Sqrt(ADC)
822 +
p2[5]*ADC*ADC*ADC*ADC
823 +
p2[6]*z/TMath::Sqrt(ADC)
830 double time2 = TDC - tcorr2;
832 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
833 int ibunch = (
static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
836 time2 = time2 - pbunch;
838 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;
844const double TofCaliSvc::EtfTimeMC(
double ADC1,
double ADC2,
double TDC1,
double TDC2,
unsigned id,
unsigned int strip,
double t0){
845 MsgStream log(
msgSvc(), name());
847 double q = (ADC1+ADC2)/2.0;
848 double t = (TDC1+TDC2)/2.0;
851 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
852 p[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP(i);
855 double tcorr = p[0] + p[1]/TMath::Sqrt(
q);
856 double time =
t - tcorr;
858 log << MSG::DEBUG <<
"EtfTime module =" <<
id <<
" strip=" << strip <<
" 1=" << p[0] <<
" 2=" << p[1] <<
" tcorr=" << tcorr <<
" t0=" << t0 <<
" time=" <<
time << endreq;
865 MsgStream log(
msgSvc(), name());
868 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
869 p1[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP1(i);
872 double tcorr1 =
p1[0] +
p1[1]/TMath::Sqrt(ADC) +
p1[2]*z;
873 double time1 = TDC - tcorr1;
875 log << MSG::DEBUG <<
"EtfTime1 module =" <<
id <<
" strip=" << strip <<
" 1=" <<
p1[0] <<
" 2=" <<
p1[1] <<
" 3=" <<
p1[2] <<
" tcorr=" << tcorr1 <<
" t0=" << t0 <<
" time1=" << time1 << endreq;
882 MsgStream log(
msgSvc(), name());
885 for(
int i=0; i<static_cast<int>(
nEtfPar); i++ ) {
886 p2[i]=fEtfCal[72*12*m_sequence+12*
id+strip]->getP2(i);
889 double tcorr2 =
p2[0] +
p2[1]/TMath::Sqrt(ADC) +
p2[2]*z;
890 double time2 = TDC - tcorr2;
892 log << MSG::DEBUG <<
"EtfTime2 module =" <<
id <<
" strip=" << strip <<
" 1=" <<
p2[0] <<
" 2=" <<
p2[1] <<
" 3=" <<
p2[2] <<
" tcorr=" << tcorr2 <<
" t0=" << t0 <<
" time2=" << time2 << endreq;
899 MsgStream log(
msgSvc(), name());
901 double time = (tleft+tright)/2.0;
902 log << MSG::DEBUG <<
"EtfTime tleft=" << tleft <<
" tright=" << tright <<
" time=" <<
time << endreq;
909 MsgStream log(
msgSvc(), name());
912 if( fEtfBunchCal.size()>0 && index>=0 && index<4 ) {
913 pbunch=fEtfBunchCal[m_sequence]->getBunchP(index);
921 double length = 230.0;
923 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
924 double q0 = ADC*sint*TMath::Exp((0.5*length-zHit)/Latten)/A;
930 double length = 230.0;
932 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
933 double q0 = ADC*sint*TMath::Exp((0.5*length+zHit)/Latten)/A;
939 double length = 230.0;
940 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
941 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
942 double A2 = fBTofCal[176*m_sequence+id]->getAtten(2);
943 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)) );
948const double TofCaliSvc::BPh(
double ADC1,
double ADC2,
double zHit,
unsigned int id ) {
949 double length = 230.0;
950 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
951 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
952 double q = ( ADC1*TMath::Exp((0.5*length-zHit)/Latten)+ADC2*TMath::Exp((0.5*length+zHit)/Latten) )/(1.0+TMath::Exp(gainRatio));
958 double length = 44.5;
959 double a0 = fETofCal[96*m_sequence+id]->getAtten(0);
960 double a1 = fETofCal[96*m_sequence+id]->getAtten(1);
961 double a2 = fETofCal[96*m_sequence+id]->getAtten(2);
962 double a3 = fETofCal[96*m_sequence+id]->getAtten(3);
964 double q0 = ADC*fabs(cost)*TMath::Exp(-(a1*(rHit-length)+a2*(rHit-length)*(rHit-length)))/a3;
971 double length = 44.5;
972 double a0 = fETofCal[96*m_sequence+id]->getAtten(0);
973 double a1 = fETofCal[96*m_sequence+id]->getAtten(1);
974 double a2 = fETofCal[96*m_sequence+id]->getAtten(2);
975 double q0 = ADC*TMath::Exp(-(a0+a1*(rHit-length)+a2*(rHit-length)*(rHit-length)));
981 return fBTofCal[176*m_sequence+id]->getAtten(3);
987 return fBTofCal[176*m_sequence+id]->getVeff(0);
989 std::cout<<
"bad id="<<
id<<std::endl;
995 if(
id > 175 )
return -1;
996 return fBTofCal[176*m_sequence+id]->getAtten(0);
1000 if(
id > 175 )
return -1;
1001 double gainRatio = fBTofCal[176*m_sequence+id]->getAtten(1);
1002 double A2 = fBTofCal[176*m_sequence+id]->getAtten(2);
1003 double A1 = A2*TMath::Exp(gainRatio);
1008 if(
id > 175 )
return -1;
1009 return fBTofCal[176*m_sequence+id]->getAtten(2);
1013 if(
id > 175 )
return -1;
1014 return fETofCal[96*m_sequence+id]->getVeff(0);
1018 if(
id<72 && strip<12){
1019 return fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(0);
1021 std::cout<<
"bad id="<<
id<<
" strip="<<strip<<std::endl;
1028 double ztdc = -1000.0;
1029 if(
id > 175 )
return ztdc;
1030 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
1031 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
1032 ztdc = 0.5*veff*(tright-tleft-delay);
1037 double tleft = -1000.0;
1038 if(
id > 175 )
return tleft;
1039 if( tright < -900.0 )
return tleft;
1040 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
1041 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
1042 tleft = tright-delay-2.0*z/veff;
1047 double tright = -1000.0;
1048 if(
id > 175 )
return tright;
1049 if( tleft < -900.0 )
return tright;
1050 double veff = fBTofCal[176*m_sequence+id]->getVeff(0);
1051 double delay = fBTofCal[176*m_sequence+id]->getVeff(1);
1052 tright = tleft+delay+2.0*z/veff;
1057 double zadc = -1000.0;
1058 if(
id > 175 )
return zadc;
1059 if( qright < 1.0e-6 )
return zadc;
1060 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1061 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1062 double q1overq2 = log(qleft/qright);
1063 zadc = 0.5*ldecay*( q1overq2 - a1overa2 );
1068 double qleft = -1000.0;
1069 if(
id > 175 )
return qleft;
1070 if( qright < 1.0e-6 )
return qleft;
1071 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1072 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1073 double q1overq2 = 2.0*z/ldecay + a1overa2;
1074 qleft = qright*
exp(q1overq2);
1079 double qright = -1000.0;
1080 if(
id > 175 )
return qright;
1081 if( qleft < 1.0e-6 )
return qright;
1082 double ldecay = fBTofCal[176*m_sequence+id]->getAtten(0);
1083 double a1overa2 = fBTofCal[176*m_sequence+id]->getAtten(1);
1084 double q1overq2 = 2.0*z/ldecay + a1overa2;
1085 qright = qleft*
exp(-q1overq2);
1090 double ztdc = -1000.0;
1091 if(
id>71 || strip>11 )
return ztdc;
1092 double delay = fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(0);
1093 double veff = fEtfCal[72*12*m_sequence+12*
id+strip]->getVeff(1);
1094 ztdc = (tright-tleft-delay)/veff;
1100 if(
id > 95 )
return -1;
1101 return fETofCal[96*m_sequence+id]->getAtten(0);
1105 if(
id > 95 )
return -1;
1106 return fETofCal[96*m_sequence+id]->getAtten(1);
1110 return fTofInfoCal[m_sequence]->getRunBegin();
1114 return fTofInfoCal[m_sequence]->getRunEnd();
1118 return fTofInfoCal[m_sequence]->getVersion();
1122 return fTofInfoCal[m_sequence]->getQCorr();
1126 return fTofInfoCal[m_sequence]->getQElec();
1130 return fTofInfoCal[m_sequence]->getMisLable();
1134 return fTofInfoCal[m_sequence]->getBrEast(im);
1138 return fTofInfoCal[m_sequence]->getBrWest(im);
1142 return fTofInfoCal[m_sequence]->getEndcap(im);
1146 return fTofInfoCal[m_sequence]->getEndcap(im);
1150 return fBTofCal[176*m_sequence+id];
1154 return fETofCal[96*m_sequence+id];
1158 return fEtfCal[72*12*m_sequence+id];
1162 return fBTofCommonCal[m_sequence];
1166 return fTofInfoCal[m_sequence];
1170 std::cout<<
"Now We can get the TOF Calibtration Service"<<std::endl;
1171 std::cout<<
"Barrel TOF Counter Number = "<<fBTofCal.size()<<std::endl;
1172 std::cout<<
"Endcap TOF Counter Number = "<<fETofCal.size()<<std::endl;
1174 cout<<
"The O Barrel TOF PMT1 p1[0] is"<<
" "<<
BTof(0)->
getP1(0)<<endl;
1175 cout<<
"The 0 Barrel TOF PMT1 p1[1] is"<<
" "<<
BTof(0)->
getP1(1)<<endl;
1176 cout<<
"The 0 Barrel TOF veff is"<<
" "<<
BTof(0)->
getVeff(0)<<endl;
1181 MsgStream log( messageService(), name() );
1182 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
1184 if ( inc.type() ==
"NewRun" ){
1185 log << MSG::DEBUG <<
"New Run" << endreq;
1188 StatusCode sc= FillfromDatabase();
1190 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)
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
ETofCal * ETof(unsigned int id) const
const double BSigmaCounter(double zHit, unsigned int id)
static value_type getIntID(int barrel_ec, int layer, int phi_module, int end)
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)