18 phimatchcuttable_(settings),
19 zmatchcuttable_(settings),
20 rphicutPStable_(settings),
21 rphicut2Stable_(settings),
22 rcutPStable_(settings),
23 rcut2Stable_(settings),
25 rinvbendlut_(settings),
96 if (
output.find(
"matchout") != std::string::npos) {
105 throw cms::Exception(
"BadConfig") << __FILE__ <<
" " << __LINE__ <<
" could not find output: " <<
output;
113 if (
input ==
"allstubin") {
119 if (
input ==
"vmstubin") {
125 if (
input ==
"projin") {
131 throw cms::Exception(
"BadConfig") << __FILE__ <<
" " << __LINE__ <<
" could not find input: " <<
input;
159 unsigned int countme = 0;
160 unsigned int countall = 0;
161 unsigned int countsel = 0;
162 unsigned int countinputproj = 0;
164 unsigned int iprojmem = 0;
169 unsigned int iproj = 0;
174 countinputproj += inputproj->nTracklets();
204 bool projdone =
false;
215 unsigned int iMEbest = 0;
221 if (tcid < bestTCID) {
230 std::pair<Tracklet*, const Stub*> candmatch =
matchengines_[iMEbest].read();
232 const Stub* fpgastub = candmatch.second;
233 Tracklet* tracklet = candmatch.first;
236 if (oldTracklet !=
nullptr) {
241 oldTracklet = tracklet;
257 bool addedProjection =
false;
290 addedProjection =
true;
306 tmpProj__ = tmpProj_;
312 if (!projBuffNearFull) {
324 int overlapbits =
nvmbits_ + nextrabits;
326 unsigned int extrabits = fpgaphi.
bits(fpgaphi.
nbits() - overlapbits - nextrabits, nextrabits);
328 unsigned int ivmPlus =
iphi;
336 unsigned int ivmMinus =
iphi;
337 if (extrabits == 0 &&
iphi != 0) {
361 int signindex =
proj->proj(
layerdisk_).fpgarzprojder().value() < 0;
371 unsigned int slot =
proj->proj(
layerdisk_).fpgarzbin1projvm().value();
374 unsigned int projfinephi =
378 bool isPSseed =
proj->PSseed();
386 bool usefirstMinus = stubmem->
nStubsBin(ivmMinus *
nbins + slot) != 0;
388 bool usefirstPlus = ivmPlus != ivmMinus && stubmem->
nStubsBin(ivmPlus *
nbins + slot) != 0;
389 bool usesecondPlus = ivmPlus != ivmMinus && (
second && (stubmem->
nStubsBin(ivmPlus *
nbins + slot + 1) != 0));
391 good_ = usefirstPlus || usesecondPlus || usefirstMinus || usesecondMinus;
418 projdone =
true && !good_ && !good__;
432 <<
" " << countme <<
" " << countinputproj << endl;
448 int ir = fpgastub->
r().
value();
449 int iphi =
proj.fpgaphiproj().value();
453 int iz =
proj.fpgarzproj().value();
457 int ideltaz = fpgastub->
z().
value() - iz;
462 double phi = stub->
phi();
463 double r = stub->
r();
464 double z = stub->
z();
483 double dz = z - (
proj.rzproj() + dr *
proj.rzprojder());
487 double dzapprox = z - (
proj.rzprojapprox() + dr *
proj.rzprojderapprox());
489 int seedindex = tracklet->
getISeed();
511 <<
layerdisk_ + 1 <<
" " << seedindex <<
" " <<
pt <<
" " 531 throw cms::Exception(
"LogicError") <<
"WARNING dphi and/or dphiapprox too large : " << dphi <<
" " << dphiapprox
572 assert(stub->
z() * tracklet->
t() > 0.0);
574 int sign = (tracklet->
t() > 0.0) ? 1 : -1;
580 int iz = fpgastub->
z().
value();
584 int iphi =
proj.fpgaphiproj().value();
589 int ir =
proj.fpgarzproj().value();
595 int irstub = fpgastub->
r().
value();
613 ideltaphi += iphialphacor;
618 double phi = stub->
phi();
619 double z = stub->
z();
620 double r = stub->
r();
642 double phiproj =
proj.phiproj() +
dz *
proj.phiprojder();
643 double rproj =
proj.rzproj() +
dz *
proj.rzprojder();
644 double deltar = r - rproj;
646 double dr = stub->
r() - rproj;
647 double drapprox = stub->
r() - (
proj.rzprojapprox() +
dz *
proj.rzprojderapprox());
653 double drphi = dphi * stub->
r();
654 double drphiapprox = dphiapprox * stub->
r();
666 int seedindex = tracklet->
getISeed();
689 bool imatch = (
std::abs(ideltaphi * irstub) < idrphicut) && (
std::abs(ideltar) < idrcut);
724 drphiapprox / stub->
r(),
Log< level::Info, true > LogVerbatim
void initBendMatch(unsigned int layerdisk)
constexpr unsigned int N_RZBITS
unsigned int maxStep(std::string module) const
const FPGAWord & r() const
const Residual & resid(unsigned int layerdisk)
unsigned int projrinv() const
double kphiderdisk() const
void initmatchcut(unsigned int layerdisk, MatchType type, unsigned int region)
double rDSSinner(unsigned int iBin) const
constexpr T reduceRange(T x)
void addInput(MemoryBase *memory, std::string input) override
double phiapprox(double phimin, double) const
std::vector< MatchEngineUnit > matchengines_
constexpr unsigned int NRINVBITS
const FPGAWord & z() const
void initProjectionBend(double k_phider, unsigned int idisk, unsigned int nrbits, unsigned int nphiderbits)
double dphisectorHG() const
unsigned int projfinephi() const
Projection & proj(int layerdisk)
Settings const & settings_
TrackletLUT phimatchcuttable_
int lookup(unsigned int index) const
std::vector< TrackletProjectionsMemory * > inputprojs_
constexpr unsigned int N_DSS_MOD
static std::string const input
unsigned int isPSmodule() const
void addMatch(unsigned int layerdisk, int ideltaphi, int ideltarz, double dphi, double drz, double dphiapprox, double drzapprox, int stubid, const trklet::Stub *stubptr)
U second(std::pair< T, U > const &p)
unsigned int nbitsallstubs(unsigned int layerdisk) const
double half2SmoduleWidth() const
unsigned int nzbitsstub(unsigned int layerdisk) const
unsigned int nphibitsstub(unsigned int layerdisk) const
double rmean(unsigned int iLayer) const
double rDSSouter(unsigned int iBin) const
bool use(unsigned int nextrzbin, unsigned int nextiphibin) const
std::vector< FullMatchMemory * > fullmatches_
VarAdjustK der_phiD_final
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Abs< T >::type abs(const T &t)
Tracklet * getTracklet(unsigned int i)
IMATH_TrackletCalculator * ITC_L1L2()
bool doMultipleMatches() const
std::string const & getName() const
unsigned int nbitsvmme(unsigned int layerdisk) const
CircularBuffer< ProjectionTemp > inputProjBuffer_
bool writeMonitorData(std::string module) const
Log< level::Warning, true > LogPrint
double zmean(unsigned int iDisk) const
void initLayerDisk(unsigned int pos, int &layer, int &disk)
const FPGAWord & stubindex() const
TrackletLUT rphicutPStable_
unsigned int nallstubs(unsigned int layerdisk) const
bool debugTracklet() const
bool matchCalculator(Tracklet *tracklet, const Stub *fpgastub, bool print, unsigned int istep)
unsigned int iphi() const
TrackletLUT rphicut2Stable_
unsigned int nTracklets() const
unsigned int slot() const
int ialphafactinner_[N_DSS_MOD *2]
bool stubtruthmatch(const L1TStub *stub)
void addOutput(MemoryBase *memory, std::string output) override
constexpr unsigned int NFINEPHIBITS
unsigned int getISeed(const std::string &name)
unsigned int nvmme(unsigned int layerdisk) const
const FPGAWord & alpha() const
bool match(unsigned int layerdisk)
void execute(unsigned int iSector, double phimin)
unsigned int nMatchEngines_
std::ofstream & ofstream(std::string fname)
static unsigned int const shift
double krprojshiftdisk() const
const FPGAWord & phi() const
std::vector< VMStubsMEMemory * > vmstubs_
unsigned int nStubsBin(unsigned int bin) const
unsigned int bits(unsigned int lsb, unsigned int nbit) const
std::string const & getName() const
AllStubsMemory * allstubs_
TrackletLUT zmatchcuttable_
int ialphafactouter_[N_DSS_MOD *2]
constexpr unsigned int N_BITSMEMADDRESS
Log< level::Error, true > LogProblem