Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:19:45

0001 #ifndef Phase2L1Trigger_DTTrigger_MPCorFilter_h
0002 #define Phase2L1Trigger_DTTrigger_MPCorFilter_h
0003 
0004 #include "L1Trigger/DTTriggerPhase2/interface/MPFilter.h"
0005 #include "L1Trigger/DTTriggerPhase2/interface/vhdl_functions.h"
0006 
0007 #include <iostream>
0008 #include <fstream>
0009 
0010 // ===============================================================================
0011 // Previous definitions and declarations
0012 // ===============================================================================
0013 
0014 // ===============================================================================
0015 // Class declarations
0016 // ===============================================================================
0017 
0018 struct valid_cor_tp_t {
0019   bool valid;
0020   cmsdt::metaPrimitive mp;
0021   int coarsed_t0;
0022   int coarsed_pos;
0023   int coarsed_slope;
0024   valid_cor_tp_t() : valid(false), mp(cmsdt::metaPrimitive()), coarsed_t0(-1), coarsed_pos(-1), coarsed_slope(-1) {}
0025   valid_cor_tp_t(bool valid, cmsdt::metaPrimitive mp, int coarsed_t0, int coarsed_pos, int coarsed_slope)
0026       : valid(valid), mp(mp), coarsed_t0(coarsed_t0), coarsed_pos(coarsed_pos), coarsed_slope(coarsed_slope) {}
0027 };
0028 
0029 using valid_cor_tp_arr_t = std::vector<valid_cor_tp_t>;
0030 
0031 class MPCorFilter : public MPFilter {
0032 public:
0033   // Constructors and destructor
0034   MPCorFilter(const edm::ParameterSet &pset);
0035   ~MPCorFilter() override = default;
0036 
0037   // Main methods
0038   void initialise(const edm::EventSetup &iEventSetup) override;
0039   void run(edm::Event &iEvent,
0040            const edm::EventSetup &iEventSetup,
0041            std::vector<cmsdt::metaPrimitive> &inMPath,
0042            std::vector<cmsdt::metaPrimitive> &outMPath) override{};
0043   void run(edm::Event &iEvent,
0044            const edm::EventSetup &iEventSetup,
0045            std::vector<cmsdt::metaPrimitive> &inSLMPath,
0046            std::vector<cmsdt::metaPrimitive> &inCorMPath,
0047            std::vector<cmsdt::metaPrimitive> &outMPath) override;
0048   void run(edm::Event &iEvent,
0049            const edm::EventSetup &iEventSetup,
0050            MuonPathPtrs &inMPath,
0051            MuonPathPtrs &outMPath) override{};
0052 
0053   void finish() override;
0054 
0055   // Other public methods
0056 
0057   // Public attributes
0058   void printmP(cmsdt::metaPrimitive mP);
0059 
0060 private:
0061   // Private methods
0062   std::vector<cmsdt::metaPrimitive> filter(std::vector<cmsdt::metaPrimitive> SL1mps,
0063                                            std::vector<cmsdt::metaPrimitive> SL2mps,
0064                                            std::vector<cmsdt::metaPrimitive> SL3mps,
0065                                            std::vector<cmsdt::metaPrimitive> Cormps);
0066   std::vector<int> coarsify(cmsdt::metaPrimitive mp, int sl);
0067   bool isDead(cmsdt::metaPrimitive mp, std::vector<int> coarsed, std::map<int, valid_cor_tp_arr_t> tps_per_bx);
0068   int killTps(cmsdt::metaPrimitive mp, std::vector<int> coarsed, int bx, std::map<int, valid_cor_tp_arr_t> &tps_per_bx);
0069   int match(cmsdt::metaPrimitive mp, std::vector<int> coarsed, valid_cor_tp_t valid_cor_tp2);
0070   int get_chi2(cmsdt::metaPrimitive mp);
0071 
0072   // Private attributes
0073   const bool debug_;
0074 };
0075 
0076 #endif