60 bool multi =
m_tools->multiTrack();
69 if (tsos) dtsos.push_back(tsos);
75 tsos =
m_elements[m].trackStateOnSurface(
false,
false,multi,0,ctx);
76 if (tsos) dtsos.push_back(tsos);
82 if (tsos) dtsos.push_back(tsos);
107 bool multi =
m_tools->multiTrack();
115 if (tsos) dtsos.push_back(tsos);
121 tsos =
m_elements[m].trackStateOnSurface(
true,
false,multi,0,ctx);
122 if (tsos) dtsos.push_back(tsos);
128 if (tsos) dtsos.push_back(tsos);
160 if (tsos) dtsos.push_back(tsos);
164 if (tsos) dtsos.push_back(tsos);
166 int lastClusterElement = 0;
170 lastClusterElement = j;
174 if( lastClusterElement==0 || lastClusterElement==i )
return dtsos;
176 for (++i; i<std::min(lastClusterElement,
m_lastElement); ++i) {
180 tsos =
m_elements[m].trackSimpleStateOnSurface(
false,
false,0);
181 if (tsos) dtsos.push_back(tsos);
187 if (tsos) dtsos.push_back(tsos);
206 if (tsos) dtsos.push_back(tsos);
212 tsos =
m_elements[m].trackSimpleStateOnSurface(
true,
false,0);
213 if (tsos) dtsos.push_back(tsos);
219 if (tsos) dtsos.push_back(tsos);
253 if (tsos) dtsos.push_back(tsos);
257 if (tsos) dtsos.push_back(tsos);
259 int lastClusterElement = 0;
263 lastClusterElement = j;
267 if( lastClusterElement==0 || lastClusterElement==i )
return dtsos;
269 for (++i; i<std::min(lastClusterElement,
m_lastElement); ++i) {
273 tsos =
m_elements[m].trackSimpleStateOnSurface(
false,
false,0);
274 if (tsos) dtsos.push_back(tsos);
280 if (tsos) dtsos.push_back(tsos);
291 return std::make_unique<Trk::FitQuality>(xi2, (
m_ndf - 5));
299(std::multimap<const Trk::PrepRawData*,const Trk::Track*>&
map)
const
303 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator
304 ti,t[100],te =
map.end();
312 t[n] =
map.find(prd[n]);
313 if (t[n]==te)
return true;
317 t[n] =
map.find(prd[n]);
318 if (t[n]==te)
return true;
325 for (
int i=0; i!=n; ++i) {
327 for (ti=t[i]; ti!=te; ++ti) {
328 if ( (*ti).first != prd[i] )
break;
329 int ncl = (*ti).second->measurementsOnTrack()->size();
330 if (ncl > nclmax) nclmax = ncl;
332 if (nclt > nclmax)
return true;
341std::ostream& InDet::operator <<
354 out<<
"Trajectory does not exist"<<std::endl;
358 out<<
"Trajectory is wrong"<<std::endl;
362 out<<
"|--------------------------------------------------------------------------------------------------------|"
368 out << std::format(
"| Has{:>3} ({:>3}) elements and {:>2} ({:>2}) clusters and {:>2} weighted clusters and quality = {:>12.5g} |\n",
375 out << std::format(
"| Has number of holes before, inside, after and gap= {:>2}{:>2}{:>2}{:>3} |\n",
383 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
385 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 |"
387 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
394 std::string DET =
"D ";
396 std::string DE =
" ";
400 if (D->
isBarrel()) DET =
"Pb";
else DET =
"Pe";
402 else if (D->
isSCT()) {
403 if (D->
isBarrel()) DET =
"Sb";
else DET =
"Se";
409 out << std::format(
"|{:>3}",
static_cast<unsigned>(i));
420 out << std::format(
"|{}|{:>1}{:>2}|{:>5}|{}|{}|", S0, DE, DET, c,
S1,
S2);
436 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
437 fa = atan2(gp.y(),gp.x());
438 pt =
m_elements[m].parametersUF().momentum().perp();
444 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
445 fa = atan2(gp.y(),gp.x());
446 pt =
m_elements[m].parametersPF().momentum().perp();
455 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
456 fa = atan2(gp.y(),gp.x());
457 pt =
m_elements[m].parametersUB().momentum().perp();
463 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
464 fa = atan2(gp.y(),gp.x());
465 pt =
m_elements[m].parametersPB().momentum().perp();
476 bool QA =
m_tools->updatorTool()->combineStates(
S1,
S2,SM);
481 ra = sqrt(gp.x()*gp.x()+gp.y()*gp.y());
482 fa = atan2(gp.y(),gp.x());
483 pt = SM.momentum().perp();
487 out << std::format(
"{:>9.4g}|{:>9.4g}|{:>10.4g}|{:>9.4g}|{:>1}|{:>2}|{:>2}|{:>2}|{:>1}|{:>1}|{:>1}|{:>1}|{:>1}|{:>1}|{:>9.4g}|",
492 static_cast<unsigned>(
m_elements[m].noiseModel()),
494 static_cast<unsigned>(
m_elements[m].nlinksF()),
495 static_cast<unsigned>(
m_elements[m].nlinksB()),
496 static_cast<unsigned>(
m_elements[m].status()),
498 static_cast<unsigned>(
m_elements[m].nholesF()),
499 static_cast<unsigned>(
m_elements[m].dholesF()),
500 static_cast<unsigned>(
m_elements[m].nholesB()),
501 static_cast<unsigned>(
m_elements[m].dholesB()),
521 out << std::format(
"{:>9.4g}|",
m_elements[m].step());
525 out<<
"|---|--|---|-----|-|-|---------|---------|---------|---------|----------|---------|-|--|--|--|-|-|-|-|-|-|---------|"
536 std::vector<const InDet::SiCluster*> & Cl,
537 std::vector<const InDet::SiDetElementBoundaryLink_xk*>& DE,
538 const EventContext & ctx)
542 InDet::SiClusterCollection::const_iterator sib,sie;
543 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator
r=DE.begin(),
re=DE.end();
544 std::vector<const InDet::SiCluster*>
::iterator s=Cl.begin();
548 if(!
m_elements[n].firstTrajectorElement(
Tp,ctx))
return 0.;
550 for(++
r;
r!=
re; ++
r) {
554 if(
m_elements[n].xi2F() > Xi2cut )
return 0.;
556 return m_elements[n].parametersUF().momentum().perp();
567 const InDet::PixelClusterContainer* PIXc ,
568 const InDet::SCT_ClusterContainer* SCTc ,
570 std::vector<const InDet::SiCluster*> & lSiCluster,
571 std::vector<const InDet::SiDetElementBoundaryLink_xk*>& DE ,
573 const EventContext & ctx )
590 double Xi2cut = 2.*
m_tools->xi2max();
593 double Rdead = 142.5;
597 bool initDeadMaterial = not(
m_tools->isITkGeometry() and
m_tools->useFastTracking());
601 std::vector<const InDet::SiCluster*>::iterator iter_cluster;
602 if (lSiCluster.size() < 2)
return false;
604 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink,endBoundaryLinks=DE.end();
611 for (iter_boundaryLink=DE.begin(); iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
621 if (detectorElement->
isPixel()) {
627 if(not initDeadMaterial) {
629 double R = pla->
center().perp();
631 initDeadMaterial =
true;
642 InDet::PixelClusterCollection::const_iterator iter_PixelClusterColl, iter_PixelClusterCollEnd;
644 const InDet::PixelClusterCollection *clustersOnElement = (*PIXc).indexFindPtr(
id);
646 if (clustersOnElement!=
nullptr && clustersOnElement->begin()!=clustersOnElement->end()) {
649 iter_PixelClusterColl = clustersOnElement->begin();
650 iter_PixelClusterCollEnd = clustersOnElement->end();
654 for (iter_cluster=lSiCluster.begin(); iter_cluster!=lSiCluster.end(); ++iter_cluster) {
656 if ((*iter_cluster)->detectorElement()==detectorElement) {
670 theCluster=(*iter_cluster);
672 iter_cluster=lSiCluster.erase(iter_cluster);
681 bool valid_set =
m_elements[
m_nElements].set(1,(*iter_boundaryLink),iter_PixelClusterColl,iter_PixelClusterCollEnd,theCluster,ctx);
682 if(
m_tools->isITkGeometry() && !valid_set)
return false;
689 bool valid_set =
m_elements[
m_nElements].set(0,(*iter_boundaryLink),iter_PixelClusterColl,iter_PixelClusterCollEnd,theCluster,ctx);
690 if(
m_tools->isITkGeometry() && !valid_set)
return false;
707 InDet::SCT_ClusterCollection::const_iterator iter_stripClusterColl, iter_StripClusterCollEnd;
709 const InDet::SCT_ClusterCollection *clustersOnElement = (*SCTc).indexFindPtr(
id);
712 if (clustersOnElement!=
nullptr && clustersOnElement->begin()!=clustersOnElement->end()) {
714 iter_stripClusterColl = clustersOnElement->begin();
715 iter_StripClusterCollEnd = clustersOnElement->end();
718 for (iter_cluster=lSiCluster.begin(); iter_cluster!=lSiCluster.end(); ++iter_cluster) {
719 if ((*iter_cluster)->detectorElement()==detectorElement) {
734 theCluster=(*iter_cluster);
735 iter_cluster=lSiCluster.erase(iter_cluster);
742 bool valid_set =
m_elements[
m_nElements].set(1,(*iter_boundaryLink),iter_stripClusterColl,iter_StripClusterCollEnd,theCluster,ctx);
743 if(
m_tools->isITkGeometry() && !valid_set)
return false;
750 bool valid_set =
m_elements[
m_nElements].set(0,(*iter_boundaryLink),iter_stripClusterColl,iter_StripClusterCollEnd,theCluster,ctx);
751 if(
m_tools->isITkGeometry() && !valid_set)
return false;
768 if (!
m_elements[up].firstTrajectorElement(
Tp, ctx))
return false;
774 else if (theCluster) {
788 if (
m_tools->isITkGeometry())
return false;
793 if (ndfwrong > 3)
return false;
829 if (!lSiCluster.empty()) {
836 if (not
m_tools->isITkGeometry() && ndfwrong &&
m_ndfcut < 6)
return false;
886 if (!
m_tools->bremNoise())
return true;
900(
const InDet::PixelClusterContainer* PIXc ,
901 const InDet::SCT_ClusterContainer* SCTc ,
903 std::vector<const InDet::SiDetElementBoundaryLink_xk*> & DE ,
904 std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT ,
905 std::vector<const InDet::SiCluster*> & lSiCluster,
906 const EventContext& ctx)
911 std::multimap<double,const InDet::SiCluster*> xi2cluster;
913 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink,endBoundaryLinks=DE.end();
914 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator t, te =PT.end();
919 for (iter_boundaryLink=DE.begin(); iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
924 bool sct = detectorElement->
isSCT();
927 InDet::PixelClusterCollection::const_iterator sib, sie;
928 const InDet::PixelClusterCollection *w = (*PIXc).indexFindPtr(
id);
930 if (w!=
nullptr && w->begin()!=w->end()) {
936 if (!
m_elements[0].ForwardPropagationForClusterSeach(
m_nElements,
Tp,(*iter_boundaryLink),sib,sie,ctx))
return false;
938 InDet::SCT_ClusterCollection::const_iterator sib, sie;
939 const InDet::SCT_ClusterCollection *w = (*SCTc).indexFindPtr(
id);
941 if (w!=
nullptr && w->begin()!=w->end()) {
947 if (!
m_elements[0].ForwardPropagationForClusterSeach(
m_nElements,
Tp,(*iter_boundaryLink),sib,sie,ctx))
return false;
950 for (
int i=0; i!=
m_elements[0].nlinksF(); ++i) {
955 t = PT.find(
m_elements[0].linkF(i).cluster());
956 if (t!=te && (*t).second->measurementsOnTrack()->size() >= 10)
continue;
961 if (
x <= xi2Cut) xi2cluster.insert(std::make_pair(
x,
m_elements[0].linkF(i).cluster()));
967 if (xi2cluster.size() < 3)
return false;
969 std::multimap<double,const InDet::SiCluster*>::iterator xc = xi2cluster.begin(), xce = xi2cluster.end();
971 for (; xc!=xce; ++xc) {
972 lSiCluster.push_back((*xc).second);
973 (*xc).second->detectorElement()->isSCT() ?
m_ndf+=1 :
m_ndf+=2;
974 if (
m_ndf >= ndfCut )
break;
985(
const InDet::PixelClusterContainer* PIXc ,
986 const InDet::SCT_ClusterContainer* SCTc ,
987 const std::vector<Amg::Vector3D> & Gp ,
988 std::vector<const InDet::SiDetElementBoundaryLink_xk*> & DE ,
989 std::multimap<const Trk::PrepRawData*,const Trk::Track*>& PT ,
990 std::vector<const InDet::SiCluster*> & lSiCluster)
992 std::vector<const InDet::SiDetElementBoundaryLink_xk*>::iterator iter_boundaryLink = DE.begin(), endBoundaryLinks = DE.end();
993 std::vector<Amg::Vector3D>::const_iterator g,gb = Gp.begin(), ge = Gp.end();
994 InDet::PixelClusterCollection::const_iterator pib, pie;
995 InDet::SCT_ClusterCollection::const_iterator sib, sie;
996 std::multimap<const Trk::PrepRawData*,const Trk::Track*>::const_iterator t, te =PT.end();
1000 double pv[ 5]={0.,0.,0.,0.,0.};
1001 double cv[15]={ .1 ,
1005 0. , 0., 0., 0.,.00001};
1007 double xi2Cut = 10.;
1010 for (; iter_boundaryLink!=endBoundaryLinks; ++iter_boundaryLink) {
1019 double Ax[3] = {tr(0,0),tr(1,0),tr(2,0)};
1020 double Ay[3] = {tr(0,1),tr(1,1),tr(2,1)};
1021 double Az[3] = {tr(0,2),tr(1,2),tr(2,2)};
1022 double x0 = tr(0,3);
1023 double y0 = tr(1,3);
1024 double z0 = tr(2,3);
1025 double zcut = .001 ;
1027 bool sct = d->isSCT();
1029 const InDet::PixelClusterCollection *w = (*PIXc).indexFindPtr(
id);
1030 if (w!=
nullptr && w->begin()!=w->end()) {
1038 const InDet::SCT_ClusterCollection *w = (*SCTc).indexFindPtr(
id);
1039 if (w!=
nullptr && w->begin()!=w->end()) {
1047 for (g=gb; g!=ge; ++g) {
1049 double dx = (*g).x()-x0;
1050 double dy = (*g).y()-y0;
1051 double dz = (*g).z()-z0;
1052 double z = dx*Az[0]+dy*Az[1]+dz*Az[2];
1053 if (std::abs(
z) > zcut)
continue;
1055 pv[0] = dx*Ax[0]+dy*Ax[1]+dz*Ax[2];
1056 pv[1] = dx*Ay[0]+dy*Ay[1]+dz*Ay[2];
1060 Tp.setParametersWithCovariance(su,pv,cv);
1062 if (!sct)
m_elements[0].CloseClusterSeach(
Tp, (*iter_boundaryLink), pib, pie);
1063 else m_elements[0].CloseClusterSeach(
Tp, (*iter_boundaryLink), sib, sie);
1065 if (!c ||
m_elements[0].xi2F() > xi2Cut)
continue;
1068 if (t!=te && (*t).second->measurementsOnTrack()->size() >= 10)
continue;
1071 lSiCluster.push_back(c);
1096 int maxholes =
m_tools->maxholes ();
1097 int maxdholes =
m_tools->maxdholes();
1177 if (L==0)
return true;
1188 int maxholes =
m_tools->maxholes ();
1189 int maxdholes =
m_tools->maxdholes();
1190 const int itm = itmax-1 ;
1202 double Xi2best = 0. ;
1206 for (; it!=itmax; ++it) {
1209 int lastElementWithExpHit =
F;
1211 for (--
F;
F>=0; --
F) {
1219 lastElementWithExpHit =
F;
1222 else if (Ef.
inside() < 0) {
1223 lastElementWithExpHit =
F;
1228 if (Ef.
ndist() > ndcut ||
1230 (nm == nclbest && Ef.
xi2totalB() > Xi2best) )
break;
1247 if ( (q > qbest) || (q==qbest && X < Xi2best ) ) {
1258 if (fl==0 && nd < ndcut) ndcut = nd;
1260 if (fl!=0 || nd > 0 || np < 3) {
1263 for (
int i=l; i!=L; ++i) {
1268 MPbest[++lbest] = i;
1271 XI2B[nbest] = Ei.
xi2B();
1273 TE[nbest++] = lbest;
1274 ndfbest += Ei.
ndf();
1283 for (
int i=fl; i!=L; ++i) {
1287 if (Ei.
inside() <= 0 && ++lbest >=0 ) {
1288 MPbest[lbest] = lbest;
1291 XI2B[nbest] = Ei.
xi2B();
1293 TE[nbest++] = lbest;
1294 ndfbest += Ei.
ndf();
1323 for (; l < L; ++l) {
1329 if (Ei.
dist() < -2. && Ei.
ndist() > ndcut-1 )
continue;
1332 if (nm < nclbest || (nm == nclbest && Xn > Xi2best))
continue;
1340 if (it == itmax) --it;
1341 if (!nbest)
return true;
1362 if (itbest==it)
return true;
1364 for (
int n = L-1-dn; n>=0; --n) {
1368 for (; m>=0; --m)
if (TE[m]==n)
break;
1371 if (
m_tools->useFastTracking()) {
1376 if (--nbest==0)
break;
1392 const double pi2 = 2.*
M_PI;
1417 for (++extensionStartIndex; extensionStartIndex<=
m_lastElement; ++extensionStartIndex) {
1429 for (++extensionStartIndex; extensionStartIndex<=
m_lastElement; ++extensionStartIndex) {
1451 --extensionStartIndex;
1455 if ( extensionStartIndex== lastElementOnTraj)
return true;
1468 int maxholes =
m_tools->maxholes () ;
1469 int maxdholes =
m_tools->maxdholes() ;
1471 const int itm = itmax-1 ;
1492 int lbest = extensionStartIndex ;
1494 int index_currentElement = extensionStartIndex ;
1496 int M = extensionStartIndex ;
1498 MP [M] = extensionStartIndex ;
1499 double Xi2best = 0. ;
1501 const double dfmax = 2.2 ;
1510 for (; iteration!=itmax; ++iteration) {
1512 int lastElementWithSeenHit = index_currentElement;
1513 int lastElementWithExpHit = index_currentElement;
1515 int index_previousElement = index_currentElement;
1517 int mLastCluster = M;
1519 int Cm = nclbest-lastElementOnTraj;
1521 bool haveHole =
false;
1525 for (++index_currentElement; index_currentElement!=
m_nElements; ++index_currentElement) {
1536 if (!currentElement.
isBarrel() || index_previousElement!=index_currentElement-1)
break;
1541 int index_auxElement = index_currentElement;
1542 for (; index_auxElement!=
m_nElements; ++index_auxElement) {
1551 index_currentElement = index_auxElement-1;
1560 index_previousElement = index_currentElement;
1565 MP[++M] = index_currentElement;
1568 if (currentElement.
cluster()) {
1569 if (not
m_tools->isITkGeometry()) {
1571 double df = std::abs(currentElement.
parametersUF().parameters()[2]-f0);
1573 if (df >
pi) df = pi2-df;
1575 if (df > dfmax)
break;
1578 lastElementWithExpHit = index_currentElement;
1579 lastElementWithSeenHit = index_currentElement;
1585 else if (currentElement.
inside() < 0 ) {
1586 lastElementWithExpHit=index_currentElement;
1588 if (currentElement.
nholesF() > maxholes || currentElement.
dholesF() > maxdholes)
break;
1591 if (not
m_tools->isITkGeometry()) {
1593 double df = std::abs(currentElement.
parametersPF().parameters()[2]-f0);
1594 if (df >
pi) df = pi2-df;
1595 if (df > dfmax )
break;
1600 else if (not
m_tools->isITkGeometry()) {
1602 double df = std::abs(currentElement.
parametersPF().parameters()[2]-f0);
1603 if (df >
pi) df = pi2-df;
1604 if (df > dfmax)
break;
1608 int nm = currentElement.
nclustersF()-index_currentElement;
1610 if ( currentElement.
ndist() > ndcut
1612 || (nm == Cm && currentElement.
xi2totalF() > Xi2best)
1632 int lastElementProcessed = index_currentElement;
1634 if (lastElementProcessed==
m_nElements) --lastElementProcessed;
1644 if ( (q > qbest) || (q==qbest && X < Xi2best ) ) {
1659 lbest = extensionStartIndex ;
1666 if (lastElementProcessed==lastElementOnTraj && nd < ndcut) ndcut = nd;
1669 for (
int j=extensionStartIndex+1; j<=mLastCluster; ++j) {
1676 MPbest[++lbest] = i;
1681 TE[nbest++] = lbest;
1683 ndfbest += Ei.
ndf();
1691 if ( (nclbest >= 14 && !haveHole) || (lastElementProcessed==lastElementOnTraj && ndbest == 0))
break;
1695 index_currentElement = -1;
1699 int nb = lastElementOnTraj-nclbest-1;
1710 for (
int j=mLastCluster; j!=extensionStartIndex; --j) {
1727 if (Ei.
dist() < -2. && Ei.
ndist() > ndcut-1)
continue;
1734 if (nm < 0 || (nm == 0 && Xn > Xi2best))
continue;
1736 index_currentElement = i;
1743 if (index_currentElement < 0 )
break;
1750 if (iteration == itmax) --iteration;
1753 if (!nbest)
return true;
1771 if (itbest==iteration)
return true;
1776 index_currentElement = -1;
1779 for (
int n = extensionStartIndex+1; n!=
m_nElements; ++n) {
1785 for (; m!=nbest; ++m)
if (TE[m]==n)
break;
1791 if (index_currentElement<0) {
1793 index_currentElement=n;
1805 if (++mb == nbest)
break;
1812 if (index_currentElement<0) {
1813 index_currentElement = n;
1829 if (index_currentElement < 0 ||
m_lastElement == index_currentElement) {
1835 for (++index_currentElement; index_currentElement<=
m_lastElement; ++index_currentElement) {
1849(std::vector<const InDet::SiCluster*>& Cl)
const
1951 if ( step == 0.) step = stp ;
1952 else if ((step*stp) < 0.) {order =
false;
break;}
1955 if (order)
return true;
1960 double rad = gp.x()*gp.x()+gp.y()*gp.y();
1969 double R = gp.x()*gp.x()+gp.y()*gp.y();
1970 if (R < rad)
return false;
2009 for (; n<=LA; ++n) {
2018 nc =
true; so =
false;
2030 for (; n<=LA; ++n) {
2039 nc =
true; so =
false;
2051 for (; n<= LA; ++n) {
2063 for (; m>=n ; --m) {
2204 for (i=0; i!=
m_ntos; ++i) {
2207 if (tsos) dtsos.push_back(tsos);
2221 if (s<=1)
return 0.;
2222 return m_elements[n].parametersUB().momentum().perp();
2232 bool prevIsSctHole =
false;
2241 bool isPix = theElement.
ndf() == 2;
2242 bool isSCTHole=
false;
2247 prevIsSctHole =
false;
2253 std::unique_ptr<const Trk::TrackParameters> pars {theElement.
trackParameters(
true,0)};
2255 switch (boundaryStatus){
2288 if (isSCTHole && prevIsSctHole){
2289 prevIsSctHole =
false;
2293 prevIsSctHole = isSCTHole;
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)
std::array< SiTrajectoryElement_xk, 300 > m_elements
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
Trk::TrackStates convertToTrackStateOnSurface(const EventContext &ctx)
std::ostream & dump(std::ostream &out) const
bool forwardFilter(const EventContext &)
Trk::TrackStates convertToTrackStateOnSurfaceWithNewDirection(const EventContext &ctx)
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)
std::array< int, 300 > m_elementsMap
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.