CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends
l1t::LUT Class Reference

#include <LUT.h>

Inheritance diagram for l1t::LUT:
l1t::MicroGMTLUT l1t::MicroGMTAbsoluteIsolationCheckLUT l1t::MicroGMTCaloIndexSelectionLUT l1t::MicroGMTExtrapolationLUT l1t::MicroGMTMatchQualLUT l1t::MicroGMTRankPtQualLUT l1t::MicroGMTRelativeIsolationCheckLUT l1t::MicroGMTMatchQualFineLUT l1t::MicroGMTMatchQualSimpleLUT

Public Types

enum  ReadCodes {
  SUCCESS =0, NO_ENTRIES =1, DUP_ENTRIES =2, MISS_ENTRIES =3,
  MAX_ADDRESS_OUTOFRANGE =4, NO_HEADER =5
}
 

Public Member Functions

int data (unsigned int address) const
 
bool empty () const
 
 LUT ()
 
 LUT (std::istream &stream)
 
unsigned int maxSize () const
 
unsigned int nrBitsAddress () const
 
unsigned int nrBitsData () const
 
int read (std::istream &stream)
 
void write (std::ostream &stream) const
 
 ~LUT ()
 

Private Member Functions

int readHeader_ (std::istream &)
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Private Attributes

unsigned int addressMask_
 
std::vector< int > data_
 
unsigned int dataMask_
 
unsigned int nrBitsAddress_
 
unsigned int nrBitsData_
 

Friends

class boost::serialization::access
 
template<typename CondSerializationT , typename Enabled >
struct cond::serialization::access
 

Detailed Description

Description: A class implimentating a look up table

Implementation: Internally stores data in vector filled with 32 bit ints address and output is masked to specifed number of bits vector only allocates as necessary, eg we may have a 32 bit address but we obviously dont want to allocate a 4gb vector

Error handling: currently waiting guidance on how to deal with this Exceptions are currently forbiden, emulator fails should not impact on the rest of the software chain. As such, everything silently fails gracefully

Author
: Sam Harper - RAL, Jim Brooke - Bristol

Definition at line 29 of file LUT.h.

Member Enumeration Documentation

enum l1t::LUT::ReadCodes
Enumerator
SUCCESS 
NO_ENTRIES 
DUP_ENTRIES 
MISS_ENTRIES 
MAX_ADDRESS_OUTOFRANGE 
NO_HEADER 

Definition at line 31 of file LUT.h.

Constructor & Destructor Documentation

l1t::LUT::LUT ( )
inline

Definition at line 35 of file LUT.h.

std::vector< int > data_
Definition: LUT.h:65
unsigned int nrBitsData_
Definition: LUT.h:61
unsigned int addressMask_
Definition: LUT.h:62
unsigned int nrBitsAddress_
Definition: LUT.h:60
unsigned int dataMask_
Definition: LUT.h:63
l1t::LUT::LUT ( std::istream &  stream)
inlineexplicit

Definition at line 37 of file LUT.h.

References read().

37  :
38  data_()
39  {
40  read(stream);
41  }
std::vector< int > data_
Definition: LUT.h:65
int read(std::istream &stream)
Definition: LUT.cc:11
l1t::LUT::~LUT ( )
inline

Definition at line 44 of file LUT.h.

44 {}

Member Function Documentation

int l1t::LUT::data ( unsigned int  address) const
inline

Definition at line 46 of file LUT.h.

References addressMask_, data_, dataMask_, read(), and write().

Referenced by L1TMuonOverlapParamsViewer::analyze(), l1t::Stage2Layer2TauAlgorithmFirmwareImp1::calibLutIndex(), l1t::Stage2Layer2JetAlgorithmFirmwareImp1::calibrate(), l1t::calibrateAndRankJets(), l1t::calibrateAndRankTaus(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::calibratedPt(), l1t::Stage2Layer2TauAlgorithmFirmwareImp1::calibratedPt(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::calibrationLutIndex(), OMTFProcessor::configure(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::idShape(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::idShapeLutIndex(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::isoLutIndex(), l1t::Stage2Layer2TauAlgorithmFirmwareImp1::isoLutIndex(), l1t::Stage2Layer2TauAlgorithmFirmwareImp1::loadCalibrationLuts(), l1t::MicroGMTRankPtQualLUT::lookup(), l1t::MicroGMTMatchQualSimpleLUT::lookup(), l1t::MicroGMTMatchQualFineLUT::lookup(), l1t::MicroGMTRankPtQualLUT::lookupPacked(), l1t::MicroGMTLUT::lookupPacked(), l1t::MicroGMTMatchQualSimpleLUT::lookupPacked(), l1t::MicroGMTMatchQualFineLUT::lookupPacked(), l1t::Stage2Layer2TauAlgorithmFirmwareImp1::merging(), L1TMuonGlobalParamsViewer::printLUT(), l1t::Stage2Layer2EtSumAlgorithmFirmwareImp1::processEvent(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::processEvent(), l1t::Stage1Layer2EGammaAlgorithmImpPP::processEvent(), l1t::Stage1Layer2TauAlgorithmImpPP::processEvent(), l1t::Stage1Layer2CentralityAlgorithm::processEvent(), l1t::Stage1Layer2TauAlgorithmImpHW::processEvent(), l1t::Stage1Layer2DiTauAlgorithm::processEvent(), l1t::Stage1Layer2EGammaAlgorithmImpHW::processEvent(), l1t::Stage2Layer2EGammaAlgorithmFirmwareImp1::trimCluster(), and write().

46 {return (address&addressMask_)<data_.size() ? dataMask_ & data_[addressMask_&address] : 0;}
std::vector< int > data_
Definition: LUT.h:65
unsigned int addressMask_
Definition: LUT.h:62
unsigned int dataMask_
Definition: LUT.h:63
bool l1t::LUT::empty ( ) const
inline
unsigned int l1t::LUT::maxSize ( ) const
inline
unsigned int l1t::LUT::nrBitsAddress ( ) const
inline

Definition at line 50 of file LUT.h.

References nrBitsAddress_.

Referenced by l1t::Stage2Layer2TauAlgorithmFirmwareImp1::loadCalibrationLuts().

50 {return nrBitsAddress_;}
unsigned int nrBitsAddress_
Definition: LUT.h:60
unsigned int l1t::LUT::nrBitsData ( ) const
inline

Definition at line 51 of file LUT.h.

References nrBitsData_.

Referenced by OMTFProcessor::configure(), and l1t::Stage2Layer2TauAlgorithmFirmwareImp1::loadCalibrationLuts().

51 {return nrBitsData_;}
unsigned int nrBitsData_
Definition: LUT.h:61
int l1t::LUT::read ( std::istream &  stream)

Definition at line 11 of file LUT.cc.

References a, addressMask_, b, data_, dataMask_, DUP_ENTRIES, mps_splice::entry, spr::find(), mps_splice::line, SiStripPI::max, MAX_ADDRESS_OUTOFRANGE, MISS_ENTRIES, NO_ENTRIES, readHeader_(), AlCaHLTBitMon_QueryRunRegistry::string, SUCCESS, and create_public_lumi_plots::transform.

Referenced by l1t::convertToLUT(), data(), edmIntegrityCheck.PublishToFileSystem::get(), Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor::goto(), l1t::MicroGMTLUT::initialize(), l1t::MicroGMTLUT::load(), LUT(), l1t::MicroGMTLUT::MicroGMTLUT(), XMLConfigReader::readLUTs(), and Vispa.Plugins.EdmBrowser.EdmDataAccessor.EdmDataAccessor::setFilterBranches().

12 {
13  data_.clear();
14 
15  int readHeaderCode = readHeader_(stream);
16  if(readHeaderCode!=SUCCESS) return readHeaderCode;
17 
18  std::vector<std::pair<unsigned int,int> > entries;
19  unsigned int maxAddress=addressMask_;
21 
22  while(std::getline(stream,line)){
23  line.erase( std::find( line.begin(), line.end(), '#' ), line.end() ); //ignore comments
24  std::istringstream lineStream(line);
25  std::pair<unsigned int,int> entry;
26  while(lineStream >> entry.first >> entry.second ){
27  entry.first&=addressMask_;
28  entry.second&=dataMask_;
29  entries.push_back(entry);
30  if(entry.first>maxAddress || maxAddress==addressMask_) maxAddress=entry.first;
31  }
32  }
33  std::sort(entries.begin(),entries.end());
34  if(entries.empty()){
35  //log the error we read nothing
36  return NO_ENTRIES;
37  }
38  //this check is redundant as dups are also picked up by the next check but might make for easier debugging
39  if(std::adjacent_find(entries.begin(),entries.end(),
40  [](auto const& a, auto const& b) {
41  return a.first == b.first;
42  }) != entries.end()) {
43  //log the error that we have duplicate addresses once masked
44  return DUP_ENTRIES;
45  }
46  if(entries.front().first!=0 ||
47  std::adjacent_find(entries.begin(),entries.end(),
48  [](auto const& a, auto const& b) {
49  return a.first + 1 != b.first;
50  }) !=entries.end()) {
51  //log the error that we have a missing entry
52  return MISS_ENTRIES;
53  }
54 
55 
56  if(maxAddress!=std::numeric_limits<unsigned int>::max()) data_.resize(maxAddress+1,0);
57  else{
58  //log the error that we have more addresses than we can deal with (which is 4gb so something probably has gone wrong anyways)
60  }
61 
62  std::transform(entries.begin(),entries.end(),data_.begin(), [](auto const& x){return x.second; });
63  return SUCCESS;
64 
65 }
std::vector< int > data_
Definition: LUT.h:65
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
unsigned int addressMask_
Definition: LUT.h:62
int readHeader_(std::istream &)
Definition: LUT.cc:75
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
unsigned int dataMask_
Definition: LUT.h:63
int l1t::LUT::readHeader_ ( std::istream &  stream)
private

Definition at line 75 of file LUT.cc.

References addressMask_, dataMask_, mps_splice::line, NO_HEADER, nrBitsAddress_, nrBitsData_, AlCaHLTBitMon_QueryRunRegistry::string, SUCCESS, and jets_cff::version.

Referenced by empty(), and read().

76 {
77 
78  int startPos=stream.tellg(); //we are going to reset to this position before we exit
80  while(std::getline(stream,line)){
81  if(line.find("#<header>")==0){ //line
82  std::istringstream lineStream(line);
83 
84  std::string version; //currently not doing anything with this
85  std::string headerField; //currently not doing anything with this
86  if(lineStream >> headerField >> version >> nrBitsAddress_ >> nrBitsData_){
87  addressMask_ = nrBitsAddress_!=32 ? (0x1<<nrBitsAddress_)-1 : ~0x0;
88  dataMask_ = (0x1<<nrBitsData_)-1;
89  stream.seekg(startPos);
90  return SUCCESS;
91  }
92  }
93  }
94 
95  nrBitsAddress_ =0;
96  nrBitsData_ = 0;
97  addressMask_ = (0x1<<nrBitsAddress_)-1;
98  dataMask_ = (0x1<<nrBitsData_)-1;
99 
100  stream.seekg(startPos);
101  return NO_HEADER;
102 }
unsigned int nrBitsData_
Definition: LUT.h:61
unsigned int addressMask_
Definition: LUT.h:62
unsigned int nrBitsAddress_
Definition: LUT.h:60
unsigned int dataMask_
Definition: LUT.h:63
template<class Archive >
void l1t::LUT::serialize ( Archive &  ar,
const unsigned int  version 
)
private
void l1t::LUT::write ( std::ostream &  stream) const

Definition at line 67 of file LUT.cc.

References addressMask_, data(), data_, nrBitsAddress_, and nrBitsData_.

Referenced by data(), pkg.AbstractPkg::generate(), l1t::MicroGMTLUT::MicroGMTLUT(), and l1t::MicroGMTLUT::save().

68 {
69  stream <<"#<header> V1 "<<nrBitsAddress_<<" "<<nrBitsData_<<" </header> "<<std::endl;
70  for(unsigned int address=0;address<data_.size();address++){
71  stream << (address&addressMask_)<<" "<<data(address)<<std::endl;
72  }
73 }
std::vector< int > data_
Definition: LUT.h:65
unsigned int nrBitsData_
Definition: LUT.h:61
unsigned int addressMask_
Definition: LUT.h:62
int data(unsigned int address) const
Definition: LUT.h:46
unsigned int nrBitsAddress_
Definition: LUT.h:60

Friends And Related Function Documentation

friend class boost::serialization::access
friend

Definition at line 66 of file LUT.h.

template<typename CondSerializationT , typename Enabled >
friend struct cond::serialization::access
friend

Definition at line 66 of file LUT.h.

Member Data Documentation

unsigned int l1t::LUT::addressMask_
private

Definition at line 62 of file LUT.h.

Referenced by data(), maxSize(), read(), readHeader_(), and write().

std::vector<int> l1t::LUT::data_
private

Definition at line 65 of file LUT.h.

Referenced by data(), empty(), read(), and write().

unsigned int l1t::LUT::dataMask_
private

Definition at line 63 of file LUT.h.

Referenced by data(), read(), and readHeader_().

unsigned int l1t::LUT::nrBitsAddress_
private

Definition at line 60 of file LUT.h.

Referenced by nrBitsAddress(), readHeader_(), and write().

unsigned int l1t::LUT::nrBitsData_
private

Definition at line 61 of file LUT.h.

Referenced by nrBitsData(), readHeader_(), and write().