38 const double radLen = 0.036;
40 const double ptCoeff = 0.29997*1.9972/2.0;
67 for(std::vector<TrigSiSpacePointBase>::const_iterator it = vSP.begin();it != vSP.end();++it) {
68 int layerId = (*it).layer();
70 bool isPixel = (
m_settings.m_layerGeometry[layerId].m_subdet == 1);
71 bool isEndcap = (
m_settings.m_layerGeometry[layerId].m_type != 0);
73 bool updateTauRange =
false;
77 if((
m_settings.m_useTrigSeedML > 0) && isPixel) {
83 if(cluster_width >
m_settings.m_maxEC_len)
continue;
88 updateTauRange = LUT.
getValidRange(cluster_width, minTau, maxTau);
97 else if (phiIdx < 0) {
114 m_SoA.resize(vSP.size());
128 int nLayers = (int)
m_settings.m_layerGeometry.size();
137 for(
int layerI=1;layerI<nLayers;layerI++) {
140 if(S.m_nSP==0)
continue;
142 bool isSct = (
m_settings.m_layerGeometry[layerI].m_subdet == 2);
144 for(
int phiI=0;phiI<
m_settings.m_nMaxPhiSlice;phiI++) {
146 for(
auto spm : S.m_phiSlices[phiI]) {
148 float zm = spm->m_pSP->z();
149 float rm = spm->m_pSP->r();
157 for(
int layerJ=0;layerJ<nLayers;layerJ++) {
159 bool isPixel2 = (
m_settings.m_layerGeometry[layerJ].m_subdet == 1);
161 bool checkPSS = (!
m_settings.m_tripletDoPSS) && (isSct && isPixel2);
162 if(checkPSS)
continue;
164 if((!isSct) && (!isPixel2)) {
173 const std::vector<const INDEXED_SP*>& spVec =
m_pStore->m_layers[layerJ].m_phiThreeSlices.at(phiI);
175 if(spVec.empty())
continue;
193 std::vector<TrigInDetTriplet> tripletVec;
213 if(vZv.empty())
return;
218 float roiZMinus = -225;
219 float roiZPlus = 225;
221 int nLayers = (int)
m_settings.m_layerGeometry.size();
224 for(
int layerI=1;layerI<nLayers;layerI++) {
227 if(S.m_nSP==0)
continue;
229 bool isSct = (
m_settings.m_layerGeometry[layerI].m_subdet == 2);
230 bool isBarrel = (
m_settings.m_layerGeometry[layerI].m_type == 0);
232 bool checkWidth = isBarrel && (!isSct) && (
m_settings.m_useTrigSeedML > 0);
234 for(
int phiI=0;phiI<
m_settings.m_nMaxPhiSlice;phiI++) {
236 for(
auto spm : S.m_phiSlices[phiI]) {
238 float zm = spm->m_pSP->z();
239 float rm = spm->m_pSP->r();
242 float maxTau = 100.0;
249 std::vector<TrigInDetTriplet> tripletVec;
251 for(
const auto zVertex : vZv) {
261 for(
int layerJ=0;layerJ<nLayers;layerJ++) {
263 bool isPixel2 = (
m_settings.m_layerGeometry[layerJ].m_subdet == 1);
266 if(isSct && isPixel2)
continue;
267 if((!isSct) && (!isPixel2))
continue;
272 bool checkPSS = (!
m_settings.m_tripletDoPSS) && (isSct && isPixel2);
275 const std::vector<const INDEXED_SP*>& spVec =
m_pStore->m_layers[layerJ].m_phiThreeSlices.at(phiI);
277 if(spVec.empty())
continue;
301 const float deltaRefCoord = 5.0;
303 if(layerJ==layerI)
return false;
305 if(
m_pStore->m_layers[layerJ].m_nSP==0)
return false;
307 int typeI =
m_settings.m_layerGeometry[layerI].m_type;
309 float refCoordI =
m_settings.m_layerGeometry[layerI].m_refCoord;
311 int typeJ =
m_settings.m_layerGeometry[layerJ].m_type;
313 float refCoordJ =
m_settings.m_layerGeometry[layerJ].m_refCoord;
315 if((typeI!=0) && (typeJ!=0) && refCoordI*refCoordJ<0.0)
return false;
319 bool isBarrel = (typeJ == 0);
346 float maxB =
m_settings.m_layerGeometry[layerJ].m_maxBound;
347 float minB =
m_settings.m_layerGeometry[layerJ].m_minBound;
348 if(maxB<=rm)
return false;
355 float zMax = (zm*maxB-rm*refCoordJ)/(maxB-rm);
358 float zMin = (zm*minB-rm*refCoordJ)/(minB-rm);
374 if(minB == rm)
return false;
375 float zMax = (zm*minB-rm*refCoordJ)/(minB-rm);
378 float zMin = (zm*maxB-rm*refCoordJ)/(maxB-rm);
393 float zMin = (zm*maxB-rm*refCoordJ)/(maxB-rm);
396 float zMax = (zm*minB-rm*refCoordJ)/(minB-rm);
410 if(minB == rm)
return false;
411 float zMin = (zm*minB-rm*refCoordJ)/(minB-rm);
414 float zMax = (zm*maxB-rm*refCoordJ)/(maxB-rm);
426 float minBoundJ =
m_settings.m_layerGeometry[layerJ].m_minBound;
427 float maxBoundJ =
m_settings.m_layerGeometry[layerJ].m_maxBound;
428 if(maxBoundJ<m_minCoord || minBoundJ>
m_maxCoord)
return false;
436 int typeJ =
m_settings.m_layerGeometry[lJ].m_type;
437 bool isBarrel = (typeJ == 0);
438 bool isPositiveEC =
m_settings.m_layerGeometry[lJ].m_refCoord > 0;
439 float minSpCoord = (isBarrel) ? (*spVec.begin())->m_pSP->z() : (*spVec.begin())->m_pSP->r();
440 float maxSpCoord = (isBarrel) ? (*spVec.rbegin())->m_pSP->z() : (*spVec.rbegin())->m_pSP->r();
442 if(!isBarrel && isPositiveEC) {
443 float tmp = minSpCoord;minSpCoord = maxSpCoord;maxSpCoord = tmp;
451 std::vector<const INDEXED_SP*>::const_iterator it1 = spVec.end();
452 std::vector<const INDEXED_SP*>::const_iterator it2 = spVec.end();
469 if(std::distance(it1, it2)==0)
return false;
471 delta.first = it1;delta.second = it2;
479 bool isBarrel = (
m_settings.m_layerGeometry[lJ].m_type==0);
480 float refCoord =
m_settings.m_layerGeometry[lJ].m_refCoord;
483 float rm = spm->
m_pSP->
r();
484 float zm = spm->
m_pSP->
z();
486 float dZ = refCoord-zm;
487 float dR_i = isBarrel ? 1.0/(refCoord-rm) : 1.0;
491 for(std::vector<const INDEXED_SP*>::const_iterator spIt=delta.first; spIt!=delta.second; ++spIt) {
493 float zsp = (*spIt)->m_pSP->z();
494 float rsp = (*spIt)->m_pSP->r();
501 if(isPixel && !(*spIt)->m_pSP->isPixel()) {
510 if (dr<0 && checkPSS)
continue;
514 float ftau = std::fabs(tau);
515 if (ftau > 7.41)
continue;
517 if(isPixel && SeedML > 0) {
522 float z0 = zm - rm*tau;
527 float t = isBarrel ? dz*dR_i : dZ/dr;
530 if(isBarrel && (*spIt)->m_pSP->isPixel()) {
531 if(SeedML == 3 || SeedML == 4) {
532 if(ftau <
m_minTau[(*spIt)->m_idx] || ftau >
m_maxTau[(*spIt)->m_idx])
continue;
540 if(isBarrel && (*spIt)->m_pSP->isPixel()) {
541 if(SeedML == 2 || SeedML == 4) {
542 if(ftau <
m_minTau[(*spIt)->m_idx] || ftau >
m_maxTau[(*spIt)->m_idx])
continue;
559 float rm = spm->
m_pSP->
r();
560 float zm = spm->
m_pSP->
z();
564 for(std::vector<const INDEXED_SP*>::const_iterator spIt=delta.first; spIt!=delta.second; ++spIt) {
566 float rsp = (*spIt)->m_pSP->r();
567 float zsp = (*spIt)->m_pSP->z();
575 if (dr<0 && checkPSS)
continue;
579 float ftau = std::fabs(tau);
581 if (ftau > 7.41)
continue;
584 if(ftau < minTau || ftau > maxTau)
continue;
588 if((*spIt)->m_pSP->isPixel()) {
589 if(SeedML == 3 || SeedML == 4) {
590 if(ftau <
m_minTau[(*spIt)->m_idx] || ftau >
m_maxTau[(*spIt)->m_idx])
continue;
596 if((*spIt)->m_pSP->isPixel()) {
597 if(SeedML == 2 || SeedML == 4) {
598 if(ftau <
m_minTau[(*spIt)->m_idx] || ftau >
m_maxTau[(*spIt)->m_idx])
continue;
611 std::vector<TrigInDetTriplet>& output,
const IRoiDescriptor* roiDescriptor) {
613 if(nInner==0 || nOuter==0)
return;
621 int nSP = nInner + nOuter;
623 const double pS_r = pS->
r();
624 const double pS_x = pS->
x();
625 const double pS_y = pS->
y();
626 const double pS_dr = pS->
dr();
627 const double pS_dz = pS->
dz();
628 const double cosA = pS_x/pS_r;
629 const double sinA = pS_y/pS_r;
630 const double covZ = pS_dz*pS_dz;
631 const double covR = pS_dr*pS_dr;
632 const bool isPixel = pS->
isPixel();
635 for(;idx<nInner;idx++) {
640 const double dx = pSP->
x() - pS_x;
641 const double dy = pSP->
y() - pS_y;
642 const double R2inv = 1.0/(dx*dx+dy*dy);
643 const double Rinv = std::sqrt(R2inv);
644 const double xn = dx*cosA + dy*sinA;
645 const double yn =-dx*sinA + dy*cosA;
646 const double dz = pSP->
z() - pS->
z();
647 const double t = Rinv*dz;
651 m_SoA.m_r[idx] = Rinv;
652 m_SoA.m_u[idx] = xn*R2inv;
653 m_SoA.m_v[idx] = yn*R2inv;
657 const double covZP = pSP->
dz()*pSP->
dz();
658 const double covRP = pSP->
dr()*pSP->
dr();
661 m_SoA.m_tCov[idx] = R2inv*(covZ + covZP + t*t*(covR+covRP));
664 for(
int k=0;k<nOuter;k++,idx++) {
669 const double dx = pSP->
x() - pS_x;
670 const double dy = pSP->
y() - pS_y;
671 const double R2inv = 1.0/(dx*dx+dy*dy);
672 const double Rinv = std::sqrt(R2inv);
673 const double xn = dx*cosA + dy*sinA;
674 const double yn =-dx*sinA + dy*cosA;
675 const double dz = -pSP->
z() + pS->
z();
676 const double t = Rinv*dz;
680 m_SoA.m_r[idx] = Rinv;
681 m_SoA.m_u[idx] = xn*R2inv;
682 m_SoA.m_v[idx] = yn*R2inv;
686 const double covZP = pSP->
dz()*pSP->
dz();
687 const double covRP = pSP->
dr()*pSP->
dr();
690 m_SoA.m_tCov[idx] = R2inv*(covZ + covZP + t*t*(covR+covRP));
695 for(
int innIdx=0;innIdx<nInner;innIdx++) {
699 const double r_inn =
m_SoA.m_r[innIdx];
700 const double t_inn =
m_SoA.m_t[innIdx];
701 const double v_inn =
m_SoA.m_v[innIdx];
702 const double u_inn =
m_SoA.m_u[innIdx];
703 const double tCov_inn =
m_SoA.m_tCov[innIdx];
704 const double dCov =
m_CovMS*(1+t_inn*t_inn);
707 for(
int outIdx=nInner;outIdx<nSP;outIdx++) {
710 const double t_out =
m_SoA.m_t[outIdx];
714 const double dt2 = std::pow((t_inn - t_out), 2)*(1.0/9.0);
717 double covdt = (t_inn*t_out*covR + covZ);
718 covdt *= 2*r_inn*
m_SoA.m_r[outIdx];
719 covdt += tCov_inn +
m_SoA.m_tCov[outIdx];
721 if(dt2 > covdt+dCov)
continue;
725 const double du =
m_SoA.m_u[outIdx] - u_inn;
726 if(du==0.0)
continue;
727 const double A = (
m_SoA.m_v[outIdx] - v_inn)/du;
728 const double B = v_inn -
A*u_inn;
729 const double R_squ = (1 +
A*
A)/(B*B);
736 if(dt2 > covdt+frac*dCov)
continue;
740 const double fabs_d0 = std::fabs(pS_r*(B*pS_r -
A));
742 if(fabs_d0 >
m_settings.m_tripletD0Max)
continue;
744 if (
m_SoA.m_spo[outIdx-nInner]->isSCT() && isPixel) {
745 if(fabs_d0 >
m_settings.m_tripletD0_PPS_Max)
continue;
751 const double uc = 2*B*pS_r -
A;
752 const double phi0 = atan2(sinA - uc*cosA, cosA + uc*sinA);
762 const double Q= (
m_settings.m_LRTmode ? 0 : fabs_d0*fabs_d0);
763 if(output.size()>=
m_settings.m_maxTripletBufferLength) {
770 return A.Q() > B.Q();
774 std::vector<TrigInDetTriplet>::iterator it = output.begin();
775 if( Q >= (*it).Q()) {
781 output.emplace_back(*
m_SoA.m_spi[innIdx], *pS, *
m_SoA.m_spo[outIdx-nInner], Q);
787 std::vector<TrigInDetTriplet>& output,
const IRoiDescriptor* roiDescriptor) {
789 if(nInner==0 || nOuter==0)
return;
795 int nSP = nInner + nOuter;
796 output.reserve(
m_settings.m_maxTripletBufferLength);
833 for(
int k=0;k<nL;k++) {
834 values[k] = (
type[k]==0) ?
m_SoA.m_ti[iter[k]] :
m_SoA.m_to[iter[k]];
844 double min_el=1000.0;
846 for(
int k=0;k<nL;k++) {
847 if(nleft[k]==0)
continue;
849 if(values[k]<min_el) {
857 int i_min = iter[k_min];
865 m_SoA.m_sorted_sp_type[iSP] =
type[k_min];
866 m_SoA.m_sorted_sp_t[iSP] = min_el;
869 iter[k_min] +=
dirs[k_min];
871 if(nleft[k_min]==0) {
875 values[k_min] = (
type[k_min]==0) ?
m_SoA.m_ti[iter[k_min]] :
m_SoA.m_to[iter[k_min]];
878 const double pS_r = pS->
r();
879 const double pS_x = pS->
x();
880 const double pS_y = pS->
y();
882 const double pS_dr = pS->
dr();
883 const double pS_dz = pS->
dz();
884 const double cosA = pS_x/pS_r;
885 const double sinA = pS_y/pS_r;
886 const double covZ = pS_dz*pS_dz;
887 const double covR = pS_dr*pS_dr;
888 const bool isPixel = pS->
isPixel();
890 for(
int idx=0;idx<nSP;idx++) {
896 const double dx = pSP->
x() - pS_x;
897 const double dy = pSP->
y() - pS_y;
898 const double R2inv = 1.0/(dx*dx+dy*dy);
899 const double Rinv = std::sqrt(R2inv);
900 const double xn = dx*cosA + dy*sinA;
901 const double yn =-dx*sinA + dy*cosA;
902 const double dz = (
m_SoA.m_sorted_sp_type[idx]==0) ? pSP->
z() - pS->
z() : -pSP->
z() + pS->
z();
904 const double t = Rinv*dz;
908 m_SoA.m_r[idx] = Rinv;
909 m_SoA.m_u[idx] = xn*R2inv;
910 m_SoA.m_v[idx] = yn*R2inv;
914 const double covZP = pSP->
dz()*pSP->
dz();
915 const double covRP = pSP->
dr()*pSP->
dr();
918 m_SoA.m_tCov[idx] = R2inv*(covZ + covZP + t*t*(covR+covRP));
927 int type1 =
m_SoA.m_sorted_sp_type[iter1];
928 double t1 =
m_SoA.m_sorted_sp_t[iter1];
933 const double r_inn =
m_SoA.m_r[iter1];
934 const double t_inn =
m_SoA.m_t[iter1];
935 const double v_inn =
m_SoA.m_v[iter1];
936 const double u_inn =
m_SoA.m_u[iter1];
937 const double tCov_inn =
m_SoA.m_tCov[iter1];
938 const double dCov =
m_CovMS*(1+t_inn*t_inn);
940 for(
int iter2=iter1+1;iter2<nSP;iter2++) {
942 if(type1==
m_SoA.m_sorted_sp_type[iter2])
continue;
945 if(
m_SoA.m_sorted_sp_t[iter2]-t1>tcut)
break;
947 const double t_out =
m_SoA.m_t[iter2];
949 const double dt2 = std::pow((t_inn - t_out), 2)*(1.0/9.0);
951 double covdt = (t_inn*t_out*covR + covZ);
952 covdt *= 2*r_inn*
m_SoA.m_r[iter2];
953 covdt += tCov_inn +
m_SoA.m_tCov[iter2];
955 if(dt2 > covdt+dCov)
continue;
959 const double du =
m_SoA.m_u[iter2] - u_inn;
960 if(du==0.0)
continue;
962 const double A = (
m_SoA.m_v[iter2] - v_inn)/du;
964 const double B = (1-type1)*(v_inn -
A*u_inn) + type1*(
m_SoA.m_v[iter2] -
A*
m_SoA.m_u[iter2]);
965 const double R_squ = (1 +
A*
A)/(B*B);
972 if(dt2 > covdt+frac*dCov)
continue;
975 const double B_pS_r = B*pS_r;
976 const double fabs_d0 = std::fabs(pS_r*(B_pS_r -
A));
978 if(fabs_d0 >
m_settings.m_tripletD0Max)
continue;
981 bool isSCT = (1-type1)*
m_SoA.m_sorted_sp[iter1]->isSCT() + type1*
m_SoA.m_sorted_sp[iter2]->isSCT();
983 if (isSCT && isPixel) {
984 if(fabs_d0 >
m_settings.m_tripletD0_PPS_Max)
continue;
991 double uc = 2*B_pS_r -
A;
993 const double phi0 = atan2(sinA - uc*cosA, cosA + uc*sinA);
1002 const double Q = fabs_d0*fabs_d0;
1004 if(output.size()>=
m_settings.m_maxTripletBufferLength) {
1007 return A.Q() > B.Q();
1011 std::vector<TrigInDetTriplet>::iterator it = output.begin();
1012 if( Q >= (*it).Q()) {
1022 output.emplace_back(*pSPI, *pS, *pSPO, Q);
1031 std::vector<TrigInDetTriplet>& output,
const IRoiDescriptor* roiDescriptor) {
1036 ProtoSeed(
const TrigSiSpacePointBase* s,
double c,
double Q,
bool conf =
false) : m_sp(s), m_curv(c), m_Q(Q), m_confirmed(conf) {};
1037 ProtoSeed(
const ProtoSeed& ps) : m_sp(ps.m_sp), m_curv(ps.m_curv), m_Q(ps.m_Q), m_confirmed(ps.m_confirmed) {};
1043 if(nInner==0 || nOuter==0)
return;
1049 int nSP = nInner + nOuter;
1051 const double pS_r = pS->
r();
1052 const double pS_x = pS->
x();
1053 const double pS_y = pS->
y();
1054 const double pS_dr = pS->
dr();
1055 const double pS_dz = pS->
dz();
1056 const double cosA = pS_x/pS_r;
1057 const double sinA = pS_y/pS_r;
1058 const double covZ = pS_dz*pS_dz;
1059 const double covR = pS_dr*pS_dr;
1060 const bool isPixel = pS->
isPixel();
1067 for(;idx<nInner;idx++) {
1072 const double dx = pSP->
x() - pS_x;
1073 const double dy = pSP->
y() - pS_y;
1074 const double R2inv = 1.0/(dx*dx+dy*dy);
1075 const double Rinv = std::sqrt(R2inv);
1076 const double xn = dx*cosA + dy*sinA;
1077 const double yn =-dx*sinA + dy*cosA;
1078 const double dz = pSP->
z() - pS->
z();
1079 const double t = Rinv*dz;
1083 m_SoA.m_r[idx] = Rinv;
1084 m_SoA.m_u[idx] = xn*R2inv;
1085 m_SoA.m_v[idx] = yn*R2inv;
1089 const double covZP = pSP->
dz()*pSP->
dz();
1090 const double covRP = pSP->
dr()*pSP->
dr();
1093 m_SoA.m_tCov[idx] = R2inv*(covZ + covZP + t*t*(covR+covRP));
1096 for(
int k=0;k<nOuter;k++,idx++) {
1101 const double dx = pSP->
x() - pS_x;
1102 const double dy = pSP->
y() - pS_y;
1103 const double R2inv = 1.0/(dx*dx+dy*dy);
1104 const double Rinv = std::sqrt(R2inv);
1105 const double xn = dx*cosA + dy*sinA;
1106 const double yn =-dx*sinA + dy*cosA;
1107 const double dz = -pSP->
z() + pS->
z();
1108 const double t = Rinv*dz;
1112 m_SoA.m_r[idx] = Rinv;
1113 m_SoA.m_u[idx] = xn*R2inv;
1114 m_SoA.m_v[idx] = yn*R2inv;
1118 const double covZP = pSP->
dz()*pSP->
dz();
1119 const double covRP = pSP->
dr()*pSP->
dr();
1122 m_SoA.m_tCov[idx] = R2inv*(covZ + covZP + t*t*(covR+covRP));
1127 for(
int innIdx=0;innIdx<nInner;innIdx++) {
1131 const double r_inn =
m_SoA.m_r[innIdx];
1132 const double t_inn =
m_SoA.m_t[innIdx];
1133 const double v_inn =
m_SoA.m_v[innIdx];
1134 const double u_inn =
m_SoA.m_u[innIdx];
1135 const double tCov_inn =
m_SoA.m_tCov[innIdx];
1136 const double dCov =
m_CovMS*(1+t_inn*t_inn);
1138 std::vector<ProtoSeed> vPro;
1141 for(
int outIdx=nInner;outIdx<nSP;outIdx++) {
1144 const double t_out =
m_SoA.m_t[outIdx];
1146 const double dt2 = std::pow((t_inn - t_out), 2)*(1.0/9.0);
1149 double covdt = (t_inn*t_out*covR + covZ);
1150 covdt *= 2*r_inn*
m_SoA.m_r[outIdx];
1151 covdt += tCov_inn +
m_SoA.m_tCov[outIdx];
1153 if(dt2 > covdt+dCov)
continue;
1157 const double du =
m_SoA.m_u[outIdx] - u_inn;
1158 if(du==0.0)
continue;
1159 const double A = (
m_SoA.m_v[outIdx] - v_inn)/du;
1160 const double B = v_inn -
A*u_inn;
1161 const double R_squ = (1 +
A*
A)/(B*B);
1169 if(dt2 > covdt+frac*dCov)
continue;
1173 const double fabs_d0 = std::fabs(pS_r*(B*pS_r -
A));
1175 if(fabs_d0 >
m_settings.m_tripletD0Max)
continue;
1177 if (
m_SoA.m_spo[outIdx-nInner]->isSCT() && isPixel) {
1178 if(fabs_d0 >
m_settings.m_tripletD0_PPS_Max)
continue;
1183 const double Q= (
m_settings.m_LRTmode ? 0 : fabs_d0*fabs_d0);
1185 bool isOuterPixel =
m_SoA.m_spo[outIdx-nInner]->isPixel();
1188 if (isOuterPixel && (bestQ < Q))
continue;
1194 const double uc = 2*B*pS_r -
A;
1195 const double phi0 = atan2(sinA - uc*cosA, cosA + uc*sinA);
1204 const double Curv = B/std::sqrt(1+
A*
A);
1207 bool isConfirmed =
false;
1209 for(
auto& ps : vPro) {
1210 double diffC = 1 - Curv/ps.m_curv;
1211 if(std::fabs(diffC) <
m_settings.m_curv_delta) {
1212 ps.m_confirmed =
true;
1221 vPro.emplace_back(ProtoSeed(
m_SoA.m_spo[outIdx-nInner], Curv, Q, isConfirmed));
1225 for(
const auto& ps : vPro) {
1226 if(!ps.m_confirmed)
continue;
1227 if(output.size()>=
m_settings.m_maxTripletBufferLength) {
1235 return A.Q() < B.Q();
1238 double QL = output.back().Q();
1249 output.emplace_back(*
m_SoA.m_spi[innIdx], *pS, *ps.m_sp, ps.m_Q);
1257 for(std::vector<TrigInDetTriplet>::iterator it=tripletVec.begin();it!=tripletVec.end();++it) {
1258 float newQ = (*it).Q();
1260 if((!
m_settings.m_LRTmode) && (*it).s3().isSCT()) {
1262 newQ += (*it).s1().isSCT() ? 1000.0 : 10000.0;
1273 return A.Q() < B.Q();
struct LPhiSector L_PHI_SECTOR
struct IndexedSP INDEXED_SP
struct LPhi_Storage L_PHI_STORAGE
std::pair< std::vector< const INDEXED_SP * >::const_iterator, std::vector< const INDEXED_SP * >::const_iterator > SP_RANGE
Describes the API of the Region of Ineterest geometry.
virtual bool isFullscan() const =0
is this a full detector RoI?
virtual double phiPlus() const =0
extreme phi values
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
virtual double phiMinus() const =0
virtual double zedMinus() const =0
const InDet::SiWidth & width() const
return width class reference
const Amg::Vector2D & widthPhiRZ() const
double m_maxDeltaRadiusConf
const TrigCombinatorialSettings & m_settings
void loadSpacePoints(const std::vector< TrigSiSpacePointBase > &)
std::vector< float > m_maxTau
void createTripletsNew(const TrigSiSpacePointBase *, int, int, std::vector< TrigInDetTriplet > &, const IRoiDescriptor *)
void storeTriplets(std::vector< TrigInDetTriplet > &)
std::vector< float > m_minTau
bool getSpacepointRange(int, const std::vector< const INDEXED_SP * > &, SP_RANGE &)
void createSeeds(const IRoiDescriptor *)
void getSeeds(std::vector< TrigInDetTriplet > &)
std::vector< INDEXED_SP > m_spStorage
void createTriplets(const TrigSiSpacePointBase *, int, int, std::vector< TrigInDetTriplet > &, const IRoiDescriptor *)
int processSpacepointRangeZv(const INDEXED_SP *, bool, const SP_RANGE &, bool, const float &, const float &)
std::vector< int > m_innerMarkers
std::vector< TrigInDetTriplet > m_triplets
void createConfirmedTriplets(const TrigSiSpacePointBase *, int, int, std::vector< TrigInDetTriplet > &, const IRoiDescriptor *)
TrigTrackSeedGenerator(const TrigCombinatorialSettings &)
~TrigTrackSeedGenerator()
bool validateLayerPairNew(int, int, float, float)
std::vector< int > m_outerMarkers
int processSpacepointRange(int, const INDEXED_SP *, bool, const SP_RANGE &, const IRoiDescriptor *)
const std::pair< const PrepRawData *, const PrepRawData * > & clusterList() const
return the pair of cluster pointers by reference
std::map< std::string, int > dirs
list of directories to be explicitly included, together with corresponding depths of subdirectories
bool containsPhi(const IRoiDescriptor &roi, double phi)
test whether a stub is contained within the roi
bool contains(const IRoiDescriptor &roi, double z0, double dzdr)
see whether a segment is contained within the roi in r-z
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
hold the test vectors and ease the comparison
const TrigSiSpacePointBase * m_pSP
bool getValidRange(float fX, float &min, float &max) const