CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Static Private Attributes
l1t::MTF7Payload Class Reference

#include <Block.h>

Inheritance diagram for l1t::MTF7Payload:
l1t::Payload

Public Member Functions

std::unique_ptr< BlockgetBlock () override
 
BlockHeader getHeader () override
 
unsigned getHeaderSize () const override
 
 MTF7Payload (const uint32_t *data, const uint32_t *end)
 
- Public Member Functions inherited from l1t::Payload
virtual unsigned getAlgorithmFWVersion () const
 
virtual unsigned getInfrastructureFWVersion () const
 
 Payload (const uint32_t *data, const uint32_t *end)
 
virtual ~Payload ()
 

Private Member Functions

int count (unsigned int pattern, unsigned int length) const
 
bool valid (unsigned int pattern) const
 

Static Private Attributes

static const std::vector< unsigned int > block_patterns_
 
static constexpr unsigned counter_size = 4
 
static constexpr unsigned header_size = 12
 
static constexpr unsigned max_block_length_ = 3
 
static constexpr unsigned trailer_size = 8
 

Additional Inherited Members

- Protected Attributes inherited from l1t::Payload
unsigned algo_
 
const uint32_t * data_
 
const uint32_t * end_
 
unsigned infra_
 

Detailed Description

Definition at line 101 of file Block.h.

Constructor & Destructor Documentation

l1t::MTF7Payload::MTF7Payload ( const uint32_t *  data,
const uint32_t *  end 
)

Definition at line 125 of file Block.cc.

References counter_size, data, l1t::Payload::data_, end, l1t::Payload::end_, header_size, and trailer_size.

125  : Payload(data, end)
126  {
127  const uint16_t * data16 = reinterpret_cast<const uint16_t*>(data);
128  const uint16_t * end16 = reinterpret_cast<const uint16_t*>(end);
129 
130  if (end16 - data16 < header_size + counter_size + trailer_size) {
131  edm::LogError("L1T") << "MTF7 payload smaller than allowed!";
132  data_ = end_;
133  } else if (
134  ((data16[0] >> 12) != 0x9) || ((data16[1] >> 12) != 0x9) ||
135  ((data16[2] >> 12) != 0x9) || ((data16[3] >> 12) != 0x9) ||
136  ((data16[4] >> 12) != 0xA) || ((data16[5] >> 12) != 0xA) ||
137  ((data16[6] >> 12) != 0xA) || ((data16[7] >> 12) != 0xA) ||
138  ((data16[8] >> 9) != 0b1000000) || ((data16[9] >> 11) != 0) ||
139  ((data16[10] >> 11) != 0) || ((data16[11] >> 11) != 0)) {
140  edm::LogError("L1T") << "MTF7 payload has invalid header!";
141  data_ = end_;
142  } else if (
143  ((data16[12] >> 15) != 0) || ((data16[13] >> 15) != 1) ||
144  ((data16[14] >> 15) != 0) || ((data16[15] >> 15) != 0)) {
145  edm::LogError("L1T") << "MTF7 payload has invalid counter block!";
146  data_ = end_;
147  } else if (
148  false) {
149  // TODO: check trailer
150  }
151  }
static constexpr unsigned header_size
Definition: Block.h:110
const uint32_t * end_
Definition: Block.h:88
static constexpr unsigned counter_size
Definition: Block.h:111
#define end
Definition: vmac.h:37
const uint32_t * data_
Definition: Block.h:87
static constexpr unsigned trailer_size
Definition: Block.h:112
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
Payload(const uint32_t *data, const uint32_t *end)
Definition: Block.h:76

Member Function Documentation

int l1t::MTF7Payload::count ( unsigned int  pattern,
unsigned int  length 
) const
private

Definition at line 154 of file Block.cc.

References block_patterns_, RecoTauDiscriminantConfiguration::mask, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by getBlock().

155  {
156  unsigned int mask = 0;
157  for (; length > 0; length--)
158  mask = (mask << 4) | 0xf;
159 
160  int count = 0;
161  for (const auto& p: block_patterns_)
162  count += (p & mask) == pattern;
163  return count;
164  }
int count(unsigned int pattern, unsigned int length) const
Definition: Block.cc:154
static const std::vector< unsigned int > block_patterns_
Definition: Block.h:117
std::unique_ptr< Block > l1t::MTF7Payload::getBlock ( )
overridevirtual

Reimplemented from l1t::Payload.

Definition at line 177 of file Block.cc.

References count(), l1t::Payload::data_, l1t::Payload::end_, mps_fire::i, max_block_length_, l1t::MTF7, gen::n, listBenchmarks::pattern, jets_cff::payload, and valid().

178  {
179  if (end_ - data_ < 2)
180  return std::auto_ptr<Block>(nullptr);
181 
182  const uint16_t * data16 = reinterpret_cast<const uint16_t*>(data_);
183  const uint16_t * end16 = reinterpret_cast<const uint16_t*>(end_);
184 
185  // Read in blocks equivalent to 64 bit words, trying to match the
186  // pattern of first bits to what is deemed valid.
187  std::vector<uint32_t> payload;
188  unsigned int pattern = 0;
189  unsigned int i = 0;
190  for (; i < max_block_length_ and data16 + (i + 1) * 4 <= end16; ++i) {
191  for (int j = 0; j < 4; ++j) {
192  auto n = i * 4 + j;
193  pattern |= (data16[n] >> 15) << n;
194  payload.push_back(data16[n]);
195  }
196 
197  if (count(pattern, i + 1) == 1 and valid(pattern))
198  break;
199  }
200 
201  if (not valid(pattern)) {
202  edm::LogWarning("L1T") << "MTF7 block with unrecognized id 0x" << std::hex << pattern;
203  return std::auto_ptr<Block>(nullptr);
204  }
205 
206  data_ += (i + 1) * 2;
207  return std::unique_ptr<Block>(new Block(pattern, payload, 0, MTF7));
208  }
static constexpr unsigned max_block_length_
Definition: Block.h:116
int count(unsigned int pattern, unsigned int length) const
Definition: Block.cc:154
const uint32_t * end_
Definition: Block.h:88
bool valid(unsigned int pattern) const
Definition: Block.cc:167
const uint32_t * data_
Definition: Block.h:87
BlockHeader l1t::MTF7Payload::getHeader ( )
inlineoverridevirtual

Implements l1t::Payload.

Definition at line 106 of file Block.h.

References l1t::BlockHeader::BlockHeader().

106 { return BlockHeader(nullptr); };
unsigned l1t::MTF7Payload::getHeaderSize ( ) const
inlineoverridevirtual

Implements l1t::Payload.

Definition at line 105 of file Block.h.

105 { return 0; };
bool l1t::MTF7Payload::valid ( unsigned int  pattern) const
private

Definition at line 167 of file Block.cc.

References block_patterns_, and AlCaHLTBitMon_ParallelJobs::p.

Referenced by getBlock().

168  {
169  for (const auto& p: block_patterns_) {
170  if (p == pattern)
171  return true;
172  }
173  return false;
174  }
static const std::vector< unsigned int > block_patterns_
Definition: Block.h:117

Member Data Documentation

const std::vector< unsigned int > l1t::MTF7Payload::block_patterns_
staticprivate
Initial value:
=
{
0b000111111111,
0b0010,
0b0011,
0b0100,
0b01100101,
0b11111111
}

Definition at line 117 of file Block.h.

Referenced by count(), and valid().

constexpr unsigned l1t::MTF7Payload::counter_size = 4
staticprivate

Definition at line 111 of file Block.h.

Referenced by MTF7Payload().

constexpr unsigned l1t::MTF7Payload::header_size = 12
staticprivate

Definition at line 110 of file Block.h.

Referenced by MTF7Payload().

constexpr unsigned l1t::MTF7Payload::max_block_length_ = 3
staticprivate

Definition at line 116 of file Block.h.

Referenced by getBlock().

constexpr unsigned l1t::MTF7Payload::trailer_size = 8
staticprivate

Definition at line 112 of file Block.h.

Referenced by MTF7Payload().