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 113 of file Block.h.

Constructor & Destructor Documentation

◆ MTF7Payload()

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

Definition at line 113 of file Block.cc.

113  : Payload(data, end) {
114  const uint16_t* data16 = reinterpret_cast<const uint16_t*>(data);
115  const uint16_t* end16 = reinterpret_cast<const uint16_t*>(end);
116 
117  if (end16 - data16 < header_size + counter_size + trailer_size) {
118  edm::LogError("L1T") << "MTF7 payload smaller than allowed!";
119  data_ = end_;
120  } else if ( // Check bits for EMTF Event Record Header
121  ((data16[0] >> 12) != 0x9) || ((data16[1] >> 12) != 0x9) || ((data16[2] >> 12) != 0x9) ||
122  ((data16[3] >> 12) != 0x9) || ((data16[4] >> 12) != 0xA) || ((data16[5] >> 12) != 0xA) ||
123  ((data16[6] >> 12) != 0xA) || ((data16[7] >> 12) != 0xA) || ((data16[8] >> 15) != 0x1) ||
124  ((data16[9] >> 15) != 0x0) || ((data16[10] >> 15) != 0x0) || ((data16[11] >> 15) != 0x0)) {
125  edm::LogError("L1T") << "MTF7 payload has invalid header!";
126  data_ = end_;
127  } else if ( // Check bits for EMTF MPC Link Errors
128  ((data16[12] >> 15) != 0) || ((data16[13] >> 15) != 1) || ((data16[14] >> 15) != 0) ||
129  ((data16[15] >> 15) != 0)) {
130  edm::LogError("L1T") << "MTF7 payload has invalid counter block!";
131  data_ = end_;
132  }
133 
134  // Check bits for EMTF Event Record Trailer, get firmware version
135  algo_ = 0; // Firmware version
136  for (int i = 4; i < 1590; i++) { // Start after Counters block, up to 108 ME / 84 RPC / 3 SP blocks per BX, 8 BX
137  if (((data16[4 * i + 0] >> 12) == 0xF) && ((data16[4 * i + 1] >> 12) == 0xF) &&
138  ((data16[4 * i + 2] >> 12) == 0xF) && ((data16[4 * i + 3] >> 12) == 0xF) &&
139  ((data16[4 * i + 4] >> 12) == 0xE) && ((data16[4 * i + 5] >> 12) == 0xE) &&
140  ((data16[4 * i + 6] >> 12) == 0xE) &&
141  ((data16[4 * i + 7] >> 12) == 0xE)) { // Indicators for the Trailer block
142  algo_ = (((data16[4 * i + 2] >> 4) & 0x3F) << 9); // Year (6 bits)
143  algo_ |= (((data16[4 * i + 2] >> 0) & 0x0F) << 5); // Month (4 bits)
144  algo_ |= (((data16[4 * i + 4] >> 0) & 0x1F) << 0); // Day (5 bits)
145  break;
146  }
147  }
148  if (algo_ == 0) {
149  edm::LogError("L1T") << "MTF7 payload has no valid EMTF firmware version!";
150  data_ = end_;
151  }
152  }

References l1t::Payload::algo_, counter_size, data, l1t::Payload::data_, end, l1t::Payload::end_, header_size, mps_fire::i, trailer_size, and testProducerWithPsetDescEmpty_cfi::x1.

Member Function Documentation

◆ count()

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

Definition at line 154 of file Block.cc.

154  {
155  unsigned int mask = 0;
156  for (; length > 0; length--)
157  mask = (mask << 4) | 0xf;
158 
159  int count = 0;
160  for (const auto& p : block_patterns_)
161  count += (p & mask) == pattern;
162  return count;
163  }

References block_patterns_, AlCaHLTBitMon_ParallelJobs::p, and topSingleLeptonDQM_PU_cfi::pattern.

Referenced by getBlock().

◆ getBlock()

std::unique_ptr< Block > l1t::MTF7Payload::getBlock ( )
overridevirtual

Reimplemented from l1t::Payload.

Definition at line 173 of file Block.cc.

173  {
174  if (end_ - data_ < 2)
175  return std::unique_ptr<Block>();
176 
177  const uint16_t* data16 = reinterpret_cast<const uint16_t*>(data_);
178  const uint16_t* end16 = reinterpret_cast<const uint16_t*>(end_);
179 
180  // Read in blocks equivalent to 64 bit words, trying to match the
181  // pattern of first bits to what is deemed valid.
182  std::vector<uint32_t> payload;
183  unsigned int pattern = 0;
184  unsigned int i = 0;
185  for (; i < max_block_length_ and data16 + (i + 1) * 4 <= end16; ++i) {
186  for (int j = 0; j < 4; ++j) {
187  auto n = i * 4 + j;
188  pattern |= (data16[n] >> 15) << n;
189  payload.push_back(data16[n]);
190  }
191 
192  if (count(pattern, i + 1) == 1 and valid(pattern))
193  break;
194  }
195 
196  if (not valid(pattern)) {
197  edm::LogWarning("L1T") << "MTF7 block with unrecognized id 0x" << std::hex << pattern;
198  return std::unique_ptr<Block>();
199  }
200 
201  data_ += (i + 1) * 2;
202  return std::make_unique<Block>(pattern, payload, 0, MTF7);
203  }

References count(), l1t::Payload::data_, l1t::Payload::end_, mps_fire::i, dqmiolumiharvest::j, max_block_length_, l1t::MTF7, dqmiodumpmetadata::n, topSingleLeptonDQM_PU_cfi::pattern, jets_cff::payload, and valid().

◆ getHeader()

BlockHeader l1t::MTF7Payload::getHeader ( )
inlineoverridevirtual

Implements l1t::Payload.

Definition at line 118 of file Block.h.

118 { return BlockHeader(nullptr); };

◆ getHeaderSize()

unsigned l1t::MTF7Payload::getHeaderSize ( ) const
inlineoverridevirtual

Implements l1t::Payload.

Definition at line 117 of file Block.h.

117 { return 0; };

◆ valid()

bool l1t::MTF7Payload::valid ( unsigned int  pattern) const
private

Definition at line 165 of file Block.cc.

165  {
166  for (const auto& p : block_patterns_) {
167  if (p == pattern)
168  return true;
169  }
170  return false;
171  }

References block_patterns_, AlCaHLTBitMon_ParallelJobs::p, and topSingleLeptonDQM_PU_cfi::pattern.

Referenced by getBlock().

Member Data Documentation

◆ block_patterns_

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

Definition at line 130 of file Block.h.

Referenced by count(), and valid().

◆ counter_size

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

Definition at line 124 of file Block.h.

Referenced by MTF7Payload().

◆ header_size

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

Definition at line 123 of file Block.h.

Referenced by MTF7Payload().

◆ max_block_length_

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

Definition at line 129 of file Block.h.

Referenced by getBlock().

◆ trailer_size

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

Definition at line 125 of file Block.h.

Referenced by MTF7Payload().

mps_fire.i
i
Definition: mps_fire.py:355
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
l1t::MTF7Payload::trailer_size
static constexpr unsigned trailer_size
Definition: Block.h:125
l1t::Payload::end_
const uint32_t * end_
Definition: Block.h:100
l1t::MTF7Payload::block_patterns_
static const std::vector< unsigned int > block_patterns_
Definition: Block.h:130
l1t::Payload::Payload
Payload(const uint32_t *data, const uint32_t *end)
Definition: Block.h:87
l1t::MTF7Payload::counter_size
static constexpr unsigned counter_size
Definition: Block.h:124
end
#define end
Definition: vmac.h:39
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
l1t::MTF7Payload::count
int count(unsigned int pattern, unsigned int length) const
Definition: Block.cc:154
jets_cff.payload
payload
Definition: jets_cff.py:34
edm::LogWarning
Definition: MessageLogger.h:141
edm::LogError
Definition: MessageLogger.h:183
l1t::MTF7Payload::max_block_length_
static constexpr unsigned max_block_length_
Definition: Block.h:129
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
l1t::MTF7Payload::valid
bool valid(unsigned int pattern) const
Definition: Block.cc:165
l1t::MTF7
Definition: Block.h:11
l1t::MTF7Payload::header_size
static constexpr unsigned header_size
Definition: Block.h:123
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
l1t::Payload::data_
const uint32_t * data_
Definition: Block.h:99
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
l1t::Payload::algo_
unsigned algo_
Definition: Block.h:102