CMS 3D CMS Logo

L1TGlobalProducer.cc
Go to the documentation of this file.
1 // L1TGlobalProducer.cc
2 //author: Brian Winer - Ohio State
3 // Vladimir Rekovic - extend for overlap removal
4 
6 
7 // system include files
8 #include <memory>
9 #include <iostream>
10 #include <iomanip>
11 #include <algorithm>
12 
23 
25 
29 
31 
32 #include "TriggerMenuParser.h"
33 
34 using namespace l1t;
35 
38  // These parameters are part of the L1T/HLT interface, avoid changing if possible::
39  desc.add<edm::InputTag>("MuonInputTag", edm::InputTag(""))
40  ->setComment("InputTag for Global Muon Trigger (required parameter: default value is invalid)");
41  desc.add<edm::InputTag>("EGammaInputTag", edm::InputTag(""))
42  ->setComment("InputTag for Calo Trigger EGamma (required parameter: default value is invalid)");
43  desc.add<edm::InputTag>("TauInputTag", edm::InputTag(""))
44  ->setComment("InputTag for Calo Trigger Tau (required parameter: default value is invalid)");
45  desc.add<edm::InputTag>("JetInputTag", edm::InputTag(""))
46  ->setComment("InputTag for Calo Trigger Jet (required parameter: default value is invalid)");
47  desc.add<edm::InputTag>("EtSumInputTag", edm::InputTag(""))
48  ->setComment("InputTag for Calo Trigger EtSum (required parameter: default value is invalid)");
49  desc.add<edm::InputTag>("ExtInputTag", edm::InputTag(""))
50  ->setComment("InputTag for external conditions (not required, but recommend to specify explicitly in config)");
51  desc.add<edm::InputTag>("AlgoBlkInputTag", edm::InputTag("hltGtStage2Digis"))
52  ->setComment(
53  "InputTag for unpacked Algblk (required only if GetPrescaleColumnFromData orRequireMenuToMatchAlgoBlkInput "
54  "set to true)");
55  desc.add<bool>("GetPrescaleColumnFromData", false)
56  ->setComment("Get prescale column from unpacked GlobalAlgBck. Otherwise use value specified in PrescaleSet");
57  desc.add<bool>("AlgorithmTriggersUnprescaled", false)
58  ->setComment("not required, but recommend to specify explicitly in config");
59  desc.add<bool>("RequireMenuToMatchAlgoBlkInput", true)
60  ->setComment(
61  "This requires that the L1 menu record to match the menu used to produce the inputed L1 results, should be "
62  "true when used by the HLT to produce the object map");
63  desc.add<bool>("AlgorithmTriggersUnmasked", false)
64  ->setComment("not required, but recommend to specify explicitly in config");
65  // These parameters have well defined default values and are not currently
66  // part of the L1T/HLT interface. They can be cleaned up or updated at will:
67  desc.add<bool>("ProduceL1GtDaqRecord", true);
68  desc.add<bool>("ProduceL1GtObjectMapRecord", true);
69  desc.add<int>("EmulateBxInEvent", 1);
70  desc.add<int>("L1DataBxInEvent", 5);
71  desc.add<unsigned int>("AlternativeNrBxBoardDaq", 0);
72  desc.add<int>("BstLengthBytes", -1);
73  desc.add<unsigned int>("PrescaleSet", 1);
74  desc.addUntracked<int>("Verbosity", 0);
75  desc.addUntracked<bool>("PrintL1Menu", false);
76  desc.add<std::string>("TriggerMenuLuminosity", "startup");
77  desc.add<std::string>("PrescaleCSVFile", "prescale_L1TGlobal.csv");
78  descriptions.add("L1TGlobalProducer", desc);
79 }
80 
81 // constructors
82 
84  : m_muInputTag(parSet.getParameter<edm::InputTag>("MuonInputTag")),
85  m_egInputTag(parSet.getParameter<edm::InputTag>("EGammaInputTag")),
86  m_tauInputTag(parSet.getParameter<edm::InputTag>("TauInputTag")),
87  m_jetInputTag(parSet.getParameter<edm::InputTag>("JetInputTag")),
88  m_sumInputTag(parSet.getParameter<edm::InputTag>("EtSumInputTag")),
89  m_extInputTag(parSet.getParameter<edm::InputTag>("ExtInputTag")),
90 
91  m_produceL1GtDaqRecord(parSet.getParameter<bool>("ProduceL1GtDaqRecord")),
92  m_produceL1GtObjectMapRecord(parSet.getParameter<bool>("ProduceL1GtObjectMapRecord")),
93 
94  m_emulateBxInEvent(parSet.getParameter<int>("EmulateBxInEvent")),
95  m_L1DataBxInEvent(parSet.getParameter<int>("L1DataBxInEvent")),
96 
97  m_alternativeNrBxBoardDaq(parSet.getParameter<unsigned int>("AlternativeNrBxBoardDaq")),
98  m_psBstLengthBytes(parSet.getParameter<int>("BstLengthBytes")),
99 
100  m_prescaleSet(parSet.getParameter<unsigned int>("PrescaleSet")),
101 
102  m_algorithmTriggersUnprescaled(parSet.getParameter<bool>("AlgorithmTriggersUnprescaled")),
103  m_algorithmTriggersUnmasked(parSet.getParameter<bool>("AlgorithmTriggersUnmasked")),
104 
105  m_verbosity(parSet.getUntrackedParameter<int>("Verbosity")),
106  m_printL1Menu(parSet.getUntrackedParameter<bool>("PrintL1Menu")),
107  m_isDebugEnabled(edm::isDebugEnabled()),
108  m_getPrescaleColumnFromData(parSet.getParameter<bool>("GetPrescaleColumnFromData")),
109  m_requireMenuToMatchAlgoBlkInput(parSet.getParameter<bool>("RequireMenuToMatchAlgoBlkInput")),
110  m_algoblkInputTag(parSet.getParameter<edm::InputTag>("AlgoBlkInputTag")) {
111  m_egInputToken = consumes<BXVector<EGamma>>(m_egInputTag);
112  m_tauInputToken = consumes<BXVector<Tau>>(m_tauInputTag);
113  m_jetInputToken = consumes<BXVector<Jet>>(m_jetInputTag);
114  m_sumInputToken = consumes<BXVector<EtSum>>(m_sumInputTag);
115  m_muInputToken = consumes<BXVector<Muon>>(m_muInputTag);
116  m_extInputToken = consumes<BXVector<GlobalExtBlk>>(m_extInputTag);
117  m_l1GtStableParToken = esConsumes<L1TGlobalParameters, L1TGlobalParametersRcd>();
118  m_l1GtMenuToken = esConsumes<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd>();
120  m_l1GtPrescaleVetosToken = esConsumes<L1TGlobalPrescalesVetosFract, L1TGlobalPrescalesVetosFractRcd>();
121  }
123  m_algoblkInputToken = consumes<BXVector<GlobalAlgBlk>>(m_algoblkInputTag);
124  }
125 
126  if (m_verbosity) {
127  LogTrace("L1TGlobalProducer") << "\nInput tag for muon collection from uGMT: " << m_muInputTag
128  << "\nInput tag for calorimeter jet collections from Cal: " << m_jetInputTag
129  << "\nInput tag for external conditions : " << m_extInputTag << std::endl;
130 
131  LogTrace("L1TGlobalProducer") << "\nProduce the L1 uGT DAQ readout record: " << m_produceL1GtDaqRecord
132  << "\nProduce the L1 uGT Object Map record: "
133  << m_produceL1GtObjectMapRecord << " \n"
134  << "\nNumber of BxInEvent to be emulated: " << m_emulateBxInEvent << " \n"
135  << "\nAlternative for number of BX in GT DAQ record: 0x" << std::hex
136  << m_alternativeNrBxBoardDaq << " \n"
137  << "\nRun algorithm triggers unprescaled: "
139  << "\nRun algorithm triggers unmasked (all enabled): " << m_algorithmTriggersUnmasked
140  << "\n"
141  << std::endl;
142  }
143 
144  if ((m_emulateBxInEvent > 0) && ((m_emulateBxInEvent % 2) == 0)) {
146 
147  if (m_verbosity) {
148  edm::LogWarning("L1TGlobalProducer")
149  << "\nWARNING: Number of bunch crossing to be emulated rounded to: " << m_emulateBxInEvent
150  << "\n The number must be an odd number!\n"
151  << std::endl;
152  }
153  }
154 
155  if ((m_L1DataBxInEvent > 0) && ((m_L1DataBxInEvent % 2) == 0)) {
157 
158  if (m_verbosity) {
159  edm::LogWarning("L1TGlobalProducer")
160  << "\nWARNING: Number of bunch crossing for incoming L1 Data rounded to: " << m_L1DataBxInEvent
161  << "\n The number must be an odd number!\n"
162  << std::endl;
163  }
164  } else if (m_L1DataBxInEvent < 0) {
165  m_L1DataBxInEvent = 1;
166 
167  if (m_verbosity) {
168  edm::LogWarning("L1TGlobalProducer")
169  << "\nWARNING: Number of bunch crossing for incoming L1 Data was changed to: " << m_L1DataBxInEvent
170  << "\n The number must be an odd positive number!\n"
171  << std::endl;
172  }
173  }
174 
175  // register products
177  produces<GlobalAlgBlkBxCollection>();
178  //blwEXT produces<GlobalExtBlkBxCollection>();
179  }
180 
182  produces<GlobalObjectMapRecord>();
183  }
184 
185  // create new uGt Board
186  m_uGtBrd = std::make_unique<GlobalBoard>();
187  m_uGtBrd->setVerbosity(m_verbosity);
188 
189  // initialize cached IDs
190 
191  //
192  m_l1GtParCacheID = 0ULL;
193  m_l1GtMenuCacheID = 0ULL;
194 
197 
198  m_nrL1Mu = 0;
199  m_nrL1EG = 0;
200  m_nrL1Tau = 0;
201 
202  m_nrL1Jet = 0;
203 
206 
207  //
208  m_l1GtParCacheID = 0ULL;
209 
210  m_totalBxInEvent = 0;
211 
213  m_bstLengthBytes = 0;
214 
215  //
216  m_l1GtBMCacheID = 0ULL;
217 
218  //
219  m_l1GtPfAlgoCacheID = 0ULL;
220 
221  m_l1GtTmAlgoCacheID = 0ULL;
222 
224 
225  m_currentLumi = 0;
226 
227  // Set default, initial, dummy prescale factor table
228  std::vector<std::vector<double>> temp_prescaleTable;
229 
230  temp_prescaleTable.push_back(std::vector<double>());
231  m_initialPrescaleFactorsAlgoTrig = temp_prescaleTable;
232 }
233 
234 // destructor
236 
237 // member functions
238 
239 // method called to produce the data
241  // process event iEvent
242  // get / update the stable parameters from the EventSetup
243  // local cache & check on cacheIdentifier
244 
245  unsigned long long l1GtParCacheID = evSetup.get<L1TGlobalParametersRcd>().cacheIdentifier();
246 
247  if (m_l1GtParCacheID != l1GtParCacheID) {
249  m_l1GtStablePar = l1GtStablePar.product();
250  const GlobalParamsHelper* data = GlobalParamsHelper::readFromEventSetup(m_l1GtStablePar);
251 
252  // number of bx
253  m_totalBxInEvent = data->totalBxInEvent();
254 
255  // number of physics triggers
256  m_numberPhysTriggers = data->numberPhysTriggers();
257 
258  // number of objects of each type
259  m_nrL1Mu = data->numberL1Mu();
260 
261  // EG
262  m_nrL1EG = data->numberL1EG();
263 
264  // jets
265  m_nrL1Jet = data->numberL1Jet();
266 
267  // taus
268  m_nrL1Tau = data->numberL1Tau();
269 
270  if (m_L1DataBxInEvent < 1)
271  m_L1DataBxInEvent = 1;
272  int minL1DataBxInEvent = (m_L1DataBxInEvent + 1) / 2 - m_L1DataBxInEvent;
273  int maxL1DataBxInEvent = (m_L1DataBxInEvent + 1) / 2 - 1;
274 
275  // Initialize Board
276  m_uGtBrd->init(
277  m_numberPhysTriggers, m_nrL1Mu, m_nrL1EG, m_nrL1Tau, m_nrL1Jet, minL1DataBxInEvent, maxL1DataBxInEvent);
278 
279  //
280  m_l1GtParCacheID = l1GtParCacheID;
281  }
282 
283  if (m_emulateBxInEvent < 0) {
285  }
286 
287  if (m_emulateBxInEvent < 1)
288  m_emulateBxInEvent = 1;
289  int minEmulBxInEvent = (m_emulateBxInEvent + 1) / 2 - m_emulateBxInEvent;
290  int maxEmulBxInEvent = (m_emulateBxInEvent + 1) / 2 - 1;
291 
292  // get / update the trigger menu from the EventSetup
293  // local cache & check on cacheIdentifier
294  unsigned long long l1GtMenuCacheID = evSetup.get<L1TUtmTriggerMenuRcd>().cacheIdentifier();
295 
296  if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
297  const GlobalParamsHelper* data = GlobalParamsHelper::readFromEventSetup(m_l1GtStablePar);
298 
300  const L1TUtmTriggerMenu* utml1GtMenu = l1GtMenu.product();
301 
304  iEvent.getByToken(m_algoblkInputToken, m_uGtAlgBlk);
305  if (m_uGtAlgBlk->size() >= 1) {
306  if ((*m_uGtAlgBlk)[0].getL1FirmwareUUID() != static_cast<int>(utml1GtMenu->getFirmwareUuidHashed())) {
307  throw cms::Exception("ConditionsError")
308  << " Error L1 menu loaded in via conditions does not match the L1 actually run "
309  << (*m_uGtAlgBlk)[0].getL1FirmwareUUID() << " vs " << utml1GtMenu->getFirmwareUuidHashed()
310  << ". This means that the mapping of the names to the bits may be incorrect. Please check the "
311  "L1TUtmTriggerMenuRcd record supplied. Unless you know what you are doing, do not simply disable this "
312  "check via the config as this a major error and the indication of something very wrong";
313  }
314  }
315  }
316 
317  // Instantiate Parser
319 
320  gtParser.setGtNumberConditionChips(data->numberChips());
321  gtParser.setGtPinsOnConditionChip(data->pinsOnChip());
322  gtParser.setGtOrderConditionChip(data->orderOfChip());
323  gtParser.setGtNumberPhysTriggers(data->numberPhysTriggers());
324 
325  //Parse menu into emulator classes
326  gtParser.parseCondFormats(utml1GtMenu);
327 
328  // transfer the condition map and algorithm map from parser to L1uGtTriggerMenu
329  m_l1GtMenu = std::make_unique<TriggerMenu>(gtParser.gtTriggerMenuName(),
330  data->numberChips(),
331  gtParser.vecMuonTemplate(),
332  gtParser.vecCaloTemplate(),
333  gtParser.vecEnergySumTemplate(),
334  gtParser.vecExternalTemplate(),
335  gtParser.vecCorrelationTemplate(),
337  gtParser.corMuonTemplate(),
338  gtParser.corCaloTemplate(),
339  gtParser.corEnergySumTemplate());
340 
341  m_l1GtMenu->setGtTriggerMenuInterface(gtParser.gtTriggerMenuInterface());
342  m_l1GtMenu->setGtTriggerMenuImplementation(gtParser.gtTriggerMenuImplementation());
343  m_l1GtMenu->setGtScaleDbKey(gtParser.gtScaleDbKey());
344  m_l1GtMenu->setGtScales(gtParser.gtScales());
345  m_l1GtMenu->setGtTriggerMenuUUID(gtParser.gtTriggerMenuUUID());
346 
347  m_l1GtMenu->setGtAlgorithmMap(gtParser.gtAlgorithmMap());
348  m_l1GtMenu->setGtAlgorithmAliasMap(gtParser.gtAlgorithmAliasMap());
349 
350  m_l1GtMenu->buildGtConditionMap();
351 
352  int printV = 2;
353  if (m_printL1Menu)
354  m_l1GtMenu->print(std::cout, printV);
355 
356  m_l1GtMenuCacheID = l1GtMenuCacheID;
357  }
358 
359  // get / update the board maps from the EventSetup
360  // local cache & check on cacheIdentifier
361 
362  /* *** Drop L1GtBoard Maps for now
363  typedef std::vector<L1GtBoard>::const_iterator CItBoardMaps;
364 
365  unsigned long long l1GtBMCacheID = evSetup.get<L1GtBoardMapsRcd>().cacheIdentifier();
366 */
367 
368  /* ** Drop board mapping for now
369  if (m_l1GtBMCacheID != l1GtBMCacheID) {
370 
371  edm::ESHandle< L1GtBoardMaps > l1GtBM;
372  evSetup.get< L1GtBoardMapsRcd >().get( l1GtBM );
373  m_l1GtBM = l1GtBM.product();
374 
375  m_l1GtBMCacheID = l1GtBMCacheID;
376 
377  }
378 
379 
380  // TODO need changes in CondFormats to cache the maps
381  const std::vector<L1GtBoard>& boardMaps = m_l1GtBM->gtBoardMaps();
382 */
383  // get / update the prescale factors from the EventSetup
384  // local cache & check on cacheIdentifier
385 
386  // Only get event record if not unprescaled and not unmasked
388  unsigned long long l1GtPfAlgoCacheID = evSetup.get<L1TGlobalPrescalesVetosFractRcd>().cacheIdentifier();
389 
390  if (m_l1GtPfAlgoCacheID != l1GtPfAlgoCacheID) {
391  edm::ESHandle<L1TGlobalPrescalesVetosFract> l1GtPrescalesFractVetoes =
393  const L1TGlobalPrescalesVetosFract* es = l1GtPrescalesFractVetoes.product();
394  m_l1GtPrescalesVetosFract = PrescalesVetosFractHelper::readFromEventSetup(es);
395 
398 
399  m_l1GtPfAlgoCacheID = l1GtPfAlgoCacheID;
400  }
402  (m_currentLumi != iEvent.luminosityBlock())) { // get prescale column from unpacked data
403 
404  m_currentLumi = iEvent.luminosityBlock();
405 
407  iEvent.getByToken(m_algoblkInputToken, m_uGtAlgBlk);
408 
409  if (m_uGtAlgBlk.isValid() && !m_uGtAlgBlk->isEmpty(0)) {
410  std::vector<GlobalAlgBlk>::const_iterator algBlk = m_uGtAlgBlk->begin(0);
411  m_prescaleSet = static_cast<unsigned int>(algBlk->getPreScColumn());
412  } else {
413  m_prescaleSet = 1;
414  edm::LogError("L1TGlobalProduce")
415  << "Could not find valid algo block. Setting prescale column to 1" << std::endl;
416  }
417  }
418  } else {
419  // Set Prescale factors to initial dummy values
420  m_prescaleSet = 0;
424  }
425 
426  // get / update the trigger mask from the EventSetup
427  // local cache & check on cacheIdentifier
428 
429  /* **** For now Leave out Masks *****
430  unsigned long long l1GtTmAlgoCacheID =
431  evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().cacheIdentifier();
432 
433  if (m_l1GtTmAlgoCacheID != l1GtTmAlgoCacheID) {
434 
435  edm::ESHandle< L1GtTriggerMask > l1GtTmAlgo;
436  evSetup.get< L1GtTriggerMaskAlgoTrigRcd >().get( l1GtTmAlgo );
437  m_l1GtTmAlgo = l1GtTmAlgo.product();
438 
439  m_triggerMaskAlgoTrig = m_l1GtTmAlgo->gtTriggerMask();
440 
441  m_l1GtTmAlgoCacheID = l1GtTmAlgoCacheID;
442 
443  }
444 */
445 
446  /* **** For now Leave out Veto Masks *****
447  unsigned long long l1GtTmVetoAlgoCacheID =
448  evSetup.get<L1GtTriggerMaskVetoAlgoTrigRcd>().cacheIdentifier();
449 
450  if (m_l1GtTmVetoAlgoCacheID != l1GtTmVetoAlgoCacheID) {
451 
452  edm::ESHandle< L1GtTriggerMask > l1GtTmVetoAlgo;
453  evSetup.get< L1GtTriggerMaskVetoAlgoTrigRcd >().get( l1GtTmVetoAlgo );
454  m_l1GtTmVetoAlgo = l1GtTmVetoAlgo.product();
455 
456  m_triggerMaskVetoAlgoTrig = m_l1GtTmVetoAlgo->gtTriggerMask();
457 
458  m_l1GtTmVetoAlgoCacheID = l1GtTmVetoAlgoCacheID;
459 
460  }
461 */
462 
463  // ****** Board Maps Need to be redone....hard code for now ******
464  // loop over blocks in the GT DAQ record receiving data, count them if they are active
465  // all board type are defined in CondFormats/L1TObjects/L1GtFwd
466  // &
467  // set the active flag for each object type received from GMT and GCT
468  // all objects in the GT system
469 
470  //
471  bool receiveMu = true;
472  bool receiveEG = true;
473  bool receiveTau = true;
474  bool receiveJet = true;
475  bool receiveEtSums = true;
476  bool receiveExt = true;
477 
478  /* *** Boards need redefining *****
479  for (CItBoardMaps
480  itBoard = boardMaps.begin();
481  itBoard != boardMaps.end(); ++itBoard) {
482 
483  int iPosition = itBoard->gtPositionDaqRecord();
484  if (iPosition > 0) {
485 
486  int iActiveBit = itBoard->gtBitDaqActiveBoards();
487  bool activeBoard = false;
488 
489  if (iActiveBit >= 0) {
490  activeBoard = m_activeBoardsGtDaq & (1 << iActiveBit);
491  }
492 
493  // use board if: in the record, but not in ActiveBoardsMap (iActiveBit < 0)
494  // in the record and ActiveBoardsMap, and active
495  if ((iActiveBit < 0) || activeBoard) {
496 
497 // ****** Decide what board manipulation (if any we want here)
498 
499  }
500  }
501 
502  }
503 */
504 
505  // Produce the Output Records for the GT
506  std::unique_ptr<GlobalAlgBlkBxCollection> uGtAlgRecord(
507  new GlobalAlgBlkBxCollection(0, minEmulBxInEvent, maxEmulBxInEvent));
508 
509  // * produce the GlobalObjectMapRecord
510  std::unique_ptr<GlobalObjectMapRecord> gtObjectMapRecord(new GlobalObjectMapRecord());
511 
512  // fill the boards not depending on the BxInEvent in the L1 GT DAQ record
513  // GMT, PSB and FDL depend on BxInEvent
514 
515  // fill in emulator the same bunch crossing (12 bits - hardwired number of bits...)
516  // and the same local bunch crossing for all boards
517  int bxCross = iEvent.bunchCrossing();
518  uint16_t bxCrossHw = 0;
519  if ((bxCross & 0xFFF) == bxCross) {
520  bxCrossHw = static_cast<uint16_t>(bxCross);
521  } else {
522  bxCrossHw = 0; // Bx number too large, set to 0!
523  if (m_verbosity) {
524  LogDebug("L1TGlobalProducer") << "\nBunch cross number [hex] = " << std::hex << bxCross
525  << "\n larger than 12 bits. Set to 0! \n"
526  << std::dec << std::endl;
527  }
528  }
529  LogDebug("L1TGlobalProducer") << "HW BxCross " << bxCrossHw << std::endl;
530 
531  // get the prescale factor from the configuration for now
532  // prescale set index counts from zero
533  unsigned int pfAlgoSetIndex = m_prescaleSet;
534 
535  auto max = (*m_prescaleFactorsAlgoTrig).size() - 1;
536  if (pfAlgoSetIndex > max) {
537  edm::LogWarning("L1TGlobalProducer") << "\nAttempting to access prescale algo set: " << m_prescaleSet
538  << "\nNumber of prescale algo sets available: 0.." << max
539  << "Setting former to latter." << std::endl;
540  pfAlgoSetIndex = max;
541  }
542 
543  const std::vector<double>& prescaleFactorsAlgoTrig = (*m_prescaleFactorsAlgoTrig).at(pfAlgoSetIndex);
544 
545  // For now, set masks according to prescale value of 0
547  for (unsigned int iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); iAlgo++) {
548  unsigned int value = prescaleFactorsAlgoTrig[iAlgo];
549  value = (value == 0) ? 0 : 1;
551  }
553 
554  const std::vector<unsigned int>& triggerMaskAlgoTrig = *m_triggerMaskAlgoTrig;
555  const std::vector<int>& triggerMaskVetoAlgoTrig = *m_triggerMaskVetoAlgoTrig;
556 
557  LogDebug("L1TGlobalProducer") << "Size of prescale vector" << prescaleFactorsAlgoTrig.size() << std::endl;
558 
559  // Load the calorimeter input onto the uGt Board
560  m_uGtBrd->receiveCaloObjectData(iEvent,
565  receiveEG,
566  m_nrL1EG,
567  receiveTau,
568  m_nrL1Tau,
569  receiveJet,
570  m_nrL1Jet,
571  receiveEtSums);
572 
573  m_uGtBrd->receiveMuonObjectData(iEvent, m_muInputToken, receiveMu, m_nrL1Mu);
574 
575  m_uGtBrd->receiveExternalData(iEvent, m_extInputToken, receiveExt);
576 
577  // loop over BxInEvent
578  for (int iBxInEvent = minEmulBxInEvent; iBxInEvent <= maxEmulBxInEvent; ++iBxInEvent) {
579  // run GTL
580  LogDebug("L1TGlobalProducer") << "\nL1TGlobalProducer : running GTL for bx = " << iBxInEvent << "\n" << std::endl;
581 
582  // Run the GTL for this BX
583  m_uGtBrd->runGTL(iEvent,
584  evSetup,
585  m_l1GtMenu.get(),
587  iBxInEvent,
588  gtObjectMapRecord,
590  m_nrL1Mu,
591  m_nrL1EG,
592  m_nrL1Tau,
593  m_nrL1Jet);
594 
595  // run FDL
596  LogDebug("L1TGlobalProducer") << "\nL1TGlobalProducer : running FDL for bx = " << iBxInEvent << "\n" << std::endl;
597 
598  // Run the Final Decision Logic for this BX
599  m_uGtBrd->runFDL(iEvent,
600  iBxInEvent,
603  prescaleFactorsAlgoTrig,
604  triggerMaskAlgoTrig,
605  triggerMaskVetoAlgoTrig,
608 
609  // Fill in the DAQ Records
611  m_uGtBrd->fillAlgRecord(iBxInEvent,
612  uGtAlgRecord,
614  m_l1GtMenu->gtTriggerMenuUUID(),
615  m_l1GtMenu->gtTriggerMenuImplementation());
616  }
617 
618  } //End Loop over Bx
619 
620  // Add explicit reset of Board
621  m_uGtBrd->reset();
622 
623  if (m_verbosity && m_isDebugEnabled) {
624  std::ostringstream myCoutStream;
625 
626  for (int bx = minEmulBxInEvent; bx < maxEmulBxInEvent; bx++) {
628  (uGtAlgRecord->at(bx, 0)).print(myCoutStream);
629  }
630 
631  LogTrace("L1TGlobalProducer") << "\n The following L1 GT DAQ readout record was produced:\n"
632  << myCoutStream.str() << "\n"
633  << std::endl;
634 
635  myCoutStream.str("");
636  myCoutStream.clear();
637 
638  const std::vector<GlobalObjectMap> objMapVec = gtObjectMapRecord->gtObjectMap();
639 
640  for (std::vector<GlobalObjectMap>::const_iterator it = objMapVec.begin(); it != objMapVec.end(); ++it) {
641  (*it).print(myCoutStream);
642  }
643 
644  LogDebug("L1TGlobalProducer") << "Test gtObjectMapRecord in L1TGlobalProducer \n\n"
645  << myCoutStream.str() << "\n\n"
646  << std::endl;
647 
648  myCoutStream.str("");
649  myCoutStream.clear();
650  }
651 
652  // register products
654  iEvent.put(std::move(uGtAlgRecord));
655  }
656 
658  iEvent.put(std::move(gtObjectMapRecord));
659  }
660 }
661 
662 //define this as a plug-in
665 #include <cstdint>
ConfigurationDescriptions.h
l1t::TriggerMenuParser::vecCorrelationTemplate
const std::vector< std::vector< CorrelationTemplate > > & vecCorrelationTemplate() const
Definition: TriggerMenuParser.h:142
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
L1TGlobalProducer::m_jetInputToken
edm::EDGetTokenT< BXVector< l1t::Jet > > m_jetInputToken
Definition: L1TGlobalProducer.h:131
RefProd.h
l1t::PrescalesVetosFractHelper::triggerMaskVeto
const std::vector< int > & triggerMaskVeto() const
Definition: PrescalesVetosFractHelper.h:56
L1TGlobalProducer
Definition: L1TGlobalProducer.h:43
L1TGlobalProducer::m_l1GtPfAlgoCacheID
unsigned long long m_l1GtPfAlgoCacheID
Definition: L1TGlobalProducer.h:95
L1TGlobalProducer::m_uGtBrd
std::unique_ptr< l1t::GlobalBoard > m_uGtBrd
Definition: L1TGlobalProducer.h:118
electrons_cff.bool
bool
Definition: electrons_cff.py:393
L1TGlobalProducer::m_verbosity
int m_verbosity
verbosity level
Definition: L1TGlobalProducer.h:176
l1t::TriggerMenuParser::setGtPinsOnConditionChip
void setGtPinsOnConditionChip(const unsigned int &)
Definition: TriggerMenuParser.cc:70
GlobalObjectMapRecord.h
MessageLogger.h
GlobalObjectMapRecord
Definition: GlobalObjectMapRecord.h:29
L1TGlobalProducer::m_prescaleFactorsAlgoTrig
const std::vector< std::vector< double > > * m_prescaleFactorsAlgoTrig
Definition: L1TGlobalProducer.h:97
l1t::TriggerMenuParser::gtAlgorithmMap
const AlgorithmMap & gtAlgorithmMap() const
get / set the algorithm map (by name)
Definition: TriggerMenuParser.h:175
L1TGlobalProducer::m_numberPhysTriggers
unsigned int m_numberPhysTriggers
Definition: L1TGlobalProducer.h:64
l1t::TriggerMenuParser::setGtNumberPhysTriggers
void setGtNumberPhysTriggers(const unsigned int &)
Definition: TriggerMenuParser.cc:81
L1TGlobalProducer::m_requireMenuToMatchAlgoBlkInput
bool m_requireMenuToMatchAlgoBlkInput
Definition: L1TGlobalProducer.h:181
L1TGlobalProducer::m_algoblkInputTag
edm::InputTag m_algoblkInputTag
Definition: L1TGlobalProducer.h:182
ESHandle.h
L1TGlobalProducer::m_extInputToken
edm::EDGetTokenT< BXVector< GlobalExtBlk > > m_extInputToken
Definition: L1TGlobalProducer.h:136
L1TGlobalProducer::m_l1GtParCacheID
unsigned long long m_l1GtParCacheID
Definition: L1TGlobalProducer.h:57
L1TUtmTriggerMenuRcd
Definition: L1TUtmTriggerMenuRcd.h:11
L1TGlobalProducer::m_l1GtPrescalesVetosFract
const l1t::PrescalesVetosFractHelper * m_l1GtPrescalesVetosFract
prescale factors
Definition: L1TGlobalProducer.h:94
L1TGlobalProducer::m_totalBxInEvent
int m_totalBxInEvent
total number of Bx's in the event coming from EventSetup
Definition: L1TGlobalProducer.h:81
L1TGlobalProducer::m_nrL1Mu
int m_nrL1Mu
Definition: L1TGlobalProducer.h:70
GlobalParamsHelper.h
L1TGlobalProducer::m_initialTriggerMaskAlgoTrig
std::vector< unsigned int > m_initialTriggerMaskAlgoTrig
Definition: L1TGlobalProducer.h:113
edm
HLT enums.
Definition: AlignableModifier.h:19
GlobalExtBlk.h
L1TGlobalProducer::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: L1TGlobalProducer.cc:240
l1t::TriggerMenuParser::gtTriggerMenuName
const std::string & gtTriggerMenuName() const
Definition: TriggerMenuParser.h:100
l1t::TriggerMenuParser::gtTriggerMenuInterface
const std::string & gtTriggerMenuInterface() const
get / set the trigger menu names
Definition: TriggerMenuParser.h:95
gather_cfg.cout
cout
Definition: gather_cfg.py:144
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
l1t::TriggerMenuParser::gtAlgorithmAliasMap
const AlgorithmMap & gtAlgorithmAliasMap() const
get / set the algorithm map (by alias)
Definition: TriggerMenuParser.h:180
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
L1TGlobalProducer::m_jetInputTag
edm::InputTag m_jetInputTag
Definition: L1TGlobalProducer.h:127
L1TGlobalProducer::m_l1GtStablePar
const L1TGlobalParameters * m_l1GtStablePar
cached stuff
Definition: L1TGlobalProducer.h:56
L1TGlobalProducer::m_l1GtTmAlgoCacheID
unsigned long long m_l1GtTmAlgoCacheID
Definition: L1TGlobalProducer.h:107
l1t::TriggerMenuParser::vecMuonTemplate
const std::vector< std::vector< MuonTemplate > > & vecMuonTemplate() const
get / set the vectors containing the conditions
Definition: TriggerMenuParser.h:118
L1TGlobalProducer::m_l1GtTmVetoAlgoCacheID
unsigned long long m_l1GtTmVetoAlgoCacheID
Definition: L1TGlobalProducer.h:110
l1t::TriggerMenuParser::parseCondFormats
void parseCondFormats(const L1TUtmTriggerMenu *utmMenu)
Definition: TriggerMenuParser.cc:190
GlobalAlgBlkBxCollection
BXVector< GlobalAlgBlk > GlobalAlgBlkBxCollection
Definition: GlobalAlgBlk.h:31
L1TGlobalProducer::m_muInputTag
edm::InputTag m_muInputTag
input tag for muon collection from GMT
Definition: L1TGlobalProducer.h:121
edm::Handle
Definition: AssociativeIterator.h:50
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
L1TGlobalProducer::m_sumInputTag
edm::InputTag m_sumInputTag
Definition: L1TGlobalProducer.h:128
L1TGlobalProducer::m_tauInputToken
edm::EDGetTokenT< BXVector< l1t::Tau > > m_tauInputToken
Definition: L1TGlobalProducer.h:130
L1TGlobalProducer::m_l1GtStableParToken
edm::ESGetToken< L1TGlobalParameters, L1TGlobalParametersRcd > m_l1GtStableParToken
Definition: L1TGlobalProducer.h:185
L1TGlobalProducer::m_produceL1GtObjectMapRecord
bool m_produceL1GtObjectMapRecord
logical flag to produce the L1 GT object map record
Definition: L1TGlobalProducer.h:142
L1TGlobalProducer::m_algorithmTriggersUnprescaled
bool m_algorithmTriggersUnprescaled
Definition: L1TGlobalProducer.h:169
L1TUtmTriggerMenu
Definition: L1TUtmTriggerMenu.h:25
L1TGlobalProducer::m_l1GtPrescaleVetosToken
edm::ESGetToken< L1TGlobalPrescalesVetosFract, L1TGlobalPrescalesVetosFractRcd > m_l1GtPrescaleVetosToken
Definition: L1TGlobalProducer.h:187
MakerMacros.h
l1t::TriggerMenuParser::vecCaloTemplate
const std::vector< std::vector< CaloTemplate > > & vecCaloTemplate() const
Definition: TriggerMenuParser.h:122
L1TGlobalProducer::m_produceL1GtDaqRecord
bool m_produceL1GtDaqRecord
logical flag to produce the L1 GT DAQ readout record
Definition: L1TGlobalProducer.h:139
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
L1TGlobalProducer::m_isDebugEnabled
bool m_isDebugEnabled
Definition: L1TGlobalProducer.h:178
L1TGlobalProducer::m_initialPrescaleFactorsAlgoTrig
std::vector< std::vector< double > > m_initialPrescaleFactorsAlgoTrig
Definition: L1TGlobalProducer.h:98
edm::ESHandle
Definition: DTSurvey.h:22
L1TGlobalProducer::~L1TGlobalProducer
~L1TGlobalProducer() override
Definition: L1TGlobalProducer.cc:235
typedefs.h
L1TGlobalProducer::m_triggerMaskVetoAlgoTrig
const std::vector< int > * m_triggerMaskVetoAlgoTrig
Definition: L1TGlobalProducer.h:115
L1TGlobalProducer::m_extInputTag
edm::InputTag m_extInputTag
input tag for external conditions
Definition: L1TGlobalProducer.h:135
l1t::TriggerMenuParser::gtTriggerMenuUUID
const int gtTriggerMenuUUID() const
Definition: TriggerMenuParser.h:205
ParameterSetDescription.h
L1TGlobalProducer::m_l1GtMenuCacheID
unsigned long long m_l1GtMenuCacheID
Definition: L1TGlobalProducer.h:61
l1t::TriggerMenuParser::vecExternalTemplate
const std::vector< std::vector< ExternalTemplate > > & vecExternalTemplate() const
Definition: TriggerMenuParser.h:135
L1TGlobalProducer::m_alternativeNrBxBoardDaq
unsigned int m_alternativeNrBxBoardDaq
Definition: L1TGlobalProducer.h:158
L1TGlobalProducer::m_L1DataBxInEvent
int m_L1DataBxInEvent
Bx expected in Data coming to GT.
Definition: L1TGlobalProducer.h:154
L1TGlobalProducer::m_nrL1Tau
int m_nrL1Tau
Definition: L1TGlobalProducer.h:72
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
MessageDrop.h
edm::ParameterSet
Definition: ParameterSet.h:47
l1t::GlobalParamsHelper
Definition: GlobalParamsHelper.h:33
Event.h
print
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:46
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
l1t
delete x;
Definition: CaloConfig.h:22
L1TGlobalPrescalesVetosFract
Definition: L1TGlobalPrescalesVetosFract.h:13
L1TGlobalProducer::m_tauInputTag
edm::InputTag m_tauInputTag
Definition: L1TGlobalProducer.h:126
L1TGlobalParametersRcd
Definition: L1TGlobalParametersRcd.h:4
TriggerMenu.h
L1TGlobalProducer::m_l1GtMenu
std::unique_ptr< TriggerMenu > m_l1GtMenu
Definition: L1TGlobalProducer.h:60
ModuleDef.h
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
value
Definition: value.py:1
L1TGlobalProducer::m_initialTriggerMaskVetoAlgoTrig
std::vector< int > m_initialTriggerMaskVetoAlgoTrig
Definition: L1TGlobalProducer.h:116
l1t::TriggerMenuParser::corMuonTemplate
const std::vector< std::vector< MuonTemplate > > & corMuonTemplate() const
Definition: TriggerMenuParser.h:158
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:148
GlobalAlgBlk.h
L1TGlobalPrescalesVetosFractRcd
Definition: L1TGlobalPrescalesVetosFractRcd.h:11
edm::EventSetup
Definition: EventSetup.h:57
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
L1TGlobalProducer::m_algorithmTriggersUnmasked
bool m_algorithmTriggersUnmasked
Definition: L1TGlobalProducer.h:173
L1TGlobalProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: L1TGlobalProducer.cc:36
L1TGlobalProducer::m_muInputToken
edm::EDGetTokenT< BXVector< l1t::Muon > > m_muInputToken
Definition: L1TGlobalProducer.h:122
L1TGlobalProducer::m_nrL1EG
int m_nrL1EG
Definition: L1TGlobalProducer.h:71
L1TGlobalProducer::m_sumInputToken
edm::EDGetTokenT< BXVector< l1t::EtSum > > m_sumInputToken
Definition: L1TGlobalProducer.h:132
l1t::PrescalesVetosFractHelper::prescaleTable
const std::vector< std::vector< double > > & prescaleTable() const
Definition: PrescalesVetosFractHelper.h:51
InputTag.h
L1TGlobalProducer::m_emulateBxInEvent
int m_emulateBxInEvent
Definition: L1TGlobalProducer.h:151
l1t::TriggerMenuParser::gtScaleDbKey
const std::string & gtScaleDbKey() const
menu associated scale key
Definition: TriggerMenuParser.h:110
L1TGlobalProducer::m_printL1Menu
bool m_printL1Menu
Definition: L1TGlobalProducer.h:177
L1TGlobalProducer::L1TGlobalProducer
L1TGlobalProducer(const edm::ParameterSet &)
Definition: L1TGlobalProducer.cc:83
L1TGlobalProducer::m_ifCaloEtaNumberBits
int m_ifCaloEtaNumberBits
Definition: L1TGlobalProducer.h:78
L1TGlobalProducer::m_bstLengthBytes
unsigned int m_bstLengthBytes
length of BST record (in bytes) from event setup
Definition: L1TGlobalProducer.h:87
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
l1t::TriggerMenuParser::gtScales
const GlobalScales & gtScales() const
menu associated scales
Definition: TriggerMenuParser.h:113
eostools.move
def move(src, dest)
Definition: eostools.py:511
L1TGlobalProducer::m_getPrescaleColumnFromData
bool m_getPrescaleColumnFromData
Definition: L1TGlobalProducer.h:180
TriggerMenuParser.h
L1TGlobalProducer::m_prescaleSet
unsigned int m_prescaleSet
prescale set used
Definition: L1TGlobalProducer.h:164
l1t::TriggerMenuParser::gtTriggerMenuImplementation
const unsigned long gtTriggerMenuImplementation() const
Definition: TriggerMenuParser.h:105
L1TGlobalProducer::m_nrL1Jet
int m_nrL1Jet
Definition: L1TGlobalProducer.h:74
l1t::TriggerMenuParser::setGtOrderConditionChip
void setGtOrderConditionChip(const std::vector< int > &)
Definition: TriggerMenuParser.cc:76
Exception
Definition: hltDiff.cc:246
l1t::TriggerMenuParser::setGtNumberConditionChips
void setGtNumberConditionChips(const unsigned int &)
Definition: TriggerMenuParser.cc:65
L1TGlobalProducer::m_egInputToken
edm::EDGetTokenT< BXVector< l1t::EGamma > > m_egInputToken
Definition: L1TGlobalProducer.h:129
EventSetup.h
L1TGlobalProducer::m_algoblkInputToken
edm::EDGetToken m_algoblkInputToken
Definition: L1TGlobalProducer.h:183
L1TGlobalProducer::m_l1GtBMCacheID
unsigned long long m_l1GtBMCacheID
Definition: L1TGlobalProducer.h:91
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
edm::isDebugEnabled
bool isDebugEnabled()
Definition: MessageLogger.cc:12
l1t::TriggerMenuParser::corCaloTemplate
const std::vector< std::vector< CaloTemplate > > & corCaloTemplate() const
Definition: TriggerMenuParser.h:163
L1TUtmTriggerMenu::getFirmwareUuidHashed
const unsigned long getFirmwareUuidHashed() const
Definition: L1TUtmTriggerMenu.cc:5
L1TGlobalProducer::m_numberDaqPartitions
unsigned int m_numberDaqPartitions
Definition: L1TGlobalProducer.h:67
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:224
L1TGlobalProducer.h
L1TGlobalProducer::m_currentLumi
uint m_currentLumi
Definition: L1TGlobalProducer.h:103
l1t::TriggerMenuParser::vecEnergySumTemplate
const std::vector< std::vector< EnergySumTemplate > > & vecEnergySumTemplate() const
Definition: TriggerMenuParser.h:127
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
l1t::TriggerMenuParser
Definition: TriggerMenuParser.h:57
edm::Event
Definition: Event.h:73
l1t::TriggerMenuParser::corEnergySumTemplate
const std::vector< std::vector< EnergySumTemplate > > & corEnergySumTemplate() const
Definition: TriggerMenuParser.h:168
L1TGlobalProducer::m_l1GtMenuToken
edm::ESGetToken< L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd > m_l1GtMenuToken
Definition: L1TGlobalProducer.h:186
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
L1TGlobalProducer::m_triggerMaskAlgoTrig
const std::vector< unsigned int > * m_triggerMaskAlgoTrig
Definition: L1TGlobalProducer.h:112
edm::InputTag
Definition: InputTag.h:15
l1t::TriggerMenuParser::vecCorrelationWithOverlapRemovalTemplate
const std::vector< std::vector< CorrelationWithOverlapRemovalTemplate > > & vecCorrelationWithOverlapRemovalTemplate() const
Definition: TriggerMenuParser.h:149
L1TGlobalProducer::m_ifMuEtaNumberBits
int m_ifMuEtaNumberBits
Definition: L1TGlobalProducer.h:77
L1TGlobalProducer::m_activeBoardsGtDaq
uint16_t m_activeBoardsGtDaq
active boards in L1 GT DAQ record
Definition: L1TGlobalProducer.h:84
L1TGlobalProducer::m_egInputTag
edm::InputTag m_egInputTag
input tag for calorimeter collections from GCT
Definition: L1TGlobalProducer.h:125