54 #include "tmEventSetup/tmEventSetup.hh" 55 #include "tmEventSetup/esTypes.hh" 63 #include "tmGrammar/Algorithm.hh" 69 : m_triggerMenuInterface(
"NULL"),
70 m_triggerMenuName(
"NULL"),
71 m_triggerMenuImplementation(0x0),
85 m_numberConditionChips = numberConditionChipsValue;
90 m_pinsOnConditionChip = pinsOnConditionChipValue;
96 m_orderConditionChip = orderConditionChipValue;
101 m_numberPhysTriggers = numberPhysTriggersValue;
109 m_triggerMenuInterface = menuInterface;
118 m_triggerMenuImplementation = menuImplementation;
126 m_vecMuonTemplate = vecMuonTempl;
130 const std::vector<std::vector<MuonShowerTemplate> >& vecMuonShowerTempl) {
131 m_vecMuonShowerTemplate = vecMuonShowerTempl;
135 m_vecCaloTemplate = vecCaloTempl;
139 const std::vector<std::vector<EnergySumTemplate> >& vecEnergySumTempl) {
140 m_vecEnergySumTemplate = vecEnergySumTempl;
144 const std::vector<std::vector<EnergySumZdcTemplate> >& vecEnergySumZdcTempl) {
145 m_vecEnergySumZdcTemplate = vecEnergySumZdcTempl;
149 m_vecAXOL1TLTemplate = vecAXOL1TLTempl;
153 m_vecCICADATemplate = vecCICADATempl;
157 const std::vector<std::vector<ExternalTemplate> >& vecExternalTempl) {
158 m_vecExternalTemplate = vecExternalTempl;
162 const std::vector<std::vector<CorrelationTemplate> >& vecCorrelationTempl) {
163 m_vecCorrelationTemplate = vecCorrelationTempl;
167 const std::vector<std::vector<CorrelationThreeBodyTemplate> >& vecCorrelationThreeBodyTempl) {
168 m_vecCorrelationThreeBodyTemplate = vecCorrelationThreeBodyTempl;
172 const std::vector<std::vector<CorrelationWithOverlapRemovalTemplate> >& vecCorrelationWithOverlapRemovalTempl) {
173 m_vecCorrelationWithOverlapRemovalTemplate = vecCorrelationWithOverlapRemovalTempl;
179 m_corMuonTemplate = corMuonTempl;
183 m_corCaloTemplate = corCaloTempl;
187 const std::vector<std::vector<EnergySumTemplate> >& corEnergySumTempl) {
188 m_corEnergySumTemplate = corEnergySumTempl;
199 const std::map<std::string, L1TUtmCondition>& condMap = utmMenu->
getConditionMap();
201 std::map<std::string, unsigned int> extBitMap;
204 for (
const auto& cit : condMap) {
206 if (condition.
getType() == esConditionType::Externals) {
209 for (
const auto&
object :
objects) {
210 if (
object.getType() == esObjectType::EXT) {
211 unsigned int channelID =
object.getExternalChannelId();
214 if (extBitMap.count(
name) == 0)
228 m_conditionMap.resize(m_numberConditionChips);
230 m_vecMuonTemplate.resize(m_numberConditionChips);
231 m_vecMuonShowerTemplate.resize(m_numberConditionChips);
232 m_vecCaloTemplate.resize(m_numberConditionChips);
233 m_vecEnergySumTemplate.resize(m_numberConditionChips);
234 m_vecEnergySumZdcTemplate.resize(m_numberConditionChips);
235 m_vecAXOL1TLTemplate.resize(m_numberConditionChips);
236 m_vecCICADATemplate.resize(m_numberConditionChips);
237 m_vecExternalTemplate.resize(m_numberConditionChips);
239 m_vecCorrelationTemplate.resize(m_numberConditionChips);
240 m_vecCorrelationThreeBodyTemplate.resize(m_numberConditionChips);
241 m_vecCorrelationWithOverlapRemovalTemplate.resize(m_numberConditionChips);
242 m_corMuonTemplate.resize(m_numberConditionChips);
243 m_corCaloTemplate.resize(m_numberConditionChips);
244 m_corEnergySumTemplate.resize(m_numberConditionChips);
250 m_triggerMenuDescription = utmMenu->
getComment();
252 m_triggerMenuImplementation = (getMmHashN(utmMenu->
getFirmwareUuid()) & 0xFFFFFFFF);
253 m_triggerMenuName = utmMenu->
getName();
254 m_triggerMenuInterface = utmMenu->
getVersion();
255 m_triggerMenuUUID = (getMmHashN(utmMenu->
getName()) & 0xFFFFFFFF);
257 const std::map<std::string, L1TUtmAlgorithm>& algoMap = utmMenu->
getAlgorithmMap();
258 const std::map<std::string, L1TUtmCondition>& condMap = utmMenu->
getConditionMap();
260 const std::map<std::string, tmeventsetup::esScale> scaleMap(std::begin(utmMenu->
getScaleMap()),
265 parseScales(scaleMap);
268 for (
const auto& cit : algoMap) {
276 parseAlgorithm(
algo, chipNr);
279 const std::vector<std::string>& rpn_vec =
algo.getRpnVector();
280 for (
size_t ii = 0;
ii < rpn_vec.size();
ii++) {
288 if ((m_conditionMap[chipNr]).
count(condition.
getName()) == 0) {
290 if (condition.
getType() == esConditionType::SingleEgamma ||
291 condition.
getType() == esConditionType::DoubleEgamma ||
292 condition.
getType() == esConditionType::TripleEgamma ||
293 condition.
getType() == esConditionType::QuadEgamma || condition.
getType() == esConditionType::SingleTau ||
294 condition.
getType() == esConditionType::DoubleTau || condition.
getType() == esConditionType::TripleTau ||
295 condition.
getType() == esConditionType::QuadTau || condition.
getType() == esConditionType::SingleJet ||
296 condition.
getType() == esConditionType::DoubleJet || condition.
getType() == esConditionType::TripleJet ||
297 condition.
getType() == esConditionType::QuadJet) {
298 parseCalo(condition, chipNr,
false);
301 }
else if (condition.
getType() == esConditionType::TotalEt ||
302 condition.
getType() == esConditionType::TotalEtEM ||
303 condition.
getType() == esConditionType::TotalHt ||
304 condition.
getType() == esConditionType::MissingEt ||
305 condition.
getType() == esConditionType::MissingHt ||
306 condition.
getType() == esConditionType::MissingEtHF ||
307 condition.
getType() == esConditionType::MissingHtHF ||
308 condition.
getType() == esConditionType::TowerCount ||
309 condition.
getType() == esConditionType::MinBiasHFP0 ||
310 condition.
getType() == esConditionType::MinBiasHFM0 ||
311 condition.
getType() == esConditionType::MinBiasHFP1 ||
312 condition.
getType() == esConditionType::MinBiasHFM1 ||
313 condition.
getType() == esConditionType::AsymmetryEt ||
314 condition.
getType() == esConditionType::AsymmetryHt ||
315 condition.
getType() == esConditionType::AsymmetryEtHF ||
316 condition.
getType() == esConditionType::AsymmetryHtHF ||
317 condition.
getType() == esConditionType::Centrality0 ||
318 condition.
getType() == esConditionType::Centrality1 ||
319 condition.
getType() == esConditionType::Centrality2 ||
320 condition.
getType() == esConditionType::Centrality3 ||
321 condition.
getType() == esConditionType::Centrality4 ||
322 condition.
getType() == esConditionType::Centrality5 ||
323 condition.
getType() == esConditionType::Centrality6 ||
324 condition.
getType() == esConditionType::Centrality7) {
325 parseEnergySum(condition, chipNr,
false);
328 }
else if (condition.
getType() == esConditionType::ZDCPlus ||
329 condition.
getType() == esConditionType::ZDCMinus) {
330 parseEnergySumZdc(condition, chipNr,
false);
333 }
else if (condition.
getType() == esConditionType::Axol1tlTrigger ||
334 condition.
getType() == esConditionType::AnomalyDetectionTrigger) {
335 parseAXOL1TL(condition, chipNr);
338 }
else if (condition.
getType() == esConditionType::CicadaTrigger) {
339 parseCICADA(condition, chipNr);
342 condition.
getType() == esConditionType::DoubleMuon ||
343 condition.
getType() == esConditionType::TripleMuon ||
344 condition.
getType() == esConditionType::QuadMuon) {
345 parseMuon(condition, chipNr,
false);
347 }
else if (condition.
getType() == esConditionType::MuonShower0 ||
348 condition.
getType() == esConditionType::MuonShower1 ||
349 condition.
getType() == esConditionType::MuonShower2 ||
350 condition.
getType() == esConditionType::MuonShowerOutOfTime0 ||
351 condition.
getType() == esConditionType::MuonShowerOutOfTime1) {
352 parseMuonShower(condition, chipNr,
false);
355 }
else if (condition.
getType() == esConditionType::MuonMuonCorrelation ||
356 condition.
getType() == esConditionType::MuonEsumCorrelation ||
357 condition.
getType() == esConditionType::CaloMuonCorrelation ||
358 condition.
getType() == esConditionType::CaloCaloCorrelation ||
359 condition.
getType() == esConditionType::CaloEsumCorrelation ||
360 condition.
getType() == esConditionType::InvariantMass ||
361 condition.
getType() == esConditionType::InvariantMassDeltaR ||
362 condition.
getType() == esConditionType::TransverseMass ||
363 condition.
getType() == esConditionType::InvariantMassUpt) {
364 parseCorrelation(condition, chipNr);
367 }
else if (condition.
getType() == esConditionType::InvariantMass3) {
368 parseCorrelationThreeBody(condition, chipNr);
371 }
else if (condition.
getType() == esConditionType::Externals) {
372 parseExternal(condition, chipNr);
375 }
else if (condition.
getType() == esConditionType::CaloCaloCorrelationOvRm ||
376 condition.
getType() == esConditionType::InvariantMassOvRm ||
377 condition.
getType() == esConditionType::TransverseMassOvRm ||
378 condition.
getType() == esConditionType::DoubleJetOvRm ||
379 condition.
getType() == esConditionType::DoubleTauOvRm) {
380 parseCorrelationWithOverlapRemoval(condition, chipNr);
382 }
else if (condition.
getType() == esConditionType::SingleEgammaOvRm ||
383 condition.
getType() == esConditionType::DoubleEgammaOvRm ||
384 condition.
getType() == esConditionType::TripleEgammaOvRm ||
385 condition.
getType() == esConditionType::QuadEgammaOvRm ||
386 condition.
getType() == esConditionType::SingleTauOvRm ||
387 condition.
getType() == esConditionType::TripleTauOvRm ||
388 condition.
getType() == esConditionType::QuadTauOvRm ||
389 condition.
getType() == esConditionType::SingleJetOvRm ||
390 condition.
getType() == esConditionType::TripleJetOvRm ||
391 condition.
getType() == esConditionType::QuadJetOvRm) {
393 <<
"\n SingleEgammaOvRm" 394 <<
"\n DoubleEgammaOvRm" 395 <<
"\n TripleEgammaOvRm" 396 <<
"\n QuadEgammaOvRm" 397 <<
"\n SingleTauOvRm" 398 <<
"\n TripleTauOvRm" 400 <<
"\n SingleJetOvRm" 401 <<
"\n TripleJetOvRm" 403 <<
"\n The above conditions types OvRm are not implemented yet in the " 404 "parser. Please remove alogrithms that " 405 "use this type of condtion from L1T Menu!" 421 m_triggerMenuInterfaceAuthor =
val;
425 m_triggerMenuInterfaceDescription =
val;
443 for (std::vector<ConditionMap>::iterator itCondOnChip = m_conditionMap.begin(); itCondOnChip != m_conditionMap.end();
447 itCondOnChip->clear();
451 m_algorithmMap.clear();
458 LogTrace(
"TriggerMenuParser") <<
" Trying to insert condition \"" << cName <<
"\" in the condition map." 462 if ((m_conditionMap[chipNr]).
count(cName) != 0) {
463 LogTrace(
"TriggerMenuParser") <<
" Condition " << cName <<
" already exists - not inserted!" << std::endl;
467 (m_conditionMap[chipNr])[cName] = &
cond;
468 LogTrace(
"TriggerMenuParser") <<
" OK - condition inserted!" << std::endl;
481 if (m_algorithmMap.count(algName) != 0) {
482 LogTrace(
"TriggerMenuParser") <<
" Algorithm \"" << algName
483 <<
"\"already exists in the algorithm map- not inserted!" << std::endl;
487 if (m_algorithmAliasMap.count(algAlias) != 0) {
488 LogTrace(
"TriggerMenuParser") <<
" Algorithm alias \"" << algAlias
489 <<
"\"already exists in the algorithm alias map- not inserted!" << std::endl;
496 LogTrace(
"TriggerMenuParser") <<
" Bit number " <<
bitNumber <<
" outside allowed range [0, " 497 << m_numberPhysTriggers <<
") - algorithm not inserted!" << std::endl;
502 if (m_algorithmMap.size() >= m_numberPhysTriggers) {
503 LogTrace(
"TriggerMenuParser") <<
" More than maximum allowed " << m_numberPhysTriggers
504 <<
" algorithms in the algorithm map - not inserted!" << std::endl;
510 static_cast<int>(m_numberConditionChips), static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
512 if ((chipNr < 0) || (chipNr > static_cast<int>(m_numberConditionChips))) {
513 LogTrace(
"TriggerMenuParser") <<
" Chip number " << chipNr <<
" outside allowed range [0, " 514 << m_numberConditionChips <<
") - algorithm not inserted!" << std::endl;
520 static_cast<int>(m_numberConditionChips), static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
522 if ((outputPin < 0) || (outputPin > static_cast<int>(m_pinsOnConditionChip))) {
523 LogTrace(
"TriggerMenuParser") <<
" Output pin " << outputPin <<
" outside allowed range [0, " 524 << m_pinsOnConditionChip <<
"] - algorithm not inserted!" << std::endl;
529 for (
CItAlgo itAlgo = m_algorithmMap.begin(); itAlgo != m_algorithmMap.end(); itAlgo++) {
530 int iPin = (itAlgo->second)
531 .algoOutputPin(static_cast<int>(m_numberConditionChips),
532 static_cast<int>(m_pinsOnConditionChip),
533 m_orderConditionChip);
535 int iChip = (itAlgo->second)
536 .algoChipNumber(static_cast<int>(m_numberConditionChips),
537 static_cast<int>(m_pinsOnConditionChip),
538 m_orderConditionChip);
540 if ((outputPin == iPin) && (chipNr == iChip)) {
541 LogTrace(
"TriggerMenuParser") <<
" Output pin " << outputPin <<
" is the same as for algorithm " << iName
542 <<
"\n from the same chip number " << chipNr <<
" - algorithm not inserted!" 549 m_algorithmMap[algName] = alg;
550 m_algorithmAliasMap[algAlias] = alg;
559 template <
typename T>
561 std::stringstream
ss;
566 std::stringstream
ss;
598 for (std::map<std::string, tmeventsetup::esScale>::const_iterator cit = scaleMap.begin(); cit != scaleMap.end();
600 const tmeventsetup::esScale&
scale = cit->second;
604 scaleParam = &muScales;
605 else if (
scale.getObjectType() == esObjectType::Egamma)
606 scaleParam = &egScales;
608 scaleParam = &tauScales;
610 scaleParam = &jetScales;
612 scaleParam = &ettScales;
613 else if (
scale.getObjectType() == esObjectType::ETTEM)
614 scaleParam = &ettEmScales;
616 scaleParam = &etmScales;
617 else if (
scale.getObjectType() == esObjectType::ETMHF)
618 scaleParam = &etmHfScales;
619 else if (
scale.getObjectType() == esObjectType::HTMHF)
620 scaleParam = &htmHfScales;
622 scaleParam = &httScales;
624 scaleParam = &htmScales;
626 scaleParam = &zdcScales;
628 scaleParam =
nullptr;
630 if (scaleParam !=
nullptr) {
631 switch (
scale.getScaleType()) {
632 case esScaleType::EtScale: {
638 const std::vector<tmeventsetup::esBin>& binsV =
scale.getBins();
639 for (
unsigned int i = 0;
i < binsV.size();
i++) {
640 const tmeventsetup::esBin&
bin = binsV.at(
i);
641 std::pair<double, double> binLimits(
bin.minimum,
bin.maximum);
642 scaleParam->
etBins.push_back(binLimits);
649 scale.getObjectType() == esObjectType::ETTEM ||
scale.getObjectType() == esObjectType::ETMHF ||
650 scale.getObjectType() == esObjectType::HTMHF) {
655 scale.getObjectType() == esObjectType::ETTEM) {
663 case esScaleType::UnconstrainedPtScale: {
669 const std::vector<tmeventsetup::esBin>& binsV =
scale.getBins();
670 for (
unsigned int i = 0;
i < binsV.size();
i++) {
671 const tmeventsetup::esBin&
bin = binsV.at(
i);
672 std::pair<double, double> binLimits(
bin.minimum,
bin.maximum);
673 scaleParam->
uptBins.push_back(binLimits);
676 case esScaleType::EtaScale: {
682 const std::vector<tmeventsetup::esBin>& binsV =
scale.getBins();
684 for (
unsigned int i = 0;
i < binsV.size();
i++) {
685 const tmeventsetup::esBin&
bin = binsV.at(
i);
686 std::pair<double, double> binLimits(
bin.minimum,
bin.maximum);
687 scaleParam->
etaBins.at(
bin.hw_index) = binLimits;
690 case esScaleType::PhiScale: {
696 const std::vector<tmeventsetup::esBin>& binsV =
scale.getBins();
698 for (
unsigned int i = 0;
i < binsV.size();
i++) {
699 const tmeventsetup::esBin&
bin = binsV.at(
i);
700 std::pair<double, double> binLimits(
bin.minimum,
bin.maximum);
701 scaleParam->
phiBins.at(
bin.hw_index) = binLimits;
712 m_gtScales.setMuonScales(muScales);
713 m_gtScales.setEGScales(egScales);
714 m_gtScales.setTauScales(tauScales);
715 m_gtScales.setJetScales(jetScales);
716 m_gtScales.setETTScales(ettScales);
717 m_gtScales.setETTEmScales(ettEmScales);
718 m_gtScales.setETMScales(etmScales);
719 m_gtScales.setETMHfScales(etmHfScales);
720 m_gtScales.setHTMHfScales(htmHfScales);
721 m_gtScales.setHTTScales(httScales);
722 m_gtScales.setHTMScales(htmScales);
723 m_gtScales.setHTMScales(zdcScales);
726 bool hasPrecision =
false;
727 std::map<std::string, unsigned int> precisions;
728 getPrecisions(precisions, scaleMap);
729 for (std::map<std::string, unsigned int>::const_iterator cit = precisions.begin(); cit != precisions.end(); cit++) {
736 parseCalMuEta_LUTS(scaleMap,
"EG",
"MU");
737 parseCalMuEta_LUTS(scaleMap,
"JET",
"MU");
738 parseCalMuEta_LUTS(scaleMap,
"TAU",
"MU");
742 parseCalMuPhi_LUTS(scaleMap,
"EG",
"MU");
743 parseCalMuPhi_LUTS(scaleMap,
"JET",
"MU");
744 parseCalMuPhi_LUTS(scaleMap,
"TAU",
"MU");
745 parseCalMuPhi_LUTS(scaleMap,
"HTM",
"MU");
746 parseCalMuPhi_LUTS(scaleMap,
"ETM",
"MU");
747 parseCalMuPhi_LUTS(scaleMap,
"ETMHF",
"MU");
748 parseCalMuPhi_LUTS(scaleMap,
"HTMHF",
"MU");
752 parsePt_LUTS(scaleMap,
"Mass",
"EG", precisions[
"PRECISION-EG-MU-MassPt"]);
753 parsePt_LUTS(scaleMap,
"Mass",
"MU", precisions[
"PRECISION-EG-MU-MassPt"]);
754 parseUpt_LUTS(scaleMap,
"Mass",
"MU", precisions[
"PRECISION-EG-MU-MassPt"]);
755 parsePt_LUTS(scaleMap,
"Mass",
"JET", precisions[
"PRECISION-EG-JET-MassPt"]);
756 parsePt_LUTS(scaleMap,
"Mass",
"TAU", precisions[
"PRECISION-EG-TAU-MassPt"]);
757 parsePt_LUTS(scaleMap,
"Mass",
"ETM", precisions[
"PRECISION-EG-ETM-MassPt"]);
758 parsePt_LUTS(scaleMap,
"Mass",
"ETMHF", precisions[
"PRECISION-EG-ETMHF-MassPt"]);
759 parsePt_LUTS(scaleMap,
"Mass",
"HTMHF", precisions[
"PRECISION-EG-HTMHF-MassPt"]);
760 parsePt_LUTS(scaleMap,
"Mass",
"HTM", precisions[
"PRECISION-EG-HTM-MassPt"]);
764 parsePt_LUTS(scaleMap,
"TwoBody",
"EG", precisions[
"PRECISION-EG-MU-TwoBodyPt"]);
765 parsePt_LUTS(scaleMap,
"TwoBody",
"MU", precisions[
"PRECISION-EG-MU-TwoBodyPt"]);
766 parsePt_LUTS(scaleMap,
"TwoBody",
"JET", precisions[
"PRECISION-EG-JET-TwoBodyPt"]);
767 parsePt_LUTS(scaleMap,
"TwoBody",
"TAU", precisions[
"PRECISION-EG-TAU-TwoBodyPt"]);
768 parsePt_LUTS(scaleMap,
"TwoBody",
"ETM", precisions[
"PRECISION-EG-ETM-TwoBodyPt"]);
769 parsePt_LUTS(scaleMap,
"TwoBody",
"ETMHF", precisions[
"PRECISION-EG-ETMHF-TwoBodyPt"]);
770 parsePt_LUTS(scaleMap,
"TwoBody",
"HTMHF", precisions[
"PRECISION-EG-HTMHF-TwoBodyPt"]);
771 parsePt_LUTS(scaleMap,
"TwoBody",
"HTM", precisions[
"PRECISION-EG-HTM-TwoBodyPt"]);
775 parseDeltaEta_Cosh_LUTS(
776 scaleMap,
"EG",
"EG", precisions[
"PRECISION-EG-EG-Delta"], precisions[
"PRECISION-EG-EG-Math"]);
777 parseDeltaEta_Cosh_LUTS(
778 scaleMap,
"EG",
"JET", precisions[
"PRECISION-EG-JET-Delta"], precisions[
"PRECISION-EG-JET-Math"]);
779 parseDeltaEta_Cosh_LUTS(
780 scaleMap,
"EG",
"TAU", precisions[
"PRECISION-EG-TAU-Delta"], precisions[
"PRECISION-EG-TAU-Math"]);
781 parseDeltaEta_Cosh_LUTS(
782 scaleMap,
"EG",
"MU", precisions[
"PRECISION-EG-MU-Delta"], precisions[
"PRECISION-EG-MU-Math"]);
784 parseDeltaEta_Cosh_LUTS(
785 scaleMap,
"JET",
"JET", precisions[
"PRECISION-JET-JET-Delta"], precisions[
"PRECISION-JET-JET-Math"]);
786 parseDeltaEta_Cosh_LUTS(
787 scaleMap,
"JET",
"TAU", precisions[
"PRECISION-JET-TAU-Delta"], precisions[
"PRECISION-JET-TAU-Math"]);
788 parseDeltaEta_Cosh_LUTS(
789 scaleMap,
"JET",
"MU", precisions[
"PRECISION-JET-MU-Delta"], precisions[
"PRECISION-JET-MU-Math"]);
791 parseDeltaEta_Cosh_LUTS(
792 scaleMap,
"TAU",
"TAU", precisions[
"PRECISION-TAU-TAU-Delta"], precisions[
"PRECISION-TAU-TAU-Math"]);
793 parseDeltaEta_Cosh_LUTS(
794 scaleMap,
"TAU",
"MU", precisions[
"PRECISION-TAU-MU-Delta"], precisions[
"PRECISION-TAU-MU-Math"]);
796 parseDeltaEta_Cosh_LUTS(
797 scaleMap,
"MU",
"MU", precisions[
"PRECISION-MU-MU-Delta"], precisions[
"PRECISION-MU-MU-Math"]);
801 parseDeltaPhi_Cos_LUTS(
802 scaleMap,
"EG",
"EG", precisions[
"PRECISION-EG-EG-Delta"], precisions[
"PRECISION-EG-EG-Math"]);
803 parseDeltaPhi_Cos_LUTS(
804 scaleMap,
"EG",
"JET", precisions[
"PRECISION-EG-JET-Delta"], precisions[
"PRECISION-EG-JET-Math"]);
805 parseDeltaPhi_Cos_LUTS(
806 scaleMap,
"EG",
"TAU", precisions[
"PRECISION-EG-TAU-Delta"], precisions[
"PRECISION-EG-TAU-Math"]);
807 parseDeltaPhi_Cos_LUTS(
808 scaleMap,
"EG",
"ETM", precisions[
"PRECISION-EG-ETM-Delta"], precisions[
"PRECISION-EG-ETM-Math"]);
809 parseDeltaPhi_Cos_LUTS(
810 scaleMap,
"EG",
"ETMHF", precisions[
"PRECISION-EG-ETMHF-Delta"], precisions[
"PRECISION-EG-ETMHF-Math"]);
811 parseDeltaPhi_Cos_LUTS(
812 scaleMap,
"EG",
"HTMHF", precisions[
"PRECISION-EG-HTMHF-Delta"], precisions[
"PRECISION-EG-HTMHF-Math"]);
813 parseDeltaPhi_Cos_LUTS(
814 scaleMap,
"EG",
"HTM", precisions[
"PRECISION-EG-HTM-Delta"], precisions[
"PRECISION-EG-HTM-Math"]);
815 parseDeltaPhi_Cos_LUTS(
816 scaleMap,
"EG",
"MU", precisions[
"PRECISION-EG-MU-Delta"], precisions[
"PRECISION-EG-MU-Math"]);
818 parseDeltaPhi_Cos_LUTS(
819 scaleMap,
"JET",
"JET", precisions[
"PRECISION-JET-JET-Delta"], precisions[
"PRECISION-JET-JET-Math"]);
820 parseDeltaPhi_Cos_LUTS(
821 scaleMap,
"JET",
"TAU", precisions[
"PRECISION-JET-TAU-Delta"], precisions[
"PRECISION-JET-TAU-Math"]);
822 parseDeltaPhi_Cos_LUTS(
823 scaleMap,
"JET",
"ETM", precisions[
"PRECISION-JET-ETM-Delta"], precisions[
"PRECISION-JET-ETM-Math"]);
824 parseDeltaPhi_Cos_LUTS(
825 scaleMap,
"JET",
"ETMHF", precisions[
"PRECISION-JET-ETMHF-Delta"], precisions[
"PRECISION-JET-ETMHF-Math"]);
826 parseDeltaPhi_Cos_LUTS(
827 scaleMap,
"JET",
"HTMHF", precisions[
"PRECISION-JET-HTMHF-Delta"], precisions[
"PRECISION-JET-HTMHF-Math"]);
828 parseDeltaPhi_Cos_LUTS(
829 scaleMap,
"JET",
"HTM", precisions[
"PRECISION-JET-HTM-Delta"], precisions[
"PRECISION-JET-HTM-Math"]);
830 parseDeltaPhi_Cos_LUTS(
831 scaleMap,
"JET",
"MU", precisions[
"PRECISION-JET-MU-Delta"], precisions[
"PRECISION-JET-MU-Math"]);
833 parseDeltaPhi_Cos_LUTS(
834 scaleMap,
"TAU",
"TAU", precisions[
"PRECISION-TAU-TAU-Delta"], precisions[
"PRECISION-TAU-TAU-Math"]);
835 parseDeltaPhi_Cos_LUTS(
836 scaleMap,
"TAU",
"ETM", precisions[
"PRECISION-TAU-ETM-Delta"], precisions[
"PRECISION-TAU-ETM-Math"]);
837 parseDeltaPhi_Cos_LUTS(
838 scaleMap,
"TAU",
"ETMHF", precisions[
"PRECISION-TAU-ETMHF-Delta"], precisions[
"PRECISION-TAU-ETMHF-Math"]);
839 parseDeltaPhi_Cos_LUTS(
840 scaleMap,
"TAU",
"HTMHF", precisions[
"PRECISION-TAU-HTMHF-Delta"], precisions[
"PRECISION-TAU-HTMHF-Math"]);
841 parseDeltaPhi_Cos_LUTS(
842 scaleMap,
"TAU",
"HTM", precisions[
"PRECISION-TAU-HTM-Delta"], precisions[
"PRECISION-TAU-HTM-Math"]);
843 parseDeltaPhi_Cos_LUTS(
844 scaleMap,
"TAU",
"MU", precisions[
"PRECISION-TAU-MU-Delta"], precisions[
"PRECISION-TAU-MU-Math"]);
846 parseDeltaPhi_Cos_LUTS(
847 scaleMap,
"MU",
"ETM", precisions[
"PRECISION-MU-ETM-Delta"], precisions[
"PRECISION-MU-ETM-Math"]);
848 parseDeltaPhi_Cos_LUTS(
849 scaleMap,
"MU",
"ETMHF", precisions[
"PRECISION-MU-ETMHF-Delta"], precisions[
"PRECISION-MU-ETMHF-Math"]);
850 parseDeltaPhi_Cos_LUTS(
851 scaleMap,
"MU",
"HTMHF", precisions[
"PRECISION-MU-HTMHF-Delta"], precisions[
"PRECISION-MU-HTMHF-Math"]);
852 parseDeltaPhi_Cos_LUTS(
853 scaleMap,
"MU",
"HTM", precisions[
"PRECISION-MU-HTM-Delta"], precisions[
"PRECISION-MU-HTM-Math"]);
854 parseDeltaPhi_Cos_LUTS(
855 scaleMap,
"MU",
"MU", precisions[
"PRECISION-MU-MU-Delta"], precisions[
"PRECISION-MU-MU-Math"]);
857 parsePhi_Trig_LUTS(scaleMap,
"EG",
l1t::COS, precisions[
"PRECISION-EG-EG-Math"]);
858 parsePhi_Trig_LUTS(scaleMap,
"JET",
l1t::COS, precisions[
"PRECISION-JET-JET-Math"]);
859 parsePhi_Trig_LUTS(scaleMap,
"TAU",
l1t::COS, precisions[
"PRECISION-TAU-TAU-Math"]);
860 parsePhi_Trig_LUTS(scaleMap,
"MU",
l1t::COS, precisions[
"PRECISION-MU-MU-Math"]);
862 parsePhi_Trig_LUTS(scaleMap,
"EG",
l1t::SIN, precisions[
"PRECISION-EG-EG-Math"]);
863 parsePhi_Trig_LUTS(scaleMap,
"JET",
l1t::SIN, precisions[
"PRECISION-JET-JET-Math"]);
864 parsePhi_Trig_LUTS(scaleMap,
"TAU",
l1t::SIN, precisions[
"PRECISION-TAU-TAU-Math"]);
865 parsePhi_Trig_LUTS(scaleMap,
"MU",
l1t::SIN, precisions[
"PRECISION-MU-MU-Math"]);
887 if (scaleMap.find(scLabel1) == scaleMap.end() || scaleMap.find(scLabel2) == scaleMap.end())
890 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
891 const tmeventsetup::esScale* scale2 = &scaleMap.find(scLabel2)->second;
893 std::vector<long long> lut_cal_2_mu_eta;
894 getCaloMuonEtaConversionLut(lut_cal_2_mu_eta, scale1, scale2);
899 m_gtScales.setLUT_CalMuEta(lutName, lut_cal_2_mu_eta);
914 if (scaleMap.find(scLabel1) == scaleMap.end() || scaleMap.find(scLabel2) == scaleMap.end())
917 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
918 const tmeventsetup::esScale* scale2 = &scaleMap.find(scLabel2)->second;
920 std::vector<long long> lut_cal_2_mu_phi;
921 getCaloMuonPhiConversionLut(lut_cal_2_mu_phi, scale1, scale2);
926 m_gtScales.setLUT_CalMuPhi(lutName, lut_cal_2_mu_phi);
940 if (scaleMap.find(scLabel1) == scaleMap.end())
943 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
945 std::vector<long long> lut_pt;
946 getLut(lut_pt, scale1, prec);
948 m_gtScales.setLUT_Pt(lutpfx +
"_" + scLabel1, lut_pt, prec);
963 if (scaleMap.find(scLabel1) == scaleMap.end())
966 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
968 std::vector<long long> lut_pt;
969 getLut(lut_pt, scale1, prec);
971 m_gtScales.setLUT_Upt(lutpfx +
"_" + scLabel1, lut_pt, prec);
978 unsigned int prec2) {
988 if (scaleMap.find(scLabel1) == scaleMap.end() || scaleMap.find(scLabel2) == scaleMap.end())
991 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
992 const tmeventsetup::esScale* scale2 = &scaleMap.find(scLabel2)->second;
993 std::vector<double> val_delta_eta;
994 std::vector<long long> lut_delta_eta;
995 size_t n = getDeltaVector(val_delta_eta, scale1, scale2);
996 setLut(lut_delta_eta, val_delta_eta, prec1);
1000 m_gtScales.setLUT_DeltaEta(lutName, lut_delta_eta, prec1);
1003 std::vector<long long> lut_cosh;
1004 applyCosh(val_delta_eta,
n);
1005 setLut(lut_cosh, val_delta_eta, prec2);
1006 m_gtScales.setLUT_Cosh(lutName, lut_cosh, prec2);
1013 unsigned int prec2) {
1023 if (scaleMap.find(scLabel1) == scaleMap.end() || scaleMap.find(scLabel2) == scaleMap.end())
1026 const tmeventsetup::esScale* scale1 = &scaleMap.find(scLabel1)->second;
1027 const tmeventsetup::esScale* scale2 = &scaleMap.find(scLabel2)->second;
1028 std::vector<double> val_delta_phi;
1029 std::vector<long long> lut_delta_phi;
1030 size_t n = getDeltaVector(val_delta_phi, scale1, scale2);
1031 setLut(lut_delta_phi, val_delta_phi, prec1);
1035 m_gtScales.setLUT_DeltaPhi(lutName, lut_delta_phi, prec1);
1038 std::vector<long long> lut_cos;
1039 applyCos(val_delta_phi,
n);
1040 setLut(lut_cos, val_delta_phi, prec2);
1041 m_gtScales.setLUT_Cos(lutName, lut_cos, prec2);
1047 unsigned int prec) {
1054 if (scaleMap.find(scLabel) == scaleMap.end())
1059 const tmeventsetup::esScale*
scale = &scaleMap.find(scLabel)->second;
1064 const size_t bitwidth =
std::ceil(std::log10(
n) / std::log10(2));
1068 for (
size_t ii = 0;
ii <
n;
ii++) {
1073 std::vector<long long> lut;
1076 setLut(lut,
array, prec);
1077 m_gtScales.setLUT_Sin(lutName, lut, prec);
1080 setLut(lut,
array, prec);
1081 m_gtScales.setLUT_Cos(lutName, lut, prec);
1111 }
else if (condMu.
getType() == esConditionType::DoubleMuon) {
1115 }
else if (condMu.
getType() == esConditionType::TripleMuon) {
1119 }
else if (condMu.
getType() == esConditionType::QuadMuon) {
1124 edm::LogError(
"TriggerMenuParser") <<
"Wrong type for muon-condition (" <<
type <<
")" << std::endl;
1129 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for muon-condition (" <<
type <<
")" 1130 <<
"\nCan not determine number of trigger objects. " << std::endl;
1134 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 1136 <<
"\n condition = " << condition <<
"\n particle = " << particle
1137 <<
"\n type = " <<
type <<
"\n name = " <<
name << std::endl;
1142 std::vector<MuonTemplate::ObjectParameter> objParameter(nrObj);
1148 std::vector<uint64_t> tmpValues((nrObj > 2) ? nrObj : 2);
1149 tmpValues.reserve(nrObj);
1151 if (
int(condMu.
getObjects().size()) != nrObj) {
1152 edm::LogError(
"TriggerMenuParser") <<
" condMu objects: nrObj = " << nrObj
1153 <<
"condMu.getObjects().size() = " << condMu.
getObjects().size() << std::endl;
1158 unsigned int chargeCorrelation = 1;
1159 const std::vector<L1TUtmCut>&
cuts = condMu.
getCuts();
1160 for (
size_t jj = 0;
jj <
cuts.size();
jj++) {
1162 if (
cut.getCutType() == esCutType::ChargeCorrelation) {
1163 if (
cut.getData() ==
"ls")
1164 chargeCorrelation = 2;
1165 else if (
cut.getData() ==
"os")
1166 chargeCorrelation = 4;
1168 chargeCorrelation = 1;
1185 gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
1188 relativeBx =
object.getBxOffset();
1191 int upperUnconstrainedPtInd = -1;
1192 int lowerUnconstrainedPtInd = 0;
1193 int upperImpactParameterInd = -1;
1194 int lowerImpactParameterInd = 0;
1195 int upperThresholdInd = -1;
1196 int lowerThresholdInd = 0;
1197 int upperIndexInd = -1;
1198 int lowerIndexInd = 0;
1200 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
1201 int isolationLUT = 0xF;
1202 int impactParameterLUT = 0xF;
1204 int qualityLUT = 0xFFFF;
1206 std::vector<MuonTemplate::Window> etaWindows;
1207 std::vector<MuonTemplate::Window> tfMuonIndexWindows;
1209 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
1210 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
1213 switch (
cut.getCutType()) {
1214 case esCutType::UnconstrainedPt:
1215 lowerUnconstrainedPtInd =
cut.getMinimum().index;
1216 upperUnconstrainedPtInd =
cut.getMaximum().index;
1219 case esCutType::ImpactParameter:
1220 lowerImpactParameterInd =
cut.getMinimum().index;
1221 upperImpactParameterInd =
cut.getMaximum().index;
1222 impactParameterLUT = l1tstr2int(
cut.getData());
1226 lowerThresholdInd =
cut.getMinimum().index;
1227 upperThresholdInd =
cut.getMaximum().index;
1230 case esCutType::Slice:
1231 lowerIndexInd =
int(
cut.getMinimum().value);
1232 upperIndexInd =
int(
cut.getMaximum().value);
1235 case esCutType::Eta: {
1236 if (etaWindows.size() < 5) {
1237 etaWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
1240 <<
"Too Many Eta Cuts for muon-condition (" << particle <<
")" << std::endl;
1247 phiWindow1Lower =
cut.getMinimum().index;
1248 phiWindow1Upper =
cut.getMaximum().index;
1249 }
else if (cntPhi == 1) {
1250 phiWindow2Lower =
cut.getMinimum().index;
1251 phiWindow2Upper =
cut.getMaximum().index;
1254 <<
"Too Many Phi Cuts for muon-condition (" << particle <<
")" << std::endl;
1262 if (
cut.getData() ==
"positive")
1264 else if (
cut.getData() ==
"negative")
1271 qualityLUT = l1tstr2int(
cut.getData());
1274 case esCutType::Isolation: {
1275 isolationLUT = l1tstr2int(
cut.getData());
1279 case esCutType::Index: {
1280 tfMuonIndexWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
1290 objParameter[cnt].unconstrainedPtHigh = upperUnconstrainedPtInd;
1291 objParameter[cnt].unconstrainedPtLow = lowerUnconstrainedPtInd;
1292 objParameter[cnt].impactParameterHigh = upperImpactParameterInd;
1293 objParameter[cnt].impactParameterLow = lowerImpactParameterInd;
1294 objParameter[cnt].impactParameterLUT = impactParameterLUT;
1296 objParameter[cnt].ptHighThreshold = upperThresholdInd;
1297 objParameter[cnt].ptLowThreshold = lowerThresholdInd;
1299 objParameter[cnt].indexHigh = upperIndexInd;
1300 objParameter[cnt].indexLow = lowerIndexInd;
1302 objParameter[cnt].etaWindows = etaWindows;
1304 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
1305 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
1306 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
1307 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
1310 objParameter[cnt].enableMip =
false;
1311 objParameter[cnt].enableIso =
false;
1312 objParameter[cnt].requestIso =
false;
1314 objParameter[cnt].charge =
charge;
1315 objParameter[cnt].qualityLUT = qualityLUT;
1316 objParameter[cnt].isolationLUT = isolationLUT;
1318 objParameter[cnt].tfMuonIndexWindows = tfMuonIndexWindows;
1338 std::ostringstream myCoutStream;
1339 muonCond.
print(myCoutStream);
1340 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1344 if (!insertConditionIntoMap(muonCond, chipNr)) {
1345 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
1348 LogDebug(
"TriggerMenuParser") <<
"Added Condition " <<
name <<
" to the ConditionMap" << std::endl;
1350 (m_corMuonTemplate[chipNr]).
push_back(muonCond);
1352 LogDebug(
"TriggerMenuParser") <<
"Added Condition " <<
name <<
" to the vecMuonTemplate vector" << std::endl;
1353 (m_vecMuonTemplate[chipNr]).
push_back(muonCond);
1375 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for muon-condition (" <<
type <<
")" 1376 <<
"\nCan not determine number of trigger objects. " << std::endl;
1380 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 1382 <<
"\n condition = " << condition <<
"\n particle = " << particle
1383 <<
"\n type = " <<
type <<
"\n name = " <<
name << std::endl;
1388 std::vector<MuonTemplate::ObjectParameter> objParameter(nrObj);
1394 std::vector<uint64_t> tmpValues((nrObj > 2) ? nrObj : 2);
1395 tmpValues.reserve(nrObj);
1400 unsigned int chargeCorrelation = 0;
1401 if (str_chargeCorrelation ==
"ig")
1402 chargeCorrelation = 1;
1403 else if (str_chargeCorrelation ==
"ls")
1404 chargeCorrelation = 2;
1405 else if (str_chargeCorrelation ==
"os")
1406 chargeCorrelation = 4;
1422 int upperUnconstrainedPtInd = -1;
1423 int lowerUnconstrainedPtInd = 0;
1424 int upperImpactParameterInd = -1;
1425 int lowerImpactParameterInd = 0;
1426 int impactParameterLUT = 0xF;
1427 int upperThresholdInd = -1;
1428 int lowerThresholdInd = 0;
1429 int upperIndexInd = -1;
1430 int lowerIndexInd = 0;
1432 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
1433 int isolationLUT = 0xF;
1435 int qualityLUT = 0xFFFF;
1437 std::vector<MuonTemplate::Window> etaWindows;
1438 std::vector<MuonTemplate::Window> tfMuonIndexWindows;
1440 const std::vector<L1TUtmCut>&
cuts = corrMu->
getCuts();
1441 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
1444 switch (
cut.getCutType()) {
1445 case esCutType::UnconstrainedPt:
1446 lowerUnconstrainedPtInd =
cut.getMinimum().index;
1447 upperUnconstrainedPtInd =
cut.getMaximum().index;
1450 case esCutType::ImpactParameter:
1451 lowerImpactParameterInd =
cut.getMinimum().index;
1452 upperImpactParameterInd =
cut.getMaximum().index;
1453 impactParameterLUT = l1tstr2int(
cut.getData());
1457 lowerThresholdInd =
cut.getMinimum().index;
1458 upperThresholdInd =
cut.getMaximum().index;
1461 case esCutType::Slice:
1462 lowerIndexInd =
int(
cut.getMinimum().value);
1463 upperIndexInd =
int(
cut.getMaximum().value);
1466 case esCutType::Eta: {
1467 if (etaWindows.size() < 5) {
1468 etaWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
1471 <<
"Too Many Eta Cuts for muon-condition (" << particle <<
")" << std::endl;
1478 phiWindow1Lower =
cut.getMinimum().index;
1479 phiWindow1Upper =
cut.getMaximum().index;
1480 }
else if (cntPhi == 1) {
1481 phiWindow2Lower =
cut.getMinimum().index;
1482 phiWindow2Upper =
cut.getMaximum().index;
1485 <<
"Too Many Phi Cuts for muon-condition (" << particle <<
")" << std::endl;
1493 if (
cut.getData() ==
"positive")
1495 else if (
cut.getData() ==
"negative")
1502 qualityLUT = l1tstr2int(
cut.getData());
1505 case esCutType::Isolation: {
1506 isolationLUT = l1tstr2int(
cut.getData());
1510 case esCutType::Index: {
1511 tfMuonIndexWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
1521 objParameter[0].unconstrainedPtHigh = upperUnconstrainedPtInd;
1522 objParameter[0].unconstrainedPtLow = lowerUnconstrainedPtInd;
1523 objParameter[0].impactParameterHigh = upperImpactParameterInd;
1524 objParameter[0].impactParameterLow = lowerImpactParameterInd;
1525 objParameter[0].impactParameterLUT = impactParameterLUT;
1527 objParameter[0].ptHighThreshold = upperThresholdInd;
1528 objParameter[0].ptLowThreshold = lowerThresholdInd;
1530 objParameter[0].indexHigh = upperIndexInd;
1531 objParameter[0].indexLow = lowerIndexInd;
1533 objParameter[0].etaWindows = etaWindows;
1535 objParameter[0].phiWindow1Lower = phiWindow1Lower;
1536 objParameter[0].phiWindow1Upper = phiWindow1Upper;
1537 objParameter[0].phiWindow2Lower = phiWindow2Lower;
1538 objParameter[0].phiWindow2Upper = phiWindow2Upper;
1541 objParameter[0].enableMip =
false;
1542 objParameter[0].enableIso =
false;
1543 objParameter[0].requestIso =
false;
1545 objParameter[0].charge =
charge;
1546 objParameter[0].qualityLUT = qualityLUT;
1547 objParameter[0].isolationLUT = isolationLUT;
1549 objParameter[0].tfMuonIndexWindows = tfMuonIndexWindows;
1565 std::ostringstream myCoutStream;
1566 muonCond.
print(myCoutStream);
1567 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1583 (m_corMuonTemplate[chipNr]).
push_back(muonCond);
1615 std::vector<MuonShowerTemplate::ObjectParameter> objParameter(nrObj);
1617 if (
int(condMu.
getObjects().size()) != nrObj) {
1618 edm::LogError(
"TriggerMenuParser") <<
" condMu objects: nrObj = " << nrObj
1619 <<
"condMu.getObjects().size() = " << condMu.
getObjects().size() << std::endl;
1625 int relativeBx =
object.getBxOffset();
1627 if (condMu.
getType() == esConditionType::MuonShower0) {
1628 objParameter[0].MuonShower0 =
true;
1629 }
else if (condMu.
getType() == esConditionType::MuonShower1) {
1630 objParameter[0].MuonShower1 =
true;
1631 }
else if (condMu.
getType() == esConditionType::MuonShower2) {
1632 objParameter[0].MuonShower2 =
true;
1633 }
else if (condMu.
getType() == esConditionType::MuonShowerOutOfTime0) {
1634 objParameter[0].MuonShowerOutOfTime0 =
true;
1635 }
else if (condMu.
getType() == esConditionType::MuonShowerOutOfTime1) {
1636 objParameter[0].MuonShowerOutOfTime1 =
true;
1652 std::ostringstream myCoutStream;
1653 muonShowerCond.
print(myCoutStream);
1657 if (!insertConditionIntoMap(muonShowerCond, chipNr)) {
1658 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
1661 (m_vecMuonShowerTemplate[chipNr]).
push_back(muonShowerCond);
1689 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 1690 <<
"\n (in parseCalo) " 1691 <<
"\n condition = " << condition <<
"\n particle = " << particle
1692 <<
"\n type = " <<
type <<
"\n name = " <<
name << std::endl;
1701 if (condCalo.
getType() == esConditionType::SingleEgamma) {
1706 }
else if (condCalo.
getType() == esConditionType::DoubleEgamma) {
1711 }
else if (condCalo.
getType() == esConditionType::TripleEgamma) {
1716 }
else if (condCalo.
getType() == esConditionType::QuadEgamma) {
1721 }
else if (condCalo.
getType() == esConditionType::SingleJet) {
1722 caloObjType =
gtJet;
1726 }
else if (condCalo.
getType() == esConditionType::DoubleJet) {
1727 caloObjType =
gtJet;
1731 }
else if (condCalo.
getType() == esConditionType::TripleJet) {
1732 caloObjType =
gtJet;
1736 }
else if (condCalo.
getType() == esConditionType::QuadJet) {
1737 caloObjType =
gtJet;
1741 }
else if (condCalo.
getType() == esConditionType::SingleTau) {
1742 caloObjType =
gtTau;
1746 }
else if (condCalo.
getType() == esConditionType::DoubleTau) {
1747 caloObjType =
gtTau;
1751 }
else if (condCalo.
getType() == esConditionType::TripleTau) {
1752 caloObjType =
gtTau;
1756 }
else if (condCalo.
getType() == esConditionType::QuadTau) {
1757 caloObjType =
gtTau;
1762 edm::LogError(
"TriggerMenuParser") <<
"Wrong particle for calo-condition (" << particle <<
")" << std::endl;
1769 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for calo-condition (" <<
type <<
")" 1770 <<
"\nCan not determine number of trigger objects. " << std::endl;
1777 std::vector<CaloTemplate::ObjectParameter> objParameter(nrObj);
1783 std::vector<uint64_t> tmpValues((nrObj > 1) ? nrObj : 1);
1784 tmpValues.reserve(nrObj);
1786 if (
int(condCalo.
getObjects().size()) != nrObj) {
1787 edm::LogError(
"TriggerMenuParser") <<
" condCalo objects: nrObj = " << nrObj
1788 <<
"condCalo.getObjects().size() = " << condCalo.
getObjects().size()
1806 gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
1809 relativeBx =
object.getBxOffset();
1812 int upperThresholdInd = -1;
1813 int lowerThresholdInd = 0;
1814 int upperIndexInd = -1;
1815 int lowerIndexInd = 0;
1817 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
1818 int isolationLUT = 0xF;
1819 int qualityLUT = 0xF;
1820 int displacedLUT = 0x0;
1824 std::vector<CaloTemplate::Window> etaWindows;
1826 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
1827 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
1830 switch (
cut.getCutType()) {
1832 lowerThresholdInd =
cut.getMinimum().index;
1833 upperThresholdInd =
cut.getMaximum().index;
1835 case esCutType::Slice:
1836 lowerIndexInd =
int(
cut.getMinimum().value);
1837 upperIndexInd =
int(
cut.getMaximum().value);
1839 case esCutType::Eta: {
1840 if (etaWindows.size() < 5) {
1841 etaWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
1844 <<
"Too Many Eta Cuts for calo-condition (" << particle <<
")" << std::endl;
1851 phiWindow1Lower =
cut.getMinimum().index;
1852 phiWindow1Upper =
cut.getMaximum().index;
1853 }
else if (cntPhi == 1) {
1854 phiWindow2Lower =
cut.getMinimum().index;
1855 phiWindow2Upper =
cut.getMaximum().index;
1858 <<
"Too Many Phi Cuts for calo-condition (" << particle <<
")" << std::endl;
1866 edm::LogError(
"TriggerMenuParser") <<
"No charge cut for calo-condition (" << particle <<
")" << std::endl;
1871 qualityLUT = l1tstr2int(
cut.getData());
1874 case esCutType::Displaced: {
1875 displacedLUT = l1tstr2int(
cut.getData());
1878 case esCutType::Isolation: {
1879 isolationLUT = l1tstr2int(
cut.getData());
1889 objParameter[cnt].etHighThreshold = upperThresholdInd;
1890 objParameter[cnt].etLowThreshold = lowerThresholdInd;
1891 objParameter[cnt].indexHigh = upperIndexInd;
1892 objParameter[cnt].indexLow = lowerIndexInd;
1893 objParameter[cnt].etaWindows = etaWindows;
1894 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
1895 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
1896 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
1897 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
1898 objParameter[cnt].isolationLUT = isolationLUT;
1899 objParameter[cnt].qualityLUT = qualityLUT;
1900 objParameter[cnt].displacedLUT = displacedLUT;
1904 std::ostringstream oss;
1905 oss <<
"\n Calo ET high thresholds (hex) for calo object " << caloObjType <<
" " << cnt <<
" = " << std::hex
1906 << objParameter[cnt].etLowThreshold <<
" - " << objParameter[cnt].etHighThreshold;
1907 for (
const auto&
window : objParameter[cnt].etaWindows) {
1908 oss <<
"\n etaWindow Lower / Upper for calo object " << cnt <<
" = 0x" <<
window.lower <<
" / 0x" 1911 oss <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x" << objParameter[cnt].phiWindow1Lower
1912 <<
" / 0x" << objParameter[cnt].phiWindow1Upper <<
"\n phiWindowVeto Lower / Upper for calo object " 1913 << cnt <<
" = 0x" << objParameter[cnt].phiWindow2Lower <<
" / 0x" << objParameter[cnt].phiWindow2Upper
1914 <<
"\n Isolation LUT for calo object " << cnt <<
" = 0x" << objParameter[cnt].isolationLUT
1915 <<
"\n Quality LUT for calo object " << cnt <<
" = 0x" << objParameter[cnt].qualityLUT
1916 <<
"\n LLP DISP LUT for calo object " << cnt <<
" = 0x" << objParameter[cnt].displacedLUT;
1917 LogDebug(
"TriggerMenuParser") << oss.str() << std::endl;
1924 std::vector<GlobalObject>
objType(nrObj, caloObjType);
1942 std::ostringstream myCoutStream;
1943 caloCond.
print(myCoutStream);
1944 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1948 if (!insertConditionIntoMap(caloCond, chipNr)) {
1949 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
1954 (m_corCaloTemplate[chipNr]).
push_back(caloCond);
1956 (m_vecCaloTemplate[chipNr]).
push_back(caloCond);
1986 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 1987 <<
"\n (in parseCalo) " 1988 <<
"\n condition = " << condition <<
"\n particle = " << particle
1989 <<
"\n type = " <<
type <<
"\n name = " <<
name << std::endl;
1998 if (corrCalo->
getType() == esObjectType::Egamma) {
2001 caloObjType =
gtJet;
2003 caloObjType =
gtTau;
2005 edm::LogError(
"TriggerMenuParser") <<
"Wrong particle for calo-condition (" << particle <<
")" << std::endl;
2012 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for calo-condition (" <<
type <<
")" 2013 <<
"\nCan not determine number of trigger objects. " << std::endl;
2020 std::vector<CaloTemplate::ObjectParameter> objParameter(nrObj);
2026 std::vector<uint64_t> tmpValues((nrObj > 1) ? nrObj : 1);
2027 tmpValues.reserve(nrObj);
2039 int upperThresholdInd = -1;
2040 int lowerThresholdInd = 0;
2041 int upperIndexInd = -1;
2042 int lowerIndexInd = 0;
2044 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
2045 int isolationLUT = 0xF;
2046 int qualityLUT = 0xF;
2047 int displacedLUT = 0x0;
2051 std::vector<CaloTemplate::Window> etaWindows;
2053 const std::vector<L1TUtmCut>&
cuts = corrCalo->
getCuts();
2054 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2057 switch (
cut.getCutType()) {
2059 lowerThresholdInd =
cut.getMinimum().index;
2060 upperThresholdInd =
cut.getMaximum().index;
2062 case esCutType::Slice:
2063 lowerIndexInd =
int(
cut.getMinimum().value);
2064 upperIndexInd =
int(
cut.getMaximum().value);
2066 case esCutType::Eta: {
2067 if (etaWindows.size() < 5) {
2068 etaWindows.push_back({
cut.getMinimum().index,
cut.getMaximum().index});
2071 <<
"Too Many Eta Cuts for calo-condition (" << particle <<
")" << std::endl;
2078 phiWindow1Lower =
cut.getMinimum().index;
2079 phiWindow1Upper =
cut.getMaximum().index;
2080 }
else if (cntPhi == 1) {
2081 phiWindow2Lower =
cut.getMinimum().index;
2082 phiWindow2Upper =
cut.getMaximum().index;
2085 <<
"Too Many Phi Cuts for calo-condition (" << particle <<
")" << std::endl;
2093 edm::LogError(
"TriggerMenuParser") <<
"No charge cut for calo-condition (" << particle <<
")" << std::endl;
2098 qualityLUT = l1tstr2int(
cut.getData());
2101 case esCutType::Displaced: {
2102 displacedLUT = l1tstr2int(
cut.getData());
2105 case esCutType::Isolation: {
2106 isolationLUT = l1tstr2int(
cut.getData());
2116 objParameter[0].etLowThreshold = lowerThresholdInd;
2117 objParameter[0].etHighThreshold = upperThresholdInd;
2118 objParameter[0].indexHigh = upperIndexInd;
2119 objParameter[0].indexLow = lowerIndexInd;
2120 objParameter[0].etaWindows = etaWindows;
2121 objParameter[0].phiWindow1Lower = phiWindow1Lower;
2122 objParameter[0].phiWindow1Upper = phiWindow1Upper;
2123 objParameter[0].phiWindow2Lower = phiWindow2Lower;
2124 objParameter[0].phiWindow2Upper = phiWindow2Upper;
2125 objParameter[0].isolationLUT = isolationLUT;
2126 objParameter[0].qualityLUT = qualityLUT;
2127 objParameter[0].displacedLUT = displacedLUT;
2131 std::ostringstream oss;
2132 oss <<
"\n Calo ET high threshold (hex) for calo object " << caloObjType <<
" " 2133 <<
" = " << std::hex << objParameter[0].etLowThreshold <<
" - " << objParameter[0].etHighThreshold;
2134 for (
const auto&
window : objParameter[0].etaWindows) {
2135 oss <<
"\n etaWindow Lower / Upper for calo object " 2138 oss <<
"\n phiWindow Lower / Upper for calo object " 2139 <<
" = 0x" << objParameter[0].phiWindow1Lower <<
" / 0x" << objParameter[0].phiWindow1Upper
2140 <<
"\n phiWindowVeto Lower / Upper for calo object " 2141 <<
" = 0x" << objParameter[0].phiWindow2Lower <<
" / 0x" << objParameter[0].phiWindow2Upper
2142 <<
"\n Isolation LUT for calo object " 2143 <<
" = 0x" << objParameter[0].isolationLUT <<
"\n Quality LUT for calo object " 2144 <<
" = 0x" << objParameter[0].qualityLUT <<
"\n LLP DISP LUT for calo object " 2145 <<
" = 0x" << objParameter[0].displacedLUT;
2146 LogDebug(
"TriggerMenuParser") << oss.str() << std::endl;
2150 std::vector<GlobalObject>
objType(nrObj, caloObjType);
2168 std::ostringstream myCoutStream;
2169 caloCond.
print(myCoutStream);
2170 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2187 (m_corCaloTemplate[chipNr]).
push_back(caloCond);
2214 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 2215 <<
"\n (in parseEnergySum) " 2216 <<
"\n condition = " << condition <<
"\n type = " <<
type 2217 <<
"\n name = " <<
name << std::endl;
2223 if (condEnergySum.
getType() == esConditionType::MissingEt) {
2226 }
else if (condEnergySum.
getType() == esConditionType::TotalEt) {
2229 }
else if (condEnergySum.
getType() == esConditionType::TotalEtEM) {
2232 }
else if (condEnergySum.
getType() == esConditionType::TotalHt) {
2235 }
else if (condEnergySum.
getType() == esConditionType::MissingHt) {
2238 }
else if (condEnergySum.
getType() == esConditionType::MissingEtHF) {
2241 }
else if (condEnergySum.
getType() == esConditionType::MissingHtHF) {
2244 }
else if (condEnergySum.
getType() == esConditionType::TowerCount) {
2247 }
else if (condEnergySum.
getType() == esConditionType::MinBiasHFP0) {
2250 }
else if (condEnergySum.
getType() == esConditionType::MinBiasHFM0) {
2253 }
else if (condEnergySum.
getType() == esConditionType::MinBiasHFP1) {
2256 }
else if (condEnergySum.
getType() == esConditionType::MinBiasHFM1) {
2259 }
else if (condEnergySum.
getType() == esConditionType::AsymmetryEt) {
2262 }
else if (condEnergySum.
getType() == esConditionType::AsymmetryHt) {
2265 }
else if (condEnergySum.
getType() == esConditionType::AsymmetryEtHF) {
2268 }
else if (condEnergySum.
getType() == esConditionType::AsymmetryHtHF) {
2271 }
else if (condEnergySum.
getType() == esConditionType::Centrality0) {
2274 }
else if (condEnergySum.
getType() == esConditionType::Centrality1) {
2277 }
else if (condEnergySum.
getType() == esConditionType::Centrality2) {
2280 }
else if (condEnergySum.
getType() == esConditionType::Centrality3) {
2283 }
else if (condEnergySum.
getType() == esConditionType::Centrality4) {
2286 }
else if (condEnergySum.
getType() == esConditionType::Centrality5) {
2289 }
else if (condEnergySum.
getType() == esConditionType::Centrality6) {
2292 }
else if (condEnergySum.
getType() == esConditionType::Centrality7) {
2296 edm::LogError(
"TriggerMenuParser") <<
"Wrong type for energy-sum condition (" <<
type <<
")" << std::endl;
2308 std::vector<EnergySumTemplate::ObjectParameter> objParameter(nrObj);
2322 gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
2325 relativeBx =
object.getBxOffset();
2328 int lowerThresholdInd = 0;
2329 int upperThresholdInd = -1;
2331 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
2333 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
2334 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2337 switch (
cut.getCutType()) {
2339 lowerThresholdInd =
cut.getMinimum().index;
2340 upperThresholdInd =
cut.getMaximum().index;
2343 case esCutType::Eta:
2348 phiWindow1Lower =
cut.getMinimum().index;
2349 phiWindow1Upper =
cut.getMaximum().index;
2350 }
else if (cntPhi == 1) {
2351 phiWindow2Lower =
cut.getMinimum().index;
2352 phiWindow2Upper =
cut.getMaximum().index;
2354 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for esum-condition (" <<
type <<
")" << std::endl;
2361 case esCutType::Count:
2362 lowerThresholdInd =
cut.getMinimum().index;
2363 upperThresholdInd = 0xffffff;
2373 objParameter[cnt].etLowThreshold = lowerThresholdInd;
2374 objParameter[cnt].etHighThreshold = upperThresholdInd;
2375 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
2376 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
2377 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
2378 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
2381 LogDebug(
"TriggerMenuParser") <<
"\n EnergySum ET high threshold (hex) for energy sum object " << cnt <<
" = " 2382 << std::hex << objParameter[cnt].etLowThreshold <<
" - " 2383 << objParameter[cnt].etHighThreshold
2384 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x" 2385 << objParameter[cnt].phiWindow1Lower <<
" / 0x" << objParameter[cnt].phiWindow1Upper
2386 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x" 2387 << objParameter[cnt].phiWindow2Lower <<
" / 0x" << objParameter[cnt].phiWindow2Upper
2394 std::vector<GlobalObject>
objType(nrObj, energySumObjType);
2409 std::ostringstream myCoutStream;
2410 energySumCond.
print(myCoutStream);
2411 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2415 if (!insertConditionIntoMap(energySumCond, chipNr)) {
2416 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
2421 (m_corEnergySumTemplate[chipNr]).
push_back(energySumCond);
2424 (m_vecEnergySumTemplate[chipNr]).
push_back(energySumCond);
2444 unsigned int chipNr,
2445 const bool corrFlag) {
2456 <<
"\n ******************************************\n (in parseEnergySumZdc)\n condition = " << condition
2457 <<
"\n type = " <<
type <<
"\n name = " <<
name;
2463 if (condEnergySumZdc.
getType() == esConditionType::ZDCPlus) {
2464 LogDebug(
"TriggerMenuParser") <<
"ZDC signals: esConditionType::ZDCPlus " << std::endl;
2467 }
else if (condEnergySumZdc.
getType() == esConditionType::ZDCMinus) {
2468 LogDebug(
"TriggerMenuParser") <<
"ZDC signals: esConditionType::ZDCMinus " << std::endl;
2472 edm::LogError(
"TriggerMenuParser") <<
"Wrong type for ZDC energy-sum condition (" <<
type <<
")" << std::endl;
2480 std::vector<EnergySumZdcTemplate::ObjectParameter> objParameter(nrObj);
2483 int lowerThresholdInd = 0;
2484 int upperThresholdInd = -1;
2498 gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
2501 relativeBx =
object.getBxOffset();
2504 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
2505 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2508 switch (
cut.getCutType()) {
2510 lowerThresholdInd =
cut.getMinimum().index;
2511 upperThresholdInd =
cut.getMaximum().index;
2514 case esCutType::Count:
2515 lowerThresholdInd =
cut.getMinimum().index;
2516 upperThresholdInd = 0xffffff;
2526 objParameter[cnt].etLowThreshold = lowerThresholdInd;
2527 objParameter[cnt].etHighThreshold = upperThresholdInd;
2530 LogDebug(
"TriggerMenuParser") <<
"\n EnergySumZdc ET high threshold (hex) for energy sum object " << cnt
2531 <<
" = " << std::hex << objParameter[cnt].etLowThreshold <<
" - " 2532 << objParameter[cnt].etHighThreshold <<
std::dec;
2538 std::vector<GlobalObject>
objType(nrObj, energySumObjType);
2553 std::ostringstream myCoutStream;
2554 energySumCond.
print(myCoutStream);
2555 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2559 if (!insertConditionIntoMap(energySumCond, chipNr)) {
2560 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
2564 (m_vecEnergySumZdcTemplate[chipNr]).
push_back(energySumCond);
2591 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 2592 <<
"\n (in parseEnergySum) " 2593 <<
"\n condition = " << condition <<
"\n type = " <<
type 2594 <<
"\n name = " <<
name << std::endl;
2606 }
else if (corrESum->
getType() == esObjectType::ETMHF) {
2609 }
else if (corrESum->
getType() == esObjectType::HTMHF) {
2612 }
else if (corrESum->
getType() == esObjectType::TOWERCOUNT) {
2616 edm::LogError(
"TriggerMenuParser") <<
"Wrong type for energy-sum correclation condition (" <<
type <<
")" 2629 std::vector<EnergySumTemplate::ObjectParameter> objParameter(nrObj);
2645 int lowerThresholdInd = 0;
2646 int upperThresholdInd = -1;
2648 unsigned int phiWindow1Lower = -1, phiWindow1Upper = -1, phiWindow2Lower = -1, phiWindow2Upper = -1;
2650 const std::vector<L1TUtmCut>&
cuts = corrESum->
getCuts();
2651 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2654 switch (
cut.getCutType()) {
2656 lowerThresholdInd =
cut.getMinimum().index;
2657 upperThresholdInd =
cut.getMaximum().index;
2660 case esCutType::Eta:
2665 phiWindow1Lower =
cut.getMinimum().index;
2666 phiWindow1Upper =
cut.getMaximum().index;
2667 }
else if (cntPhi == 1) {
2668 phiWindow2Lower =
cut.getMinimum().index;
2669 phiWindow2Upper =
cut.getMaximum().index;
2671 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for esum-condition (" <<
type <<
")" << std::endl;
2685 objParameter[0].etLowThreshold = lowerThresholdInd;
2686 objParameter[0].etHighThreshold = upperThresholdInd;
2687 objParameter[0].phiWindow1Lower = phiWindow1Lower;
2688 objParameter[0].phiWindow1Upper = phiWindow1Upper;
2689 objParameter[0].phiWindow2Lower = phiWindow2Lower;
2690 objParameter[0].phiWindow2Upper = phiWindow2Upper;
2693 LogDebug(
"TriggerMenuParser") <<
"\n EnergySum ET high threshold (hex) for energy sum object " << cnt <<
" = " 2694 << std::hex << objParameter[0].etLowThreshold <<
" - " << objParameter[0].etLowThreshold
2695 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x" 2696 << objParameter[0].phiWindow1Lower <<
" / 0x" << objParameter[0].phiWindow1Upper
2697 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x" 2698 << objParameter[0].phiWindow2Lower <<
" / 0x" << objParameter[0].phiWindow2Upper
2702 std::vector<GlobalObject>
objType(nrObj, energySumObjType);
2717 std::ostringstream myCoutStream;
2718 energySumCond.
print(myCoutStream);
2719 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2737 (m_corEnergySumTemplate[chipNr]).
push_back(energySumCond);
2762 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
2763 <<
" (in parseAXOL1TL) " << std::endl
2764 <<
" condition = " << condition << std::endl
2765 <<
" type = " <<
type << std::endl
2766 <<
" name = " <<
name << std::endl;
2768 const int nrObj = 1;
2771 std::vector<AXOL1TLTemplate::ObjectParameter> objParameter(nrObj);
2773 if (
int(condAXOL1TL.
getObjects().size()) != nrObj) {
2774 edm::LogError(
"TriggerMenuParser") <<
" condAXOL1TL objects: nrObj = " << nrObj
2775 <<
"condAXOL1TL.getObjects().size() = " << condAXOL1TL.
getObjects().size()
2782 int relativeBx =
object.getBxOffset();
2783 bool gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
2786 int lowerThresholdInd = 0;
2787 int upperThresholdInd = -1;
2793 if (
object.getType() == tmeventsetup::Axol1tl) {
2794 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
2795 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2799 if (
cut.getCutType() == tmeventsetup::Model) {
2803 else if (
cut.getCutType() == esCutType::Score) {
2804 lowerThresholdInd =
cut.getMinimum().value;
2805 upperThresholdInd =
cut.getMaximum().value;
2811 else if (condAXOL1TL.
getType() == esConditionType::AnomalyDetectionTrigger) {
2815 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
2816 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2818 if (
cut.getCutType() == esCutType::AnomalyScore) {
2819 lowerThresholdInd =
cut.getMinimum().value;
2820 upperThresholdInd =
cut.getMaximum().value;
2825 edm::LogError(
"TriggerMenuParser") <<
" Error: not a proper AXOL1TL condition" << std::endl;
2831 edm::LogError(
"TriggerMenuParser") <<
" Error: AXOL1TL movel version is empty" << std::endl;
2836 objParameter[0].minAXOL1TLThreshold = lowerThresholdInd;
2837 objParameter[0].maxAXOL1TLThreshold = upperThresholdInd;
2849 std::ostringstream myCoutStream;
2850 axol1tlCond.
print(myCoutStream);
2851 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2855 if (!insertConditionIntoMap(axol1tlCond, chipNr)) {
2856 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate AXOL1TL condition (" <<
name <<
")" << std::endl;
2860 (m_vecAXOL1TLTemplate[chipNr]).
push_back(axol1tlCond);
2885 LogDebug(
"TriggerMenuParser") <<
"\n ****************************************** " 2886 <<
"\n (in parseExternal) " 2887 <<
"\n condition = " << condition <<
"\n particle = " << particle
2888 <<
"\n type = " <<
type <<
"\n name = " <<
name << std::endl;
2897 unsigned int channelID = 0;
2903 if (
object.getType() == esObjectType::EXT) {
2904 relativeBx =
object.getBxOffset();
2905 channelID =
object.getExternalChannelId();
2913 std::vector<GlobalObject>
objType(nrObj, extSignalType);
2925 LogTrace(
"TriggerMenuParser") << externalCond <<
"\n" << std::endl;
2928 if (!insertConditionIntoMap(externalCond, chipNr)) {
2929 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate condition (" <<
name <<
")" << std::endl;
2933 (m_vecExternalTemplate[chipNr]).
push_back(externalCond);
2947 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
2948 <<
" (in parseCICADA) " << std::endl
2949 <<
" condition = " << condition << std::endl
2950 <<
" type = " <<
type << std::endl
2951 <<
" name = " <<
name << std::endl;
2952 const int nrObj = 1;
2955 std::vector<CICADATemplate::ObjectParameter> objParameter(nrObj);
2957 if (
int(condCICADA.
getObjects().size()) != nrObj) {
2958 edm::LogError(
"TriggerMenuParser") <<
" condCICADA objects: nrObj = " << nrObj
2959 <<
"condCICADA.getObjects().size() = " << condCICADA.
getObjects().size()
2965 int relativeBx =
object.getBxOffset();
2966 bool gEq = (
object.getComparisonOperator() == esComparisonOperator::GE);
2968 float lowerThresholdInd = 0;
2969 float upperThresholdInd = -1;
2971 const std::vector<L1TUtmCut>&
cuts =
object.getCuts();
2972 for (
size_t kk = 0;
kk <
cuts.size();
kk++) {
2975 switch (
cut.getCutType()) {
2976 case esCutType::CicadaScore:
2977 lowerThresholdInd =
cut.getMinimum().value;
2978 upperThresholdInd =
cut.getMaximum().value;
2982 objParameter[0].minCICADAThreshold = lowerThresholdInd;
2983 objParameter[0].maxCICADAThreshold = upperThresholdInd;
2993 std::ostringstream myCoutStream;
2994 cicadaCond.
print(myCoutStream);
2995 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2998 if (!insertConditionIntoMap(cicadaCond, chipNr)) {
2999 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate CICADA condition (" <<
name <<
")" << std::endl;
3003 (m_vecCICADATemplate[chipNr]).
push_back(cicadaCond);
3027 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
3028 <<
" (in parseCorrelation) " << std::endl
3029 <<
" condition = " << condition << std::endl
3030 <<
" particle = " << particle << std::endl
3031 <<
" type = " <<
type << std::endl
3032 <<
" name = " <<
name << std::endl;
3038 if (!insertConditionIntoMap(correlationCond, chipNr)) {
3039 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate correlation condition (" <<
name <<
")" << std::endl;
3050 const int nrObj = 2;
3053 int intGEq[nrObj] = {-1, -1};
3054 std::vector<GlobalObject>
objType(nrObj);
3055 std::vector<GtConditionCategory> condCateg(nrObj);
3058 const bool corrFlag =
true;
3059 int corrIndexVal[nrObj] = {-1, -1};
3067 const std::vector<L1TUtmCut>&
cuts = corrCond.
getCuts();
3068 for (
size_t jj = 0;
jj <
cuts.size();
jj++) {
3071 if (
cut.getCutType() == esCutType::ChargeCorrelation) {
3072 if (
cut.getData() ==
"ls")
3074 else if (
cut.getData() ==
"os")
3082 double minV =
cut.getMinimum().value;
3083 double maxV =
cut.getMaximum().value;
3090 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tDeltaEta Cut minV = " << minV
3091 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3092 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3096 cutType = cutType | 0x1;
3098 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tDeltaPhi Cut minV = " << minV
3099 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3100 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3104 cutType = cutType | 0x2;
3106 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tDeltaR Cut minV = " << minV
3107 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3108 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3112 cutType = cutType | 0x4;
3113 }
else if (
cut.getCutType() == esCutType::TwoBodyPt) {
3117 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tTPBT Cut minV = " << minV
3118 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3119 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3120 cutType = cutType | 0x20;
3122 (
cut.getCutType() == esCutType::MassDeltaR)) {
3123 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tMass Cut minV = " << minV
3124 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3125 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3130 if (corrCond.
getType() == esConditionType::TransverseMass) {
3131 cutType = cutType | 0x10;
3132 }
else if (corrCond.
getType() == esConditionType::InvariantMassDeltaR) {
3133 cutType = cutType | 0x80;
3135 cutType = cutType | 0x8;
3137 }
else if (
cut.getCutType() == esCutType::MassUpt) {
3138 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tMass Cut minV = " << minV
3139 <<
" Max = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3140 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3144 cutType = cutType | 0x40;
3153 edm::LogError(
"TriggerMenuParser") <<
"incorrect number of objects for the correlation condition " <<
name 3154 <<
" corrFlag " << corrFlag << std::endl;
3161 LogDebug(
"TriggerMenuParser") <<
" obj name = " <<
object.getName() <<
"\n";
3162 LogDebug(
"TriggerMenuParser") <<
" obj type = " <<
object.getType() <<
"\n";
3163 LogDebug(
"TriggerMenuParser") <<
" obj op = " <<
object.getComparisonOperator() <<
"\n";
3164 LogDebug(
"TriggerMenuParser") <<
" obj bx = " <<
object.getBxOffset() <<
"\n";
3201 parseMuonCorr(&
object, chipNr);
3202 corrIndexVal[
jj] = (m_corMuonTemplate[chipNr]).size() - 1;
3205 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3209 }
else if (
object.getType() == esObjectType::Egamma ||
object.getType() ==
esObjectType::Jet ||
3212 parseCaloCorr(&
object, chipNr);
3213 corrIndexVal[
jj] = (m_corCaloTemplate[chipNr]).size() - 1;
3216 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3217 switch (
object.getType()) {
3218 case esObjectType::Egamma: {
3232 }
else if (
object.getType() ==
esObjectType::ETM ||
object.getType() == esObjectType::ETMHF ||
3233 object.getType() == esObjectType::HTMHF ||
object.getType() == esObjectType::TOWERCOUNT ||
3236 parseEnergySumCorr(&
object, chipNr);
3237 corrIndexVal[
jj] = (m_corEnergySumTemplate[chipNr]).size() - 1;
3240 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3241 switch (
object.getType()) {
3248 case esObjectType::ETMHF: {
3251 case esObjectType::HTMHF: {
3254 case esObjectType::TOWERCOUNT: {
3263 edm::LogError(
"TriggerMenuParser") <<
"Illegal Object Type " <<
object.getType()
3264 <<
" for the correlation condition " <<
name << std::endl;
3273 if (intGEq[0] != intGEq[1]) {
3274 edm::LogError(
"TriggerMenuParser") <<
"Inconsistent GEq flags for sub-conditions " 3275 <<
" for the correlation condition " <<
name << std::endl;
3279 gEq = (intGEq[0] != 0);
3297 std::ostringstream myCoutStream;
3298 correlationCond.
print(myCoutStream);
3299 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
3305 (m_vecCorrelationTemplate[chipNr]).
push_back(correlationCond);
3331 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
3332 <<
" (in parseCorrelationThreeBody) " << std::endl
3333 <<
" condition = " << condition << std::endl
3334 <<
" particle = " << particle << std::endl
3335 <<
" type = " <<
type << std::endl
3336 <<
" name = " <<
name << std::endl;
3342 if (!insertConditionIntoMap(correlationThreeBodyCond, chipNr)) {
3343 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate correlation condition (" <<
name <<
")" << std::endl;
3351 const int nrObj = 3;
3354 std::vector<GlobalObject>
objType(nrObj);
3355 std::vector<GtConditionCategory> condCateg(nrObj);
3358 const bool corrFlag =
true;
3359 int corrIndexVal[nrObj] = {-1, -1, -1};
3369 const std::vector<L1TUtmCut>&
cuts = corrCond.
getCuts();
3370 for (
size_t lll = 0; lll <
cuts.size(); lll++) {
3373 if (
cut.getCutType() == esCutType::ChargeCorrelation) {
3374 if (
cut.getData() ==
"ls")
3376 else if (
cut.getData() ==
"os")
3385 double minV =
cut.getMinimum().value;
3386 double maxV =
cut.getMaximum().value;
3392 LogDebug(
"TriggerMenuParser") <<
"CutType: " <<
cut.getCutType() <<
"\tMass Cut minV = " << minV
3393 <<
"\tMass Cut maxV = " << maxV <<
" precMin = " <<
cut.getMinimum().index
3394 <<
" precMax = " <<
cut.getMaximum().index << std::endl;
3398 cutType = cutType | 0x8;
3399 }
else if (
cut.getCutType() == esCutType::MassDeltaR) {
3403 cutType = cutType | 0x80;
3411 edm::LogError(
"TriggerMenuParser") <<
"incorrect number of objects for the correlation condition " <<
name 3412 <<
" corrFlag " << corrFlag << std::endl;
3417 for (
size_t lll = 0; lll <
objects.size(); lll++) {
3419 LogDebug(
"TriggerMenuParser") <<
" obj name = " <<
object.getName() <<
"\n";
3420 LogDebug(
"TriggerMenuParser") <<
" obj type = " <<
object.getType() <<
"\n";
3421 LogDebug(
"TriggerMenuParser") <<
" obj bx = " <<
object.getBxOffset() <<
"\n";
3426 parseMuonCorr(&
object, chipNr);
3427 corrIndexVal[lll] = (m_corMuonTemplate[chipNr]).size() - 1;
3434 edm::LogError(
"TriggerMenuParser") <<
"Checked the object Type " <<
object.getType()
3435 <<
" for the correlation condition " <<
name 3436 <<
": no three muons in the event!" << std::endl;
3456 std::ostringstream myCoutStream;
3457 correlationThreeBodyCond.
print(myCoutStream);
3458 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
3464 (m_vecCorrelationThreeBodyTemplate[chipNr]).
push_back(correlationThreeBodyCond);
3490 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
3491 <<
" (in parseCorrelationWithOverlapRemoval) " << std::endl
3492 <<
" condition = " << condition << std::endl
3493 <<
" particle = " << particle << std::endl
3494 <<
" type = " <<
type << std::endl
3495 <<
" name = " <<
name << std::endl;
3501 if (!insertConditionIntoMap(correlationWORCond, chipNr)) {
3502 edm::LogError(
"TriggerMenuParser") <<
" Error: duplicate correlation condition (" <<
name <<
")" << std::endl;
3513 const int nrObj = 3;
3516 int intGEq[nrObj] = {-1, -1, -1};
3517 std::vector<GlobalObject>
objType(nrObj);
3518 std::vector<GtConditionCategory> condCateg(nrObj);
3521 const bool corrFlag =
true;
3522 int corrIndexVal[nrObj] = {-1, -1, -1};
3530 const std::vector<L1TUtmCut>&
cuts = corrCond.
getCuts();
3531 for (
size_t jj = 0;
jj <
cuts.size();
jj++) {
3534 if (
cut.getCutType() == esCutType::ChargeCorrelation) {
3535 if (
cut.getData() ==
"ls")
3537 else if (
cut.getData() ==
"os")
3545 double minV =
cut.getMinimum().value;
3546 double maxV =
cut.getMaximum().value;
3557 cutType = cutType | 0x1;
3563 cutType = cutType | 0x2;
3569 cutType = cutType | 0x4;
3575 cutType = cutType | 0x8;
3576 }
else if (
cut.getCutType() == esCutType::MassDeltaR) {
3580 cutType = cutType | 0x80;
3582 if (
cut.getCutType() == esCutType::OvRmDeltaEta) {
3587 cutType = cutType | 0x10;
3588 }
else if (
cut.getCutType() == esCutType::OvRmDeltaPhi) {
3593 cutType = cutType | 0x20;
3594 }
else if (
cut.getCutType() == esCutType::OvRmDeltaR) {
3599 cutType = cutType | 0x40;
3609 <<
"incorrect number of objects for the correlation condition with overlap removal " <<
name <<
" corrFlag " 3610 << corrFlag << std::endl;
3617 LogDebug(
"TriggerMenuParser") <<
" obj name = " <<
object.getName() <<
"\n";
3618 LogDebug(
"TriggerMenuParser") <<
" obj type = " <<
object.getType() <<
"\n";
3619 LogDebug(
"TriggerMenuParser") <<
" obj op = " <<
object.getComparisonOperator() <<
"\n";
3620 LogDebug(
"TriggerMenuParser") <<
" obj bx = " <<
object.getBxOffset() <<
"\n";
3621 LogDebug(
"TriggerMenuParser") <<
"type = done" << std::endl;
3658 parseMuonCorr(&
object, chipNr);
3659 corrIndexVal[
jj] = (m_corMuonTemplate[chipNr]).size() - 1;
3662 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3666 }
else if (
object.getType() == esObjectType::Egamma ||
object.getType() ==
esObjectType::Jet ||
3669 parseCaloCorr(&
object, chipNr);
3670 corrIndexVal[
jj] = (m_corCaloTemplate[chipNr]).size() - 1;
3673 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3674 switch (
object.getType()) {
3675 case esObjectType::Egamma: {
3689 }
else if (
object.getType() ==
esObjectType::ETM ||
object.getType() == esObjectType::ETMHF ||
3690 object.getType() == esObjectType::HTMHF ||
object.getType() == esObjectType::TOWERCOUNT ||
3693 parseEnergySumCorr(&
object, chipNr);
3694 corrIndexVal[
jj] = (m_corEnergySumTemplate[chipNr]).size() - 1;
3697 intGEq[
jj] = (
object.getComparisonOperator() == esComparisonOperator::GE);
3698 switch (
object.getType()) {
3705 case esObjectType::ETMHF: {
3708 case esObjectType::HTMHF: {
3711 case esObjectType::TOWERCOUNT: {
3720 edm::LogError(
"TriggerMenuParser") <<
"Illegal Object Type " <<
object.getType()
3721 <<
" for the correlation condition " <<
name << std::endl;
3730 if (intGEq[0] != intGEq[1]) {
3731 edm::LogError(
"TriggerMenuParser") <<
"Inconsistent GEq flags for sub-conditions " 3732 <<
" for the correlation condition " <<
name << std::endl;
3736 gEq = (intGEq[0] != 0);
3756 std::ostringstream myCoutStream;
3757 correlationWORCond.
print(myCoutStream);
3758 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
3764 (m_vecCorrelationWithOverlapRemovalTemplate[chipNr]).
push_back(correlationWORCond);
3786 if (algAlias.empty()) {
3788 LogDebug(
"TriggerMenuParser") <<
"\n No alias defined for algorithm. Alias set to algorithm name." 3789 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
3793 LogDebug(
"TriggerMenuParser") <<
"\n Alias defined for algorithm." 3794 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
3801 LogDebug(
"TriggerMenuParser") <<
" Logical expression: " << logExpression
3802 <<
" Chip number: " << chipNr << std::endl;
3808 LogDebug(
"TriggerMenuParser") <<
" Output pin: " << outputPin << std::endl;
3823 std::ostringstream myCoutStream;
3824 alg.
print(myCoutStream);
3825 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
3829 if (!insertAlgorithmIntoMap(alg)) {
unsigned int chargeCorrelation
unsigned int precOverlapRemovalPhiCut
constexpr int32_t ceil(float num)
long long maxOverlapRemovalEtaCutValue
void setCondGEq(const bool &cGEq)
void setModelVersion(const std::string &modelversion)
long long maxMassCutValue
void setAlgoAlias(const std::string &algoAliasValue)
const int getType() const
const std::vector< L1TUtmCut > & getCuts() const
void setConditionParameter(const std::vector< ObjectParameter > &objParameter)
set functions
void setCond0Index(const int &)
typedef for correlation three-body parameters
int algoBitNumber() const
get / set algorithm bit number
void setCorrelationThreeBodyParameter(const CorrelationThreeBodyParameter &corrThreeBodyParameter)
void setCond0Index(const int &)
void print(std::ostream &myCout) const override
print the condition
unsigned int chargeCorrelation
const int algoOutputPin(const int numberConditionChips, const int pinsOnConditionChip, const std::vector< int > &orderConditionChip) const
get the output pin on the condition chip for the algorithm
void setCond1Index(const int &)
void setCondType(const l1t::GtConditionType &cType)
void print(std::ostream &myCout) const override
print the condition
void setConditionParameter(const std::vector< ObjectParameter > &objParameter)
set functions
void setCorrelationParameter(const CorrelationParameter &corrParameter)
long long minMassCutValue
const std::vector< L1TUtmObject > & getObjects() const
void print(std::ostream &myCout) const override
print the condition
void print(std::ostream &myCout) const override
print condition
Log< level::Error, false > LogError
const int getComparisonOperator() const
const std::string & getName() const
void setCondRelativeBx(const int &cRelativeBx)
std::vector< std::pair< double, double > > phiBins
void setCond0Category(const l1t::GtConditionCategory &)
void print(std::ostream &myCout) const override
print the condition
void setCondChipNr(const int &cChipNr)
const int algoChipNumber() const
get / set algorithm bit number
long long minMassCutValue
void print(std::ostream &myCout) const override
print the condition
long long maxMassCutValue
void setCorrelationWithOverlapRemovalParameter(const CorrelationWithOverlapRemovalParameter &corrParameter)
const int getBxOffset() const
void setCond0Category(const l1t::GtConditionCategory &)
Container::value_type value_type
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
void setExternalChannel(unsigned int extCh)
set functions
long long minOverlapRemovalEtaCutValue
void setCond0Index(const int &)
virtual void print(std::ostream &myCout) const
print condition
const int getType() const
void print(std::ostream &myCout) const override
print the condition
long long minMassCutValue
long long minTBPTCutValue
void setCond1Category(const l1t::GtConditionCategory &)
unsigned int precOverlapRemovalEtaCut
long long minOverlapRemovalPhiCutValue
void setCond1Index(const int &)
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
unsigned int chargeCorrelation
void setConditionParameter(const std::vector< ObjectParameter > &objParameter, const CorrelationParameter &corrParameter)
set functions
const std::string & getName() const
void setObjectType(const std::vector< l1t::GlobalObject > &objType)
void setCond1Category(const l1t::GtConditionCategory &)
void setCond2Category(const l1t::GtConditionCategory &)
void setCond2Index(const int &)
long long maxOverlapRemovalDRCutValue
void setCond0Category(const l1t::GtConditionCategory &)
void print(std::ostream &myCout) const override
print the condition
void print(std::ostream &myCout) const override
print the condition
const std::vector< L1TUtmCut > & getCuts() const
unsigned int precOverlapRemovalDRCut
std::vector< std::pair< double, double > > etBins
void setAlgoChipNumber(const int algoChipNumberValue)
deadvectors [0] push_back({0.0175431, 0.538005, 6.80997, 13.29})
void setConditionParameter(const std::vector< ObjectParameter > &objParameter)
typedef for a single object template
long long maxOverlapRemovalPhiCutValue
void setConditionParameter(const std::vector< ObjectParameter > &objParameter, const CorrelationParameter &corrParameter)
set functions
typedef for correlation parameters
long long maxTBPTCutValue
char data[epos_bytes_allocation]
long long minOverlapRemovalDRCutValue
std::string const & algoAlias() const
get / set algorithm alias
std::vector< std::pair< double, double > > uptBins
void setConditionParameter(const std::vector< ObjectParameter > &)
set functions
typedef for correlation parameters
void print(std::ostream &myCout) const override
print the condition
void setCond1Category(const l1t::GtConditionCategory &)
typedef for correlation parameters
unsigned int chargeCorrelation
void setCond2Category(const l1t::GtConditionCategory &)
std::map< std::string, GlobalAlgorithm > AlgorithmMap
map containing the algorithms
if(threadIdxLocalY==0 &&threadIdxLocalX==0)
Power< A, B >::type pow(const A &a, const B &b)
void setConditionParameter(const std::vector< ObjectParameter > &)
set functions
const std::string algoName() const
get / set algorithm name
void setCond2Index(const int &)
long long maxMassCutValue
std::vector< std::pair< double, double > > etaBins
void setCond1Index(const int &)