CMS 3D CMS Logo

multififo_regionizer_ref.h
Go to the documentation of this file.
1 #ifndef multififo_regionizer_ref_h
2 #define multififo_regionizer_ref_h
3 
7 #include <memory>
8 
9 namespace edm {
10  class ParameterSet;
12 } // namespace edm
13 
14 namespace l1ct {
15  class EGInputSelectorEmulator;
16  struct EGInputSelectorEmuConfig;
17 } // namespace l1ct
18 
19 namespace l1ct {
21  public:
22  MultififoRegionizerEmulator(unsigned int nendcaps,
23  unsigned int nclocks,
24  unsigned int ntklinks,
25  unsigned int ncalolinks,
26  unsigned int ntk,
27  unsigned int ncalo,
28  unsigned int nem,
29  unsigned int nmu,
30  bool streaming,
31  unsigned int outii,
32  unsigned int pauseii,
33  bool useAlsoVtxCoords);
34 
37  unsigned int nHCalLinks,
38  unsigned int nECalLinks,
39  unsigned int nclocks,
40  unsigned int ntk,
41  unsigned int ncalo,
42  unsigned int nem,
43  unsigned int nmu,
44  bool streaming,
45  unsigned int outii,
46  unsigned int pauseii,
47  bool useAlsoVtxCoords);
48  // note: these ones will work only in CMSSW
50  MultififoRegionizerEmulator(const std::string& barrelSetup, const edm::ParameterSet& iConfig);
51 
53 
56 
58 
59  void setEgInterceptMode(bool afterFifo, const l1ct::EGInputSelectorEmuConfig& interceptorConfig);
60  void initSectorsAndRegions(const RegionizerDecodedInputs& in, const std::vector<PFInputRegion>& out) override;
61 
62  void run(const RegionizerDecodedInputs& in, std::vector<PFInputRegion>& out) override;
63 
64  // clock-cycle emulation
65  bool step(bool newEvent,
66  const std::vector<l1ct::TkObjEmu>& links,
67  std::vector<l1ct::TkObjEmu>& out,
68  bool mux = true);
69  bool step(bool newEvent,
70  const std::vector<l1ct::EmCaloObjEmu>& links,
71  std::vector<l1ct::EmCaloObjEmu>& out,
72  bool mux = true);
73  bool step(bool newEvent,
74  const std::vector<l1ct::HadCaloObjEmu>& links,
75  std::vector<l1ct::HadCaloObjEmu>& out,
76  bool mux = true);
77  bool step(bool newEvent,
78  const std::vector<l1ct::MuObjEmu>& links,
79  std::vector<l1ct::MuObjEmu>& out,
80  bool mux = true);
81  bool step(bool newEvent,
82  const std::vector<l1ct::TkObjEmu>& links_tk,
83  const std::vector<l1ct::HadCaloObjEmu>& links_hadCalo,
84  const std::vector<l1ct::EmCaloObjEmu>& links_emCalo,
85  const std::vector<l1ct::MuObjEmu>& links_mu,
86  std::vector<l1ct::TkObjEmu>& out_tk,
87  std::vector<l1ct::HadCaloObjEmu>& out_hadCalo,
88  std::vector<l1ct::EmCaloObjEmu>& out_emCalo,
89  std::vector<l1ct::MuObjEmu>& out_mu,
90  bool mux = true);
91  void destream(int iclock,
92  const std::vector<l1ct::TkObjEmu>& tk_out,
93  const std::vector<l1ct::EmCaloObjEmu>& em_out,
94  const std::vector<l1ct::HadCaloObjEmu>& calo_out,
95  const std::vector<l1ct::MuObjEmu>& mu_out,
97 
98  // link emulation from decoded inputs (for simulation)
99  void fillLinks(unsigned int iclock,
101  std::vector<l1ct::TkObjEmu>& links,
102  std::vector<bool>& valid);
103  void fillLinks(unsigned int iclock,
105  std::vector<l1ct::HadCaloObjEmu>& links,
106  std::vector<bool>& valid);
107  void fillLinks(unsigned int iclock,
109  std::vector<l1ct::EmCaloObjEmu>& links,
110  std::vector<bool>& valid);
111  void fillLinks(unsigned int iclock,
113  std::vector<l1ct::MuObjEmu>& links,
114  std::vector<bool>& valid);
115  template <typename T>
116  void fillLinks(unsigned int iclock, const RegionizerDecodedInputs& in, std::vector<T>& links) {
117  std::vector<bool> unused;
118  fillLinks(iclock, in, links, unused);
119  }
120 
121  // convert links to firmware
122  void toFirmware(const std::vector<l1ct::TkObjEmu>& emu, TkObj fw[/*NTK_SECTORS*NTK_LINKS*/]);
123  void toFirmware(const std::vector<l1ct::HadCaloObjEmu>& emu, HadCaloObj fw[/*NCALO_SECTORS*NCALO_LINKS*/]);
124  void toFirmware(const std::vector<l1ct::EmCaloObjEmu>& emu, EmCaloObj fw[/*NCALO_SECTORS*NCALO_LINKS*/]);
125  void toFirmware(const std::vector<l1ct::MuObjEmu>& emu, MuObj fw[/*NMU_LINKS*/]);
126 
127  void reset();
128 
129  private:
130  const unsigned int NTK_SECTORS, NCALO_SECTORS; // max objects per sector per clock cycle
135  std::unique_ptr<EGInputSelectorEmulator> interceptor_;
136  bool init_;
137 
142  std::vector<l1ct::multififo_regionizer::Route> tkRoutes_, caloRoutes_, emCaloRoutes_, muRoutes_;
143 
144  template <typename T>
145  void fillCaloLinks(unsigned int iclock,
147  std::vector<T>& links,
148  std::vector<bool>& valid);
149  };
150 
151 } // namespace l1ct
152 
153 #endif
std::vector< l1ct::multififo_regionizer::Route > emCaloRoutes_
void fillLinks(unsigned int iclock, const RegionizerDecodedInputs &in, std::vector< l1ct::TkObjEmu > &links, std::vector< bool > &valid)
std::unique_ptr< EGInputSelectorEmulator > interceptor_
enum l1ct::MultififoRegionizerEmulator::EmInterceptMode emInterceptMode_
void setEgInterceptMode(bool afterFifo, const l1ct::EGInputSelectorEmuConfig &interceptorConfig)
multififo_regionizer::Regionizer< l1ct::TkObjEmu > tkRegionizer_
MultififoRegionizerEmulator(unsigned int nendcaps, unsigned int nclocks, unsigned int ntklinks, unsigned int ncalolinks, unsigned int ntk, unsigned int ncalo, unsigned int nem, unsigned int nmu, bool streaming, unsigned int outii, unsigned int pauseii, bool useAlsoVtxCoords)
bool step(bool newEvent, const std::vector< l1ct::TkObjEmu > &links, std::vector< l1ct::TkObjEmu > &out, bool mux=true)
static edm::ParameterSetDescription getParameterSetDescriptionBarrel()
void run(const RegionizerDecodedInputs &in, std::vector< PFInputRegion > &out) override
void fillLinks(unsigned int iclock, const RegionizerDecodedInputs &in, std::vector< T > &links)
std::vector< l1ct::multififo_regionizer::Route > tkRoutes_
void toFirmware(const std::vector< l1ct::TkObjEmu > &emu, TkObj fw[])
static BarrelSetup parseBarrelSetup(const std::string &setup)
void destream(int iclock, const std::vector< l1ct::TkObjEmu > &tk_out, const std::vector< l1ct::EmCaloObjEmu > &em_out, const std::vector< l1ct::HadCaloObjEmu > &calo_out, const std::vector< l1ct::MuObjEmu > &mu_out, PFInputRegion &out)
std::vector< l1ct::multififo_regionizer::Route > muRoutes_
std::vector< l1ct::multififo_regionizer::Route > caloRoutes_
static edm::ParameterSetDescription getParameterSetDescription()
multififo_regionizer::Regionizer< l1ct::EmCaloObjEmu > emCaloRegionizer_
HLT enums.
void fillCaloLinks(unsigned int iclock, const std::vector< DetectorSector< T >> &in, std::vector< T > &links, std::vector< bool > &valid)
void initSectorsAndRegions(const RegionizerDecodedInputs &in, const std::vector< PFInputRegion > &out) override
multififo_regionizer::Regionizer< l1ct::MuObjEmu > muRegionizer_
multififo_regionizer::Regionizer< l1ct::HadCaloObjEmu > hadCaloRegionizer_
Definition: datatypes.h:17