File indexing completed on 2024-04-06 12:20:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef L1TCALOSTAGE1ETSUMSALGORITHMIMP_H
0018 #define L1TCALOSTAGE1ETSUMSALGORITHMIMP_H
0019
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 #include "L1Trigger/L1TCalorimeter/interface/Stage1Layer2EtSumAlgorithm.h"
0022 #include "L1Trigger/L1TCalorimeter/interface/CaloParamsHelper.h"
0023 #include "L1Trigger/L1TCalorimeter/interface/CordicXilinx.h"
0024 #include <array>
0025 #include <vector>
0026
0027 namespace l1t {
0028
0029 class Stage1Layer2EtSumAlgorithmImpPP : public Stage1Layer2EtSumAlgorithm {
0030 public:
0031 Stage1Layer2EtSumAlgorithmImpPP(CaloParamsHelper const* params);
0032 ~Stage1Layer2EtSumAlgorithmImpPP() override = default;
0033 void processEvent(const std::vector<l1t::CaloRegion>& regions,
0034 const std::vector<l1t::CaloEmCand>& EMCands,
0035 const std::vector<l1t::Jet>* jets,
0036 std::vector<l1t::EtSum>* sums) override;
0037
0038 private:
0039 CaloParamsHelper const* const params_;
0040
0041 int DiJetPhi(const std::vector<l1t::Jet>* jets) const;
0042 uint16_t MHToverHT(uint16_t, uint16_t) const;
0043 std::vector<double> sinPhi;
0044 std::vector<double> cosPhi;
0045 };
0046
0047 class Stage1Layer2EtSumAlgorithmImpHW : public Stage1Layer2EtSumAlgorithm {
0048 public:
0049 Stage1Layer2EtSumAlgorithmImpHW(CaloParamsHelper const* params);
0050 ~Stage1Layer2EtSumAlgorithmImpHW() override = default;
0051 void processEvent(const std::vector<l1t::CaloRegion>& regions,
0052 const std::vector<l1t::CaloEmCand>& EMCands,
0053 const std::vector<l1t::Jet>* jets,
0054 std::vector<l1t::EtSum>* sums) override;
0055
0056 private:
0057 CaloParamsHelper const* const params_;
0058
0059 int DiJetPhi(const std::vector<l1t::Jet>* jets) const;
0060 uint16_t MHToverHT(uint16_t, uint16_t) const;
0061
0062 struct SimpleRegion {
0063 int ieta;
0064 int iphi;
0065 int et;
0066 };
0067 enum class ETSumType { kHadronicSum, kEmSum };
0068 std::tuple<int, int, int> doSumAndMET(const std::vector<SimpleRegion>& regionEt, ETSumType sumType);
0069
0070
0071
0072 int cordicToMETPhi(int phase);
0073
0074 std::array<int, 73> cordicPhiValues;
0075
0076 CordicXilinx cordic{24, 19};
0077
0078
0079 std::array<long, 5> cosines;
0080 std::array<long, 5> sines;
0081 };
0082
0083 class Stage1Layer2EtSumAlgorithmImpHI : public Stage1Layer2EtSumAlgorithm {
0084 public:
0085 Stage1Layer2EtSumAlgorithmImpHI(CaloParamsHelper const* params);
0086 ~Stage1Layer2EtSumAlgorithmImpHI() override = default;
0087 void processEvent(const std::vector<l1t::CaloRegion>& regions,
0088 const std::vector<l1t::CaloEmCand>& EMCands,
0089 const std::vector<l1t::Jet>* jets,
0090 std::vector<l1t::EtSum>* sums) override;
0091
0092 private:
0093 CaloParamsHelper const* const params_;
0094
0095 int DiJetPhi(const std::vector<l1t::Jet>* jets) const;
0096 uint16_t MHToverHT(uint16_t, uint16_t) const;
0097
0098 struct SimpleRegion {
0099 int ieta;
0100 int iphi;
0101 int et;
0102 };
0103 enum class ETSumType { kHadronicSum, kEmSum };
0104 std::tuple<int, int, int> doSumAndMET(const std::vector<SimpleRegion>& regionEt, ETSumType sumType);
0105
0106
0107
0108 int cordicToMETPhi(int phase);
0109
0110 std::array<int, 73> cordicPhiValues;
0111
0112 CordicXilinx cordic{24, 19};
0113
0114
0115 std::array<long, 5> cosines;
0116 std::array<long, 5> sines;
0117 };
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129 }
0130
0131 #endif