From 983a89c5d5eb7f005fe389b148c19e72f0721313 Mon Sep 17 00:00:00 2001 From: Louise Skinnari Date: Fri, 7 May 2021 17:25:04 +0200 Subject: [PATCH] apply code formats --- .../interface/KFTrackletTrack.h | 10 +- .../interface/L1fittedTrack.h | 10 +- L1Trigger/TrackFindingTMTT/src/KFbase.cc | 12 +- L1Trigger/TrackFindingTMTT/src/Settings.cc | 2 +- .../interface/MatchCalculator.h | 4 +- .../interface/MatchEngine.h | 3 +- .../interface/MatchEngineUnit.h | 14 +- .../interface/MatchProcessor.h | 4 +- .../interface/ProjectionRouter.h | 2 +- .../TrackFindingTracklet/interface/Settings.h | 48 +- .../interface/TrackletConfigBuilder.h | 2 - .../interface/TrackletLUT.h | 71 +-- .../interface/TrackletProcessor.h | 5 +- .../TrackFindingTracklet/interface/Util.h | 2 +- .../TrackFindingTracklet/interface/VMRouter.h | 10 +- .../interface/VMRouterCM.h | 4 +- .../interface/VMStubsTEMemory.h | 2 +- .../plugins/L1FPGATrackProducer.cc | 9 +- .../TrackFindingTracklet/src/FitTrack.cc | 2 +- .../TrackFindingTracklet/src/HybridFit.cc | 48 +- .../src/MatchCalculator.cc | 29 +- .../TrackFindingTracklet/src/MatchEngine.cc | 9 +- .../src/MatchEngineUnit.cc | 24 +- .../src/MatchProcessor.cc | 290 ++++++----- .../src/ProjectionRouter.cc | 11 +- L1Trigger/TrackFindingTracklet/src/Sector.cc | 2 +- .../src/TrackletConfigBuilder.cc | 17 +- .../src/TrackletEngine.cc | 78 ++- .../src/TrackletEngineUnit.cc | 9 +- .../TrackFindingTracklet/src/TrackletLUT.cc | 470 +++++++++--------- .../src/TrackletProcessor.cc | 59 +-- .../TrackFindingTracklet/src/VMRouter.cc | 62 ++- .../TrackFindingTracklet/src/VMRouterCM.cc | 33 +- .../src/VMStubsTEMemory.cc | 20 +- 34 files changed, 703 insertions(+), 674 deletions(-) diff --git a/L1Trigger/TrackFindingTMTT/interface/KFTrackletTrack.h b/L1Trigger/TrackFindingTMTT/interface/KFTrackletTrack.h index 293a397b5834f..997e02baf7ccc 100644 --- a/L1Trigger/TrackFindingTMTT/interface/KFTrackletTrack.h +++ b/L1Trigger/TrackFindingTMTT/interface/KFTrackletTrack.h @@ -46,11 +46,11 @@ namespace tmtt { unsigned int iPhiSec, unsigned int iEtaReg, bool accepted = true, - bool done_bcon = false, - float qOverPt_bcon = 0., - float d0_bcon = 0., - float phi0_bcon = 0., - float chi2rphi_bcon = 0.) + bool done_bcon = false, + float qOverPt_bcon = 0., + float d0_bcon = 0., + float phi0_bcon = 0., + float chi2rphi_bcon = 0.) : l1track3D_(l1track3D), stubs_(stubs), hitPattern_(hitPattern), diff --git a/L1Trigger/TrackFindingTMTT/interface/L1fittedTrack.h b/L1Trigger/TrackFindingTMTT/interface/L1fittedTrack.h index 834841dd5f9b8..3461554157a5e 100644 --- a/L1Trigger/TrackFindingTMTT/interface/L1fittedTrack.h +++ b/L1Trigger/TrackFindingTMTT/interface/L1fittedTrack.h @@ -163,11 +163,11 @@ namespace tmtt { iPhiSec(), iEtaReg(), accepted(), - done_bcon(), - qOverPt_bcon(), - d0_bcon(), - phi0_bcon(), - chi2rphi_bcon()); + done_bcon(), + qOverPt_bcon(), + d0_bcon(), + phi0_bcon(), + chi2rphi_bcon()); return trk_; } diff --git a/L1Trigger/TrackFindingTMTT/src/KFbase.cc b/L1Trigger/TrackFindingTMTT/src/KFbase.cc index aa1aa30825d99..7096e8c088272 100644 --- a/L1Trigger/TrackFindingTMTT/src/KFbase.cc +++ b/L1Trigger/TrackFindingTMTT/src/KFbase.cc @@ -103,12 +103,12 @@ namespace tmtt { double chi2rphi_bcon = 0.; TVectorD trackPars_bcon = trackParams_BeamConstr(cand, chi2rphi_bcon); - // Check scaled chi2 cut - vector kfLayerVsChiSqCut = settings_->kfLayerVsChiSq5(); - double chi2scaled = chi2rphi_bcon / settings_->kalmanChi2RphiScale() + fitTrk.chi2rz(); - bool accepted = true; - if (chi2scaled > kfLayerVsChiSqCut[cand->nStubLayers()]) - accepted = false; + // Check scaled chi2 cut + vector kfLayerVsChiSqCut = settings_->kfLayerVsChiSq5(); + double chi2scaled = chi2rphi_bcon / settings_->kalmanChi2RphiScale() + fitTrk.chi2rz(); + bool accepted = true; + if (chi2scaled > kfLayerVsChiSqCut[cand->nStubLayers()]) + accepted = false; fitTrk.setBeamConstr(trackPars_bcon[QOVERPT], trackPars_bcon[PHI0], chi2rphi_bcon, accepted); } diff --git a/L1Trigger/TrackFindingTMTT/src/Settings.cc b/L1Trigger/TrackFindingTMTT/src/Settings.cc index aa7c3ad3b162a..0ef20fd660574 100644 --- a/L1Trigger/TrackFindingTMTT/src/Settings.cc +++ b/L1Trigger/TrackFindingTMTT/src/Settings.cc @@ -42,7 +42,7 @@ namespace tmtt { //kalmanDebugLevel_(2), // Good for debugging kalmanMinNumStubs_(4), kalmanMaxNumStubs_(6), - kalmanAddBeamConstr_(false), // Apply post-fit beam-spot constraint to 5-param fit + kalmanAddBeamConstr_(false), // Apply post-fit beam-spot constraint to 5-param fit kalmanRemove2PScut_(true), kalmanMaxSkipLayersHard_(1), // On "hard" input tracks kalmanMaxSkipLayersEasy_(2), // On "easy" input tracks diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchCalculator.h b/L1Trigger/TrackFindingTracklet/interface/MatchCalculator.h index e2ce9a3a24f3b..3c8a0a6bd0165 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchCalculator.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchCalculator.h @@ -44,12 +44,12 @@ namespace trklet { TrackletLUT phimatchcuttable_; TrackletLUT zmatchcuttable_; - + TrackletLUT rphicutPStable_; TrackletLUT rphicut2Stable_; TrackletLUT rcutPStable_; TrackletLUT rcut2Stable_; - + int ialphafactinner_[N_DSS_MOD * 2]; int ialphafactouter_[N_DSS_MOD * 2]; diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h b/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h index 6c6ccac14643b..58d667de2f310 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchEngine.h @@ -35,11 +35,10 @@ namespace trklet { bool barrel_; - unsigned int nrinv_; //number of bits for rinv in stub bend LUT + unsigned int nrinv_; //number of bits for rinv in stub bend LUT //LUT for bend consistency TrackletLUT luttable_; - }; }; // namespace trklet diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h b/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h index 6c62b694f502d..95fd87edd6939 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchEngineUnit.h @@ -15,7 +15,7 @@ namespace trklet { class Stub; class L1TStub; class TrackletLUT; - + class MatchEngineUnit { public: MatchEngineUnit(bool barrel, unsigned int layerdisk, const TrackletLUT& luttable); @@ -36,12 +36,12 @@ namespace trklet { bool usesecondPlus, bool isPSseed, Tracklet* proj, - bool print); + bool print); bool empty() const { return candmatches_.empty(); } int TCID() const; - + std::pair read() { return candmatches_.read(); } std::pair peek() const { return candmatches_.peek(); } @@ -50,11 +50,11 @@ namespace trklet { bool idle() const { return idle_; } - bool active() const { return !idle_||goodpair_||goodpair__||!empty(); } + bool active() const { return !idle_ || goodpair_ || goodpair__ || !empty(); } bool have_() const { return havepair_; } bool have__() const { return havepair__; } - + void reset(); unsigned int rptr() const { return candmatches_.rptr(); } @@ -84,7 +84,7 @@ namespace trklet { bool idle_; unsigned int layerdisk_; - + //LUT for bend consistency with rinv const TrackletLUT& luttable_; @@ -92,7 +92,7 @@ namespace trklet { std::pair tmppair_, tmppair__; bool goodpair_, goodpair__; bool havepair_, havepair__; - + //save the candidate matches CircularBuffer> candmatches_; }; diff --git a/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h b/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h index 1a2c1a26cd834..78b9573734922 100644 --- a/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h +++ b/L1Trigger/TrackFindingTracklet/interface/MatchProcessor.h @@ -58,7 +58,7 @@ namespace trklet { TrackletLUT rphicut2Stable_; TrackletLUT rcutPStable_; TrackletLUT rcut2Stable_; - + int nrbits_; int nphiderbits_; @@ -77,7 +77,7 @@ namespace trklet { //LUT for bend consistency TrackletLUT luttable_; - + double phimin_; unsigned int nMatchEngines_; diff --git a/L1Trigger/TrackFindingTracklet/interface/ProjectionRouter.h b/L1Trigger/TrackFindingTracklet/interface/ProjectionRouter.h index 4f59d4fb1a342..230de71eb656d 100644 --- a/L1Trigger/TrackFindingTracklet/interface/ProjectionRouter.h +++ b/L1Trigger/TrackFindingTracklet/interface/ProjectionRouter.h @@ -29,7 +29,7 @@ namespace trklet { int nrbits_; int nphiderbits_; - + //disk projectionrinv table TrackletLUT rinvbendlut_; diff --git a/L1Trigger/TrackFindingTracklet/interface/Settings.h b/L1Trigger/TrackFindingTracklet/interface/Settings.h index f241b00744481..2bc340601e611 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Settings.h +++ b/L1Trigger/TrackFindingTracklet/interface/Settings.h @@ -35,20 +35,20 @@ namespace trklet { constexpr unsigned int N_RZBITS = 3; //number of bit for the r/z bins constexpr unsigned int N_PHIBITS = 3; //number of bit for the phi bins - constexpr unsigned int N_VMSTUBSMAX = 15; // maximum number of stubs in VM bin - constexpr unsigned int N_BITSMEMADDRESS = 7; // Number of bits for address in memories + constexpr unsigned int N_VMSTUBSMAX = 15; // maximum number of stubs in VM bin + constexpr unsigned int N_BITSMEMADDRESS = 7; // Number of bits for address in memories constexpr double sixth = 1.0 / 6.0; //Commonly used factor constexpr double third = 1.0 / 3.0; //Commonly used factor - constexpr double VMROUTERCUTZL2 = 50.0; //Min L2 z for inner allstub - constexpr double VMROUTERCUTZL1L3L5 = 95.0; //Max z for inner barrel layers - constexpr double VMROUTERCUTZL1 = 70.0; //Max z for L1 barrel seeding - constexpr double VMROUTERCUTRD1D3 = 55.0; //Max r for disk seeds + constexpr double VMROUTERCUTZL2 = 50.0; //Min L2 z for inner allstub + constexpr double VMROUTERCUTZL1L3L5 = 95.0; //Max z for inner barrel layers + constexpr double VMROUTERCUTZL1 = 70.0; //Max z for L1 barrel seeding + constexpr double VMROUTERCUTRD1D3 = 55.0; //Max r for disk seeds enum Seed { L1L2 = 0, L2L3, L3L4, L5L6, D1D2, D3D4, L1D1, L2D1, L2L3L4, L4L5L6, L2L3D1, D1D2L2 }; enum LayerDisk { L1 = 0, L2, L3, L4, L5, L6, D1, D2, D3, D4, D5 }; - + class Settings { public: Settings() { @@ -279,7 +279,7 @@ namespace trklet { void setNbitsseedextended(unsigned int nbitsseed) { nbitsseedextended_ = nbitsseed; } double dphisectorHG() const { - //These values are used in the DTC emulation code. + //These values are used in the DTC emulation code. double rsectmin = 21.8; double rsectmax = 112.7; return 2 * M_PI / N_SECTOR + rinvmax() * std::max(rcrit_ - rsectmin, rsectmax - rcrit_); @@ -416,13 +416,13 @@ namespace trklet { assert(bendcut > 0.0); return bendcut; } - + const std::vector& dtcLayers(const std::string& dtcName) const { - auto iter=dtclayers_.find(dtcName); - assert(iter!=dtclayers_.end()); + auto iter = dtclayers_.find(dtcName); + assert(iter != dtclayers_.end()); return iter->second; } - + double bendcutte(int ibend, int layerdisk, bool isPSmodule) const { return bendcut(ibend, layerdisk, isPSmodule); } double bendcutme(int ibend, int layerdisk, bool isPSmodule) const { @@ -478,17 +478,17 @@ namespace trklet { {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1}}}}; std::map > dtclayers_{{"PS10G_1", {0, 6, 8, 10}}, - {"PS10G_2", {0, 7, 9}}, - {"PS10G_3", {1, 7}}, - {"PS10G_4", {6, 8, 10}}, - {"PS_1", {2, 7}}, - {"PS_2", {2, 9}}, - {"2S_1", {3, 4}}, - {"2S_2", {4}}, - {"2S_3", {5}}, - {"2S_4", {5, 8}}, - {"2S_5", {6, 9}}, - {"2S_6", {7, 10}}}; + {"PS10G_2", {0, 7, 9}}, + {"PS10G_3", {1, 7}}, + {"PS10G_4", {6, 8, 10}}, + {"PS_1", {2, 7}}, + {"PS_2", {2, 9}}, + {"2S_1", {3, 4}}, + {"2S_2", {4}}, + {"2S_3", {5}}, + {"2S_4", {5, 8}}, + {"2S_5", {6, 9}}, + {"2S_6", {7, 10}}}; double rmindiskvm_{22.5}; double rmaxdiskvm_{67.0}; @@ -752,7 +752,7 @@ namespace trklet { //Number of processing steps for one event (108=18TM*240MHz/40MHz) std::unordered_map maxstep_{{"IR", 168}, //IR will run at a higher clock speed to handle - //input links running at 25 Gbits/s + //input links running at 25 Gbits/s {"VMR", 108}, {"TE", 108}, {"TC", 108}, diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletConfigBuilder.h b/L1Trigger/TrackFindingTracklet/interface/TrackletConfigBuilder.h index 24894a51a11a4..64cc428205da8 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletConfigBuilder.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletConfigBuilder.h @@ -54,7 +54,6 @@ namespace trklet { //Projection router name std::string PRName(unsigned int ilayer, unsigned int ireg); - private: // // Method to initialize the regions and VM in each layer @@ -107,7 +106,6 @@ namespace trklet { // double rinv(double r1, double phi1, double r2, double phi2); - //StubPair Name std::string SPName(unsigned int l1, unsigned int ireg1, diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletLUT.h b/L1Trigger/TrackFindingTracklet/interface/TrackletLUT.h index 3d480f0c54adb..f37b8a909d498 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletLUT.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletLUT.h @@ -10,74 +10,87 @@ namespace trklet { class Settings; class TrackletLUT { - public: - + public: TrackletLUT(const Settings& settings); TrackletLUT& operator=(const TrackletLUT& other) { - name_ = other.name_; table_ = other.table_; nbits_ = other.nbits_; positive_ = other.positive_; - + return *this; } - + ~TrackletLUT() = default; enum MatchType { barrelphi, barrelz, disk2Sphi, disk2Sr, diskPSphi, diskPSr }; - + //region only used for name - should be removed void initmatchcut(unsigned int layerdisk, MatchType type, unsigned int region); - void initTPlut(bool fillInner, unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, - unsigned int nbitsfinephidiff, unsigned int iTP); - - 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); - - 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); + void initTPlut(bool fillInner, + unsigned int iSeed, + unsigned int layerdisk1, + unsigned int layerdisk2, + unsigned int nbitsfinephidiff, + unsigned int iTP); + + 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); + + 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); - void initProjectionBend(double k_phider, unsigned int idisk, unsigned int nrbits, unsigned int nphiderbits); - + void initBendMatch(unsigned int layerdisk); - + enum VMRTableType { me, disk, inner, inneroverlap, innerthird }; //region only used for name - should be removed - void initVMRTable(unsigned int layerdisk, VMRTableType type, int region=-1); + void initVMRTable(unsigned int layerdisk, VMRTableType type, int region = -1); void initPhiCorrTable(unsigned int layerdisk, unsigned int rbits); void writeTable() const; - + int lookup(unsigned int index) const; unsigned int size() const { return table_.size(); } private: - - int getphiCorrValue(unsigned int layerdisk, unsigned int ibend, unsigned int irbin, - double rmean, double dr, double drmax) const; + int getphiCorrValue( + unsigned int layerdisk, unsigned int ibend, unsigned int irbin, double rmean, double dr, double drmax) const; int getVMRLookup(unsigned int layerdisk, double z, double r, double dz, double dr, int iseed = -1) const; - + const Settings& settings_; - + std::string name_; std::vector table_; unsigned int nbits_; - + bool positive_; - }; }; // namespace trklet #endif diff --git a/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h b/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h index fd9fd6da8f03a..3f1ff60cc1b83 100644 --- a/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h +++ b/L1Trigger/TrackFindingTracklet/interface/TrackletProcessor.h @@ -66,9 +66,8 @@ namespace trklet { unsigned int nbitsrzbin_; - TrackletLUT innerTable_; //projection to next layer/disk - TrackletLUT innerOverlapTable_; //projection to disk from layer - + TrackletLUT innerTable_; //projection to next layer/disk + TrackletLUT innerOverlapTable_; //projection to disk from layer }; }; // namespace trklet diff --git a/L1Trigger/TrackFindingTracklet/interface/Util.h b/L1Trigger/TrackFindingTracklet/interface/Util.h index 31fc468e9c12a..ebed711199537 100644 --- a/L1Trigger/TrackFindingTracklet/interface/Util.h +++ b/L1Trigger/TrackFindingTracklet/interface/Util.h @@ -138,7 +138,7 @@ namespace trklet { //Open file - create directory if not existent. inline std::ofstream openfile(const std::string& dir, const std::string& fname, const char* file, int line) { if (dirExists(dir) != 1) { - edm::LogVerbatim("Tracklet") << "Creating directory : " << dir; + edm::LogVerbatim("Tracklet") << "Creating directory : " << dir; int fail = system((std::string("mkdir -p ") + dir).c_str()); if (fail) { throw cms::Exception("BadDir") << file << " " << line << " could not create directory " << dir; diff --git a/L1Trigger/TrackFindingTracklet/interface/VMRouter.h b/L1Trigger/TrackFindingTracklet/interface/VMRouter.h index ab1390490286f..b3c96d33384fe 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMRouter.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMRouter.h @@ -55,11 +55,11 @@ namespace trklet { int nbitszfinebintable_; int nbitsrfinebintable_; - TrackletLUT meTable_; //used for ME and outer TE barrel - TrackletLUT diskTable_; //outer disk used by D1, D2, and D4 - TrackletLUT innerTable_; //projection to next layer/disk - TrackletLUT innerOverlapTable_; //projection to disk from layer - TrackletLUT innerThirdTable_; //projection to disk1 for extended - iseed=10 + TrackletLUT meTable_; //used for ME and outer TE barrel + TrackletLUT diskTable_; //outer disk used by D1, D2, and D4 + TrackletLUT innerTable_; //projection to next layer/disk + TrackletLUT innerOverlapTable_; //projection to disk from layer + TrackletLUT innerThirdTable_; //projection to disk1 for extended - iseed=10 //The input stub memories the two tmp inputs are used to build the order needed in HLS std::vector stubinputs_, stubinputtmp_, stubinputdisk2stmp_; diff --git a/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h b/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h index 6d31e5f1d5d9c..2f6a468576361 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMRouterCM.h @@ -54,8 +54,8 @@ namespace trklet { unsigned int nvmmebins_; //number of long z/r bins in VM - TrackletLUT meTable_; //used for ME and outer TE barrel - TrackletLUT diskTable_; //outer disk used by D1, D2, and D4 + TrackletLUT meTable_; //used for ME and outer TE barrel + TrackletLUT diskTable_; //outer disk used by D1, D2, and D4 //The input stub memories std::vector stubinputs_; diff --git a/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h b/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h index e487b37458d25..f8bb8c7f54545 100644 --- a/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h +++ b/L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h @@ -63,7 +63,7 @@ namespace trklet { bool isinner_; // is inner layer/disk for TE purpose TrackletLUT bendtable_; - + std::vector stubsvm_; std::vector > stubsbinnedvm_; }; diff --git a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc index ad83e1ec15f16..e18d67d8d5d39 100644 --- a/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc +++ b/L1Trigger/TrackFindingTracklet/plugins/L1FPGATrackProducer.cc @@ -460,10 +460,11 @@ void L1FPGATrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe assert(layerdisk != -1); //Get the 36 bit word - skip the lowest 3 buts (status and layer code) - constexpr int DTCLinkWordSize = 64; - constexpr int StubWordSize = 36; - constexpr int LayerandStatusCodeSize = 3; - string stubword = stub.second.to_string().substr(DTCLinkWordSize - StubWordSize - LayerandStatusCodeSize, StubWordSize); + constexpr int DTCLinkWordSize = 64; + constexpr int StubWordSize = 36; + constexpr int LayerandStatusCodeSize = 3; + string stubword = + stub.second.to_string().substr(DTCLinkWordSize - StubWordSize - LayerandStatusCodeSize, StubWordSize); string stubwordhex = ""; //Loop over the 9 words in the 36 bit stub word diff --git a/L1Trigger/TrackFindingTracklet/src/FitTrack.cc b/L1Trigger/TrackFindingTracklet/src/FitTrack.cc index 82b877da25947..7b1a9eca7a504 100644 --- a/L1Trigger/TrackFindingTracklet/src/FitTrack.cc +++ b/L1Trigger/TrackFindingTracklet/src/FitTrack.cc @@ -989,7 +989,7 @@ void FitTrack::execute(unsigned int iSector) { std::vector trackstublist; std::vector> stubidslist; - if ((bestTracklet->getISeed() >= (int)N_SEED_PROMPT && nMatchesUniq >= 1) || + if ((bestTracklet->getISeed() >= (int)N_SEED_PROMPT && nMatchesUniq >= 1) || nMatchesUniq >= 2) { //For seeds index >=8 (triplet seeds), there are three stubs associated from start. countFit++; diff --git a/L1Trigger/TrackFindingTracklet/src/HybridFit.cc b/L1Trigger/TrackFindingTracklet/src/HybridFit.cc index 82b6233e31c14..883af81dcbee2 100644 --- a/L1Trigger/TrackFindingTracklet/src/HybridFit.cc +++ b/L1Trigger/TrackFindingTracklet/src/HybridFit.cc @@ -195,7 +195,7 @@ void HybridFit::Fit(Tracklet* tracklet, std::vector& trackstublist) << ", phi0 = " << trk.phi0() << ", eta = " << trk.eta() << ", z0 = " << trk.z0() << ", chi2 = " << trk.chi2() << ", accepted = " << trk.accepted(); - double d0,chi2rphi,phi0,qoverpt = -999; + double d0, chi2rphi, phi0, qoverpt = -999; if (trk.done_bcon()) { d0 = trk.d0_bcon(); chi2rphi = trk.chi2rphi_bcon(); @@ -208,7 +208,7 @@ void HybridFit::Fit(Tracklet* tracklet, std::vector& trackstublist) qoverpt = trk.qOverPt(); } - // Tracklet wants phi0 with respect to lower edge of sector, not global phi0. + // Tracklet wants phi0 with respect to lower edge of sector, not global phi0. double phi0fit = reco::reduceRange(phi0 - iSector_ * 2 * M_PI / N_SECTOR + 0.5 * settings_.dphisectorHG()); double rinvfit = 0.01 * settings_.c() * settings_.bfield() * qoverpt; @@ -229,28 +229,28 @@ void HybridFit::Fit(Tracklet* tracklet, std::vector& trackstublist) } tracklet->setFitPars(rinvfit, - phi0fit, - d0, - trk.tanLambda(), - trk.z0(), - chi2rphi, - trk.chi2rz(), - rinvfit, - phi0fit, - d0, - trk.tanLambda(), - trk.z0(), - chi2rphi, - trk.chi2rz(), - irinvfit, - iphi0fit, - id0fit, - itanlfit, - iz0fit, - ichi2rphifit, - ichi2rzfit, - trk.hitPattern(), - l1stubsFromFit); + phi0fit, + d0, + trk.tanLambda(), + trk.z0(), + chi2rphi, + trk.chi2rz(), + rinvfit, + phi0fit, + d0, + trk.tanLambda(), + trk.z0(), + chi2rphi, + trk.chi2rz(), + irinvfit, + iphi0fit, + id0fit, + itanlfit, + iz0fit, + ichi2rphifit, + ichi2rzfit, + trk.hitPattern(), + l1stubsFromFit); } else { if (settings_.printDebugKF()) { edm::LogVerbatim("L1track") << "FitTrack:KF rejected track"; diff --git a/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc b/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc index b9891452f3283..f63e1ece941d8 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchCalculator.cc @@ -19,10 +19,13 @@ using namespace std; using namespace trklet; MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* global) - : ProcessBase(name, settings, global), phimatchcuttable_(settings), zmatchcuttable_(settings), - rphicutPStable_(settings), rphicut2Stable_(settings), - rcutPStable_(settings), rcut2Stable_(settings) { - + : ProcessBase(name, settings, global), + phimatchcuttable_(settings), + zmatchcuttable_(settings), + rphicutPStable_(settings), + rphicut2Stable_(settings), + rcutPStable_(settings), + rcut2Stable_(settings) { phiregion_ = name[8] - 'A'; layerdisk_ = initLayerDisk(3); @@ -46,9 +49,9 @@ MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* phi0shift_ = 0; } - unsigned int region = getName()[8]-'A'; + unsigned int region = getName()[8] - 'A'; assert(region < settings_.nallstubs(layerdisk_)); - + if (layerdisk_ < N_LAYER) { phimatchcuttable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::barrelphi, region); zmatchcuttable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::barrelz, region); @@ -58,7 +61,7 @@ MatchCalculator::MatchCalculator(string name, Settings const& settings, Globals* rcutPStable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::diskPSr, region); rcut2Stable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::disk2Sr, region); } - + for (unsigned int i = 0; i < N_DSS_MOD * 2; i++) { ialphafactinner_[i] = (1 << settings_.alphashift()) * settings_.krprojshiftdisk() * settings_.half2SmoduleWidth() / (1 << (settings_.nbitsalpha() - 1)) / (settings_.rDSSinner(i) * settings_.rDSSinner(i)) / @@ -213,16 +216,17 @@ void MatchCalculator::execute(double phioffset) { << ideltaphi * settings_.kphi1() * settings_.rmean(layerdisk_) << " " << dphiapprox * settings_.rmean(layerdisk_) << " " << phimatchcuttable_.lookup(seedindex) * settings_.kphi1() * settings_.rmean(layerdisk_) << " " - << ideltaz * fact_ * settings_.kz() << " " << dz << " " << zmatchcuttable_.lookup(seedindex) * settings_.kz() << endl; + << ideltaz * fact_ * settings_.kz() << " " << dz << " " + << zmatchcuttable_.lookup(seedindex) * settings_.kz() << endl; } bool imatch = (std::abs(ideltaphi) <= (int)phimatchcuttable_.lookup(seedindex)) && - (std::abs(ideltaz * fact_) <= (int)zmatchcuttable_.lookup(seedindex)); + (std::abs(ideltaz * fact_) <= (int)zmatchcuttable_.lookup(seedindex)); if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << getName() << " imatch = " << imatch << " ideltaphi cut " << ideltaphi << " " - << phimatchcuttable_.lookup(seedindex) << " ideltaz*fact cut " << ideltaz * fact_ << " " - << zmatchcuttable_.lookup(seedindex); + << phimatchcuttable_.lookup(seedindex) << " ideltaz*fact cut " << ideltaz * fact_ + << " " << zmatchcuttable_.lookup(seedindex); } if (imatch) { @@ -361,7 +365,8 @@ void MatchCalculator::execute(double phioffset) { double drcut = idrcut * settings_.krprojshiftdisk(); bool match, imatch; - if (std::abs(dphi) < third*settings_.dphisectorHG() && std::abs(dphiapprox) < third*settings_.dphisectorHG()) { //1/3 of sector size to catch errors + if (std::abs(dphi) < third * settings_.dphisectorHG() && + std::abs(dphiapprox) < third * settings_.dphisectorHG()) { //1/3 of sector size to catch errors if (settings_.writeMonitorData("Residuals")) { double pt = 0.01 * settings_.c() * settings_.bfield() / std::abs(tracklet->rinv()); diff --git a/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc b/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc index de08e2cb88a91..4338f63b9a7ac 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchEngine.cc @@ -15,8 +15,8 @@ using namespace std; using namespace trklet; -MatchEngine::MatchEngine(string name, Settings const& settings, Globals* global) : ProcessBase(name, settings, global), - luttable_(settings) { +MatchEngine::MatchEngine(string name, Settings const& settings, Globals* global) + : ProcessBase(name, settings, global), luttable_(settings) { layerdisk_ = initLayerDisk(3); barrel_ = layerdisk_ < N_LAYER; @@ -24,7 +24,6 @@ MatchEngine::MatchEngine(string name, Settings const& settings, Globals* global) luttable_.initBendMatch(layerdisk_); nrinv_ = NRINVBITS; - } void MatchEngine::addOutput(MemoryBase* memory, string output) { @@ -236,8 +235,8 @@ void MatchEngine::execute() { bool passphi = (std::abs(deltaphi) < mindeltaphicut) || (std::abs(deltaphi) > maxdeltaphicut); unsigned int index = (projrinv << nbits) + vmstub.bend().value(); - if (!barrel_&&isPSmodule) { - index += (1 << (nrinv_ + N_BENDBITS_2S)); + if (!barrel_ && isPSmodule) { + index += (1 << (nrinv_ + N_BENDBITS_2S)); } //Check if stub z position consistent diff --git a/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc b/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc index 20c8ab9e1b329..ac4db12247b2a 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchEngineUnit.cc @@ -4,7 +4,8 @@ using namespace std; using namespace trklet; -MatchEngineUnit::MatchEngineUnit(bool barrel, unsigned int layerdisk, const TrackletLUT& luttable) : luttable_(luttable), candmatches_(3) { +MatchEngineUnit::MatchEngineUnit(bool barrel, unsigned int layerdisk, const TrackletLUT& luttable) + : luttable_(luttable), candmatches_(3) { idle_ = true; barrel_ = barrel; layerdisk_ = layerdisk; @@ -28,7 +29,7 @@ void MatchEngineUnit::init(VMStubsMEMemory* vmstubsmemory, bool usesecondPlus, bool isPSseed, Tracklet* proj, - bool) { + bool) { vmstubsmemory_ = vmstubsmemory; idle_ = false; nrzbins_ = nrzbins; @@ -66,18 +67,15 @@ void MatchEngineUnit::init(VMStubsMEMemory* vmstubsmemory, havepair__ = havepair_; goodpair__ = goodpair_; - tmppair__ = tmppair_; + tmppair__ = tmppair_; havepair_ = false; goodpair_ = false; - - } void MatchEngineUnit::step(bool) { - bool almostfull = candmatches_.nearfull(); - + if (goodpair__) { assert(havepair__); candmatches_.store(tmppair__); @@ -85,11 +83,11 @@ void MatchEngineUnit::step(bool) { havepair__ = havepair_; goodpair__ = goodpair_; - tmppair__ = tmppair_; + tmppair__ = tmppair_; havepair_ = false; goodpair_ = false; - + if (idle() || almostfull) return; @@ -150,10 +148,10 @@ void MatchEngineUnit::step(bool) { // << isPSseed_ << " slot=" << slot << endl; //Check if stub bend and proj rinv consistent - + goodpair_ = (pass && dphicut) && luttable_.lookup(index); havepair_ = true; - + if (havepair_) { std::pair tmppair(proj_, vmstub.stub()); tmppair_ = tmppair; @@ -181,12 +179,11 @@ void MatchEngineUnit::reset() { } int MatchEngineUnit::TCID() const { - if (!empty()) { return peek().first->TCID(); } - if (idle_&&!havepair_&&!havepair__) { + if (idle_ && !havepair_ && !havepair__) { return 16383; } if (havepair__) { @@ -196,5 +193,4 @@ int MatchEngineUnit::TCID() const { return tmppair_.first->TCID(); } return proj_->TCID(); - } diff --git a/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc b/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc index 5723a4dcce56c..6c0526337f9b4 100644 --- a/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/MatchProcessor.cc @@ -14,11 +14,17 @@ using namespace std; using namespace trklet; MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* global) - : ProcessBase(name, settings, global), - phimatchcuttable_(settings), zmatchcuttable_(settings), rphicutPStable_(settings), - rphicut2Stable_(settings), rcutPStable_(settings), rcut2Stable_(settings), - fullmatches_(12), rinvbendlut_(settings), luttable_(settings), inputProjBuffer_(3) { - + : ProcessBase(name, settings, global), + phimatchcuttable_(settings), + zmatchcuttable_(settings), + rphicutPStable_(settings), + rphicut2Stable_(settings), + rcutPStable_(settings), + rcut2Stable_(settings), + fullmatches_(12), + rinvbendlut_(settings), + luttable_(settings), + inputProjBuffer_(3) { phiregion_ = name[8] - 'A'; layerdisk_ = initLayerDisk(3); @@ -42,12 +48,13 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g nphiderbits_ = 6; if (!barrel_) { - rinvbendlut_.initProjectionBend(global->ITC_L1L2()->der_phiD_final.K(), layerdisk_-N_LAYER, nrbits_, nphiderbits_); + rinvbendlut_.initProjectionBend( + global->ITC_L1L2()->der_phiD_final.K(), layerdisk_ - N_LAYER, nrbits_, nphiderbits_); } nrinv_ = NRINVBITS; - unsigned int region = getName()[8]-'A'; + unsigned int region = getName()[8] - 'A'; assert(region < settings_.nallstubs(layerdisk_)); if (barrel_) { @@ -59,7 +66,7 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g rcutPStable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::diskPSr, region); rcut2Stable_.initmatchcut(layerdisk_, TrackletLUT::MatchType::disk2Sr, region); } - + for (unsigned int i = 0; i < N_DSS_MOD * 2; i++) { ialphafactinner_[i] = (1 << settings_.alphashift()) * settings_.krprojshiftdisk() * settings_.half2SmoduleWidth() / (1 << (settings_.nbitsalpha() - 1)) / (settings_.rDSSinner(i) * settings_.rDSSinner(i)) / @@ -78,7 +85,6 @@ MatchProcessor::MatchProcessor(string name, Settings const& settings, Globals* g MatchEngineUnit tmpME(barrel_, layerdisk_, luttable_); matchengines_.push_back(tmpME); } - } void MatchProcessor::addOutput(MemoryBase* memory, string output) { @@ -125,7 +131,6 @@ void MatchProcessor::addInput(MemoryBase* memory, string input) { } void MatchProcessor::execute(unsigned int iSector, double phimin) { - assert(vmstubs_.size() == 1); /* @@ -155,11 +160,10 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { unsigned int countinputproj = 0; unsigned int iprojmem = 0; - while (iprojmemnTracklets()==0) { + while (iprojmem < inputprojs_.size() && inputprojs_[iprojmem]->nTracklets() == 0) { iprojmem++; - } + } - unsigned int iproj = 0; inputProjBuffer_.reset(); @@ -172,14 +176,12 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { matchengine.reset(); } - ProjectionTemp tmpProj_, tmpProj__; bool good_ = false; bool good__ = false; - - for (unsigned int istep = 0; istep < settings_.maxStep("MP"); istep++) { - bool projBuffNearFull=inputProjBuffer_.nearfull(); + for (unsigned int istep = 0; istep < settings_.maxStep("MP"); istep++) { + bool projBuffNearFull = inputProjBuffer_.nearfull(); // This print statement is useful for detailed comparison with the HLS code // It prints out detailed status information for each clock step @@ -208,10 +210,10 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { bool meactive = matchengines_[0].active(); for (unsigned int iME = 1; iME < nMatchEngines_; iME++) { meactive = meactive || matchengines_[iME].active(); - int tcid=matchengines_[iME].TCID(); - if (tcidTCID()<<" "<TCID()<<" "<TCID()<<" "<TCID()<<" "<TCID() <= tracklet->TCID()); } oldTracklet = tracklet; @@ -241,7 +243,7 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { //Step 2 //Check if we have ME that can process projection - + bool addedProjection = false; for (unsigned int iME = 0; iME < nMatchEngines_; iME++) { if (!matchengines_[iME].idle()) @@ -257,8 +259,8 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { int nbins = (1 << N_RZBITS); if (layerdisk_ >= N_LAYER) { - nbins*=2; //twice as many bins in disks (since there are two disks) - } + nbins *= 2; //twice as many bins in disks (since there are two disks) + } matchengines_[iME].init(stubmem, nbins, @@ -274,16 +276,13 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { tmpProj.use(1, 1), tmpProj.isPSseed(), tmpProj.proj(), - print&&(iME==0)); + print && (iME == 0)); addedProjection = true; } else { - matchengines_[iME].step(print&&iME==0); + matchengines_[iME].step(print && iME == 0); } - } - - //Step 1 //First step here checks if we have more input projections to put into //the input puffer for projections @@ -296,127 +295,126 @@ void MatchProcessor::execute(unsigned int iSector, double phimin) { tmpProj__ = tmpProj_; good_ = false; - + if (istep < settings_.maxStep("MP")) { if (iprojmem < inputprojs_.size()) { TrackletProjectionsMemory* projMem = inputprojs_[iprojmem]; - if (!projBuffNearFull) { - if (settings_.debugTracklet()) { - edm::LogVerbatim("Tracklet") << getName() << " have projection in memory : " << projMem->getName(); - } - - Tracklet* proj = projMem->getTracklet(iproj); - - FPGAWord fpgaphi = proj->proj(layerdisk_).fpgaphiproj(); - - unsigned int iphi = (fpgaphi.value() >> (fpgaphi.nbits() - nvmbits_)) & (nvmbins_ - 1); - - int nextrabits = 2; - int overlapbits = nvmbits_ + nextrabits; - - unsigned int extrabits = fpgaphi.bits(fpgaphi.nbits() - overlapbits, nextrabits); - - unsigned int ivmPlus = iphi; - - int shift = 0; - - if (extrabits == ((1U << nextrabits) - 1) && iphi != ((1U << settings_.nbitsvmme(layerdisk_)) - 1)) { - shift = 1; - ivmPlus++; - } - unsigned int ivmMinus = iphi; - if (extrabits == 0 && iphi != 0) { - shift = -1; - ivmMinus--; - } - - int projrinv = -1; - if (barrel_) { - FPGAWord phider = proj->proj(layerdisk_).fpgaphiprojder(); - projrinv = (1 << (nrinv_ - 1)) - 1 - (phider.value() >> (phider.nbits() - nrinv_)); - } else { - //The next lines looks up the predicted bend based on: - // 1 - r projections - // 2 - phi derivative - // 3 - the sign - i.e. if track is forward or backward - - int rindex = (proj->proj(layerdisk_).fpgarzproj().value() >> - (proj->proj(layerdisk_).fpgarzproj().nbits() - nrbits_)) & - ((1 << nrbits_) - 1); - - int phiderindex = (proj->proj(layerdisk_).fpgaphiprojder().value() >> - (proj->proj(layerdisk_).fpgaphiprojder().nbits() - nphiderbits_)) & - ((1 << nphiderbits_) - 1); - - int signindex = proj->proj(layerdisk_).fpgarzprojder().value() < 0; - - int bendindex = (signindex << (nphiderbits_ + nrbits_)) + (rindex << (nphiderbits_)) + phiderindex; - - projrinv = rinvbendlut_.lookup(bendindex); - - proj->proj(layerdisk_).setBendIndex(projrinv); - } - assert(projrinv >= 0); - - unsigned int slot = proj->proj(layerdisk_).fpgarzbin1projvm().value(); - bool second = proj->proj(layerdisk_).fpgarzbin2projvm().value(); - - unsigned int projfinephi = (fpgaphi.value() >> (fpgaphi.nbits() - (nvmbits_ + NFINEPHIBITS))) & ((1<proj(layerdisk_).fpgafinerzvm().value(); - - bool isPSseed = proj->PSseed(); - - int nbins = (1 << N_RZBITS); - if (layerdisk_ >= N_LAYER) { - nbins*=2; //twice as many bins in disks (since there are two disks) - } - - VMStubsMEMemory* stubmem = vmstubs_[0]; - bool usefirstMinus = stubmem->nStubsBin(ivmMinus * nbins + slot) != 0; - bool usesecondMinus = (second && (stubmem->nStubsBin(ivmMinus * nbins + slot + 1) != 0)); - bool usefirstPlus = ivmPlus != ivmMinus && stubmem->nStubsBin(ivmPlus * nbins + slot) != 0; - bool usesecondPlus = - ivmPlus != ivmMinus && (second && (stubmem->nStubsBin(ivmPlus * nbins + slot + 1) != 0)); - - good_ = usefirstPlus || usesecondPlus || usefirstMinus || usesecondMinus; - - if (good_) { - ProjectionTemp tmpProj(proj, - slot, - projrinv, - projfinerz, - projfinephi, - ivmMinus, - shift, - usefirstMinus, - usefirstPlus, - usesecondMinus, - usesecondPlus, - isPSseed); - tmpProj_ = tmpProj; - } - - iproj++; - if (iproj == projMem->nTracklets()) { - iproj = 0; - do { - iprojmem++; - } while (iprojmemnTracklets()==0); - } - } - + if (!projBuffNearFull) { + if (settings_.debugTracklet()) { + edm::LogVerbatim("Tracklet") << getName() << " have projection in memory : " << projMem->getName(); + } + + Tracklet* proj = projMem->getTracklet(iproj); + + FPGAWord fpgaphi = proj->proj(layerdisk_).fpgaphiproj(); + + unsigned int iphi = (fpgaphi.value() >> (fpgaphi.nbits() - nvmbits_)) & (nvmbins_ - 1); + + int nextrabits = 2; + int overlapbits = nvmbits_ + nextrabits; + + unsigned int extrabits = fpgaphi.bits(fpgaphi.nbits() - overlapbits, nextrabits); + + unsigned int ivmPlus = iphi; + + int shift = 0; + + if (extrabits == ((1U << nextrabits) - 1) && iphi != ((1U << settings_.nbitsvmme(layerdisk_)) - 1)) { + shift = 1; + ivmPlus++; + } + unsigned int ivmMinus = iphi; + if (extrabits == 0 && iphi != 0) { + shift = -1; + ivmMinus--; + } + + int projrinv = -1; + if (barrel_) { + FPGAWord phider = proj->proj(layerdisk_).fpgaphiprojder(); + projrinv = (1 << (nrinv_ - 1)) - 1 - (phider.value() >> (phider.nbits() - nrinv_)); + } else { + //The next lines looks up the predicted bend based on: + // 1 - r projections + // 2 - phi derivative + // 3 - the sign - i.e. if track is forward or backward + + int rindex = (proj->proj(layerdisk_).fpgarzproj().value() >> + (proj->proj(layerdisk_).fpgarzproj().nbits() - nrbits_)) & + ((1 << nrbits_) - 1); + + int phiderindex = (proj->proj(layerdisk_).fpgaphiprojder().value() >> + (proj->proj(layerdisk_).fpgaphiprojder().nbits() - nphiderbits_)) & + ((1 << nphiderbits_) - 1); + + int signindex = proj->proj(layerdisk_).fpgarzprojder().value() < 0; + + int bendindex = (signindex << (nphiderbits_ + nrbits_)) + (rindex << (nphiderbits_)) + phiderindex; + + projrinv = rinvbendlut_.lookup(bendindex); + + proj->proj(layerdisk_).setBendIndex(projrinv); + } + assert(projrinv >= 0); + + unsigned int slot = proj->proj(layerdisk_).fpgarzbin1projvm().value(); + bool second = proj->proj(layerdisk_).fpgarzbin2projvm().value(); + + unsigned int projfinephi = + (fpgaphi.value() >> (fpgaphi.nbits() - (nvmbits_ + NFINEPHIBITS))) & ((1 << NFINEPHIBITS) - 1); + int projfinerz = proj->proj(layerdisk_).fpgafinerzvm().value(); + + bool isPSseed = proj->PSseed(); + + int nbins = (1 << N_RZBITS); + if (layerdisk_ >= N_LAYER) { + nbins *= 2; //twice as many bins in disks (since there are two disks) + } + + VMStubsMEMemory* stubmem = vmstubs_[0]; + bool usefirstMinus = stubmem->nStubsBin(ivmMinus * nbins + slot) != 0; + bool usesecondMinus = (second && (stubmem->nStubsBin(ivmMinus * nbins + slot + 1) != 0)); + bool usefirstPlus = ivmPlus != ivmMinus && stubmem->nStubsBin(ivmPlus * nbins + slot) != 0; + bool usesecondPlus = ivmPlus != ivmMinus && (second && (stubmem->nStubsBin(ivmPlus * nbins + slot + 1) != 0)); + + good_ = usefirstPlus || usesecondPlus || usefirstMinus || usesecondMinus; + + if (good_) { + ProjectionTemp tmpProj(proj, + slot, + projrinv, + projfinerz, + projfinephi, + ivmMinus, + shift, + usefirstMinus, + usefirstPlus, + usesecondMinus, + usesecondPlus, + isPSseed); + tmpProj_ = tmpProj; + } + + iproj++; + if (iproj == projMem->nTracklets()) { + iproj = 0; + do { + iprojmem++; + } while (iprojmem < inputprojs_.size() && inputprojs_[iprojmem]->nTracklets() == 0); + } + } + } else { projdone = true && !good_ && !good__; } } - // // Check if done // // // - + if ((projdone && !meactive) || (istep == settings_.maxStep("MP") - 1)) { if (settings_.writeMonitorData("MP")) { globals_->ofstream("matchprocessor.txt") << getName() << " " << istep << " " << countall << " " << countsel @@ -503,17 +501,17 @@ bool MatchProcessor::matchCalculator(Tracklet* tracklet, const Stub* fpgastub, b << ideltaphi * settings_.kphi1() * settings_.rmean(layerdisk_) << " " << dphiapprox * settings_.rmean(layerdisk_) << " " << phimatchcuttable_.lookup(seedindex) * settings_.kphi1() * settings_.rmean(layerdisk_) << " " - << (ideltaz << dzshift_) * settings_.kz() << " " << dz << " " << zmatchcuttable_.lookup(seedindex) * settings_.kz() - << endl; + << (ideltaz << dzshift_) * settings_.kz() << " " << dz << " " + << zmatchcuttable_.lookup(seedindex) * settings_.kz() << endl; } bool imatch = (std::abs(ideltaphi) <= phimatchcuttable_.lookup(seedindex)) && - (std::abs(ideltaz << dzshift_) <= zmatchcuttable_.lookup(seedindex)); + (std::abs(ideltaz << dzshift_) <= zmatchcuttable_.lookup(seedindex)); if (settings_.debugTracklet()) { edm::LogVerbatim("Tracklet") << getName() << " imatch = " << imatch << " ideltaphi cut " << ideltaphi << " " - << phimatchcuttable_.lookup(seedindex) << " ideltaz<= third*settings_.dphisectorHG()) { + if (std::abs(dphi) >= third * settings_.dphisectorHG()) { edm::LogPrint("Tracklet") << "dphi " << dphi << " ISeed " << tracklet->getISeed(); } - assert(std::abs(dphi) < third*settings_.dphisectorHG()); - assert(std::abs(dphiapprox) < third*settings_.dphisectorHG()); + assert(std::abs(dphi) < third * settings_.dphisectorHG()); + assert(std::abs(dphiapprox) < third * settings_.dphisectorHG()); tracklet->addMatch(layerdisk_, ideltaphi, diff --git a/L1Trigger/TrackFindingTracklet/src/ProjectionRouter.cc b/L1Trigger/TrackFindingTracklet/src/ProjectionRouter.cc index ca0aea33c6e5c..0e59a8b0dafc2 100644 --- a/L1Trigger/TrackFindingTracklet/src/ProjectionRouter.cc +++ b/L1Trigger/TrackFindingTracklet/src/ProjectionRouter.cc @@ -5,7 +5,6 @@ #include "L1Trigger/TrackFindingTracklet/interface/FPGAWord.h" #include "L1Trigger/TrackFindingTracklet/interface/IMATH_TrackletCalculator.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/Exception.h" @@ -13,7 +12,7 @@ using namespace std; using namespace trklet; ProjectionRouter::ProjectionRouter(string name, Settings const& settings, Globals* global) - : ProcessBase(name, settings, global), rinvbendlut_(settings) { + : ProcessBase(name, settings, global), rinvbendlut_(settings) { layerdisk_ = initLayerDisk(3); vmprojs_.resize(settings_.nvmme(layerdisk_), nullptr); @@ -22,9 +21,9 @@ ProjectionRouter::ProjectionRouter(string name, Settings const& settings, Global nphiderbits_ = 6; if (layerdisk_ >= N_LAYER) { - rinvbendlut_.initProjectionBend(global->ITC_L1L2()->der_phiD_final.K(), layerdisk_-N_LAYER, nrbits_, nphiderbits_); + rinvbendlut_.initProjectionBend( + global->ITC_L1L2()->der_phiD_final.K(), layerdisk_ - N_LAYER, nrbits_, nphiderbits_); } - } void ProjectionRouter::addOutput(MemoryBase* memory, string output) { @@ -74,7 +73,6 @@ void ProjectionRouter::addInput(MemoryBase* memory, string input) { } void ProjectionRouter::execute() { - unsigned int allprojcount = 0; //These are just here to test that the order is correct. Does not affect the actual execution @@ -93,7 +91,6 @@ void ProjectionRouter::execute() { if (layerdisk_ < N_LAYER) { fpgaphi = tracklet->proj(layerdisk_).fpgaphiproj(); } else { - Projection& proj = tracklet->proj(layerdisk_); fpgaphi = proj.fpgaphiproj(); @@ -111,7 +108,7 @@ void ProjectionRouter::execute() { int bendindex = (signindex << (nphiderbits_ + nrbits_)) + (rindex << (nphiderbits_)) + phiderindex; - int ibendproj = rinvbendlut_.lookup(bendindex); + int ibendproj = rinvbendlut_.lookup(bendindex); proj.setBendIndex(ibendproj); } diff --git a/L1Trigger/TrackFindingTracklet/src/Sector.cc b/L1Trigger/TrackFindingTracklet/src/Sector.cc index 6127d60c87670..a1f0ade45f3b9 100644 --- a/L1Trigger/TrackFindingTracklet/src/Sector.cc +++ b/L1Trigger/TrackFindingTracklet/src/Sector.cc @@ -80,7 +80,7 @@ bool Sector::addStub(L1TStub stub, string dtc) { int bendbin = fpgastub.bend().value(); int rbin = (r.value() + (1 << (r.nbits() - 1))) >> (r.nbits() - 3); const TrackletLUT& phiCorrTable = *globals_->phiCorr(layerdisk); - int iphicorr = phiCorrTable.lookup(bendbin*(1<<3)+rbin); + int iphicorr = phiCorrTable.lookup(bendbin * (1 << 3) + rbin); fpgastub.setPhiCorr(iphicorr); } diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletConfigBuilder.cc b/L1Trigger/TrackFindingTracklet/src/TrackletConfigBuilder.cc index 2cf5d706aae4e..a02bdd1edd40a 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletConfigBuilder.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletConfigBuilder.cc @@ -772,7 +772,7 @@ void TrackletConfigBuilder::writeASMemories(std::ostream& os, std::ostream& memo } if (ext == "") { - ext = "_" + LayerName(l1)+iTCStr(iTC); + ext = "_" + LayerName(l1) + iTCStr(iTC); } if (iSeed < 4) { //Barrel seeding @@ -960,17 +960,18 @@ void TrackletConfigBuilder::writeVMSMemories(std::ostream& os, std::ostream& mem if (!used) continue; - string inorout = "I"; - if (innerouterseed == 1 ) - inorout = "O"; - + string inorout = "I"; + if (innerouterseed == 1) + inorout = "O"; + nmem++; memories << "VMStubsTE: VMSTE_" << LayerName(ilayer) << "PHI" << iRegStr(iReg, iSeed) << iVMTE + 1 << "n" << nmem << " [18]" << std::endl; os << "VMSTE_" << LayerName(ilayer) << "PHI" << iRegStr(iReg, iSeed) << iVMTE + 1 << "n" << nmem - << " input=> VMR_" << LayerName(ilayer) << "PHI" << iTCStr(iReg) << ".vmstuboutTE"< TE_" << LayerName(l1) << "PHI" << iRegStr(TE1 / NVMTE1, iSeed) << TE1 + 1 - << "_" << LayerName(l2) << "PHI" << iRegStr(TE2 / NVMTE2, iSeed) << TE2 + 1; + << " input=> VMR_" << LayerName(ilayer) << "PHI" << iTCStr(iReg) << ".vmstuboutTE" << inorout << "PHI" + << iRegStr(iReg, iSeed) << iVMTE + 1 << " output=> TE_" << LayerName(l1) << "PHI" + << iRegStr(TE1 / NVMTE1, iSeed) << TE1 + 1 << "_" << LayerName(l2) << "PHI" + << iRegStr(TE2 / NVMTE2, iSeed) << TE2 + 1; if (innerouterseed == 0) { os << ".innervmstubin" << std::endl; } else { diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc index e4d71c40de799..1c70057008575 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngine.cc @@ -14,7 +14,7 @@ using namespace trklet; using namespace std; TrackletEngine::TrackletEngine(string name, Settings const& settings, Globals* global) - : ProcessBase(name, settings, global), innerptlut_(settings), outerptlut_(settings) { + : ProcessBase(name, settings, global), innerptlut_(settings), outerptlut_(settings) { stubpairs_ = nullptr; innervmstubs_ = nullptr; outervmstubs_ = nullptr; @@ -160,32 +160,66 @@ void TrackletEngine::setVMPhiBin() { string innermem = innervmstubs_->getName().substr(6); string outermem = outervmstubs_->getName().substr(6); - - innerptlut_.initteptlut(true, false, iSeed_, layerdisk1_, layerdisk2_, - innerphibits_, outerphibits_, - innerphimin, innerphimax, outerphimin, outerphimax, - innermem, outermem); - outerptlut_.initteptlut(false, false, iSeed_, layerdisk1_, layerdisk2_, - innerphibits_, outerphibits_, - innerphimin, innerphimax, outerphimin, outerphimax, - innermem, outermem); + innerptlut_.initteptlut(true, + false, + iSeed_, + layerdisk1_, + layerdisk2_, + innerphibits_, + outerphibits_, + innerphimin, + innerphimax, + outerphimin, + outerphimax, + innermem, + outermem); + + outerptlut_.initteptlut(false, + false, + iSeed_, + layerdisk1_, + layerdisk2_, + innerphibits_, + outerphibits_, + innerphimin, + innerphimax, + outerphimin, + outerphimax, + innermem, + outermem); TrackletLUT innertememlut(settings_); TrackletLUT outertememlut(settings_); - - innertememlut.initteptlut(true, true, iSeed_, layerdisk1_, layerdisk2_, - innerphibits_, outerphibits_, - innerphimin, innerphimax, outerphimin, outerphimax, - innermem, outermem); - - outertememlut.initteptlut(false, true, iSeed_, layerdisk1_, layerdisk2_, - innerphibits_, outerphibits_, - innerphimin, innerphimax, outerphimin, outerphimax, - innermem, outermem); + + innertememlut.initteptlut(true, + true, + iSeed_, + layerdisk1_, + layerdisk2_, + innerphibits_, + outerphibits_, + innerphimin, + innerphimax, + outerphimin, + outerphimax, + innermem, + outermem); + + outertememlut.initteptlut(false, + true, + iSeed_, + layerdisk1_, + layerdisk2_, + innerphibits_, + outerphibits_, + innerphimin, + innerphimax, + outerphimin, + outerphimax, + innermem, + outermem); innervmstubs_->setbendtable(innertememlut); outervmstubs_->setbendtable(outertememlut); - } - diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc b/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc index dcb0370ea4e77..3f4f4555959d9 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletEngineUnit.cc @@ -12,10 +12,10 @@ TrackletEngineUnit::TrackletEngineUnit(const Settings* const settings, unsigned int iSeed, unsigned int nbitsfinephidiff, unsigned int iAllStub, - const TrackletLUT* pttableinnernew, - const TrackletLUT* pttableouternew, + const TrackletLUT* pttableinnernew, + const TrackletLUT* pttableouternew, VMStubsTEMemory* outervmstubs) -: settings_(settings), pttableinnernew_(pttableinnernew), pttableouternew_(pttableouternew), candpairs_(3) { + : settings_(settings), pttableinnernew_(pttableinnernew), pttableouternew_(pttableouternew), candpairs_(3) { idle_ = true; nbitsfinephi_ = nbitsfinephi; layerdisk2_ = layerdisk2; @@ -43,7 +43,6 @@ void TrackletEngineUnit::reset() { } void TrackletEngineUnit::step(bool, int, int) { - if (goodpair__) { candpairs_.store(candpair__); } @@ -100,7 +99,7 @@ void TrackletEngineUnit::step(bool, int, int) { int ptinnerindex = (idphi << tedata_.innerbend_.nbits()) + tedata_.innerbend_.value(); int ptouterindex = (idphi << outerbend.nbits()) + outerbend.value(); - + if (!(inrange && pttableinnernew_->lookup(ptinnerindex) && pttableouternew_->lookup(ptouterindex))) { if (settings_->debugTracklet()) { edm::LogVerbatim("Tracklet") << " Stub pair rejected because of stub pt cut bends : " diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletLUT.cc b/L1Trigger/TrackFindingTracklet/src/TrackletLUT.cc index adfb887177ce4..59e4aa96be1c8 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletLUT.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletLUT.cc @@ -11,72 +11,71 @@ using namespace trklet; TrackletLUT::TrackletLUT(const Settings& settings) : settings_(settings) {} void TrackletLUT::initmatchcut(unsigned int layerdisk, MatchType type, unsigned int region) { + char cregion = 'A' + region; - char cregion = 'A'+region; - for (unsigned int iSeed = 0; iSeed < 12; iSeed++) { - if (type==barrelphi) { + if (type == barrelphi) { table_.push_back(settings_.rphimatchcut(iSeed, layerdisk) / (settings_.kphi1() * settings_.rmean(layerdisk))); } - if (type==barrelz) { + if (type == barrelz) { table_.push_back(settings_.zmatchcut(iSeed, layerdisk) / settings_.kz()); } - if (type==diskPSphi) { + if (type == diskPSphi) { table_.push_back(settings_.rphicutPS(iSeed, layerdisk - N_LAYER) / (settings_.kphi() * settings_.kr())); } - if (type==disk2Sphi) { + if (type == disk2Sphi) { table_.push_back(settings_.rphicut2S(iSeed, layerdisk - N_LAYER) / (settings_.kphi() * settings_.kr())); } - if (type==disk2Sr) { + if (type == disk2Sr) { table_.push_back(settings_.rcut2S(iSeed, layerdisk - N_LAYER) / settings_.krprojshiftdisk()); } - if (type==diskPSr) { + if (type == diskPSr) { table_.push_back(settings_.rcutPS(iSeed, layerdisk - N_LAYER) / settings_.krprojshiftdisk()); } } - name_ = settings_.combined() ? "MP_" : "MC_"; + name_ = settings_.combined() ? "MP_" : "MC_"; - if (type==barrelphi) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_phicut.tab"; - } - if (type==barrelz) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_zcut.tab"; + if (type == barrelphi) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_phicut.tab"; + } + if (type == barrelz) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_zcut.tab"; } - if (type==diskPSphi) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_PSphicut.tab"; + if (type == diskPSphi) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_PSphicut.tab"; } - if (type==disk2Sphi) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_2Sphicut.tab"; + if (type == disk2Sphi) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_2Sphicut.tab"; } - if (type==disk2Sr) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_2Srcut.tab"; + if (type == disk2Sr) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_2Srcut.tab"; } - if (type==diskPSr) { - name_ += TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_PSrcut.tab"; + if (type == diskPSr) { + name_ += TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_PSrcut.tab"; } positive_ = false; - - writeTable(); + writeTable(); } - -void TrackletLUT::initTPlut(bool fillInner, unsigned int iSeed, unsigned int layerdisk1, unsigned int layerdisk2, - unsigned int nbitsfinephidiff, unsigned int iTP) { - +void TrackletLUT::initTPlut(bool fillInner, + unsigned int iSeed, + unsigned int layerdisk1, + unsigned int layerdisk2, + unsigned int nbitsfinephidiff, + unsigned int iTP) { //number of fine phi bins in sector - int nfinephibins = - settings_.nallstubs(layerdisk2) * settings_.nvmte(1, iSeed) * (1 << settings_.nfinephi(1, iSeed)); + int nfinephibins = settings_.nallstubs(layerdisk2) * settings_.nvmte(1, iSeed) * (1 << settings_.nfinephi(1, iSeed)); double dfinephi = settings_.dphisectorHG() / nfinephibins; int outerrbits = 3; - if (iSeed == Seed::L1L2 || iSeed == Seed::L2L3 ||iSeed == Seed::L3L4 || iSeed == Seed::L5L6 ) { + if (iSeed == Seed::L1L2 || iSeed == Seed::L2L3 || iSeed == Seed::L3L4 || iSeed == Seed::L5L6) { outerrbits = 0; } - + int outerrbins = (1 << outerrbits); double dphi[2]; @@ -102,7 +101,7 @@ void TrackletLUT::initTPlut(bool fillInner, unsigned int iSeed, unsigned int lay dphi[0] = (iphidiff - 1.5) * dfinephi; dphi[1] = (iphidiff + 1.5) * dfinephi; for (int irouterbin = 0; irouterbin < outerrbins; irouterbin++) { - if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 ||iSeed == Seed::L1D1 || iSeed == Seed::L2D1 ) { + if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 || iSeed == Seed::L1D1 || iSeed == Seed::L2D1) { router[0] = settings_.rmindiskvm() + irouterbin * (settings_.rmaxdiskvm() - settings_.rmindiskvm()) / outerrbins; router[1] = @@ -148,47 +147,49 @@ void TrackletLUT::initTPlut(bool fillInner, unsigned int iSeed, unsigned int lay bool passptcut = rinvmin < settings_.rinvcutte(); if (fillInner) { - for (int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) { - double bend = settings_.benddecode(ibend, layerdisk1, nbendbitsinner == 3); - - bool passinner = bend <= bendinnermax + settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3) && - bend >= bendinnermin - settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3); - table_.push_back(passinner && passptcut); - } + for (int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) { + double bend = settings_.benddecode(ibend, layerdisk1, nbendbitsinner == 3); + + bool passinner = bend <= bendinnermax + settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3) && + bend >= bendinnermin - settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3); + table_.push_back(passinner && passptcut); + } } else { - for (int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) { - double bend = settings_.benddecode(ibend, layerdisk2, nbendbitsouter == 3); - - bool passouter = bend <= bendoutermax + settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3) && - bend >= bendoutermin - settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3); - table_.push_back(passouter && passptcut); - } + for (int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) { + double bend = settings_.benddecode(ibend, layerdisk2, nbendbitsouter == 3); + + bool passouter = bend <= bendoutermax + settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3) && + bend >= bendoutermin - settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3); + table_.push_back(passouter && passptcut); + } } } } positive_ = false; - char cTP='A'+iTP; - - name_="TP_"+TrackletConfigBuilder::LayerName(layerdisk1)+TrackletConfigBuilder::LayerName(layerdisk2)+cTP; + char cTP = 'A' + iTP; + + name_ = "TP_" + TrackletConfigBuilder::LayerName(layerdisk1) + TrackletConfigBuilder::LayerName(layerdisk2) + cTP; if (fillInner) { - name_+="_stubptinnercut.tab"; + name_ += "_stubptinnercut.tab"; } else { - name_+="_stubptoutercut.tab"; + name_ += "_stubptoutercut.tab"; } - - writeTable(); + writeTable(); } - -void TrackletLUT::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) { - +void TrackletLUT::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) { int nirbits = 0; - if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 ||iSeed == Seed::L1D1 || iSeed == Seed::L2D1 ) { + if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 || iSeed == Seed::L1D1 || iSeed == Seed::L2D1) { nirbits = 3; } @@ -223,27 +224,34 @@ void TrackletLUT::initTPregionlut(unsigned int iSeed, unsigned int layerdisk1, u } table_.push_back(usereg); - } } } positive_ = false; - char cTP='A'+iTP; - - name_="TP_"+TrackletConfigBuilder::LayerName(layerdisk1)+TrackletConfigBuilder::LayerName(layerdisk2)+cTP+"_usereg.tab"; + char cTP = 'A' + iTP; + + name_ = "TP_" + TrackletConfigBuilder::LayerName(layerdisk1) + TrackletConfigBuilder::LayerName(layerdisk2) + cTP + + "_usereg.tab"; writeTable(); - } -void TrackletLUT::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) { - +void TrackletLUT::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) { int outerrbits = 0; - if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 ||iSeed == Seed::L1D1 || iSeed == Seed::L2D1 ) { + if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 || iSeed == Seed::L1D1 || iSeed == Seed::L2D1) { outerrbits = 3; } @@ -272,7 +280,7 @@ void TrackletLUT::initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed table_.resize((1 << nbendbitsouter), false); } } - + for (int iphiinnerbin = 0; iphiinnerbin < innerphibins; iphiinnerbin++) { phiinner[0] = innerphimin + iphiinnerbin * (innerphimax - innerphimin) / innerphibins; phiinner[1] = innerphimin + (iphiinnerbin + 1) * (innerphimax - innerphimin) / innerphibins; @@ -280,7 +288,7 @@ void TrackletLUT::initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed phiouter[0] = outerphimin + iphiouterbin * (outerphimax - outerphimin) / outerphibins; phiouter[1] = outerphimin + (iphiouterbin + 1) * (outerphimax - outerphimin) / outerphibins; for (int irouterbin = 0; irouterbin < outerrbins; irouterbin++) { - if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 ||iSeed == Seed::L1D1 || iSeed == Seed::L2D1 ) { + if (iSeed == Seed::D1D2 || iSeed == Seed::D3D4 || iSeed == Seed::L1D1 || iSeed == Seed::L2D1) { router[0] = settings_.rmindiskvm() + irouterbin * (settings_.rmaxdiskvm() - settings_.rmindiskvm()) / outerrbins; router[1] = settings_.rmindiskvm() + @@ -328,36 +336,36 @@ void TrackletLUT::initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed bool passptcut = rinvmin < settings_.rinvcutte(); - if (fillInner) { - for (int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) { - double bend = settings_.benddecode(ibend, layerdisk1, nbendbitsinner == 3); - - bool passinner = bend > bendinnermin - settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3) && - bend < bendinnermax + settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3); - - if (fillTEMem) { - if (passinner) { - table_[ibend] = 1; - } - } else { - table_.push_back(passinner && passptcut); - } - } - } else { - for (int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) { - double bend = settings_.benddecode(ibend, layerdisk2, nbendbitsouter == 3); - - bool passouter = bend > bendoutermin - settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3) && - bend < bendoutermax + settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3); - if (fillTEMem) { - if (passouter) { - table_[ibend] = 1; - } - } else { - table_.push_back(passouter && passptcut); - } - } - } + if (fillInner) { + for (int ibend = 0; ibend < (1 << nbendbitsinner); ibend++) { + double bend = settings_.benddecode(ibend, layerdisk1, nbendbitsinner == 3); + + bool passinner = bend > bendinnermin - settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3) && + bend < bendinnermax + settings_.bendcutte(ibend, layerdisk1, nbendbitsinner == 3); + + if (fillTEMem) { + if (passinner) { + table_[ibend] = 1; + } + } else { + table_.push_back(passinner && passptcut); + } + } + } else { + for (int ibend = 0; ibend < (1 << nbendbitsouter); ibend++) { + double bend = settings_.benddecode(ibend, layerdisk2, nbendbitsouter == 3); + + bool passouter = bend > bendoutermin - settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3) && + bend < bendoutermax + settings_.bendcutte(ibend, layerdisk2, nbendbitsouter == 3); + if (fillTEMem) { + if (passouter) { + table_[ibend] = 1; + } + } else { + table_.push_back(passouter && passptcut); + } + } + } } } } @@ -366,91 +374,81 @@ void TrackletLUT::initteptlut(bool fillInner, bool fillTEMem, unsigned int iSeed if (fillTEMem) { if (fillInner) { - name_ = "VMSTE_"+innermem+"_vmbendcut.tab"; + name_ = "VMSTE_" + innermem + "_vmbendcut.tab"; } else { - name_ = "VMSTE_"+outermem+"_vmbendcut.tab"; + name_ = "VMSTE_" + outermem + "_vmbendcut.tab"; } } else { - name_ = "TE_"+innermem.substr(0,innermem.size()-2)+"_"+outermem.substr(0,outermem.size()-2); + name_ = "TE_" + innermem.substr(0, innermem.size() - 2) + "_" + outermem.substr(0, outermem.size() - 2); if (fillInner) { - name_+="_stubptinnercut.tab"; + name_ += "_stubptinnercut.tab"; } else { - name_+="_stubptoutercut.tab"; + name_ += "_stubptoutercut.tab"; } } - writeTable(); - } - void TrackletLUT::initProjectionBend(double k_phider, - unsigned int idisk, + unsigned int idisk, unsigned int nrbits, unsigned int nphiderbits) { - unsigned int nsignbins = 2; unsigned int nrbins = 1 << (nrbits); unsigned int nphiderbins = 1 << (nphiderbits); - + for (unsigned int isignbin = 0; isignbin < nsignbins; isignbin++) { for (unsigned int irbin = 0; irbin < nrbins; irbin++) { int ir = irbin; if (ir > (1 << (nrbits - 1))) - ir -= (1 << nrbits); + ir -= (1 << nrbits); ir = ir << (settings_.nrbitsstub(N_LAYER) - nrbits); for (unsigned int iphiderbin = 0; iphiderbin < nphiderbins; iphiderbin++) { - int iphider = iphiderbin; - if (iphider > (1 << (nphiderbits - 1))) - iphider -= (1 << nphiderbits); - iphider = iphider << (settings_.nbitsphiprojderL123() - nphiderbits); - - double rproj = ir * settings_.krprojshiftdisk(); - double phider = iphider * k_phider; - double t = settings_.zmean(idisk) / rproj; - - if (isignbin) - t = -t; - - double rinv = -phider * (2.0 * t); - - double stripPitch = (rproj < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); - double bendproj = bendstrip(rproj, rinv, stripPitch); - - int ibendproj = 2.0 * bendproj + 15.5; - if (ibendproj < 0) - ibendproj = 0; - if (ibendproj > 31) - ibendproj = 31; - - table_.push_back(ibendproj); + int iphider = iphiderbin; + if (iphider > (1 << (nphiderbits - 1))) + iphider -= (1 << nphiderbits); + iphider = iphider << (settings_.nbitsphiprojderL123() - nphiderbits); + + double rproj = ir * settings_.krprojshiftdisk(); + double phider = iphider * k_phider; + double t = settings_.zmean(idisk) / rproj; + + if (isignbin) + t = -t; + + double rinv = -phider * (2.0 * t); + + double stripPitch = (rproj < settings_.rcrit()) ? settings_.stripPitch(true) : settings_.stripPitch(false); + double bendproj = bendstrip(rproj, rinv, stripPitch); + + int ibendproj = 2.0 * bendproj + 15.5; + if (ibendproj < 0) + ibendproj = 0; + if (ibendproj > 31) + ibendproj = 31; + + table_.push_back(ibendproj); } } } positive_ = false; name_ = settings_.combined() ? "MP_" : "PR_"; - name_ += "ProjectionBend_"+TrackletConfigBuilder::LayerName(N_LAYER+idisk)+".tab"; + name_ += "ProjectionBend_" + TrackletConfigBuilder::LayerName(N_LAYER + idisk) + ".tab"; writeTable(); - } - - - void TrackletLUT::initBendMatch(unsigned int layerdisk) { - unsigned int nrinv = NRINVBITS; double rinvhalf = 0.5 * ((1 << nrinv) - 1); bool barrel = layerdisk < N_LAYER; bool isPSmodule = layerdisk < N_PSLAYER; double stripPitch = settings_.stripPitch(isPSmodule); - - if (barrel) { + if (barrel) { unsigned int nbits = isPSmodule ? N_BENDBITS_PS : N_BENDBITS_2S; for (unsigned int irinv = 0; irinv < (1u << nrinv); irinv++) { @@ -484,15 +482,12 @@ void TrackletLUT::initBendMatch(unsigned int layerdisk) { positive_ = false; - name_ = "METable_"+TrackletConfigBuilder::LayerName(layerdisk)+".tab"; - - writeTable(); + name_ = "METable_" + TrackletConfigBuilder::LayerName(layerdisk) + ".tab"; + writeTable(); } - void TrackletLUT::initVMRTable(unsigned int layerdisk, VMRTableType type, int region) { - unsigned int zbits = settings_.vmrlutzbits(layerdisk); unsigned int rbits = settings_.vmrlutrbits(layerdisk); @@ -500,7 +495,7 @@ void TrackletLUT::initVMRTable(unsigned int layerdisk, VMRTableType type, int re unsigned int zbins = (1 << zbits); double zmin, zmax, rmin, rmax; - + if (layerdisk < N_LAYER) { zmin = -settings_.zlength(); zmax = settings_.zlength(); @@ -540,8 +535,8 @@ void TrackletLUT::initVMRTable(unsigned int layerdisk, VMRTableType type, int re } } - if (layerdisk >= N_LAYER && irbin < 10) //special case for the tabulated radii in 2S disks - r = (layerdisk < N_LAYER+2) ? settings_.rDSSinner(irbin) : settings_.rDSSouter(irbin); + if (layerdisk >= N_LAYER && irbin < 10) //special case for the tabulated radii in 2S disks + r = (layerdisk < N_LAYER + 2) ? settings_.rDSSinner(irbin) : settings_.rDSSouter(irbin); int bin; if (layerdisk < N_LAYER) { @@ -556,120 +551,115 @@ void TrackletLUT::initVMRTable(unsigned int layerdisk, VMRTableType type, int re if (bin >= NBINS) bin = NBINS - 1; - if (type == VMRTableType::me ) { - table_.push_back(bin); + if (type == VMRTableType::me) { + table_.push_back(bin); } - if (type == VMRTableType::disk ) { - if (layerdisk >= N_LAYER) { - double rproj = r * settings_.zmean(layerdisk - N_LAYER) / z; - bin = 0.5 * NBINS * (rproj - settings_.rmindiskvm()) / (settings_.rmaxdiskvm() - settings_.rmindiskvm()); - //bin value of zero indicates that stub is out of range - if (bin < 0) - bin = 0; - if (bin >= NBINS / 2) - bin = 0; - table_.push_back(bin); - } + if (type == VMRTableType::disk) { + if (layerdisk >= N_LAYER) { + double rproj = r * settings_.zmean(layerdisk - N_LAYER) / z; + bin = 0.5 * NBINS * (rproj - settings_.rmindiskvm()) / (settings_.rmaxdiskvm() - settings_.rmindiskvm()); + //bin value of zero indicates that stub is out of range + if (bin < 0) + bin = 0; + if (bin >= NBINS / 2) + bin = 0; + table_.push_back(bin); + } } - if (type == VMRTableType::inner ) { - if (layerdisk == LayerDisk::L1 || layerdisk == LayerDisk::L3 || layerdisk == LayerDisk::L5 || - layerdisk == LayerDisk::D1 || layerdisk == LayerDisk::D3) { - table_.push_back(getVMRLookup(layerdisk + 1, z, r, dz, dr)); - } - if (layerdisk == LayerDisk::L2) { - table_.push_back(getVMRLookup(layerdisk + 1, z, r, dz, dr, Seed::L2L3)); - } + if (type == VMRTableType::inner) { + if (layerdisk == LayerDisk::L1 || layerdisk == LayerDisk::L3 || layerdisk == LayerDisk::L5 || + layerdisk == LayerDisk::D1 || layerdisk == LayerDisk::D3) { + table_.push_back(getVMRLookup(layerdisk + 1, z, r, dz, dr)); + } + if (layerdisk == LayerDisk::L2) { + table_.push_back(getVMRLookup(layerdisk + 1, z, r, dz, dr, Seed::L2L3)); + } } - if (type == VMRTableType::inneroverlap ) { - if (layerdisk == LayerDisk::L1 || layerdisk == LayerDisk::L2) { - table_.push_back(getVMRLookup(6, z, r, dz, dr, layerdisk + 6)); - } - } - - - if (type == VMRTableType::innerthird ) { - if (layerdisk == LayerDisk::L2) { //projection from L2 to D1 for L2L3D1 seeding - table_.push_back(getVMRLookup(LayerDisk::D1, z, r, dz, dr, Seed::L2L3D1)); - } - - if (layerdisk == LayerDisk::L5) { //projection from L5 to L4 for L5L6L4 seeding - table_.push_back(getVMRLookup(LayerDisk::L4, z, r, dz, dr)); - } - - if (layerdisk == LayerDisk::L3) { //projection from L3 to L5 for L3L4L2 seeding - table_.push_back(getVMRLookup(LayerDisk::L2, z, r, dz, dr)); - } - - if (layerdisk == LayerDisk::D1) { //projection from D1 to L2 for D1D2L2 seeding - table_.push_back(getVMRLookup(LayerDisk::L2, z, r, dz, dr)); - } + if (type == VMRTableType::inneroverlap) { + if (layerdisk == LayerDisk::L1 || layerdisk == LayerDisk::L2) { + table_.push_back(getVMRLookup(6, z, r, dz, dr, layerdisk + 6)); + } } + if (type == VMRTableType::innerthird) { + if (layerdisk == LayerDisk::L2) { //projection from L2 to D1 for L2L3D1 seeding + table_.push_back(getVMRLookup(LayerDisk::D1, z, r, dz, dr, Seed::L2L3D1)); + } + + if (layerdisk == LayerDisk::L5) { //projection from L5 to L4 for L5L6L4 seeding + table_.push_back(getVMRLookup(LayerDisk::L4, z, r, dz, dr)); + } + + if (layerdisk == LayerDisk::L3) { //projection from L3 to L5 for L3L4L2 seeding + table_.push_back(getVMRLookup(LayerDisk::L2, z, r, dz, dr)); + } + + if (layerdisk == LayerDisk::D1) { //projection from D1 to L2 for D1D2L2 seeding + table_.push_back(getVMRLookup(LayerDisk::L2, z, r, dz, dr)); + } + } } } - if (settings_.combined()) { if (type == VMRTableType::me) { positive_ = false; - name_ = "VMRME_"+TrackletConfigBuilder::LayerName(layerdisk)+".tab"; + name_ = "VMRME_" + TrackletConfigBuilder::LayerName(layerdisk) + ".tab"; } if (type == VMRTableType::disk) { positive_ = false; - name_ = "VMRTE_"+TrackletConfigBuilder::LayerName(layerdisk)+".tab"; + name_ = "VMRTE_" + TrackletConfigBuilder::LayerName(layerdisk) + ".tab"; } if (type == VMRTableType::inner) { positive_ = true; nbits_ = 10; - name_ = "TP_"+TrackletConfigBuilder::LayerName(layerdisk) - +TrackletConfigBuilder::LayerName(layerdisk+1)+".tab"; + name_ = "TP_" + TrackletConfigBuilder::LayerName(layerdisk) + TrackletConfigBuilder::LayerName(layerdisk + 1) + + ".tab"; } - + if (type == VMRTableType::inneroverlap) { positive_ = true; nbits_ = 10; - name_ = "TP_"+TrackletConfigBuilder::LayerName(layerdisk) - +TrackletConfigBuilder::LayerName(N_LAYER)+".tab"; + name_ = "TP_" + TrackletConfigBuilder::LayerName(layerdisk) + TrackletConfigBuilder::LayerName(N_LAYER) + ".tab"; } } else { if (type == VMRTableType::me) { //This if a hack where the same memory is used in both ME and TE modules - if (layerdisk==1||layerdisk==2||layerdisk==3||layerdisk==4) { - positive_ = false; - name_ = "VMTableOuter"+TrackletConfigBuilder::LayerName(layerdisk)+".tab"; - writeTable(); + if (layerdisk == 1 || layerdisk == 2 || layerdisk == 3 || layerdisk == 4) { + positive_ = false; + name_ = "VMTableOuter" + TrackletConfigBuilder::LayerName(layerdisk) + ".tab"; + writeTable(); } - - assert(region>=0); - char cregion='A'+region; - name_ = "VMR_"+TrackletConfigBuilder::LayerName(layerdisk)+"PHI"+cregion+"_finebin.tab"; + + assert(region >= 0); + char cregion = 'A' + region; + name_ = "VMR_" + TrackletConfigBuilder::LayerName(layerdisk) + "PHI" + cregion + "_finebin.tab"; positive_ = false; } - + if (type == VMRTableType::inner) { positive_ = false; - name_ = "VMTableInner"+TrackletConfigBuilder::LayerName(layerdisk) - +TrackletConfigBuilder::LayerName(layerdisk+1)+".tab"; + name_ = "VMTableInner" + TrackletConfigBuilder::LayerName(layerdisk) + + TrackletConfigBuilder::LayerName(layerdisk + 1) + ".tab"; } - + if (type == VMRTableType::inneroverlap) { positive_ = false; - name_ = "VMTableInner"+TrackletConfigBuilder::LayerName(layerdisk) - +TrackletConfigBuilder::LayerName(N_LAYER)+".tab"; + name_ = "VMTableInner" + TrackletConfigBuilder::LayerName(layerdisk) + TrackletConfigBuilder::LayerName(N_LAYER) + + ".tab"; } - + if (type == VMRTableType::disk) { positive_ = false; - name_ = "VMTableOuter"+TrackletConfigBuilder::LayerName(layerdisk)+".tab"; + name_ = "VMTableOuter" + TrackletConfigBuilder::LayerName(layerdisk) + ".tab"; } } - - writeTable(); + writeTable(); } int TrackletLUT::getVMRLookup(unsigned int layerdisk, double z, double r, double dz, double dr, int iseed) const { @@ -829,20 +819,16 @@ int TrackletLUT::getVMRLookup(unsigned int layerdisk, double z, double r, double } } - - - void TrackletLUT::initPhiCorrTable(unsigned int layerdisk, unsigned int rbits) { - bool psmodule = layerdisk < N_PSLAYER; unsigned int bendbits = psmodule ? N_BENDBITS_PS : N_BENDBITS_2S; - + unsigned int rbins = (1 << rbits); double rmean = settings_.rmean(layerdisk); double drmax = settings_.drmax(); - + double dr = 2.0 * drmax / rbins; unsigned int bendbins = (1 << bendbits); @@ -854,19 +840,17 @@ void TrackletLUT::initPhiCorrTable(unsigned int layerdisk, unsigned int rbits) { } } - name_ = "VMPhiCorrL" + std::to_string(layerdisk+1) + ".tab"; + name_ = "VMPhiCorrL" + std::to_string(layerdisk + 1) + ".tab"; nbits_ = 14; positive_ = false; writeTable(); - } -int TrackletLUT::getphiCorrValue(unsigned int layerdisk, unsigned int ibend, unsigned int irbin, - double rmean, double dr, double drmax) const { - +int TrackletLUT::getphiCorrValue( + unsigned int layerdisk, unsigned int ibend, unsigned int irbin, double rmean, double dr, double drmax) const { bool psmodule = layerdisk < N_PSLAYER; - + double bend = -settings_.benddecode(ibend, layerdisk, psmodule); //for the rbin - calculate the distance to the nominal layer radius @@ -875,17 +859,15 @@ int TrackletLUT::getphiCorrValue(unsigned int layerdisk, unsigned int ibend, uns //calculate the phi correction - this is a somewhat approximate formula double dphi = (Delta / 0.18) * bend * settings_.stripPitch(psmodule) / rmean; - double kphi = psmodule ? settings_.kphi() : settings_.kphi1(); - - int idphi = dphi/kphi; + double kphi = psmodule ? settings_.kphi() : settings_.kphi1(); + + int idphi = dphi / kphi; return idphi; } - // Write LUT table. -void TrackletLUT::writeTable() const{ - +void TrackletLUT::writeTable() const { if (!settings_.writeTable()) { return; } @@ -893,7 +875,7 @@ void TrackletLUT::writeTable() const{ if (name_ == "") { return; } - + ofstream out = openfile(settings_.tablePath(), name_, __FILE__, __LINE__); out << "{" << endl; diff --git a/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc b/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc index 720bf62b4b6b9..7ed7a828975cf 100644 --- a/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc +++ b/L1Trigger/TrackFindingTracklet/src/TrackletProcessor.cc @@ -19,9 +19,11 @@ using namespace trklet; TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Globals* globals) : TrackletCalculatorBase(name, settings, globals), tebuffer_(CircularBuffer(3), 0, 0, 0, 0), - pttableinner_(settings), pttableouter_(settings), useregiontable_(settings), - innerTable_(settings), innerOverlapTable_(settings) { - + pttableinner_(settings), + pttableouter_(settings), + useregiontable_(settings), + innerTable_(settings), + innerOverlapTable_(settings) { iAllStub_ = -1; for (unsigned int ilayer = 0; ilayer < N_LAYER; ilayer++) { @@ -37,11 +39,11 @@ TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Glob outervmstubs_ = nullptr; initLayerDisksandISeed(layerdisk1_, layerdisk2_, iSeed_); - + double rmin = -1.0; double rmax = -1.0; - if (iSeed_ == Seed::L1L2 ||iSeed_ == Seed::L2L3 ||iSeed_ == Seed::L3L4 ||iSeed_ == Seed::L5L6 ) { + if (iSeed_ == Seed::L1L2 || iSeed_ == Seed::L2L3 || iSeed_ == Seed::L3L4 || iSeed_ == Seed::L5L6) { rmin = settings_.rmean(layerdisk1_); rmax = settings_.rmean(layerdisk2_); } else { @@ -65,7 +67,7 @@ TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Glob double dfinephi = settings_.dphisectorHG() / nfinephibins; nbitsfinephi_ = settings_.nbitsallstubs(layerdisk2_) + settings_.nbitsvmte(1, iSeed_) + settings_.nfinephi(1, iSeed_); - + int nbins = 2.0 * (dphimax / dfinephi + 1.0); nbitsfinephidiff_ = log(nbins) / log(2.0) + 1; @@ -80,15 +82,16 @@ TrackletProcessor::TrackletProcessor(string name, Settings const& settings, Glob innerphibits_ = settings_.nfinephi(0, iSeed_); outerphibits_ = settings_.nfinephi(1, iSeed_); - if (layerdisk1_ == LayerDisk::L1 || layerdisk1_ == LayerDisk::L2 || layerdisk1_ == LayerDisk::L3 || layerdisk1_ == LayerDisk::L5 - || layerdisk1_ == LayerDisk::D1 || layerdisk1_ == LayerDisk::D3) { - innerTable_.initVMRTable(layerdisk1_, TrackletLUT::VMRTableType::inner); //projection to next layer/disk + if (layerdisk1_ == LayerDisk::L1 || layerdisk1_ == LayerDisk::L2 || layerdisk1_ == LayerDisk::L3 || + layerdisk1_ == LayerDisk::L5 || layerdisk1_ == LayerDisk::D1 || layerdisk1_ == LayerDisk::D3) { + innerTable_.initVMRTable(layerdisk1_, TrackletLUT::VMRTableType::inner); //projection to next layer/disk } - if (layerdisk1_ == LayerDisk::L1 || layerdisk1_ == LayerDisk::L2 ) { - innerOverlapTable_.initVMRTable(layerdisk1_, TrackletLUT::VMRTableType::inneroverlap); //projection to disk from layer + if (layerdisk1_ == LayerDisk::L1 || layerdisk1_ == LayerDisk::L2) { + innerOverlapTable_.initVMRTable(layerdisk1_, + TrackletLUT::VMRTableType::inneroverlap); //projection to disk from layer } - + // set TC index iTC_ = name_[7] - 'A'; assert(iTC_ >= 0 && iTC_ < 14); @@ -170,16 +173,16 @@ void TrackletProcessor::addInput(MemoryBase* memory, string input) { iAllStub_ = 3; } - unsigned int iTP = getName()[7]-'A'; - - pttableinner_.initTPlut(true, iSeed_, layerdisk1_, layerdisk2_, nbitsfinephidiff_, iTP); - pttableouter_.initTPlut(false, iSeed_, layerdisk1_, layerdisk2_, nbitsfinephidiff_, iTP); + unsigned int iTP = getName()[7] - 'A'; + + pttableinner_.initTPlut(true, iSeed_, layerdisk1_, layerdisk2_, nbitsfinephidiff_, iTP); + pttableouter_.initTPlut(false, iSeed_, layerdisk1_, layerdisk2_, nbitsfinephidiff_, iTP); //need iAllStub_ set before building the table - - useregiontable_.initTPregionlut(iSeed_, layerdisk1_, layerdisk2_, iAllStub_, - nbitsfinephidiff_, nbitsfinephi_, pttableinner_, iTP); - + + useregiontable_.initTPregionlut( + iSeed_, layerdisk1_, layerdisk2_, iAllStub_, nbitsfinephidiff_, nbitsfinephi_, pttableinner_, iTP); + TrackletEngineUnit teunit(&settings_, nbitsfinephi_, layerdisk1_, @@ -272,7 +275,6 @@ void TrackletProcessor::execute(unsigned int iSector, double phimin, double phim bool tebuffernearfull; for (unsigned int istep = 0; istep < maxStep_; istep++) { - // These print statements are not on by defaul but can be enabled for the // comparison with HLS code to track differences. if (print) { @@ -327,9 +329,9 @@ void TrackletProcessor::execute(unsigned int iSector, double phimin, double phim bool accept = false; - if (iSeed_ == Seed::L1L2 || iSeed_ == Seed::L2L3 || iSeed_ == Seed::L3L4 || iSeed_ == Seed::L5L6 ) { + if (iSeed_ == Seed::L1L2 || iSeed_ == Seed::L2L3 || iSeed_ == Seed::L3L4 || iSeed_ == Seed::L5L6) { accept = barrelSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); - } else if ( iSeed_ == Seed::D1D2 || iSeed_ == Seed::D3D4 ) { + } else if (iSeed_ == Seed::D1D2 || iSeed_ == Seed::D3D4) { accept = diskSeeding(innerFPGAStub, innerStub, outerFPGAStub, outerStub); } else { accept = overlapSeeding(outerFPGAStub, outerStub, innerFPGAStub, innerStub); @@ -411,9 +413,9 @@ void TrackletProcessor::execute(unsigned int iSector, double phimin, double phim int lutval = -1; if (iSeed_ < 6) { //FIXME should only be one table - but will need coordination with HLS code. - lutval = innerTable_.lookup((indexz<> (NFINERZBITS - 1)); @@ -441,7 +443,7 @@ void TrackletProcessor::execute(unsigned int iSector, double phimin, double phim } unsigned int usereg = useregiontable_.lookup(useregindex); - + tedata.regions_.clear(); tedata.stub_ = stub; tedata.rzbinfirst_ = rzfinebinfirst; @@ -534,4 +536,3 @@ void TrackletProcessor::execute(unsigned int iSector, double phimin, double phim << endl; } } - diff --git a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc index 05549c77e1321..b51f9ac754c94 100644 --- a/L1Trigger/TrackFindingTracklet/src/VMRouter.cc +++ b/L1Trigger/TrackFindingTracklet/src/VMRouter.cc @@ -14,36 +14,42 @@ using namespace std; using namespace trklet; VMRouter::VMRouter(string name, Settings const& settings, Globals* global) - : ProcessBase(name, settings, global), meTable_(settings), diskTable_(settings), - innerTable_(settings), innerOverlapTable_(settings), innerThirdTable_(settings) { - + : ProcessBase(name, settings, global), + meTable_(settings), + diskTable_(settings), + innerTable_(settings), + innerOverlapTable_(settings), + innerThirdTable_(settings) { layerdisk_ = initLayerDisk(4); vmstubsMEPHI_.resize(settings_.nvmme(layerdisk_), nullptr); - unsigned int region = name[9]-'A'; + unsigned int region = name[9] - 'A'; assert(region < settings_.nallstubs(layerdisk_)); - + overlapbits_ = 7; nextrabits_ = overlapbits_ - (settings_.nbitsallstubs(layerdisk_) + settings_.nbitsvmme(layerdisk_)); - meTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::me, region); //used for ME and outer TE barrel + meTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::me, region); //used for ME and outer TE barrel - if (layerdisk_==LayerDisk::D1 || layerdisk_==LayerDisk::D2 || layerdisk_==D4) { - diskTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::disk, region); //outer disk used by D1, D2, and D4 + if (layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D2 || layerdisk_ == D4) { + diskTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::disk, region); //outer disk used by D1, D2, and D4 } - - if (layerdisk_ == LayerDisk::L1 || layerdisk_ == LayerDisk::L2 || layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5 || - layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) { - innerTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::inner, region); //projection to next layer/disk + + if (layerdisk_ == LayerDisk::L1 || layerdisk_ == LayerDisk::L2 || layerdisk_ == LayerDisk::L3 || + layerdisk_ == LayerDisk::L5 || layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) { + innerTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::inner, region); //projection to next layer/disk } - if (layerdisk_ == LayerDisk::L1 || layerdisk_ == LayerDisk::L2 ) { - innerOverlapTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::inneroverlap, region); //projection to disk from layer + if (layerdisk_ == LayerDisk::L1 || layerdisk_ == LayerDisk::L2) { + innerOverlapTable_.initVMRTable( + layerdisk_, TrackletLUT::VMRTableType::inneroverlap, region); //projection to disk from layer } - if (layerdisk_ == LayerDisk::L2 || layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5 || layerdisk_ == LayerDisk::D1 ) { - innerThirdTable_.initVMRTable(layerdisk_, TrackletLUT::VMRTableType::innerthird, region); //projection to third layer/disk + if (layerdisk_ == LayerDisk::L2 || layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5 || + layerdisk_ == LayerDisk::D1) { + innerThirdTable_.initVMRTable( + layerdisk_, TrackletLUT::VMRTableType::innerthird, region); //projection to third layer/disk } nbitszfinebintable_ = settings_.vmrlutzbits(layerdisk_); @@ -64,7 +70,7 @@ void VMRouter::addOutput(MemoryBase* memory, string output) { } if (output.substr(0, 12) == "vmstuboutPHI" || output.substr(0, 14) == "vmstuboutMEPHI" || - output.substr(0, 15) == "vmstuboutTEIPHI" ||output.substr(0, 15) == "vmstuboutTEOPHI" ) { + output.substr(0, 15) == "vmstuboutTEIPHI" || output.substr(0, 15) == "vmstuboutTEOPHI") { char seedtype = memory->getName().substr(11, 1)[0]; unsigned int pos = 12; int vmbin = memory->getName().substr(pos, 1)[0] - '0'; @@ -93,7 +99,7 @@ void VMRouter::addOutput(MemoryBase* memory, string output) { if (layerdisk_ == LayerDisk::D3 || layerdisk_ == LayerDisk::D4) iseed = Seed::D3D4; if (layerdisk_ == LayerDisk::L1 || layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5 || - layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) + layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) inner = 0; } else if (seedtype < 'M') { if (layerdisk_ == LayerDisk::L2 || layerdisk_ == LayerDisk::L3) @@ -185,7 +191,7 @@ void VMRouter::execute() { for (unsigned int i = 0; i < stubinput->nStubs(); i++) { if (allStubCounter >= settings_.maxStep("VMR")) continue; - if (allStubCounter >= (1<= (1 << N_BITSMEMADDRESS)) continue; Stub* stub = stubinput->getStub(i); @@ -194,7 +200,7 @@ void VMRouter::execute() { //use &127 to make sure we fit into the number of bits - //though we should have protected against overflows above - FPGAWord allStubIndex(allStubCounter & ((1<setAllStubIndex(allStubCounter); @@ -247,7 +253,7 @@ void VMRouter::execute() { assert(indexz < (1 << nbitszfinebintable_)); assert(indexr < (1 << nbitsrfinebintable_)); - int melut = meTable_.lookup((indexz<= 0); int vmbin = melut >> 3; @@ -287,7 +293,8 @@ void VMRouter::execute() { for (auto& ivmstubTEPHI : vmstubsTEPHI_) { unsigned int iseed = ivmstubTEPHI.seednumber; unsigned int inner = ivmstubTEPHI.stubposition; - if ((iseed == Seed::D1D2 || iseed == Seed::D3D4 || iseed == Seed::L1D1 || iseed == Seed::L2D1) && (!stub->isPSmodule())) + if ((iseed == Seed::D1D2 || iseed == Seed::D3D4 || iseed == Seed::L1D1 || iseed == Seed::L2D1) && + (!stub->isPSmodule())) continue; unsigned int lutwidth = settings_.lutwidthtab(inner, iseed); @@ -311,21 +318,22 @@ void VMRouter::execute() { } } } else { - lutval = diskTable_.lookup((indexz< Seed::L2D1) { - lutval = innerTable_.lookup((indexz<nStubs(); i++) { if (allStubCounter > settings_.maxStep("VMR")) continue; - if (allStubCounter >= (1<= (1 << N_BITSMEMADDRESS)) continue; Stub* stub = stubinput->getStub(i); @@ -141,7 +140,7 @@ void VMRouterCM::execute() { //use &127 to make sure we fit into the number of bits - //though we should have protected against overflows above - FPGAWord allStubIndex(allStubCounter & ((1<setAllStubIndex(allStubCounter); @@ -189,11 +188,13 @@ void VMRouterCM::execute() { continue; int absz = std::abs(stub->z().value()); - if (layerdisk_ == LayerDisk::L2 && absz < VMROUTERCUTZL2 / settings_.kz(layerdisk_)) + if (layerdisk_ == LayerDisk::L2 && absz < VMROUTERCUTZL2 / settings_.kz(layerdisk_)) continue; - if ((layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5) && absz > VMROUTERCUTZL1L3L5 / settings_.kz(layerdisk_)) + if ((layerdisk_ == LayerDisk::L3 || layerdisk_ == LayerDisk::L5) && + absz > VMROUTERCUTZL1L3L5 / settings_.kz(layerdisk_)) continue; - if ((layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) && stub->r().value() > VMROUTERCUTRD1D3 / settings_.kr()) + if ((layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) && + stub->r().value() > VMROUTERCUTRD1D3 / settings_.kr()) continue; if ((layerdisk_ == LayerDisk::D1 || layerdisk_ == LayerDisk::D3) && stub->r().value() < 2 * int(N_DSS_MOD)) continue; @@ -242,8 +243,8 @@ void VMRouterCM::execute() { assert(indexz < (1 << nbitszfinebintable_)); assert(indexr < (1 << nbitsrfinebintable_)); - int melut = meTable_.lookup((indexz<= 0); int vmbin = melut >> NFINERZBITS; @@ -280,7 +281,7 @@ void VMRouterCM::execute() { if (layerdisk_ < N_LAYER) { lutval = melut; } else { - lutval = diskTable_.lookup((indexz<