|
|
Go to the documentation of this file.
16 TrackletCalculatorDisplaced::TrackletCalculatorDisplaced(
string name,
21 for (
unsigned int ilayer = 0; ilayer <
N_LAYER; ilayer++) {
22 vector<TrackletProjectionsMemory*>
tmp(settings.
nallstubs(ilayer),
nullptr);
26 for (
unsigned int idisk = 0; idisk <
N_DISK; idisk++) {
34 string name1 =
name.substr(1);
38 disk_ = name1[4] -
'0';
43 int iTC = name1[9] -
'A';
45 if (name1.substr(3, 6) ==
"L3L4L2")
47 else if (name1.substr(3, 6) ==
"L5L6L4")
49 else if (name1.substr(3, 6) ==
"L2L3D1")
51 else if (name1.substr(3, 6) ==
"D1D2L2")
64 if (iSeed == 8 || iSeed == 9) {
95 if (iSeed == 10 || iSeed == 11) {
123 for (
unsigned int i = 0;
i <
N_DISK - 2; ++
i)
129 outputProj = dynamic_cast<TrackletProjectionsMemory*>(
memory);
130 assert(outputProj !=
nullptr);
138 if (
output ==
"trackpar") {
139 auto*
tmp = dynamic_cast<TrackletParametersMemory*>(
memory);
145 if (
output.substr(0, 7) ==
"projout") {
147 auto*
tmp = dynamic_cast<TrackletProjectionsMemory*>(
memory);
150 unsigned int layerdisk =
output[8] -
'1';
151 unsigned int phiregion =
output[12] -
'A';
172 throw cms::Exception(
"BadConfig") << __FILE__ <<
" " << __LINE__ <<
" Could not find output : " <<
output;
180 if (
input ==
"thirdallstubin") {
181 auto*
tmp = dynamic_cast<AllStubsMemory*>(
memory);
186 if (
input ==
"firstallstubin") {
187 auto*
tmp = dynamic_cast<AllStubsMemory*>(
memory);
192 if (
input ==
"secondallstubin") {
193 auto*
tmp = dynamic_cast<AllStubsMemory*>(
memory);
198 if (
input.find(
"stubtriplet") == 0) {
199 auto*
tmp = dynamic_cast<StubTripletsMemory*>(
memory);
204 throw cms::Exception(
"BadConfig") << __FILE__ <<
" " << __LINE__ <<
" Could not find input : " <<
input;
208 unsigned int countall = 0;
209 unsigned int countsel = 0;
216 for (
unsigned int i = 0;
i < stubtriplet->nStubTriplets();
i++) {
219 const Stub* innerFPGAStub = stubtriplet->getFPGAStub1(
i);
222 const Stub* middleFPGAStub = stubtriplet->getFPGAStub2(
i);
225 const Stub* outerFPGAStub = stubtriplet->getFPGAStub3(
i);
234 bool accept =
LLLSeeding(innerFPGAStub, innerStub, middleFPGAStub, middleStub, outerFPGAStub, outerStub);
237 }
else if (innerFPGAStub->
isDisk() && middleFPGAStub->
isDisk() && outerFPGAStub->
isDisk()) {
238 throw cms::Exception(
"LogicError") << __FILE__ <<
" " << __LINE__ <<
" Invalid seeding!";
242 bool accept =
DDLSeeding(innerFPGAStub, innerStub, middleFPGAStub, middleStub, outerFPGAStub, outerStub);
246 bool accept =
LLDSeeding(innerFPGAStub, innerStub, middleFPGAStub, middleStub, outerFPGAStub, outerStub);
250 throw cms::Exception(
"LogicError") << __FILE__ <<
" " << __LINE__ <<
" Invalid seeding!";
276 globals_->
ofstream(
"trackletcalculatordisplaced.txt") <<
getName() <<
" " << countall <<
" " << countsel << endl;
290 int iphivmRaw = fpgaphi.
value() >> (fpgaphi.
nbits() - 5);
308 int iphivmRaw = fpgaphi.
value() >> (fpgaphi.
nbits() - 5);
320 if (trackletprojs ==
nullptr) {
323 <<
" iphi = " <<
iphi + 1;
327 assert(trackletprojs !=
nullptr);
328 trackletprojs->
addProj(tracklet);
335 if (trackletprojs ==
nullptr) {
340 <<
" iphi = " <<
iphi + 1;
344 assert(trackletprojs !=
nullptr);
348 trackletprojs->
addProj(tracklet);
353 const Stub* middleFPGAStub,
355 const Stub* outerFPGAStub,
359 <<
" trying stub triplet in layer (L L L): " << innerFPGAStub->
layer().
value() <<
" "
365 double r1 = innerStub->
r();
366 double z1 = innerStub->
z();
367 double phi1 = innerStub->
phi();
369 double r2 = middleStub->
r();
370 double z2 = middleStub->
z();
371 double phi2 = middleStub->
phi();
373 double r3 = outerStub->
r();
374 double z3 = outerStub->
z();
375 double phi3 = outerStub->
phi();
423 double rinvapprox, phi0approx, d0approx, tapprox, z0approx;
425 double phiprojdiskapprox[
N_DISK], rprojdiskapprox[
N_DISK];
426 double phiderdiskapprox[
N_DISK], rderdiskapprox[
N_DISK];
437 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
438 phiprojapprox[
i] = phiproj[
i];
439 zprojapprox[
i] = zproj[
i];
440 phiderapprox[
i] = phider[
i];
441 zderapprox[
i] = zder[
i];
444 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
445 phiprojdiskapprox[
i] = phiprojdisk[
i];
446 rprojdiskapprox[
i] = rprojdisk[
i];
447 phiderdiskapprox[
i] = phiderdisk[
i];
448 rderdiskapprox[
i] = rderdisk[
i];
465 int irinv, iphi0, id0, it, iz0;
470 irinv = rinvapprox / krinv;
471 iphi0 = phi0approx / kphi0;
474 iz0 = z0approx / kz0;
479 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculator::LLL Seeding irinv too large: " << rinvapprox <<
"(" << irinv
497 double phicritapprox = phi0approx - asin(0.5 *
settings_.
rcrit() * rinvapprox);
498 int phicrit = iphi0 - 2 * irinv;
504 keep = (phicrit > iphicritmincut) && (phicrit < iphicritmaxcut);
507 if (
keep && !keepapprox)
508 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculatorDisplaced::LLLSeeding tracklet kept with exact phicrit cut "
509 "but not approximate, phicritapprox: "
519 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
520 iphiproj[
i] = phiprojapprox[
i] / kphiproj;
521 izproj[
i] = zprojapprox[
i] / kzproj;
523 iphider[
i] = phiderapprox[
i] / kphider;
524 izder[
i] = zderapprox[
i] / kzder;
535 if (iphiproj[
i] <= 0)
581 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
582 iphiprojdisk[
i] = phiprojdiskapprox[
i] / kphiprojdisk;
583 irprojdisk[
i] = rprojdiskapprox[
i] / krprojdisk;
585 iphiderdisk[
i] = phiderdiskapprox[
i] / kphiderdisk;
586 irderdisk[
i] = rderdiskapprox[
i] / krderdisk;
589 if (iphiprojdisk[
i] <= 0)
609 phiprojdiskapprox[
i],
618 <<
"Trackpars " <<
layer_ <<
" " <<
rinv <<
" " << rinvapprox <<
" " << rinvapprox <<
" " << phi0 <<
" "
619 << phi0approx <<
" " << phi0approx <<
" " <<
t <<
" " << tapprox <<
" " << tapprox <<
" " <<
z0 <<
" "
620 << z0approx <<
" " << z0approx << endl;
651 <<
" Found LLL tracklet in sector = " <<
iSector_ <<
" phi0 = " << phi0;
658 ofstream
fout(
"seeds.txt", ofstream::app);
666 for (
unsigned int j = 0;
j <
toR_.size();
j++) {
679 for (
unsigned int j = 0;
j <
toZ_.size();
j++) {
683 if (disk == 2 && addL5)
685 if (disk == 1 && addL6)
701 const Stub* middleFPGAStub,
703 const Stub* outerFPGAStub,
707 <<
" trying stub triplet in (L2 D1 D2): " << innerFPGAStub->
layer().
value() <<
" "
713 double r1 = innerStub->
r();
714 double z1 = innerStub->
z();
715 double phi1 = innerStub->
phi();
717 double r2 = middleStub->
r();
718 double z2 = middleStub->
z();
719 double phi2 = middleStub->
phi();
721 double r3 = outerStub->
r();
722 double z3 = outerStub->
z();
723 double phi3 = outerStub->
phi();
764 double rinvapprox, phi0approx, d0approx, tapprox, z0approx;
766 double phiprojdiskapprox[
N_DISK], rprojdiskapprox[
N_DISK];
767 double phiderdiskapprox[
N_DISK], rderdiskapprox[
N_DISK];
778 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
779 phiprojapprox[
i] = phiproj[
i];
780 zprojapprox[
i] = zproj[
i];
781 phiderapprox[
i] = phider[
i];
782 zderapprox[
i] = zder[
i];
785 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
786 phiprojdiskapprox[
i] = phiprojdisk[
i];
787 rprojdiskapprox[
i] = rprojdisk[
i];
788 phiderdiskapprox[
i] = phiderdisk[
i];
789 rderdiskapprox[
i] = rderdisk[
i];
806 int irinv, iphi0, id0, it, iz0;
811 irinv = rinvapprox / krinv;
812 iphi0 = phi0approx / kphi0;
815 iz0 = z0approx / kz0;
820 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculator::DDL Seeding irinv too large: " << rinvapprox <<
"(" << irinv
838 double phicritapprox = phi0approx - asin(0.5 *
settings_.
rcrit() * rinvapprox);
839 int phicrit = iphi0 - 2 * irinv;
845 keep = (phicrit > iphicritmincut) && (phicrit < iphicritmaxcut);
848 if (
keep && !keepapprox)
849 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculatorDisplaced::DDLSeeding tracklet kept with exact phicrit cut "
850 "but not approximate, phicritapprox: "
863 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
864 iphiproj[
i] = phiprojapprox[
i] / kphiproj;
865 izproj[
i] = zprojapprox[
i] / kzproj;
867 iphider[
i] = phiderapprox[
i] / kphider;
868 izder[
i] = zderapprox[
i] / kzder;
879 if (iphiproj[
i] <= 0)
918 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
919 iphiprojdisk[
i] = phiprojdiskapprox[
i] / kphiprojdisk;
920 irprojdisk[
i] = rprojdiskapprox[
i] / krprojdisk;
922 iphiderdisk[
i] = phiderdiskapprox[
i] / kphiderdisk;
923 irderdisk[
i] = rderdiskapprox[
i] / krderdisk;
925 if (iphiprojdisk[
i] <= 0)
944 phiprojdiskapprox[
i],
953 <<
"Trackpars " <<
layer_ <<
" " <<
rinv <<
" " << rinvapprox <<
" " << rinvapprox <<
" " << phi0 <<
" "
954 << phi0approx <<
" " << phi0approx <<
" " <<
t <<
" " << tapprox <<
" " << tapprox <<
" " <<
z0 <<
" "
955 << z0approx <<
" " << z0approx << endl;
986 <<
" Found DDL tracklet in sector = " <<
iSector_ <<
" phi0 = " << phi0;
993 ofstream
fout(
"seeds.txt", ofstream::app);
999 for (
unsigned int j = 0;
j <
toR_.size();
j++) {
1008 for (
unsigned int j = 0;
j <
toZ_.size();
j++) {
1015 edm::LogVerbatim(
"Tracklet") <<
"adding disk projection " <<
j <<
"/" <<
toZ_.size() <<
" " << disk <<
" "
1027 const Stub* middleFPGAStub,
1029 const Stub* outerFPGAStub,
1033 <<
" trying stub triplet in (L2L3D1): " << middleFPGAStub->
layer().
value() <<
" "
1039 double r3 = innerStub->
r();
1040 double z3 = innerStub->
z();
1041 double phi3 = innerStub->
phi();
1043 double r1 = middleStub->
r();
1044 double z1 = middleStub->
z();
1045 double phi1 = middleStub->
phi();
1047 double r2 = outerStub->
r();
1048 double z2 = outerStub->
z();
1049 double phi2 = outerStub->
phi();
1082 z1 = innerFPGAStub->
zapprox();
1090 double rinvapprox, phi0approx, d0approx, tapprox, z0approx;
1092 double phiprojdiskapprox[
N_DISK], rprojdiskapprox[
N_DISK];
1093 double phiderdiskapprox[
N_DISK], rderdiskapprox[
N_DISK];
1104 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
1105 phiprojapprox[
i] = phiproj[
i];
1106 zprojapprox[
i] = zproj[
i];
1107 phiderapprox[
i] = phider[
i];
1108 zderapprox[
i] = zder[
i];
1111 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
1112 phiprojdiskapprox[
i] = phiprojdisk[
i];
1113 rprojdiskapprox[
i] = rprojdisk[
i];
1114 phiderdiskapprox[
i] = phiderdisk[
i];
1115 rderdiskapprox[
i] = rderdisk[
i];
1132 int irinv, iphi0, id0, it, iz0;
1137 irinv = rinvapprox / krinv;
1138 iphi0 = phi0approx / kphi0;
1141 iz0 = z0approx / kz0;
1146 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculator:: LLD Seeding irinv too large: " << rinvapprox <<
"(" << irinv
1164 double phicritapprox = phi0approx - asin(0.5 *
settings_.
rcrit() * rinvapprox);
1165 int phicrit = iphi0 - 2 * irinv;
1171 keep = (phicrit > iphicritmincut) && (phicrit < iphicritmaxcut);
1174 if (
keep && !keepapprox)
1175 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculatorDisplaced::LLDSeeding tracklet kept with exact phicrit cut "
1176 "but not approximate, phicritapprox: "
1189 for (
unsigned int i = 0;
i <
toR_.size(); ++
i) {
1190 iphiproj[
i] = phiprojapprox[
i] / kphiproj;
1191 izproj[
i] = zprojapprox[
i] / kzproj;
1193 iphider[
i] = phiderapprox[
i] / kphider;
1194 izder[
i] = zderapprox[
i] / kzder;
1204 if (iphiproj[
i] <= 0)
1243 for (
unsigned int i = 0;
i <
toZ_.size(); ++
i) {
1244 iphiprojdisk[
i] = phiprojdiskapprox[
i] / kphiprojdisk;
1245 irprojdisk[
i] = rprojdiskapprox[
i] / krprojdisk;
1247 iphiderdisk[
i] = phiderdiskapprox[
i] / kphiderdisk;
1248 irderdisk[
i] = rderdiskapprox[
i] / krderdisk;
1251 if (iphiprojdisk[
i] <= 0)
1271 phiprojdiskapprox[
i],
1280 <<
"Trackpars " <<
layer_ <<
" " <<
rinv <<
" " << rinvapprox <<
" " << rinvapprox <<
" " << phi0 <<
" "
1281 << phi0approx <<
" " << phi0approx <<
" " <<
t <<
" " << tapprox <<
" " << tapprox <<
" " <<
z0 <<
" "
1282 << z0approx <<
" " << z0approx << endl;
1313 <<
" Found LLD tracklet in sector = " <<
iSector_ <<
" phi0 = " << phi0;
1320 ofstream
fout(
"seeds.txt", ofstream::app);
1326 for (
unsigned int j = 0;
j <
toR_.size();
j++) {
1334 for (
unsigned int j = 0;
j <
toZ_.size();
j++) {
1341 edm::LogVerbatim(
"Tracklet") <<
"adding disk projection " <<
j <<
"/" <<
toZ_.size() <<
" " << disk;
1361 double rho = 1 /
rinv;
1365 phiproj = phi0 - asin((rproj * rproj + r0 * r0 - rho * rho) / (2 * rproj * r0));
1366 double beta = acos((rho * rho + r0 * r0 - rproj * rproj) / (2 * r0 * rho));
1370 phider = -0.5 *
rinv /
sqrt(1 -
pow(0.5 * rproj *
rinv, 2)) +
d0 / (rproj * rproj);
1374 edm::LogVerbatim(
"Tracklet") <<
"exact proj layer at " << rproj <<
" : " << phiproj <<
" " << zproj;
1396 double beta = (zproj -
z0) / (
t * rho);
1397 double phiV = atan2(-y0, -x0);
1398 double c =
rinv > 0 ? -1 : 1;
1400 double x = x0 + rho *
cos(phiV +
c *
beta);
1401 double y = y0 + rho *
sin(phiV +
c *
beta);
1403 phiproj = atan2(y, x);
1407 rproj =
sqrt(x * x + y * y);
1409 phider =
c /
t / (x * x + y * y) * (rho + x0 *
cos(phiV +
c *
beta) + y0 *
sin(phiV +
c *
beta));
1413 edm::LogVerbatim(
"Tracklet") <<
"exact proj disk at" << zproj <<
" : " << phiproj <<
" " << rproj;
1434 double phiprojdisk[
N_DISK],
1435 double rprojdisk[
N_DISK],
1438 double phiderdisk[
N_DISK],
1439 double rderdisk[
N_DISK]) {
1443 double x3 = r3 *
cos(phi3);
1447 double y3 = r3 *
sin(phi3);
1449 double k1 = -(
x2 -
x1) / (
y2 -
y1);
1450 double k2 = -(x3 -
x2) / (y3 -
y2);
1451 double b1 = 0.5 * (
y2 +
y1) - 0.5 * (
x1 +
x2) * k1;
1452 double b2 = 0.5 * (y3 +
y2) - 0.5 * (
x2 + x3) * k2;
1454 double y0 = (
b1 * k2 -
b2 * k1) / (k2 - k1);
1455 double x0 = (
b1 -
b2) / (k2 - k1);
1459 double R3 =
sqrt(
pow(x3 - x0, 2) +
pow(y3 - y0, 2));
1461 double eps1 =
std::abs(R1 / R2 - 1);
1462 double eps2 =
std::abs(R3 / R2 - 1);
1463 if (eps1 > 1
e-10 || eps2 > 1
e-10)
1464 edm::LogVerbatim(
"Tracklet") <<
"&&&&&&&&&&&& bad circle! " << R1 <<
"\t" << R2 <<
"\t" << R3;
1468 phi0 = 0.5 *
M_PI + atan2(y0, x0);
1472 d0 = -R1 +
sqrt(x0 * x0 + y0 * y0);
1488 double t12 = (
z2 - z1) /
std::abs(beta2 - beta1) / R1;
1489 double z12 = (z1 * beta2 -
z2 * beta1) / (beta2 - beta1);
1490 double t13 = (z3 - z1) /
std::abs(beta3 - beta1) / R1;
1491 double z13 = (z1 * beta3 - z3 * beta1) / (beta3 - beta1);
1506 for (
unsigned int i = 0;
i <
toR_.size();
i++) {
1507 exactproj(
toR_[
i],
rinv, phi0,
d0,
t,
z0,
sqrt(x0 * x0 + y0 * y0), phiproj[
i], zproj[
i], phider[
i], zder[
i]);
1510 for (
unsigned int i = 0;
i <
toZ_.size();
i++) {
1511 exactprojdisk(
toZ_[
i],
rinv, phi0,
d0,
t,
z0, x0, y0, phiprojdisk[
i], rprojdisk[
i], phiderdisk[
i], rderdisk[
i]);
std::vector< double > toZ_
std::vector< AllStubsMemory * > outerallstubs_
double phicritmaxmc() const
double rmindiskvm() const
unsigned int ntrackletmax() const
static const std::string input
void addProjection(int layer, int iphi, TrackletProjectionsMemory *trackletprojs, Tracklet *tracklet)
double krprojshiftdisk() const
std::vector< AllStubsMemory * > innerallstubs_
const FPGAWord & fpgaphiprojdisk(int disk) const
void addTracklet(Tracklet *tracklet)
std::vector< StubTripletsMemory * > stubtriplets_
int SS_phiL_shift() const
void init(Settings const &settings, int projlayer, double rproj, int iphiproj, int izproj, int iphider, int izder, double phiproj, double zproj, double phiprojder, double zprojder, double phiprojapprox, double zprojapprox, double phiprojderapprox, double zprojderapprox)
double phicritminmc() const
bool addLayerProj(Tracklet *tracklet, int layer)
std::vector< AllStubsMemory * > middleallstubs_
double rmean(unsigned int iLayer) const
Settings const & settings_
double phiapprox(double phimin, double) const
static constexpr float b2
bool validProj(int layer) const
int PS_rderD_shift() const
Sin< T >::type sin(const T &t)
static constexpr float b1
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
const FPGAWord & fpgazproj(int layer) const
Cos< T >::type cos(const T &t)
const FPGAWord & disk() const
std::string const & getName() const
std::vector< std::vector< TrackletProjectionsMemory * > > trackletprojlayers_
double zmean(unsigned int iDisk) const
void exacttracklet(double r1, double z1, double phi1, double r2, double z2, double phi2, double r3, double z3, double phi3, int take3, double &rinv, double &phi0, double &d0, double &t, double &z0, double phiproj[N_LAYER - 2], double zproj[N_LAYER - 2], double phiprojdisk[N_DISK], double rprojdisk[N_DISK], double phider[N_LAYER - 2], double zder[N_LAYER - 2], double phiderdisk[N_DISK], double rderdisk[N_DISK])
int SS_phiderD_shift() const
void exactprojdisk(double zproj, double rinv, double, double, double t, double z0, double x0, double y0, double &phiproj, double &rproj, double &phider, double &rder)
bool LLDSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *middleFPGAStub, const L1TStub *middleStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
unsigned int nbitsphiprojderL456() const
void addDiskProj(Tracklet *tracklet, int disk)
double rinv(double phi1, double phi2, double r1, double r2)
bool LLLSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *middleFPGAStub, const L1TStub *middleStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
IMATH_TrackletCalculator * ITC_L1L2()
unsigned int nzbitsstub(unsigned int layerdisk) const
int SS_phiderL_shift() const
unsigned int nphibitsstub(unsigned int layerdisk) const
void setTrackletIndex(int index)
double zproj_[N_DISK - 2]
double rproj_[N_LAYER - 2]
constexpr valType make0To2pi(valType angle)
std::vector< std::vector< TrackletProjectionsMemory * > > trackletprojdisks_
bool writeMonitorData(std::string module) const
std::vector< double > toR_
bool usephicritapprox() const
unsigned int nTracklets() const
void setTCIndex(int index)
std::ofstream & ofstream(std::string fname)
int SS_phiD_shift() const
void addProj(Tracklet *tracklet)
void exactproj(double rproj, double rinv, double phi0, double d0, double t, double z0, double r0, double &phiproj, double &zproj, double &phider, double &zder)
Log< level::Info, true > LogVerbatim
bool DDLSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *middleFPGAStub, const L1TStub *middleStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
void addOutput(MemoryBase *memory, std::string output) override
TrackletParametersMemory * trackletpars_
std::string const & getName() const
const FPGAWord & fpgaphiproj(int layer) const
unsigned int nallstubs(unsigned int layerdisk) const
bool debugTracklet() const
void addInput(MemoryBase *memory, std::string input) override
const FPGAWord & fpgarprojdisk(int disk) const
unsigned int maxStep(std::string module) const
int PS_zderL_shift() const
Power< A, B >::type pow(const A &a, const B &b)
Abs< T >::type abs(const T &t)
unsigned int nbitsphiprojderL123() const
const FPGAWord & layer() const
bool validProjDisk(int disk) const
static constexpr float d0
void addOutputProjection(TrackletProjectionsMemory *&outputProj, MemoryBase *memory)
void addProjectionDisk(int disk, int iphi, TrackletProjectionsMemory *trackletprojs, Tracklet *tracklet)
constexpr T reduceRange(T x)
void init(Settings const &settings, int projdisk, double zproj, int iphiproj, int irproj, int iphider, int irder, double phiproj, double rproj, double phiprojder, double rprojder, double phiprojapprox, double rprojapprox, double phiprojderapprox, double rprojderapprox)