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 found = 0;
882  for (auto imap = conditionMap.begin(); imap != conditionMap.end(); imap++) {
883  auto match = imap->find(iop->tokenName);
884 
885  if (match != imap->end()) {
886  found = 1;
887  //cout << "DEBUG: found match for " << iop->tokenName << " at " << match->first << "\n";
888 
889  otype = match->second->objectType();
890 
891  for (auto itype = otype.begin(); itype != otype.end(); itype++) {
892  //cout << "type: " << *itype << "\n";
893  }
894  }
895  }
896  if (!found) {
897  edm::LogWarning("L1TGlobal") << "\n Failed to find match for operand token " << iop->tokenName << "\n";
898  } else {
899  otypes.push_back(otype);
900  }
901  }
902 
903  // set object map
904  GlobalObjectMap objMap;
905 
906  objMap.setAlgoName(itAlgo->first);
907  objMap.setAlgoBitNumber(algBitNumber);
908  objMap.setAlgoGtlResult(algResult);
911  // gtAlg is empty now...
912  objMap.swapObjectTypeVector(otypes);
913 
914  if (m_verbosity && m_isDebugEnabled) {
915  std::ostringstream myCout1;
916  objMap.print(myCout1);
917 
918  LogTrace("L1TGlobal") << myCout1.str();
919  }
920 
921  objMapVec.push_back(objMap);
922  }
923  }
924 
925  // object maps only for BxInEvent = 0
926  if (produceL1GtObjectMapRecord && (iBxInEvent == 0)) {
927  gtObjectMapRecord->swapGtObjectMap(objMapVec);
928  }
929 
930  // loop over condition maps (one map per condition chip)
931  // then loop over conditions in the map
932  // delete the conditions created with new, zero pointer, do not clear map, keep the vector as is...
933  for (std::vector<AlgorithmEvaluation::ConditionEvaluationMap>::iterator itCondOnChip = m_conditionResultMaps.begin();
934  itCondOnChip != m_conditionResultMaps.end();
935  itCondOnChip++) {
936  for (AlgorithmEvaluation::ItEvalMap itCond = itCondOnChip->begin(); itCond != itCondOnChip->end(); itCond++) {
937  delete itCond->second;
938  itCond->second = nullptr;
939  }
940  }
941 }
942 
943 // -------
944 // Run GTL
945 // -------
947  const int iBxInEvent,
948  const int totalBxInEvent,
949  const unsigned int numberPhysTriggers,
950  const std::vector<double>& prescaleFactorsAlgoTrig,
951  const std::vector<unsigned int>& triggerMaskAlgoTrig,
952  const std::vector<int>& triggerMaskVetoAlgoTrig,
953  const bool algorithmTriggersUnprescaled,
954  const bool algorithmTriggersUnmasked) {
955  if (m_verbosity) {
956  LogDebug("L1TGlobal") << "\n**** GlobalBoard apply Final Decision Logic ";
957  }
958 
959  // update and clear prescales at the beginning of the luminosity segment
960  if (m_prescaleCounterAlgoTrig.empty() or
961  (m_currentLumi != iEvent.luminosityBlock() and m_resetPSCountersEachLumiSec)) {
962  m_prescaleCounterAlgoTrig.clear();
963  m_prescaleCounterAlgoTrig.reserve(totalBxInEvent);
964  auto const& prescaleCountersAlgoTrig =
965  m_semiRandomInitialPSCounters ? prescaleCountersWithSemirandomInitialCounter(prescaleFactorsAlgoTrig, iEvent)
966  : prescaleCounters(prescaleFactorsAlgoTrig);
967  for (int iBxInEvent = 0; iBxInEvent < totalBxInEvent; ++iBxInEvent) {
968  m_prescaleCounterAlgoTrig.push_back(prescaleCountersAlgoTrig);
969  }
970 
971  m_currentLumi = iEvent.luminosityBlock();
972  }
973 
974  // Copy Algorithm bits to Prescaled word
975  // Prescaling and Masking done below if requested.
976  m_uGtAlgBlk.copyInitialToInterm();
977 
978  // -------------------------------------------
979  // Apply Prescales or skip if turned off
980  // -------------------------------------------
981  if (!algorithmTriggersUnprescaled) {
982  // iBxInEvent is ... -2 -1 0 1 2 ... while counters are 0 1 2 3 4 ...
983  int const inBxInEvent = totalBxInEvent / 2 + iBxInEvent;
984 
985  bool temp_algPrescaledOr = false;
986  bool alreadyReported = false;
987  for (unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
988  bool const bitValue = m_uGtAlgBlk.getAlgoDecisionInitial(iBit);
989  if (bitValue) {
990  // Make sure algo bit in range, warn otherwise
991  if (iBit < prescaleFactorsAlgoTrig.size()) {
992  if (prescaleFactorsAlgoTrig.at(iBit) != 1) {
993  bool const triggered = m_prescaleCounterAlgoTrig.at(inBxInEvent).at(iBit).accept();
994  if (triggered) {
995  temp_algPrescaledOr = true;
996  } else {
997  // change bit to false in prescaled word and final decision word
998  m_uGtAlgBlk.setAlgoDecisionInterm(iBit, false);
999  } //if Prescale counter reached zero
1000  } //if prescale factor is not 1 (ie. no prescale)
1001  else {
1002  temp_algPrescaledOr = true;
1003  }
1004  } // require bit in range
1005  else if (!alreadyReported) {
1006  alreadyReported = true;
1007  edm::LogWarning("L1TGlobal") << "\nWarning: algoBit >= prescaleFactorsAlgoTrig.size() in bx " << iBxInEvent;
1008  }
1009  } //if algo bit is set true
1010  } //loop over alg bits
1011 
1012  m_algPrescaledOr = temp_algPrescaledOr; //temp
1013 
1014  } else {
1015  // Since not Prescaling just take OR of Initial Work
1016  m_algPrescaledOr = m_algInitialOr;
1017 
1018  } //if we are going to apply prescales.
1019 
1020  // Copy Algorithm bits fron Prescaled word to Final Word
1021  // Masking done below if requested.
1022  m_uGtAlgBlk.copyIntermToFinal();
1023 
1024  if (!algorithmTriggersUnmasked) {
1025  bool temp_algFinalOr = false;
1026  bool alreadyReported = false;
1027  for (unsigned int iBit = 0; iBit < numberPhysTriggers; ++iBit) {
1028  const bool bitValue = m_uGtAlgBlk.getAlgoDecisionInterm(iBit);
1029 
1030  if (bitValue) {
1031  //bool isMasked = ( triggerMaskAlgoTrig.at(iBit) == 0 );
1032  bool isMasked = false;
1033  if (iBit < triggerMaskAlgoTrig.size())
1034  isMasked = (triggerMaskAlgoTrig.at(iBit) == 0);
1035  else if (!alreadyReported) {
1036  alreadyReported = true;
1037  edm::LogWarning("L1TGlobal") << "\nWarning: algoBit >= triggerMaskAlgoTrig.size() in bx " << iBxInEvent;
1038  }
1039 
1040  bool const passMask = (bitValue && !isMasked);
1041 
1042  if (passMask)
1043  temp_algFinalOr = true;
1044  else
1045  m_uGtAlgBlk.setAlgoDecisionFinal(iBit, false);
1046 
1047  // Check if veto mask is true, if it is, set the event veto flag.
1048  if (triggerMaskVetoAlgoTrig.at(iBit) == 1)
1049  m_algFinalOrVeto = true;
1050  }
1051  }
1052 
1053  m_algIntermOr = temp_algFinalOr;
1054 
1055  } else {
1056  m_algIntermOr = m_algPrescaledOr;
1057 
1058  }
1059 
1060  // --------------------------
1061  // Set FinalOR for this board
1062  // --------------------------
1063  m_algFinalOr = (m_algIntermOr & !m_algFinalOrVeto);
1064 }
1065 
1066 // Fill DAQ Record
1068  std::unique_ptr<GlobalAlgBlkBxCollection>& uGtAlgRecord,
1069  int prescaleSet,
1070  int menuUUID,
1071  int firmwareUUID) {
1072  if (m_verbosity) {
1073  LogDebug("L1TGlobal") << "\n**** GlobalBoard fill DAQ Records for bx= " << iBxInEvent;
1074  }
1075 
1076  // Set header information
1077  m_uGtAlgBlk.setbxInEventNr((iBxInEvent & 0xF));
1078  m_uGtAlgBlk.setPreScColumn(prescaleSet);
1079  m_uGtAlgBlk.setL1MenuUUID(menuUUID);
1080  m_uGtAlgBlk.setL1FirmwareUUID(firmwareUUID);
1081 
1082  m_uGtAlgBlk.setFinalORVeto(m_algFinalOrVeto);
1083  m_uGtAlgBlk.setFinalORPreVeto(m_algIntermOr);
1084  m_uGtAlgBlk.setFinalOR(m_algFinalOr);
1085 
1086  uGtAlgRecord->push_back(iBxInEvent, m_uGtAlgBlk);
1087 }
1088 
1089 // clear GTL
1091  resetMu();
1092  resetMuonShower();
1093  resetCalo();
1094  resetExternal();
1095 
1096  m_uGtAlgBlk.reset();
1097 
1098  m_gtlDecisionWord.reset();
1099  m_gtlAlgorithmOR.reset();
1100 }
1101 
1102 // clear muon
1104  m_candL1Mu->clear();
1105  m_candL1Mu->setBXRange(m_bxFirst_, m_bxLast_);
1106 }
1107 
1108 // clear muon shower
1110  m_candL1MuShower->clear();
1111  m_candL1MuShower->setBXRange(m_bxFirst_, m_bxLast_);
1112 }
1113 
1114 // clear calo
1116  m_candL1EG->clear();
1117  m_candL1Tau->clear();
1118  m_candL1Jet->clear();
1119  m_candL1EtSum->clear();
1120 
1121  m_candL1EG->setBXRange(m_bxFirst_, m_bxLast_);
1122  m_candL1Tau->setBXRange(m_bxFirst_, m_bxLast_);
1123  m_candL1Jet->setBXRange(m_bxFirst_, m_bxLast_);
1124  m_candL1EtSum->setBXRange(m_bxFirst_, m_bxLast_);
1125 }
1126 
1128  m_candL1External->clear();
1129  m_candL1External->setBXRange(m_bxFirst_, m_bxLast_);
1130 }
1131 
1132 // print Global Muon Trigger data received
1133 void l1t::GlobalBoard::printGmtData(const int iBxInEvent) const {
1134  LogTrace("L1TGlobal") << "\nl1t::L1GlobalTrigger: uGMT data received for BxInEvent = " << iBxInEvent;
1135 
1136  int nrL1Mu = m_candL1Mu->size(iBxInEvent);
1137  LogTrace("L1TGlobal") << "Number of GMT muons = " << nrL1Mu << "\n";
1138 }
1139 
1140 // initialize prescale counters to zero
1141 std::vector<l1t::GlobalBoard::PrescaleCounter> l1t::GlobalBoard::prescaleCounters(
1142  std::vector<double> const& prescaleFactorsAlgoTrig) {
1143  std::vector<PrescaleCounter> out;
1144  out.reserve(prescaleFactorsAlgoTrig.size());
1145  for (size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1146  out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1147  }
1148  return out;
1149 }
1150 
1151 // initialises prescale counters with a semi-random value in the range [0, prescale*10^precision - 1]
1152 std::vector<l1t::GlobalBoard::PrescaleCounter> l1t::GlobalBoard::prescaleCountersWithSemirandomInitialCounter(
1153  std::vector<double> const& prescaleFactorsAlgoTrig, edm::Event const& iEvent) {
1154  // pick a (semi)random number seeding based on run, lumi, event numbers,
1155  // this leads to different (semi)random numbers for different streams,
1156  // reminder: different streams have different initial event number
1157  std::srand(iEvent.id().run());
1158  std::srand(std::rand() + iEvent.id().luminosityBlock());
1159  std::srand(std::rand() + iEvent.id().event());
1160  int const semirandom = std::rand();
1161 
1162  std::vector<PrescaleCounter> out;
1163  out.reserve(prescaleFactorsAlgoTrig.size());
1164 
1165  for (size_t iAlgo = 0; iAlgo < prescaleFactorsAlgoTrig.size(); ++iAlgo) {
1166  out.emplace_back(prescaleFactorsAlgoTrig[iAlgo]);
1167  // initialise trigger_counter to a (semi)random integer
1168  // between 0 and prescale_count - 1 (both inclusive)
1169  // (this only changes the behaviour of triggers with PS > 1)
1170  auto& prescaleCounter = out.back();
1171  if (prescaleCounter.prescale_count > 0) {
1172  prescaleCounter.trigger_counter = semirandom % prescaleCounter.prescale_count;
1173  }
1174  }
1175 
1176  return out;
1177 }
1178 
1179 // return decision of PrescalCounter, and update its internal counter
1181  trigger_counter += m_singlestep;
1182 
1183  if (prescale_count == 0 or trigger_counter < prescale_count)
1184  return false;
1185 
1186  trigger_counter -= prescale_count;
1187 
1188  return true;
1189 }
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:516
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:946
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)