Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:20:48

0001 #include "L1Trigger/L1TMuon/interface/MicroGMTExtrapolationLUT.h"
0002 
0003 l1t::MicroGMTExtrapolationLUT::MicroGMTExtrapolationLUT(const std::string& fname,
0004                                                         const int outWidth,
0005                                                         const int etaRedInWidth,
0006                                                         const int ptRedInWidth)
0007     : MicroGMTLUT(), m_etaRedInWidth(etaRedInWidth), m_ptRedInWidth(ptRedInWidth) {
0008   m_totalInWidth = m_ptRedInWidth + m_etaRedInWidth;
0009   m_outWidth = outWidth;
0010 
0011   m_ptRedMask = (1 << m_ptRedInWidth) - 1;
0012   m_etaRedMask = ((1 << m_etaRedInWidth) - 1) << m_ptRedInWidth;
0013 
0014   m_inputs.push_back(MicroGMTConfiguration::ETA_COARSE);
0015   m_inputs.push_back(MicroGMTConfiguration::PT);
0016 
0017   if (fname != std::string("")) {
0018     load(fname);
0019   }
0020 }
0021 
0022 l1t::MicroGMTExtrapolationLUT::MicroGMTExtrapolationLUT(l1t::LUT* lut,
0023                                                         const int outWidth,
0024                                                         const int etaRedInWidth,
0025                                                         const int ptRedInWidth)
0026     : MicroGMTLUT(lut), m_etaRedInWidth(etaRedInWidth), m_ptRedInWidth(ptRedInWidth) {
0027   m_totalInWidth = m_ptRedInWidth + m_etaRedInWidth;
0028   m_outWidth = outWidth;
0029 
0030   m_ptRedMask = (1 << m_ptRedInWidth) - 1;
0031   m_etaRedMask = ((1 << m_etaRedInWidth) - 1) << m_ptRedInWidth;
0032 
0033   m_inputs.push_back(MicroGMTConfiguration::ETA_COARSE);
0034   m_inputs.push_back(MicroGMTConfiguration::PT);
0035 
0036   m_initialized = true;
0037 }
0038 
0039 int l1t::MicroGMTExtrapolationLUT::lookup(int eta, int pt) const {
0040   // normalize these two to the same scale and then calculate?
0041   if (m_initialized) {
0042     // unsigned eta_twocomp = MicroGMTConfiguration::getTwosComp(eta, m_etaRedInWidth);
0043     return lookupPacked(hashInput(checkedInput(eta, m_etaRedInWidth), checkedInput(pt, m_ptRedInWidth)));
0044   }
0045   int result = 0;
0046   // normalize to out width
0047   return result;
0048 }
0049 
0050 int l1t::MicroGMTExtrapolationLUT::hashInput(int eta, int pt) const {
0051   int result = 0;
0052   result += eta << m_ptRedInWidth;
0053   result += pt;
0054   return result;
0055 }
0056 
0057 void l1t::MicroGMTExtrapolationLUT::unHashInput(int input, int& eta, int& pt) const {
0058   pt = input & m_ptRedMask;
0059   eta = (input & m_etaRedMask) >> m_ptRedInWidth;
0060 }
0061 
0062 int l1t::MicroGMTExtrapolationLUT::getEtaRedInWidth() const { return m_etaRedInWidth; }
0063 
0064 int l1t::MicroGMTExtrapolationLUT::getPtRedInWidth() const { return m_ptRedInWidth; }