Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Forward Declarations
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       }  // namespace hitmap
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     }  // namespace zones
0030 
0031     namespace theta_medians {
0032       struct site_t;
0033       typedef std::vector<site_t> group_t;
0034     }  // namespace theta_medians
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   }  // namespace model
0046 
0047   // Definitions
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     // Define Zone Structs
0065     struct zone_t {
0066       zones::hitmap_t hitmap;
0067 
0068       // Prompt
0069       std::vector<zones::pattern_t> prompt_patterns;
0070       zones::quality_lut_t prompt_quality_lut;
0071 
0072       // Displaced
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       }  // namespace hitmap
0090 
0091       namespace pattern {
0092         struct row_t {
0093           unsigned int begin;
0094           unsigned int center;
0095           unsigned int end;
0096         };
0097       }  // namespace pattern
0098     }    // namespace zones
0099 
0100     // Define Feature Structs
0101     struct feature_t {
0102       feature_id_t id;
0103       std::vector<site_id_t> sites;
0104     };
0105 
0106     // Define Theta Median Structs
0107     namespace theta_medians {
0108       struct site_t {
0109         site_id_t id;
0110         theta_id_t theta_id;
0111       };
0112     }  // namespace theta_medians
0113 
0114     // Define Reduced Site Structs
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     }  // namespace reduced_sites
0121   }    // namespace model
0122 }  // namespace emtf::phase2
0123 
0124 #endif  // L1Trigger_L1TMuonEndCapPhase2_EMTFModel_h not defined