File indexing completed on 2024-04-06 12:19:39
0001 #include "L1Trigger/DemonstratorTools/interface/codecs/htsums.h"
0002 #include "DataFormats/Math/interface/LorentzVector.h"
0003
0004 namespace l1t::demo::codecs {
0005
0006 ap_uint<64> encodeHtSum(const l1t::EtSum& htSum) {
0007 l1tmhtemu::EtMiss htMiss;
0008 htMiss.Et = htSum.p4().energy();
0009 htMiss.Phi = htSum.hwPhi();
0010 ap_uint<l1tmhtemu::kMHTSize> HT = htSum.hwPt();
0011 ap_uint<l1tmhtemu::kValidSize> valid = (htSum.hwQual() > 0);
0012 ap_uint<l1tmhtemu::kUnassignedSize> unassigned = 0;
0013 ap_uint<64> htSumWord = (unassigned, HT, htMiss.Phi, htMiss.Et.range(), valid);
0014 return htSumWord;
0015 }
0016
0017
0018 std::array<std::vector<ap_uint<64>>, 1> encodeHtSums(const edm::View<l1t::EtSum>& htSums) {
0019 std::vector<ap_uint<64>> htSumWords;
0020
0021 for (const auto& htSum : htSums)
0022 htSumWords.push_back(encodeHtSum(htSum));
0023
0024 std::array<std::vector<ap_uint<64>>, 1> linkData;
0025
0026 for (size_t i = 0; i < linkData.size(); i++) {
0027
0028 htSumWords.resize(1, 0);
0029 linkData.at(i) = htSumWords;
0030 }
0031
0032 return linkData;
0033 }
0034
0035 std::vector<l1t::EtSum> decodeHtSums(const std::vector<ap_uint<64>>& frames) {
0036 std::vector<l1t::EtSum> htSums;
0037
0038 for (const auto& x : frames) {
0039 if (not x.test(0))
0040 break;
0041
0042 math::XYZTLorentzVector v(0, 0, 0, l1tmhtemu::MHT_t(x(l1tmhtemu::kMHTMSB, l1tmhtemu::kMHTLSB)).to_int());
0043 l1t::EtSum s(v,
0044 l1t::EtSum::EtSumType::kMissingHt,
0045 l1tmhtemu::MHT_t(x(l1tmhtemu::kHTMSB, l1tmhtemu::kHTLSB)),
0046 0,
0047 l1tmhtemu::MHTphi_t(x(l1tmhtemu::kMHTPhiMSB, l1tmhtemu::kMHTPhiLSB)).to_int(),
0048 0);
0049 htSums.push_back(s);
0050 }
0051
0052 return htSums;
0053 }
0054
0055 }