12 TrackletLUT::TrackletLUT(
const Settings& settings)
13 : settings_(settings), setup_(settings.
setup()), nbits_(0), positive_(
true) {}
16 unsigned int layerdisk,
bool isPS, std::array<double, 2> tan_range,
unsigned int nzbins,
unsigned int zbin) {
23 bool use_tan_range = !(tan_range[0] == -1 and tan_range[1] == -1);
24 bool use_zbins = (nzbins > 1);
28 int layerId =
barrel ? layerdisk + 1 : layerdisk +
N_LAYER - 1;
30 std::vector<const tt::SensorModule*> sensorModules;
35 if (
sm.layerId() != layerId ||
sm.z() < 0 ||
sm.psModule() != isPS) {
40 const double term = (
sm.numColumns() / 2 - 0.5) *
sm.pitchCol();
51 if (mod_tan_max >= tan_range[0] && mod_tan_min <= tan_range[1]) {
52 sensorModules.push_back(&
sm);
54 }
else if (use_zbins) {
58 bool useFlat = (zbin == 0);
59 bool isFlat = (
sm.tilt() == 0);
61 if (useFlat and isFlat)
62 sensorModules.push_back(&
sm);
63 else if (!useFlat and !isFlat)
64 sensorModules.push_back(&
sm);
65 }
else if (nzbins == 13) {
67 sensorModules.push_back(&
sm);
72 sensorModules.push_back(&
sm);
83 stable_sort(sensorModules.begin(), sensorModules.end(), smallerR);
84 stable_sort(sensorModules.begin(), sensorModules.end(), smallerZ);
85 sensorModules.erase(
unique(sensorModules.begin(), sensorModules.end(), equalRZ), sensorModules.end());
93 std::array<double, 2> tan_range = {{2147483647, 0}};
97 for (
auto sm : sensorModules) {
98 const double term = (
sm->numColumns() / 2 - 0.5) *
sm->pitchCol();
108 if (mod_tan_min < tan_range[0])
109 tan_range[0] = mod_tan_min;
110 if (mod_tan_max > tan_range[1])
111 tan_range[1] = mod_tan_max;
117 const std::vector<const tt::SensorModule*>& sensorModules,
125 unsigned int bendbits = isPS ? 3 : 4;
127 std::vector<std::array<double, 2>> bendpars;
128 std::vector<std::array<double, 2>> bendminmax;
131 for (
int i = 0;
i < 1 << bendbits;
i++) {
132 bendpars.push_back({{99, 0}});
133 bendminmax.push_back({{99, -99}});
137 for (
auto sm : sensorModules) {
142 for (
int ibend = 0; ibend <= 2 *
window; ibend++) {
143 int FEbend = ibend -
window;
147 int bend = std::signbit(BEbend) ? (1 << bendbits) -
distance(encodingBend.begin(),
pos)
150 double bendmin = FEbend / 2.0 - FEbendcut;
151 double bendmax = FEbend / 2.0 + FEbendcut;
157 z_mod[0] =
std::abs(
sm->z()) + (
sm->numColumns() / 2 - 0.5) *
sm->pitchCol() *
sm->cosTilt();
158 z_mod[1] =
std::abs(
sm->z()) - (
sm->numColumns() / 2 - 0.5) *
sm->pitchCol() *
sm->cosTilt();
160 r_mod[0] =
sm->r() - (
sm->numColumns() / 2 - 0.5) *
sm->pitchCol() *
std::abs(
sm->sinTilt());
161 r_mod[1] =
sm->r() + (
sm->numColumns() / 2 - 0.5) *
sm->pitchCol() *
std::abs(
sm->sinTilt());
163 for (
int i = 0;
i < 2;
i++) {
164 double CF =
std::abs(
sm->sinTilt()) * (z_mod[
i] / r_mod[
i]) +
sm->cosTilt();
171 if (cbendmin < bendminmax[bend][0])
172 bendminmax.at(bend)[0] = cbendmin;
173 if (cbendmax > bendminmax[bend][1])
174 bendminmax.at(bend)[1] = cbendmax;
179 for (
int i = 0;
i < 1 << bendbits;
i++) {
180 double mid = (bendminmax[
i][1] + bendminmax[
i][0]) / 2;
181 double cut = (bendminmax[
i][1] - bendminmax[
i][0]) / 2;
183 bendpars[
i][0] = mid;
184 bendpars[
i][1] =
cut;
191 char cregion =
'A' +
region;
193 for (
unsigned int iSeed = 0; iSeed <
N_SEED; iSeed++) {
288 unsigned int layerdisk1,
289 unsigned int layerdisk2,
290 unsigned int nbitsfinephidiff,
302 int outerrbins = (1 << outerrbits);
326 int nbinsfinephidiff = (1 << nbitsfinephidiff);
328 for (
int iphibin = 0; iphibin < nbinsfinephidiff; iphibin++) {
329 int iphidiff = iphibin;
330 if (iphibin >= nbinsfinephidiff / 2) {
331 iphidiff = iphibin - nbinsfinephidiff;
335 double deltaphi = 1.5;
336 dphi[0] = (iphidiff - deltaphi) * dfinephi;
337 dphi[1] = (iphidiff + deltaphi) * dfinephi;
338 for (
int irouterbin = 0; irouterbin < outerrbins; irouterbin++) {
350 std::vector<std::array<double, 2>> bend_cuts_inner;
351 std::vector<std::array<double, 2>> bend_cuts_outer;
354 std::vector<const tt::SensorModule*> sminner;
355 std::vector<const tt::SensorModule*> smouter;
359 std::array<double, 2> tan_range = {{0, outer_tan_max}};
368 smouter =
getSensorModules(layerdisk2, isPSouter, {{outer_tan_min, outer_tan_max}});
369 std::array<double, 2> tan_range =
getTanRange(smouter);
377 smouter =
getSensorModules(layerdisk2, isPSouter, {{outer_tan_min, outer_tan_max}});
379 std::array<double, 2> tan_range =
getTanRange(smouter);
387 for (
int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) {
390 bend_cuts_inner.push_back({{mid,
cut}});
392 for (
int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) {
395 bend_cuts_outer.push_back({{mid,
cut}});
399 double bendinnermin = 20.0;
400 double bendinnermax = -20.0;
401 double bendoutermin = 20.0;
402 double bendoutermax = -20.0;
403 double rinvmin = 1.0;
404 double rinvmax = -1.0;
405 double absrinvmin = 1.0;
407 for (
int i2 = 0;
i2 < 2;
i2++) {
408 for (
int i3 = 0;
i3 < 2;
i3++) {
416 if (rinner >= router[
i3])
419 double rinv1 = (rinner < router[
i3]) ?
rinv(0.0, -dphi[
i2], rinner, router[
i3]) : 20.0;
425 if (abendinner < bendinnermin)
426 bendinnermin = abendinner;
427 if (abendinner > bendinnermax)
428 bendinnermax = abendinner;
429 if (abendouter < bendoutermin)
430 bendoutermin = abendouter;
431 if (abendouter > bendoutermax)
432 bendoutermax = abendouter;
447 double lowrinvcutte =
449 passptcut = rinvmin < rinvcutte and rinvmax > -rinvcutte;
450 bendfac = (rinvmin < lowrinvcutte and rinvmax > -lowrinvcutte)
454 passptcut = absrinvmin < rinvcutte;
459 for (
int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) {
460 double bendminfac = (isPSinner and (ibend == 2
or ibend == 3)) ? bendfac : 1.0;
461 double bendmaxfac = (isPSinner and (ibend == 6
or ibend == 5)) ? bendfac : 1.0;
463 double mid = bend_cuts_inner.at(ibend)[0];
464 double cut = bend_cuts_inner.at(ibend)[1];
466 bool passinner = mid +
cut * bendmaxfac > bendinnermin && mid -
cut * bendminfac < bendinnermax;
468 table_.push_back(passinner && passptcut);
471 for (
int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) {
472 double bendminfac = (isPSouter and (ibend == 2
or ibend == 3)) ? bendfac : 1.0;
473 double bendmaxfac = (isPSouter and (ibend == 6
or ibend == 5)) ? bendfac : 1.0;
475 double mid = bend_cuts_outer.at(ibend)[0];
476 double cut = bend_cuts_outer.at(ibend)[1];
478 bool passouter = mid +
cut * bendmaxfac > bendoutermin && mid -
cut * bendminfac < bendoutermax;
480 table_.push_back(passouter && passptcut);
488 char cTP =
'A' + iTP;
493 name_ +=
"_stubptinnercut.tab";
495 name_ +=
"_stubptoutercut.tab";
502 unsigned int layerdisk1,
503 unsigned int layerdisk2,
504 unsigned int iAllStub,
505 unsigned int nbitsfinephidiff,
506 unsigned int nbitsfinephi,
514 unsigned int nbendbitsinner = 3;
520 for (
int innerfinephi = 0; innerfinephi < (1 << nbitsfinephi); innerfinephi++) {
521 for (
int innerbend = 0; innerbend < (1 << nbendbitsinner); innerbend++) {
522 for (
int ir = 0; ir < (1 << nirbits); ir++) {
523 unsigned int usereg = 0;
524 for (
unsigned int ireg = 0; ireg <
settings_.
nvmte(1, iSeed); ireg++) {
526 for (
int ifinephiouter = 0; ifinephiouter < (1 <<
settings_.
nfinephi(1, iSeed)); ifinephiouter++) {
529 int idphi = outerfinephi - innerfinephi;
530 bool inrange = (idphi < (1 << (nbitsfinephidiff - 1))) && (idphi >= -(1 << (nbitsfinephidiff - 1)));
532 idphi = idphi + (1 << nbitsfinephidiff);
535 idphi1 = (idphi << 3) + ir;
536 int ptinnerindexnew = (idphi1 << nbendbitsinner) + innerbend;
537 match = match || (inrange && tplutinner.
lookup(ptinnerindexnew));
540 usereg = usereg | (1 << ireg);
551 char cTP =
'A' + iTP;
562 unsigned int layerdisk1,
563 unsigned int layerdisk2,
564 unsigned int innerphibits,
565 unsigned int outerphibits,
577 int outerrbins = (1 << outerrbits);
578 int innerphibins = (1 << innerphibits);
579 int outerphibins = (1 << outerphibits);
604 table_.resize((1 << nbendbitsinner),
false);
606 table_.resize((1 << nbendbitsouter),
false);
612 for (
int irouterbin = 0; irouterbin < outerrbins; irouterbin++) {
623 std::vector<std::array<double, 2>> bend_cuts_inner;
624 std::vector<std::array<double, 2>> bend_cuts_outer;
627 std::vector<const tt::SensorModule*> sminner;
628 std::vector<const tt::SensorModule*> smouter;
632 std::array<double, 2> tan_range = {{0, outer_tan_max}};
641 smouter =
getSensorModules(layerdisk2, isPSouter, {{outer_tan_min, outer_tan_max}});
642 std::array<double, 2> tan_range =
getTanRange(smouter);
650 smouter =
getSensorModules(layerdisk2, isPSouter, {{outer_tan_min, outer_tan_max}});
652 std::array<double, 2> tan_range =
getTanRange(smouter);
660 for (
int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) {
663 bend_cuts_inner.push_back({{mid,
cut}});
665 for (
int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) {
668 bend_cuts_outer.push_back({{mid,
cut}});
672 for (
int iphiinnerbin = 0; iphiinnerbin < innerphibins; iphiinnerbin++) {
673 phiinner[0] = innerphimin + iphiinnerbin * (innerphimax - innerphimin) / innerphibins;
674 phiinner[1] = innerphimin + (iphiinnerbin + 1) * (innerphimax - innerphimin) / innerphibins;
675 for (
int iphiouterbin = 0; iphiouterbin < outerphibins; iphiouterbin++) {
676 phiouter[0] = outerphimin + iphiouterbin * (outerphimax - outerphimin) / outerphibins;
677 phiouter[1] = outerphimin + (iphiouterbin + 1) * (outerphimax - outerphimin) / outerphibins;
679 double bendinnermin = 20.0;
680 double bendinnermax = -20.0;
681 double bendoutermin = 20.0;
682 double bendoutermax = -20.0;
683 double rinvmin = 1.0;
684 double rinvmax = -1.0;
685 double absrinvmin = 1.0;
687 for (
int i1 = 0;
i1 < 2;
i1++) {
688 for (
int i2 = 0;
i2 < 2;
i2++) {
689 for (
int i3 = 0;
i3 < 2;
i3++) {
698 if (rinner >= router[
i3])
702 double rinv1 = (rinner < router[
i3]) ? -
rinv(phiinner[
i1], phiouter[
i2], rinner, router[
i3]) : -20.0;
711 if (abendinner < bendinnermin)
712 bendinnermin = abendinner;
713 if (abendinner > bendinnermax)
714 bendinnermax = abendinner;
715 if (abendouter < bendoutermin)
716 bendoutermin = abendouter;
717 if (abendouter > bendoutermax)
718 bendoutermax = abendouter;
729 double lowrinvcutte = 0.002;
736 bendfac = (rinvmin < lowrinvcutte and rinvmax > -lowrinvcutte) ? 1.05 : 1.0;
743 for (
int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) {
744 double bendminfac = (isPSinner and (ibend == 2
or ibend == 3)) ? bendfac : 1.0;
745 double bendmaxfac = (isPSinner and (ibend == 6
or ibend == 5)) ? bendfac : 1.0;
747 double mid = bend_cuts_inner.at(ibend)[0];
748 double cut = bend_cuts_inner.at(ibend)[1];
750 bool passinner = mid +
cut * bendmaxfac > bendinnermin && mid -
cut * bendminfac < bendinnermax;
756 table_.push_back(passinner && passptcut);
760 for (
int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) {
761 double bendminfac = (isPSouter and (ibend == 2
or ibend == 3)) ? bendfac : 1.0;
762 double bendmaxfac = (isPSouter and (ibend == 6
or ibend == 5)) ? bendfac : 1.0;
764 double mid = bend_cuts_outer.at(ibend)[0];
765 double cut = bend_cuts_outer.at(ibend)[1];
767 bool passouter = mid +
cut * bendmaxfac > bendoutermin && mid -
cut * bendminfac < bendoutermax;
773 table_.push_back(passouter && passptcut);
786 name_ =
"VMSTE_" + innermem +
"_vmbendcut.tab";
788 name_ =
"VMSTE_" + outermem +
"_vmbendcut.tab";
791 name_ =
"TE_" + innermem.substr(0, innermem.size() - 2) +
"_" + outermem.substr(0, outermem.size() - 2);
793 name_ +=
"_stubptinnercut.tab";
795 name_ +=
"_stubptoutercut.tab";
804 unsigned int nphiderbits) {
805 unsigned int nsignbins = 2;
806 unsigned int nrbins = 1 << (nrbits);
807 unsigned int nphiderbins = 1 << (nphiderbits);
809 for (
unsigned int isignbin = 0; isignbin < nsignbins; isignbin++) {
810 for (
unsigned int irbin = 0; irbin < nrbins; irbin++) {
812 if (ir > (1 << (nrbits - 1)))
815 for (
unsigned int iphiderbin = 0; iphiderbin < nphiderbins; iphiderbin++) {
816 int iphider = iphiderbin;
817 if (iphider > (1 << (nphiderbits - 1)))
818 iphider -= (1 << nphiderbits);
822 double phider = iphider * k_phider;
828 double rinv = -phider * (2.0 *
t);
835 int ibendproj = 2.0 * bendproj + 0.5 * maxbend;
838 if (ibendproj > maxbend)
841 table_.push_back(ibendproj);
859 double roffset = 3.0;
861 for (
unsigned int ir = 0; ir < (1u << nrbits); ir++) {
872 rbin2 = clamp(rbin2, 0, ((1 <<
N_RZBITS) - 1));
875 assert(rbin2 - rbin1 <= 1);
877 int d = rbin1 != rbin2;
884 finer = clamp(finer, 0, ((1 << (
NFINERZBITS + 1)) - 1));
889 int word = (finer << (
N_RZBITS + N_DIFF_FLAG)) + (rbin1 << N_DIFF_FLAG) +
d;
897 name_ =
"ProjectionDiskRadius.tab";
903 double rinvhalf = 0.5 * ((1 << nrinv) - 1);
912 std::vector<std::array<double, 2>> bend_cuts;
917 bend_cuts =
getBendCut(layerdisk,
sm, isPSmodule, bendcutFE);
920 for (
unsigned int ibend = 0; ibend < (1u << nbits); ibend++) {
923 bend_cuts.push_back({{mid,
cut}});
927 for (
unsigned int irinv = 0; irinv < (1u << nrinv); irinv++) {
931 for (
unsigned int ibend = 0; ibend < (1u << nbits); ibend++) {
932 double mid = bend_cuts[ibend][0];
933 double cut = bend_cuts[ibend][1];
935 double pass = mid +
cut > projbend && mid -
cut < projbend;
941 std::vector<std::array<double, 2>> bend_cuts_2S;
942 std::vector<std::array<double, 2>> bend_cuts_PS;
946 std::vector<const tt::SensorModule*> sm2S =
getSensorModules(layerdisk,
false);
947 bend_cuts_2S =
getBendCut(layerdisk, sm2S,
false, bendcutFE2S);
950 std::vector<const tt::SensorModule*> smPS =
getSensorModules(layerdisk,
true);
951 bend_cuts_PS =
getBendCut(layerdisk, smPS,
true, bendcutFEPS);
954 for (
unsigned int ibend = 0; ibend < (1 <<
N_BENDBITS_2S); ibend++) {
957 bend_cuts_2S.push_back({{mid,
cut}});
959 for (
unsigned int ibend = 0; ibend < (1 <<
N_BENDBITS_PS); ibend++) {
962 bend_cuts_PS.push_back({{mid,
cut}});
966 for (
unsigned int iprojbend = 0; iprojbend < (1u << nrinv); iprojbend++) {
967 double projbend = 0.5 * (iprojbend - rinvhalf);
968 for (
unsigned int ibend = 0; ibend < (1 <<
N_BENDBITS_2S); ibend++) {
969 double mid = bend_cuts_2S[ibend][0];
970 double cut = bend_cuts_2S[ibend][1];
972 double pass = mid +
cut > projbend && mid -
cut < projbend;
977 for (
unsigned int iprojbend = 0; iprojbend < (1u << nrinv); iprojbend++) {
978 double projbend = 0.5 * (iprojbend - rinvhalf);
979 for (
unsigned int ibend = 0; ibend < (1 <<
N_BENDBITS_PS); ibend++) {
980 double mid = bend_cuts_PS[ibend][0];
981 double cut = bend_cuts_PS[ibend][1];
983 double pass = mid +
cut > projbend && mid -
cut < projbend;
1002 unsigned int rbins = (1 << rbits);
1003 unsigned int zbins = (1 << zbits);
1019 double dr = (rmax - rmin) / rbins;
1024 for (
unsigned int izbin = 0; izbin <
zbins; izbin++) {
1025 for (
unsigned int irbin = 0; irbin < rbins; irbin++) {
1026 double r = rmin + (irbin + 0.5) * dr;
1027 double z =
zmin + (izbin + 0.5) *
dz;
1030 int iznew = izbin - (1 << (zbits - 1));
1032 iznew += (1 << zbits);
1034 assert(iznew < (1 << zbits));
1035 z =
zmin + (iznew + 0.5) *
dz;
1037 int irnew = irbin - (1 << (rbits - 1));
1039 irnew += (1 << rbits);
1041 assert(irnew < (1 << rbits));
1042 r = rmin + (irnew + 0.5) * dr;
1046 unsigned int NRING =
1048 if (layerdisk >=
N_LAYER && irbin < 2 * NRING)
1068 if (
type == VMRTableType::disk) {
1091 if (
type == VMRTableType::inneroverlap) {
1097 if (
type == VMRTableType::innerthird) {
1123 if (
type == VMRTableType::disk) {
1135 if (
type == VMRTableType::inneroverlap) {
1153 char cregion =
'A' +
region;
1166 if (
type == VMRTableType::inneroverlap) {
1173 if (
type == VMRTableType::disk) {
1193 double rratio1 = rmean / (r + 0.5 * dr);
1194 double rratio2 = rmean / (r - 0.5 * dr);
1196 double z1 = (z - 0.5 *
dz) * rratio1 +
z0cut * (rratio1 - 1.0);
1197 double z2 = (z + 0.5 *
dz) * rratio1 +
z0cut * (rratio1 - 1.0);
1198 double z3 = (z - 0.5 *
dz) * rratio2 +
z0cut * (rratio2 - 1.0);
1199 double z4 = (z + 0.5 *
dz) * rratio2 +
z0cut * (rratio2 - 1.0);
1200 double z5 = (z - 0.5 *
dz) * rratio1 -
z0cut * (rratio1 - 1.0);
1201 double z6 = (z + 0.5 *
dz) * rratio1 -
z0cut * (rratio1 - 1.0);
1202 double z7 = (z - 0.5 *
dz) * rratio2 -
z0cut * (rratio2 - 1.0);
1203 double z8 = (z + 0.5 *
dz) * rratio2 -
z0cut * (rratio2 - 1.0);
1233 int value = zbin1 / 8;
1235 if (zbin2 / 8 - zbin1 / 8 > 0)
1238 value += (zbin1 & 7);
1240 int deltaz = zbin2 - zbin1;
1245 value += (deltaz << 7);
1257 double r1 = (r + 0.5 * dr) * (zmean +
z0cut) / (z + 0.5 *
dz +
z0cut);
1258 double r2 = (r - 0.5 * dr) * (zmean -
z0cut) / (z + 0.5 *
dz -
z0cut);
1259 double r3 = (r + 0.5 * dr) * (zmean +
z0cut) / (z - 0.5 *
dz +
z0cut);
1260 double r4 = (r - 0.5 * dr) * (zmean -
z0cut) / (z - 0.5 *
dz -
z0cut);
1261 double r5 = (r + 0.5 * dr) * (zmean -
z0cut) / (z + 0.5 *
dz -
z0cut);
1262 double r6 = (r - 0.5 * dr) * (zmean +
z0cut) / (z + 0.5 *
dz +
z0cut);
1263 double r7 = (r + 0.5 * dr) * (zmean -
z0cut) / (z - 0.5 *
dz -
z0cut);
1264 double r8 = (r - 0.5 * dr) * (zmean +
z0cut) / (z - 0.5 *
dz +
z0cut);
1266 double rmin =
std::min({r1,
r2, r3, r4, r5, r6, r7, r8});
1267 double rmax =
std::max({r1,
r2, r3, r4, r5, r6, r7, r8});
1281 if (rmin > rmaxdisk)
1283 if (rmax > rmaxdisk)
1286 if (rmax < rmindisk)
1288 if (rmin < rmindisk)
1317 int value = rbin1 / 8;
1323 if (rbin2 / 8 - rbin1 / 8 > 0)
1326 value += (rbin1 & 7);
1328 int deltar = rbin2 - rbin1;
1346 unsigned int rbins = (1 << rbits);
1351 double dr = 2.0 * drmax / rbins;
1353 std::vector<std::array<double, 2>> bend_vals;
1360 for (
int ibend = 0; ibend < 1 << bendbits; ibend++) {
1365 for (
int ibend = 0; ibend < 1 << bendbits; ibend++) {
1366 for (
unsigned int irbin = 0; irbin < rbins; irbin++) {
1367 double bend = -bend_vals[ibend][0];
1381 unsigned int layerdisk,
double bend,
unsigned int irbin,
double rmean,
double dr,
double drmax)
const {
1385 double Delta = (irbin + 0.5) * dr - drmax;
1388 double drnom = 0.18;
1393 int idphi = dphi / kphi;
1400 if (
name_.empty()) {
1405 throw cms::Exception(
"LogicError") <<
"Error in " << __FILE__ <<
" nbits_ == 0 ";
1415 for (
unsigned int i = 0;
i <
table_.size();
i++) {
1423 itable = (1 <<
nbits_) - 1;
1429 out << endl <<
"};" << endl;
1442 for (
unsigned int i = 0;
i <
table_.size();
i++) {
1446 itable = (1 <<
nbits_) - 1;
1450 out << uppercase << setfill(
'0') << setw(
width) << hex << itable <<
dec << endl;
double rphicutPS(unsigned int iSeed, unsigned int idisk) const
unsigned int vmrlutrbits(unsigned int layerdisk) const
void initBendMatch(unsigned int layerdisk)
constexpr unsigned int N_RZBITS
double sensorSpacing2S() const
double zmatchcut(unsigned int iSeed, unsigned int ilayer) const
double bendcutME(unsigned int layerdisk, bool isPSmodule) const
unsigned int nrbitsstub(unsigned int layerdisk) const
unsigned int NLONGVMBITS() const
void initmatchcut(unsigned int layerdisk, MatchType type, unsigned int region)
double rDSSinner(unsigned int iBin) const
constexpr unsigned int NRINVBITS
constexpr unsigned int N_SEED
void initProjectionBend(double k_phider, unsigned int idisk, unsigned int nrbits, unsigned int nphiderbits)
void initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, unsigned int innerphibits, unsigned int outerphibits, double innerphimin, double innerphimax, double outerphimin, double outerphimax, const std::string &innermem, const std::string &outermem)
double dphisectorHG() const
const Settings & settings_
static std::string LayerName(unsigned int ilayer)
constexpr unsigned int N_BENDBITS_2S
int lookup(unsigned int index) const
double rmindiskvm() const
double rphimatchcut(unsigned int iSeed, unsigned int ilayer) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
constexpr unsigned int N_DSS_MOD
int getphiCorrValue(unsigned int layerdisk, double bend, unsigned int irbin, double rmean, double dr, double drmax) const
static std::string to_string(const XMLCh *ch)
constexpr unsigned int N_BENDBITS_PS
const std::vector< double > & encodingBend(int windowSize, bool psModule) const
void initPhiCorrTable(unsigned int layerdisk, unsigned int rbits)
std::array< double, 2 > getTanRange(const std::vector< const tt::SensorModule *> &sensorModules)
unsigned int NLONGVMBINS() const
std::string tablePath() const
double rmindiskl2overlapvm() const
unsigned int nbitsallstubs(unsigned int layerdisk) const
double half2SmoduleWidth() const
double rmean(unsigned int iLayer) const
double rDSSouter(unsigned int iBin) const
const std::vector< SensorModule > & sensorModules() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
def unique(seq, keepstr=True)
double stripPitch(bool isPSmodule) const
Abs< T >::type abs(const T &t)
double bendcutme(int ibend, int layerdisk, bool isPSmodule) const
float degradeBend(bool psModule, int window, int bend) const
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
double convertFEBend(double FEbend, double sensorSep, double sensorSpacing, double CF, bool barrel, double r=0)
double bendcutte(int ibend, int layerdisk, bool isPSmodule) const
double zmean(unsigned int iDisk) const
unsigned int nvmte(unsigned int inner, unsigned int iSeed) const
constexpr unsigned int NFINERZBITS
double tan_theta(double r, double z, double z0, bool z0_max)
unsigned int nallstubs(unsigned int layerdisk) const
double rcut2S(unsigned int iSeed, unsigned int idisk) const
constexpr unsigned int N_PSLAYER
double rphicut2S(unsigned int iSeed, unsigned int idisk) const
const StubAlgorithmOfficial * stubAlgorithm() const
double rcutPS(unsigned int iSeed, unsigned int idisk) const
double rinv(double phi1, double phi2, double r1, double r2)
void initTPlut(bool fillInner, unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, unsigned int nbitsfinephidiff, unsigned int iTP)
int nfinephi(unsigned int inner, unsigned int iSeed) const
unsigned int nbitsphiprojderL123() const
void initTPregionlut(unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, unsigned int iAllStub, unsigned int nbitsfinephidiff, unsigned int nbitsfinephi, const TrackletLUT &tplutinner, unsigned int iTP)
std::vector< std::array< double, 2 > > getBendCut(unsigned int layerdisk, const std::vector< const tt::SensorModule *> &sensorModules, bool isPS, double FEbendcut=0)
ALPAKA_FN_ACC int sm(int ieta, int iphi)
double rmaxdiskvm() const
int getVMRLookup(unsigned int layerdisk, double z, double r, double dz, double dr, int iseed=-1) const
double zmaxdisk(unsigned int iDisk) const
std::vector< int > table_
double krprojshiftdisk() const
void initProjectionDiskRadius(int nrbits)
std::vector< const tt::SensorModule * > getSensorModules(unsigned int layerdisk, bool isPS, std::array< double, 2 > tan_range={{-1, -1}}, unsigned int nzbins=1, unsigned int zbin=0)
void initVMRTable(unsigned int layerdisk, VMRTableType type, int region=-1)
double benddecode(unsigned int ibend, unsigned int layerdisk, bool isPSmodule) const
double bendstrip(double r, double rinv, double stripPitch, double sensorSpacing)
std::ofstream openfile(const std::string &dir, const std::string &fname, const char *file, int line)
double zmindisk(unsigned int iDisk) const
unsigned int vmrlutzbits(unsigned int layerdisk) const
double bendcutTE(unsigned int seed, bool inner) const
double rmaxdiskl1overlapvm() const