Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:01

0001 #ifndef L1Trigger_L1TMuonEndCapPhase2_EMTFTypes_h
0002 #define L1Trigger_L1TMuonEndCapPhase2_EMTFTypes_h
0003 
0004 #include <array>
0005 #include <vector>
0006 
0007 #include "ap_int.h"
0008 #include "ap_fixed.h"
0009 #include "DataFormats/L1TMuonPhase2/interface/EMTFHit.h"
0010 #include "DataFormats/L1TMuonPhase2/interface/EMTFTrack.h"
0011 #include "DataFormats/L1TMuonPhase2/interface/EMTFInput.h"
0012 #include "L1Trigger/L1TMuon/interface/GeometryTranslator.h"
0013 #include "L1Trigger/L1TMuon/interface/MuonTriggerPrimitive.h"
0014 #include "L1Trigger/L1TMuonEndCapPhase2/interface/EMTFfwd.h"
0015 #include "L1Trigger/L1TMuonEndCapPhase2/interface/EMTFConstants.h"
0016 
0017 namespace emtf::phase2 {
0018 
0019   // Trigger Primitives
0020   typedef L1TMuon::TriggerPrimitive TriggerPrimitive;
0021   typedef std::vector<TPEntry> TPCollection;
0022   typedef std::map<int, TPCollection> BXTPCMap;
0023   typedef std::map<int, TPCollection> ILinkTPCMap;
0024 
0025   // Hits
0026   typedef l1t::phase2::EMTFHit EMTFHit;
0027   typedef l1t::phase2::EMTFHitCollection EMTFHitCollection;
0028 
0029   // Tracks
0030   typedef l1t::phase2::EMTFTrack EMTFTrack;
0031   typedef l1t::phase2::EMTFTrackCollection EMTFTrackCollection;
0032 
0033   // Inputs
0034   typedef l1t::phase2::EMTFInput EMTFInput;
0035   typedef l1t::phase2::EMTFInputCollection EMTFInputCollection;
0036 
0037   // General
0038   typedef ap_uint<1> flag_t;
0039 
0040   // Segments
0041   enum class site_id_t {
0042     kME11 = 0,
0043     kME12 = 1,
0044     kME2 = 2,
0045     kME3 = 3,
0046     kME4 = 4,
0047     kRE1 = 5,
0048     kRE2 = 6,
0049     kRE3 = 7,
0050     kRE4 = 8,
0051     kGE11 = 9,
0052     kGE21 = 10,
0053     kME0 = 11,
0054     size,
0055     begin = 0,
0056     end = size
0057   };
0058 
0059   enum class feature_id_t { kPhi = 0, kTheta = 1, kBend = 2, kQuality = 3, kTime = 4, size, begin = 0, end = size };
0060 
0061   enum class theta_id_t { kTheta1 = 0, kTheta2 = 1, size, begin = 0, end = size };
0062 
0063   enum class reduced_site_id_t { kME1 = 0, kME2 = 1, kME3 = 2, kME4 = 3, kME0 = 4, size, begin = 0, end = size };
0064 
0065   typedef ap_uint<13> seg_phi_t;
0066   typedef ap_int<10> seg_bend_t;
0067   typedef ap_uint<8> seg_theta_t;
0068   typedef ap_uint<4> seg_qual_t;
0069   typedef ap_int<4> seg_time_t;
0070   typedef ap_uint<3> seg_zones_t;
0071   typedef ap_uint<3> seg_tzones_t;
0072   typedef ap_uint<1> seg_cscfr_t;
0073   typedef ap_uint<1> seg_layer_t;
0074   typedef ap_int<2> seg_bx_t;
0075   typedef ap_uint<1> seg_valid_t;
0076 
0077   struct segment_t {
0078     seg_phi_t phi;
0079     seg_bend_t bend;
0080     seg_theta_t theta1;
0081     seg_theta_t theta2;
0082     seg_qual_t qual1;
0083     seg_qual_t qual2;
0084     seg_time_t time;
0085     seg_zones_t zones;
0086     seg_tzones_t tzones;
0087     seg_cscfr_t cscfr;
0088     seg_layer_t layer;
0089     seg_bx_t bx;
0090     seg_valid_t valid;
0091   };
0092 
0093   typedef std::array<segment_t, v3::kNumSegments> segment_collection_t;
0094 
0095   // Tracks
0096   typedef ap_uint<2> trk_zone_t;
0097   typedef ap_uint<2> trk_tzone_t;
0098   typedef ap_uint<9> trk_col_t;
0099   typedef ap_uint<3> trk_patt_t;
0100   typedef ap_uint<6> trk_qual_t;
0101   typedef ap_uint<2> trk_gate_t;
0102   typedef ap_uint<1> trk_q_t;
0103   typedef ap_uint<13> trk_pt_t;
0104   typedef ap_uint<7> trk_rels_t;
0105   typedef ap_int<7> trk_dxy_t;
0106   typedef ap_int<5> trk_z0_t;
0107   typedef ap_int<13> trk_phi_t;
0108   typedef ap_int<13> trk_eta_t;
0109   typedef ap_uint<4> trk_beta_t;
0110   typedef ap_uint<1> trk_valid_t;
0111   typedef ap_uint<8> trk_site_seg_t;
0112   typedef ap_uint<1> trk_site_bit_t;
0113   typedef ap_int<13> trk_feature_t;
0114   typedef ap_int<10> trk_nn_address_t;
0115 
0116   struct track_t {
0117     typedef std::array<trk_site_seg_t, v3::kNumTrackSites> site_segs_t;
0118     typedef std::array<trk_site_bit_t, v3::kNumTrackSites> site_mask_t;
0119     typedef std::array<trk_feature_t, v3::kNumTrackFeatures> features_t;
0120 
0121     trk_zone_t zone;
0122     trk_col_t col;
0123     trk_patt_t pattern;
0124     trk_qual_t quality;
0125     trk_q_t q;
0126     trk_pt_t pt;
0127     trk_rels_t rels;
0128     trk_dxy_t dxy;
0129     trk_z0_t z0;
0130     seg_phi_t phi;
0131     seg_theta_t theta;
0132     trk_eta_t eta;
0133     trk_beta_t beta;
0134     trk_valid_t valid;
0135     site_segs_t site_segs;
0136     site_mask_t site_mask;
0137     site_mask_t site_rm_mask;
0138     features_t features;
0139     trk_nn_address_t pt_address;
0140     trk_nn_address_t rels_address;
0141     trk_nn_address_t dxy_address;
0142   };
0143 
0144   // Hitmaps
0145   typedef ap_uint<v3::kHitmapNCols> hitmap_row_t;
0146   typedef std::array<hitmap_row_t, v3::kHitmapNRows> hitmap_t;
0147 
0148   // Roads
0149   struct road_t {
0150     trk_zone_t zone;
0151     trk_col_t col;
0152     trk_patt_t pattern;
0153     trk_qual_t quality;
0154   };
0155 
0156   typedef std::array<road_t, v3::kHitmapNCols> road_collection_t;
0157 
0158   // Reduced Track
0159   struct reduced_track_t {
0160     typedef std::array<trk_site_seg_t, v3::kNumTrackSitesRM> site_segs_t;
0161     typedef std::array<trk_site_bit_t, v3::kNumTrackSitesRM> site_mask_t;
0162 
0163     trk_valid_t valid;
0164     site_segs_t site_segs;
0165     site_mask_t site_mask;
0166   };
0167 }  // namespace emtf::phase2
0168 
0169 typedef L1TMuon::subsystem_type SubsystemType;
0170 typedef L1TMuon::GeometryTranslator GeometryTranslator;
0171 
0172 typedef L1TMuon::TriggerPrimitive::DTData DTData;
0173 typedef L1TMuon::TriggerPrimitive::CSCData CSCData;
0174 typedef L1TMuon::TriggerPrimitive::RPCData RPCData;
0175 typedef L1TMuon::TriggerPrimitive::GEMData GEMData;
0176 typedef L1TMuon::TriggerPrimitive::ME0Data ME0Data;
0177 
0178 #endif  // L1Trigger_L1TMuonEndCapPhase2_EMTFTypes_h