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_;
0024 std::vector<std::tuple<int, int, int> > projbin_in_;
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_;
0069
0070
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
0090 CircularBuffer<std::tuple<const Stub*, const Stub*, const Stub*> > candtriplets_;
0091 };
0092
0093 };
0094 #endif