2#include "GaudiKernel/MsgStream.h"
3#include "GaudiKernel/SmartDataPtr.h"
4#include "GaudiKernel/Bootstrap.h"
5#include "GaudiKernel/ISvcLocator.h"
6#include "GaudiKernel/IPartPropSvc.h"
7#include "GaudiKernel/IDataProviderSvc.h"
14#include "HepPDT/ParticleDataTable.hh"
16#ifndef ENABLE_BACKWARDS_COMPATIBILITY
25 base_class (name, svcloc) {
26 declareProperty(
"debug",
m_debug = 0);
33 MsgStream log(messageService(), name());
34 log << MSG::INFO <<
"MdcUtilitySvc::initialize()" << endreq;
36 StatusCode sc = Service::initialize();
37 if( sc.isFailure() ) {
38 log << MSG::ERROR <<
"Service::initialize() failure" << endreq;
44 sc = service(
"MagneticFieldSvc", m_pIMF);
46 log << MSG::FATAL <<
" ERROR Unable to open Magnetic field service "<< endreq;
47 return StatusCode::FAILURE;
52 sc = service(
"MdcGeomSvc", imdcGeomSvc);
53 m_mdcGeomSvc =
dynamic_cast<MdcGeomSvc*
> (imdcGeomSvc);
55 log << MSG::FATAL <<
" Could not load MdcGeomSvc! "<< endreq;
56 return StatusCode::FAILURE;
60 sc = service (
"RawDataProviderSvc", irawDataProviderSvc);
62 if ( sc.isFailure() ){
63 log << MSG::FATAL << name()<<
" Could not load RawDataProviderSvc!" << endreq;
64 return StatusCode::FAILURE;
67 return StatusCode::SUCCESS;
71 MsgStream log(messageService(), name());
72 log << MSG::INFO <<
"MdcUtilitySvc::finalize()" << endreq;
74 return StatusCode::SUCCESS;
79 uint32_t getDigiFlag = 0;
82 cout<<
"MdcUtilitySvc::getMdcDigiVec() get "<<mdcDigiVec.size()<<
" MDC digis from RawDataProviderSvc"<<endl;
230double MdcUtilitySvc::dPhi(
double phi1,
double phi2)
253 HepVector helixBesParam(5,0);
254 for(
int i=0; i<5; ++i) helixBesParam[i] = helixBes[i];
265 for(
unsigned iLayer=0; iLayer<43; iLayer++){
268 double rMidLayer = m_mdcGeomSvc->
Layer(iLayer)->
Radius();
269 double flightLength = rMidLayer;
272 double dz = helix[3];
273 double c = CLHEP::c_light * 100.;
274 double alpha = 1/(c * Bz());
275 double kappa = helix[2];
276 double rc = (-1.)*
alpha/kappa;
278 double tanl = helix[4];
279 double phi0 = helix[1];
280 double phi = flightLength/rc + phi0;
281 double z = pivot.z() + dz - (
alpha/kappa) * tanl * phi;
283 double layerHalfLength = m_mdcGeomSvc->
Layer(iLayer)->
Length()/2.;
287 if (fabs(z) < fabs(layerHalfLength)) ++nLayer;
295 HepVector helix(5,0);
296 double d0 = -helixPar[0];
297 double phi0 = helixPar[1]+ CLHEP::halfpi;
298 double omega = Bz()*helixPar[2]/-333.567;
299 double z0 = helixPar[3];
300 double tanl = helixPar[4];
316 HepSymMatrix mS(err.num_row(),0);
320 mS[2][2]=Bz()/-333.567;
323 HepSymMatrix mVy= err.similarity(mS);
339 double rInner,rOuter;
341 double rCize1 =0.1* m_mdcGeomSvc->
Layer(layer)->
RCSiz1();
342 double rCize2 =0.1* m_mdcGeomSvc->
Layer(layer)->
RCSiz2();
343 double rLay =0.1* m_mdcGeomSvc->
Layer(layer)->
Radius();
346 rInner = rLay - rCize1 ;
347 rOuter = rLay + rCize2 ;
352 if (innerOrOuter) r = rInner;
355 double d0 = helixPat[0];
356 double phi0 = helixPat[1];
357 double omega = helixPat[2];
358 double z0 = helixPat[3];
359 double tanl = helixPat[4];
364 double xc = piv.x() + ( d0 + rc) *
cos(phi0);
365 double yc = piv.y() + ( d0 + rc) *
sin(phi0);
367 rc = sqrt(xc*xc + yc*yc);
372 double dphi = acos((a*a-
b*
b-c*c)/(-2.*
b*c));
373 double fltlen = dphi * rc;
374 double phi = phi0 * omega * fltlen;
375 double x = piv.x()+d0*
sin(phi) - (rc+d0)*
sin(phi0);
376 double y = piv.y()+d0*
cos(phi) + (rc+d0)*
cos(phi0);
377 double z = piv.z()+ z0 + fltlen*tanl;
380 std::cout<<
" abc "<<a<<
" "<<
b<<
" "<<c<<
" omega "<<omega<<
" r "<<r<<
" rc "<<rc<<
" dphi "<<dphi<<
" piv "<<piv.z()
381 <<
" z0 "<<z0<<
" fltlen "<<fltlen<<
" tanl "<<tanl<<std::endl;
382 std::cout<<
" pointOnHelixPatPar in Hel "<<helixPat<<std::endl;
383 cout<<
"HepPoint3D(x, y, z) = "<<
HepPoint3D(
x,
y, z)<<endl;
390double MdcUtilitySvc::doca(
int layer,
int cell,
const HepVector helixBes,
const HepSymMatrix errMatBes,
bool passCellRequired,
bool doSag)
const{
394 return docaPatPar(layer, cell, helixPat, errMatPat, passCellRequired, doSag);
403 return docaPatPar(layer, cell, eastP, westP, helixPat, errMatPat, passCellRequired, doSag);
408double MdcUtilitySvc::doca(
int layer,
int cell,
const MdcSWire* sWire,
const HepVector helixBes,
const HepSymMatrix errMatBes,
bool passCellRequired)
const{
412 return docaPatPar(layer, cell, sWire, helixPat, errMatPat, passCellRequired);
417double MdcUtilitySvc::docaPatPar(
int layer,
int cell,
const HepVector helixPat,
const HepSymMatrix errMat,
bool passCellRequired,
bool doSag)
const{
420 int id = geowir->
Id();
422 if(doSag) sag = geowir->
Sag()/10.;
427 double doca =
docaPatPar(layer, cell, sWire, helixPat, errMat, passCellRequired);
438 int id = geowir->
Id();
440 if(doSag) sag = geowir->
Sag()/10.;
443 double doca =
docaPatPar(layer, cell, sWire, helixPat, errMat, passCellRequired);
453 if(m_debug) std::cout<<
" helixPat "<<helixPat<<std::endl;
454 if(m_debug) std::cout<<
" layer "<<layer<<
" cell "<<cell<<std::endl;
463 std::cout<<
" cellId in "<<cellId_in<<
" out "<<cellId_out <<std::endl;
464 cout <<
"cell = " << cell <<
", cellId_in = " << cellId_in <<
", cellId_out = " << cellId_out << endl;
466 if (passCellRequired &&(cell < cellId_in && cell > cellId_out))
return -999.;
473 int innerOrOuter = 1;
475 double fltTrack = 0.1 * m_mdcGeomSvc -> Layer(layer)->Radius();
477 std::cout<<
" cell_IO "<<cell_IO<<std::endl;
478 std::cout<<
" fltTrack "<<fltTrack<<std::endl;
487 std::cout<<
" sag "<<m_wireTraj->
sag()<<std::endl;
488 std::cout<<
" east -------- "<< start_In->x()<<
","<<start_In->y()<<
","<<start_In->z()<<std::endl;
495 double zWire = cell_IO.z();
498 if(m_debug) std::cout<<
" zWire "<<zWire<<
" zEndDC "<<sWire->
zEndDC()<<std::endl;
501 double fltWire = sqrt( (pos_in.x()-start_In->x())*(pos_in.x()-start_In->x()) +
502 (pos_in.y()-start_In->y())*(pos_in.y()-start_In->y()) +
503 (pos_in.z()-start_In->z())*(pos_in.z()-start_In->z()) );
504 trkPoca =
new TrkPoca(*trajHelix, fltTrack, *trajWire, fltWire);
507 double hitLen = trkPoca->
flt2();
508 double startLen = trajWire->
lowRange() - 5.;
509 double endLen = trajWire->
hiRange() + 5.;
510 if(hitLen < startLen || hitLen > endLen) {
511 if(m_debug) std::cout<<
"WARNING MdcUtilitySvc::docaPatPar() isBeyondEndflange! hitLen="<<hitLen <<
" startLen="<<startLen<<
" endLen "<<endLen<<std::endl;
516 if(m_debug) std::cout<<
" doca "<<
doca<<std::endl;
562 int nCell = m_mdcGeomSvc->
Layer(layer)->
NCell();
564 double dPhiz = (m_mdcGeomSvc->
Wire(layer,0)->
Forward().phi() - m_mdcGeomSvc->
Wire(layer,0)->
Backward().phi())*0.5;
565 double rEnd = m_mdcGeomSvc->
Wire(layer,0)->
Backward().rho()/10.;
566 double rMid = rEnd *
cos(dPhiz);
569 double fltLenIn = rMid;
570 double phiIn = helixPat[1] + helixPat[2]*fltLenIn;
572 double phiEPOffset = m_mdcGeomSvc->
Wire(layer,0)->
Backward().phi();
574 if(m_debug) std::cout<<
"cellTrackPassed nCell "<<nCell<<
" layer "<<layer<<
" fltLenIn "<<fltLenIn<<
" phiEPOffset "<<phiEPOffset<<std::endl;
576 int wlow = (int)floor(nCell * tmp.
rad() / twopi );
577 int wbig = (int)ceil(nCell * tmp.
rad() / twopi );
578 if (tmp == 0 ){ wlow = -1; wbig = 1; }
580 if ((wlow%nCell)< 0) wlow += nCell;
583 if ((wbig%nCell)< 0) wbig += nCell;
586 bool passedOneCell = (cellId_in == cellId_out);
588 return passedOneCell;
601 double dr0,phi0,kappa,dz0,tanl;
602 double ALPHA_loc,rho,phi,cosphi0,sinphi0,x_hc,y_hc,z_hc;
603 double dphi0,IO_phi,C_alpha,xx,yy;
604 double inlow,inup,outlow,outup,phi_in,phi_out,phi_bin;
605 double rCize1,rCize2,rLay,length,phioffset,slant,shift;
606 double m_crio[2], phi_io[2], stphi[2],phioff[2],dphi[2];
614 ALPHA_loc = 1000/(2.99792458*Bz());
615 charge = ( kappa >=0 ) ? 1 : -1 ;
616 rho = ALPHA_loc/kappa ;
618 phi = fmod(phi0 + 4*
pi , 2*
pi);
620 sinphi0 = (1.0 - cosphi0 ) * (1.0 + cosphi0 );
621 sinphi0 = sqrt(( sinphi0 > 0.) ? sinphi0 : 0.);
622 if( phi >
pi ) sinphi0 = -sinphi0 ;
624 x_hc = 0. + ( dr0 + rho ) * cosphi0;
625 y_hc = 0. + ( dr0 + rho ) * sinphi0;
632 double m_c_perp(hcenter.perp());
633 Hep3Vector m_c_unit((
HepPoint3D)hcenter.unit());
636 dphi0 = fmod(IO.phi()+4*
pi, 2*
pi) - phi;
637 IO_phi = fmod(IO.phi()+4*
pi, 2*
pi);
639 if(dphi0 >
pi) dphi0 -= 2*
pi;
640 else if(dphi0 < -
pi) dphi0 += 2*
pi;
643 phi_io[1] = phi_io[0]+1.5*
pi;
646 bool outFlag =
false;
660 m_crio[0] = rLay - rCize1 ;
661 m_crio[1] = rLay + rCize2 ;
665 Hep3Vector iocand[2];
666 Hep3Vector cell_IO[2];
668 for(
int ii =0; ii<2; ii++){
670 double cos_alpha = (m_c_perp*m_c_perp + m_crio[ii]*m_crio[ii] - rho*rho)
671 / ( 2 * m_c_perp * m_crio[ii] );
672 if(fabs(cos_alpha)>1&&(ii==0)){
676 if(fabs(cos_alpha)>1&&(ii==1)){
677 cos_alpha = (m_c_perp*m_c_perp + m_crio[0]*m_crio[0] - rho*rho)
678 / ( 2 * m_c_perp * m_crio[0] );
679 C_alpha = 2*
pi - acos( cos_alpha);
681 C_alpha = acos( cos_alpha );
684 iocand[ii] = m_c_unit;
685 iocand[ii].rotateZ(
charge*sign*C_alpha );
686 iocand[ii] *= m_crio[ii];
688 xx = iocand[ii].x() - x_hc ;
689 yy = iocand[ii].y() - y_hc ;
691 dphi[ii] = atan2(yy,xx) - phi0 - 0.5*
pi*(1-
charge);
692 dphi[ii] = fmod( dphi[ii] + 8.0*
pi,2*
pi);
695 if( dphi[ii] < phi_io[0] ) {
697 }
else if( dphi[ii] > phi_io[1] ){
701 cell_IO[ii] =
Hel(piv, dr0, phi, ALPHA_loc, kappa,dz0, dphi[ii], tanl);
704 if( (cell_IO[ii].
x()==0 ) && (cell_IO[ii].
y()==0) && (cell_IO[ii].z()==0))
continue;
708 cellId_in = cellId_out = -1 ;
709 phi_in = cell_IO[0].phi();
710 phi_in = fmod ( phi_in + 4 *
pi, 2 *
pi );
711 phi_out = cell_IO[1].phi();
712 phi_out = fmod ( phi_out + 4 *
pi, 2 *
pi );
713 phi_bin = 2.0 *
pi / nCell ;
716 stphi[0] = shift * phi_bin * (0.5 - cell_IO[0].z()/length);
717 stphi[1] = shift * phi_bin * (0.5 - cell_IO[1].z()/length);
720 phioff[0] = phioffset + stphi[0];
721 phioff[1] = phioffset + stphi[1];
723 for(
int kk = 0; kk<nCell ; kk++){
725 inlow = phioff[0] + phi_bin*kk - phi_bin*0.5;
726 inlow = fmod( inlow + 4.0 *
pi , 2.0 *
pi);
727 inup = phioff[0] + phi_bin*kk + phi_bin*0.5;
728 inup = fmod( inup + 4.0 *
pi , 2.0 *
pi);
729 outlow = phioff[1] + phi_bin*kk - phi_bin*0.5;
730 outlow = fmod( outlow + 4.0 *
pi ,2.0 *
pi);
731 outup = phioff[1] + phi_bin*kk + phi_bin*0.5;
732 outup = fmod( outup + 4.0 *
pi , 2.0 *
pi);
734 if((phi_in>=inlow && phi_in<=inup)) cellId_in = kk;
735 if((phi_out>=outlow&&phi_out<outup)) cellId_out = kk;
737 if((phi_in>=inlow&&phi_in<2.0*
pi)||(phi_in>=0.0&&phi_in<inup)) cellId_in = kk;
740 if((phi_out>=outlow&&phi_out<=2.0*
pi)||(phi_out>=0.0&&phi_out<outup)) cellId_out = kk;
744 return (cellId_in==cellId_out);
748 double x = piv.x() + dr*
cos(phi0) + (Alpha_L/kappa) * (
cos(phi0) -
cos(phi0+dphi));
749 double y = piv.y() + dr*
sin(phi0) + (Alpha_L/kappa) * (
sin(phi0) -
sin(phi0+dphi));
750 double z = piv.z() + dz - (Alpha_L/kappa) * dphi * tanl;
752 if((
x>-1000. &&
x<1000.) || (
y >-1000. &&
y <1000. ) ||(z>-1000. && z<1000.)){
762 HepVector helix(5,0);
763 double d0 = -helixPar[0];
764 double phi0 = helixPar[1]+ CLHEP::halfpi;
765 double omega = Bz()*helixPar[2]/-333.567;
766 double z0 = helixPar[3];
767 double tanl = helixPar[4];
782 HepSymMatrix mS(err.num_row(),0);
785 mS[2][2]=Bz()/-333.567;
788 HepSymMatrix mVy= err.similarity(mS);
795 p4.setPx(-
sin(helix[1]) / fabs(helix[2]));
796 p4.setPy(
cos(helix[1]) / fabs(helix[2]));
797 p4.setPz(helix[4] / fabs(helix[2]));
798 double p3 =
p4.mag();
808 double zboost = 0.0075;
810 HepLorentzVector psip(0.011 * ecm, 0, zboost, ecm);
812 Hep3Vector boostv = psip.boostVector();
827 double fi0 = trk->
helix(1);
828 double cpa = trk->
helix(2);
829 double tanl = trk->
helix(4);
832 if(cpa != 0) pxy = 1/fabs(cpa);
834 double px = pxy * (-
sin(fi0));
835 double py = pxy *
cos(fi0);
836 double pz = pxy * tanl;
846 double srtopi=2.0/sqrt(2.0*
M_PI);
850 if(ndof<=0) {
return prob;}
851 if(chisq<0.0) {
return prob;}
854 if(chisq>upl) {
return prob;}
855 double sum=
exp(-0.5*chisq);
860 if(m==1){
return sum;}
861 for(
int i=2; i<=m;i++){
862 term=0.5*term*chisq/(i-1);
870 double srty=sqrt(chisq);
871 double temp=srty/M_SQRT2;
873 if(ndof==1) {
return prob;}
874 if(ndof==3) {
return (srtopi*srty*sum+prob);}
876 for(
int i=1; i<=m; i++){
877 term=term*chisq/(2*i+1);
880 return (srtopi*srty*sum+prob);
886 double srty=sqrt(chisq)-sqrt(ndof-0.5);
887 if(srty<12.0) {prob=0.5*erfc(srty);};
897 IPartPropSvc* partPropSvc;
898 static const bool CREATEIFNOTTHERE(
true);
899 StatusCode sc=service(
"PartPropSvc",partPropSvc,CREATEIFNOTTHERE);
900 if(!sc.isSuccess()||
nullptr==partPropSvc){
901 cout<<
" Could not initialize Particle Properties Service" << endl;
903 HepPDT::ParticleDataTable* particleTable = partPropSvc->PDT();
911 if(
nullptr==mcParticle)
return;
921 if(
nullptr==mcParticle)
return;
930 Helix helixTemp(pos,mom,
933 helix.
set(helixTemp.
pivot(),helixTemp.
a(),helixTemp.
Ea());
937 const std::map<
int,std::map<MdcDigi*,MdcMcHit*> > mdcMCAssociation,
939 MdcDigiVec::iterator
iter=mdcDigiInput.begin();
941 for(;
iter!=mdcDigiInput.end();
iter++){
942 std::map<int, std::map<MdcDigi*,MdcMcHit*> >::const_iterator itMap0=
943 mdcMCAssociation.find(trackIndex);
944 if(itMap0!=mdcMCAssociation.end()){
945 std::map<MdcDigi*,MdcMcHit*>::const_iterator itMap=
946 (*itMap0).second.find(*
iter);
948 if(itMap!=(*itMap0).second.end()){ mcHit=itMap->second; }
952 mdcDigiAssociated.push_back(*
iter);
960 std::map<
int,std::map<MdcDigi*,MdcMcHit*> >& mdcMCAssociation){
963 IDataProviderSvc* eventSvc =
NULL;
964 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc);
965 SmartDataPtr<Event::MdcMcHitCol> mdcMcHitCol(eventSvc,
"/Event/MC/MdcMcHitCol");
967 std::cout<<
"MdcUtilitySvc::getMdcMCAssoiciation() does not find MdcMcHitCol!"<<std::endl;
970 std::map<int,Event::MdcMcHit*> mdcMcHitMap;
971 Event::MdcMcHitCol::iterator iterMdcMcHit=mdcMcHitCol->begin();
972 for(;iterMdcMcHit!=mdcMcHitCol->end();iterMdcMcHit++ )
976 mdcMcHitMap.insert(std::pair<int,Event::MdcMcHit*>(
id,*iterMdcMcHit));
980 MdcDigiVec::const_iterator iterMdcDigi=mdcDigiVecInput.begin();
981 for(;iterMdcDigi!=mdcDigiVecInput.end();iterMdcDigi++){
982 int digiTrackIndex=(*iterMdcDigi)->getTrackIndex();
983 std::cout<<__FILE__<<
" "<<__LINE__<<
" "<<digiTrackIndex<<std::endl;
984 if(digiTrackIndex>999) digiTrackIndex-=1000;
985 if(digiTrackIndex!=digiTrackIndex)
continue;
988 std::map<MdcDigi*, MdcMcHit*> temp;
989 std::map<int,Event::MdcMcHit*>::iterator itMdcMcHit=mdcMcHitMap.find(
id);
990 if(itMdcMcHit!=mdcMcHitMap.end()){
991 temp.insert(make_pair(*iterMdcDigi,(*itMdcMcHit).second));
992 mdcMCAssociation.insert(make_pair(trackIndex, temp));
double sin(const BesAngle a)
double cos(const BesAngle a)
EvtComplex exp(const EvtComplex &c)
std::vector< MdcDigi * > MdcDigiVec
HepGeom::Point3D< double > HepPoint3D
HepGeom::Point3D< double > HepPoint3D
static const double epsilon
const HepVector helix() const
......
const HepLorentzVector & initialPosition() const
Retrieve pointer to the start, end vertex positions.
const HepLorentzVector & initialFourMomentum() const
StdHepId particleProperty() const
Retrieve particle property.
std::string getCreatorProcess() const
unsigned int getTrackIndex() const
void set(const HepPoint3D &pivot, const HepVector &a, const HepSymMatrix &Ea)
sets helix pivot position, parameters, and error matrix.
const HepSymMatrix & Ea(void) const
returns error matrix.
const HepVector & a(void) const
returns helix parameters.
const HepPoint3D & pivot(void) const
returns pivot position.
double Radius(void) const
double RCSiz2(void) const
double Length(void) const
MdcGeoSuper * Sup(void) const
double RCSiz1(void) const
double Offset(void) const
const double Sag(void) const
HepPoint3D Forward(void) const
HepPoint3D Backward(void) const
const MdcGeoWire *const Wire(unsigned id)
const MdcGeoLayer *const Layer(unsigned id)
static int layer(const Identifier &id)
Values of different levels (failure returns 0)
static int wire(const Identifier &id)
double yWireDC(double z) const
double xWireDC(double z) const
double zEndDC(void) const
const MdcSagTraj * getTraj(void) const
const HepPoint3D * getEastPoint(void) const
HepVector besPar2PatPar(const HepVector &helixPar) const
bool cellTrackPassedByPhi(const HepVector helix, int layer, int &cellId_in, int &cellId_out) const
virtual StatusCode initialize()
HepSymMatrix patErr2BesErr(const HepSymMatrix &err) const
HepPoint3D Hel(HepPoint3D piv, double dr, double phi0, double Alpha_L, double kappa, double dz, double dphi, double tanl) const
MdcDigiVec getMdcDigiVec() const
HepSymMatrix besErr2PatErr(const HepSymMatrix &err) const
float getChargeOfMcParticle(const Event::McParticle *mcParticle)
void getMdcMCAssoiciation(int trackIndex, const std::vector< MdcDigi * > mdcDigiVecInput, std::map< int, std::map< MdcDigi *, Event::MdcMcHit * > > &mdcMCAssociation)
Get association of MdcDigi and MdcMcHit according to track id.
bool cellTrackPassedByPhiPatPar(const HepVector helix, int layer, int &cellId_in, int &cellId_out) const
HepVector patPar2BesPar(const HepVector &helixPar) const
void getHelixOfMcParticle(const Event::McParticle *mcParticle, Helix &helix)
virtual StatusCode finalize()
void getMomPosOfMcParticle(const Event::McParticle *mcParticle, HepVector3D &pos, HepVector3D &mom)
double probab(const int &ndof, const double &chisq) const
Hep3Vector momentum(const RecMdcTrack *trk) const
double doca(int layer, int cell, const HepVector helix, const HepSymMatrix errMat, bool passCellRequired=true, bool doSag=true) const
int nLayerTrackPassed(const HepVector helix) const
bool cellTrackPassed(const HepVector helix, int layer, int &cellId_in, int &cellId_out) const
void getMdcDigiOnMcParticle(int trackIndex, const std::map< int, std::map< MdcDigi *, Event::MdcMcHit * > > mdcMCAssociation, MdcDigiVec &mdcDigiInput, MdcDigiVec &mdcDigiAssociated)
double p_cms(HepVector helix, int runNo, double mass) const
double docaPatPar(int layer, int cell, const HepVector helixPat, const HepSymMatrix errMatPat, bool passCellRequired=true, bool doSag=true) const
HepPoint3D pointOnHelixPatPar(const HepVector helixPat, int lay, int innerOrOuter) const
HepPoint3D pointOnHelix(const HepVector helixPar, int lay, int innerOrOuter) const
bool cellTrackPassedPatPar(const HepVector helix, int layer, int &cellId_in, int &cellId_out) const
MdcDigiVec & getMdcDigiVec(uint32_t control=0)
double double double * p4