2#include "GaudiKernel/Kernel.h"
3#include "GaudiKernel/IInterface.h"
4#include "GaudiKernel/StatusCode.h"
5#include "GaudiKernel/SvcFactory.h"
6#include "GaudiKernel/MsgStream.h"
8#include "GaudiKernel/IIncidentSvc.h"
9#include "GaudiKernel/Incident.h"
10#include "GaudiKernel/IIncidentListener.h"
12#include "GaudiKernel/ISvcLocator.h"
13#include "GaudiKernel/Bootstrap.h"
15#include "GaudiKernel/IDataProviderSvc.h"
16#include "GaudiKernel/SmartDataPtr.h"
17#include "GaudiKernel/DataSvc.h"
23#include "GaudiKernel/SmartDataPtr.h"
36typedef map<int, double>::value_type
valType;
39 Service (name, svcloc), m_layInfSig(-1) {
42 declareProperty(
"CheckConst", m_checkConst =
false);
43 declareProperty(
"LayerInfSig", m_layInfSig);
44 declareProperty(
"XtMode", m_xtMode = 1);
45 declareProperty(
"NewXtFile", m_xtfile);
46 declareProperty(
"ReadWireEffDb", m_readWireEffDb =
true);
47 declareProperty(
"WireEffFile", m_wireEffFile);
48 declareProperty(
"LinearXT", m_linearXT =
false);
49 m_outputXtMode =
true;
56 if( IID_IMdcCalibFunSvc.versionMatch(riid) ){
59 return Service::queryInterface(riid, ppvInterface);
61 return StatusCode::SUCCESS;
65 MsgStream log(messageService(), name());
66 log << MSG::INFO <<
"MdcCalibFunSvc::initialize()" << endreq;
68 StatusCode sc = Service::initialize();
69 if( sc.isFailure() )
return sc;
72 sc = service(
"IncidentSvc", incsvc);
75 incsvc -> addListener(
this,
"NewRun", priority);
78 sc = service(
"CalibDataSvc", m_pCalDataSvc,
true);
79 if( sc == StatusCode::SUCCESS ){
80 log << MSG::INFO <<
"Retrieve IDataProviderSvc" << endreq;
82 log << MSG::FATAL <<
"can not get IDataProviderSvc" << endreq;
85 sc = service(
"MdcGeomSvc", m_pMdcGeomSvc);
86 if( sc != StatusCode::SUCCESS ){
87 log << MSG::ERROR <<
"can not use MdcGeomSvc" << endreq;
88 return StatusCode::FAILURE;
92 for(
int wir=0; wir<6796; wir++) m_wireEff[wir] = 1.0;
93 for(
int lay=0; lay<NLAYER; lay++){
94 for(
int iEntr=0; iEntr<NXTENTR; iEntr++){
95 for(
int lr=0; lr<2; lr++) m_nR2t[lay][iEntr][lr] = 0;
99 return StatusCode::SUCCESS;
103 MsgStream log(messageService(), name());
104 log << MSG::INFO <<
"MdcCalibFunSvc::finalize()" << endreq;
113 return StatusCode::SUCCESS;
117 MsgStream log( messageService(), name() );
118 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
120 if ( inc.type() ==
"NewRun" ){
121 log << MSG::DEBUG <<
"NewRun" << endreq;
123 if( ! initCalibConst() ){
125 <<
"can not initilize Mdc Calib Constants" << endl
126 <<
" Please insert the following statement "
127 <<
"in your \"jobOption.txt\" "
128 <<
"before the include file of Mdc Reconstruction: "
130 <<
"#include \"$CALIBSVCROOT/share/job-CalibData.txt\""
132 <<
" If still error, please contact with Wu Linghui "
141 double tp = fabs(z - m_zst[lay]) / vp;
146 int lr,
double entrance)
const {
149 dist = t2dPoly(drifttime, layid, cellid, lr, entrance);
151 if((0==lr) || (1==lr)) dist = t2dInter(drifttime, layid, cellid, lr, entrance);
153 double dl = t2dInter(drifttime, layid, cellid, lr, entrance);
154 double dr = t2dInter(drifttime, layid, cellid, lr, entrance);
155 dist = (dl + dr) * 0.5;
159 if(m_linearXT) dist = 0.03 * drifttime;
163double MdcCalibFunSvc::t2dPoly(
double drifttime,
int layid,
int cellid,
164 int lr,
double entrance)
const {
172 if(drifttime < xtpar[6]){
173 for(ord=0; ord<6; ord++){
174 dist += xtpar[ord] * pow(drifttime, ord);
177 for(ord=0; ord<6; ord++){
178 dist += xtpar[ord] * pow(xtpar[6], ord);
180 dist += xtpar[7] * (drifttime - xtpar[6]);
186double MdcCalibFunSvc::t2dInter(
double drifttime,
int layid,
int cellid,
187 int lr,
double entrance)
const {
190 int nBin = m_nNewXt[layid][iEntr][lr];
191 if(drifttime < m_vt[layid][iEntr][lr][0]){
192 dist = m_vd[layid][iEntr][lr][0];
193 }
else if(drifttime < m_vt[layid][iEntr][lr][nBin-1]){
194 for(
int i=0; i<(nBin-1); i++){
195 if((drifttime>=m_vt[layid][iEntr][lr][i]) && (drifttime<m_vt[layid][iEntr][lr][i+1])){
196 double t1 = m_vt[layid][iEntr][lr][i];
197 double t2 = m_vt[layid][iEntr][lr][i+1];
198 double d1 = m_vd[layid][iEntr][lr][i];
199 double d2 = m_vd[layid][iEntr][lr][i+1];
200 dist = (drifttime-t1) * (d2-d1) / (t2-t1) + d1;
205 dist = m_vd[layid][iEntr][lr][nBin-1];
211 int lr,
double entrance)
const {
224 double tm1 = xtpar[6];
230 cout <<
"Warning in MdcCalibFunSvc: driftDist < 0" << endl;
232 }
else if(dist < xtpar[0]){
234 }
else if(dist < dm1){
235 for(ord=0; ord<5; ord++){
236 dxdtpar[ord] = (double)(ord+1) * xtpar[ord+1];
241 cout <<
"Warning in MdcCalibFunSvc: "
242 <<
"can not get the exact value in the dist-to-time conversion."
249 for(ord=0; ord<6; ord++)
250 x += xtpar[ord] * pow(
time, ord);
253 if( fabs(deltax) < 0.001 ){
258 for(ord=0; ord<5; ord++)
259 dxdt += dxdtpar[ord] * pow(
time, ord);
264 }
else if(dist < dm2){
265 time = (dist - dm1) * (tm2 - tm1) / (dm2 - dm1) + tm1;
270 if(m_linearXT)
time = dist / 0.03;
275 double entrance,
double tanlam,
276 double z,
double Q)
const {
278 if( (0 == lr) || (1 == lr) ){
279 sigma =
getSigmaLR(layid, lr, dist, entrance, tanlam, z, Q);
281 double sl =
getSigmaLR(layid, 0, dist, entrance, tanlam, z, Q);
282 double sr =
getSigmaLR(layid, 1, dist, entrance, tanlam, z, Q);
283 sigma = (sl + sr) * 0.5;
286 if(layid == m_layInfSig) sigma = 9999.0;
291 double entrance,
double tanlam,
292 double z,
double Q)
const {
294 double sigma = 9999.0;
310 double distAbs = fabs(dist);
314 int bin = (int)((distAbs - dmin) / dw);
316 sigma = par[nmaxBin];
320 dref[0] = (double)
bin * dw + 0.25;
321 dref[1] = (double)(
bin+1) * dw + 0.25;
322 if((dref[1] - dref[0]) <= 0){
325 sigma = (par[
bin+1] - par[
bin]) * (distAbs - dref[0]) /
326 (dref[1] - dref[0]) + par[
bin];
334 double entrance,
double tanlam,
335 double z,
double Q)
const {
336 double sigma1 =
getSigma(layid, lr, dist, entrance, tanlam, z, Q);
341 double entrance,
double tanlam,
342 double z,
double Q)
const {
348 double entrance,
double tanlam,
349 double z,
double Q)
const {
355 double tanlam,
double z,
double Q)
const{
357 cout <<
"ERROR: can not get sigma-time functions" << endl;
359 }
else if( (0 == lr) || (1 == lr) ){
360 return getSigmaToTLR(layid, lr, tdr, entrance, tanlam, z, Q);
362 double sl =
getSigmaToTLR(layid, 0, tdr, entrance, tanlam, z, Q);
363 double sr =
getSigmaToTLR(layid, 1, tdr, entrance, tanlam, z, Q);
364 double sigma = (sl + sr) * 0.5;
370 double tanlam,
double z,
double Q)
const{
373 int nBin = m_nR2t[layid][iEntr][lr];
374 if(tdr < m_tR2t[layid][iEntr][lr][0]){
375 sigma = m_sR2t[layid][iEntr][lr][0];
376 }
else if(tdr < m_tR2t[layid][iEntr][lr][nBin-1]){
377 for(
int i=0; i<(nBin-1); i++){
378 if((tdr>=m_tR2t[layid][iEntr][lr][i]) && (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;
388 sigma = m_sR2t[layid][iEntr][lr][nBin-1];
394 if( m_xtiter != m_xtmap.end() ){
395 key = (*m_xtiter).first;
396 par = (*m_xtiter).second;
405 for(
int ord=0; ord<8; ord++){
406 parId = getXtparId(layid, entr, lr, ord);
407 par[ord] = m_xtpar[parId];
412 MsgStream log(messageService(), name());
413 log << MSG::INFO <<
"read calib const from TCDS" << endreq;
415 for(
int layid=0; layid<NLAYER; layid++){
416 for(
int entr=0; entr<NXTENTR; entr++){
417 for(
int lr=0; lr<2; lr++){
420 if(!newXtTree)
return false;
423 int nEntries = newXtTree -> GetEntries();
424 if((nEntries<10) || (nEntries>=200)){
425 log << MSG::ERROR <<
"wrong X-T constants: layer " << layid
426 <<
", iEntr " << entr <<
", lr " << lr << endreq;
429 m_nNewXt[layid][entr][lr] = nEntries;
430 for(
int i=0; i<nEntries; i++){
431 newXtTree->GetEntry(i);
432 m_vt[layid][entr][lr][i] = br_t;
433 m_vd[layid][entr][lr][i] = br_d;
443 MsgStream log(messageService(), name());
444 string fullPath =
"/Calib/MdcCal";
445 SmartDataPtr<CalibData::MdcCalibData> calConst(m_pCalDataSvc, fullPath);
447 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr" << endreq;
451 TTree* newXtTree = calConst->getNewXtpar(layid,entr,lr);
456 for(
int layid=0; layid<NLAYER; layid++){
460 if(!r2tTree)
return false;
465 int nEntries = r2tTree -> GetEntries();
466 for(
int i=0; i<nEntries; i++){
467 r2tTree->GetEntry(i);
468 int bin = m_nR2t[layid][br_iEntr][br_lr];
470 cout <<
"Error: number of sigma-time bins overflow" << endl;
473 m_tR2t[layid][br_iEntr][br_lr][
bin] = br_t;
474 m_sR2t[layid][br_iEntr][br_lr][
bin] = br_s;
475 m_nR2t[layid][br_iEntr][br_lr]++;
478 for(
int layid=0; layid<
NLAYER; layid++){
479 for(
int iEntr=0; iEntr<NXTENTR; iEntr++){
480 for(
int lr=0; lr<2; lr++){
481 if((m_nR2t[layid][iEntr][lr]<10) || (m_nR2t[layid][iEntr][lr]>=200))
return false;
489 MsgStream log(messageService(), name());
490 string fullPath =
"/Calib/MdcCal";
491 SmartDataPtr<CalibData::MdcCalibData> calConst(m_pCalDataSvc, fullPath);
493 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr" << endreq;
497 TTree* r2tTree = calConst->getR2tpar(layid);
503 int wireid = m_pMdcGeomSvc->
Wire(layid, cellid)->
Id();
504 double t0 =
getT0(wireid);
514 if(Q < 0.0001) Q = 0.0001;
516 for(ord=0; ord<2; ord++){
520 tw = qtpar[0] + qtpar[1] / sqrt( Q );
521 if(
m_run < 0) tw = 0.0;
527 int wireid = m_pMdcGeomSvc->
Wire(layid, cellid)->
Id();
528 return m_wireEff[wireid];
532 if(0 == ord)
return m_qtpar0[layid];
533 else if(1 == ord)
return m_qtpar1[layid];
535 cout <<
"wrong order number" << endl;
542 if( (entr < 0) || (entr >= 18) ){
546 parId = getSdparId(layid, entr, lr,
bin);
547 par[
bin] = m_sdpar[parId];
552 if( m_sditer != m_sdmap.end() ){
553 key = (*m_sditer).first;
554 par = (*m_sditer).second;
565 double aglpi = 3.141592653;
566 double aglmin = -1.570796327;
567 double aglmax = 1.570796327;
568 double delAngle = 0.174532925;
570 MsgStream log(messageService(), name());
571 if(entrance < aglmin){
572 log << MSG::WARNING <<
"entrance angle < -pi/2" << endreq;
575 if(entrance >= aglmin)
break;
577 }
else if(entrance > aglmax){
578 log << MSG::WARNING <<
"entrance angle > pi/2" << endreq;
581 if(entrance <= aglmax)
break;
585 index = (int)((entrance-aglmin) / delAngle);
586 if(index < 0) index = 0;
587 else if(index > idmax) index = idmax;
596 double aglpi = 3.141592653;
597 double aglmin = -1.570796327;
598 double aglmax = 1.570796327;
599 double delAngle = 0.523598776;
601 MsgStream log(messageService(), name());
602 if(entrance < aglmin){
603 log << MSG::WARNING <<
"entrance angle < -pi/2" << endreq;
606 if(entrance >= aglmin)
break;
608 }
else if(entrance > aglmax){
609 log << MSG::WARNING <<
"entrance angle > pi/2" << endreq;
612 if(entrance <= aglmax)
break;
616 index = (int)((entrance-aglmin) / delAngle);
617 if(index < 0) index = 0;
618 else if(index > idmax) index = idmax;
623bool MdcCalibFunSvc::initCalibConst(){
624 MsgStream log(messageService(), name());
625 log << MSG::INFO <<
"read calib const from TCDS" << endreq;
627 IDataProviderSvc* eventSvc = NULL;
628 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc);
629 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc,
"/Event/EventHeader");
631 log << MSG::FATAL <<
"Could not find Event Header" << endreq;
632 return( StatusCode::FAILURE);
634 m_run = eventHeader->runNumber();
646 string fullPath =
"/Calib/MdcCal";
647 SmartDataPtr<CalibData::MdcCalibData> calConst(m_pCalDataSvc, fullPath);
649 log << MSG::ERROR <<
"can not get MdcCalibConst via SmartPtr"
662 while( calConst->getNextXtpar(
key, par) ){
667 unsigned mapsize = m_xtmap.size();
668 m_xtpar.resize(mapsize);
669 log << MSG::INFO <<
"size of xtmap: " << mapsize << endreq;
672 while( calConst->getNextXtpar(
key, par) ){
673 layid = (
key >> XTLAYER_INDEX) & XTLAYER_DECO;
674 entr = (
key >> XTENTRA_INDEX) & XTENTRA_DECO;
675 lr = (
key >> XTLR_INDEX) & XTLR_DECO;
676 ord = (
key >> XTORDER_INDEX) & XTORDER_DECO;
678 parId = getXtparId(layid, entr, lr, ord);
679 m_xtpar[parId] = par;
686 for(wid=0; wid<NWIRE; wid++){
687 t0 = calConst->getT0(wid);
688 delt0 = calConst->getDelT0(wid);
691 m_delt0.push_back(delt0);
697 for(layid=0; layid<NLAYER; layid++){
698 qtpar0 = calConst -> getQtpar0(layid);
699 qtpar1 = calConst -> getQtpar1(layid);
701 m_qtpar0.push_back(qtpar0);
702 m_qtpar1.push_back(qtpar1);
712 mapsize = m_sdmap.size();
713 m_sdpar.resize(mapsize);
714 log << MSG::INFO <<
"size of sdmap: " << mapsize << endreq;
718 layid = (
key >> SDLAYER_INDEX) & SDLAYER_DECO;
719 entr = (
key >> SDENTRA_INDEX) & SDENTRA_DECO;
720 lr = (
key >> SDLR_INDEX) & SDLR_DECO;
721 ord = (
key >> SDBIN_INDEX) & SDBIN_DECO;
723 parId = getSdparId(layid, entr, lr, ord);
724 m_sdpar[parId] = par;
729 for(layid=0; layid<
NLAYER; layid++){
730 zwest = m_pMdcGeomSvc->
Wire(layid, 0)->
Forward().z();
733 if(0 == (layid % 2)) m_zst[layid] = zwest;
734 else m_zst[layid] = zeast;
738 log << MSG::INFO <<
"read new xt from TCDS" << endreq;
740 log << MSG::WARNING <<
"can not get MDC New XT Trees" << endreq;
743 if(
m_run < 0) m_xtMode = 0;
744 if(0 == m_xtMode) log << MSG::INFO <<
"use old X-T functions " << endreq;
745 else log << MSG::INFO <<
"use new X-T functions " << endreq;
747 if(0 == m_xtMode) cout <<
"use old X-T functions " << endl;
748 else cout <<
"use new X-T functions " << endl;
749 m_outputXtMode =
false;
753 for(layid=0; layid<
NLAYER; layid++){
754 for(entr=0; entr<NXTENTR; entr++){
755 for(lr=0; lr<2; lr++) m_nR2t[layid][entr][lr] = 0;
759 log << MSG::INFO <<
"read new sigma-time from TCDS" << endreq;
761 log << MSG::WARNING <<
"can not get sigma-time functions" << endreq;
764 log << MSG::INFO <<
"read sigma-time successfully " << endreq;
769 fullPath =
"/Calib/MdcDataConst";
770 log << MSG::INFO <<
"Read Wire Eff from TCDS: "<< fullPath << endreq;
771 log << MSG::INFO <<
"Read wire eff!" << endreq;
773 SmartDataPtr<CalibData::MdcDataConst> dataConst(m_pCalDataSvc, fullPath);
775 log << MSG::ERROR <<
"can not get MdcDataConst via SmartPtr" << endreq;
778 for(
int wir=0; wir<
NWIRE; wir++) {
779 m_wireEff[wir] = dataConst->getWireEff(wir);
782 log << MSG::INFO <<
"Read Wire Eff from file: "<< m_wireEffFile << endreq;
783 ifstream fEff(m_wireEffFile.c_str());
785 log << MSG::ERROR <<
"can not open wire eff file: " << m_wireEffFile << endreq;
789 for(
int i=0; i<4; i++) fEff >> strtmp;
790 for(
int wir=0; wir<NWIRE; wir++) fEff >> strtmp >> strtmp >> strtmp >> m_wireEff[wir];
794 if(m_checkConst) checkConst();
800int MdcCalibFunSvc::getXtKey(
int layid,
int lr,
int ord,
int entr)
const{
802 int key = ( (layid << XTLAYER_INDEX) & XTLAYER_MASK ) |
803 ( (entr << XTENTRA_INDEX) & XTENTRA_MASK ) |
804 ( (lr << XTLR_INDEX) & XTLR_MASK ) |
805 ( (ord << XTORDER_INDEX) & XTORDER_MASK );
810int MdcCalibFunSvc::getSdKey(
int layid,
int entr,
int lr,
int ord)
const {
811 int key = ( (layid << SDLAYER_INDEX) & SDLAYER_MASK ) |
812 ( (entr << SDENTRA_INDEX) & SDENTRA_MASK ) |
813 ( (lr << SDLR_INDEX) & SDLR_MASK ) |
814 ( (ord << SDBIN_INDEX) & SDBIN_MASK );
819void MdcCalibFunSvc::checkConst(){
821 sprintf(fname,
"checkXt_%d.txt", m_updateNum);
823 unsigned mapsize = m_xtmap.size();
824 unsigned vsize = m_xtpar.size();
825 fxt << setw(10) << mapsize << setw(10) << vsize << endl << endl;
828 std::map<int, double>::iterator xtiter = m_xtmap.begin();
829 while( xtiter != m_xtmap.end() ){
830 key = (*xtiter).first;
831 par = (*xtiter).second;
832 fxt << setw(20) <<
key << setw(20) << par << endl;
836 for(
unsigned i=0; i<vsize; i++){
837 fxt << setw(5) << i << setw(15) << m_xtpar[i] << endl;
841 sprintf(fname,
"checkT0_%d.txt", m_updateNum);
843 ft0 << setw(10) << m_t0.size() << setw(10) << m_delt0.size() << endl;
844 for(
unsigned i=0; i<m_t0.size(); i++){
845 ft0 << setw(5) << i << setw(15) << m_t0[i] << setw(15) << m_delt0[i] << endl;
849 sprintf(fname,
"checkQt_%d.txt", m_updateNum);
851 fqt << setw(10) << m_qtpar0.size() << setw(10) << m_qtpar1.size() << endl;
852 for(
unsigned i=0; i<m_qtpar0.size(); i++){
853 fqt << setw(5) << i << setw(15) << m_qtpar0[i] << setw(15) << m_qtpar1[i] << endl;
857 sprintf(fname,
"checkSd_%d.txt", m_updateNum);
859 mapsize = m_sdmap.size();
860 vsize = m_sdpar.size();
861 fsd << setw(10) << mapsize << setw(10) << vsize << endl << endl;
862 std::map<int, double>::iterator sditer = m_sdmap.begin();
863 while( sditer != m_sdmap.end() ){
864 key = (*sditer).first;
865 par = (*sditer).second;
866 fsd << setw(20) <<
key << setw(20) << par << endl;
870 for(
unsigned i=0; i<vsize; i++){
871 fsd << setw(5) << i << setw(15) << m_sdpar[i] << endl;
875 sprintf(fname,
"checkNewXt_%d.txt", m_updateNum);
877 for(
int lay=0; lay<43; lay++){
878 for(
int iEntr=0; iEntr<18; iEntr++){
879 for(
int lr=0; lr<2; lr++){
880 fnewxt << setw(5) << lay << setw(5) << iEntr << setw(3) << lr
881 << setw(5) << m_nNewXt[lay][iEntr][lr] << endl;
882 for(
int bin=0;
bin<m_nNewXt[lay][iEntr][lr];
bin++){
883 fnewxt << setw(15) << m_vt[lay][iEntr][lr][
bin]
884 << setw(15) << m_vd[lay][iEntr][lr][
bin] << endl;
891 sprintf(fname,
"checkR2t_%d.txt", m_updateNum);
893 for(
int lay=0; lay<43; lay++){
894 for(
int iEntr=0; iEntr<18; iEntr++){
895 for(
int lr=0; lr<2; lr++){
896 fr2t << setw(5) << lay << setw(5) << iEntr << setw(3) << lr
897 << setw(5) << m_nR2t[lay][iEntr][lr] << endl;
898 for(
int bin=0;
bin<m_nR2t[lay][iEntr][lr];
bin++){
899 fr2t << setw(15) << m_tR2t[lay][iEntr][lr][
bin]
900 << setw(15) << m_sR2t[lay][iEntr][lr][
bin] << endl;
data SetBranchAddress("time",&time)
*******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
std::map< int, double >::value_type valType
map< int, double >::value_type valType
*************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
virtual const MdcGeoWire *const Wire(unsigned id)=0
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
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown)
HepPoint3D Forward(void) const
HepPoint3D Backward(void) const