Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-02 23:19:45

0001 #ifndef L1Trigger_Phase2GMT_TPSAlgorithm_h
0002 #define L1Trigger_Phase2GMT_TPSAlgorithm_h
0003 
0004 #include "DataFormats/L1TrackTrigger/interface/TTTrack.h"
0005 #include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h"
0006 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0007 #include "DataFormats/L1TMuonPhase2/interface/MuonStub.h"
0008 #include "DataFormats/L1TMuonPhase2/interface/TrackerMuon.h"
0009 #include "DataFormats/L1TMuonPhase2/interface/SAMuon.h"
0010 #include "DataFormats/L1Trigger/interface/L1TObjComparison.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "L1Trigger/Phase2L1GMT/interface/ConvertedTTTrack.h"
0013 #include "L1Trigger/Phase2L1GMT/interface/PreTrackMatchedMuon.h"
0014 #include "L1Trigger/Phase2L1GMT/interface/TPSLUTs.h"
0015 #include <iostream>
0016 
0017 namespace Phase2L1GMT {
0018 
0019   const unsigned int PHISHIFT = BITSPHI - BITSSTUBCOORD;
0020   const unsigned int ETADIVIDER = 1 << (BITSETA - BITSSTUBETA);
0021   const unsigned int BITSHIFTPROP1C1 = 9;
0022   const unsigned int BITSHIFTPROP2C1 = 23;
0023   const unsigned int BITSHIFTPROP3C1 = 22;
0024   const unsigned int BITSHIFTPROP1C2 = 9;
0025   const unsigned int BITSHIFTPROP2C2 = 24;
0026   const unsigned int BITSHIFTPROP3C2 = 19;
0027   const unsigned int BITSHIFTRES1 = 11;
0028   //for comparison with absK to see which functional form to propagate phi according to
0029   //coord1 k cutoff: 4096
0030   //coord2 k cutoffs: 1024, 7168, 4096, 2048, 4096
0031   const unsigned int BITSHIFTCURVSCALEC1 = 12;
0032   const unsigned int BITSHIFTCURVSCALEC2LEADS[5] = {10, 13, 12, 11, 12};
0033   const unsigned int BITSHIFTCURVSCALEC2CORRS[5] = {0, 10, 0, 0, 0};
0034 
0035   const unsigned int BITSPROP = BITSPHI - 2;
0036   const ap_uint<BITSPROP> PROPMAX = ~ap_uint<BITSPROP>(0);
0037   const ap_uint<BITSSIGMACOORD> SIGMAMAX = ~ap_uint<BITSSIGMACOORD>(0);
0038   const ap_uint<BITSSIGMACOORD> SIGMAMIN = 2;
0039 
0040   struct propagation_t {
0041     ap_int<BITSSTUBCOORD> coord1;
0042     ap_uint<BITSSIGMACOORD> sigma_coord1;
0043     ap_int<BITSSTUBCOORD> coord2;
0044     ap_uint<BITSSIGMACOORD> sigma_coord2;
0045     ap_int<BITSSTUBETA> eta;
0046     ap_uint<BITSSIGMAETA> sigma_eta1;
0047     ap_uint<BITSSIGMAETA> sigma_eta2;
0048     ap_uint<1> valid;
0049     ap_uint<1> is_barrel;
0050   };
0051 
0052   struct match_t {
0053     ap_uint<BITSMATCHQUALITY - 2> quality;
0054     ap_uint<BITSSTUBID> id;
0055     ap_uint<2> valid;
0056     bool isGlobal = false;
0057     l1t::SAMuonRef muRef;
0058     l1t::MuonStubRef stubRef;
0059   };
0060 
0061   class TPSAlgorithm {
0062   public:
0063     explicit TPSAlgorithm(const edm::ParameterSet& iConfig);
0064     TPSAlgorithm() = delete;
0065     ~TPSAlgorithm() = default;
0066 
0067     std::vector<PreTrackMatchedMuon> processNonant(const std::vector<ConvertedTTTrack>& convertedTracks,
0068                                                    const l1t::MuonStubRefVector& stubs) const;
0069 
0070     std::vector<PreTrackMatchedMuon> cleanNeighbor(const std::vector<PreTrackMatchedMuon>& muons,
0071                                                    const std::vector<PreTrackMatchedMuon>& muonsPrevious,
0072                                                    const std::vector<PreTrackMatchedMuon>& muonsNext,
0073                                                    bool equality) const;
0074     std::vector<l1t::TrackerMuon> convert(const std::vector<PreTrackMatchedMuon>& muons, uint maximum) const;
0075     bool outputGT(std::vector<l1t::TrackerMuon>& muons) const;
0076     void SetQualityBits(std::vector<l1t::TrackerMuon>& muons) const;
0077     std::vector<l1t::TrackerMuon> sort(std::vector<l1t::TrackerMuon>& muons, uint maximum) const;
0078 
0079   private:
0080     int verbose_;
0081     propagation_t propagate(const ConvertedTTTrack& track, uint layer) const;
0082     ap_uint<BITSSIGMAETA + 1> deltaEta(const ap_int<BITSSTUBETA>& eta1, const ap_int<BITSSTUBETA>& eta2) const;
0083     ap_uint<BITSSIGMACOORD + 1> deltaCoord(const ap_int<BITSSTUBCOORD>& phi1, const ap_int<BITSSTUBCOORD>& phi2) const;
0084     match_t match(const propagation_t prop, const l1t::MuonStubRef& stub, uint trackID) const;
0085     match_t propagateAndMatch(const ConvertedTTTrack& track, const l1t::MuonStubRef& stub, uint trackID) const;
0086     match_t getBest(const std::vector<match_t>& matches) const;
0087     PreTrackMatchedMuon processTrack(const ConvertedTTTrack&, const l1t::MuonStubRefVector&) const;
0088     ap_uint<5> cleanMuon(const PreTrackMatchedMuon& mu, const PreTrackMatchedMuon& other, bool eq) const;
0089     void matchingInfos(const std::vector<match_t>& matchInfo,
0090                        PreTrackMatchedMuon& muon,
0091                        ap_uint<BITSMATCHQUALITY>& quality) const;
0092     std::vector<PreTrackMatchedMuon> clean(const std::vector<PreTrackMatchedMuon>& muons) const;
0093   };
0094 }  // namespace Phase2L1GMT
0095 
0096 #endif