CMS 3D CMS Logo

GlobalBoard.cc
Go to the documentation of this file.
1 
25 // this class header
27 
28 // user include files
45 
46 // Conditions for uGT
55 
58 
59 // Constructor
61  : m_candL1Mu(new BXVector<const l1t::Muon*>),
62  m_candL1MuShower(new BXVector<std::shared_ptr<l1t::MuonShower>>),
63  m_candL1EG(new BXVector<const l1t::L1Candidate*>),
64  m_candL1Tau(new BXVector<const l1t::L1Candidate*>),
65  m_candL1Jet(new BXVector<const l1t::L1Candidate*>),
66  m_candL1EtSum(new BXVector<const l1t::EtSum*>),
67  m_candL1External(new BXVector<const GlobalExtBlk*>),
68  m_currentLumi(0),
69  m_isDebugEnabled(edm::isDebugEnabled()) {
71 
72  m_gtlAlgorithmOR.reset();
73  m_gtlDecisionWord.reset();
74 
76 
77  // Initialize cached IDs
78  m_l1GtMenuCacheID = 0ULL;
81 
82  // Counter for number of events board sees
84 
85  // A single uGT GlobalBoard is taken into account in the emulator
86  m_uGtBoardNumber = 0;
87  m_uGtFinalBoard = true;
88 }
89 
90 // Destructor
92  //reset(); //why would we need a reset?
93  delete m_candL1Mu;
94  delete m_candL1MuShower;
95  delete m_candL1EG;
96  delete m_candL1Tau;
97  delete m_candL1Jet;
98  delete m_candL1EtSum;
99  delete m_candL1External;
100 }
101 
102 // Operations
103 void l1t::GlobalBoard::setBxFirst(int bx) { m_bxFirst_ = bx; }
104 
105 void l1t::GlobalBoard::setBxLast(int bx) { m_bxLast_ = bx; }
106 
107 void l1t::GlobalBoard::init(const int numberPhysTriggers,
108  const int nrL1Mu,
109  const int nrL1MuShower,
110  const int nrL1EG,
111  const int nrL1Tau,
112  const int nrL1Jet,
113  int bxFirst,
114  int bxLast) {
115  setBxFirst(bxFirst);
116  setBxLast(bxLast);
117 
118  m_candL1Mu->setBXRange(m_bxFirst_, m_bxLast_);
119  m_candL1MuShower->setBXRange(m_bxFirst_, m_bxLast_);
120  m_candL1EG->setBXRange(m_bxFirst_, m_bxLast_);
121  m_candL1Tau->setBXRange(m_bxFirst_, m_bxLast_);
122  m_candL1Jet->setBXRange(m_bxFirst_, m_bxLast_);
123  m_candL1EtSum->setBXRange(m_bxFirst_, m_bxLast_);
124  m_candL1External->setBXRange(m_bxFirst_, m_bxLast_);
125 
126  m_uGtAlgBlk.reset();
127 
128  LogDebug("L1TGlobal") << "\t Initializing Board with bxFirst = " << m_bxFirst_ << ", bxLast = " << m_bxLast_;
129 }
130 
131 // receive data from Calorimeter
133  const edm::EDGetTokenT<BXVector<l1t::EGamma>>& egInputToken,
134  const edm::EDGetTokenT<BXVector<l1t::Tau>>& tauInputToken,
135  const edm::EDGetTokenT<BXVector<l1t::Jet>>& jetInputToken,
136  const edm::EDGetTokenT<BXVector<l1t::EtSum>>& sumInputToken,
137  const bool receiveEG,
138  const int nrL1EG,
139  const bool receiveTau,
140  const int nrL1Tau,
141  const bool receiveJet,
142  const int nrL1Jet,
143  const bool receiveEtSums) {
144  if (m_verbosity) {
145  LogDebug("L1TGlobal") << "\n**** Board receiving Calo Data ";
146  //<< "\n from input tag " << caloInputTag << "\n"
147  }
148 
149  resetCalo();
150 
151  // get data from Calorimeter
152  if (receiveEG) {
154  iEvent.getByToken(egInputToken, egData);
155 
156  if (!egData.isValid()) {
157  if (m_verbosity) {
158  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::EGamma> with input tag "
159  //<< caloInputTag
160  << "\nrequested in configuration, but not found in the event.\n";
161  }
162  } else {
163  // bx in EG data
164  for (int i = egData->getFirstBX(); i <= egData->getLastBX(); ++i) {
165  // Prevent from pushing back bx that is outside of allowed range
166  if (i < m_bxFirst_ || i > m_bxLast_)
167  continue;
168 
169  //Loop over EG in this bx
170  int nObj = 0;
171  for (std::vector<l1t::EGamma>::const_iterator eg = egData->begin(i); eg != egData->end(i); ++eg) {
172  if (nObj < nrL1EG) {
173  (*m_candL1EG).push_back(i, &(*eg));
174  } else {
175  edm::LogWarning("L1TGlobal") << " Too many EG (" << nObj << ") for uGT Configuration maxEG =" << nrL1EG;
176  }
177  LogDebug("L1TGlobal") << "EG Pt " << eg->hwPt() << " Eta " << eg->hwEta() << " Phi " << eg->hwPhi()
178  << " Qual " << eg->hwQual() << " Iso " << eg->hwIso();
179 
180  nObj++;
181  } //end loop over EG in bx
182  } //end loop over bx
183  } //end if over valid EG data
184  } //end if ReceiveEG data
185 
186  if (receiveTau) {
188  iEvent.getByToken(tauInputToken, tauData);
189 
190  if (!tauData.isValid()) {
191  if (m_verbosity) {
192  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::Tau> with input tag "
193  //<< caloInputTag
194  << "\nrequested in configuration, but not found in the event.\n";
195  }
196  } else {
197  // bx in tau data
198  for (int i = tauData->getFirstBX(); i <= tauData->getLastBX(); ++i) {
199  // Prevent from pushing back bx that is outside of allowed range
200  if (i < m_bxFirst_ || i > m_bxLast_)
201  continue;
202 
203  //Loop over tau in this bx
204  int nObj = 0;
205  for (std::vector<l1t::Tau>::const_iterator tau = tauData->begin(i); tau != tauData->end(i); ++tau) {
206  if (nObj < nrL1Tau) {
207  (*m_candL1Tau).push_back(i, &(*tau));
208  } else {
209  LogTrace("L1TGlobal") << " Too many Tau (" << nObj << ") for uGT Configuration maxTau =" << nrL1Tau;
210  }
211 
212  LogDebug("L1TGlobal") << "tau Pt " << tau->hwPt() << " Eta " << tau->hwEta() << " Phi " << tau->hwPhi()
213  << " Qual " << tau->hwQual() << " Iso " << tau->hwIso();
214  nObj++;
215 
216  } //end loop over tau in bx
217  } //end loop over bx
218  } //end if over valid tau data
219  } //end if ReceiveTau data
220 
221  if (receiveJet) {
223  iEvent.getByToken(jetInputToken, jetData);
224 
225  if (!jetData.isValid()) {
226  if (m_verbosity) {
227  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::Jet> with input tag "
228  //<< caloInputTag
229  << "\nrequested in configuration, but not found in the event.\n";
230  }
231  } else {
232  // bx in jet data
233  for (int i = jetData->getFirstBX(); i <= jetData->getLastBX(); ++i) {
234  // Prevent from pushing back bx that is outside of allowed range
235  if (i < m_bxFirst_ || i > m_bxLast_)
236  continue;
237 
238  //Loop over jet in this bx
239  int nObj = 0;
240  for (std::vector<l1t::Jet>::const_iterator jet = jetData->begin(i); jet != jetData->end(i); ++jet) {
241  if (nObj < nrL1Jet) {
242  (*m_candL1Jet).push_back(i, &(*jet));
243  } else {
244  edm::LogWarning("L1TGlobal") << " Too many Jets (" << nObj << ") for uGT Configuration maxJet =" << nrL1Jet;
245  }
246 
247  LogDebug("L1TGlobal") << "Jet Pt " << jet->hwPt() << " Eta " << jet->hwEta() << " Phi " << jet->hwPhi()
248  << " Qual " << jet->hwQual() << " Iso " << jet->hwIso();
249  nObj++;
250  } //end loop over jet in bx
251  } //end loop over bx
252  } //end if over valid jet data
253  } //end if ReceiveJet data
254 
255  if (receiveEtSums) {
257  iEvent.getByToken(sumInputToken, etSumData);
258 
259  if (!etSumData.isValid()) {
260  if (m_verbosity) {
261  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::EtSum> with input tag "
262  //<< caloInputTag
263  << "\nrequested in configuration, but not found in the event.\n";
264  }
265  } else {
266  for (int i = etSumData->getFirstBX(); i <= etSumData->getLastBX(); ++i) {
267  // Prevent from pushing back bx that is outside of allowed range
268  if (i < m_bxFirst_ || i > m_bxLast_)
269  continue;
270 
271  //Loop over jet in this bx
272  for (std::vector<l1t::EtSum>::const_iterator etsum = etSumData->begin(i); etsum != etSumData->end(i); ++etsum) {
273  (*m_candL1EtSum).push_back(i, &(*etsum));
274 
275  /* In case we need to split these out
276  switch ( etsum->getType() ) {
277  case l1t::EtSum::EtSumType::kMissingEt:
278  {
279  //(*m_candETM).push_back(i,&(*etsum));
280  LogDebug("L1TGlobal") << "ETM: Pt " << etsum->hwPt() << " Phi " << etsum->hwPhi();
281  }
282  break;
283  case l1t::EtSum::EtSumType::kMissingHt:
284  {
285  //(*m_candHTM).push_back(i,&(*etsum));
286  LogDebug("L1TGlobal") << "HTM: Pt " << etsum->hwPt() << " Phi " << etsum->hwPhi();
287  }
288  break;
289  case l1t::EtSum::EtSumType::kTotalEt:
290  {
291  //(*m_candETT).push_back(i,&(*etsum));
292  LogDebug("L1TGlobal") << "ETT: Pt " << etsum->hwPt();
293  }
294  break;
295  case l1t::EtSum::EtSumType::kTotalHt:
296  {
297  //(*m_candHTT).push_back(i,&(*etsum));
298  LogDebug("L1TGlobal") << "HTT: Pt " << etsum->hwPt();
299  }
300  break;
301  case l1t::EtSum::EtSumType::kTowerCount:
302  {
303  //(*m_candTowerCount).push_back(i,&(*etsum));
304  LogDebug("L1TGlobal") << "TowerCount: " << etsum->hwPt();
305  }
306  break;
307  default:
308  LogDebug("L1TGlobal") << "Default encounted ";
309  break;
310  }
311 */
312 
313  } //end loop over jet in bx
314  } //end loop over Bx
315  }
316  }
317 }
318 
319 // receive data from Global Muon Trigger
321  const edm::EDGetTokenT<BXVector<l1t::Muon>>& muInputToken,
322  const bool receiveMu,
323  const int nrL1Mu) {
324  if (m_verbosity) {
325  LogDebug("L1TGlobal") << "\n**** GlobalBoard receiving muon data = ";
326  //<< "\n from input tag " << muInputTag << "\n"
327  }
328 
329  resetMu();
330 
331  // get data from Global Muon Trigger
332  if (receiveMu) {
334  iEvent.getByToken(muInputToken, muonData);
335 
336  if (!muonData.isValid()) {
337  if (m_verbosity) {
338  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::Muon> with input tag "
339  //<< muInputTag
340  << "\nrequested in configuration, but not found in the event.\n";
341  }
342  } else {
343  // bx in muon data
344  for (int i = muonData->getFirstBX(); i <= muonData->getLastBX(); ++i) {
345  // Prevent from pushing back bx that is outside of allowed range
346  if (i < m_bxFirst_ || i > m_bxLast_)
347  continue;
348 
349  //Loop over Muons in this bx
350  int nObj = 0;
351  for (std::vector<l1t::Muon>::const_iterator mu = muonData->begin(i); mu != muonData->end(i); ++mu) {
352  if (nObj < nrL1Mu) {
353  (*m_candL1Mu).push_back(i, &(*mu));
354  } else {
355  edm::LogWarning("L1TGlobal") << " Too many Muons (" << nObj << ") for uGT Configuration maxMu =" << nrL1Mu;
356  }
357 
358  LogDebug("L1TGlobal") << "Muon Pt " << mu->hwPt() << " EtaAtVtx " << mu->hwEtaAtVtx() << " PhiAtVtx "
359  << mu->hwPhiAtVtx() << " Qual " << mu->hwQual() << " Iso " << mu->hwIso();
360  nObj++;
361  } //end loop over muons in bx
362  } //end loop over bx
363  } //end if over valid muon data
364  } //end if ReceiveMuon data
365 }
366 
367 // receive muon shower data from Global Muon Trigger
369  const edm::EDGetTokenT<BXVector<l1t::MuonShower>>& muShowerInputToken,
370  const bool receiveMuShower,
371  const int nrL1MuShower) {
372  // get data from Global Muon Trigger
373  if (receiveMuShower) {
375  iEvent.getByToken(muShowerInputToken, muonData);
376 
377  if (!muonData.isValid()) {
378  if (m_verbosity) {
379  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<l1t::MuonShower> with input tag "
380  << "\nrequested in configuration, but not found in the event.\n";
381  }
382  } else {
383  // Loop over bx in muon data
384  for (int i = muonData->getFirstBX(); i <= muonData->getLastBX(); ++i) {
385  // Prevent from pushing back bx that is outside of allowed range
386  if (i < m_bxFirst_ || i > m_bxLast_)
387  continue;
388 
389  // Loop over Muon Showers in this bx
390  int nObj = 0;
391  for (std::vector<l1t::MuonShower>::const_iterator mu = muonData->begin(i); mu != muonData->end(i); ++mu) {
392  if (nObj < nrL1MuShower) {
393  /* NOTE: here the single object is split up into 5 separate MuonShower objects
394  similarly to the description in the UTM library, where the conditions are four different objects.
395  */
396 
397  std::shared_ptr<l1t::MuonShower> musOneNominalInTime =
398  std::make_shared<l1t::MuonShower>(false, false, false, false, false, false);
399  std::shared_ptr<l1t::MuonShower> musOneTightInTime =
400  std::make_shared<l1t::MuonShower>(false, false, false, false, false, false);
401  std::shared_ptr<l1t::MuonShower> musTwoLooseDiffSectorsInTime =
402  std::make_shared<l1t::MuonShower>(false, false, false, false, false, false);
403  std::shared_ptr<l1t::MuonShower> musOutOfTime0 =
404  std::make_shared<l1t::MuonShower>(false, false, false, false, false, false);
405  std::shared_ptr<l1t::MuonShower> musOutOfTime1 =
406  std::make_shared<l1t::MuonShower>(false, false, false, false, false, false);
407 
408  musOneNominalInTime->setOneNominalInTime(mu->isOneNominalInTime());
409  musOneTightInTime->setOneTightInTime(mu->isOneTightInTime());
410  musTwoLooseDiffSectorsInTime->setTwoLooseDiffSectorsInTime(mu->isTwoLooseDiffSectorsInTime());
411  musOutOfTime0->setMusOutOfTime0(mu->musOutOfTime0());
412  musOutOfTime1->setMusOutOfTime1(mu->musOutOfTime1());
413 
414  (*m_candL1MuShower).push_back(i, musOneNominalInTime);
415  (*m_candL1MuShower).push_back(i, musOneTightInTime);
416  (*m_candL1MuShower).push_back(i, musTwoLooseDiffSectorsInTime);
417  (*m_candL1MuShower).push_back(i, musOutOfTime0);
418  (*m_candL1MuShower).push_back(i, musOutOfTime1);
419 
420  } else {
421  edm::LogWarning("L1TGlobal") << " Too many Muon Showers (" << nObj
422  << ") for uGT Configuration maxMuShower =" << nrL1MuShower;
423  }
424  nObj++;
425  } //end loop over muon showers in bx
426  } //end loop over bx
427  } //end if over valid muon shower data
428  } //end if ReceiveMuonShower data
429 }
430 
431 // receive data from Global External Conditions
433  const edm::EDGetTokenT<BXVector<GlobalExtBlk>>& extInputToken,
434  const bool receiveExt) {
435  if (m_verbosity) {
436  LogDebug("L1TGlobal") << "\n**** GlobalBoard receiving external data = ";
437  //<< "\n from input tag " << muInputTag << "\n"
438  }
439 
440  resetExternal();
441 
442  // get data from Global Muon Trigger
443  if (receiveExt) {
445  iEvent.getByToken(extInputToken, extData);
446 
447  if (!extData.isValid()) {
448  if (m_verbosity) {
449  edm::LogWarning("L1TGlobal") << "\nWarning: BXVector<GlobalExtBlk> with input tag "
450  //<< muInputTag
451  << "\nrequested in configuration, but not found in the event.\n";
452  }
453  } else {
454  // bx in muon data
455  for (int i = extData->getFirstBX(); i <= extData->getLastBX(); ++i) {
456  // Prevent from pushing back bx that is outside of allowed range
457  if (i < m_bxFirst_ || i > m_bxLast_)
458  continue;
459 
460  //Loop over ext in this bx
461  for (std::vector<GlobalExtBlk>::const_iterator ext = extData->begin(i); ext != extData->end(i); ++ext) {
462  (*m_candL1External).push_back(i, &(*ext));
463  } //end loop over ext in bx
464  } //end loop over bx
465  } //end if over valid ext data
466  } //end if ReceiveExt data
467 }
468 
469 // run GTL
471  const edm::EventSetup& evSetup,
472  const TriggerMenu* m_l1GtMenu,
473  const bool produceL1GtObjectMapRecord,
474  const int iBxInEvent,
475  std::unique_ptr<GlobalObjectMapRecord>& gtObjectMapRecord,
476  const unsigned int numberPhysTriggers,
477  const int nrL1Mu,
478  const int nrL1MuShower,
479  const int nrL1EG,
480  const int nrL1Tau,
481  const int nrL1Jet) {
482  const std::vector<ConditionMap>& conditionMap = m_l1GtMenu->gtConditionMap();
483  const AlgorithmMap& algorithmMap = m_l1GtMenu->gtAlgorithmMap();
484  const GlobalScales& gtScales = m_l1GtMenu->gtScales();
485  const std::string scaleSetName = gtScales.getScalesName();
486  LogDebug("L1TGlobal") << " L1 Menu Scales -- Set Name: " << scaleSetName;
487 
488  // Reset AlgBlk for this bx
489  m_uGtAlgBlk.reset();
490  m_algInitialOr = false;
491  m_algPrescaledOr = false;
492  m_algIntermOr = false;
493  m_algFinalOr = false;
494  m_algFinalOrVeto = false;
495 
496  const std::vector<std::vector<MuonTemplate>>& corrMuon = m_l1GtMenu->corMuonTemplate();
497 
498  // Comment out for now
499  const std::vector<std::vector<CaloTemplate>>& corrCalo = m_l1GtMenu->corCaloTemplate();
500 
501  const std::vector<std::vector<EnergySumTemplate>>& corrEnergySum = m_l1GtMenu->corEnergySumTemplate();
502 
503  LogDebug("L1TGlobal") << "Size corrMuon " << corrMuon.size() << "\nSize corrCalo " << corrCalo.size()
504  << "\nSize corrSums " << corrEnergySum.size();
505 
506  // -----------------------------------------------------
507  // Loop over condition maps (one map per condition chip),
508  // then loop over conditions in the map and
509  // save the results in temporary maps
510  // -----------------------------------------------------
511  // never happens in production but at first event...
512  if (m_conditionResultMaps.size() != conditionMap.size()) {
513  m_conditionResultMaps.clear();
514  m_conditionResultMaps.resize(conditionMap.size());
515  }
516 
517  int iChip = -1;
518 
519  for (std::vector<ConditionMap>::const_iterator itCondOnChip = conditionMap.begin();
520  itCondOnChip != conditionMap.end();
521  itCondOnChip++) {
522  iChip++;
523 
524  AlgorithmEvaluation::ConditionEvaluationMap& cMapResults = m_conditionResultMaps[iChip];
525 
526  for (CItCond itCond = itCondOnChip->begin(); itCond != itCondOnChip->end(); itCond++) {
527  // evaluate condition
528  switch ((itCond->second)->condCategory()) {
529  case CondMuon: {
530  // BLW Not sure what to do with this for now
531  const int ifMuEtaNumberBits = 0;
532 
533  MuCondition* muCondition = new MuCondition(itCond->second, this, nrL1Mu, ifMuEtaNumberBits);
534 
535  muCondition->setVerbosity(m_verbosity);
536 
537  muCondition->evaluateConditionStoreResult(iBxInEvent);
538 
539  // BLW COmment out for now
540  cMapResults[itCond->first] = muCondition;
541 
542  if (m_verbosity && m_isDebugEnabled) {
543  std::ostringstream myCout;
544  muCondition->print(myCout);
545 
546  LogTrace("L1TGlobal") << myCout.str();
547  }
548  //delete muCondition;
549 
550  } break;
551  case CondMuonShower: {
552  MuonShowerCondition* muShowerCondition = new MuonShowerCondition(itCond->second, this, nrL1MuShower);
553 
554  muShowerCondition->setVerbosity(m_verbosity);
555 
556  muShowerCondition->evaluateConditionStoreResult(iBxInEvent);
557 
558  cMapResults[itCond->first] = muShowerCondition;
559 
560  if (m_verbosity && m_isDebugEnabled) {
561  std::ostringstream myCout;
562  muShowerCondition->print(myCout);
563 
564  edm::LogWarning("L1TGlobal") << "MuonShowerCondition " << myCout.str();
565  }
566  //delete muShowerCondition;
567 
568  } break;
569  case CondCalo: {
570  // BLW Not sure w hat to do with this for now
571  const int ifCaloEtaNumberBits = 0;
572 
573  CaloCondition* caloCondition =
574  new CaloCondition(itCond->second, this, nrL1EG, nrL1Jet, nrL1Tau, ifCaloEtaNumberBits);
575 
576  caloCondition->setVerbosity(m_verbosity);
577 
578  caloCondition->evaluateConditionStoreResult(iBxInEvent);
579 
580  cMapResults[itCond->first] = caloCondition;
581 
582  if (m_verbosity && m_isDebugEnabled) {
583  std::ostringstream myCout;
584  caloCondition->print(myCout);
585 
586  LogTrace("L1TGlobal") << myCout.str();
587  }
588  // delete caloCondition;
589 
590  } break;
591  case CondEnergySum: {
592  EnergySumCondition* eSumCondition = new EnergySumCondition(itCond->second, this);
593 
594  eSumCondition->setVerbosity(m_verbosity);
595  eSumCondition->evaluateConditionStoreResult(iBxInEvent);
596 
597  cMapResults[itCond->first] = eSumCondition;
598 
599  if (m_verbosity && m_isDebugEnabled) {
600  std::ostringstream myCout;
601  eSumCondition->print(myCout);
602 
603  LogTrace("L1TGlobal") << myCout.str();
604  }
605  // delete eSumCondition;
606 
607  } break;
608 
609  case CondExternal: {
610  ExternalCondition* extCondition = new ExternalCondition(itCond->second, this);
611 
612  extCondition->setVerbosity(m_verbosity);
613  extCondition->evaluateConditionStoreResult(iBxInEvent);
614 
615  cMapResults[itCond->first] = extCondition;
616 
617  if (m_verbosity && m_isDebugEnabled) {
618  std::ostringstream myCout;
619  extCondition->print(myCout);
620 
621  LogTrace("L1TGlobal") << myCout.str();
622  }
623  // delete extCondition;
624 
625  } break;
626  case CondCorrelation: {
627  // get first the sub-conditions
628  const CorrelationTemplate* corrTemplate = static_cast<const CorrelationTemplate*>(itCond->second);
629  const GtConditionCategory cond0Categ = corrTemplate->cond0Category();
630  const GtConditionCategory cond1Categ = corrTemplate->cond1Category();
631  const int cond0Ind = corrTemplate->cond0Index();
632  const int cond1Ind = corrTemplate->cond1Index();
633 
634  const GlobalCondition* cond0Condition = nullptr;
635  const GlobalCondition* cond1Condition = nullptr;
636 
637  // maximum number of objects received for evaluation of l1t::Type1s condition
638  int cond0NrL1Objects = 0;
639  int cond1NrL1Objects = 0;
640  LogDebug("L1TGlobal") << " cond0NrL1Objects" << cond0NrL1Objects << " cond1NrL1Objects "
641  << cond1NrL1Objects;
642 
643  switch (cond0Categ) {
644  case CondMuon: {
645  cond0Condition = &((corrMuon[iChip])[cond0Ind]);
646  } break;
647  case CondCalo: {
648  cond0Condition = &((corrCalo[iChip])[cond0Ind]);
649  } break;
650  case CondEnergySum: {
651  cond0Condition = &((corrEnergySum[iChip])[cond0Ind]);
652  } break;
653  default: {
654  // do nothing, should not arrive here
655  } break;
656  }
657 
658  switch (cond1Categ) {
659  case CondMuon: {
660  cond1Condition = &((corrMuon[iChip])[cond1Ind]);
661  } break;
662  case CondCalo: {
663  cond1Condition = &((corrCalo[iChip])[cond1Ind]);
664  } break;
665  case CondEnergySum: {
666  cond1Condition = &((corrEnergySum[iChip])[cond1Ind]);
667  } break;
668  default: {
669  // do nothing, should not arrive here
670  } break;
671  }
672 
673  CorrCondition* correlationCond = new CorrCondition(itCond->second, cond0Condition, cond1Condition, this);
674 
675  correlationCond->setVerbosity(m_verbosity);
676  correlationCond->setScales(&gtScales);
677  correlationCond->evaluateConditionStoreResult(iBxInEvent);
678 
679  cMapResults[itCond->first] = correlationCond;
680 
681  if (m_verbosity && m_isDebugEnabled) {
682  std::ostringstream myCout;
683  correlationCond->print(myCout);
684 
685  LogTrace("L1TGlobal") << myCout.str();
686  }
687 
688  // delete correlationCond;
689 
690  } break;
692  // get first the sub-conditions
693  const CorrelationThreeBodyTemplate* corrTemplate =
694  static_cast<const CorrelationThreeBodyTemplate*>(itCond->second);
695  const GtConditionCategory cond0Categ = corrTemplate->cond0Category();
696  const GtConditionCategory cond1Categ = corrTemplate->cond1Category();
697  const GtConditionCategory cond2Categ = corrTemplate->cond2Category();
698  const int cond0Ind = corrTemplate->cond0Index();
699  const int cond1Ind = corrTemplate->cond1Index();
700  const int cond2Ind = corrTemplate->cond2Index();
701 
702  const GlobalCondition* cond0Condition = nullptr;
703  const GlobalCondition* cond1Condition = nullptr;
704  const GlobalCondition* cond2Condition = nullptr;
705 
706  // maximum number of objects received for evaluation of l1t::Type1s condition
707  int cond0NrL1Objects = 0;
708  int cond1NrL1Objects = 0;
709  int cond2NrL1Objects = 0;
710  LogDebug("L1TGlobal") << " cond0NrL1Objects " << cond0NrL1Objects << " cond1NrL1Objects "
711  << cond1NrL1Objects << " cond2NrL1Objects " << cond2NrL1Objects;
712  if (cond0Categ == CondMuon) {
713  cond0Condition = &((corrMuon[iChip])[cond0Ind]);
714  } else {
715  LogDebug("L1TGlobal") << "No muon0 to evaluate three-body correlation condition";
716  }
717  if (cond1Categ == CondMuon) {
718  cond1Condition = &((corrMuon[iChip])[cond1Ind]);
719  } else {
720  LogDebug("L1TGlobal") << "No muon1 to evaluate three-body correlation condition";
721  }
722  if (cond2Categ == CondMuon) {
723  cond2Condition = &((corrMuon[iChip])[cond2Ind]);
724  } else {
725  LogDebug("L1TGlobal") << "No muon2 to evaluate three-body correlation condition";
726  }
727 
728  CorrThreeBodyCondition* correlationThreeBodyCond =
729  new CorrThreeBodyCondition(itCond->second, cond0Condition, cond1Condition, cond2Condition, this);
730 
731  correlationThreeBodyCond->setVerbosity(m_verbosity);
732  correlationThreeBodyCond->setScales(&gtScales);
733  correlationThreeBodyCond->evaluateConditionStoreResult(iBxInEvent);
734  cMapResults[itCond->first] = correlationThreeBodyCond;
735 
736  if (m_verbosity && m_isDebugEnabled) {
737  std::ostringstream myCout;
738  correlationThreeBodyCond->print(myCout);
739 
740  LogTrace("L1TGlobal") << myCout.str();
741  }
742  // delete correlationThreeBodyCond;
743  } break;
744 
746  // get first the sub-conditions
747  const CorrelationWithOverlapRemovalTemplate* corrTemplate =
748  static_cast<const CorrelationWithOverlapRemovalTemplate*>(itCond->second);
749  const GtConditionCategory cond0Categ = corrTemplate->cond0Category();
750  const GtConditionCategory cond1Categ = corrTemplate->cond1Category();
751  const GtConditionCategory cond2Categ = corrTemplate->cond2Category();
752  const int cond0Ind = corrTemplate->cond0Index();
753  const int cond1Ind = corrTemplate->cond1Index();
754  const int cond2Ind = corrTemplate->cond2Index();
755 
756  const GlobalCondition* cond0Condition = nullptr;
757  const GlobalCondition* cond1Condition = nullptr;
758  const GlobalCondition* cond2Condition = nullptr;
759 
760  // maximum number of objects received for evaluation of l1t::Type1s condition
761  int cond0NrL1Objects = 0;
762  int cond1NrL1Objects = 0;
763  int cond2NrL1Objects = 0;
764  LogDebug("L1TGlobal") << " cond0NrL1Objects" << cond0NrL1Objects << " cond1NrL1Objects " << cond1NrL1Objects
765  << " cond2NrL1Objects " << cond2NrL1Objects;
766 
767  switch (cond0Categ) {
768  case CondMuon: {
769  cond0Condition = &((corrMuon[iChip])[cond0Ind]);
770  } break;
771  case CondCalo: {
772  cond0Condition = &((corrCalo[iChip])[cond0Ind]);
773  } break;
774  case CondEnergySum: {
775  cond0Condition = &((corrEnergySum[iChip])[cond0Ind]);
776  } break;
777  default: {
778  // do nothing, should not arrive here
779  } break;
780  }
781 
782  switch (cond1Categ) {
783  case CondMuon: {
784  cond1Condition = &((corrMuon[iChip])[cond1Ind]);
785  } break;
786  case CondCalo: {
787  cond1Condition = &((corrCalo[iChip])[cond1Ind]);
788  } break;
789  case CondEnergySum: {
790  cond1Condition = &((corrEnergySum[iChip])[cond1Ind]);
791  } break;
792  default: {
793  // do nothing, should not arrive here
794  } break;
795  }
796 
797  switch (cond2Categ) {
798  case CondMuon: {
799  cond2Condition = &((corrMuon[iChip])[cond2Ind]);
800  } break;
801  case CondCalo: {
802  cond2Condition = &((corrCalo[iChip])[cond2Ind]);
803  } break;
804  case CondEnergySum: {
805  cond2Condition = &((corrEnergySum[iChip])[cond2Ind]);
806  } break;
807  default: {
808  // do nothing, should not arrive here
809  } break;
810  }
811 
812  CorrWithOverlapRemovalCondition* correlationCondWOR =
813  new CorrWithOverlapRemovalCondition(itCond->second, cond0Condition, cond1Condition, cond2Condition, this);
814 
815  correlationCondWOR->setVerbosity(m_verbosity);
816  correlationCondWOR->setScales(&gtScales);
817  correlationCondWOR->evaluateConditionStoreResult(iBxInEvent);
818 
819  cMapResults[itCond->first] = correlationCondWOR;
820 
821  if (m_verbosity && m_isDebugEnabled) {
822  std::ostringstream myCout;
823  correlationCondWOR->print(myCout);
824 
825  LogTrace("L1TGlobal") << myCout.str();
826  }
827 
828  // delete correlationCondWOR;
829 
830  } break;
831  case CondNull: {
832  // do nothing
833 
834  } break;
835  default: {
836  // do nothing
837 
838  } break;
839  }
840  }
841  }
842 
843  // -----------------------
844  // Loop over algorithm map
845  // -----------------------
846  // Empty vector for object maps - filled during loop
847  std::vector<GlobalObjectMap> objMapVec;
848  if (produceL1GtObjectMapRecord && (iBxInEvent == 0))
849  objMapVec.reserve(numberPhysTriggers);
850 
851  for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
852  AlgorithmEvaluation gtAlg(itAlgo->second);
853  gtAlg.evaluateAlgorithm((itAlgo->second).algoChipNumber(), m_conditionResultMaps);
854 
855  int algBitNumber = (itAlgo->second).algoBitNumber();
856  bool algResult = gtAlg.gtAlgoResult();
857 
858  LogDebug("L1TGlobal") << " ===> for iBxInEvent = " << iBxInEvent << ":\t algBitName = " << itAlgo->first
859  << ",\t algBitNumber = " << algBitNumber << ",\t algResult = " << algResult;
860 
861  if (algResult) {
862  // m_gtlAlgorithmOR.set(algBitNumber);
863  m_uGtAlgBlk.setAlgoDecisionInitial(algBitNumber, algResult);
864  m_algInitialOr = true;
865  }
866 
867  if (m_verbosity && m_isDebugEnabled) {
868  std::ostringstream myCout;
869  (itAlgo->second).print(myCout);
870  gtAlg.print(myCout);
871 
872  LogTrace("L1TGlobal") << myCout.str();
873  }
874 
875  // object maps only for BxInEvent = 0
876  if (produceL1GtObjectMapRecord && (iBxInEvent == 0)) {
877  std::vector<L1TObjectTypeInCond> otypes;
878  for (auto iop = gtAlg.operandTokenVector().begin(); iop != gtAlg.operandTokenVector().end(); ++iop) {
879  //cout << "INFO: operand name: " << iop->tokenName << "\n";
880  int myChip = -1;
881  int found = 0;
883  for (auto imap = conditionMap.begin(); imap != conditionMap.end(); imap++) {
884  myChip++;
885  auto match = imap->find(iop->tokenName);
886 
887  if (match != imap->end()) {
888  found = 1;
889  //cout << "DEBUG: found match for " << iop->tokenName << " at " << match->first << "\n";
890 
891  otype = match->second->objectType();
892 
893  for (auto itype = otype.begin(); itype != otype.end(); itype++) {
894  //cout << "type: " << *itype << "\n";
895  }
896  }
897  }
898  if (!found) {
899  edm::LogWarning("L1TGlobal") << "\n Failed to find match for operand token " << iop->tokenName << "\n";
900  } else {
901  otypes.push_back(otype);
902  }
903  }
904 
905  // set object map
906  GlobalObjectMap objMap;
907 
908  objMap.setAlgoName(itAlgo->first);
909  objMap.setAlgoBitNumber(algBitNumber);
910  objMap.setAlgoGtlResult(algResult);
913  // gtAlg is empty now...
914  objMap.swapObjectTypeVector(otypes);
915 
916  if (m_verbosity && m_isDebugEnabled) {
917  std::ostringstream myCout1;
918  objMap.print(myCout1);
919 
920  LogTrace("L1TGlobal") << myCout1.str();
921  }
922 
923  objMapVec.push_back(objMap);
924  }
925  }
926 
927  // object maps only for BxInEvent = 0
928  if (produceL1GtObjectMapRecord && (iBxInEvent == 0)) {
929  gtObjectMapRecord->swapGtObjectMap(objMapVec);
930  }
931 
932  // loop over condition maps (one map per condition chip)
933  // then loop over conditions in the map
934  // delete the conditions created with new, zero pointer, do not clear map, keep the vector as is...
935  for (std::vector<AlgorithmEvaluation::ConditionEvaluationMap>::iterator itCondOnChip = m_conditionResultMaps.begin();
936  itCondOnChip != m_conditionResultMaps.end();
937  itCondOnChip++) {
938  for (AlgorithmEvaluation::ItEvalMap itCond = itCondOnChip->begin(); itCond != itCondOnChip->end(); itCond++) {
939  delete itCond->second;
940  itCond->second = nullptr;
941  }
942  }
943 }
944 
945 // -------
946 // Run GTL
947 // -------
949  const int iBxInEvent,
950  const int totalBxInEvent,
951  const unsigned int numberPhysTriggers,
952  const std::vector<double>& prescaleFactorsAlgoTrig,
953  const std::vector<unsigned int>& triggerMaskAlgoTrig,
954  const std::vector<int>& triggerMaskVetoAlgoTrig,
955  const bool algorithmTriggersUnprescaled,
956  const bool algorithmTriggersUnmasked) {
957  if (m_verbosity) {
958  LogDebug("L1TGlobal") << "\n**** GlobalBoard apply Final Decision Logic ";
959  }
960 
961  // update and clear prescales at the beginning of the luminosity segment
962  if (m_prescaleCounterAlgoTrig.empty() or
963  (m_currentLumi != iEvent.luminosityBlock() and m_resetPSCountersEachLumiSec)) {
964  m_prescaleCounterAlgoTrig.clear();
965  m_prescaleCounterAlgoTrig.reserve(totalBxInEvent);
966  auto const& prescaleCountersAlgoTrig =
967  m_semiRandomInitialPSCounters ? prescaleCountersWithSemirandomInitialCounter(prescaleFactorsAlgoTrig, iEvent)
968  : prescaleCounters(prescaleFactorsAlgoTrig);
969  for (int iBxInEvent = 0; iBxInEvent < totalBxInEvent; ++iBxInEvent) {
970  m_prescaleCounterAlgoTrig.push_back(prescaleCountersAlgoTrig);
971  }
972 
973  m_currentLumi = iEvent.luminosityBlock();
974  }
975 
976  // Copy Algorithm bits to Prescaled word
977  // Prescaling and Masking done below if requested.
978  m_uGtAlgBlk.copyInitialToInterm();
979 
980  // -------------------------------------------
981  // Apply Prescales or skip if turned off
982  // -------------------------------------------
983  if (!algorithmTriggersUnprescaled) {
984  // iBxInEvent is ... -2 -1 0 1 2 ... while counters are 0 1 2 3 4 ...
985  int const inBxInEvent = totalBxInEvent / 2 + iBxInEvent;
986 
987  bool temp_algPrescaledOr = false;
988  bool alreadyReported = false;
989  for (unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
990  bool const bitValue = m_uGtAlgBlk.getAlgoDecisionInitial(iBit);
991  if (bitValue) {
992  // Make sure algo bit in range, warn otherwise
993  if (iBit < prescaleFactorsAlgoTrig.size()) {
994  if (prescaleFactorsAlgoTrig.at(iBit) != 1) {
995  bool const triggered = m_prescaleCounterAlgoTrig.at(inBxInEvent).at(iBit).accept();
996  if (triggered) {
997  temp_algPrescaledOr = true;
998  } else {
999  // change bit to false in prescaled word and final decision word
1000  m_uGtAlgBlk.setAlgoDecisionInterm(iBit, false);
1001  } //if Prescale counter reached zero
1002  } //if prescale factor is not 1 (ie. no prescale)
1003  else {
1004  temp_algPrescaledOr = true;
1005  }
1006  } // require bit in range
1007  else if (!alreadyReported) {
1008  alreadyReported = true;
1009  edm::LogWarning("L1TGlobal") << "\nWarning: algoBit >= prescaleFactorsAlgoTrig.size() in bx " << iBxInEvent;
1010  }
1011  } //if algo bit is set true
1012  } //loop over alg bits
1013 
1014  m_algPrescaledOr = temp_algPrescaledOr; //temp
1015 
1016  } else {
1017  // Since not Prescaling just take OR of Initial Work
1018  m_algPrescaledOr = m_algInitialOr;
1019 
1020  } //if we are going to apply prescales.
1021 
1022  // Copy Algorithm bits fron Prescaled word to Final Word
1023  // Masking done below if requested.
1024  m_uGtAlgBlk.copyIntermToFinal();
1025 
1026  if (!algorithmTriggersUnmasked) {
1027  bool temp_algFinalOr = false;
1028  bool alreadyReported = false;
1029  for (unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
1030  const bool bitValue = m_uGtAlgBlk.getAlgoDecisionInterm(iBit);
1031 
1032  if (bitValue) {
1033  //bool isMasked = ( triggerMaskAlgoTrig.at(iBit) == 0 );
1034  bool isMasked = false;
1035  if (iBit < triggerMaskAlgoTrig.size())
1036  isMasked = (triggerMaskAlgoTrig.at(iBit) == 0);
1037  else if (!alreadyReported) {
1038  alreadyReported = true;
1039  edm::LogWarning("L1TGlobal") << "\nWarning: algoBit >= triggerMaskAlgoTrig.size() in bx " << iBxInEvent;
1040  }
1041 
1042  bool const passMask = (bitValue && !isMasked);
1043 
1044  if (passMask)
1045  temp_algFinalOr = true;
1046  else
1047  m_uGtAlgBlk.setAlgoDecisionFinal(iBit, false);
1048 
1049  // Check if veto mask is true, if it is, set the event veto flag.
1050  if (triggerMaskVetoAlgoTrig.at(iBit) == 1)
1051  m_algFinalOrVeto = true;
1052  }
1053  }
1054 
1055  m_algIntermOr = temp_algFinalOr;
1056 
1057  } else {
1058  m_algIntermOr = m_algPrescaledOr;
1059 
1060  }
1061 
1062  // --------------------------
1063  // Set FinalOR for this board
1064  // --------------------------
1065  m_algFinalOr = (m_algIntermOr & !m_algFinalOrVeto);
1066 }
1067 
1068 // Fill DAQ Record
1070  std::unique_ptr<GlobalAlgBlkBxCollection>& uGtAlgRecord,
1071  int prescaleSet,
1072  int menuUUID,
1073  int firmwareUUID) {
1074  if (m_verbosity) {
1075  LogDebug("L1TGlobal") << "\n**** GlobalBoard fill DAQ Records for bx= " << iBxInEvent;
1076  }
1077 
1078  // Set header information
1079  m_uGtAlgBlk.setbxInEventNr((iBxInEvent & 0xF));
1080  m_uGtAlgBlk.setPreScColumn(prescaleSet);
1081  m_uGtAlgBlk.setL1MenuUUID(menuUUID);
1082  m_uGtAlgBlk.setL1FirmwareUUID(firmwareUUID);
1083 
1084  m_uGtAlgBlk.setFinalORVeto(m_algFinalOrVeto);
1085  m_uGtAlgBlk.setFinalORPreVeto(m_algIntermOr);
1086  m_uGtAlgBlk.setFinalOR(m_algFinalOr);
1087 
1088  uGtAlgRecord->push_back(iBxInEvent, m_uGtAlgBlk);
1089 }
1090 
1091 // clear GTL
1093  resetMu();
1094  resetMuonShower();
1095  resetCalo();
1096  resetExternal();
1097 
1098  m_uGtAlgBlk.reset();
1099 
1100  m_gtlDecisionWord.reset();
1101  m_gtlAlgorithmOR.reset();
1102 }
1103 
1104 // clear muon
1106  m_candL1Mu->clear();
1107  m_candL1Mu->setBXRange(m_bxFirst_, m_bxLast_);
1108 }
1109 
1110 // clear muon shower
1112  m_candL1MuShower->clear();
1113  m_candL1MuShower->setBXRange(m_bxFirst_, m_bxLast_);
1114 }
1115 
1116 // clear calo
1118  m_candL1EG->clear();
1119  m_candL1Tau->clear();
1120  m_candL1Jet->clear();
1121  m_candL1EtSum->clear();
1122 
1123  m_candL1EG->setBXRange(m_bxFirst_, m_bxLast_);
1124  m_candL1Tau->setBXRange(m_bxFirst_, m_bxLast_);
1125  m_candL1Jet->setBXRange(m_bxFirst_, m_bxLast_);
1126  m_candL1EtSum->setBXRange(m_bxFirst_, m_bxLast_);
1127 }
1128 
1130  m_candL1External->clear();
1131  m_candL1External->setBXRange(m_bxFirst_, m_bxLast_);
1132 }
1133 
1134 // print Global Muon Trigger data received
1135 void l1t::GlobalBoard::printGmtData(const int iBxInEvent) const {
1136  LogTrace("L1TGlobal") << "\nl1t::L1GlobalTrigger: uGMT data received for BxInEvent = " << iBxInEvent;
1137 
1138  int nrL1Mu = m_candL1Mu->size(iBxInEvent);
1139  LogTrace("L1TGlobal") << "Number of GMT muons = " << nrL1Mu << "\n";
1140 }
1141 
1142 // initialize prescale counters to zero
1143 std::vector<l1t::GlobalBoard::PrescaleCounter> l1t::GlobalBoard::prescaleCounters(
1144  std::vector<double> const& prescaleFactorsAlgoTrig) {
1145  std::vector<PrescaleCounter> out;
1146  out.reserve(prescaleFactorsAlgoTrig.size());
1147  for (size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1148  out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1149  }
1150  return out;
1151 }
1152 
1153 // initialises prescale counters with a semi-random value in the range [0, prescale*10^precision - 1]
1154 std::vector<l1t::GlobalBoard::PrescaleCounter> l1t::GlobalBoard::prescaleCountersWithSemirandomInitialCounter(
1155  std::vector<double> const& prescaleFactorsAlgoTrig, edm::Event const& iEvent) {
1156  // pick a (semi)random number seeding based on run, lumi, event numbers,
1157  // this leads to different (semi)random numbers for different streams,
1158  // reminder: different streams have different initial event number
1159  std::srand(iEvent.id().run());
1160  std::srand(std::rand() + iEvent.id().luminosityBlock());
1161  std::srand(std::rand() + iEvent.id().event());
1162  int const semirandom = std::rand();
1163 
1164  std::vector<PrescaleCounter> out;
1165  out.reserve(prescaleFactorsAlgoTrig.size());
1166 
1167  for (size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1168  out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1169  // initialise trigger_counter to a (semi)random integer
1170  // between 0 and prescale_count - 1 (both inclusive)
1171  // (this only changes the behaviour of triggers with PS > 1)
1172  auto& prescaleCounter = out.back();
1173  if (prescaleCounter.prescale_count > 0) {
1174  prescaleCounter.trigger_counter = semirandom % prescaleCounter.prescale_count;
1175  }
1176  }
1177 
1178  return out;
1179 }
1180 
1181 // return decision of PrescalCounter, and update its internal counter
1183  trigger_counter += m_singlestep;
1184 
1185  if (prescale_count == 0 or trigger_counter < prescale_count)
1186  return false;
1187 
1188  trigger_counter -= prescale_count;
1189 
1190  return true;
1191 }
bool isDebugEnabled()
void setAlgoBitNumber(int algoBitNumberValue)
const int cond0Index() const
get / set the index of the two sub-conditions in the cor* vector from menu
const l1t::GlobalScales & gtScales() const
get the scales
Definition: TriggerMenu.h:191
void evaluateConditionStoreResult(const int bxEval)
call evaluateCondition and save last result
std::vector< l1t::GlobalObject > L1TObjectTypeInCond
void swapOperandTokenVector(std::vector< GlobalLogicParser::OperandToken > &operandTokenVectorValue)
const std::vector< std::vector< CaloTemplate > > & corCaloTemplate() const
Definition: TriggerMenu.h:168
void print(std::ostream &myCout) const override
print condition
Definition: MuCondition.cc:526
void print(std::ostream &myCout) const override
print condition
void print(std::ostream &myCout) const override
print condition
const l1t::AlgorithmMap & gtAlgorithmMap() const
get / set the algorithm map (by name)
Definition: TriggerMenu.h:181
static std::vector< PrescaleCounter > prescaleCountersWithSemirandomInitialCounter(std::vector< double > const &prescaleFactorsAlgoTrig, edm::Event const &iEvent)
void setVerbosity(const int verbosity)
const int cond1Index() const
virtual std::string getScalesName() const
Definition: GlobalScales.cc:27
void fillAlgRecord(int iBxInEvent, std::unique_ptr< GlobalAlgBlkBxCollection > &uGtAlgRecord, int prescaleSet, int menuUUID, int firmwareUUID)
Fill the Daq Records.
const std::vector< std::vector< MuonTemplate > > & corMuonTemplate() const
Definition: TriggerMenu.h:163
unsigned long long m_l1MuTriggerScalesCacheID
Definition: GlobalBoard.h:217
delete x;
Definition: CaloConfig.h:22
void setBxLast(int bx)
Definition: GlobalBoard.cc:105
const l1t::GtConditionCategory cond1Category() const
void runFDL(const edm::Event &iEvent, const int iBxInEvent, const int totalBxInEvent, const unsigned int numberPhysTriggers, const std::vector< double > &prescaleFactorsAlgoTrig, const std::vector< unsigned int > &triggerMaskAlgoTrig, const std::vector< int > &triggerMaskVetoAlgoTrig, const bool algorithmTriggersUnprescaled, const bool algorithmTriggersUnmasked)
run the uGT FDL (Apply Prescales and Veto)
Definition: GlobalBoard.cc:948
const int cond0Index() const
get / set the index of the two sub-conditions in the cor* vector from menu
void print(std::ostream &myCout) const
print the full object map
const l1t::GtConditionCategory cond1Category() const
void swapObjectTypeVector(std::vector< L1TObjectTypeInCond > &objectTypeVectorValue)
void swapCombinationVector(std::vector< CombinationsInCond > &combinationVectorValue)
ConditionEvaluationMap::iterator ItEvalMap
void printGmtData(const int iBxInEvent) const
print received Muon dataWord
void print(std::ostream &myCout) const
unsigned long long m_l1GtMenuCacheID
Definition: GlobalBoard.h:210
void print(std::ostream &myCout) const override
print condition
#define LogTrace(id)
static std::vector< PrescaleCounter > prescaleCounters(std::vector< double > const &prescaleFactorsAlgoTrig)
const l1t::GtConditionCategory cond2Category() const
std::bitset< GlobalAlgBlk::maxPhysicsTriggers > m_gtlDecisionWord
Definition: GlobalBoard.h:240
ConditionMap::const_iterator CItCond
iterators through map containing the conditions
GtConditionCategory
condition categories
const l1t::GtConditionCategory cond0Category() const
get / set the category of the thre sub-conditions
int iEvent
Definition: GenABIO.cc:224
const l1t::GtConditionCategory cond0Category() const
get / set the category of the two sub-conditions
unsigned int m_boardEventCount
Definition: GlobalBoard.h:262
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
Definition: Muon.py:1
void reset()
reset the content of a GlobalAlgBlk
void print(std::ostream &myCout) const override
print condition
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
void runGTL(const edm::Event &iEvent, const edm::EventSetup &evSetup, const TriggerMenu *m_l1GtMenu, const bool produceL1GtObjectMapRecord, const int iBxInEvent, std::unique_ptr< GlobalObjectMapRecord > &gtObjectMapRecord, const unsigned int numberPhysTriggers, const int nrL1Mu, const int nrL1MuShower, const int nrL1EG, const int nrL1Tau, const int nrL1Jet)
run the uGT GTL (Conditions and Algorithms)
Definition: GlobalBoard.cc:470
void reset()
clear uGT
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
unsigned long long m_l1CaloGeometryCacheID
Definition: GlobalBoard.h:214
const l1t::GtConditionCategory cond1Category() const
void setAlgoGtlResult(bool algoGtlResultValue)
std::vector< CombinationsInCond > & gtAlgoCombinationVector()
std::vector< std::vector< PrescaleCounter > > m_prescaleCounterAlgoTrig
Definition: GlobalBoard.h:298
void setScales(const GlobalScales *)
void evaluateAlgorithm(const int chipNumber, const std::vector< ConditionEvaluationMap > &)
evaluate an algorithm
void receiveExternalData(const edm::Event &, const edm::EDGetTokenT< BXVector< GlobalExtBlk >> &, const bool receiveExt)
Definition: GlobalBoard.cc:432
bool gtAlgoResult() const
get / set the result of the algorithm
GlobalAlgBlk m_uGtAlgBlk
Definition: GlobalBoard.h:242
void setBxFirst(int bx)
Definition: GlobalBoard.cc:103
void setAlgoName(const std::string &algoNameValue)
const std::vector< l1t::ConditionMap > & gtConditionMap() const
get / set / build the condition maps
Definition: TriggerMenu.h:79
bool isValid() const
Definition: HandleBase.h:70
const std::vector< std::vector< EnergySumTemplate > > & corEnergySumTemplate() const
Definition: TriggerMenu.h:174
HLT enums.
void print(std::ostream &myCout) const override
print condition
virtual ~GlobalBoard()
Definition: GlobalBoard.cc:91
std::vector< GlobalLogicParser::OperandToken > & operandTokenVector()
void setScales(const GlobalScales *)
const int cond0Index() const
get / set the index of the three subconditions in the cor* vector from menu
void init(const int numberPhysTriggers, const int nrL1Mu, const int nrL1MuShower, const int nrL1EG, const int nrL1Tau, const int nrL1Jet, int bxFirst, int bxLast)
initialize the class (mainly reserve)
Definition: GlobalBoard.cc:107
void receiveCaloObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::EGamma >> &, const edm::EDGetTokenT< BXVector< l1t::Tau >> &, const edm::EDGetTokenT< BXVector< l1t::Jet >> &, const edm::EDGetTokenT< BXVector< l1t::EtSum >> &, const bool receiveEG, const int nrL1EG, const bool receiveTau, const int nrL1Tau, const bool receiveJet, const int nrL1Jet, const bool receiveEtSums)
receive data from Global Muon Trigger
Definition: GlobalBoard.cc:132
void print(std::ostream &myCout) const override
print condition
std::unordered_map< std::string, ConditionEvaluation * > ConditionEvaluationMap
copy constructor
const l1t::GtConditionCategory cond0Category() const
get / set the category of the three subconditions
Log< level::Warning, false > LogWarning
Definition: memstream.h:15
std::bitset< GlobalAlgBlk::maxPhysicsTriggers > m_gtlAlgorithmOR
Definition: GlobalBoard.h:239
std::map< std::string, GlobalAlgorithm > AlgorithmMap
map containing the algorithms
const l1t::GtConditionCategory cond2Category() const
void receiveMuonShowerObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::MuonShower >> &, const bool receiveMuShower, const int nrL1MuShower)
Definition: GlobalBoard.cc:368
void receiveMuonObjectData(const edm::Event &, const edm::EDGetTokenT< BXVector< l1t::Muon >> &, const bool receiveMu, const int nrL1Mu)
Definition: GlobalBoard.cc:320
void print(std::ostream &myCout) const override
print condition
#define LogDebug(id)