CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
l1t::L1TRawToDigi Class Reference
Inheritance diagram for l1t::L1TRawToDigi:
edm::stream::EDProducer<>

Public Member Functions

 L1TRawToDigi (const edm::ParameterSet &)
 
 ~L1TRawToDigi () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void beginRun (edm::Run const &, edm::EventSetup const &) override
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

int amc13HeaderSize_
 
int amc13TrailerSize_
 
int amcHeaderSize_
 
int amcTrailerSize_
 
bool ctp7_mode_
 
bool debug_
 
unsigned int dmxFwId_
 
edm::EDGetTokenT< FEDRawDataCollectionfedData_
 
std::vector< int > fedIds_
 
unsigned int fwId_
 
bool fwOverride_
 
unsigned int minFeds_
 
bool mtf7_mode_
 
std::unique_ptr< PackingSetupprov_
 
int slinkHeaderSize_
 
int slinkTrailerSize_
 
bool tmtCheck_
 
int warnsa_
 
int warnsb_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 45 of file L1TRawToDigi.cc.

Constructor & Destructor Documentation

◆ L1TRawToDigi()

L1TRawToDigi::L1TRawToDigi ( const edm::ParameterSet config)
explicit

Definition at line 94 of file L1TRawToDigi.cc.

References amc13HeaderSize_, amc13TrailerSize_, amcHeaderSize_, amcTrailerSize_, ctp7_mode_, debug_, Exception, fedData_, l1t::PackingSetupFactory::get(), l1t::PackingSetupFactory::make(), mtf7_mode_, prov_, slinkHeaderSize_, slinkTrailerSize_, AlCaHLTBitMon_QueryRunRegistry::string, warnsa_, and warnsb_.

95  : fedIds_(config.getParameter<std::vector<int>>("FedIds")),
96  minFeds_(config.getParameter<unsigned int>("MinFeds")),
97  fwId_(config.getParameter<unsigned int>("FWId")),
98  dmxFwId_(config.getParameter<unsigned int>("DmxFWId")),
99  fwOverride_(config.getParameter<bool>("FWOverride")),
100  tmtCheck_(config.getParameter<bool>("TMTCheck")),
101  ctp7_mode_(config.getUntrackedParameter<bool>("CTP7")),
102  mtf7_mode_(config.getUntrackedParameter<bool>("MTF7")) {
103  fedData_ = consumes<FEDRawDataCollection>(config.getParameter<edm::InputTag>("InputLabel"));
104 
105  if (ctp7_mode_ and mtf7_mode_) {
106  throw cms::Exception("L1TRawToDigi") << "Can only use one unpacking mode concurrently!";
107  }
108 
109  prov_ = PackingSetupFactory::get()->make(config.getParameter<std::string>("Setup"));
110  prov_->registerProducts(producesCollector());
111 
112  slinkHeaderSize_ = config.getUntrackedParameter<int>("lenSlinkHeader");
113  slinkTrailerSize_ = config.getUntrackedParameter<int>("lenSlinkTrailer");
114  amcHeaderSize_ = config.getUntrackedParameter<int>("lenAMCHeader");
115  amcTrailerSize_ = config.getUntrackedParameter<int>("lenAMCTrailer");
116  amc13HeaderSize_ = config.getUntrackedParameter<int>("lenAMC13Header");
117  amc13TrailerSize_ = config.getUntrackedParameter<int>("lenAMC13Trailer");
118 
119  debug_ = config.getUntrackedParameter<bool>("debug");
120  warnsa_ = 0;
121  warnsb_ = 0;
122  }
unsigned int dmxFwId_
Definition: L1TRawToDigi.cc:65
Definition: config.py:1
std::unique_ptr< PackingSetup > make(const std::string &) const
std::vector< int > fedIds_
Definition: L1TRawToDigi.cc:62
unsigned int fwId_
Definition: L1TRawToDigi.cc:64
static const PackingSetupFactory * get()
unsigned int minFeds_
Definition: L1TRawToDigi.cc:63
std::unique_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:68
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:58

◆ ~L1TRawToDigi()

L1TRawToDigi::~L1TRawToDigi ( )
override

Definition at line 124 of file L1TRawToDigi.cc.

124 {}

Member Function Documentation

◆ beginLuminosityBlock()

void l1t::L1TRawToDigi::beginLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 57 of file L1TRawToDigi.cc.

57 {};

◆ beginRun()

void l1t::L1TRawToDigi::beginRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 55 of file L1TRawToDigi.cc.

55 {};

◆ endLuminosityBlock()

void l1t::L1TRawToDigi::endLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 58 of file L1TRawToDigi.cc.

58 {};

◆ endRun()

void l1t::L1TRawToDigi::endRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 56 of file L1TRawToDigi.cc.

56 {};

◆ fillDescriptions()

void L1TRawToDigi::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 293 of file L1TRawToDigi.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, ProducerED_cfi::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

293  {
295  // These parameters are part of the L1T/HLT interface, avoid changing if possible:
296  desc.add<std::vector<int>>("FedIds", {})->setComment("required parameter: default value is invalid");
297  desc.add<std::string>("Setup", "")->setComment("required parameter: default value is invalid");
298  // These parameters have well defined default values and are not currently
299  // part of the L1T/HLT interface. They can be cleaned up or updated at will:
300  desc.add<unsigned int>("FWId", 0)->setComment(
301  "Ignored unless FWOverride is true. Calo Stage1: 32 bits: if the first eight bits are 0xff, will read the "
302  "74x MC format.\n");
303  desc.add<unsigned int>("DmxFWId", 0)
304  ->setComment(
305  "Ignored unless FWOverride is true. Calo Stage1: 32 bits: if the first eight bits are 0xff, will read "
306  "the 74x MC format.\n");
307  desc.add<bool>("FWOverride", false)->setComment("Firmware version should be taken as FWId parameters");
308  desc.add<bool>("TMTCheck", true)->setComment("Flag for turning on/off Calo Layer 2 TMT node check");
309  desc.addUntracked<bool>("CTP7", false);
310  desc.addUntracked<bool>("MTF7", false);
311  desc.add<edm::InputTag>("InputLabel", edm::InputTag("rawDataCollector"));
312  desc.addUntracked<int>("lenSlinkHeader", 8);
313  desc.addUntracked<int>("lenSlinkTrailer", 8);
314  desc.addUntracked<int>("lenAMCHeader", 8);
315  desc.addUntracked<int>("lenAMCTrailer", 0);
316  desc.addUntracked<int>("lenAMC13Header", 8);
317  desc.addUntracked<int>("lenAMC13Trailer", 8);
318  desc.addUntracked<bool>("debug", false)->setComment("turn on verbose output");
319  desc.add<unsigned int>("MinFeds", 0)
320  ->setComment("optional parameter: warn if less than MinFeds non-empty FED ids unpacked.");
321  descriptions.add("l1tRawToDigi", desc);
322  }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ produce()

void L1TRawToDigi::produce ( edm::Event event,
const edm::EventSetup setup 
)
overrideprivate

Definition at line 131 of file L1TRawToDigi.cc.

References amc13HeaderSize_, amc13TrailerSize_, amcHeaderSize_, l1t::stage2::layer2::demux::amcSlotNum, amcTrailerSize_, groupFilesInBlocks::block, FEDTrailer::check(), gather_cfg::cout, FEDTrailer::crc(), ctp7_mode_, FEDRawData::data(), data, debug_, TauDecayModes::dec, dmxFwId_, FEDTrailer::evtStatus(), fedData_, l1t::stage2::layer2::fedId, l1tstage2_dqm_sourceclient-live_cfg::fedId, fedIds_, l1tstage2emulator_dqm_sourceclient-live_cfg::feds, FEDTrailer::fragmentLength(), fwId_, fwOverride_, RecoTauValidation_cfi::header, LogDebug, minFeds_, mtf7_mode_, l1t::stage2::layer2::mp::offsetBoardId, amc13::Packet::parse(), jetsAK4_Puppi_cff::payload, amc13::Packet::payload(), prov_, FEDRawData::size(), slinkHeaderSize_, slinkTrailerSize_, command_line::start, tmtCheck_, FEDTrailer::ttsBits(), dt_dqm_sourceclient_common_cff::unpackers, warnsa_, and warnsb_.

131  {
132  using namespace edm;
133 
134  std::unique_ptr<UnpackerCollections> coll = prov_->getCollections(event);
135 
137  event.getByToken(fedData_, feds);
138 
139  if (!feds.isValid()) {
140  LogError("L1T") << "Cannot unpack: no FEDRawDataCollection found";
141  return;
142  }
143 
144  unsigned valid_count = 0;
145  for (const auto& fedId : fedIds_) {
146  const FEDRawData& l1tRcd = feds->FEDData(fedId);
147 
148  LogDebug("L1T") << "Found FEDRawDataCollection with ID " << fedId << " and size " << l1tRcd.size();
149 
152  if (l1tRcd.size() > 0) {
153  LogError("L1T") << "Cannot unpack: invalid L1T raw data (size = " << l1tRcd.size() << ") for ID " << fedId
154  << ". Returning empty collections!";
155  } else if (warnsa_ < 5) {
156  warnsa_++;
157  LogInfo("L1T") << "During unpacking, encountered empty L1T raw data (size = " << l1tRcd.size()
158  << ") for FED ID " << fedId << ".";
159  }
160  continue;
161  } else {
162  valid_count++;
163  }
164 
165  const unsigned char* data = l1tRcd.data();
167 
168  if (header.check()) {
169  LogDebug("L1T") << "Found SLink header:"
170  << " Trigger type " << header.triggerType() << " L1 event ID " << header.lvl1ID()
171  << " BX Number " << header.bxID() << " FED source " << header.sourceID() << " FED version "
172  << header.version();
173  } else {
174  LogWarning("L1T") << "Did not find a SLink header!";
175  }
176 
177  FEDTrailer trailer(data + (l1tRcd.size() - slinkTrailerSize_));
178 
179  if (trailer.check()) {
180  LogDebug("L1T") << "Found SLink trailer:"
181  << " Length " << trailer.fragmentLength() << " CRC " << trailer.crc() << " Status "
182  << trailer.evtStatus() << " Throttling bits " << trailer.ttsBits();
183  } else {
184  LogWarning("L1T") << "Did not find a SLink trailer!";
185  }
186 
187  // FIXME Hard-coded firmware version for first 74x MC campaigns.
188  // Will account for differences in the AMC payload, MP7 payload,
189  // and unpacker setup.
190  bool legacy_mc = fwOverride_ && ((fwId_ >> 24) == 0xff);
191 
192  amc13::Packet packet;
193  if (!packet.parse((const uint64_t*)data,
194  (const uint64_t*)(data + slinkHeaderSize_),
195  (l1tRcd.size() - slinkHeaderSize_ - slinkTrailerSize_) / 8,
196  header.lvl1ID(),
197  header.bxID(),
198  legacy_mc,
199  mtf7_mode_)) {
200  LogError("L1T") << "Could not extract AMC13 Packet.";
201  return;
202  }
203 
204  for (auto& amc : packet.payload()) {
205  if (amc.size() == 0)
206  continue;
207 
208  auto payload64 = amc.data();
209  const uint32_t* start = (const uint32_t*)payload64.get();
210  // Want to have payload size in 32 bit words, but AMC measures
211  // it in 64 bit words → factor 2.
212  const uint32_t* end = start + (amc.size() * 2);
213 
214  std::unique_ptr<Payload> payload;
215  if (ctp7_mode_) {
216  LogDebug("L1T") << "Using CTP7 mode";
217  // CTP7 uses userData in AMC header
218  payload = std::make_unique<CTP7Payload>(start, end, amc.header());
219  } else if (mtf7_mode_) {
220  LogDebug("L1T") << "Using MTF7 mode";
221  payload = std::make_unique<MTF7Payload>(start, end);
222  } else {
223  LogDebug("L1T") << "Using MP7 mode";
224  payload = std::make_unique<MP7Payload>(start, end, legacy_mc);
225  }
226  unsigned fw = payload->getAlgorithmFWVersion();
227  unsigned board = amc.blockHeader().getBoardID();
228  unsigned amc_no = amc.blockHeader().getAMCNumber();
229 
230  // Let parameterset value override FW version
231  if (fwOverride_) {
232  if (fedId == 1360)
233  fw = fwId_;
234  else if (fedId == 1366)
235  fw = dmxFwId_;
236  }
237 
238  auto unpackers = prov_->getUnpackers(fedId, board, amc_no, fw);
239 
240  // getBlock() returns a non-null unique_ptr on success
241  std::unique_ptr<Block> block;
242  while ((block = payload->getBlock()).get()) {
243  // only unpack the Calo Layer 2 MP TMT node if it has processed this BX
244  unsigned tmtId = board - l1t::stage2::layer2::mp::offsetBoardId + 1;
245  unsigned bxId = header.bxID();
246  unsigned unpackTMT = (!tmtCheck_ || ((tmtId - 1) == ((bxId - 1 + 3) % 9)));
247  unsigned isCaloL2TMT =
249 
250  if (!isCaloL2TMT || unpackTMT) {
251  if (debug_) {
252  std::cout << ">>> block to unpack <<<" << std::endl
253  << "hdr: " << std::hex << std::setw(8) << std::setfill('0') << block->header().raw()
254  << std::dec << " (ID " << block->header().getID() << ", size " << block->header().getSize()
255  << ", CapID 0x" << std::hex << std::setw(2) << std::setfill('0') << block->header().getCapID()
256  << ")" << std::dec << std::endl;
257  for (const auto& word : block->payload()) {
258  if (debug_)
259  std::cout << "data: " << std::hex << std::setw(8) << std::setfill('0') << word << std::dec
260  << std::endl;
261  }
262  }
263 
264  auto unpacker = unpackers.find(block->header().getID());
265 
266  block->amc(amc.header());
267 
268  if (unpacker == unpackers.end()) {
269  LogDebug("L1T") << "Cannot find an unpacker for"
270  << "\n\tblock: ID " << block->header().getID() << ", size " << block->header().getSize()
271  << "\n\tAMC: # " << amc_no << ", board ID 0x" << std::hex << board << std::dec
272  << "\n\tFED ID " << fedId << ", and FW ID " << fw;
273  // TODO Handle error
274  } else if (!unpacker->second->unpack(*block, coll.get())) {
275  LogDebug("L1T") << "Error unpacking data for block ID " << block->header().getID() << ", AMC # " << amc_no
276  << ", board ID " << board << ", FED ID " << fedId << ", and FW ID " << fw << "!";
277  // TODO Handle error
278  }
279  }
280  }
281  }
282  }
283  if (valid_count < minFeds_) {
284  if (warnsb_ < 5) {
285  warnsb_++;
286  LogWarning("L1T") << "Unpacked " << valid_count << " non-empty FED IDs but minimum is set to " << minFeds_
287  << "\n";
288  }
289  }
290  }
Definition: start.py:1
unsigned int dmxFwId_
Definition: L1TRawToDigi.cc:65
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
Log< level::Error, false > LogError
uint64_t word
std::vector< int > fedIds_
Definition: L1TRawToDigi.cc:62
Log< level::Info, false > LogInfo
unsigned long long uint64_t
Definition: Time.h:13
bool parse(const uint64_t *start, const uint64_t *data, unsigned int size, unsigned int lv1, unsigned int bx, bool legacy_mc=false, bool mtf7_mode=false)
Definition: AMC13Spec.cc:60
unsigned int fwId_
Definition: L1TRawToDigi.cc:64
unsigned int minFeds_
Definition: L1TRawToDigi.cc:63
HLT enums.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:80
std::unique_ptr< PackingSetup > prov_
Definition: L1TRawToDigi.cc:68
std::vector< amc::Packet > payload() const
Definition: AMC13Spec.h:92
edm::EDGetTokenT< FEDRawDataCollection > fedData_
Definition: L1TRawToDigi.cc:58
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
Log< level::Warning, false > LogWarning
Definition: AMCSpec.h:8
Definition: event.py:1
#define LogDebug(id)

Member Data Documentation

◆ amc13HeaderSize_

int l1t::L1TRawToDigi::amc13HeaderSize_
private

Definition at line 75 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ amc13TrailerSize_

int l1t::L1TRawToDigi::amc13TrailerSize_
private

Definition at line 76 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ amcHeaderSize_

int l1t::L1TRawToDigi::amcHeaderSize_
private

Definition at line 73 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ amcTrailerSize_

int l1t::L1TRawToDigi::amcTrailerSize_
private

Definition at line 74 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ ctp7_mode_

bool l1t::L1TRawToDigi::ctp7_mode_
private

Definition at line 80 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ debug_

bool l1t::L1TRawToDigi::debug_
private

Definition at line 82 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ dmxFwId_

unsigned int l1t::L1TRawToDigi::dmxFwId_
private

Definition at line 65 of file L1TRawToDigi.cc.

Referenced by produce().

◆ fedData_

edm::EDGetTokenT<FEDRawDataCollection> l1t::L1TRawToDigi::fedData_
private

Definition at line 58 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ fedIds_

std::vector<int> l1t::L1TRawToDigi::fedIds_
private

Definition at line 62 of file L1TRawToDigi.cc.

Referenced by produce().

◆ fwId_

unsigned int l1t::L1TRawToDigi::fwId_
private

Definition at line 64 of file L1TRawToDigi.cc.

Referenced by produce().

◆ fwOverride_

bool l1t::L1TRawToDigi::fwOverride_
private

Definition at line 66 of file L1TRawToDigi.cc.

Referenced by produce().

◆ minFeds_

unsigned int l1t::L1TRawToDigi::minFeds_
private

Definition at line 63 of file L1TRawToDigi.cc.

Referenced by produce().

◆ mtf7_mode_

bool l1t::L1TRawToDigi::mtf7_mode_
private

Definition at line 81 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ prov_

std::unique_ptr<PackingSetup> l1t::L1TRawToDigi::prov_
private

Definition at line 68 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ slinkHeaderSize_

int l1t::L1TRawToDigi::slinkHeaderSize_
private

Definition at line 71 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ slinkTrailerSize_

int l1t::L1TRawToDigi::slinkTrailerSize_
private

Definition at line 72 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ tmtCheck_

bool l1t::L1TRawToDigi::tmtCheck_
private

Definition at line 78 of file L1TRawToDigi.cc.

Referenced by produce().

◆ warnsa_

int l1t::L1TRawToDigi::warnsa_
private

Definition at line 83 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().

◆ warnsb_

int l1t::L1TRawToDigi::warnsb_
private

Definition at line 84 of file L1TRawToDigi.cc.

Referenced by L1TRawToDigi(), and produce().