9#include <boost/io/ios_state.hpp>
61 bool multi =
m_tools->multiTrack();
70 if (tsos) dtsos.push_back(tsos);
76 tsos =
m_elements[m].trackStateOnSurface(
false,
false,multi,0);
77 if (tsos) dtsos.push_back(tsos);
83 if (tsos) dtsos.push_back(tsos);
108 bool multi =
m_tools->multiTrack();
116 if (tsos) dtsos.push_back(tsos);
122 tsos =
m_elements[m].trackStateOnSurface(
true,
false,multi,0);
123 if (tsos) dtsos.push_back(tsos);
129 if (tsos) dtsos.push_back(tsos);
161 if (tsos) dtsos.push_back(tsos);
165 if (tsos) dtsos.push_back(tsos);
167 int lastClusterElement = 0;
171 lastClusterElement = j;
175 if( lastClusterElement==0 || lastClusterElement==i )
return dtsos;
177 for (++i; i<std::min(lastClusterElement,
m_lastElement); ++i) {
181 tsos =
m_elements[m].trackSimpleStateOnSurface(
false,
false,0);
182 if (tsos) dtsos.push_back(tsos);
188 if (tsos) dtsos.push_back(tsos);
207 if (tsos) dtsos.push_back(tsos);
213 tsos =
m_elements[m].trackSimpleStateOnSurface(
true,
false,0);
214 if (tsos) dtsos.push_back(tsos);
220 if (tsos) dtsos.push_back(tsos);
254 if (tsos) dtsos.push_back(tsos);
258 if (tsos) dtsos.push_back(tsos);
260 int lastClusterElement = 0;
264 lastClusterElement = j;
268 if( lastClusterElement==0 || lastClusterElement==i )
return dtsos;
270 for (++i; i<std::min(lastClusterElement,
m_lastElement); ++i) {
274 tsos =
m_elements[m].trackSimpleStateOnSurface(
false,
false,0);
275 if (tsos) dtsos.push_back(tsos);
281 if (tsos) dtsos.push_back(tsos);
292 return std::make_unique<Trk::FitQuality>(xi2, (
m_ndf - 5));
300(std::multimap<const Trk::PrepRawData*,const Trk::Track*>&
map)
const
304 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
305 ti,t[100],te =
map.end();
313 t[n] =
map.find(prd[n]);
314 if (t[n]==te)
return true;
318 t[n] =
map.find(prd[n]);
319 if (t[n]==te)
return true;
326 for (
int i=0; i!=n; ++i) {
328 for (ti=t[i]; ti!=te; ++ti) {
329 if ( (*ti).first != prd[i] )
break;
330 int ncl = (*ti).second->measurementsOnTrack()->size();
331 if (ncl > nclmax) nclmax = ncl;
333 if (nclt > nclmax)
return true;
342std::ostream& InDet::operator <<
354 boost::io::ios_all_saver ias(out);
357 out<<
"Trajectory does not exist"<<std::endl; ias.restore();
361 out<<
"Trajectory is wrong"<<std::endl; ias.restore();
365 out<<
"|--------------------------------------------------------------------------------------------------------|"
378 <<std::setw(2)<<
m_ndf<<
" weighted clusters and quality = "<<std::setw(12)<<std::setprecision(5)<<
quality()
381 out<<
"| Has number of holes before, inside, after and gap= "
390 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
392 out<<
"| # |SS| D| Ncl |C|O| Xi2F | Xi2B | Az.Angle| Radius | pT(GeV) | dZ/dR |N|In|Lf|Lb|S|D|H|G|H|G| Step |"
394 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
401 std::string DET =
"D ";
403 std::string DE =
" ";
407 if (D->
isBarrel()) DET =
"Pb";
else DET =
"Pe";
409 else if (D->
isSCT()) {
410 if (D->
isBarrel()) DET =
"Sb";
else DET =
"Se";
416 out<<
"|"<<std::setw(3)<<unsigned(i);
430 <<std::setw(2)<<DET <<
"|"
431 <<std::setw(5)<<c <<
"|"
437 out<<std::setw(9)<<std::setprecision(3)<<
m_elements[m].xi2F()<<
"|";
438 out<<std::setw(9)<<std::setprecision(3)<<
m_elements[m].xi2B()<<
"|";
450 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
451 fa = atan2(gp.y(),gp.x());
452 pt =
m_elements[m].parametersUF().momentum().perp();
458 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
459 fa = atan2(gp.y(),gp.x());
460 pt =
m_elements[m].parametersPF().momentum().perp();
469 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
470 fa = atan2(gp.y(),gp.x());
471 pt =
m_elements[m].parametersUB().momentum().perp();
477 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
478 fa = atan2(gp.y(),gp.x());
479 pt =
m_elements[m].parametersPB().momentum().perp();
490 bool QA =
m_tools->updatorTool()->combineStates(
S1,
S2,SM);
495 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
496 fa = atan2(gp.y(),gp.x());
497 pt = SM.momentum().perp();
501 out<<std::setw( 9)<<std::setprecision(4)<<fa <<
"|";
502 out<<std::setw( 9)<<std::setprecision(4)<<ra <<
"|";
503 out<<std::setw(10)<<std::setprecision(4)<<pt*.001<<
"|";
504 out<<std::setw( 9)<<std::setprecision(4)<<tz <<
"|";
505 out<<std::setw(1)<<unsigned(
m_elements[m].noiseModel())<<
"|";
506 out<<std::setw(2)<<
m_elements[m].inside()<<
"|";
507 out<<std::setw(2)<<unsigned(
m_elements[m].nlinksF())<<
"|";
508 out<<std::setw(2)<<unsigned(
m_elements[m].nlinksB())<<
"|";
509 out<<std::setw(1)<<unsigned(
m_elements[m].status())<<
"|";
511 out<<std::setw(1)<<unsigned(
m_elements[m].nholesF())<<
"|";
512 out<<std::setw(1)<<unsigned(
m_elements[m].dholesF())<<
"|";
513 out<<std::setw(1)<<unsigned(
m_elements[m].nholesB())<<
"|";
514 out<<std::setw(1)<<unsigned(
m_elements[m].dholesB())<<
"|";
515 out<<std::setw(9)<<std::setprecision(4)<<
m_elements[m].step()<<
"|";
534 out<<std::setw(9)<<std::setprecision(4)<<
m_elements[m].step();
539 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
551 std::vector<const InDet::SiCluster*> & Cl,
552 std::vector<const InDet::SiDetElementBoundaryLink_xk*>& DE,
553 const EventContext & ctx)
557 InDet::SiClusterCollection::const_iterator sib,sie;
558 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator
r=DE.begin(),
re=DE.end();
559 std::vector<const InDet::SiCluster*>
::iterator s=Cl.begin();
563 if(!
m_elements[n].firstTrajectorElement(
Tp,ctx))
return 0.;
565 for(++
r;
r!=
re; ++
r) {
569 if(
m_elements[n].xi2F() > Xi2cut )
return 0.;
571 return m_elements[n].parametersUF().momentum().perp();
582 const InDet::PixelClusterContainer* PIXc ,
583 const InDet::SCT_ClusterContainer* SCTc ,
585 std::vector<const InDet::SiCluster*> & lSiCluster,
586 std::vector<const InDet::SiDetElementBoundaryLink_xk*>& DE ,
588 const EventContext & ctx )
605 double Xi2cut = 2.*
m_tools->xi2max();
608 double Rdead = 142.5;
612 bool initDeadMaterial = not(
m_tools->isITkGeometry() and
m_tools->useFastTracking());
616 std::vector<const InDet::SiCluster*>::iterator iter_cluster;
617 if (lSiCluster.size() < 2)
return false;
619 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink,endBoundaryLinks=DE.end();
626 for (iter_boundaryLink=DE.begin(); iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
636 if (detectorElement->
isPixel()) {
642 if(not initDeadMaterial) {
644 double R = pla->
center().perp();
646 initDeadMaterial =
true;
657 InDet::PixelClusterCollection::const_iterator iter_PixelClusterColl, iter_PixelClusterCollEnd;
659 const InDet::PixelClusterCollection *clustersOnElement = (*PIXc).indexFindPtr(
id);
661 if (clustersOnElement!=
nullptr && clustersOnElement->begin()!=clustersOnElement->end()) {
664 iter_PixelClusterColl = clustersOnElement->begin();
665 iter_PixelClusterCollEnd = clustersOnElement->end();
669 for (iter_cluster=lSiCluster.begin(); iter_cluster!=lSiCluster.end(); ++iter_cluster) {
671 if ((*iter_cluster)->detectorElement()==detectorElement) {
685 theCluster=(*iter_cluster);
687 iter_cluster=lSiCluster.erase(iter_cluster);
696 bool valid_set =
m_elements[
m_nElements].set(1,(*iter_boundaryLink),iter_PixelClusterColl,iter_PixelClusterCollEnd,theCluster,ctx);
697 if(
m_tools->isITkGeometry() && !valid_set)
return false;
704 bool valid_set =
m_elements[
m_nElements].set(0,(*iter_boundaryLink),iter_PixelClusterColl,iter_PixelClusterCollEnd,theCluster,ctx);
705 if(
m_tools->isITkGeometry() && !valid_set)
return false;
722 InDet::SCT_ClusterCollection::const_iterator iter_stripClusterColl, iter_StripClusterCollEnd;
724 const InDet::SCT_ClusterCollection *clustersOnElement = (*SCTc).indexFindPtr(
id);
727 if (clustersOnElement!=
nullptr && clustersOnElement->begin()!=clustersOnElement->end()) {
729 iter_stripClusterColl = clustersOnElement->begin();
730 iter_StripClusterCollEnd = clustersOnElement->end();
733 for (iter_cluster=lSiCluster.begin(); iter_cluster!=lSiCluster.end(); ++iter_cluster) {
734 if ((*iter_cluster)->detectorElement()==detectorElement) {
749 theCluster=(*iter_cluster);
750 iter_cluster=lSiCluster.erase(iter_cluster);
757 bool valid_set =
m_elements[
m_nElements].set(1,(*iter_boundaryLink),iter_stripClusterColl,iter_StripClusterCollEnd,theCluster,ctx);
758 if(
m_tools->isITkGeometry() && !valid_set)
return false;
765 bool valid_set =
m_elements[
m_nElements].set(0,(*iter_boundaryLink),iter_stripClusterColl,iter_StripClusterCollEnd,theCluster,ctx);
766 if(
m_tools->isITkGeometry() && !valid_set)
return false;
783 if (!
m_elements[up].firstTrajectorElement(
Tp, ctx))
return false;
789 else if (theCluster) {
803 if (
m_tools->isITkGeometry())
return false;
808 if (ndfwrong > 3)
return false;
844 if (!lSiCluster.empty()) {
851 if (not
m_tools->isITkGeometry() && ndfwrong &&
m_ndfcut < 6)
return false;
901 if (!
m_tools->bremNoise())
return true;
915(
const InDet::PixelClusterContainer* PIXc ,
916 const InDet::SCT_ClusterContainer* SCTc ,
918 std::vector<const InDet::SiDetElementBoundaryLink_xk*> & DE ,
919 std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT ,
920 std::vector<const InDet::SiCluster*> & lSiCluster,
921 const EventContext& ctx)
926 std::multimap<double,const InDet::SiCluster*> xi2cluster;
928 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink,endBoundaryLinks=DE.end();
929 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator t, te =PT.end();
934 for (iter_boundaryLink=DE.begin(); iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
939 bool sct = detectorElement->
isSCT();
942 InDet::PixelClusterCollection::const_iterator sib, sie;
943 const InDet::PixelClusterCollection *w = (*PIXc).indexFindPtr(
id);
945 if (w!=
nullptr && w->begin()!=w->end()) {
951 if (!
m_elements[0].ForwardPropagationForClusterSeach(
m_nElements,
Tp,(*iter_boundaryLink),sib,sie,ctx))
return false;
953 InDet::SCT_ClusterCollection::const_iterator sib, sie;
954 const InDet::SCT_ClusterCollection *w = (*SCTc).indexFindPtr(
id);
956 if (w!=
nullptr && w->begin()!=w->end()) {
962 if (!
m_elements[0].ForwardPropagationForClusterSeach(
m_nElements,
Tp,(*iter_boundaryLink),sib,sie,ctx))
return false;
965 for (
int i=0; i!=
m_elements[0].nlinksF(); ++i) {
970 t = PT.find(
m_elements[0].linkF(i).cluster());
971 if (t!=te && (*t).second->measurementsOnTrack()->size() >= 10)
continue;
976 if (
x <= xi2Cut) xi2cluster.insert(std::make_pair(
x,
m_elements[0].linkF(i).cluster()));
982 if (xi2cluster.size() < 3)
return false;
984 std::multimap<double,const InDet::SiCluster*>::iterator xc = xi2cluster.begin(), xce = xi2cluster.end();
986 for (; xc!=xce; ++xc) {
987 lSiCluster.push_back((*xc).second);
988 (*xc).second->detectorElement()->isSCT() ?
m_ndf+=1 :
m_ndf+=2;
989 if (
m_ndf >= ndfCut )
break;
1000(
const InDet::PixelClusterContainer* PIXc ,
1001 const InDet::SCT_ClusterContainer* SCTc ,
1002 const std::vector<Amg::Vector3D> & Gp ,
1003 std::vector<const InDet::SiDetElementBoundaryLink_xk*> & DE ,
1004 std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT ,
1005 std::vector<const InDet::SiCluster*> & lSiCluster)
1007 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink = DE.begin(), endBoundaryLinks = DE.end();
1008 std::vector<Amg::Vector3D>::const_iterator g,gb = Gp.begin(), ge = Gp.end();
1009 InDet::PixelClusterCollection::const_iterator pib, pie;
1010 InDet::SCT_ClusterCollection::const_iterator sib, sie;
1011 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator t, te =PT.end();
1015 double pv[ 5]={0.,0.,0.,0.,0.};
1016 double cv[15]={ .1 ,
1020 0. , 0., 0., 0.,.00001};
1022 double xi2Cut = 10.;
1025 for (; iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
1034 double Ax[3] = {tr(0,0),tr(1,0),tr(2,0)};
1035 double Ay[3] = {tr(0,1),tr(1,1),tr(2,1)};
1036 double Az[3] = {tr(0,2),tr(1,2),tr(2,2)};
1037 double x0 = tr(0,3);
1038 double y0 = tr(1,3);
1039 double z0 = tr(2,3);
1040 double zcut = .001 ;
1042 bool sct = d->isSCT();
1044 const InDet::PixelClusterCollection *w = (*PIXc).indexFindPtr(
id);
1045 if (w!=
nullptr && w->begin()!=w->end()) {
1053 const InDet::SCT_ClusterCollection *w = (*SCTc).indexFindPtr(
id);
1054 if (w!=
nullptr && w->begin()!=w->end()) {
1062 for (g=gb; g!=ge; ++g) {
1064 double dx = (*g).x()-x0;
1065 double dy = (*g).y()-y0;
1066 double dz = (*g).z()-z0;
1067 double z = dx*Az[0]+dy*Az[1]+dz*Az[2];
1068 if (std::abs(
z) > zcut)
continue;
1070 pv[0] = dx*Ax[0]+dy*Ax[1]+dz*Ax[2];
1071 pv[1] = dx*Ay[0]+dy*Ay[1]+dz*Ay[2];
1073 Tp.setParametersWithCovariance(su,pv,cv);
1075 if (!sct)
m_elements[0].CloseClusterSeach(
Tp, (*iter_boundaryLink), pib, pie);
1076 else m_elements[0].CloseClusterSeach(
Tp, (*iter_boundaryLink), sib, sie);
1078 if (!c ||
m_elements[0].xi2F() > xi2Cut)
continue;
1081 if (t!=te && (*t).second->measurementsOnTrack()->size() >= 10)
continue;
1084 lSiCluster.push_back(c);
1109 int maxholes =
m_tools->maxholes ();
1110 int maxdholes =
m_tools->maxdholes();
1190 if (L==0)
return true;
1199 int maxholes =
m_tools->maxholes ();
1200 int maxdholes =
m_tools->maxdholes();
1201 const int itm = itmax-1 ;
1213 double Xi2best = 0. ;
1217 for (; it!=itmax; ++it) {
1220 int lastElementWithExpHit =
F;
1222 for (--
F;
F>=0; --
F) {
1230 lastElementWithExpHit =
F;
1233 else if (Ef.
inside() < 0) {
1234 lastElementWithExpHit =
F;
1239 if (Ef.
ndist() > ndcut ||
1241 (nm == nclbest && Ef.
xi2totalB() > Xi2best) )
break;
1258 if ( (q > qbest) || (q==qbest && X < Xi2best ) ) {
1269 if (fl==0 && nd < ndcut) ndcut = nd;
1271 if (fl!=0 || nd > 0 || np < 3) {
1274 for (
int i=l; i!=L; ++i) {
1279 MPbest[++lbest] = i;
1282 XI2B[nbest] = Ei.
xi2B();
1284 TE[nbest++] = lbest;
1285 ndfbest += Ei.
ndf();
1294 for (
int i=fl; i!=L; ++i) {
1298 if (Ei.
inside() <= 0 && ++lbest >=0 ) {
1299 MPbest[lbest] = lbest;
1302 XI2B[nbest] = Ei.
xi2B();
1304 TE[nbest++] = lbest;
1305 ndfbest += Ei.
ndf();
1334 for (; l < L; ++l) {
1340 if (Ei.
dist() < -2. && Ei.
ndist() > ndcut-1 )
continue;
1343 if (nm < nclbest || (nm == nclbest && Xn > Xi2best))
continue;
1351 if (it == itmax) --it;
1352 if (!nbest)
return true;
1373 if (itbest==it)
return true;
1375 for (
int n = L-1-dn; n>=0; --n) {
1379 for (; m>=0; --m)
if (TE[m]==n)
break;
1382 if (
m_tools->useFastTracking()) {
1387 if (--nbest==0)
break;
1403 const double pi2 = 2.*
M_PI;
1428 for (++extensionStartIndex; extensionStartIndex<=
m_lastElement; ++extensionStartIndex) {
1440 for (++extensionStartIndex; extensionStartIndex<=
m_lastElement; ++extensionStartIndex) {
1462 --extensionStartIndex;
1466 if ( extensionStartIndex== lastElementOnTraj)
return true;
1479 int maxholes =
m_tools->maxholes () ;
1480 int maxdholes =
m_tools->maxdholes() ;
1482 const int itm = itmax-1 ;
1503 int lbest = extensionStartIndex ;
1505 int index_currentElement = extensionStartIndex ;
1507 int M = extensionStartIndex ;
1509 MP [M] = extensionStartIndex ;
1510 double Xi2best = 0. ;
1512 const double dfmax = 2.2 ;
1521 for (; iteration!=itmax; ++iteration) {
1523 int lastElementWithSeenHit = index_currentElement;
1524 int lastElementWithExpHit = index_currentElement;
1526 int index_previousElement = index_currentElement;
1528 int mLastCluster = M;
1530 int Cm = nclbest-lastElementOnTraj;
1532 bool haveHole =
false;
1536 for (++index_currentElement; index_currentElement!=
m_nElements; ++index_currentElement) {
1547 if (!currentElement.
isBarrel() || index_previousElement!=index_currentElement-1)
break;
1552 int index_auxElement = index_currentElement;
1553 for (; index_auxElement!=
m_nElements; ++index_auxElement) {
1562 index_currentElement = index_auxElement-1;
1571 index_previousElement = index_currentElement;
1576 MP[++M] = index_currentElement;
1579 if (currentElement.
cluster()) {
1580 if (not
m_tools->isITkGeometry()) {
1582 double df = std::abs(currentElement.
parametersUF().parameters()[2]-f0);
1584 if (df >
pi) df = pi2-df;
1586 if (df > dfmax)
break;
1589 lastElementWithExpHit = index_currentElement;
1590 lastElementWithSeenHit = index_currentElement;
1596 else if (currentElement.
inside() < 0 ) {
1597 lastElementWithExpHit=index_currentElement;
1599 if (currentElement.
nholesF() > maxholes || currentElement.
dholesF() > maxdholes)
break;
1602 if (not
m_tools->isITkGeometry()) {
1604 double df = std::abs(currentElement.
parametersPF().parameters()[2]-f0);
1605 if (df >
pi) df = pi2-df;
1606 if (df > dfmax )
break;
1611 else if (not
m_tools->isITkGeometry()) {
1613 double df = std::abs(currentElement.
parametersPF().parameters()[2]-f0);
1614 if (df >
pi) df = pi2-df;
1615 if (df > dfmax)
break;
1619 int nm = currentElement.
nclustersF()-index_currentElement;
1621 if ( currentElement.
ndist() > ndcut
1623 || (nm == Cm && currentElement.
xi2totalF() > Xi2best)
1643 int lastElementProcessed = index_currentElement;
1645 if (lastElementProcessed==
m_nElements) --lastElementProcessed;
1655 if ( (q > qbest) || (q==qbest && X < Xi2best ) ) {
1670 lbest = extensionStartIndex ;
1677 if (lastElementProcessed==lastElementOnTraj && nd < ndcut) ndcut = nd;
1680 for (
int j=extensionStartIndex+1; j<=mLastCluster; ++j) {
1687 MPbest[++lbest] = i;
1692 TE[nbest++] = lbest;
1694 ndfbest += Ei.
ndf();
1702 if ( (nclbest >= 14 && !haveHole) || (lastElementProcessed==lastElementOnTraj && ndbest == 0))
break;
1706 index_currentElement = -1;
1710 int nb = lastElementOnTraj-nclbest-1;
1721 for (
int j=mLastCluster; j!=extensionStartIndex; --j) {
1738 if (Ei.
dist() < -2. && Ei.
ndist() > ndcut-1)
continue;
1745 if (nm < 0 || (nm == 0 && Xn > Xi2best))
continue;
1747 index_currentElement = i;
1754 if (index_currentElement < 0 )
break;
1761 if (iteration == itmax) --iteration;
1764 if (!nbest)
return true;
1782 if (itbest==iteration)
return true;
1787 index_currentElement = -1;
1790 for (
int n = extensionStartIndex+1; n!=
m_nElements; ++n) {
1796 for (; m!=nbest; ++m)
if (TE[m]==n)
break;
1802 if (index_currentElement<0) {
1804 index_currentElement=n;
1816 if (++mb == nbest)
break;
1823 if (index_currentElement<0) {
1824 index_currentElement = n;
1840 if (index_currentElement < 0 ||
m_lastElement == index_currentElement) {
1846 for (++index_currentElement; index_currentElement<=
m_lastElement; ++index_currentElement) {
1860(std::vector<const InDet::SiCluster*>& Cl)
const
1962 if ( step == 0.) step = stp ;
1963 else if ((step*stp) < 0.) {order =
false;
break;}
1966 if (order)
return true;
1971 double rad = gp.x()*gp.x()+gp.y()*gp.y();
1980 double R = gp.x()*gp.x()+gp.y()*gp.y();
1981 if (R < rad)
return false;
2020 for (; n<=LA; ++n) {
2029 nc =
true; so =
false;
2041 for (; n<=LA; ++n) {
2050 nc =
true; so =
false;
2062 for (; n<= LA; ++n) {
2074 for (; m>=n ; --m) {
2215 for (i=0; i!=
m_ntos; ++i) {
2218 if (tsos) dtsos.push_back(tsos);
2232 if (s<=1)
return 0.;
2233 return m_elements[n].parametersUB().momentum().perp();
2243 bool prevIsSctHole =
false;
2252 bool isPix = theElement.
ndf() == 2;
2253 bool isSCTHole=
false;
2258 prevIsSctHole =
false;
2264 std::unique_ptr<const Trk::TrackParameters> pars {theElement.
trackParameters(
true,0)};
2266 switch (boundaryStatus){
2299 if (isSCTHole && prevIsSctHole){
2300 prevIsSctHole =
false;
2304 prevIsSctHole = isSCTHole;
const boost::regex re(r_e)
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.
struct TBPatternUnitContext S2
struct TBPatternUnitContext S1
Header file for AthHistogramAlgorithm.
This is a "hash" representation of an Identifier.
Class to hold geometrical description of a silicon detector element.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
Trk::Surface & surface()
Element Surface.
bool ForwardPropagationWithSearch(SiTrajectoryElement_xk &, const EventContext &)
const int & nholesB() const
const double & xi2totalF() const
const Trk::PatternTrackParameters & parametersUF() const
updated
bool isNextClusterHoleB(bool &, double &)
bool BackwardPropagationFilter(SiTrajectoryElement_xk &, const EventContext &ctx)
bool BackwardPropagationSmoother(SiTrajectoryElement_xk &, bool, const EventContext &ctx)
const double & xi2B() const
std::unique_ptr< Trk::TrackParameters > trackParameters(bool, int)
bool ForwardPropagationWithoutSearch(SiTrajectoryElement_xk &, const EventContext &)
const InDet::SiCluster * clusterOld() const
const int & dholesF() const
const Trk::PatternTrackParameters & parametersUB() const
observed
const InDet::SiCluster * cluster() const
void setCluster(const InDet::SiCluster *)
const double & xi2totalB() const
const int & dholesB() const
const int & inside() const
const InDet::SiCluster * clusterNoAdd() const
void setParametersB(Trk::PatternTrackParameters &)
bool ForwardPropagationWithoutSearchPreciseWithCorrection(SiTrajectoryElement_xk &, const EventContext &)
const int & nclustersB() const
void setClusterB(const InDet::SiCluster *, double)
bool BackwardPropagationPrecise(SiTrajectoryElement_xk &, const EventContext &ctx)
const double & dist() const
const int & nclustersF() const
const int & nholesF() const
const Trk::PatternTrackParameters & parametersPF() const
track parameters for forward filter / smoother predicted
const int & ndist() const
number of crossed without hit - dead + holes
bool isNextClusterHoleF(bool &, double &)
checks if removing this cluster from the forward propagation would result in a critical number of hol...
bool difference() const
check for a difference between forward and back propagation
const int & detstatus() const
void updateHoleSearchResult()
Helper method to determine the hole search outcome for use in the later reco.
Trk::TrackStates convertToSimpleTrackStateOnSurface(const EventContext &ctx)
PatternHoleSearchOutcome m_patternHoleOutcome
int m_nclustersNoAdd
Number of clusters on trajectory.
bool globalPositionsToClusters(const PixelClusterContainer *, const SCT_ClusterContainer *, const std::vector< Amg::Vector3D > &, std::vector< const InDet::SiDetElementBoundaryLink_xk * > &, std::multimap< const Trk::PrepRawData *, const Trk::Track * > &, std::vector< const InDet::SiCluster * > &)
double qualityOptimization()
bool backwardExtension(int, const EventContext &)
bool initialize(bool, bool, const PixelClusterContainer *, const SCT_ClusterContainer *, const Trk::TrackParameters &, std::vector< const InDet::SiCluster * > &, std::vector< const InDet::SiDetElementBoundaryLink_xk * > &, bool &, const EventContext &)
bool isNewTrack(std::multimap< const Trk::PrepRawData *, const Trk::Track * > &) const
bool forwardExtension(bool, int, const EventContext &)
Trk::TrackStates convertToNextTrackStateOnSurface()
double pTseed(const Trk::TrackParameters &, std::vector< const InDet::SiCluster * > &, std::vector< const InDet::SiDetElementBoundaryLink_xk * > &, const EventContext &)
const int & nholes() const
std::unique_ptr< const Trk::Surface > m_surfacedead
const InDet::SiTools_xk * m_tools
Trajectory elements on this trajectory.
int m_nElements
count active elements
const int & difference() const
SiTrajectoryElement_xk m_elements[300]
std::ostream & dump(std::ostream &out) const
bool forwardFilter(const EventContext &)
const int & nclustersNoAdd() const
Trk::TrackStates convertToSimpleTrackStateOnSurfaceWithNewDirection()
Trk::TrackStates convertToSimpleTrackStateOnSurfaceForDisTrackTrigger(const EventContext &ctx)
void getClusters(std::vector< const InDet::SiCluster * > &) const
int m_nclusters
index of the last element where we have
void setTools(const InDet::SiTools_xk *)
const int & nclusters() const
bool backwardSmoother(bool, const EventContext &)
bool trackParametersToClusters(const PixelClusterContainer *, const SCT_ClusterContainer *, const Trk::TrackParameters &, std::vector< const InDet::SiDetElementBoundaryLink_xk * > &, std::multimap< const Trk::PrepRawData *, const Trk::Track * > &, std::vector< const InDet::SiCluster * > &, const EventContext &ctx)
Trk::TrackStates convertToTrackStateOnSurface()
Trk::TrackStates convertToTrackStateOnSurfaceWithNewDirection()
int m_lastElement
index of the first element where we have
bool filterWithPreciseClustersError(const EventContext &)
bool jumpThroughPerigee()
std::unique_ptr< Trk::FitQuality > convertToFitQuality() const
const int & dholes() const
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
Abstract Base Class for tracking surfaces.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
represents the track state (measurement, material, fit parameters and quality) at a surface.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
DataVector< const Trk::TrackStateOnSurface > TrackStates
@ OnEdge
within the sensitive area of an active element
@ DeadElement
outside the element
@ Insensitive
close to the edge of an active element
@ Outside
with the insensitive area of an active element
@ Error
within the nominally active area of a dead element
ParametersBase< TrackParametersDim, Charged > TrackParameters
Helper struct for hole search results from the pattern recognition.