BOSS 7.0.6
BESIII Offline Software System
Loading...
Searching...
No Matches
TofCaliSvc.cxx
Go to the documentation of this file.
1//********************************************************
2//
3// BESIII Tof Reconstruction
4// Class: TofCaliSvc
5// Sun Shengsen <[email protected]>
6//
7// Description:
8// This service is used to get Tof Calibrarion constants
9// from DataBase and do the Tof data reconstruction.
10//
11//*********************************************************
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"
24#include "TMath.h"
25#include <math.h>
26#include <iostream>
27#include <fstream>
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"
39
40using namespace std;
41
42// static double radius_Inner = 81.35;
43// static double radius_Outer = 87.05;
44
45TofCaliSvc::TofCaliSvc( const std::string& name, ISvcLocator* svcloc ) : Service(name, svcloc) {
46 declareProperty("Run",m_run=1);
47 m_sequence = 0;
48}
49
50StatusCode TofCaliSvc::queryInterface (const InterfaceID& riid, void** ppvInterface ) {
51 if ( IID_ITofCaliSvc.versionMatch(riid) ) {
52 *ppvInterface = static_cast<ITofCaliSvc*> (this);
53 } else {
54 return Service::queryInterface(riid, ppvInterface) ;
55 }
56 return StatusCode::SUCCESS;
57}
58
59StatusCode TofCaliSvc::initialize ( ) {
60 m_hasbeeninitialized=false;
61 m_sequence = 0;
62
63 MsgStream log(msgSvc(), name());
64 log << MSG::INFO << name() << ": Start of run initialisation" << endreq;
65
66 StatusCode sc = Service::initialize();
67 if ( sc.isFailure() ) return sc;
68
69 IIncidentSvc* incsvc;
70 sc = service("IncidentSvc", incsvc);
71 int priority = 100;
72 if( sc.isSuccess() ){
73 incsvc -> addListener(this, "NewRun", priority);
74 }
75
76 StatusCode scc;
77
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;
82 return scc;
83 } else {
84 log << MSG::DEBUG<< "Retrieved IDataProviderSvc interface of CalibXmlCnvSvc"<<endreq;
85 }
86 // Get properties from the JobOptionsSvc
87 scc = setProperties();
88
89 return sc;
90}
91
92StatusCode TofCaliSvc::finalize ( ) {
93 MsgStream log(msgSvc(), name());
94 log << MSG::INFO << name() << ": End of Run" << endreq;
95 return StatusCode::SUCCESS;
96}
97
99 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) { delete (*it1); }
100 fBTofCal.clear();
101 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) { delete (*it2); }
102 fETofCal.clear();
103
104 if( fEtfCal.size()!=0 ) {
105 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) { delete (*it5); }
106 fEtfCal.clear();
107 }
108 if( fEtfBunchCal.size()!=0 ) {
109 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) { delete (*it6); }
110 fEtfBunchCal.clear();
111 }
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); }
115 fTofInfoCal.clear();
116 return;
117}
118
119StatusCode TofCaliSvc::FillfromDatabase(){
120
121 MsgStream log(msgSvc(), name());
122 std::string fullPath = "/Calib/TofCal";
123 log << MSG::INFO<<" Tof calib fullPath = "<<fullPath<< endreq;
124
125 SmartDataPtr<CalibData::TofCalibData> test(m_pCalibDataSvc, fullPath);
126 if(!test){
127 log << MSG::FATAL << "TofCaliSvc could not find TofCalibData in TCDS!!" << endreq;
128 return StatusCode::FAILURE;
129 }
130
131 for(vector<BTofCal*>::iterator it1 = fBTofCal.begin(); it1 != fBTofCal.end(); it1++) { delete (*it1); }
132 fBTofCal.clear();
133 for(vector<ETofCal*>::iterator it2 = fETofCal.begin(); it2 != fETofCal.end(); it2++) { delete (*it2); }
134 fETofCal.clear();
135 if( fEtfCal.size()!=0 ) {
136 for(vector<EtfCal*>::iterator it5 = fEtfCal.begin(); it5 != fEtfCal.end(); it5++) { delete (*it5); }
137 fEtfCal.clear();
138 }
139 if( fEtfBunchCal.size()!=0 ) {
140 for(vector<EtfBunchCal*>::iterator it6 = fEtfBunchCal.begin(); it6 != fEtfBunchCal.end(); it6++) { delete (*it6); }
141 fEtfBunchCal.clear();
142 }
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); }
146 fTofInfoCal.clear();
147
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();
155
156 for(int ib=0;ib<ibSize;ib++){
157 BTofCal* btof = new BTofCal;
158 for( int j=0; j<static_cast<int>(nBarAtten); j++ ) {
159 btof->setAtten(j,test->getBTofAtten(ib,j));
160 }
161 for( int j=0; j<static_cast<int>(nBarSpeed); j++ ) {
162 btof->setVeff(j,test->getBTofSpeed(ib,j));
163 }
164 for( int j=0; j<static_cast<int>(nBarPar); j++){
165 btof->setP1(j,test->getBTofPleft(ib,j));
166 btof->setP2(j,test->getBTofPright(ib,j));
167 }
168 for( int j=0; j<static_cast<int>(nBarParOff); j++){
169 btof->setPOff1_bunch0(j,test->getBTofPoffleft_bunch0(ib,j));
170 btof->setPOff2_bunch0(j,test->getBTofPoffright_bunch0(ib,j));
171 btof->setPOff1_bunch1(j,test->getBTofPoffleft_bunch1(ib,j));
172 btof->setPOff2_bunch1(j,test->getBTofPoffright_bunch1(ib,j));
173 btof->setPOff1_bunch2(j,test->getBTofPoffleft_bunch2(ib,j));
174 btof->setPOff2_bunch2(j,test->getBTofPoffright_bunch2(ib,j));
175 btof->setPOff1_bunch3(j,test->getBTofPoffleft_bunch3(ib,j));
176 btof->setPOff2_bunch3(j,test->getBTofPoffright_bunch3(ib,j));
177 }
178 for( int j=0; j<static_cast<int>(nBarSigma); j++){
179 btof->setFPLeft(j,test->getBTofFleft(ib,j));
180 btof->setFPRight(j,test->getBTofFright(ib,j));
181 }
182 for( int j=0; j<static_cast<int>(nBarSigCnt); j++){
183 btof->setFPCounter(j,test->getBTofFcounter(ib,j));
184 }
185
186 fBTofCal.push_back(btof);
187 }
188
189 for(int ie=0;ie<ieSize;ie++){
190 ETofCal* etof= new ETofCal;
191 for( int j=0; j<static_cast<int>(nEndAtten); j++ ) {
192 etof->setAtten(j,test->getETofAtten(ie,j));
193 }
194 for( int j=0; j<static_cast<int>(nEndSpeed); j++ ) {
195 etof->setVeff(j,test->getETofSpeed(ie,j));
196 }
197 for( int j=0; j<static_cast<int>(nEndPar); j++ ) {
198 etof->setP(j,test->getETofP(ie,j));
199 }
200 for( int j=0; j<static_cast<int>(nEndSigma); j++ ) {
201 etof->setFPCounter(j,test->getETofFP(ie,j));
202 }
203 fETofCal.push_back(etof);
204 }
205
206 for(int ietf=0;ietf<ietfSize;ietf++) {
207 for(int jetf=0;jetf<12;jetf++) {
208 EtfCal* etf= new EtfCal;
209 for( int k=0; k<static_cast<int>(nEtfSpeed); k++ ) {
210 etf->setVeff(k,test->getEtfSpeed(ietf,jetf,k));
211 }
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));
216 }
217 fEtfCal.push_back(etf);
218 }
219 }
220
221 for( int ietfb=0;ietfb<ietfBSize;ietfb++ ) {
222 EtfBunchCal* etfbunch= new EtfBunchCal;
223 for( int k=0; k<static_cast<int>(nEtfBunch); k++ ) {
224 etfbunch->setBunchP(k,test->getEtfPBunch(ietfb,k));
225 }
226 fEtfBunchCal.push_back(etfbunch);
227 }
228
229 for( int ibcom=0; ibcom<ibcomSize; ibcom++ ) {
230 BTofCommonCal* bcomtof = new BTofCommonCal;
231 for(int j=0; j<static_cast<int>(nBarOffset); j++) {
232 bcomtof->setOffset( j, test->getBTofOffset(ibcom, j) );
233 }
234 for(int j=0; j<static_cast<int>(nBarSigCor); j++) {
235 bcomtof->setSigmaCorr( j, test->getBTofSigmaCorr(ibcom,j) );
236 }
237 fBTofCommonCal.push_back(bcomtof);
238 }
239
240
241 for( int iinfo=0; iinfo<iinfoSize; iinfo++ ) {
242 TofInfoCal* tofinfo = new TofInfoCal;
243 tofinfo->setRunBegin( test->getRunBegin( iinfo ) );
244 tofinfo->setRunEnd( test->getRunEnd( iinfo ) );
245 tofinfo->setVersion( test->getVersion( iinfo ) );
246 tofinfo->setQCorr( test->getQCorr( iinfo ) );
247 tofinfo->setQElec( test->getQElec( iinfo ) );
248 tofinfo->setMisLable( test->getMisLable( iinfo ) );
249 for( unsigned int j=0; j<5; j++ ) {
250 tofinfo->setBrEast( j, test->getBrEast(iinfo, j) );
251 tofinfo->setBrWest( j, test->getBrWest(iinfo, j) );
252 if( (test->getVersion(iinfo))<=8 ) { // useless
253 tofinfo->setEndcap( j, test->getEndcap(iinfo, j) );
254 }
255 else {
256 tofinfo->setEtf( j, test->getEndcap(iinfo, j) );
257 }
258 }
259 tofinfo->setRunFrom( test->getRunFrom( iinfo ) );
260 tofinfo->setRunTo( test->getRunTo( iinfo ) );
261 tofinfo->setEventFrom( test->getEventFrom( iinfo ) );
262 tofinfo->setEventTo( test->getEventTo( iinfo ) );
263 fTofInfoCal.push_back(tofinfo);
264 }
265
266 return StatusCode::SUCCESS;
267}
268
269
270StatusCode TofCaliSvc::chooseConstants(int run, int event ) {
271
272 MsgStream log(msgSvc(), name());
273
274 m_sequence = 0;
275 bool filled = false;
276 unsigned int inumber = 0;
277
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;
283 }
284 else {
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;
287 }
288 }
289
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;
294 }
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;
298 }
299 }
300
301 it = fTofInfoCal.begin();
302 inumber = 0;
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 ) ) ) ) {
310 filled = true;
311 break;
312 }
313 }
314 if( run > runFrom ) {
315 if( ( run < runTo ) || ( ( run == runTo ) && ( ( eventTo == -1 ) || ( event <= eventTo ) ) ) ) {
316 filled = true;
317 break;
318 }
319 }
320 }
321
322 if( filled ) {
323 m_sequence = inumber;
324 return StatusCode::SUCCESS;
325 }
326 else {
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;
329 }
330
331 return StatusCode::SUCCESS;
332}
333
334
335const double TofCaliSvc::BTDelay1(unsigned id) {
336 double tdelay = 0.0;
337 if( id < 176 ) {
338 tdelay = fBTofCal[176*m_sequence+id]->getP1(0);
339 }
340 else {
341 MsgStream log(msgSvc(), name());
342 log<<MSG::ERROR<<"TofCaliSvc::BTDelay1() -- Wrong TOFID is provided! ID = "<<id<<endreq;
343 }
344 return tdelay;
345}
346
347
348const double TofCaliSvc::BTDelay2(unsigned id) {
349 double tdelay = 0.0;
350 if( id < 176 ) {
351 tdelay = fBTofCal[176*m_sequence+id]->getP2(0);
352 }
353 else {
354 MsgStream log(msgSvc(), name());
355 log<<MSG::ERROR<<"TofCaliSvc::BTDelay2() -- Wrong TOFID is provided! ID = "<<id<<endreq;
356 }
357 return tdelay;
358}
359
360
361const double TofCaliSvc::ETDelay(unsigned id) {
362 double tdelay = 0.0;
363 if( id < 96 ) {
364 tdelay = fETofCal[96*m_sequence+id]->getP(0);
365 }
366 else {
367 MsgStream log(msgSvc(), name());
368 log<<MSG::ERROR<<"TofCaliSvc::ETDelay() -- Wrong TOFID is provided! ID = "<<id<<endreq;
369 }
370 return tdelay;
371}
372
373
374const double TofCaliSvc::BTCorr1(double ADC,double z,unsigned id){
375 MsgStream log(msgSvc(), name());
376
377 double p1[nBarPar];
378 for( int i=0; i<static_cast<int>(nBarPar); i++ ) {
379 p1[i]=fBTofCal[176*m_sequence+id]->getP1(i);
380 }
381
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;
383
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;
385
386 return tcorr1;
387}
388
389
390const double TofCaliSvc::BTCorr2(double ADC,double z,unsigned id){
391 MsgStream log(msgSvc(), name());
392
393 double p2[nBarPar];
394 for( int i=0; i<static_cast<int>(nBarPar); i++ ) {
395 p2[i]=fBTofCal[176*m_sequence+id]->getP2(i);
396 }
397
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;
399
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;
401
402 return tcorr2;
403}
404
405
406const double TofCaliSvc::BTCorrOffset1(double z,unsigned id,double t0){
407 MsgStream log(msgSvc(), name());
408
409 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
410 int whichBunch = (static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
411
412 double poff1[nBarParOff];
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);
416 }
417 }
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);
421 }
422 }
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);
426 }
427 }
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);
431 }
432 }
433
434 double tCorrOffset1 = 0.0;
435 if( z>=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;
437 }
438 else {
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;
440 }
441
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;
443
444 return tCorrOffset1;
445}
446
447
448const double TofCaliSvc::BTCorrOffset2(double z,unsigned id,double t0){
449 MsgStream log(msgSvc(), name());
450
451 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
452 int whichBunch = (static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
453
454 double poff2[nBarParOff];
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);
458 }
459 }
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);
463 }
464 }
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);
468 }
469 }
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);
473 }
474 }
475
476 double tCorrOffset2 = 0.0;
477 if( z>=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;
479 }
480 else {
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;
482 }
483
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;
485
486 return tCorrOffset2;
487}
488
489
490const double TofCaliSvc::TOffset() {
491 double toffset = fBTofCommonCal[m_sequence]->getOffset(0);
492 return toffset;
493}
494
495
496const double TofCaliSvc::BTime1(double ADC,double TDC,double z,unsigned id,double t0){
497 MsgStream log(msgSvc(), name());
498
499 double tcorr1 = BTCorr1( ADC, z, id );
500 double tcorr2 = BTCorrOffset1( z, id, t0);
501 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
502
503 log << MSG::DEBUG << "BTime1 id =" << id << " tcorr=" << tcorr1 << " toffset=" << tcorr2 << " total offset=" << tcorr3 << endreq;
504
505 double time = TDC - tcorr1 - tcorr2 - tcorr3;
506
507 if(time<0.) {
508 log<<MSG::WARNING<<"TofCaliSvc::BTime1() -- A minus time is given : "<< time <<" [Input] ADC = "<<ADC<<" TDC = "<<TDC<<" z = "<<z<<" ID = "<<id<<endreq;
509 }
510 return time;
511}
512
513
514const double TofCaliSvc::BTime2(double ADC,double TDC,double z,unsigned id, double t0){
515 MsgStream log(msgSvc(), name());
516
517 double tcorr1 = BTCorr2( ADC, z, id );
518 double tcorr2 = BTCorrOffset2( z, id ,t0);
519 double tcorr3 = fBTofCommonCal[m_sequence]->getOffset(0);
520
521 log << MSG::DEBUG << "BTime2 id =" << id << " tcorr=" << tcorr1 << " toffset=" << tcorr2 << " total offset=" << tcorr3 << endreq;
522
523 double time = TDC - tcorr1 - tcorr2 - tcorr3;
524
525 if(time<0.) {
526 log<<MSG::WARNING<<"TofCaliSvc::BTime2() -- A minus time is given : "<< time <<" [Input] ADC = "<<ADC<<" TDC = "<<TDC<<" z = "<<z<<" ID = "<<id<<endreq;
527 }
528 return time;
529}
530
531
532/*
533const double TofCaliSvc::BTime(double tleft,double tright,double z,unsigned id){
534 for(int i=0;i<4;i++)
535 m_w[i]=fBTofCal[176*m_sequence+id]->getW(i);
536 double f1=m_w[0]+m_w[1]*z+m_w[2]*z*z;
537 double f2=1-f1;
538 double wt=f1*tleft+f2*tright+m_w[3];
539 if(wt<0.) {
540 MsgStream log(msgSvc(), name());
541 log<<MSG::WARNING<<"TofCaliSvc::BTime() -- A minus time is given : "<<wt <<" [Input] TDC1 = "<<tleft<<" TDC2 = "<<tright<<" z = "<<z<<" ID = "<<id<<endreq;
542 }
543
544 return wt;
545}
546*/
547
548
549const double TofCaliSvc::BTimeCounter(double tleft,double tright,double z,unsigned id){
550
551 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
552 double sigmaCorr2 = sigmaCorr*sigmaCorr;
553
554 double sigmaLeft = BSigma1( z, id );
555 double sigmaLeft2 = sigmaLeft*sigmaLeft;
556 double sigmaRight = BSigma2( z, id );
557 double sigmaRight2 = sigmaRight*sigmaRight;
558
559 double fraction = ( sigmaRight2 - sigmaCorr2 )/( sigmaLeft2 + sigmaRight2 - 2.0*sigmaCorr2);
560
561 double wt=fraction*tleft + (1.0-fraction)*tright;
562 if(wt<0.) {
563 MsgStream log(msgSvc(), name());
564 log<<MSG::WARNING<<"TofCaliSvc::BTimeCounter() -- A minus time is given : "<<wt <<" [Input] z = "<<z<<" ID = "<<id<<endreq;
565 }
566
567 return wt;
568}
569
570const double TofCaliSvc::BTimeCluster(double tlayer1,double tlayer2,double z1,double z2,unsigned id1, unsigned id2){
571
572 double sigmaCorr = fBTofCommonCal[m_sequence]->getSigmaCorr(0);
573 double sigmaCorr2 = sigmaCorr*sigmaCorr;
574
575 double sigmaInner = BSigmaCounter( z1, id1 );
576 double sigmaInner2 = sigmaInner*sigmaInner;
577 double sigmaOuter = BSigmaCounter( z2, id2 );
578 double sigmaOuter2 = sigmaOuter*sigmaOuter;
579
580 double fraction = ( sigmaOuter2 - sigmaCorr2 )/( sigmaInner2 + sigmaOuter2 - 2.0*sigmaCorr2);
581
582 double wt=fraction*tlayer1 + (1.0-fraction)*tlayer2;
583 if(wt<0.) {
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;
586 }
587 return wt;
588}
589
590
591const double TofCaliSvc::BSigma1(double z, unsigned id) {
592 MsgStream log(msgSvc(), name());
593
594 double fpleft[nBarSigma];
595 for( int i=0; i<static_cast<int>(nBarSigma); i++ ) {
596 fpleft[i]=fBTofCal[176*m_sequence+id]->getFPLeft(i);
597 }
598
599 log << MSG::DEBUG << "BSigma1 id =" << id << " 1=" << fpleft[0] << " 2=" << fpleft[1] << " 3=" << fpleft[2] << " 4=" << fpleft[3] << " 5=" << fpleft[4] << endreq;
600
601 double sigmaLeft = fpleft[0] + fpleft[1]*z + fpleft[2]*z*z + fpleft[3]*z*z*z + fpleft[4]*z*z*z*z;
602
603 return sigmaLeft;
604}
605
606
607const double TofCaliSvc::BSigma2(double z, unsigned id) {
608 MsgStream log(msgSvc(), name());
609
610 double fpright[nBarSigma];
611 for( int i=0; i<static_cast<int>(nBarSigma); i++ ) {
612 fpright[i]=fBTofCal[176*m_sequence+id]->getFPRight(i);
613 }
614
615 log << MSG::DEBUG << "BSigma2 id =" << id << " 1=" << fpright[0] << " 2=" << fpright[1] << " 3=" << fpright[2] << " 4=" << fpright[3] << " 5=" << fpright[4] << endreq;
616
617 double sigmaRight = fpright[0] + fpright[1]*z + fpright[2]*z*z + fpright[3]*z*z*z + fpright[4]*z*z*z*z;
618
619 return sigmaRight;
620}
621
622
623const double TofCaliSvc::BSigmaCounter(double z, unsigned id) {
624 MsgStream log(msgSvc(), name());
625
626 double fplayer[nBarSigCnt];
627 for( int i=0; i<static_cast<int>(nBarSigCnt); i++ ) {
628 fplayer[i]=fBTofCal[176*m_sequence+id]->getFPCounter(i);
629 }
630
631 log << MSG::DEBUG << "BSigmaCounter id =" << id << " 1=" << fplayer[0] << " 2=" << fplayer[1] << " 3=" << fplayer[2] << " 4=" << fplayer[3] << " 5=" << fplayer[4] << endreq;
632
633 double sigma = fplayer[0] + fplayer[1]*z + fplayer[2]*z*z + fplayer[3]*z*z*z + fplayer[4]*z*z*z*z;
634
635 return sigma;
636}
637
638
639const double TofCaliSvc::BSigmaCluster(double z1, double z2, unsigned id1, unsigned id2) {
640 double sigmaInner = BSigmaCounter(z1, id1);
641 double sigmaInner2 = sigmaInner*sigmaInner;
642 double sigmaOuter = BSigmaCounter(z2, id2);
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);
647 sigma = sqrt(sigma);
648 return sigma;
649}
650
651
652const double TofCaliSvc::ETime(double ADC,double TDC,double rHit,unsigned id){
653 MsgStream log(msgSvc(), name());
654
655 double p[nEndPar];
656 for( int i=0; i<static_cast<int>(nEndPar); i++ ) {
657 p[i]=fETofCal[96*m_sequence+id]->getP(i);
658 }
659
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;
661
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);
663
664 if(time<0.) {
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;
667 }
668
669 return time;
670}
671
672
673const double TofCaliSvc::ESigma(double r, unsigned id) {
674 MsgStream log(msgSvc(), name());
675
676 double fp[nEndSigma];
677 for( int i=0; i<static_cast<int>(nEndSigma); i++) {
678 fp[i]=fETofCal[96*m_sequence+id]->getFPCounter(i);
679 }
680
681 log << MSG::DEBUG << "ESigma id =" << id << " 1=" << fp[0] << " 2=" << fp[1] << " 3=" << fp[2] << endreq;
682
683 double sigma = fp[0] + fp[1]*r + fp[2]*r*r;
684
685 return sigma;
686}
687
688
689const double TofCaliSvc::EtfTime(double ADC1,double ADC2,double TDC1,double TDC2,unsigned id,unsigned int strip,double t0){
690 MsgStream log(msgSvc(), name());
691
692 double q = (ADC1+ADC2)/2.0;
693 double t = (TDC1+TDC2)/2.0;
694
695 double p[nEtfPar];
696 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
697 p[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP(i);
698 }
699
700 double tcorr = p[0]
701 + p[1]/TMath::Sqrt(q)
702 + p[2]/q
703 + p[3]*q
704 + p[4]*q*q
705 + p[5]*q*q*q
706 + p[6]*q*q*q*q;
707 double time = t - tcorr;
708
709 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
710 int ibunch = (static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
711 double pbunch = EtfBunchP(ibunch);
712
713 time = time - pbunch;
714
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;
716
717 return time;
718}
719
720
721const double TofCaliSvc::EtfTime1(double ADC,double TDC,double z,unsigned id,unsigned int strip,double t0){
722 MsgStream log(msgSvc(), name());
723
724 double p1[nEtfPar];
725 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
726 p1[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP1(i);
727 }
728
729 double tcorr1 = p1[0]
730 + p1[1]/TMath::Sqrt(ADC)
731 + p1[2]*ADC
732 + p1[3]*ADC*ADC
733 + p1[4]*ADC*ADC*ADC
734 + p1[5]*ADC*ADC*ADC*ADC
735 + p1[6]*z/TMath::Sqrt(ADC)
736 + p1[7]/ADC
737 + p1[8]*z/ADC
738 + p1[9]*z*ADC
739 + p1[10]*z
740 + p1[11]*z*z
741 + p1[12]*z*z*z;
742 double time1 = TDC - tcorr1;
743
744 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
745 int ibunch = (static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
746 double pbunch = EtfBunchP(ibunch);
747
748 time1 = time1 - pbunch;
749
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;
751
752 return time1;
753}
754
755
756const double TofCaliSvc::EtfTime2(double ADC,double TDC,double z,unsigned id,unsigned int strip,double t0){
757 MsgStream log(msgSvc(), name());
758
759 double p2[nEtfPar];
760 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
761 p2[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP2(i);
762 }
763
764 double tcorr2 = p2[0]
765 + p2[1]/TMath::Sqrt(ADC)
766 + p2[2]*ADC
767 + p2[3]*ADC*ADC
768 + p2[4]*ADC*ADC*ADC
769 + p2[5]*ADC*ADC*ADC*ADC
770 + p2[6]*z/TMath::Sqrt(ADC)
771 + p2[7]/ADC
772 + p2[8]*z/ADC
773 + p2[9]*z*ADC
774 + p2[10]*z
775 + p2[11]*z*z
776 + p2[12]*z*z*z;
777 double time2 = TDC - tcorr2;
778
779 int numBunch = fTofInfoCal[m_sequence]->getRunEnd();
780 int ibunch = (static_cast<int>(t0/(12000./499.8/(numBunch*1.0))+0.1))%numBunch;
781 double pbunch = EtfBunchP(ibunch);
782
783 time2 = time2 - pbunch;
784
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;
786
787 return time2;
788}
789
790
791const double TofCaliSvc::EtfTimeMC(double ADC1,double ADC2,double TDC1,double TDC2,unsigned id,unsigned int strip,double t0){
792 MsgStream log(msgSvc(), name());
793
794 double q = (ADC1+ADC2)/2.0;
795 double t = (TDC1+TDC2)/2.0;
796
797 double p[nEtfPar];
798 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
799 p[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP(i);
800 }
801
802 double tcorr = p[0] + p[1]/TMath::Sqrt(q);
803 double time = t - tcorr;
804
805 log << MSG::DEBUG << "EtfTime module =" << id << " strip=" << strip << " 1=" << p[0] << " 2=" << p[1] << " tcorr=" << tcorr << " t0=" << t0 << " time=" << time << endreq;
806
807 return time;
808}
809
810
811const double TofCaliSvc::EtfTimeMC1(double ADC,double TDC,double z,unsigned id,unsigned int strip,double t0){
812 MsgStream log(msgSvc(), name());
813
814 double p1[nEtfPar];
815 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
816 p1[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP1(i);
817 }
818
819 double tcorr1 = p1[0] + p1[1]/TMath::Sqrt(ADC) + p1[2]*z;
820 double time1 = TDC - tcorr1;
821
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;
823
824 return time1;
825}
826
827
828const double TofCaliSvc::EtfTimeMC2(double ADC,double TDC,double z,unsigned id,unsigned int strip,double t0){
829 MsgStream log(msgSvc(), name());
830
831 double p2[nEtfPar];
832 for( int i=0; i<static_cast<int>(nEtfPar); i++ ) {
833 p2[i]=fEtfCal[72*12*m_sequence+12*id+strip]->getP2(i);
834 }
835
836 double tcorr2 = p2[0] + p2[1]/TMath::Sqrt(ADC) + p2[2]*z;
837 double time2 = TDC - tcorr2;
838
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;
840
841 return time2;
842}
843
844
845const double TofCaliSvc::EtfTime(double tleft,double tright){
846 MsgStream log(msgSvc(), name());
847
848 double time = (tleft+tright)/2.0;
849 log << MSG::DEBUG << "EtfTime tleft=" << tleft << " tright=" << tright << " time=" << time << endreq;
850
851 return time;
852}
853
854
855const double TofCaliSvc::EtfBunchP(int index){
856 MsgStream log(msgSvc(), name());
857
858 double pbunch = 0.0;
859 if( fEtfBunchCal.size()>0 && index>=0 && index<4 ) {
860 pbunch=fEtfBunchCal[m_sequence]->getBunchP(index);
861 }
862
863 return pbunch;
864}
865
866
867const double TofCaliSvc::BPulseHeight1( double ADC, double zHit, double sint, unsigned int id ) {
868 double length = 230.0;
869 double A = 1.0;
870 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
871 double q0 = ADC*sint*TMath::Exp((0.5*length-zHit)/Latten)/A;
872 return q0;
873}
874
875
876const double TofCaliSvc::BPulseHeight2( double ADC, double zHit, double sint, unsigned int id ) {
877 double length = 230.0;
878 double A = 1.0;
879 double Latten = fBTofCal[176*m_sequence+id]->getAtten(0);
880 double q0 = ADC*sint*TMath::Exp((0.5*length+zHit)/Latten)/A;
881 return q0;
882}
883
884
885const double TofCaliSvc::BPulseHeight( double ADC1, double ADC2, double zHit, double sint, unsigned int id ) {
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)) );
891 return q;
892}
893
894
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));
900 return q;
901}
902
903
904const double TofCaliSvc::EPulseHeight( double ADC, double rHit, double cost, unsigned int id ) {
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);
910
911 double q0 = ADC*fabs(cost)*TMath::Exp(-(a1*(rHit-length)+a2*(rHit-length)*(rHit-length)))/a3;
912
913 return q0;
914}
915
916
917const double TofCaliSvc::EPh( double ADC, double rHit, unsigned int id ) {
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)));
923 return q0;
924}
925
926
927const double TofCaliSvc::getQ0(unsigned id){
928 return fBTofCal[176*m_sequence+id]->getAtten(3);
929}
930
931
932const double TofCaliSvc::BVeff(unsigned id){
933 if(id<176){
934 return fBTofCal[176*m_sequence+id]->getVeff(0);
935 }else{
936 std::cout<<"bad id="<<id<<std::endl;
937 return 0.;}
938}
939
940
941const double TofCaliSvc::BAtten(unsigned id){
942 if( id > 175 ) return -1;
943 return fBTofCal[176*m_sequence+id]->getAtten(0);
944}
945
946const double TofCaliSvc::BGainForward(unsigned id){
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);
951 return A1;
952}
953
954const double TofCaliSvc::BGainBackward(unsigned id){
955 if( id > 175 ) return -1;
956 return fBTofCal[176*m_sequence+id]->getAtten(2);
957}
958
959const double TofCaliSvc::EVeff(unsigned id){
960 if( id > 175 ) return -1;
961 return fETofCal[96*m_sequence+id]->getVeff(0);
962}
963
964const double TofCaliSvc::EtfVeff(unsigned int id, unsigned int strip){
965 if(id<72 && strip<12){
966 return fEtfCal[72*12*m_sequence+12*id+strip]->getVeff(0);
967 }else{
968 std::cout<<"bad id="<<id<<" strip="<<strip<<std::endl;
969 return 0.;
970 }
971}
972
973
974const double TofCaliSvc::ZTDC(double tleft, double tright, unsigned id) {
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);
980 return ztdc;
981}
982
983const double TofCaliSvc::ZTDC1(double tright, unsigned id, double z) {
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;
990 return tleft;
991}
992
993const double TofCaliSvc::ZTDC2(double tleft, unsigned id, double z) {
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;
1000 return tright;
1001}
1002
1003const double TofCaliSvc::ZADC(double qleft, double qright, unsigned id) {
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 );
1011 return zadc;
1012}
1013
1014const double TofCaliSvc::ZADC1(double qright, unsigned id, double z) {
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);
1022 return qleft;
1023}
1024
1025const double TofCaliSvc::ZADC2(double qleft, unsigned id, double z) {
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);
1033 return qright;
1034}
1035
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;
1042 return ztdc;
1043}
1044
1045
1046const double TofCaliSvc::EAtten(unsigned id){
1047 if( id > 95 ) return -1;
1048 return fETofCal[96*m_sequence+id]->getAtten(0);
1049}
1050
1051const double TofCaliSvc::EGain(unsigned id){
1052 if( id > 95 ) return -1;
1053 return fETofCal[96*m_sequence+id]->getAtten(1);
1054}
1055
1057 return fTofInfoCal[m_sequence]->getRunBegin();
1058}
1059
1061 return fTofInfoCal[m_sequence]->getRunEnd();
1062}
1063
1065 return fTofInfoCal[m_sequence]->getVersion();
1066}
1067
1069 return fTofInfoCal[m_sequence]->getQCorr();
1070}
1071
1073 return fTofInfoCal[m_sequence]->getQElec();
1074}
1075
1077 return fTofInfoCal[m_sequence]->getMisLable();
1078}
1079
1080const int TofCaliSvc::BrEast(unsigned int im) {
1081 return fTofInfoCal[m_sequence]->getBrEast(im);
1082}
1083
1084const int TofCaliSvc::BrWest(unsigned int im) {
1085 return fTofInfoCal[m_sequence]->getBrWest(im);
1086}
1087
1088const int TofCaliSvc::Endcap(unsigned int im) {
1089 return fTofInfoCal[m_sequence]->getEndcap(im);
1090}
1091
1092const int TofCaliSvc::Etf(unsigned int im) {
1093 return fTofInfoCal[m_sequence]->getEndcap(im);
1094}
1095
1096BTofCal* TofCaliSvc::BTof(unsigned id) const{
1097 return fBTofCal[176*m_sequence+id];
1098}
1099
1100ETofCal* TofCaliSvc::ETof(unsigned id) const{
1101 return fETofCal[96*m_sequence+id];
1102}
1103
1104EtfCal* TofCaliSvc::EtfTof(unsigned id) const{
1105 return fEtfCal[72*12*m_sequence+id];
1106}
1107
1109 return fBTofCommonCal[m_sequence];
1110}
1111
1113 return fTofInfoCal[m_sequence];
1114}
1115
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;
1120
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;
1124 // cout<<"The 22rd Endcap TOF PMT veff is"<<" "<<ETof(22)->getVeff()<<endl;
1125}
1126
1127void TofCaliSvc::handle(const Incident& inc){
1128 MsgStream log( messageService(), name() );
1129 log << MSG::DEBUG << "handle: " << inc.type() << endreq;
1130
1131 if ( inc.type() == "NewRun" ){
1132 log << MSG::DEBUG << "New Run" << endreq;
1133 // if(!m_hasbeeninitialized){
1134
1135 StatusCode sc= FillfromDatabase();
1136 if(sc.isSuccess()){
1137 m_hasbeeninitialized=true;
1138 }
1139 // }
1140 }
1141}
std::string test
Definition: CalibModel.cxx:43
TTree * sigma
EvtComplex exp(const EvtComplex &c)
Definition: EvtComplex.hh:252
****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
Definition: KKsem.h:33
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
IMessageSvc * msgSvc()
TTree * t
Definition: binning.cxx:23
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)
void setFPCounter(int idx, double fp3)
void setPOff1_bunch3(int idx, double poff1_bunch3)
void setPOff2_bunch2(int idx, double poff2_bunch2)
void setPOff2_bunch3(int idx, double poff2_bunch3)
void setPOff2_bunch0(int idx, double poff2_bunch0)
void setPOff1_bunch1(int idx, double poff1_bunch1)
void setAtten(int idx, double atten)
void setBunchP(int idx, double pbunch)
Definition: EtfBunchCal.h:15
void setVeff(int idx, double veff)
const double BTimeCounter(double tleft, double tright, double z, unsigned int id)
Definition: TofCaliSvc.cxx:549
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)
Definition: TofCaliSvc.cxx:867
const double BPh(double ADC1, double ADC2, double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:895
const int RunBegin()
const double ZTDC2(double tleft, unsigned int id, double z)
Definition: TofCaliSvc.cxx:993
const double BPulseHeight2(double ADC, double zHit, double sint, unsigned int id)
Definition: TofCaliSvc.cxx:876
const int MisLable()
const double EGain(unsigned int id)
const double BTimeCluster(double tlayer1, double tlayer2, double z1, double z2, unsigned int id1, unsigned int id2)
Definition: TofCaliSvc.cxx:570
const double EPh(double ADC, double rHit, unsigned int id)
Definition: TofCaliSvc.cxx:917
const double ZTDC1(double tright, unsigned int id, double z)
Definition: TofCaliSvc.cxx:983
TofInfoCal * TofInfo() const
const double BPulseHeight(double ADC1, double ADC2, double zHit, double sint, unsigned int id)
Definition: TofCaliSvc.cxx:885
const int QCorr()
const int BrEast(unsigned int No)
const double BGainForward(unsigned int id)
Definition: TofCaliSvc.cxx:946
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown)
Definition: TofCaliSvc.cxx:50
const int Etf(unsigned int No)
const double EtfBunchP(int index)
Definition: TofCaliSvc.cxx:855
const double BTCorrOffset2(double zHit, unsigned int id, double t0)
Definition: TofCaliSvc.cxx:448
const double BTime2(double ADC, double TDC, double zHit, unsigned int id, double t0)
Definition: TofCaliSvc.cxx:514
const double EPulseHeight(double ADC, double rHit, double cost, unsigned int id)
Definition: TofCaliSvc.cxx:904
const double BSigma1(double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:591
const double BAtten(unsigned int id)
Definition: TofCaliSvc.cxx:941
virtual StatusCode finalize()
Definition: TofCaliSvc.cxx:92
const double EtfTimeMC(double ADC1, double ADC2, double TDC1, double TDC2, unsigned int id, unsigned int strip, double t0)
Definition: TofCaliSvc.cxx:791
const double BSigma2(double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:607
const double EtfTime1(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
Definition: TofCaliSvc.cxx:721
StatusCode chooseConstants(int run, int number)
Definition: TofCaliSvc.cxx:270
const double BTime1(double ADC, double TDC, double zHit, unsigned int id, double t0)
Definition: TofCaliSvc.cxx:496
BTofCal * BTof(unsigned int id) const
const double ETime(double ADC, double TDC, double rHit, unsigned int id)
Definition: TofCaliSvc.cxx:652
const double BTCorrOffset1(double zHit, unsigned int id, double t0)
Definition: TofCaliSvc.cxx:406
const double EtfTimeMC1(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
Definition: TofCaliSvc.cxx:811
const double EtfTimeMC2(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
Definition: TofCaliSvc.cxx:828
const double EtfTime2(double ADC, double TDC, double zHit, unsigned int id, unsigned int strip, double t0)
Definition: TofCaliSvc.cxx:756
const double BSigmaCluster(double zHit1, double zHit2, unsigned int id1, unsigned int id2)
Definition: TofCaliSvc.cxx:639
const double EtfVeff(unsigned int id, unsigned int strip)
Definition: TofCaliSvc.cxx:964
const double ZADC1(double qright, unsigned int id, double z)
virtual StatusCode initialize()
Definition: TofCaliSvc.cxx:59
const double BGainBackward(unsigned int id)
Definition: TofCaliSvc.cxx:954
const double BVeff(unsigned int id)
Definition: TofCaliSvc.cxx:932
const double ESigma(double rHit, unsigned int id)
Definition: TofCaliSvc.cxx:673
const int Version()
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)
Definition: TofCaliSvc.cxx:927
const int BrWest(unsigned int No)
const int RunEnd()
const double ZTDC(double tleft, double tright, unsigned int id)
Definition: TofCaliSvc.cxx:974
const double ETDelay(unsigned int id)
Definition: TofCaliSvc.cxx:361
const double EVeff(unsigned int id)
Definition: TofCaliSvc.cxx:959
const double TOffset()
Definition: TofCaliSvc.cxx:490
const double EAtten(unsigned int id)
const int Endcap(unsigned int No)
const double BTCorr2(double ADC, double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:390
const int QElec()
BTofCommonCal * BTofCommon() const
const double BTCorr1(double ADC, double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:374
void handle(const Incident &)
const double BTDelay1(unsigned int id)
Definition: TofCaliSvc.cxx:335
const double BTDelay2(unsigned int id)
Definition: TofCaliSvc.cxx:348
EtfCal * EtfTof(unsigned int id) const
TofCaliSvc(const std::string &name, ISvcLocator *svcloc)
Definition: TofCaliSvc.cxx:45
ETofCal * ETof(unsigned int id) const
const double BSigmaCounter(double zHit, unsigned int id)
Definition: TofCaliSvc.cxx:623