File indexing completed on 2024-09-07 04:36: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
0012
0013
0014
0015
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
0034 MPCorFilter(const edm::ParameterSet &pset);
0035 ~MPCorFilter() override = default;
0036
0037
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
0056
0057
0058 void printmP(cmsdt::metaPrimitive mP);
0059
0060 private:
0061
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
0073 const bool debug_;
0074 };
0075
0076 #endif