|
|
Go to the documentation of this file.
17 TrackletCalculatorBase::TrackletCalculatorBase(
string name,
38 double phiprojdisk[
N_DISK],
46 rinv = 2 *
sin(deltaphi) / dist;
48 double phi1tmp = phi1 -
phimin_;
52 double rhopsi1 = 2 * asin(0.5 *
r1 *
rinv) /
rinv;
53 double rhopsi2 = 2 * asin(0.5 *
r2 *
rinv) /
rinv;
55 t = (z1 -
z2) / (rhopsi1 - rhopsi2);
57 z0 = z1 -
t * rhopsi1;
59 for (
unsigned int i = 0;
i <
N_LAYER - 2;
i++) {
71 for (
unsigned int i = 0;
i <
N_DISK;
i++) {
91 double phiproj[
N_DISK - 2],
99 rinv = 2 *
sin(deltaphi) / dist;
101 double phi1tmp = phi1 -
phimin_;
105 double rhopsi1 = 2 * asin(0.5 *
r1 *
rinv) /
rinv;
106 double rhopsi2 = 2 * asin(0.5 *
r2 *
rinv) /
rinv;
108 t = (z1 -
z2) / (rhopsi1 - rhopsi2);
110 z0 = z1 -
t * rhopsi1;
112 for (
unsigned int i = 0;
i <
N_DISK - 2;
i++) {
124 for (
unsigned int i = 0;
i <
N_DISK - 2;
i++) {
144 double phiproj[
N_DISK - 2],
146 double phider[
N_DISK - 2],
147 double rder[
N_DISK - 2]) {
152 rinv = 2 *
sin(deltaphi) / dist;
157 double phi1tmp = phi1 -
phimin_;
161 double rhopsi1 = 2 * asin(0.5 *
r1 *
rinv) /
rinv;
162 double rhopsi2 = 2 * asin(0.5 *
r2 *
rinv) /
rinv;
164 t = (z1 -
z2) / (rhopsi1 - rhopsi2);
166 z0 = z1 -
t * rhopsi1;
168 for (
int i = 0;
i < 4;
i++) {
172 for (
int i = 0;
i < 1;
i++) {
186 phiproj = phi0 - asin(0.5 * rproj *
rinv);
187 zproj =
z0 + (2 *
t /
rinv) * asin(0.5 * rproj *
rinv);
207 phiproj = phi0 -
tmp;
209 phider = -
rinv / (2 *
t);
223 int iphivmRaw = fpgaphi.
value() >> (fpgaphi.
nbits() - 5);
247 int iphivmRaw = fpgaphi.
value() >> (fpgaphi.
nbits() - 5);
259 if (trackletprojs ==
nullptr) {
262 <<
" iphi = " <<
iphi + 1;
266 assert(trackletprojs !=
nullptr);
267 trackletprojs->
addProj(tracklet);
276 if (trackletprojs ==
nullptr) {
281 <<
" iphi = " <<
iphi + 1;
285 assert(trackletprojs !=
nullptr);
286 trackletprojs->
addProj(tracklet);
307 double phicritapprox = phi0approx - asin(0.5 *
settings_.
rcrit() * rinvapprox);
310 int iphicrit = iphi0 - (irinv >> 8) * ifactor;
316 keep = (iphicrit > iphicritmincut) && (iphicrit < iphicritmaxcut);
318 if (keepapprox && !
keep)
320 <<
" Tracklet kept with exact phicrit cut but not approximate, phicritapprox: "
333 const Stub* outerFPGAStub,
337 <<
" trying stub pair in layer (inner outer): " << innerFPGAStub->
layer().
value()
345 double r1 = innerStub->
r();
346 double z1 = innerStub->
z();
347 double phi1 = innerStub->
phi();
349 double r2 = outerStub->
r();
350 double z2 = outerStub->
z();
351 double phi2 = outerStub->
phi();
388 double rinvapprox, phi0approx, tapprox, z0approx;
390 double phiprojdiskapprox[
N_DISK], rprojdiskapprox[
N_DISK];
485 int irinv, iphi0, it, iz0;
492 int ir1 = innerFPGAStub->
r().
value();
493 int iphi1 = innerFPGAStub->
phi().
value();
494 int iz1 = innerFPGAStub->
z().
value();
496 int ir2 = outerFPGAStub->
r().
value();
497 int iphi2 = outerFPGAStub->
phi().
value();
498 int iz2 = outerFPGAStub->
z().
value();
567 if (!
inSector(iphi0, irinv, phi0approx, rinvapprox))
570 for (
unsigned int i = 0;
i <
N_LAYER - 2; ++
i) {
580 if (iphiproj[
i] <= 0)
621 for (
unsigned int i = 0;
i <
N_DISK; ++
i) {
622 if (iphiprojdisk[
i] <= 0)
642 phiprojdiskapprox[
i],
652 <<
" " << phi0 <<
" " << phi0approx <<
" " << ITC->
phi0_final.
fval() <<
" " <<
t <<
" " << tapprox <<
" "
691 ofstream
fout(
"seeds.txt", ofstream::app);
719 for (
unsigned int j = 0;
j <
N_LAYER - 2;
j++) {
724 if (added && lproj == 3)
726 if (added && lproj == 4)
728 if (added && lproj == 5)
730 if (added && lproj == 6)
735 for (
unsigned int j = 0;
j <
N_DISK - 1;
j++) {
737 if (disk == 4 && addL3)
739 if (disk == 3 && addL4)
741 if (disk == 2 && addL5)
743 if (disk == 1 && addL6)
757 const Stub* outerFPGAStub,
760 edm::LogVerbatim(
"Tracklet") <<
"TrackletCalculator::execute calculate disk seeds";
767 int disk = innerFPGAStub->
disk().
value();
773 double r1 = innerStub->
r();
774 double z1 = innerStub->
z();
775 double phi1 = innerStub->
phi();
777 double r2 = outerStub->
r();
778 double z2 = outerStub->
z();
779 double phi2 = outerStub->
phi();
821 double rinvapprox, phi0approx, tapprox, z0approx;
823 double phiprojdiskapprox[
N_DISK - 2], rprojdiskapprox[
N_DISK - 2];
837 int signt =
t > 0 ? 1 : -1;
903 int irinv, iphi0, it, iz0;
908 int ir1 = innerFPGAStub->
r().
value();
909 int iphi1 = innerFPGAStub->
phi().
value();
910 int iz1 = innerFPGAStub->
z().
value();
912 int ir2 = outerFPGAStub->
r().
value();
913 int iphi2 = outerFPGAStub->
phi().
value();
914 int iz2 = outerFPGAStub->
z().
value();
970 if (!
inSector(iphi0, irinv, phi0approx, rinvapprox))
976 for (
unsigned int i = 0;
i <
N_DISK - 2; ++
i) {
986 if (iphiproj[
i] <= 0)
1018 for (
unsigned int i = 0;
i <
N_DISK - 2; ++
i) {
1020 if (iphiprojdisk[
i] <= 0)
1040 phiprojdiskapprox[
i],
1048 <<
"Trackpars " <<
layerdisk1_ - 5 <<
" " <<
rinv <<
" " << rinvapprox <<
" "
1088 ofstream
fout(
"seeds.txt", ofstream::app);
1102 for (
unsigned int j = 0;
j <
N_DISK - 2;
j++) {
1113 const Stub* outerFPGAStub,
1120 int disk = innerFPGAStub->
disk().
value();
1126 double r1 = innerStub->
r();
1127 double z1 = innerStub->
z();
1128 double phi1 = innerStub->
phi();
1130 double r2 = outerStub->
r();
1131 double z2 = outerStub->
z();
1132 double phi2 = outerStub->
phi();
1135 if (
r1 <
r2 + 1.5) {
1167 z1 = innerFPGAStub->
zapprox();
1175 double rinvapprox, phi0approx, tapprox, z0approx;
1177 double phiprojdiskapprox[
N_DISK - 1], rprojdiskapprox[
N_DISK - 1];
1181 if (ll == 1 && disk == 1)
1183 else if (ll == 2 && disk == 1)
1185 else if (ll == 1 && disk == -1)
1187 else if (ll == 2 && disk == -1)
1190 throw cms::Exception(
"LogicError") << __FILE__ <<
" " << __LINE__ <<
" Invalid seeding!";
1194 int signt =
t > 0 ? 1 : -1;
1265 int irinv, iphi0, it, iz0;
1269 int ir2 = innerFPGAStub->
r().
value();
1270 int iphi2 = innerFPGAStub->
phi().
value();
1271 int iz2 = innerFPGAStub->
z().
value();
1273 int ir1 = outerFPGAStub->
r().
value();
1274 int iphi1 = outerFPGAStub->
phi().
value();
1275 int iz1 = outerFPGAStub->
z().
value();
1344 if (!
inSector(iphi0, irinv, phi0approx, rinvapprox))
1350 for (
unsigned int i = 0;
i <
N_DISK - 2; ++
i) {
1360 if (iphiproj[
i] <= 0)
1384 for (
int i = 0;
i < 4; ++
i) {
1386 if (iphiprojdisk[
i] <= 0)
1406 phiprojdiskapprox[
i],
1415 << phi0 <<
" " << iphi0 <<
" " << ITC->
phi0_final.
fval() <<
" " <<
t <<
" " << it <<
" "
1454 ofstream
fout(
"seeds.txt", ofstream::app);
1468 for (
unsigned int disk = 2; disk < 6; disk++) {
1469 if (
layer == 2 && disk == 5)
constexpr unsigned int N_PSLAYER
VarAdjustK der_phiD_final
double phicritmaxmc() const
double rmindiskvm() const
IMATH_TrackletCalculator * ITC_L2L3()
void addProjectionDisk(int disk, int iphi, TrackletProjectionsMemory *trackletprojs, Tracklet *tracklet)
TrackletParametersMemory * trackletpars_
double krprojshiftdisk() const
const FPGAWord & fpgaphiprojdisk(int disk) const
void addTracklet(Tracklet *tracklet)
const FPGAWord & phi() 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, bool isPSseed=false)
double phicritminmc() const
bool calculate(int debug_level)
void addProjection(int layer, int iphi, TrackletProjectionsMemory *trackletprojs, Tracklet *tracklet)
double rmean(unsigned int iLayer) const
bool barrelSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
Settings const & settings_
double phiapprox(double phimin, double) const
IMATH_TrackletCalculatorDisk * ITC_B1B2()
std::vector< std::vector< TrackletProjectionsMemory * > > trackletprojlayers_
bool validProj(int layer) const
const FPGAWord & r() const
unsigned int nrbitsstub(unsigned int layerdisk) const
Sin< T >::type sin(const T &t)
IMATH_TrackletCalculatorOverlap * ITC_L1F1()
IMATH_TrackletCalculatorOverlap * ITC_L2B1()
const FPGAWord & fpgazproj(int layer) const
unsigned int projdisks(unsigned int iSeed, unsigned int i) const
Cos< T >::type cos(const T &t)
const FPGAWord & disk() const
const FPGAWord & z() const
unsigned int isPSmodule() const
IMATH_TrackletCalculatorDisk * ITC_F3F4()
void exactproj(double rproj, double rinv, double phi0, double t, double z0, double &phiproj, double &zproj, double &phider, double &zder)
VarAdjustK der_phiL_final
double zmean(unsigned int iDisk) const
void addDiskProj(Tracklet *tracklet, int disk)
VarAdjustK der_phiD_final
bool diskSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
bool addLayerProj(Tracklet *tracklet, int layer)
bool local_passes() const
constexpr std::array< uint8_t, layerIndexSize > layer
void setTrackletIndex(unsigned int index)
void exacttracklet(double r1, double z1, double phi1, double r2, double z2, double phi2, double, double &rinv, double &phi0, double &t, double &z0, double phiproj[N_LAYER - 2], double zproj[N_LAYER - 2], double phider[N_LAYER - 2], double zder[N_LAYER - 2], double phiprojdisk[N_DISK], double rprojdisk[N_DISK], double phiderdisk[N_DISK], double rderdisk[N_DISK])
double rinv(double phi1, double phi2, double r1, double r2)
IMATH_TrackletCalculator * ITC_L1L2()
unsigned int projlayers(unsigned int iSeed, unsigned int i) const
unsigned int nzbitsstub(unsigned int layerdisk) const
bool overlapSeeding(const Stub *innerFPGAStub, const L1TStub *innerStub, const Stub *outerFPGAStub, const L1TStub *outerStub)
std::vector< std::vector< TrackletProjectionsMemory * > > trackletprojdisks_
unsigned int nphibitsstub(unsigned int layerdisk) const
IMATH_TrackletCalculatorDisk * ITC_F1F2()
VarAdjustK der_phiL_final
void exacttrackletOverlap(double r1, double z1, double phi1, double r2, double z2, double phi2, double, double &rinv, double &phi0, double &t, double &z0, double phiprojLayer[N_PSLAYER], double zprojLayer[N_PSLAYER], double phiderLayer[N_PSLAYER], double zderLayer[N_PSLAYER], double phiproj[N_DISK - 2], double rproj[N_DISK - 2], double phider[N_DISK - 2], double rder[N_DISK - 2])
IMATH_TrackletCalculator * ITC_L5L6()
IMATH_TrackletCalculatorDisk * ITC_B3B4()
constexpr valType make0To2pi(valType angle)
void set_fval(double fval)
bool writeMonitorData(std::string module) const
unsigned int nTracklets() const
bool usephicritapprox() const
void setTCIndex(int index)
IMATH_TrackletCalculatorOverlap * ITC_L1B1()
std::ofstream & ofstream(std::string fname)
void addProj(Tracklet *tracklet)
Log< level::Info, true > LogVerbatim
bool inSector(int iphi0, int irinv, double phi0approx, double rinvapprox)
std::string const & getName() const
const FPGAWord & fpgaphiproj(int layer) const
unsigned int nallstubs(unsigned int layerdisk) const
bool debugTracklet() const
IMATH_TrackletCalculator * ITC_L3L4()
void exactprojdisk(double zproj, double rinv, double phi0, double t, double z0, double &phiproj, double &rproj, double &phider, double &rder)
const FPGAWord & fpgarprojdisk(int disk) const
Power< A, B >::type pow(const A &a, const B &b)
IMATH_TrackletCalculatorOverlap * ITC_L2F1()
Abs< T >::type abs(const T &t)
VarAdjustK der_phiL_final
const FPGAWord & layer() const
bool validProjDisk(int disk) const
void exacttrackletdisk(double r1, double z1, double phi1, double r2, double z2, double phi2, double, double &rinv, double &phi0, double &t, double &z0, double phiprojLayer[N_PSLAYER], double zprojLayer[N_PSLAYER], double phiderLayer[N_PSLAYER], double zderLayer[N_PSLAYER], double phiproj[N_DISK - 2], double rproj[N_DISK - 2], double phider[N_DISK - 2], double rder[N_DISK - 2])
VarAdjustK der_phiD_final
bool goodTrackPars(bool goodrinv, bool goodz0)
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)