Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Encodes htsum collection onto 1 output link
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       // Pad etsum vectors -> full packet length (48 frames, but only 1 htsum max)
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 }  // namespace l1t::demo::codecs