File indexing completed on 2024-04-06 12:21:01
0001 #ifndef L1Trigger_L1TMuonEndCapPhase2_EMTFModel_h
0002 #define L1Trigger_L1TMuonEndCapPhase2_EMTFModel_h
0003
0004 #include <array>
0005 #include <vector>
0006
0007 #include "L1Trigger/L1TMuonEndCapPhase2/interface/EMTFfwd.h"
0008 #include "L1Trigger/L1TMuonEndCapPhase2/interface/EMTFTypes.h"
0009 #include "L1Trigger/L1TMuonEndCapPhase2/interface/EMTFConstants.h"
0010
0011 namespace emtf::phase2 {
0012
0013
0014 namespace model {
0015 namespace zones {
0016 namespace hitmap {
0017 struct chamber_t;
0018 struct site_t;
0019 typedef std::vector<site_t> row_t;
0020 }
0021
0022 namespace pattern {
0023 struct row_t;
0024 }
0025
0026 typedef std::vector<hitmap::row_t> hitmap_t;
0027 typedef std::vector<pattern::row_t> pattern_t;
0028 typedef std::vector<unsigned int> quality_lut_t;
0029 }
0030
0031 namespace theta_medians {
0032 struct site_t;
0033 typedef std::vector<site_t> group_t;
0034 }
0035
0036 namespace reduced_sites {
0037 struct reduced_site_t;
0038 }
0039
0040 struct zone_t;
0041 struct feature_t;
0042
0043 typedef std::vector<theta_medians::group_t> theta_median_t;
0044 typedef std::vector<reduced_sites::reduced_site_t> reduced_sites_t;
0045 }
0046
0047
0048 class EMTFModel {
0049 public:
0050 EMTFModel(const EMTFContext&);
0051
0052 ~EMTFModel();
0053
0054 std::vector<model::zone_t> zones_;
0055 std::vector<model::feature_t> features_;
0056 std::vector<model::theta_median_t> theta_medians_;
0057 model::reduced_sites_t reduced_sites_;
0058
0059 private:
0060 const EMTFContext& context_;
0061 };
0062
0063 namespace model {
0064
0065 struct zone_t {
0066 zones::hitmap_t hitmap;
0067
0068
0069 std::vector<zones::pattern_t> prompt_patterns;
0070 zones::quality_lut_t prompt_quality_lut;
0071
0072
0073 std::vector<zones::pattern_t> disp_patterns;
0074 zones::quality_lut_t disp_quality_lut;
0075 };
0076
0077 namespace zones {
0078 namespace hitmap {
0079 struct site_t {
0080 site_id_t id;
0081 std::vector<chamber_t> chambers;
0082 };
0083
0084 struct chamber_t {
0085 unsigned int id;
0086 unsigned int begin;
0087 unsigned int end;
0088 };
0089 }
0090
0091 namespace pattern {
0092 struct row_t {
0093 unsigned int begin;
0094 unsigned int center;
0095 unsigned int end;
0096 };
0097 }
0098 }
0099
0100
0101 struct feature_t {
0102 feature_id_t id;
0103 std::vector<site_id_t> sites;
0104 };
0105
0106
0107 namespace theta_medians {
0108 struct site_t {
0109 site_id_t id;
0110 theta_id_t theta_id;
0111 };
0112 }
0113
0114
0115 namespace reduced_sites {
0116 struct reduced_site_t {
0117 reduced_site_id_t id;
0118 std::vector<site_id_t> trk_sites;
0119 };
0120 }
0121 }
0122 }
0123
0124 #endif