1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/DataSvc.h"
3#include "GaudiKernel/IDataProviderSvc.h"
4#include "GaudiKernel/IIncidentListener.h"
5#include "GaudiKernel/IIncidentSvc.h"
6#include "GaudiKernel/IInterface.h"
7#include "GaudiKernel/ISvcLocator.h"
8#include "GaudiKernel/Incident.h"
9#include "GaudiKernel/Kernel.h"
10#include "GaudiKernel/MsgStream.h"
11#include "GaudiKernel/SmartDataPtr.h"
12#include "GaudiKernel/StatusCode.h"
21#include "CalibData/CalibModel.h"
22#include "CalibData/Mdc/MdcCalibData.h"
23#include "CalibData/Mdc/MdcDataConst.h"
24#include "EventModel/EventHeader.h"
30typedef map<int, double>::value_type
valType;
35 : base_class( name, svcloc ), m_layInfSig( -1 ) {
38 declareProperty(
"CheckConst", m_checkConst =
false );
39 declareProperty(
"LayerInfSig", m_layInfSig );
40 declareProperty(
"XtMode", m_xtMode = 1 );
41 declareProperty(
"NewXtFile", m_xtfile );
42 declareProperty(
"ReadWireEffDb", m_readWireEffDb =
true );
43 declareProperty(
"WireEffFile", m_wireEffFile );
44 declareProperty(
"LinearXT", m_linearXT =
false );
45 declareProperty(
"FixSigma", m_fixSigma =
false );
46 declareProperty(
"FixSigmaValue", m_fixSigmaValue = 130.0 );
47 m_outputXtMode =
true;
62 MsgStream log(
msgSvc(), name() );
63 log << MSG::INFO <<
"MdcCalibFunSvc::initialize()" << endmsg;
65 StatusCode sc = Service::initialize();
66 if ( sc.isFailure() )
return sc;
69 sc = service(
"IncidentSvc", incsvc );
71 if ( sc.isSuccess() ) { incsvc->addListener(
this,
"NewRun", priority ); }
73 sc = service(
"CalibDataSvc", m_pCalDataSvc,
true );
74 if ( sc == StatusCode::SUCCESS )
75 { log << MSG::INFO <<
"Retrieve IDataProviderSvc" << endmsg; }
76 else { log << MSG::FATAL <<
"can not get IDataProviderSvc" << endmsg; }
78 sc = service(
"MdcGeomSvc", m_pMdcGeomSvc );
79 if ( sc != StatusCode::SUCCESS )
81 log << MSG::ERROR <<
"can not use MdcGeomSvc" << endmsg;
82 return StatusCode::FAILURE;
85 if ( m_fixSigma ) cout <<
"Fix MDC sigma to " << m_fixSigmaValue <<
" micron." << endl;
88 for (
int wir = 0; wir < 6796; wir++ ) m_wireEff[wir] = 1.0;
89 for (
int lay = 0; lay < NLAYER; lay++ )
91 for (
int iEntr = 0; iEntr < NXTENTR; iEntr++ )
93 for (
int lr = 0; lr < 2; lr++ ) m_nR2t[lay][iEntr][lr] = 0;
97 return StatusCode::SUCCESS;
101 MsgStream log(
msgSvc(), name() );
102 log << MSG::INFO <<
"MdcCalibFunSvc::finalize()" << endmsg;
111 return StatusCode::SUCCESS;
115 MsgStream log(
msgSvc(), name() );
116 log << MSG::DEBUG <<
"handle: " << inc.type() << endmsg;
118 if ( inc.type() ==
"NewRun" )
120 log << MSG::DEBUG <<
"NewRun" << endmsg;
122 if ( !initCalibConst() )
124 log << MSG::ERROR <<
"can not initilize Mdc Calib Constants" << endl
125 <<
" Please insert the following statement "
126 <<
"in your \"jobOption.txt\" "
127 <<
"before the include file of Mdc Reconstruction: " << endl
129 <<
"#include \"$CALIBSVCROOT/share/job-CalibData.txt\"" << endl
130 <<
" If still error, please contact with Wu Linghui "
131 <<
"(wulh@mail.ihep.ac.cn)." << endmsg;
138 double tp = fabs( z - m_zst[lay] ) / vp;
143 double entrance )
const {
145 if ( 0 == m_xtMode ) { dist = t2dPoly( drifttime, layid, cellid, lr, entrance ); }
148 if ( ( 0 == lr ) || ( 1 == lr ) )
149 dist = t2dInter( drifttime, layid, cellid, lr, entrance );
152 double dl = t2dInter( drifttime, layid, cellid, lr, entrance );
153 double dr = t2dInter( drifttime, layid, cellid, lr, entrance );
154 dist = ( dl + dr ) * 0.5;
158 if ( m_linearXT ) dist = 0.03 * drifttime;
162double MdcCalibFunSvc::t2dPoly(
double drifttime,
int layid,
int cellid,
int lr,
163 double entrance )
const {
171 if ( drifttime < xtpar[6] )
173 for ( ord = 0; ord < 6; ord++ ) { dist += xtpar[ord] * pow( drifttime, ord ); }
177 for ( ord = 0; ord < 6; ord++ ) { dist += xtpar[ord] * pow( xtpar[6], ord ); }
178 dist += xtpar[7] * ( drifttime - xtpar[6] );
184double MdcCalibFunSvc::t2dInter(
double drifttime,
int layid,
int cellid,
int lr,
185 double entrance )
const {
188 int nBin = m_nNewXt[layid][iEntr][lr];
189 if ( drifttime < m_vt[layid][iEntr][lr][0] ) { dist = m_vd[layid][iEntr][lr][0]; }
190 else if ( drifttime < m_vt[layid][iEntr][lr][nBin - 1] )
192 for (
int i = 0; i < ( nBin - 1 ); i++ )
194 if ( ( drifttime >= m_vt[layid][iEntr][lr][i] ) &&
195 ( drifttime < m_vt[layid][iEntr][lr][i + 1] ) )
197 double t1 = m_vt[layid][iEntr][lr][i];
198 double t2 = m_vt[layid][iEntr][lr][i + 1];
199 double d1 = m_vd[layid][iEntr][lr][i];
200 double d2 = m_vd[layid][iEntr][lr][i + 1];
201 dist = ( drifttime - t1 ) * ( d2 - d1 ) / ( t2 - t1 ) + d1;
206 else { dist = m_vd[layid][iEntr][lr][nBin - 1]; }
211 double entrance )
const {
224 double tm1 = xtpar[6];
231 cout <<
"Warning in MdcCalibFunSvc: driftDist < 0" << endl;
234 else if ( dist < xtpar[0] ) {
time = 0.0; }
235 else if ( dist < dm1 )
237 for ( ord = 0; ord < 5; ord++ ) { dxdtpar[ord] = (double)( ord + 1 ) * xtpar[ord + 1]; }
243 cout <<
"Warning in MdcCalibFunSvc: "
244 <<
"can not get the exact value in the dist-to-time conversion." << endl;
250 for ( ord = 0; ord < 6; ord++ ) x += xtpar[ord] * pow(
time, ord );
253 if ( fabs( deltax ) < 0.001 ) {
break; }
256 for ( ord = 0; ord < 5; ord++ ) dxdt += dxdtpar[ord] * pow(
time, ord );
262 else if ( dist < dm2 ) {
time = ( dist - dm1 ) * ( tm2 - tm1 ) / ( dm2 - dm1 ) + tm1; }
265 if ( m_linearXT )
time = dist / 0.03;
270 double tanlam,
double z,
double Q )
const {
272 if ( ( 0 == lr ) || ( 1 == lr ) )
273 { sigma =
getSigmaLR( layid, lr, dist, entrance, tanlam, z, Q ); }
276 double sl =
getSigmaLR( layid, 0, dist, entrance, tanlam, z, Q );
277 double sr =
getSigmaLR( layid, 1, dist, entrance, tanlam, z, Q );
278 sigma = ( sl + sr ) * 0.5;
281 if ( m_fixSigma ) sigma = 0.001 * m_fixSigmaValue;
282 if ( layid == m_layInfSig ) sigma = 9999.0;
287 double tanlam,
double z,
double Q )
const {
289 double sigma = 9999.0;
308 double distAbs = fabs( dist );
309 if ( distAbs <
dmin ) { sigma = par[0]; }
312 int bin = (int)( ( distAbs -
dmin ) / dw );
313 if (
bin >= nmaxBin ) { sigma = par[nmaxBin]; }
314 else if (
bin < 0 ) { sigma = par[0]; }
317 dref[0] = (double)
bin * dw + 0.25;
318 dref[1] = (double)(
bin + 1 ) * dw + 0.25;
319 if ( ( dref[1] - dref[0] ) <= 0 ) { sigma = 9999.0; }
322 sigma = ( par[
bin + 1] - par[
bin] ) * ( distAbs - dref[0] ) / ( dref[1] - dref[0] ) +
331 double tanlam,
double z,
double Q )
const {
332 double sigma1 =
getSigma( layid, lr, dist, entrance, tanlam, z, Q );
337 double tanlam,
double z,
double Q )
const {
343 double z,
double Q )
const {
349 double tanlam,
double z,
double Q )
const {
352 cout <<
"ERROR: can not get sigma-time functions" << endl;
355 else if ( ( 0 == lr ) || ( 1 == lr ) )
356 {
return getSigmaToTLR( layid, lr, tdr, entrance, tanlam, z, Q ); }
359 double sl =
getSigmaToTLR( layid, 0, tdr, entrance, tanlam, z, Q );
360 double sr =
getSigmaToTLR( layid, 1, tdr, entrance, tanlam, z, Q );
361 double sigma = ( sl + sr ) * 0.5;
367 double tanlam,
double z,
double Q )
const {
370 int nBin = m_nR2t[layid][iEntr][lr];
371 if ( tdr < m_tR2t[layid][iEntr][lr][0] ) { sigma = m_sR2t[layid][iEntr][lr][0]; }
372 else if ( tdr < m_tR2t[layid][iEntr][lr][nBin - 1] )
374 for (
int i = 0; i < ( nBin - 1 ); i++ )
376 if ( ( tdr >= m_tR2t[layid][iEntr][lr][i] ) &&
377 ( tdr < m_tR2t[layid][iEntr][lr][i + 1] ) )
379 double t1 = m_tR2t[layid][iEntr][lr][i];
380 double t2 = m_tR2t[layid][iEntr][lr][i + 1];
381 double s1 = m_sR2t[layid][iEntr][lr][i];
382 double s2 = m_sR2t[layid][iEntr][lr][i + 1];
383 sigma = ( tdr - t1 ) * ( s2 - s1 ) / ( t2 - t1 ) + s1;
389 else { sigma = m_sR2t[layid][iEntr][lr][nBin - 1]; }
394 if ( m_xtiter != m_xtmap.end() )
396 key = ( *m_xtiter ).first;
397 par = ( *m_xtiter ).second;
406 for (
int ord = 0; ord < 8; ord++ )
408 parId = getXtparId( layid, entr, lr, ord );
409 par[ord] = m_xtpar[parId];
414 MsgStream log(
msgSvc(), name() );
415 log << MSG::INFO <<
"read calib const from TCDS" << endmsg;
417 for (
int layid = 0; layid < NLAYER; layid++ )
419 for (
int entr = 0; entr < NXTENTR; entr++ )
421 for (
int lr = 0; lr < 2; lr++ )
425 if ( !newXtTree )
return false;
426 newXtTree->SetBranchAddress(
"t", &br_t );
427 newXtTree->SetBranchAddress(
"d", &br_d );
428 int nEntries = newXtTree->GetEntries();
429 if ( ( nEntries < 10 ) || ( nEntries >= 200 ) )
431 log << MSG::ERROR <<
"wrong X-T constants: layer " << layid <<
", iEntr " << entr
432 <<
", lr " << lr << endmsg;
435 m_nNewXt[layid][entr][lr] = nEntries;
436 for (
int i = 0; i < nEntries; i++ )
438 newXtTree->GetEntry( i );
439 m_vt[layid][entr][lr][i] = br_t;
440 m_vd[layid][entr][lr][i] = br_d;
450 MsgStream log(
msgSvc(), name() );
451 string fullPath =
"/Calib/MdcCal";
452 SmartDataPtr<CalibData::MdcCalibData> calConst( m_pCalDataSvc, fullPath );
455 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr" << endmsg;
459 TTree* newXtTree = calConst->getNewXtpar( layid, entr, lr );
464 for (
int layid = 0; layid < NLAYER; layid++ )
469 if ( !r2tTree )
return false;
470 r2tTree->SetBranchAddress(
"iEntr", &br_iEntr );
471 r2tTree->SetBranchAddress(
"lr", &br_lr );
472 r2tTree->SetBranchAddress(
"s", &br_s );
473 r2tTree->SetBranchAddress(
"t", &br_t );
474 int nEntries = r2tTree->GetEntries();
475 for (
int i = 0; i < nEntries; i++ )
477 r2tTree->GetEntry( i );
478 int bin = m_nR2t[layid][br_iEntr][br_lr];
481 cout <<
"Error: number of sigma-time bins overflow" << endl;
484 m_tR2t[layid][br_iEntr][br_lr][
bin] = br_t;
485 m_sR2t[layid][br_iEntr][br_lr][
bin] = br_s;
486 m_nR2t[layid][br_iEntr][br_lr]++;
489 for (
int layid = 0; layid < NLAYER; layid++ )
491 for (
int iEntr = 0; iEntr < NXTENTR; iEntr++ )
493 for (
int lr = 0; lr < 2; lr++ )
495 if ( ( m_nR2t[layid][iEntr][lr] < 10 ) || ( m_nR2t[layid][iEntr][lr] >= 200 ) )
504 MsgStream log(
msgSvc(), name() );
505 string fullPath =
"/Calib/MdcCal";
506 SmartDataPtr<CalibData::MdcCalibData> calConst( m_pCalDataSvc, fullPath );
509 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr" << endmsg;
513 TTree* r2tTree = calConst->getR2tpar( layid );
518 int wireid = m_pMdcGeomSvc->Wire( layid, cellid )->Id();
519 double t0 =
getT0( wireid );
529 if ( Q < 0.0001 ) Q = 0.0001;
531 for ( ord = 0; ord < 2; ord++ ) { qtpar[ord] =
getQtpar( layid, ord ); }
533 tw = qtpar[0] + qtpar[1] / sqrt( Q );
534 if (
m_run < 0 ) tw = 0.0;
540 int wireid = m_pMdcGeomSvc->Wire( layid, cellid )->Id();
541 return m_wireEff[wireid];
545 if ( 0 == ord )
return m_qtpar0[layid];
546 else if ( 1 == ord )
return m_qtpar1[layid];
549 cout <<
"wrong order number" << endl;
556 if ( ( entr < 0 ) || ( entr >= 18 ) ) { entr = 17; }
559 parId = getSdparId( layid, entr, lr,
bin );
560 par[
bin] = m_sdpar[parId];
565 if ( m_sditer != m_sdmap.end() )
567 key = ( *m_sditer ).first;
568 par = ( *m_sditer ).second;
579 double aglpi = 3.141592653;
580 double aglmin = -1.570796327;
581 double aglmax = 1.570796327;
582 double delAngle = 0.174532925;
584 MsgStream log(
msgSvc(), name() );
585 if ( entrance < aglmin )
587 log << MSG::WARNING <<
"entrance angle < -pi/2" << endmsg;
591 if ( entrance >= aglmin )
break;
594 else if ( entrance > aglmax )
596 log << MSG::WARNING <<
"entrance angle > pi/2" << endmsg;
600 if ( entrance <= aglmax )
break;
604 index = (int)( ( entrance - aglmin ) / delAngle );
605 if ( index < 0 ) index = 0;
606 else if ( index > idmax ) index = idmax;
615 double aglpi = 3.141592653;
616 double aglmin = -1.570796327;
617 double aglmax = 1.570796327;
618 double delAngle = 0.523598776;
620 MsgStream log(
msgSvc(), name() );
621 if ( entrance < aglmin )
623 log << MSG::WARNING <<
"entrance angle < -pi/2" << endmsg;
627 if ( entrance >= aglmin )
break;
630 else if ( entrance > aglmax )
632 log << MSG::WARNING <<
"entrance angle > pi/2" << endmsg;
636 if ( entrance <= aglmax )
break;
640 index = (int)( ( entrance - aglmin ) / delAngle );
641 if ( index < 0 ) index = 0;
642 else if ( index > idmax ) index = idmax;
647bool MdcCalibFunSvc::initCalibConst() {
648 MsgStream log(
msgSvc(), name() );
649 log << MSG::INFO <<
"read calib const from TCDS" << endmsg;
651 IDataProviderSvc* eventSvc = NULL;
652 StatusCode sc = Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
653 if ( sc.isFailure() )
655 log << MSG::FATAL <<
"can not get EventDataSvc" << endmsg;
658 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc,
"/Event/EventHeader" );
661 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
664 m_run = eventHeader->runNumber();
676 string fullPath =
"/Calib/MdcCal";
677 SmartDataPtr<CalibData::MdcCalibData> calConst( m_pCalDataSvc, fullPath );
680 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr" << endmsg;
691 calConst->setXtBegin();
692 while ( calConst->getNextXtpar(
key, par ) ) { m_xtmap.insert(
valType(
key, par ) ); }
695 unsigned mapsize = m_xtmap.size();
696 m_xtpar.resize( mapsize );
697 log << MSG::INFO <<
"size of xtmap: " << mapsize << endmsg;
699 calConst->setXtBegin();
700 while ( calConst->getNextXtpar(
key, par ) )
702 layid = (
key >> XTLAYER_INDEX ) & XTLAYER_DECO;
703 entr = (
key >> XTENTRA_INDEX ) & XTENTRA_DECO;
704 lr = (
key >> XTLR_INDEX ) & XTLR_DECO;
705 ord = (
key >> XTORDER_INDEX ) & XTORDER_DECO;
707 parId = getXtparId( layid, entr, lr, ord );
708 m_xtpar[parId] = par;
715 for ( wid = 0; wid < NWIRE; wid++ )
717 t0 = calConst->getT0( wid );
718 delt0 = calConst->getDelT0( wid );
720 m_t0.push_back( t0 );
721 m_delt0.push_back( delt0 );
727 for ( layid = 0; layid < NLAYER; layid++ )
729 qtpar0 = calConst->getQtpar0( layid );
730 qtpar1 = calConst->getQtpar1( layid );
732 m_qtpar0.push_back( qtpar0 );
733 m_qtpar1.push_back( qtpar1 );
737 calConst->setSdBegin();
738 while ( calConst->getNextSdpar(
key, par ) )
744 mapsize = m_sdmap.size();
745 m_sdpar.resize( mapsize );
746 log << MSG::INFO <<
"size of sdmap: " << mapsize << endmsg;
748 calConst->setSdBegin();
749 while ( calConst->getNextSdpar(
key, par ) )
751 layid = (
key >> SDLAYER_INDEX ) & SDLAYER_DECO;
752 entr = (
key >> SDENTRA_INDEX ) & SDENTRA_DECO;
753 lr = (
key >> SDLR_INDEX ) & SDLR_DECO;
754 ord = (
key >> SDBIN_INDEX ) & SDBIN_DECO;
756 parId = getSdparId( layid, entr, lr, ord );
757 m_sdpar[parId] = par;
762 for ( layid = 0; layid < NLAYER; layid++ )
764 zwest = m_pMdcGeomSvc->Wire( layid, 0 )->Forward().z();
765 zeast = m_pMdcGeomSvc->Wire( layid, 0 )->Backward().z();
767 if ( 0 == ( layid % 2 ) ) m_zst[layid] = zwest;
768 else m_zst[layid] = zeast;
772 log << MSG::INFO <<
"read new xt from TCDS" << endmsg;
775 log << MSG::WARNING <<
"can not get MDC New XT Trees" << endmsg;
778 if (
m_run < 0 ) m_xtMode = 0;
779 if ( 0 == m_xtMode ) log << MSG::INFO <<
"use old X-T functions " << endmsg;
780 else log << MSG::INFO <<
"use new X-T functions " << endmsg;
781 if ( m_outputXtMode )
783 if ( 0 == m_xtMode ) cout <<
"use old X-T functions " << endl;
784 else cout <<
"use new X-T functions " << endl;
785 m_outputXtMode =
false;
789 for ( layid = 0; layid < NLAYER; layid++ )
791 for ( entr = 0; entr < NXTENTR; entr++ )
793 for ( lr = 0; lr < 2; lr++ ) m_nR2t[layid][entr][lr] = 0;
797 log << MSG::INFO <<
"read new sigma-time from TCDS" << endmsg;
800 log << MSG::WARNING <<
"can not get sigma-time functions" << endmsg;
803 else { log << MSG::INFO <<
"read sigma-time successfully " << endmsg; }
806 if ( m_readWireEffDb )
808 fullPath =
"/Calib/MdcDataConst";
809 log << MSG::INFO <<
"Read Wire Eff from TCDS: " << fullPath << endmsg;
810 log << MSG::INFO <<
"Read wire eff!" << endmsg;
812 SmartDataPtr<CalibData::MdcDataConst> dataConst( m_pCalDataSvc, fullPath );
815 log << MSG::ERROR <<
"can not get MdcDataConst via SmartPtr" << endmsg;
818 for (
int wir = 0; wir < NWIRE; wir++ ) { m_wireEff[wir] = dataConst->getWireEff( wir ); }
822 log << MSG::INFO <<
"Read Wire Eff from file: " << m_wireEffFile << endmsg;
823 ifstream fEff( m_wireEffFile.c_str() );
824 if ( !fEff.is_open() )
826 log << MSG::ERROR <<
"can not open wire eff file: " << m_wireEffFile << endmsg;
832 for (
int i = 0; i < 4; i++ ) fEff >> strtmp;
833 for (
int wir = 0; wir < NWIRE; wir++ )
834 fEff >> strtmp >> strtmp >> strtmp >> m_wireEff[wir];
838 if ( m_checkConst ) checkConst();
844int MdcCalibFunSvc::getXtKey(
int layid,
int lr,
int ord,
int entr )
const {
846 int key = ( ( layid << XTLAYER_INDEX ) & XTLAYER_MASK ) |
847 ( ( entr << XTENTRA_INDEX ) & XTENTRA_MASK ) |
848 ( ( lr << XTLR_INDEX ) & XTLR_MASK ) | ( ( ord << XTORDER_INDEX ) & XTORDER_MASK );
853int MdcCalibFunSvc::getSdKey(
int layid,
int entr,
int lr,
int ord )
const {
854 int key = ( ( layid << SDLAYER_INDEX ) & SDLAYER_MASK ) |
855 ( ( entr << SDENTRA_INDEX ) & SDENTRA_MASK ) |
856 ( ( lr << SDLR_INDEX ) & SDLR_MASK ) | ( ( ord << SDBIN_INDEX ) & SDBIN_MASK );
861void MdcCalibFunSvc::checkConst() {
863 sprintf( fname,
"checkXt_%d.txt", m_updateNum );
865 unsigned mapsize = m_xtmap.size();
866 unsigned vsize = m_xtpar.size();
867 fxt << setw( 10 ) << mapsize << setw( 10 ) << vsize << endl << endl;
870 std::map<int, double>::iterator xtiter = m_xtmap.begin();
871 while ( xtiter != m_xtmap.end() )
873 key = ( *xtiter ).first;
874 par = ( *xtiter ).second;
875 fxt << setw( 20 ) <<
key << setw( 20 ) << par << endl;
879 for (
unsigned i = 0; i < vsize; i++ )
880 { fxt << setw( 5 ) << i << setw( 15 ) << m_xtpar[i] << endl; }
883 sprintf( fname,
"checkT0_%d.txt", m_updateNum );
885 ft0 << setw( 10 ) << m_t0.size() << setw( 10 ) << m_delt0.size() << endl;
886 for (
unsigned i = 0; i < m_t0.size(); i++ )
887 { ft0 << setw( 5 ) << i << setw( 15 ) << m_t0[i] << setw( 15 ) << m_delt0[i] << endl; }
890 sprintf( fname,
"checkQt_%d.txt", m_updateNum );
892 fqt << setw( 10 ) << m_qtpar0.size() << setw( 10 ) << m_qtpar1.size() << endl;
893 for (
unsigned i = 0; i < m_qtpar0.size(); i++ )
894 { fqt << setw( 5 ) << i << setw( 15 ) << m_qtpar0[i] << setw( 15 ) << m_qtpar1[i] << endl; }
897 sprintf( fname,
"checkSd_%d.txt", m_updateNum );
899 mapsize = m_sdmap.size();
900 vsize = m_sdpar.size();
901 fsd << setw( 10 ) << mapsize << setw( 10 ) << vsize << endl << endl;
902 std::map<int, double>::iterator sditer = m_sdmap.begin();
903 while ( sditer != m_sdmap.end() )
905 key = ( *sditer ).first;
906 par = ( *sditer ).second;
907 fsd << setw( 20 ) <<
key << setw( 20 ) << par << endl;
911 for (
unsigned i = 0; i < vsize; i++ )
912 { fsd << setw( 5 ) << i << setw( 15 ) << m_sdpar[i] << endl; }
915 sprintf( fname,
"checkNewXt_%d.txt", m_updateNum );
917 for (
int lay = 0; lay < 43; lay++ )
919 for (
int iEntr = 0; iEntr < 18; iEntr++ )
921 for (
int lr = 0; lr < 2; lr++ )
923 fnewxt << setw( 5 ) << lay << setw( 5 ) << iEntr << setw( 3 ) << lr << setw( 5 )
924 << m_nNewXt[lay][iEntr][lr] << endl;
925 for (
int bin = 0;
bin < m_nNewXt[lay][iEntr][lr];
bin++ )
927 fnewxt << setw( 15 ) << m_vt[lay][iEntr][lr][
bin] << setw( 15 )
928 << m_vd[lay][iEntr][lr][
bin] << endl;
935 sprintf( fname,
"checkR2t_%d.txt", m_updateNum );
937 for (
int lay = 0; lay < 43; lay++ )
939 for (
int iEntr = 0; iEntr < 18; iEntr++ )
941 for (
int lr = 0; lr < 2; lr++ )
943 fr2t << setw( 5 ) << lay << setw( 5 ) << iEntr << setw( 3 ) << lr << setw( 5 )
944 << m_nR2t[lay][iEntr][lr] << endl;
945 for (
int bin = 0;
bin < m_nR2t[lay][iEntr][lr];
bin++ )
947 fr2t << setw( 15 ) << m_tR2t[lay][iEntr][lr][
bin] << setw( 15 )
948 << m_sR2t[lay][iEntr][lr][
bin] << endl;
DECLARE_COMPONENT(BesBdkRc)
std::map< int, double >::value_type valType
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per bin
*************DOUBLE PRECISION m_pi *DOUBLE PRECISION m_HvecTau2 DOUBLE PRECISION m_HvClone2 DOUBLE PRECISION m_gamma1 DOUBLE PRECISION m_gamma2 DOUBLE PRECISION m_thet1 DOUBLE PRECISION m_thet2 INTEGER m_IFPHOT *COMMON c_Taupair $ !Spin Polarimeter vector first Tau $ !Spin Polarimeter vector second Tau $ !Clone Spin Polarimeter vector first Tau $ !Clone Spin Polarimeter vector second Tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !phi of HvecTau1 $ !theta of HvecTau1 $ !phi of HvecTau2 $ !theta of HvecTau2 $ !super key
int getNextXtpar(int &key, double &par)
virtual StatusCode finalize()
double getSigmaToT(int layid, int lr, double tdr, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
int getSdEntrIndex(double entrance) const
TTree * getR2tTree(int layid) const
double getSigmaToTLR(int layid, int lr, double tdr, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
void getSdpar(int layid, int entr, int lr, double par[]) const
double distToDriftTime(double dist, int layid, int cellid, int lr, double entrance=0.0) const
double getSigma2(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getWireEff(int layid, int cellid) const
double getSigma(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getT0(int layid, int cellid) const
double driftTimeToDist(double drifttime, int layid, int cellid, int lr, double entrance=0.0) const
double getSigmaLR(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getQtpar(int layid, int ord) const
TTree * getNewXtparTree(int layid, int entr, int lr) const
void getXtpar(int layid, int entr, int lr, double par[]) const
MdcCalibFunSvc(const std::string &name, ISvcLocator *svcloc)
double getSigma1(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
int getXtEntrIndex(double entrance) const
double getVprop(int lay) const
virtual StatusCode initialize()
void handle(const Incident &)
int getNextSdpar(int &key, double &par)
double getTprop(int lay, double z) const
double getF(int layid, int lr, double dist, double entrance=0.0, double tanlam=0.0, double z=0.0, double Q=1000.0) const
double getTimeWalk(int layid, double Q) const