1#include "MdcHoughFinder/HoughTrack.h"
2#include "MdcHoughFinder/HoughMap.h"
3#include "MdcHoughFinder/HoughStereo.h"
5#include "CgemData/CgemHitOnTrack.h"
24 _charge=(other._charge);
25 _ptLeast=(other._ptLeast);
36 _tanl_zs=(other._tanl_zs);
37 _z0_zs=(other._z0_zs);
39 _centerPeak=(other._centerPeak);
40 _Hough2D=(other._Hough2D);
41 _Hough3D=(other._Hough3D);
42 _bunchTime=(other._bunchTime);
43 _centerX=(other._centerX);
44 _centerY=(other._centerY);
45 _centerR=(other._centerR);
46 _chi2_aver=(other._chi2_aver);
48 _chi2_aver2D=(other._chi2_aver2D);
49 _nfit2D=(other._nfit2D);
50 _recHitVec=(other._recHitVec);
51 _stat2D=(other._stat2D);
52 _stat3D=(other._stat3D);
54 p_trk2D=other.p_trk2D;
55 _maprho = other._maprho;
56 _maptheta= other._maptheta;
57 t_pro_correct= other.t_pro_correct;
58 _houghList = other._houghList;
59 vec_mdcHit = other.vec_mdcHit;
60 _trkid = other._trkid;
77 _charge(
other._charge),
78 _ptLeast(
other._ptLeast),
90 _tanl_zs(
other._tanl_zs),
92 _centerPeak(
other._centerPeak),
93 _Hough2D(
other._Hough2D),
94 _Hough3D(
other._Hough3D),
95 _bunchTime(
other._bunchTime),
96 _centerX(
other._centerX),
97 _centerY(
other._centerY),
98 _centerR(
other._centerR),
99 _chi2_aver(
other._chi2_aver),
101 _chi2_aver2D(
other._chi2_aver2D),
102 _nfit2D(
other._nfit2D),
103 _stat2D(
other._stat2D),
104 _stat3D(
other._stat3D),
105 _recHitVec(
other._recHitVec),
107 p_trk2D(
other.p_trk2D),
108 _maprho(
other._maprho),
109 _maptheta(
other._maptheta),
110 t_pro_correct(
other.t_pro_correct),
111 _houghList(
other._houghList),
112 vec_mdcHit (
other.vec_mdcHit),
152 _centerPeak=centerPeak;
183 int t_size = trackHitList.size();
184 for(
int i =0;i<t_size;i++){
188 _recHitVec.push_back(p_hit);
196 std::sort (_recHitVec.begin(),_recHitVec.end(),
digi_in_track);
201 _bunchTime=bunchtime;
219 vector<int> vec_layer_num[43];
220 for(
int ilay=0;ilay<43;ilay++){
221 for(
int ihit=0;ihit<_recHitVec.size();ihit++){
222 if(_recHitVec[ihit].getDetectorType()==
CGEM)
continue;
223 if( _recHitVec[ihit].getLayerId()==ilay && _recHitVec[ihit].getflag()==0 ) {
224 vec_layer_num[ilay].push_back( _recHitVec[ihit].getWireId() );
227 std::sort( vec_layer_num[ilay].begin(),vec_layer_num[ilay].end(),
less_layer);
229 if( vec_layer_num[ilay].size() < 4 )
continue;
230 for(
int j=0;j<vec_layer_num[ilay].size();j++) {
232 for(
int jhit=0;jhit<_recHitVec.size();jhit++) {
233 if(_recHitVec[jhit].getDetectorType()==
CGEM)
continue;
234 if( (ilay==_recHitVec[jhit].getLayerId()) && (vec_layer_num[ilay][j]==_recHitVec[jhit].getWireId() ) ) {_recHitVec[jhit].setflag(-1);}
314 int nhit_zs =
calzs();
315 if( nhit_zs >=3 )
fitzs();
317 cout<<
" not enough ster hit in zs fit"<<endl;
329 int nhit_zs =
calzs();
331 if( nhit_zs >=3 )
fitzs();
336 cutMultiCirHit_after_zs();
344int HoughTrack::cutMultiCirHit(){
345 for(
int i=0;i<_recHitVec.size();i++){
346 if( _recHitVec[i].getLayerId()>8 )
continue;
347 if( (fabs(_recHitVec[i].getzAmb(0))>10) && (fabs(_recHitVec[i].getzAmb(1))>10) ) {
348 _recHitVec[i].setflag(1);
355int HoughTrack::cutMultiCirHit_after_zs(){
356 for(
int i=0;i<_recHitVec.size();i++){
357 int layer = _recHitVec[i].getLayerId();
358 double zl = _recHitVec[i].getzAmb(0);
359 double zr = _recHitVec[i].getzAmb(1);
360 double sl = _recHitVec[i].getsAmb(0);
361 double sr = _recHitVec[i].getsAmb(1);
362 double dl = zl - (sl*_tanl+_z0);
363 double dr = zr - (sr*_tanl+_z0);
364 if (layer<=8 && fabs(dl)>10 && fabs(
dr)>10 ) _recHitVec[i].setflag(1);
365 if (layer>8 && fabs(dl)>20 && fabs(
dr)>20 ) _recHitVec[i].setflag(1);
372 _Hough2D=
Hough2D(_recHitVec,_bunchTime);
373 double circleR = fabs(1./(_maprho));
374 double circleX = (1./_maprho)*
cos(_maptheta);
375 double circleY = (1./_maprho)*
sin(_maptheta);
376 double d0 = sqrt( circleX*circleX + circleY*circleY )-circleR;
377 double phi0 = atan2(circleY,circleX)+
M_PI/2.;
378 double omega = 1/circleR;
382 omega=-1.*fabs(omega);
387 omega=1.*fabs(omega);
394 _Hough2D.
setD0( d0 );
397 _Hough2D.
setPt( circleR/333.567 );
404 _pt2D=_Hough2D.
getPt();
405 _d0=_Hough2D.
getD0();
414int HoughTrack::fit_global2D(vector<HoughRecHit>& recHitVec){
434 int Stat_2d=_Hough2D.
fit();
435 p_trk2D = _Hough2D.
getTrk();
441 _pt2D=_Hough2D.
getPt();
442 _d0=_Hough2D.
getD0();
447 if(
m_debug>0) cout<<
"pt after global 2d: "<<_pt2D<<endl;
448 if(
m_debug>0) cout<<
"after global 2d "<<endl;
453 if(
m_debug>0) cout<<
" 2d global fail"<<endl;
460int HoughTrack::fit_global3D(
int time){
461 if(
time==0 ) _Hough3D=
Hough3D(_Hough2D,_recHitVec,_bunchTime,_tanl,_z0,vec_mdcHit);
480 int Stat_3d=_Hough3D.
fit();
481 p_trk = _Hough3D.
getTrk();
486 _pt3D=_Hough3D.
getPt();
488 _pz=_Hough3D.
getPz();
489 _d0=_Hough3D.
getD0();
493 _z0=_Hough3D.
getZ0();
494 _chi2_aver = _Hough3D.
getChi2();
496 if(
m_debug>0) cout<<
"pt after global 3d: "<<_pt3D<<endl;
500 if(
m_debug>0) cout<<
" 3d global fail"<<endl;
506void HoughTrack::hitOnTrack(){
507 if(
m_debug>0) cout<<
" calculate hit on track "<<endl;
508 for(
int ihit=0;ihit<_recHitVec.size();ihit++){
509 std::pair<double,double> theta_l = calcuArcTrack( (_recHitVec[ihit]) );
510 int flag = judge_half(_recHitVec[ihit]);
511 double dist=calcuDistToTrack( (_recHitVec[ihit]));
512 double distToCir=calcuDistToCir( (_recHitVec[ihit]));
513 _recHitVec[ihit].setflag(flag);
514 _recHitVec[ihit].setDisToTrack(dist);
515 _recHitVec[ihit].setDisToCir(distToCir);
516 _recHitVec[ihit].setRet(theta_l);
525 double x_cir=_Hough2D.
getCirX();
526 double y_cir=_Hough2D.
getCirY();
527 double r_cir=_Hough2D.
getCirR();
529 if( (x_cir*yhit - y_cir*xhit >=0) ) cir=0;
533 if( (x_cir*yhit - y_cir*xhit <=0) ) cir=0;
536 else cout<<
" charge is not set !!!!!!!!!!"<<endl;
541double HoughTrack::calcuDistToTrack(
const HoughRecHit& hit){
544 double x_cir=_Hough2D.
getCirX();
545 double y_cir=_Hough2D.
getCirY();
546 double r_cir=_Hough2D.
getCirR();
547 double dist=sqrt( pow( (xhit-x_cir),2)+pow( (yhit-y_cir),2) )-r_cir;
551double HoughTrack::calcuDistToCir(
const HoughRecHit& hit){
554 double x_cir=_Hough2D.
getCirX();
555 double y_cir=_Hough2D.
getCirY();
556 double r_cir=_Hough2D.
getCirR();
557 double dist=sqrt( pow( (xhit-x_cir),2)+pow( (yhit-y_cir),2) );
573std::pair<double,double> HoughTrack::calcuArcTrack(
const HoughRecHit& hit){
576 double x_cir=_centerX;
577 double y_cir=_centerY;
578 double r_cir=_centerR;
579 std::pair<double,double> theta_l;
587 theta_temp=
M_PI-atan2(yhit-y_cir,xhit-x_cir)+atan2(y_cir,x_cir);
588 if(theta_temp>2*
M_PI){
589 theta_temp=theta_temp-2*
M_PI;
592 theta_temp=theta_temp+2*
M_PI;
596 l_temp=r_cir*theta_temp;
599 theta_temp=2*
M_PI-theta_temp;
600 l_temp=r_cir*(theta_temp);
602 theta_l.first=theta_temp;
603 theta_l.second=l_temp;
609 for(
int i =0; i<_recHitVec.size(); i++){
610 if ( _recHitVec[i].getSlayerType() ==0 || _recHitVec[i].getflag()!=0 )
continue;
611 if ( _recHitVec[i].getDetectorType()==
MDC){
613 HoughStereo zs( _bunchTime, &_Hough2D, &(_recHitVec[i]) );
625 _recHitVec[i].setnsol(stat);
626 if( stat==0 ) _recHitVec[i].setflag(-999);
629 _recHitVec[i].setAmb(-999);
635 }
else if( _recHitVec[i].getDetectorType()==
CGEM){
636 double z=(_recHitVec[i].getCluster())->getRecZ()/10.;
637 std::pair<double,double> theta_l = calcuArcTrack(_recHitVec[i]);
638 double l=theta_l.second;
639 _recHitVec[i].setzAmb( 0 , z);
640 _recHitVec[i].setsAmb( 0 , l);
641 _recHitVec[i].setzAmb( 1 , z);
642 _recHitVec[i].setsAmb( 1 , l);
643 _recHitVec[i]. setzPos(z);
644 _recHitVec[i]. setsPos(l);
645 HepPoint3D leftPoint(_recHitVec[i].getMidX(),_recHitVec[i].getMidY(),z);
646 HepPoint3D rightPoint(_recHitVec[i].getMidX(),_recHitVec[i].getMidY(),z);
647 _recHitVec[i].setLeftPoint(leftPoint);
648 _recHitVec[i].setRightPoint(rightPoint);
663 _z0_zs=zsfit.
getZ0();
664 t_pro_correct = zsfit.
getPro();
669 int size=_recHitVec.size();
670 int n0,
n1,
n2,n3,n4,n5,n6;
671 n0=
n1=
n2=n3=n4=n5=n6=0;
672 for(
int i=0;i<size;i++){
673 int cir= _recHitVec[i].getCirList();
674 int style= _recHitVec[i].getStyle();
676 if( style == 1 )
n1++;
677 if( style == 2 )
n2++;
678 if(_recHitVec[i].getDetectorType()==
MDC){
679 int index = _recHitVec[i].digi()->getTrackIndex();
680 if( index < 0 ) n3++;
681 if( index >=0 && cir<=1 && style==0) n4++;
682 if( index <0 || cir>1 ) n5++;
683 if( index >=0 && cir==0 && style==0) n6++;
686 if( select == 0 )
return n0;
687 if( select == 1 )
return n1;
688 if( select == 2 )
return n2;
689 if( select == 3 )
return n3;
690 if( select == 4 )
return n4;
691 if( select == 5 )
return n5;
692 if( select == 6 )
return n6;
695 int size=_recHitVec.size();
696 int n0,
n1,
n2,n3,n4,n5,n6;
697 n0=
n1=
n2=n3=n4=n5=n6=0;
698 for(
int i=0;i<size;i++){
699 int cir= _recHitVec[i].getCirList();
700 int type = _recHitVec[i].getSlayerType();
701 int style= _recHitVec[i].getStyle();
703 if( type==0 && style == 1 )
n1++;
704 if( type==0 && style == 2 )
n2++;
705 if(_recHitVec[i].getDetectorType()==
MDC){
706 int index = _recHitVec[i].digi()->getTrackIndex();
707 if( type==0 && index < 0 ) n3++;
708 if( type==0 && index >=0 && cir<=1 && style==0 ) n4++;
709 if( type==0 && (index <0 || cir>1) ) n5++;
710 if( type==0 && index >=0 && cir==0 && style==0 ) n6++;
713 if( select == 0 )
return n0;
714 if( select == 1 )
return n1;
715 if( select == 2 )
return n2;
716 if( select == 3 )
return n3;
717 if( select == 4 )
return n4;
718 if( select == 5 )
return n5;
719 if( select == 6 )
return n6;
722 int size=_recHitVec.size();
723 int n0,
n1,
n2,n3,n4,n5,n6;
724 n0=
n1=
n2=n3=n4=n5=n6=0;
725 for(
int i=0;i<size;i++){
726 int cir= _recHitVec[i].getCirList();
727 int type = _recHitVec[i].getSlayerType();
728 int style= _recHitVec[i].getStyle();
730 if( type!=0 && style == 1 )
n1++;
731 if( type!=0 && style == 2 )
n2++;
732 if(_recHitVec[i].getDetectorType()==
MDC){
733 int index = _recHitVec[i].digi()->getTrackIndex();
734 if( type!=0 && index < 0 ) n3++;
735 if( type!=0 && index >=0 && cir<=1 && style==0) n4++;
736 if( type!=0 && (index <0 || cir>1) ) n5++;
737 if( type!=0 && index >=0 && cir==0 && style==0) n6++;
740 if( select == 0 )
return n0;
741 if( select == 1 )
return n1;
742 if( select == 2 )
return n2;
743 if( select == 3 )
return n3;
744 if( select == 4 )
return n4;
745 if( select == 5 )
return n5;
746 if( select == 6 )
return n6;
754 vector<int> vec_layer;
755 for(
int i =0;i<_recHitVec.size();i++){
756 int layer = _recHitVec[i].getLayerId();
757 int slant= _recHitVec[i].getSlayerType();
758 if( 0==slant ) axialHit++;
763 if ( axialHit <5 )
return 0;
778 vector<HoughRecHit> vec_rec;
780 for(
int ihit=0;ihit<_houghList.size();ihit++){
781 const HoughHit hit= _houghList[ihit];
784 if ( hit.
driftTime(_bunchTime,0)>800 )
continue;
787 std::pair<double,double> theta_l = calcuArcTrack( p_hit );
788 double dist=calcuDistToTrack( p_hit );
789 double distToCir=calcuDistToCir( p_hit );
790 int flag = judge_half( p_hit );
794 if(layer<8) disCut=4;
798 if(
m_debug >0 )cout<<
"("<<layer<<
","<<wire<<
") "<<
" rec hit dist theta "<<dist<<
" "<< theta_l.first<<endl;
800 if( fabs(dist) < disCut ) {
807 if( p_hit.
getflag()!=0 )
continue;
808 _recHitVec.push_back(p_hit);
880 for(
int ihit=0;ihit<_recHitVec.size();ihit++){
881 if(_recHitVec[ihit].getSlayerType()!=0 )
continue;
882 double xhit =_recHitVec[ihit].getMidX();
883 double yhit =_recHitVec[ihit].getMidY();
884 double x_cir=_Hough2D.
getCirX();
885 double y_cir=_Hough2D.
getCirY();
886 double r_cir=_Hough2D.
getCirR();
887 if( (x_cir*yhit - y_cir*xhit >=0) ) n_neg++;
888 if( (x_cir*yhit - y_cir*xhit <=0) ) n_pos++;
890 if(
m_debug >0 ) cout<<
" in track charge 2d "<<n_neg<<
" "<<n_pos<<endl;
891 if( (_charge==-1&&n_neg<3) || (_charge==1&&n_pos<3) )
return 0;
892 else if( _charge ==0 ) cout<<
" wrong ! in track charge 2D not set charge "<<endl;
899 for(
int ihit=0;ihit<_recHitVec.size();ihit++){
900 if(_recHitVec[ihit].getSlayerType()==0 )
continue;
901 if(_recHitVec[ihit].getflag()!=0)
continue;
903 double xhit =_recHitVec[ihit].getMidX();
904 double yhit =_recHitVec[ihit].getMidY();
905 double x_cir=_Hough2D.
getCirX();
906 double y_cir=_Hough2D.
getCirY();
907 double r_cir=_Hough2D.
getCirR();
908 if( (x_cir*yhit - y_cir*xhit >=0) ) n_neg++;
909 if( (x_cir*yhit - y_cir*xhit <=0) ) n_pos++;
911 if(
m_debug >0 ) cout<<
" in track charge 3d "<<n_neg<<
" "<<n_pos<<endl;
912 if( (_charge==-1&&n_neg<2) || (_charge==1&&n_pos<2) )
return 0;
913 else if( _charge ==0 ) cout<<
" wrong ! in track charge 3D not set charge "<<endl;
965 std::vector<HoughRecHit>::iterator iter0= _recHitVec.begin();
966 for(; iter0!= _recHitVec.end(); iter0++){
974 double cirx_hit = hit->
getMidX();
975 double ciry_hit = hit->
getMidY();
981 double l1l2 = sqrt( (cirx_hit-_centerX)*(cirx_hit-_centerX)+(ciry_hit-_centerY)*(ciry_hit-_centerY) );
982 if( l1l2>_centerR ) deltaD = l1l2-_centerR-cirr_hit;
983 if( l1l2<=_centerR ) deltaD = l1l2-_centerR+cirr_hit;
988 double dphi = phih_cluster - phi_cross;
991 deltaD = r_cgem*dphi;
1033 if(charge==0)
return 9999;
1034 while(phi_center<0) phi_center += 2*
M_PI;
1035 while(phi_center>2*
M_PI) phi_center -= 2*
M_PI;
1036 if(r_center<r_cylinder/2)
return -9999;
1037 double dphi = acos( r_cylinder/(2*r_center) );
1038 if(charge<0) phi = phi_center + dphi;
1039 else phi = phi_center - dphi;
1040 while(phi<0) phi += 2*
M_PI;
1047 double phi_center = atan2(y_center,x_center);
1048 double r_center = sqrt(x_center*x_center+y_center*y_center);
1049 if(charge==0)
return 9999;
1050 while(phi_center<0) phi_center += 2*
M_PI;
1051 while(phi_center>2*
M_PI) phi_center -= 2*
M_PI;
1052 if(r_center<r_cylinder/2)
return -9999;
1053 double dphi = acos( r_cylinder/(2*r_center) );
1054 if(charge<0) phi = phi_center + dphi;
1055 else phi = phi_center - dphi;
1056 while(phi<0) phi += 2*
M_PI;
1068 for(
int ihit=0;ihit<_houghList.size();ihit++){
1069 const HoughHit hit= _houghList[ihit];
1071 if ( hit.
driftTime(_bunchTime,0)>1000 )
continue;
1075 std::pair<double,double> theta_l = calcuArcTrack( p_hit );
1076 double dist=calcuDistToTrack( p_hit );
1077 double distToCir=calcuDistToCir( p_hit );
1078 int flag = judge_half( p_hit );
1083 if( slayer == 0 ) disCut = 6;
1085 if(layer<8) disCut=6;
1088 if(
m_debug >0 )cout<<
"("<<layer<<
","<<wire<<
") "<<
" pair dist flag "<<dist<<
" "<< flag<<endl;
1089 if( fabs(dist) < disCut ) {
1090 if( flag !=1 )
continue;
1091 if ( layer<4) nster1++;
1092 else if ( layer<8) nster2++;
1093 else if ( layer<12) naxial1++;
1094 else if ( layer<16) naxial2++;
1095 else if ( layer<20) naxial3++;
1100 cout <<
"naxial_1 "<<naxial1<<endl;
1101 cout <<
"naxial_2 "<<naxial2<<endl;
1102 cout <<
"naxial_3 "<<naxial3<<endl;
1103 cout <<
"stereo_1 "<<nster1<<endl;
1104 cout <<
"stereo_2 "<<nster2<<endl;
1105 cout <<
"stereo_3 "<<nster3<<endl;
1108 if ( nster1>=2 && nster3>=2 && naxial1>=2 && naxial2>=2 && naxial3>=2 )
return 1;
1112 cout<<
"print HoughTrack : "<<p_trk->
id()<<endl;
1114 cout<<
"par : "<<_d0<<
","<<_omega<<
","<<_phi0<<
","<<_z0<<
","<<_tanl<<
", pt: "<<_pt3D<<endl;
1122 cout <<
"(" <<((
MdcHit*)(hotIter->hit()))->layernumber()
1123 <<
","<<((
MdcHit*)(hotIter->hit()))->wirenumber()
1124 <<
":"<<hotIter->isActive()<<
") ";
1125 cout <<
"nuse "<<hotIter->hit()->nUsedHits()<<endl;
1132 <<
" flag:"<<recCgemCluster->
getflag()<<endl;
1139 cout<<
".........................................print HoughTrack "<<_trkid<<
"............................................."<<endl;
1142 cout<<
"(Xc, Yc, R):"<<
"("<<_centerX<<
", "<<_centerY<<
", "<<_centerR<<
") (theta,rho):"<<
"("<<_centerPeak.
getTheta()<<
", "<<_centerPeak.
getRho()<<
")"<<
" ,pt_2D: "<<_pt2D*_charge<<
" pt_3D: "<<_pt3D*_charge<<endl;
1146 cout<<
"print rec hit"<<endl;
1147 double rho = _centerPeak.
getRho();
1148 double theta= _centerPeak.
getTheta();
1149 int size=_recHitVec.size();
1150 for(
int i=0;i<size;i++){
1151 int layer= _recHitVec[i].getLayerId();
1152 int wire = _recHitVec[i].getWireId();
1153 int slant= _recHitVec[i].getSlayerType();
1154 int flag= _recHitVec[i].getflag();
1155 int style= _recHitVec[i].getStyle();
1156 int cirlist= _recHitVec[i].getCirList();
1157 if( slant ==0 ) std::cout<<
"axial hit ("<<layer<<
","<<wire<<
") "<<_recHitVec[i].getDisToTrack()<<
" "<<_recHitVec[i].getDisToCir()<<
" "<<flag<<
" "<<style<<
" "<<cirlist<<std::endl;
1159 for(
int i=0;i<size;i++){
1160 int layer= _recHitVec[i].getLayerId();
1161 int wire = _recHitVec[i].getWireId();
1162 int slant= _recHitVec[i].getSlayerType();
1163 int flag= _recHitVec[i].getflag();
1164 int style= _recHitVec[i].getStyle();
1165 int cirlist= _recHitVec[i].getCirList();
1166 if( slant !=0 ) std::cout<<
"stereo hit ("<<layer<<
","<<wire<<
") "<<_recHitVec[i].getDisToTrack()<<
" "<<flag<<
" "<<style<<
" "<<cirlist<<std::endl;
double sin(const BesAngle a)
double cos(const BesAngle a)
bool digi_in_track(const HoughRecHit &hita, const HoughRecHit &hitb)
bool less_layer(const int &a, const int &b)
double getMiddleROfGapD() const
CgemGeoLayer * getCgemLayer(int i) const
const RecCgemCluster * baseHit() const
double dr(void) const
returns an element of parameters.
double getChi2_2D() const
void setPhi0(double phi0)
void setCirX(double cirx)
void setCirY(double ciry)
void setCirR(double cirr)
void setCharge(int charge)
void setRecHit(const recHitCol &rechit)
void setOmega(double omega)
TrkRecoTrk * getTrk() const
void setRecHit(const recHitCol &rechit)
TrkRecoTrk * getTrk() const
int getSlayerType() const
double getDriftDist() const
CgemGeomSvc * getCgemGeomSvc() const
detectorType getDetectorType() const
const RecCgemCluster * getCluster() const
void setRet(std::pair< double, double > theta_l)
void setPtr2D(Hough2D *p_hough2D)
void setDisToCir(double dis)
void setDisToTrack(double dis)
int getHitNumS(int) const
int getHitNumA(int) const
int fit2D(double bunchtime)
HoughTrack & operator=(const HoughTrack &other)
double intersect_cylinder(double r_cylinder, double r_center, double phi_center, int charge)
int getclusterid(void) const
int getlayerid(void) const
double getrecphi(void) const
int getsheetid(void) const
const TrkHotList & hotList() const
hot_iterator begin() const
Index other(Index i, Index j)