12TGraph* HoughTrack::m_cut1_cgem =NULL;
13TGraph* HoughTrack::m_cut2_cgem =NULL;
14TGraph* HoughTrack::m_cut1_ODC1 =NULL;
15TGraph* HoughTrack::m_cut2_ODC1 =NULL;
16TGraph* HoughTrack::m_cut1_ODC2 =NULL;
17TGraph* HoughTrack::m_cut2_ODC2 =NULL;
28 m_charge = (charge>0)?1:-1;
40 m_phi0 = (rho>0)? angle:angle+
M_PI;
41 m_phi0 = (m_charge<0)? m_phi0:m_phi0+
M_PI;
43 if(m_phi0<0) m_phi0+=2*
M_PI;
44 m_kappa = fabs(
m_alpha*rho)*m_charge;
62 m_vecHitResidual.clear();
74 m_cgemHitVector.clear();
75 m_nearStereoHits=
false;
90 if(m_angle<0)m_angle=+2*
M_PI;
108 m_vecHitResidual.clear();
109 m_vecHitChi2.clear();
117 m_cgemHitVector.clear();
118 m_nearStereoHits=
false;
130 m_charge = (
kappa()>0)? 1:-1;;
135 if(m_angle<0)m_angle=+2*
M_PI;
152 m_vecHitResidual.clear();
153 m_vecHitChi2.clear();
161 m_cgemHitVector.clear();
162 m_nearStereoHits=
false;
215 m_vecHitResidual.clear();
216 m_vecHitChi2.clear();
224 m_cgemHitVector.clear();
225 m_nearStereoHits=
false;
231 m_trkID(other.m_trkID),
232 m_charge(other.m_charge),
233 m_angle(other.m_angle),
235 m_flag(other.m_flag),
237 m_dAngle(other.m_dAngle),
238 m_dRho(other.m_dRho),
239 m_dTanl(other.m_dTanl),
240 m_dDz(other.m_dTanl),
244 m_kappa(other.m_kappa),
249 m_trkRecoTrk(other.m_trkRecoTrk),
251 m_circleFitStat(other.m_circleFitStat),
252 m_vecHitPnt(other.m_vecHitPnt),
253 m_vecHitResidual(other.m_vecHitResidual),
254 m_vecHitChi2(other.m_vecHitChi2),
255 m_vecStereoHitPnt(other.m_vecStereoHitPnt),
256 m_vecStereoHitRes(other.m_vecStereoHitRes),
257 m_mcTrack(other.m_mcTrack),
258 m_cgemHitVector(other.m_cgemHitVector),
259 m_vecRecMdcHit(other.m_vecRecMdcHit),
260 m_nearStereoHits(other.m_nearStereoHits)
265 if (
this == & other)
return *
this;
268 m_trkID = other.m_trkID;
269 m_charge = other.m_charge;
270 m_angle = other.m_angle;
272 m_flag = other.m_flag;
274 m_dAngle = other.m_dAngle;
275 m_dRho = other.m_dRho;
276 m_dTanl = other.m_dTanl;
280 m_phi0 = other.m_phi0;
281 m_kappa = other.m_kappa;
283 m_tanl = other.m_tanl;
285 m_chi2 = other.m_chi2;
286 m_trkRecoTrk = other.m_trkRecoTrk;
288 m_circleFitStat=other.m_circleFitStat;
289 m_vecHitPnt = other.m_vecHitPnt;
290 m_vecHitResidual = other.m_vecHitResidual;
291 m_vecHitChi2 = other.m_vecHitChi2;
293 m_vecStereoHitPnt = other.m_vecStereoHitPnt;
294 m_vecStereoHitRes = other.m_vecStereoHitRes;
295 m_mcTrack = other.m_mcTrack;
296 m_cgemHitVector = other.m_cgemHitVector;
297 m_vecRecMdcHit = other.m_vecRecMdcHit;
298 m_nearStereoHits = other.m_nearStereoHits;
484m_nGap=XGapSize(m_setLayer,m_maxGap);
493 bool printFlag(
false);
495 for(vector<HoughHit*>::iterator hitIt = hitList.begin(); hitIt != hitList.end(); hitIt++){
498 if((*hitIt)->getFlag() != 0)
continue;
502 if(printFlag)(*hitIt)->print();
506 int iLayer = (*hitIt)->getLayer();
507 int used = (*hitIt)->getUse();
508 XhitCutWindow(m_rho, iLayer, charge,
cut[0],
cut[1]);
510 HepPoint3D positionOntrack(999,999,999), positionOnDetector(999,999,999);
511 double res2 = (*hitIt)->residual(
this, positionOntrack, positionOnDetector);
514 if(printFlag)cout<<
"res:"<<setw(12)<<res;
516 if(printFlag)cout<<
" win: "<<setw(5)<<
cut[0]<<
" ~ "<<setw(5)<<
cut[1];
518 map<int,double>::iterator it_map;
519 it_map=m_map_lay_d.find(iLayer);
520 if(it_map==m_map_lay_d.end()||fabs(res)<fabs(it_map->second))
522 m_map_lay_d[iLayer]=res;
523 m_map_lay_hit[iLayer]=(*hitIt);
525 if(res>
cut[0]&&res<
cut[1])
527 if(printFlag)cout<<
" selected!";
529 m_vecHitPnt.push_back((*hitIt));
530 m_vecHitResidual.push_back(res);
533 m_setLayer.insert(iLayer);
534 if(used==0) m_untried++;
535 if(used==0||used==-1) m_unused++;
539 if(used<=0) m_nHitUnused_FirstHalf++;
544 if(used<=0) m_nHitUnused_SecondHalf++;
548 if(printFlag)cout<<endl;
598 m_nGap=XGapSize(m_setLayer,m_maxGap);
611 double xCenter =
center().x();
612 double yCenter =
center().y();
613 if(xHit*yCenter > xCenter*yHit)
return m_charge;
614 else if(xHit*yCenter < xCenter*yHit)
return -m_charge;
624 double xCenter =
center().x();
625 double yCenter =
center().y();
626 double leftOrRight = xHit*yCenter - xCenter*yHit;
627 if(leftOrRight>0)
return 1;
637 double xCenter =
center().x();
638 double yCenter =
center().y();
639 double leftOrRight = xHit*yCenter - xCenter*yHit;
640 if(leftOrRight>0)
return 1;
647 double residual(9999.);
653 double distance = (circleCenter-hitPoint).perp();
659 double Rc = fabs(
radius());
664 residual = driftDist-fabs(distance - Rc);
669 double rCgem = hitPoint.perp();
675 double phiCrossPoint = crossPoint.phi();
676 double phiMeasure = hitPoint.phi();
677 residual = phiMeasure - phiCrossPoint;
678 while(residual<-
M_PI)residual += 2*
M_PI;
679 while(residual>
M_PI)residual -= 2*
M_PI;
680 residual = rCgem*residual;
786 if(hit->
getFlag()==0)
return nTangency;
794 if(hit->
getFlag()!=2)
return nTangency;
797 for(vector<HoughHit*>::iterator hotIt = m_vecHitPnt.begin(); hotIt != m_vecHitPnt.end(); hotIt++){
798 if((*hotIt)->getFlag()!=0)
continue;
800 if((*hotIt)->getUse()!=1)
continue;
801 vector<int> vec_trkId = (*hotIt)->getTrkID();
802 vector<int>::iterator found_it = find(vec_trkId.begin(), vec_trkId.end(),
getTrkID());
803 if(found_it==vec_trkId.end())
continue;
811 pair<double,double> sz(
s,z);
816 m_XVhits_cgem[layer].push_back(hit);
828 double xEast = eastPoint.x()/10.0;
829 double xWest = westPoint.x()/10.0;
830 double yEast = eastPoint.y()/10.0;
831 double yWest = westPoint.y()/10.0;
832 double zEast = eastPoint.z()/10.0;
833 double zWest = westPoint.z()/10.0;
837 double west2east = sqrt((xEast-xWest)*(xEast-xWest)+(yEast-yWest)*(yEast-yWest));
839 double slope = (yEast-yWest)/(xEast-xWest);
840 double intercept = (yWest-slope*xWest+yEast-slope*xEast)/2;
841 double a = 1+slope*slope;
842 double b = -2*(xc+slope*yc-slope*intercept);
843 double c1 = xc*xc+(yc-intercept)*(yc-intercept)-(rTrack+drift)*(rTrack+drift);
844 double c2 = xc*xc+(yc-intercept)*(yc-intercept)-(rTrack-drift)*(rTrack-drift);
847 double delta1 = (b*b-4*
a*
c1);
848 double delta2 = (b*b-4*
a*c2);
852 double x1 = (-b+sqrt(delta1))/(2*
a);
853 double x2 = (-b-sqrt(delta1))/(2*
a);
854 double y1 = slope*x1+intercept;
855 double y2 = slope*x2+intercept;
856 if((x1-xWest)*(x1-xEast)<0){
860 double l = sqrt((x1-xWest)*(x1-xWest)+(y1-yWest)*(y1-yWest));
861 z = zWest + l/west2east*fabs((zEast-zWest));
862 pair<double,double> sz(
s,z);
869 if((x2-xWest)*(x2-xEast)<0){
873 double l = sqrt((x2-xWest)*(x2-xWest)+(y2-yWest)*(y2-yWest));
874 z = zWest + l/west2east*fabs((zEast-zWest));
875 pair<double,double> sz(
s,z);
885 double x1 = (-b+sqrt(delta2))/(2*
a);
886 double x2 = (-b-sqrt(delta2))/(2*
a);
887 double y1 = slope*x1+intercept;
888 double y2 = slope*x2+intercept;
889 if((x1-xWest)*(x1-xEast)<0){
893 double l = sqrt((x1-xWest)*(x1-xWest)+(y1-yWest)*(y1-yWest));
894 z = zWest + l/west2east*fabs((zEast-zWest));
895 pair<double,double> sz(
s,z);
902 if((x2-xWest)*(x2-xEast)<0){
908 double l = sqrt((x2-xWest)*(x2-xWest)+(y2-yWest)*(y2-yWest));
909 z = zWest + l/west2east*fabs((zEast-zWest));
910 pair<double,double> sz(
s,z);
920 else if(sz_version==1) {
933 double A = pow(Xdelta.x(),2 ) + pow(Xdelta.y(),2);
934 double B = 2 * Xdelta.x() * (Xa.x() - xc) + 2 * Xdelta.y() * (Xa.y() - yc);
935 double C_part = pow(Xa.x() - xc, 2) + pow(Xa.y() - yc, 2);
936 double C1 = C_part - pow(rTrack + r_drift,2);
937 double C2 = C_part - pow(rTrack - r_drift, 2);
942 for (
int _ = 0;
_ < 2;
_++) {
943 double C =
_ ? C2 : C1;
944 double Delta = B*B - 4 * A *
C;
946 if (Delta < 0)
continue;
948 for (
int sign = -1; sign < 2; sign += 2) {
949 double lambda = (-B + sign * sqrt(Delta)) / 2 / A;
950 if (lambda > 1.2 or lambda < -0.2)
continue;
955 pair<double, double> sz(
s, Xhit.z());
959 if (Delta == 0)
break;
984 std::sort(hotList.begin(),hotList.end(),
sortByLayer);
990 HepVector hepVector(5,0);
992 hepVector(2) = m_phi0;
993 hepVector(3) = m_kappa;
995 hepVector(5) = m_tanl;
1003 m_phi0 = (rho>0)? angle:angle+
M_PI;
1004 m_phi0 = (m_charge<0)? m_phi0:m_phi0+
M_PI;
1006 if(m_phi0<0) m_phi0+=2*
M_PI;
1007 m_kappa = fabs(
m_alpha*rho)*m_charge;
1010 HepSymMatrix
Ea(5,0);
1029 <<setw(12)<<
"trkID:" <<setw(15)<<m_trkID
1030 <<setw(12)<<
"flag:" <<setw(15)<<m_flag
1032 <<setw(12)<<
"pt:" <<setw(15)<<
pt()
1033 <<setw(12)<<
"angle:" <<setw(15)<<m_angle
1034 <<setw(12)<<
"rho:" <<setw(15)<<m_rho
1036 <<setw(12)<<
"dr:" <<setw(15)<<
dr()
1037 <<setw(12)<<
"phi0:" <<setw(15)<<
phi0()
1038 <<setw(12)<<
"kappa:" <<setw(15)<<
kappa()
1039 <<setw(12)<<
"dz:" <<setw(15)<<
dz()
1040 <<setw(12)<<
"tanl:" <<setw(15)<<
tanl()
1041 <<setw(12)<<
"chi2:" <<setw(15)<<
getChi2()
1063 vector<HoughHit*> hotList;
1066 for(vector<HoughHit*>::iterator hotIt = axialHot.begin(); hotIt != axialHot.end(); hotIt++){
1070 for(vector<HoughHit*>::iterator hotIt = stereoHot.begin(); hotIt != stereoHot.end(); hotIt++){
1075 <<setw(12)<<
"nHot:" <<setw(15)<<nHot
1076 <<setw(12)<<
"nAxialHot0:" <<setw(15)<<nAxialHot
1077 <<setw(12)<<
"nStereoHot0:" <<setw(15)<<nStereoHot
1078 <<setw(12)<<
"nXCluster0:" <<setw(15)<<nXCluster
1079 <<setw(12)<<
"nXVCluster0:" <<setw(15)<<nXVCluster
1086 vector<HoughHit*> hitList =
getHotList(type);
1088 for(vector<HoughHit*>::iterator hotIt = hitList.begin(); hotIt != hitList.end();hotIt++){
1186 m_nearStereoHits=
false;
1187 int nCgemLayer(0), N_ODC1_nearStereo(0), N_ODC2_nearStereo(0);
1188 for(vector<HoughHit*>::iterator hotIt = m_vecHitPnt.begin(); hotIt != m_vecHitPnt.end(); hotIt++)
1190 int iLayer=(*hotIt)->getLayer();
1191 m_setLayer.insert(iLayer);
1192 if(iLayer<3) nCgemLayer++;
1193 else if(iLayer>=16&&iLayer<=19) N_ODC1_nearStereo++;
1194 else if(iLayer>=36&&iLayer<=39) N_ODC2_nearStereo++;
1196 if(N_ODC1_nearStereo>=2||N_ODC2_nearStereo>=2) m_nearStereoHits=
true;
1202 cout<<
"HoughTrack::printRecMdcHitVec(): "<<endl;
1203 vector<RecMdcHit>::iterator iter_recMdcHit = m_vecRecMdcHit.begin();
1204 for(; iter_recMdcHit!=m_vecRecMdcHit.end(); iter_recMdcHit++)
1206 Identifier mdcid = iter_recMdcHit->getMdcId();
1209 cout<<
" hit at layer "<<layer<<
" wire "<<wire<<endl;
1213void HoughTrack::XhitCutWindow(
double rho,
int ilayer,
double charge,
double& cut1,
double &cut2)
1215 static bool initialized =
false;
1219 double rho[nPt] = {0.07, 0.056,0.045,0.038,0.0335,0.03,0.0198,0.0148,0.0074,0.00376,0.00303,0.00157};
1220 double cut1_Cgem_99[12]={-2.14,-1.36, -0.6 , -0.46, -0.35, -0.59, -0.32, -0.26, -0.22, -0.21, -0.21, -0.211};
1221 double cut2_Cgem_99[12]={ 0.5 , 1.77, 1.99, 1.94, 1.99, 1.9 , 0.31, 0.27, 0.24, 0.23, 0.23, 0.222};
1222 double cut1_ODC1_99[12]={-1.28,-0.71, -0.58, -0.62, -0.64, -0.68, -0.18, -0.14, -0.11, -0.1 , -0.1 , -0.11 };
1223 double cut2_ODC1_99[12]={ 0.9 , 0.74, 0.42, 0.37, 0.32, 0.37, 0.28, 0.25, 0.24, 0.24, 0.24, 0.23};
1224 double cut1_ODC2_99[12]={ -2.14, -1.25, -1.28, -0.86, -0.47, -0.78, -0.36, -0.44, -0.61, -0.67, -0.64, -0.82 };
1225 double cut2_ODC2_99[12]={ -1.35, 0.55 , 0.53 , 0.83 , 0.85 , 0.83 , 0.38 , 0.55 , 0.49 , 0.46 , 0.49 , 0.4};
1226 m_cut1_cgem =
new TGraph(nPt, rho, cut1_Cgem_99);
1227 m_cut2_cgem =
new TGraph(nPt, rho, cut2_Cgem_99);
1228 m_cut1_ODC1 =
new TGraph(nPt, rho, cut1_ODC1_99);
1229 m_cut2_ODC1 =
new TGraph(nPt, rho, cut2_ODC1_99);
1230 m_cut1_ODC2 =
new TGraph(nPt, rho, cut1_ODC2_99);
1231 m_cut2_ODC2 =
new TGraph(nPt, rho, cut2_ODC2_99);
1236 if(rho>0.07) rho=0.07;
1237 TGraph* g_cut1, *g_cut2;
1242 else if(ilayer<=19) {
1246 else if(ilayer<=42) {
1251 cut1=g_cut1->Eval(rho);
1252 cut2=g_cut2->Eval(rho);
1259 double cut=max(fabs(cut1),fabs(cut2));
1277 m_vecHitPnt.clear();
1278 m_vecHitResidual.clear();
1279 m_vecHitChi2.clear();
1280 m_map_lay_d.clear();
1281 m_map_lay_hit.clear();
1287 m_nHitUnused_FirstHalf=0;
1288 m_nHitUnused_SecondHalf=0;
1294int HoughTrack::XGapSize(std::set<int> aLaySet,
int& gapMax)
1300 vector<int> vec_nGap;
1301 vector<int> vec_layerAfterGap;
1303 int nLayer=aLaySet.size();
1304 if(nLayer<2)
return 0;
1305 std::set<int>::iterator it = aLaySet.begin();
1306 int lastLayer = *it;
1309 for(;it!=aLaySet.end(); it++)
1313 if(iLayer>=8&&iLayer<=19) iLayer=iLayer-5;
1314 if(iLayer>=36&&iLayer<=42) iLayer=iLayer-21;
1327 if(it!=aLaySet.begin()) {
1328 int aGap = iLayer-1-lastLayer;
1333 vec_nGap.push_back(aGap);
1334 vec_layerAfterGap.push_back(*it);
1335 if(aGap>2) nBigGap++;
1338 iGapmax=vec_nGap.size()-1;
1346 if(nBigGap==1&&nGap/(nGap+nLayer)>0.3) {
1347 vector<double>::iterator it0_res = m_vecHitResidual.begin();
1348 vector<HoughHit*>::iterator iter0 = m_vecHitPnt.begin();
1349 vector<HoughHit*>::iterator
iter = m_vecHitPnt.begin();
1350 for(;
iter!=m_vecHitPnt.end();
iter++)
1352 int iLayer = (*iter)->getLayer();
1353 if(iLayer>=vec_layerAfterGap[iGapmax])
1478//double rhit=sqrt(hit_x*hit_x+hit_y*hit_y);
1479//double phi_hit = atan2(hit_y, hit_x);
1480//double Rho = rad+trkpar(1);
1481//double l = fabs(rad+trkpar(1));
1482//double r_hitCent=sqrt((hit_x-xc)*(hit_x-xc)+(hit_y-yc)*(hit_y-yc));
1483//double d_trk = fabs(rad)-r_hitCent;
1485//if(d_trk!=0.0) sign=d_trk/fabs(d_trk);
1486//double d_measured = (*iter)->getDriftDist();
1487//dm = sign*d_measured-d_trk;
1490//err2=(*iter)->getMdcCalibFunSvc()->getSigma(iLayer,2,d_measured*10);// in mm
1491//err2=err2*err2/100.;// in cm
1493//if(loc_debug) cout<<" d_measured, d_trk, dm = "<<sign*d_measured<<", "<<d_trk<<", "<<dm;
1495//HepPoint3D aPivot = pivot();
1496//Helix aHelix(aPivot, vec_a);
1497//aHelix.pivot((*iter)->getHitPosition());
1498//double phi0_new = aHelix.phi0();
1500//double Phi = phi0_new-phi0;
1501//while(Phi>M_PI) Phi-=2.0*M_PI;
1502//while(Phi<-M_PI) Phi+=2.0*M_PI;
1503//double cosPhi=cos(Phi);
1504//double sinPhi=sin(Phi);
1505//if(loc_debug) cout<<" tuning phi = "<<Phi;
1507//double dc=sqrt(rhit*rhit+Rho*Rho-2.*rhit*Rho*cos(phi_hit-phi0));
1509//double dDddr = -(Rho-rhit*cos(phi_hit-phi0))/dc;
1510//double dddphi0 = rhit*Rho*sin(phi_hit-phi0)/dc;
1511//double dddkappa= -rad/kappa;
1512//if(rad<0) dddkappa=rad/kappa;
1513//dddkappa+=rad*(Rho-rhit*cos(phi_hit-phi0))/(kappa*dc);
1520// --- chi2 for initial trk parameters
1521double chi2_hit = dm*dm/err2;
1522if(loc_debug) cout<<", err = "<<sqrt(err2);
1523if(loc_debug) cout<<", chi2 = "<<chi2_hit<<endl;
1524chi2_ini+=dm*dm/err2;
1525// --- for U and ATWdM accumulating
1526for(int i=1; i<4; i++) {
1527 ATWdM(i)=ATWdM(i)+dm/err2*J(i);
1528 for(int j=1; j<4; j++) {
1529 U(i,j) = U(i,j)+J(i)*J(j)/err2;
1532// cout<<"finish a hit at layer "<<iLayer<<endl;
1535HepSymMatrix Uinv = U.inverse(ifail);
1539 cout<<"chi2_ini = "<<chi2_ini<<",chi2/ndof = "<<chi2_ini/(nHits-3)<<endl;
1540 cout<<"dr, phi0, kappa = "<<dr<<", "<<phi0<<", "<<kappa<<endl;
1541 cout<<"a_new = "<<a_new(1)<<", "<<a_new(2)<<", "<<a_new(3)<<endl;
1542 cout<<" CalculateCirclePar end ~~~ "<<endl;
1550 vector<HoughHit*>::iterator
iter = hitPntList.begin();
1551 for(;
iter!=hitPntList.end();
iter++)
1553 int useOld = (*iter)->getUse();
1554 if(use==-1&&useOld>0)
continue;
1555 (*iter)->setUse(use);
1567 vector<double>::iterator it0_res = m_vecHitResidual.begin();
1568 vector<HoughHit*>::iterator iter0 = m_vecHitPnt.begin();
1569 vector<HoughHit*>::iterator
iter = m_vecHitPnt.begin();
1570 for(;
iter!=m_vecHitPnt.end();
iter++)
1572 int useOld = (*iter)->getUse();
1573 if(use==-1&&useOld>0)
continue;
1574 (*iter)->setUse(use);
1579 vector<double>::iterator it_res = it0_res+(
iter-iter0);
1581 (*iter)->addResid(*it_res);
1591 int NtotLayer = m_setLayer.size();
1593 std::set<int>::iterator it = m_setLayer.begin();
1594 int lastLayer = *it;
1596 int nCgemLayer(0), N_ODC1_nearStereo(0), N_ODC2_nearStereo(0);
1597 for(; it!=m_setLayer.end(); it++)
1599 if((*it)<3) nCgemLayer++;
1600 else if((*it)>=16&&(*it)<=19) N_ODC1_nearStereo++;
1601 else if((*it)>=36&&(*it)<=39) N_ODC2_nearStereo++;
1605 enoughVHits = nCgemLayer>=2
1606 || (nCgemLayer>0 && (N_ODC1_nearStereo>=2 || N_ODC2_nearStereo>=2))
1608 || ( (N_ODC1_nearStereo>=2 || N_ODC2_nearStereo>=2) && NtotLayer>=8) ;
1611 double r_gap = 1.0*m_nGap/(m_nGap+NtotLayer);
1612 bool smallGap = r_gap<0.5;
1615 if(!enoughVHits) cout<<
"not enough V hits, ";
1616 if(!smallGap) cout<<
"gap too large 50%, "<<endl;
1617 if(m_unused<3) cout<<
"N_unused = "<<m_unused<<
"<3"<<endl;
1618 if(m_untried<3) cout<<
"N_untried = "<<m_untried<<
"<3"<<endl;
1623 good=good && m_unused>=2;
1624 good=good && m_untried>=2;
1625 good=good && (nCgemLayer==3||NtotLayer>3);
1626 good=good && enoughVHits;
1627 good=good && smallGap;
1935 vector<HoughHit*>::iterator it = m_vecHitPnt.begin();
1936 for(; it!=m_vecHitPnt.end(); it++)
1938 (*it)->dropTrkID(m_trkID);
1944 vector<HoughHit*>::iterator it0 = m_vecHitPnt.begin();
1945 vector<HoughHit*>::iterator result = find(m_vecHitPnt.begin(), m_vecHitPnt.end(), aHitPnt);
1946 if(result!=m_vecHitPnt.end()) {
1948 m_vecHitPnt.erase(result);
1949 vector<double>::iterator itRes = m_vecHitResidual.begin()+(result-it0);
1950 if(itRes!=m_vecHitResidual.end()) {
1952 m_vecHitResidual.erase(itRes);
1959 vector<HoughHit*>::iterator it0 = m_vecStereoHitPnt.begin();
1960 vector<HoughHit*>::iterator result = find(m_vecStereoHitPnt.begin(), m_vecStereoHitPnt.end(), aHitPnt);
1961 if(result!=m_vecStereoHitPnt.end()) {
1963 m_vecStereoHitPnt.erase(result);
1970 vector<HoughHit*> hitPnt_cgem[3];
1971 HoughHit* hitPnt_cgem_keep[3]={NULL, NULL, NULL};
1972 double res_cgem_keep[3]={999., 999., 999.};
1973 HoughHit* hitPnt_cgem_resMin[3]={NULL, NULL, NULL};
1974 double res_cgem_min[3]={999., 999., 999.};
1975 vector<HoughHit*>::iterator iter0 = m_vecHitPnt.begin();
1976 vector<HoughHit*>::iterator
iter = m_vecHitPnt.begin();
1977 vector<double>::iterator itRes = m_vecHitResidual.begin();
1978 for(;
iter!=m_vecHitPnt.end();
iter++)
1980 int iLayer = (*iter)->getLayer();
1982 hitPnt_cgem[iLayer].push_back(*
iter);
1983 int idx =
iter-iter0;
1984 double res = m_vecHitResidual[idx];
1985 vector<double> vecRes = (*iter)->getVecResid();
1986 int nTrk = vecRes.size();
1987 if(nTrk==1&&fabs(res)<fabs(res_cgem_keep[iLayer])) {
1988 res_cgem_keep[iLayer] = res;
1989 hitPnt_cgem_keep[iLayer] = *
iter;
1991 if(fabs(res)<fabs(res_cgem_min[iLayer])) {
1992 res_cgem_min[iLayer] = res;
1993 hitPnt_cgem_resMin[iLayer] = *
iter;
1998 for(
int iLayer=0; iLayer<3; iLayer++)
2000 int nHits = hitPnt_cgem[iLayer].size();
2004 if(hitPnt_cgem_keep[iLayer]!=NULL) hitToKeep = hitPnt_cgem_keep[iLayer];
2005 else hitToKeep = hitPnt_cgem_resMin[iLayer];
2011 for(
int iHit=0; iHit<nHits; iHit++)
2013 HoughHit* aHoughHit = hitPnt_cgem[iLayer][iHit];
2014 if(aHoughHit==hitToKeep)
continue;
2022 int used = aHoughHit->
getUse();
2023 if(used==0) m_untried--;
2024 if(used==0||used==-1) m_unused--;
2035 vector<HoughHit*> hitPnt_cgem[3];
2036 HoughHit* hitPnt_cgem_resMin[3]={NULL, NULL, NULL};
2037 double res_cgem_min[3]={999., 999., 999.};
2038 vector<HoughHit*>::iterator
iter = m_vecStereoHitPnt.begin();
2039 for(;
iter!=m_vecStereoHitPnt.end();
iter++)
2041 int iLayer = (*iter)->getLayer();
2043 hitPnt_cgem[iLayer].push_back(*
iter);
2044 HepPoint3D positionOntrack(999,999,999), positionOnDetector(999,999,999);
2045 double res = (*iter)->residual(
this, positionOntrack, positionOnDetector);
2046 if(fabs(res)<fabs(res_cgem_min[iLayer])) {
2047 res_cgem_min[iLayer] = res;
2048 hitPnt_cgem_resMin[iLayer] = *
iter;
2052 for(
int iLayer=0; iLayer<3; iLayer++)
2054 int nHits = hitPnt_cgem[iLayer].size();
2057 HoughHit* hitToKeep = hitPnt_cgem_resMin[iLayer];
2058 for(
int iHit=0; iHit<nHits; iHit++)
2060 HoughHit* aHoughHit = hitPnt_cgem[iLayer][iHit];
2061 if(aHoughHit==hitToKeep)
continue;
2073 vector<HoughHit*>::iterator
iter = m_vecHitPnt.begin();
2074 for(;
iter!=m_vecHitPnt.end();
iter++)
2076 vector<double> vecRes = (*iter)->getVecResid();
2077 int nTrk = vecRes.size();
2078 if(nTrk>1) nShared++;
2085 bool printFlag(
false);
2087 m_vecStereoHitPnt.clear();
2088 for(vector<HoughHit*>::iterator hitIt = hitList.begin(); hitIt != hitList.end(); hitIt++){
2132 int layer = (*hitIt)->getLayer();
2133 int wire = (*hitIt)->getWire();
2134 if((*hitIt)->getFlag() == 0)
continue;
2142 double Pt = fabs(
pt());
2143 double cut[2] = {0};
2145 if(
m_cut[0][layer+3]!=NULL)
cut[0]=
m_cut[0][layer+3]->Eval(Pt);
2146 if(
m_cut[1][layer+3]!=NULL)
cut[1]=
m_cut[1][layer+3]->Eval(Pt);
2151 HepPoint3D positionOntrack(999,999,999), positionOnDetector(999,999,999);
2152 double res = (*hitIt)->residual(
this, positionOntrack, positionOnDetector);
2153 if(
judgeCharge(positionOntrack.x(),positionOntrack.y())*charge<0)
continue;
2154 bool isNewHot(
true);
2155 for(vector<HoughHit*>::iterator hotIt = m_vecStereoHitPnt.begin(); hotIt != m_vecStereoHitPnt.end(); hotIt++){
2156 if((*hitIt)->getHitID() == (*hotIt)->getHitID()){
2166 if(printFlag)(*hitIt)->print();
2167 if(printFlag)cout<<
"res:"<<setw(12)<<res;
2168 if(printFlag)cout<<
" win: "<<setw(5)<<
cut[0]<<
" ~ "<<setw(5)<<
cut[1];
2169 double ext=cutFactor;
2170 if(ext*
cut[0]<res&&res<ext*
cut[1]){
2171 if((*hitIt)->getLayer()>=maxLayer)
2176 m_vecStereoHitPnt.push_back(*hitIt);
2177 if(printFlag)cout<<
" selected!";
2203 if(printFlag)cout<<endl;
2216 vector<HoughHit*> hotList;
2220 for(vector<HoughHit*>::iterator hotIt = axialHot.begin(); hotIt != axialHot.end(); hotIt++){
2221 if(type==1)
continue;
2223 hotList.push_back(*hotIt);
2225 for(vector<HoughHit*>::iterator hotIt = stereoHot.begin(); hotIt != stereoHot.end(); hotIt++){
2226 if(type>0)hotList.push_back(*hotIt);
2274 double omega = m_kappa/fabs(
alpha());
2289 TrkRecoTrk* trkRecoTrk = circlefactory.
makeTrack(circleTrk, chisum, *trkContextEv, bunchT0);
2290 bool permitFlips =
true;
2291 bool lPickHits =
true;
2292 circlefactory.
setFlipAndDrop(*trkRecoTrk, permitFlips, lPickHits);
2296 vector<MdcHit*> mdcHitVector;
2297 mdcHitVector.clear();
2298 vector<CgemHitOnTrack*> cgemHitVector;
2299 cgemHitVector.clear();
2301 for(vector<HoughHit*>::iterator
iter = m_vecHitPnt.begin();
iter != m_vecHitPnt.end();
iter++){
2303 if(hitIt->
getFlag()!=0)
continue;
2308 mdcHitVector.push_back(mdcHit);
2323 cgemHitVector.push_back(cgemHitOnTrack);
2349 while(m_phi0>2.*
M_PI) m_phi0-=2.*
M_PI;
2350 while(m_phi0<0.) m_phi0+=2.*
M_PI;
2363 m_chi2 = fitResult->
chisq();
2364 if(debug) cout<<
"chi2 obtained "<<m_chi2<<endl;
2383 if(!(recoHot->
isActive()))
continue;
2394 if(stat==0)
continue;
2399 if(debug) cout<<nHotKept<<
" hits kept after TrkFitter"<<endl;
2401 for(vector<MdcHit*>::iterator
iter = mdcHitVector.begin();
iter != mdcHitVector.end();
iter++){
2404 for(vector<CgemHitOnTrack*>::iterator
iter = cgemHitVector.begin();
iter != cgemHitVector.end();
iter++){
2416 m_vecMdcDigiPnt.clear();
2417 m_vecCgemClusterPnt.clear();
2418 for(vector<HoughHit*>::iterator hotIt = m_vecHitPnt.begin(); hotIt != m_vecHitPnt.end(); hotIt++)
2420 if((*hotIt)->getFlag()!=0)
continue;
2423 const MdcDigi* aMdcDigi = (*hotIt)->getDigi();
2424 m_vecMdcDigiPnt.push_back(aMdcDigi);
2428 const RecCgemCluster* aRecCgemCluster = (*hotIt)->getCgemCluster();
2429 m_vecCgemClusterPnt.push_back(aRecCgemCluster);
2437 HepSymMatrix
Ea(5,0);
2440 double phi0_Hough = (m_rho>0)? m_angle:m_angle+
M_PI;
2441 phi0_Hough = (m_charge<0)? phi0_Hough:phi0_Hough+
M_PI;
2442 if(phi0_Hough>2*
M_PI)phi0_Hough-=2*
M_PI;
2443 if(phi0_Hough<0) phi0_Hough+=2*
M_PI;
2444 double kappa_Hough = fabs(
m_alpha*m_rho)*m_charge;
2455 if(debug==1) cout<<
"circle ini_helix: "<<ini_helix.
a()<<endl;
2457 fitter->
setDChits(m_vecMdcDigiPnt, bunchT0);
2459 if(debug==1) cout<<
"finish DotsHelixFitter setting"<<endl;
2460 if(debug==5) cout<<
"initial pt = "<<ini_helix.
pt()<<endl;
2468 vector<double> a_Taubin;
2472 if(a_Taubin[3]<0)
break;
2480 double time_Taubin_0 = timer.
elapsed();
2481 if(debug==5) cout<<setw(45)<<
"circle Taubin fit without initial helix:"<<
" pt = "<<1.0/a_Taubin[2]<<
", dr="<<a_Taubin[0]<<
", phi0="<<a_Taubin[1]<<
", nHitKept="<<fitter->
getNActiveHits()<<
", chi2="<<fitter->
getChi2()<<
", converged="<<a_Taubin[3]<<
", time="<<time_Taubin_0<<
" ms"<<endl;
2483 double chi2_0=fitter->
getChi2();
2488 vector<double> a_Taubin_2;
2494 if(a_Taubin[3]<0)
break;
2502 double time_Taubin_1 = timer.
elapsed();
2503 if(debug==5) cout<<setw(45)<<
"circle Taubin fit with Hough initial helix:"<<
" pt = "<<1.0/a_Taubin_2[2]<<
", dr="<<a_Taubin_2[0]<<
", phi0="<<a_Taubin_2[1]<<
", nHitKept="<<fitter->
getNActiveHits()<<
", chi2="<<fitter->
getChi2()<<
", converged="<<a_Taubin_2[3]<<
", time="<<time_Taubin_1<<
" ms"<<endl;
2507 vector<double> a_Taubin_better=a_Taubin_2;
2508 if(a_Taubin_2[3]>0) {
2512 if(chi2_0<fitter->
getChi2()) {
2513 a_Taubin_better=a_Taubin;
2520 a_Taubin_better=a_Taubin;
2525 else if(a_Taubin[3]>0) {
2526 a_Taubin_better=a_Taubin;
2529 a(1)=a_Taubin_better[0];
2530 a(2)=a_Taubin_better[1];
2531 a(3)=a_Taubin_better[2];
2533 if(debug==5)cout<<
"better Taubin "<<selTaubin<<endl;
2550 HepVector a_new = fitter->
getHelix();
2551 cout<<
"circle helix from DotsHelixFitter: "<<a_new<<
", chi2="<<fitter->
getChi2()<<
" "<<fitter->
getNActiveHits()<<
" hits kept"<<endl;
2557 if(debug==1) cout<<
"too large chi2, drop one worst DC hit!"<<endl;
2563 if(debug==1) cout<<
"DotsHelixFitter failed, fitFlag = "<<fitFlag<<endl;
2567 HepVector a_new = fitter->
getHelix();
2571 double time_LS = timer.
elapsed();
2573 cout<<setw(45)<<
"circle fit with Hough initial helix:"<<
" pt = "<<1.0/a_new[2]<<
", dr="<<a_new[0]<<
", phi0="<<a_new[1]<<
", nHitKept="<<fitter->
getNActiveHits()<<
", chi2="<<fitter->
getChi2()<<
", time="<<time_LS<<
" ms";
2574 if(fitFlag!=0) cout<<
" (failed) ";
2590 HepVector a_new = fitter->
getHelix();
2591 cout<<
"circle helix from DotsHelixFitter: "<<a_new<<
", chi2="<<fitter->
getChi2()<<
" "<<fitter->
getNActiveHits()<<
" hits kept"<<endl;
2597 if(debug==1) cout<<
"too large chi2, drop one worst DC hit!"<<endl;
2603 if(debug==1) cout<<
"DotsHelixFitter failed, fitFlag = "<<fitFlag<<endl;
2607 HepVector a_new_2 = fitter->
getHelix();
2609 double time_LS_2 = timer.
elapsed();
2611 cout<<setw(45)<<
"circle fit with Taubin initial helix:"<<
" pt = "<<1.0/a_new_2[2]<<
", dr="<<a_new_2[0]<<
", phi0="<<a_new_2[1]<<
", nHitKept="<<fitter->
getNActiveHits()<<
", chi2="<<fitter->
getChi2()<<
", time="<<time_LS_2<<
" ms";
2612 if(fitFlag!=0) cout<<
" (failed) ";
2626 double omega = m_kappa/fabs(
alpha());
2628 double tanl = m_tanl;
2635 m_trkRecoTrk = helixfactory.
makeTrack(helixTrk, chisum, *trkContextEv, bunchT0);
2636 bool permitFlips =
true;
2637 bool lPickHits =
true;
2638 helixfactory.
setFlipAndDrop(*m_trkRecoTrk, permitFlips, lPickHits);
2643 for(vector<HoughHit*>::iterator hitIt = hot.begin(); hitIt != hot.end();hitIt++){
2647 bool sameHit(
false);
2654 if((*hitIt)->getLayer()==layerId && (*hitIt)->getWire()==wireId)sameHit =
true;
2657 if(sameHit)
continue;
2662 vector<MdcHit*>::iterator imdcHit = mdcHitCol.begin();
2663 for(;imdcHit != mdcHitCol.end();imdcHit++){
2664 if((*imdcHit)->mdcId() == (*hitIt)->getDigi()->identify()){
2670 mdcHit->
setCalibSvc((*hitIt)->getMdcCalibFunSvc());
2675 HepPoint3D midPoint = (*hitIt)->getHitPosition();
2684 bool sameHit(
false);
2691 if((*hitIt)->getCgemCluster()->getclusterid()==clusterid)sameHit =
true;
2694 if(sameHit)
continue;
2697 m_cgemHitVector.push_back(cgemHitOnTrack);
2698 if((*hitIt)->getFlag()==0)
continue;
2741 while(m_phi0>2*
M_PI)m_phi0-=2*
M_PI;
2742 while(m_phi0<0)m_phi0+=2*
M_PI;
2747 m_chi2 = fitResult->
chisq();
2768 double omega = m_kappa/fabs(
alpha());
2770 double tanl = m_tanl;
2779 bool permitFlips =
true;
2780 bool lPickHits =
true;
2781 helixfactory.
setFlipAndDrop(*trkRecoTrk, permitFlips, lPickHits);
2786 vector<MdcHit*> mdcHitVector;
2787 mdcHitVector.clear();
2788 vector<CgemHitOnTrack*> cgemHitVector;
2789 cgemHitVector.clear();
2791 for(vector<HoughHit*>::iterator hitIt = hot.begin(); hitIt != hot.end();hitIt++){
2795 if((*hitIt)->getFlag()!=0&&(*hitIt)->getLayer()>maxLayer)
continue;
2796 bool sameHit(
false);
2803 if((*hitIt)->getLayer()==layerId && (*hitIt)->getWire()==wireId)sameHit =
true;
2806 if(sameHit)
continue;
2808 const MdcDigi* mdcDigi = (*hitIt)->getDigi();
2810 mdcHitVector.push_back(mdcHit);
2812 mdcHit->
setCalibSvc((*hitIt)->getMdcCalibFunSvc());
2817 HepPoint3D midPoint = (*hitIt)->getHitPosition();
2826 bool sameHit(
false);
2833 if((*hitIt)->getCgemCluster()->getclusterid()==clusterid)sameHit =
true;
2836 if(sameHit)
continue;
2839 cgemHitVector.push_back(cgemHitOnTrack);
2840 if((*hitIt)->getFlag()==0)
continue;
2882 while(m_phi0>2*
M_PI)m_phi0-=2*
M_PI;
2883 while(m_phi0<0)m_phi0+=2*
M_PI;
2885 m_chi2 = fitResult->
chisq();
2894 if(!(recoHot->
isActive()))
continue;
2905 if(stat==0)
continue;
2911 cout<<
"chi2= "<<m_chi2
2912 <<
", "<<nHotKept<<
" hits kept after TrkFitter"
2913 <<
", helix from TrkFitter = "<<
a()
2916 for(vector<MdcHit*>::iterator
iter = mdcHitVector.begin();
iter != mdcHitVector.end();
iter++){
2919 for(vector<CgemHitOnTrack*>::iterator
iter = cgemHitVector.begin();
iter != cgemHitVector.end();
iter++){
2932 m_vecMdcDigiPnt.clear();
2933 m_vecCgemClusterPnt.clear();
2934 for(vector<HoughHit*>::iterator hotIt = m_vecHitPnt.begin(); hotIt != m_vecHitPnt.end(); hotIt++)
2939 const MdcDigi* aMdcDigi = (*hotIt)->getDigi();
2940 m_vecMdcDigiPnt.push_back(aMdcDigi);
2944 const RecCgemCluster* aRecCgemCluster = (*hotIt)->getCgemCluster();
2945 m_vecCgemClusterPnt.push_back(aRecCgemCluster);
2948 for(vector<HoughHit*>::iterator hotIt = m_vecStereoHitPnt.begin(); hotIt != m_vecStereoHitPnt.end(); hotIt++)
2952 const MdcDigi* aMdcDigi = (*hotIt)->getDigi();
2953 m_vecMdcDigiPnt.push_back(aMdcDigi);
2957 const RecCgemCluster* aRecCgemCluster = (*hotIt)->getCgemCluster();
2958 if(aRecCgemCluster->
getflag()==2)
2961 RecCgemClusterCol::iterator cgemClusterIter = recCgemClusterColBegin+clusterId;
2963 if(clusterId==(*cgemClusterIter)->getclusterid())
2964 m_vecCgemClusterPnt.push_back(*cgemClusterIter);
2974 HepSymMatrix aEa(5,0);
2981 if(debug) cout<<
"fitHelix ini_helix: "<<ini_helix.
a()<<endl;
2983 fitter->
setDChits(m_vecMdcDigiPnt, bunchT0);
2985 int nMdcDigi = m_vecMdcDigiPnt.size();
2995 HepVector a_new = fitter->
getHelix();
2997 cout<<
"helix from DotsHelixFitter: "<<a_new<<
", chi2="<<fitter->
getChi2()<<
" "<<fitter->
getNActiveHits()<<
" hits kept"<<endl;
2998 cout<<
"nMdcDigi = "<<nMdcDigi<<endl;
3005 if(debug) cout<<
"too large chi2, drop the worst DC hit!"<<endl;
3010 if(debug) cout<<
"stop droping hit! "<<endl;
3016 if(debug) cout<<
"DotsHelixFitter failed, fitFlag = "<<fitFlag<<endl;
3053 for(vector<CgemHitOnTrack*>::iterator
iter = m_cgemHitVector.begin();
iter != m_cgemHitVector.end();
iter++){
3061 for(
int i=0; i<3; i++) m_XVhits_cgem[i].clear();
**********INTEGER nmxhep !maximum number of particles DOUBLE PRECISION vhep INTEGER jdahep COMMON hepevt $ !serial number $ !number of particles $ !status code $ !particle ident KF $ !parent particles $ !childreen particles $ !four momentum
HepGeom::Point3D< double > HepPoint3D
bool sortByLayer(HoughHit *hit1, HoughHit *hit2)
bool innerLayer(HoughHit hit1, HoughHit hit2)
*********Class see also m_nmax DOUBLE PRECISION m_MasPhot DOUBLE PRECISION m_phsu DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_r2 DOUBLE PRECISION m_WtMass INTEGER m_nmax INTEGER m_Nevgen INTEGER m_IsFSR INTEGER m_MarTot *COMMON c_KarFin $ !Output file $ !Event serial number $ !alpha QED at Thomson limit $ !minimum energy at CMS for remooval $ !infrared cut
NTuple::Array< double > m_dz
NTuple::Item< double > m_phi0
NTuple::Item< double > m_chi2
NTuple::Item< double > m_tanl
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
float elapsed(void) const
void setCgemCalibFunSvc(const CgemCalibFunSvc *svc)
const RecCgemCluster * baseHit() const
void setCgemGeomSvc(const CgemGeomSvc *svc)
void setInitialHelix(KalmanFit::Helix aHelix)
void setDChits(vector< const MdcDigi * > aVecMdcDigi, double T0)
void setCgemClusters(vector< const RecCgemCluster * > aVecCgemCluster)
int deactiveHits(double chi_cut=10, int nMax=1, int layerMin=0, int layerMax=50)
const HepSymMatrix & getEa()
vector< double > calculateCirclePar_Taubin(bool useIniHelix=false, int layerMin=-1, int layerMax=50, bool useExtraPoints=false, int debug=0)
double flightLength(HepPoint3D &hit) const
const HepPoint3D & center(void) const
returns position of helix center(z = 0.);
void set(const HepPoint3D &pivot, const HepVector &a, const HepSymMatrix &Ea)
sets helix pivot position, parameters, and error matrix.
Helix & operator=(const Helix &)
Copy operator.
double IntersectCylinder(double r) const
const HepSymMatrix & Ea(void) const
returns error matrix.
HepPoint3D x(double dPhi=0.) const
returns position after rotating angle dPhi in phi direction.
double bFieldZ(void) const
double flightArc(HepPoint3D &hit) const
double radius(void) const
returns radious of helix.
double dr(void) const
returns an element of parameters.
const HepVector & a(void) const
returns helix parameters.
const HepPoint3D & pivot(void) const
returns pivot position.
MdcGeomSvc * getMdcGeomSvc() const
const MdcDigi * getDigi() const
const RecCgemCluster * getCgemCluster() const
double getDriftDist() const
MdcCalibFunSvc * getMdcCalibFunSvc() const
HepPoint3D getHitPosition() const
HitType getHitType() const
CgemGeomSvc * getCgemGeomSvc() const
CgemCalibFunSvc * getCgemCalibFunSvc() const
void setResidual(double residual)
void updateCirclePar(double dr, double phi0, double kappa)
int dropRedundentCgemXHits()
void printHot(int type=2)
int findXHot(vector< HoughHit * > &hitList, int charge)
static int m_useCgemInGlobalFit
double driftDistRes(HoughHit *hit)
void sortHot(vector< HoughHit * > &hotList)
int findVHot(vector< HoughHit * > &hitList, int charge, int maxLayer, double cutFactor=1.0)
void markUsedHot(vector< HoughHit * > &hitPntList, int use=1)
void dropHitPnt(HoughHit *aHitPnt)
TrkErrCode fitCircle(const MdcDetector *mdcDetector, TrkContextEv *trkContextEv, double bunchT0)
int judgeHalf(HoughHit *hit)
vector< HoughHit * > getVecHitPnt()
void update(double angle, double rho)
HoughTrack & operator=(const HoughTrack &other)
vector< HoughHit * > getVecStereoHitPnt()
int judgeCharge(HoughHit *hit)
vector< HoughHit * > getHotList(int type=2)
void dropVHitPnt(HoughHit *aHitPnt)
static TGraph * m_cut[2][43]
int calculateZ_S(HoughHit *hit)
void dropRedundentCgemVHits()
int fitHelix(DotsHelixFitter *fitter, double bunchT0, RecCgemClusterCol::iterator recCgemClusterColBegin, double averageChi2cut=25)
const HepVector & a(void) const
returns helix parameters.
HepPoint3D Forward(void) const
HepPoint3D Backward(void) const
const MdcGeoWire *const Wire(unsigned id)
void setCalibSvc(const MdcCalibFunSvc *calibSvc)
unsigned layernumber() const
unsigned wirenumber() const
void setCountPropTime(const bool count)
static int layer(const Identifier &id)
Values of different levels (failure returns 0)
static int wire(const Identifier &id)
const MdcHit * mdcHit() const
int getclusterid(void) const
int getclusterflagb(void) const
int getclusterflage(void) const
virtual double chisq() const =0
virtual TrkExchangePar helix(double fltL) const =0
hot_iterator begin() const
TrkHitOnTrk * appendHot(const TrkHitOnTrk *theHot)
const TrkFit * fitResult() const
bool setFlipAndDrop(TrkRecoTrk &, bool allowFlips, bool allowDrops) const
TrkRecoTrk * makeTrack(const TrkExchangePar &helix, const double chi2, const TrkContext &, double trackT0) const