Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-03 00:12:21

0001 #ifndef L1Trigger_TrackFindingTracklet_interface_TripletEngineUnit_h
0002 #define L1Trigger_TrackFindingTracklet_interface_TripletEngineUnit_h
0003 
0004 #include "L1Trigger/TrackFindingTracklet/interface/VMStubsTEMemory.h"
0005 #include "L1Trigger/TrackFindingTracklet/interface/CircularBuffer.h"
0006 #include "L1Trigger/TrackFindingTracklet/interface/TrackletLUT.h"
0007 
0008 #include <cassert>
0009 #include <vector>
0010 
0011 namespace trklet {
0012 
0013   class Settings;
0014   class Stub;
0015   class L1TStub;
0016 
0017   struct TrpEData {
0018     const Stub* stub_;
0019     int start_out_;
0020     int start_in_;
0021     int rzbinfirst_out_;
0022     int rzdiffmax_out_;
0023     std::vector<std::tuple<int, int, int> > projbin_out_;  // next z/r bin; outer stub mem; nstub
0024     std::vector<std::tuple<int, int, int> > projbin_in_;   // next z/r bin; inner stub mem; nstub
0025   };
0026 
0027   class TripletEngineUnit {
0028   public:
0029     TripletEngineUnit(const Settings* const settings,
0030                       unsigned int layerdisk1,
0031                       unsigned int layerdisk2,
0032                       unsigned int layerdisk3,
0033                       unsigned int iSeed,
0034                       std::vector<VMStubsTEMemory*> innervmstubs,
0035                       std::vector<VMStubsTEMemory*> outervmstubs);
0036 
0037     ~TripletEngineUnit() = default;
0038 
0039     void init(const TrpEData& trpdata);
0040 
0041     bool getGoodTriplet() { return goodtriplet__; }
0042 
0043     bool empty() const { return candtriplets_.empty(); }
0044 
0045     const std::tuple<const Stub*, const Stub*, const Stub*>& read() { return candtriplets_.read(); }
0046 
0047     const std::tuple<const Stub*, const Stub*, const Stub*>& peek() const { return candtriplets_.peek(); }
0048 
0049     bool idle() const { return idle_; }
0050 
0051     void setNearFull() { nearfull_ = candtriplets_.nearfull(); }
0052 
0053     void reset();
0054 
0055     void step();
0056 
0057     const Stub* innerStub() const { return trpdata_.stub_; }
0058 
0059   private:
0060     std::vector<VMStubsTEMemory*> innervmstubs_;
0061     std::vector<VMStubsTEMemory*> outervmstubs_;
0062     TrpEData trpdata_;
0063     const Settings* settings_;
0064     unsigned int layerdisk1_;
0065     unsigned int layerdisk2_;
0066     unsigned int layerdisk3_;
0067     unsigned int iSeed_;
0068     bool nearfull_;  //initialized at start of each processing step
0069 
0070     //unsigned int memory slot
0071     unsigned int nmem_out_;
0072     unsigned int nmem_in_;
0073     unsigned int istub_out_;
0074     unsigned int istub_in_;
0075     unsigned int next_out_;
0076     unsigned int next_in_;
0077     unsigned int nstub_out_;
0078     unsigned int nstub_in_;
0079     unsigned int outmem_;
0080     unsigned int inmem_;
0081     unsigned int nproj_out_;
0082     unsigned int nproj_in_;
0083 
0084     bool idle_;
0085 
0086     std::tuple<const Stub*, const Stub*, const Stub*> candtriplet_, candtriplet__;
0087     bool goodtriplet_, goodtriplet__;
0088 
0089     //save the candidate matches
0090     CircularBuffer<std::tuple<const Stub*, const Stub*, const Stub*> > candtriplets_;
0091   };  // TripletEngineUnit
0092 
0093 };  // namespace trklet
0094 #endif