CMS 3D CMS Logo

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