28 #include <boost/cstdint.hpp>
37 #include "tmEventSetup/esTriggerMenu.hh"
38 #include "tmEventSetup/esAlgorithm.hh"
39 #include "tmEventSetup/esCondition.hh"
40 #include "tmEventSetup/esObject.hh"
41 #include "tmEventSetup/esCut.hh"
42 #include "tmEventSetup/esScale.hh"
43 #include "tmGrammar/Algorithm.hh"
49 m_triggerMenuInterface(
"NULL"),
50 m_triggerMenuName(
"NULL"), m_triggerMenuImplementation(
"NULL"), m_scaleDbKey(
"NULL")
69 const unsigned int& numberConditionChipsValue) {
71 m_numberConditionChips = numberConditionChipsValue;
78 m_pinsOnConditionChip = pinsOnConditionChipValue;
85 const std::vector<int>& orderConditionChipValue) {
87 m_orderConditionChip = orderConditionChipValue;
93 const unsigned int& numberPhysTriggersValue) {
95 m_numberPhysTriggers = numberPhysTriggersValue;
102 m_conditionMap = condMap;
107 m_triggerMenuInterface = menuInterface;
111 m_triggerMenuName = menuName;
115 m_triggerMenuImplementation = menuImplementation;
120 m_scaleDbKey = scaleKey;
125 const std::vector<std::vector<MuonTemplate> >& vecMuonTempl) {
127 m_vecMuonTemplate = vecMuonTempl;
131 const std::vector<std::vector<CaloTemplate> >& vecCaloTempl) {
133 m_vecCaloTemplate = vecCaloTempl;
137 const std::vector<std::vector<EnergySumTemplate> >& vecEnergySumTempl) {
139 m_vecEnergySumTemplate = vecEnergySumTempl;
145 const std::vector<std::vector<ExternalTemplate> >& vecExternalTempl) {
147 m_vecExternalTemplate = vecExternalTempl;
152 const std::vector<std::vector<CorrelationTemplate> >& vecCorrelationTempl) {
154 m_vecCorrelationTemplate = vecCorrelationTempl;
160 const std::vector<std::vector<MuonTemplate> >& corMuonTempl) {
162 m_corMuonTemplate = corMuonTempl;
166 const std::vector<std::vector<CaloTemplate> >& corCaloTempl) {
168 m_corCaloTemplate = corCaloTempl;
172 const std::vector<std::vector<EnergySumTemplate> >& corEnergySumTempl) {
174 m_corEnergySumTemplate = corEnergySumTempl;
182 m_algorithmMap = algoMap;
187 m_algorithmAliasMap = algoMap;
200 m_conditionMap.resize(m_numberConditionChips);
202 m_vecMuonTemplate.resize(m_numberConditionChips);
203 m_vecCaloTemplate.resize(m_numberConditionChips);
204 m_vecEnergySumTemplate.resize(m_numberConditionChips);
205 m_vecExternalTemplate.resize(m_numberConditionChips);
207 m_vecCorrelationTemplate.resize(m_numberConditionChips);
208 m_corMuonTemplate.resize(m_numberConditionChips);
209 m_corCaloTemplate.resize(m_numberConditionChips);
210 m_corEnergySumTemplate.resize(m_numberConditionChips);
212 using namespace tmeventsetup;
213 using namespace Algorithm;
215 const esTriggerMenu*
menu =
reinterpret_cast<const esTriggerMenu*
> (utmMenu);
218 m_triggerMenuDescription =
menu->getComment();
219 m_triggerMenuDate =
menu->getDatetime();
220 m_triggerMenuImplementation =
menu->getFirmwareUuid();
221 m_triggerMenuName =
menu->getName();
222 m_triggerMenuInterface =
menu->getVersion();
224 const std::map<std::string, esAlgorithm>& algoMap =
menu->getAlgorithmMap();
225 const std::map<std::string, esCondition>& condMap =
menu->getConditionMap();
226 const std::map<std::string, esScale>& scaleMap =
menu->getScaleMap();
229 m_gtScales.setScalesName(
menu->getScaleSetName() );
230 parseScales(scaleMap);
234 for (std::map<std::string, esAlgorithm>::const_iterator cit = algoMap.begin();
235 cit != algoMap.end(); cit++)
241 const esAlgorithm&
algo = cit->second;
244 parseAlgorithm(algo,chipNr);
247 const std::vector<std::string>& rpn_vec = algo.getRpnVector();
248 for (
size_t ii = 0;
ii < rpn_vec.size();
ii++)
251 if (isGate(token))
continue;
253 const esCondition& condition = condMap.find(token)->second;
256 if ((m_conditionMap[chipNr]).
count(condition.getName()) == 0) {
259 if(condition.getType() == esConditionType::SingleEgamma ||
260 condition.getType() == esConditionType::DoubleEgamma ||
261 condition.getType() == esConditionType::TripleEgamma ||
262 condition.getType() == esConditionType::QuadEgamma ||
263 condition.getType() == esConditionType::SingleTau ||
264 condition.getType() == esConditionType::DoubleTau ||
265 condition.getType() == esConditionType::TripleTau ||
266 condition.getType() == esConditionType::QuadTau ||
267 condition.getType() == esConditionType::SingleJet ||
268 condition.getType() == esConditionType::DoubleJet ||
269 condition.getType() == esConditionType::TripleJet ||
270 condition.getType() == esConditionType::QuadJet )
272 parseCalo(condition,chipNr,
false);
275 }
else if(condition.getType() == esConditionType::TotalEt ||
276 condition.getType() == esConditionType::TotalHt ||
277 condition.getType() == esConditionType::MissingEt ||
278 condition.getType() == esConditionType::MissingHt )
280 parseEnergySum(condition,chipNr,
false);
285 condition.getType() == esConditionType::TripleMuon ||
286 condition.getType() == esConditionType::QuadMuon )
288 parseMuon(condition,chipNr,
false);
292 }
else if(condition.getType() == esConditionType::MuonMuonCorrelation ||
293 condition.getType() == esConditionType::MuonEsumCorrelation ||
294 condition.getType() == esConditionType::CaloMuonCorrelation ||
295 condition.getType() == esConditionType::CaloCaloCorrelation ||
296 condition.getType() == esConditionType::CaloEsumCorrelation ||
299 parseCorrelation(condition,chipNr);
302 }
else if(condition.getType() == esConditionType::Externals )
304 parseExternal(condition,chipNr);
323 m_triggerMenuInterfaceDate = val;
329 m_triggerMenuInterfaceAuthor = val;
335 m_triggerMenuInterfaceDescription = val;
342 m_triggerMenuDate = val;
348 m_triggerMenuAuthor = val;
354 m_triggerMenuDescription = val;
360 m_algorithmImplementation = val;
374 for (std::vector<ConditionMap>::iterator itCondOnChip = m_conditionMap.begin(); itCondOnChip
375 != m_conditionMap.end(); itCondOnChip++) {
379 itCondOnChip->clear();
384 m_algorithmMap.clear();
394 <<
" Trying to insert condition \"" << cName <<
"\" in the condition map." ;
397 if ((m_conditionMap[chipNr]).
count(cName) != 0) {
398 LogTrace(
"TriggerMenuParser") <<
" Condition " << cName
399 <<
" already exists - not inserted!" << std::endl;
403 (m_conditionMap[chipNr])[cName] = &cond;
405 <<
" OK - condition inserted!"
422 if (m_algorithmMap.count(algName) != 0) {
423 LogTrace(
"TriggerMenuParser") <<
" Algorithm \"" << algName
424 <<
"\"already exists in the algorithm map- not inserted!" << std::endl;
428 if (m_algorithmAliasMap.count(algAlias) != 0) {
429 LogTrace(
"TriggerMenuParser") <<
" Algorithm alias \"" << algAlias
430 <<
"\"already exists in the algorithm alias map- not inserted!" << std::endl;
436 if ((bitNumber < 0) || (bitNumber >= static_cast<int>(m_numberPhysTriggers))) {
437 LogTrace(
"TriggerMenuParser") <<
" Bit number " << bitNumber
438 <<
" outside allowed range [0, " << m_numberPhysTriggers
439 <<
") - algorithm not inserted!" << std::endl;
444 if (m_algorithmMap.size() >= m_numberPhysTriggers) {
445 LogTrace(
"TriggerMenuParser") <<
" More than maximum allowed "
446 << m_numberPhysTriggers <<
" algorithms in the algorithm map - not inserted!"
452 int chipNr = alg.
algoChipNumber(static_cast<int>(m_numberConditionChips),
453 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
455 if ((chipNr < 0) || (chipNr > static_cast<int>(m_numberConditionChips))) {
456 LogTrace(
"TriggerMenuParser") <<
" Chip number " << chipNr
457 <<
" outside allowed range [0, " << m_numberConditionChips
458 <<
") - algorithm not inserted!" << std::endl;
463 int outputPin = alg.
algoOutputPin(static_cast<int>(m_numberConditionChips),
464 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
466 if ((outputPin < 0) || (outputPin > static_cast<int>(m_pinsOnConditionChip))) {
467 LogTrace(
"TriggerMenuParser") <<
" Output pin " << outputPin
468 <<
" outside allowed range [0, " << m_pinsOnConditionChip
469 <<
"] - algorithm not inserted!" << std::endl;
474 for (
CItAlgo itAlgo = m_algorithmMap.begin(); itAlgo != m_algorithmMap.end(); itAlgo++) {
476 int iPin = (itAlgo->second).algoOutputPin( static_cast<int>(m_numberConditionChips),
477 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
479 int iChip = (itAlgo->second).algoChipNumber(static_cast<int>(m_numberConditionChips),
480 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
482 if ( (outputPin == iPin) && (chipNr == iChip)) {
483 LogTrace(
"TriggerMenuParser") <<
" Output pin " << outputPin
484 <<
" is the same as for algorithm " << iName
485 <<
"\n from the same chip number " << chipNr <<
" - algorithm not inserted!"
493 m_algorithmMap[algName] = alg;
494 m_algorithmAliasMap[algAlias] = alg;
506 std::stringstream
ss;
511 std::stringstream
ss;
512 ss << std::setfill(
'0');
513 ss << std::setw(4) << date.year() <<
"-" << std::setw(2) << date.month() <<
"-" << std::setw(2) << date.day() <<
"T";
514 ss << std::setw(2) << date.hours() <<
":" << std::setw(2) << date.minutes() <<
":" << std::setw(2) << date.seconds();
519 std::stringstream
ss;
526 std::stringstream
ss;
543 using namespace tmeventsetup;
556 for (std::map<std::string, esScale>::const_iterator cit = scaleMap.begin();
557 cit != scaleMap.end(); cit++)
559 const esScale&
scale = cit->second;
563 else if (scale.getObjectType() == esObjectType::Egamma) scaleParam = &egScales;
572 if(scaleParam != 0) {
573 switch(scale.getScaleType()) {
574 case esScaleType::EtScale: {
575 scaleParam->
etMin = scale.getMinimum();
576 scaleParam->
etMax = scale.getMaximum();
577 scaleParam->
etStep = scale.getStep();
580 const std::vector<esBin> binsV = scale.getBins();
581 for(
unsigned int i=0;
i<binsV.size();
i++) {
582 const esBin&
bin = binsV.at(
i);
583 std::pair<double, double> binLimits(bin.minimum, bin.maximum);
584 scaleParam->
etBins.push_back(binLimits);
603 case esScaleType::EtaScale: {
604 scaleParam->
etaMin = scale.getMinimum();
605 scaleParam->
etaMax = scale.getMaximum();
606 scaleParam->
etaStep = scale.getStep();
609 const std::vector<esBin> binsV = scale.getBins();
610 for(
unsigned int i=0;
i<binsV.size();
i++) {
611 const esBin&
bin = binsV.at(
i);
612 std::pair<double, double> binLimits(bin.minimum, bin.maximum);
613 scaleParam->
etaBins.push_back(binLimits);
617 case esScaleType::PhiScale: {
618 scaleParam->
phiMin = scale.getMinimum();
619 scaleParam->
phiMax = scale.getMaximum();
620 scaleParam->
phiStep = scale.getStep();
623 const std::vector<esBin> binsV = scale.getBins();
624 for(
unsigned int i=0;
i<binsV.size();
i++) {
625 const esBin&
bin = binsV.at(
i);
626 std::pair<double, double> binLimits(bin.minimum, bin.maximum);
627 scaleParam->
phiBins.push_back(binLimits);
639 m_gtScales.setMuonScales(muScales);
640 m_gtScales.setEGScales(egScales);
641 m_gtScales.setTauScales(tauScales);
642 m_gtScales.setJetScales(jetScales);
643 m_gtScales.setETTScales(ettScales);
644 m_gtScales.setETMScales(etmScales);
645 m_gtScales.setHTTScales(httScales);
646 m_gtScales.setHTMScales(htmScales);
666 unsigned int chipNr,
const bool corrFlag) {
668 using namespace tmeventsetup;
689 }
else if (condMu.getType() == esConditionType::TripleMuon) {
693 }
else if (condMu.getType() == esConditionType::QuadMuon) {
698 edm::LogError(
"TriggerMenuParser") <<
"Wrong type for muon-condition ("
699 <<
type <<
")" << std::endl;
704 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for muon-condition (" <<
type
705 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
710 <<
"\n ****************************************** "
712 <<
"\n condition = " << condition
713 <<
"\n particle = " << particle
714 <<
"\n type = " <<
type
715 <<
"\n name = " <<
name
723 std::vector<MuonTemplate::ObjectParameter> objParameter(nrObj);
729 std::vector<boost::uint64_t> tmpValues((nrObj > 2) ? nrObj : 2);
730 tmpValues.reserve( nrObj );
732 if(
int(condMu.getObjects().size())!=nrObj ){
733 edm::LogError(
"TriggerMenuParser") <<
" condMu objects: nrObj = " << nrObj
734 <<
"condMu.getObjects().size() = "
735 << condMu.getObjects().size()
742 unsigned int chargeCorrelation = 1;
743 const std::vector<esCut>&
cuts = condMu.getCuts();
747 if(cut.getCutType() == esCutType::ChargeCorrelation) {
748 if( cut.getData()==
"ls" ) chargeCorrelation = 2;
749 else if( cut.getData()==
"os" ) chargeCorrelation = 4;
750 else chargeCorrelation = 1;
755 corrParameter.chargeCorrelation = chargeCorrelation;
766 const std::vector<esObject>& objects = condMu.getObjects();
767 for (
size_t jj = 0;
jj < objects.size();
jj++) {
769 const esObject
object = objects.at(
jj);
773 relativeBx =
object.getBxOffset();
776 int upperThresholdInd = -1;
777 int lowerThresholdInd = 0;
779 unsigned int etaWindow1Lower=-1, etaWindow1Upper=-1, etaWindow2Lower=-1, etaWindow2Upper=-1;
781 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
782 int isolationLUT = 0xF;
784 int qualityLUT = 0xFFFF;
786 const std::vector<esCut>&
cuts =
object.getCuts();
787 for (
size_t kk = 0;
kk < cuts.size();
kk++)
789 const esCut
cut = cuts.at(
kk);
791 switch(cut.getCutType()){
792 case esCutType::Threshold:
793 lowerThresholdInd = cut.getMinimum().index;
794 upperThresholdInd = cut.getMaximum().index;
800 etaWindow1Lower = cut.getMinimum().index;
801 etaWindow1Upper = cut.getMaximum().index;
802 }
else if(cntEta == 1) {
803 etaWindow2Lower = cut.getMinimum().index;
804 etaWindow2Upper = cut.getMaximum().index;
806 edm::LogError(
"TriggerMenuParser") <<
"Too Many Eta Cuts for muon-condition ("
807 << particle <<
")" << std::endl;
817 phiWindow1Lower = cut.getMinimum().index;
818 phiWindow1Upper = cut.getMaximum().index;
819 }
else if(cntPhi == 1) {
820 phiWindow2Lower = cut.getMinimum().index;
821 phiWindow2Upper = cut.getMaximum().index;
823 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for muon-condition ("
824 << particle <<
")" << std::endl;
831 case esCutType::Charge:
832 std::cout <<
"Found Charge Cut " << std::endl;
833 if( cut.getData()==
"positive" ) charge = 0;
834 else if( cut.getData()==
"negative" ) charge = 1;
839 qualityLUT = l1tstr2int(cut.getData());
842 case esCutType::Isolation: {
844 isolationLUT = l1tstr2int(cut.getData());
855 objParameter[cnt].ptHighThreshold = upperThresholdInd;
856 objParameter[cnt].ptLowThreshold = lowerThresholdInd;
858 objParameter[cnt].etaWindow1Lower = etaWindow1Lower;
859 objParameter[cnt].etaWindow1Upper = etaWindow1Upper;
860 objParameter[cnt].etaWindow2Lower = etaWindow2Lower;
861 objParameter[cnt].etaWindow2Upper = etaWindow2Upper;
863 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
864 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
865 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
866 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
869 objParameter[cnt].enableMip =
false;
870 objParameter[cnt].enableIso =
false;
871 objParameter[cnt].requestIso =
false;
873 objParameter[cnt].charge =
charge;
874 objParameter[cnt].qualityLUT = qualityLUT;
875 objParameter[cnt].isolationLUT = isolationLUT;
883 std::vector<L1GtObject> objType(nrObj,
Mu);
899 std::ostringstream myCoutStream;
900 muonCond.
print(myCoutStream);
901 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
905 if ( !insertConditionIntoMap(muonCond, chipNr)) {
907 <<
" Error: duplicate condition (" <<
name <<
")"
912 LogDebug(
"TriggerMenuParser") <<
"Added Condition " <<
name <<
" to the ConditionMap" << std::endl;
915 (m_corMuonTemplate[chipNr]).push_back(muonCond);
918 LogDebug(
"TriggerMenuParser") <<
"Added Condition " <<
name <<
" to the vecMuonTemplate vector" << std::endl;
919 (m_vecMuonTemplate[chipNr]).push_back(muonCond);
930 unsigned int chipNr) {
934 using namespace tmeventsetup;
948 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for muon-condition (" <<
type
949 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
954 <<
"\n ****************************************** "
956 <<
"\n condition = " << condition
957 <<
"\n particle = " << particle
958 <<
"\n type = " <<
type
959 <<
"\n name = " <<
name
967 std::vector<MuonTemplate::ObjectParameter> objParameter(nrObj);
973 std::vector<boost::uint64_t> tmpValues((nrObj > 2) ? nrObj : 2);
974 tmpValues.reserve( nrObj );
980 unsigned int chargeCorrelation = 0;
981 if( str_chargeCorrelation==
"ig" ) chargeCorrelation = 1;
982 else if( str_chargeCorrelation==
"ls" ) chargeCorrelation = 2;
983 else if( str_chargeCorrelation==
"os" ) chargeCorrelation = 4;
986 corrParameter.chargeCorrelation = chargeCorrelation;
999 relativeBx = corrMu->getBxOffset();
1002 int upperThresholdInd = -1;
1003 int lowerThresholdInd = 0;
1005 unsigned int etaWindow1Lower=-1, etaWindow1Upper=-1, etaWindow2Lower=-1, etaWindow2Upper=-1;
1007 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
1008 int isolationLUT = 0xF;
1010 int qualityLUT = 0xFFFF;
1012 const std::vector<esCut>&
cuts = corrMu->getCuts();
1017 switch(cut.getCutType()){
1018 case esCutType::Threshold:
1019 lowerThresholdInd = cut.getMinimum().index;
1020 upperThresholdInd = cut.getMaximum().index;
1026 etaWindow1Lower = cut.getMinimum().index;
1027 etaWindow1Upper = cut.getMaximum().index;
1028 }
else if(cntEta == 1) {
1029 etaWindow2Lower = cut.getMinimum().index;
1030 etaWindow2Upper = cut.getMaximum().index;
1032 edm::LogError(
"TriggerMenuParser") <<
"Too Many Eta Cuts for muon-condition ("
1033 << particle <<
")" << std::endl;
1043 phiWindow1Lower = cut.getMinimum().index;
1044 phiWindow1Upper = cut.getMaximum().index;
1045 }
else if(cntPhi == 1) {
1046 phiWindow2Lower = cut.getMinimum().index;
1047 phiWindow2Upper = cut.getMaximum().index;
1049 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for muon-condition ("
1050 << particle <<
")" << std::endl;
1057 case esCutType::Charge:
1058 std::cout <<
"Found Charge Cut " << std::endl;
1059 if( cut.getData()==
"positive" )
charge = 0;
1060 else if( cut.getData()==
"negative" )
charge = 1;
1065 qualityLUT = l1tstr2int(cut.getData());
1068 case esCutType::Isolation: {
1070 isolationLUT = l1tstr2int(cut.getData());
1081 objParameter[0].ptHighThreshold = upperThresholdInd;
1082 objParameter[0].ptLowThreshold = lowerThresholdInd;
1084 objParameter[0].etaWindow1Lower = etaWindow1Lower;
1085 objParameter[0].etaWindow1Upper = etaWindow1Upper;
1086 objParameter[0].etaWindow2Lower = etaWindow2Lower;
1087 objParameter[0].etaWindow2Upper = etaWindow2Upper;
1089 objParameter[0].phiWindow1Lower = phiWindow1Lower;
1090 objParameter[0].phiWindow1Upper = phiWindow1Upper;
1091 objParameter[0].phiWindow2Lower = phiWindow2Lower;
1092 objParameter[0].phiWindow2Upper = phiWindow2Upper;
1095 objParameter[0].enableMip =
false;
1096 objParameter[0].enableIso =
false;
1097 objParameter[0].requestIso =
false;
1099 objParameter[0].charge =
charge;
1100 objParameter[0].qualityLUT = qualityLUT;
1101 objParameter[0].isolationLUT = isolationLUT;
1105 std::vector<L1GtObject> objType(nrObj,
Mu);
1118 std::ostringstream myCoutStream;
1119 muonCond.
print(myCoutStream);
1120 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1124 if ( !insertConditionIntoMap(muonCond, chipNr)) {
1126 <<
" Error: duplicate condition (" <<
name <<
")"
1131 LogDebug(
"TriggerMenuParser") <<
"Added Condition " <<
name <<
" to the ConditionMap" << std::endl;
1132 (m_corMuonTemplate[chipNr]).push_back(muonCond);
1152 unsigned int chipNr,
const bool corrFlag) {
1156 using namespace tmeventsetup;
1166 <<
"\n ****************************************** "
1167 <<
"\n (in parseCalo) "
1168 <<
"\n condition = " << condition
1169 <<
"\n particle = " << particle
1170 <<
"\n type = " <<
type
1171 <<
"\n name = " <<
name
1182 if (condCalo.getType() == esConditionType::SingleEgamma) {
1187 }
else if (condCalo.getType() == esConditionType::DoubleEgamma) {
1192 }
else if (condCalo.getType() == esConditionType::TripleEgamma) {
1197 }
else if (condCalo.getType() == esConditionType::QuadEgamma) {
1202 }
else if (condCalo.getType() == esConditionType::SingleJet) {
1207 }
else if (condCalo.getType() == esConditionType::DoubleJet) {
1212 }
else if (condCalo.getType() == esConditionType::TripleJet) {
1217 }
else if (condCalo.getType() == esConditionType::QuadJet) {
1222 }
else if (condCalo.getType() == esConditionType::SingleTau) {
1227 }
else if (condCalo.getType() == esConditionType::DoubleTau) {
1232 }
else if (condCalo.getType() == esConditionType::TripleTau) {
1237 }
else if (condCalo.getType() == esConditionType::QuadTau) {
1243 edm::LogError(
"TriggerMenuParser") <<
"Wrong particle for calo-condition ("
1244 << particle <<
")" << std::endl;
1251 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for calo-condition (" <<
type
1252 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
1259 std::vector<CaloTemplate::ObjectParameter> objParameter(nrObj);
1265 std::vector<boost::uint64_t> tmpValues((nrObj > 1) ? nrObj : 1);
1266 tmpValues.reserve( nrObj );
1269 if(
int(condCalo.getObjects().size())!=nrObj ){
1270 edm::LogError(
"TriggerMenuParser") <<
" condCalo objects: nrObj = " << nrObj
1271 <<
"condCalo.getObjects().size() = "
1272 << condCalo.getObjects().size()
1288 const std::vector<esObject>& objects = condCalo.getObjects();
1289 for (
size_t jj = 0;
jj < objects.size();
jj++) {
1291 const esObject
object = objects.at(
jj);
1295 relativeBx =
object.getBxOffset();
1298 int upperThresholdInd = -1;
1299 int lowerThresholdInd = 0;
1301 unsigned int etaWindow1Lower=-1, etaWindow1Upper=-1, etaWindow2Lower=-1, etaWindow2Upper=-1;
1303 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
1304 int isolationLUT = 0xF;
1305 int qualityLUT = 0xF;
1308 const std::vector<esCut>&
cuts =
object.getCuts();
1309 for (
size_t kk = 0;
kk < cuts.size();
kk++)
1311 const esCut
cut = cuts.at(
kk);
1313 switch(cut.getCutType()){
1314 case esCutType::Threshold:
1315 lowerThresholdInd = cut.getMinimum().index;
1316 upperThresholdInd = cut.getMaximum().index;
1321 etaWindow1Lower = cut.getMinimum().index;
1322 etaWindow1Upper = cut.getMaximum().index;
1323 }
else if(cntEta == 1) {
1324 etaWindow2Lower = cut.getMinimum().index;
1325 etaWindow2Upper = cut.getMaximum().index;
1327 edm::LogError(
"TriggerMenuParser") <<
"Too Many Eta Cuts for calo-condition ("
1328 << particle <<
")" << std::endl;
1338 phiWindow1Lower = cut.getMinimum().index;
1339 phiWindow1Upper = cut.getMaximum().index;
1340 }
else if(cntPhi == 1) {
1341 phiWindow2Lower = cut.getMinimum().index;
1342 phiWindow2Upper = cut.getMaximum().index;
1344 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for calo-condition ("
1345 << particle <<
")" << std::endl;
1352 case esCutType::Charge: {
1354 edm::LogError(
"TriggerMenuParser") <<
"No charge cut for calo-condition ("
1355 << particle <<
")" << std::endl;
1361 qualityLUT = l1tstr2int(cut.getData());
1364 case esCutType::Isolation: {
1366 isolationLUT = l1tstr2int(cut.getData());
1376 objParameter[cnt].etHighThreshold = upperThresholdInd;
1377 objParameter[cnt].etLowThreshold = lowerThresholdInd;
1378 objParameter[cnt].etaWindow1Lower = etaWindow1Lower;
1379 objParameter[cnt].etaWindow1Upper = etaWindow1Upper;
1380 objParameter[cnt].etaWindow2Lower = etaWindow2Lower;
1381 objParameter[cnt].etaWindow2Upper = etaWindow2Upper;
1382 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
1383 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
1384 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
1385 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
1386 objParameter[cnt].isolationLUT = isolationLUT;
1387 objParameter[cnt].qualityLUT = qualityLUT;
1391 <<
"\n Calo ET high thresholds (hex) for calo object " << caloObjType <<
" " << cnt <<
" = "
1392 << std::hex << objParameter[cnt].etLowThreshold <<
" - " << objParameter[cnt].etHighThreshold
1393 <<
"\n etaWindow Lower / Upper for calo object " << cnt <<
" = 0x"
1394 << objParameter[cnt].etaWindow1Lower <<
" / 0x" << objParameter[cnt].etaWindow1Upper
1395 <<
"\n etaWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x"
1396 << objParameter[cnt].etaWindow2Lower <<
" / 0x" << objParameter[cnt].etaWindow2Upper
1397 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x"
1398 << objParameter[cnt].phiWindow1Lower <<
" / 0x" << objParameter[cnt].phiWindow1Upper
1399 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x"
1400 << objParameter[cnt].phiWindow2Lower <<
" / 0x" << objParameter[cnt].phiWindow2Upper
1401 <<
"\n Isolation LUT for calo object " << cnt <<
" = 0x"
1402 << objParameter[cnt].isolationLUT
1403 <<
"\n Quality LUT for calo object " << cnt <<
" = 0x"
1404 << objParameter[cnt].qualityLUT <<
std::dec
1413 std::vector<L1GtObject> objType(nrObj, caloObjType);
1435 std::ostringstream myCoutStream;
1436 caloCond.
print(myCoutStream);
1437 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1443 if ( !insertConditionIntoMap(caloCond, chipNr)) {
1446 <<
" Error: duplicate condition (" <<
name <<
")"
1454 (m_corCaloTemplate[chipNr]).push_back(caloCond);
1457 (m_vecCaloTemplate[chipNr]).push_back(caloCond);
1481 unsigned int chipNr) {
1485 using namespace tmeventsetup;
1495 <<
"\n ****************************************** "
1496 <<
"\n (in parseCalo) "
1497 <<
"\n condition = " << condition
1498 <<
"\n particle = " << particle
1499 <<
"\n type = " <<
type
1500 <<
"\n name = " <<
name
1512 if (corrCalo->getType() == esObjectType::Egamma) {
1519 edm::LogError(
"TriggerMenuParser") <<
"Wrong particle for calo-condition ("
1520 << particle <<
")" << std::endl;
1528 edm::LogError(
"TriggerMenuParser") <<
"Unknown type for calo-condition (" <<
type
1529 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
1536 std::vector<CaloTemplate::ObjectParameter> objParameter(nrObj);
1542 std::vector<boost::uint64_t> tmpValues((nrObj > 1) ? nrObj : 1);
1543 tmpValues.reserve( nrObj );
1555 relativeBx = corrCalo->getBxOffset();
1558 int upperThresholdInd = -1;
1559 int lowerThresholdInd = 0;
1561 unsigned int etaWindow1Lower=-1, etaWindow1Upper=-1, etaWindow2Lower=-1, etaWindow2Upper=-1;
1563 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
1564 int isolationLUT = 0xF;
1565 int qualityLUT = 0xF;
1568 const std::vector<esCut>&
cuts = corrCalo->getCuts();
1573 switch(cut.getCutType()){
1574 case esCutType::Threshold:
1575 lowerThresholdInd = cut.getMinimum().index;
1576 upperThresholdInd = cut.getMaximum().index;
1581 etaWindow1Lower = cut.getMinimum().index;
1582 etaWindow1Upper = cut.getMaximum().index;
1583 }
else if(cntEta == 1) {
1584 etaWindow2Lower = cut.getMinimum().index;
1585 etaWindow2Upper = cut.getMaximum().index;
1587 edm::LogError(
"TriggerMenuParser") <<
"Too Many Eta Cuts for calo-condition ("
1588 << particle <<
")" << std::endl;
1598 phiWindow1Lower = cut.getMinimum().index;
1599 phiWindow1Upper = cut.getMaximum().index;
1600 }
else if(cntPhi == 1) {
1601 phiWindow2Lower = cut.getMinimum().index;
1602 phiWindow2Upper = cut.getMaximum().index;
1604 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for calo-condition ("
1605 << particle <<
")" << std::endl;
1612 case esCutType::Charge: {
1614 edm::LogError(
"TriggerMenuParser") <<
"No charge cut for calo-condition ("
1615 << particle <<
")" << std::endl;
1621 qualityLUT = l1tstr2int(cut.getData());
1624 case esCutType::Isolation: {
1626 isolationLUT = l1tstr2int(cut.getData());
1636 objParameter[0].etLowThreshold = lowerThresholdInd;
1637 objParameter[0].etHighThreshold = upperThresholdInd;
1638 objParameter[0].etaWindow1Lower = etaWindow1Lower;
1639 objParameter[0].etaWindow1Upper = etaWindow1Upper;
1640 objParameter[0].etaWindow2Lower = etaWindow2Lower;
1641 objParameter[0].etaWindow2Upper = etaWindow2Upper;
1642 objParameter[0].phiWindow1Lower = phiWindow1Lower;
1643 objParameter[0].phiWindow1Upper = phiWindow1Upper;
1644 objParameter[0].phiWindow2Lower = phiWindow2Lower;
1645 objParameter[0].phiWindow2Upper = phiWindow2Upper;
1646 objParameter[0].isolationLUT = isolationLUT;
1647 objParameter[0].qualityLUT = qualityLUT;
1651 <<
"\n Calo ET high threshold (hex) for calo object " << caloObjType <<
" " <<
" = "
1652 << std::hex << objParameter[0].etLowThreshold <<
" - " << objParameter[0].etHighThreshold
1653 <<
"\n etaWindow Lower / Upper for calo object " <<
" = 0x"
1654 << objParameter[0].etaWindow1Lower <<
" / 0x" << objParameter[0].etaWindow1Upper
1655 <<
"\n etaWindowVeto Lower / Upper for calo object " <<
" = 0x"
1656 << objParameter[0].etaWindow2Lower <<
" / 0x" << objParameter[0].etaWindow2Upper
1657 <<
"\n phiWindow Lower / Upper for calo object " <<
" = 0x"
1658 << objParameter[0].phiWindow1Lower <<
" / 0x" << objParameter[0].phiWindow1Upper
1659 <<
"\n phiWindowVeto Lower / Upper for calo object " <<
" = 0x"
1660 << objParameter[0].phiWindow2Lower <<
" / 0x" << objParameter[0].phiWindow2Upper
1661 <<
"\n Isolation LUT for calo object " <<
" = 0x"
1662 << objParameter[0].isolationLUT
1663 <<
"\n Quality LUT for calo object " <<
" = 0x"
1664 << objParameter[0].qualityLUT <<
std::dec
1672 std::vector<L1GtObject> objType(nrObj, caloObjType);
1694 std::ostringstream myCoutStream;
1695 caloCond.
print(myCoutStream);
1696 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1702 if ( !insertConditionIntoMap(caloCond, chipNr)) {
1705 <<
" Error: duplicate condition (" <<
name <<
")"
1711 (m_corCaloTemplate[chipNr]).push_back(caloCond);
1733 unsigned int chipNr,
const bool corrFlag) {
1737 using namespace tmeventsetup;
1746 <<
"\n ****************************************** "
1747 <<
"\n (in parseEnergySum) "
1748 <<
"\n condition = " << condition
1749 <<
"\n type = " <<
type
1750 <<
"\n name = " <<
name
1759 if( condEnergySum.getType() == esConditionType::MissingEt ){
1763 else if( condEnergySum.getType() == esConditionType::TotalEt ){
1767 else if( condEnergySum.getType() == esConditionType::TotalHt ){
1771 else if( condEnergySum.getType() == esConditionType::MissingHt ){
1777 <<
"Wrong type for energy-sum condition (" <<
type
1778 <<
")" << std::endl;
1792 std::vector<EnergySumTemplate::ObjectParameter> objParameter(nrObj);
1804 const std::vector<esObject>& objects = condEnergySum.getObjects();
1805 for (
size_t jj = 0;
jj < objects.size();
jj++) {
1807 const esObject
object = objects.at(
jj);
1811 relativeBx =
object.getBxOffset();
1814 int lowerThresholdInd = 0;
1815 int upperThresholdInd = -1;
1817 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
1820 const std::vector<esCut>&
cuts =
object.getCuts();
1821 for (
size_t kk = 0;
kk < cuts.size();
kk++)
1823 const esCut
cut = cuts.at(
kk);
1825 switch(cut.getCutType()){
1826 case esCutType::Threshold:
1827 lowerThresholdInd = cut.getMinimum().index;
1828 upperThresholdInd = cut.getMaximum().index;
1837 phiWindow1Lower = cut.getMinimum().index;
1838 phiWindow1Upper = cut.getMaximum().index;
1839 }
else if(cntPhi == 1) {
1840 phiWindow2Lower = cut.getMinimum().index;
1841 phiWindow2Upper = cut.getMaximum().index;
1843 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for esum-condition ("
1844 <<
type <<
")" << std::endl;
1861 objParameter[cnt].etLowThreshold = lowerThresholdInd;
1862 objParameter[cnt].etHighThreshold = upperThresholdInd;
1863 objParameter[cnt].phiWindow1Lower = phiWindow1Lower;
1864 objParameter[cnt].phiWindow1Upper = phiWindow1Upper;
1865 objParameter[cnt].phiWindow2Lower = phiWindow2Lower;
1866 objParameter[cnt].phiWindow2Upper = phiWindow2Upper;
1871 <<
"\n EnergySum ET high threshold (hex) for energy sum object " << cnt <<
" = "
1872 << std::hex << objParameter[cnt].etLowThreshold <<
" - " << objParameter[cnt].etHighThreshold
1873 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x"
1874 << objParameter[cnt].phiWindow1Lower <<
" / 0x" << objParameter[cnt].phiWindow1Upper
1875 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x"
1876 << objParameter[cnt].phiWindow2Lower <<
" / 0x" << objParameter[cnt].phiWindow2Upper <<
std::dec
1883 std::vector<L1GtObject> objType(nrObj, energySumObjType);
1899 std::ostringstream myCoutStream;
1900 energySumCond.
print(myCoutStream);
1901 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
1906 if ( !insertConditionIntoMap(energySumCond, chipNr)) {
1909 <<
" Error: duplicate condition (" <<
name <<
")"
1917 (m_corEnergySumTemplate[chipNr]).push_back(energySumCond);
1921 (m_vecEnergySumTemplate[chipNr]).push_back(energySumCond);
1945 unsigned int chipNr) {
1949 using namespace tmeventsetup;
1958 <<
"\n ****************************************** "
1959 <<
"\n (in parseEnergySum) "
1960 <<
"\n condition = " << condition
1961 <<
"\n type = " <<
type
1962 <<
"\n name = " <<
name
1981 <<
"Wrong type for energy-sum correclation condition (" <<
type
1982 <<
")" << std::endl;
1996 std::vector<EnergySumTemplate::ObjectParameter> objParameter(nrObj);
2011 relativeBx = corrESum->getBxOffset();
2014 int lowerThresholdInd = 0;
2015 int upperThresholdInd = -1;
2017 unsigned int phiWindow1Lower=-1, phiWindow1Upper=-1, phiWindow2Lower=-1, phiWindow2Upper=-1;
2020 const std::vector<esCut>&
cuts = corrESum->getCuts();
2025 switch(cut.getCutType()){
2026 case esCutType::Threshold:
2027 lowerThresholdInd = cut.getMinimum().index;
2028 upperThresholdInd = cut.getMaximum().index;
2037 phiWindow1Lower = cut.getMinimum().index;
2038 phiWindow1Upper = cut.getMaximum().index;
2039 }
else if(cntPhi == 1) {
2040 phiWindow2Lower = cut.getMinimum().index;
2041 phiWindow2Upper = cut.getMaximum().index;
2043 edm::LogError(
"TriggerMenuParser") <<
"Too Many Phi Cuts for esum-condition ("
2044 <<
type <<
")" << std::endl;
2061 objParameter[0].etLowThreshold = lowerThresholdInd;
2062 objParameter[0].etHighThreshold = upperThresholdInd;
2063 objParameter[0].phiWindow1Lower = phiWindow1Lower;
2064 objParameter[0].phiWindow1Upper = phiWindow1Upper;
2065 objParameter[0].phiWindow2Lower = phiWindow2Lower;
2066 objParameter[0].phiWindow2Upper = phiWindow2Upper;
2071 <<
"\n EnergySum ET high threshold (hex) for energy sum object " << cnt <<
" = "
2072 << std::hex << objParameter[0].etLowThreshold <<
" - " << objParameter[0].etLowThreshold
2073 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = 0x"
2074 << objParameter[0].phiWindow1Lower <<
" / 0x" << objParameter[0].phiWindow1Upper
2075 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = 0x"
2076 << objParameter[0].phiWindow2Lower <<
" / 0x" << objParameter[0].phiWindow2Upper <<
std::dec
2081 std::vector<L1GtObject> objType(nrObj, energySumObjType);
2097 std::ostringstream myCoutStream;
2098 energySumCond.
print(myCoutStream);
2099 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2104 if ( !insertConditionIntoMap(energySumCond, chipNr)) {
2107 <<
" Error: duplicate condition (" <<
name <<
")"
2114 (m_corEnergySumTemplate[chipNr]).push_back(energySumCond);
2139 unsigned int chipNr) {
2142 using namespace tmeventsetup;
2153 <<
"\n ****************************************** "
2154 <<
"\n (in parseExternal) "
2155 <<
"\n condition = " << condition
2156 <<
"\n particle = " << particle
2157 <<
"\n type = " <<
type
2158 <<
"\n name = " <<
name
2167 unsigned int channelID = 0;
2170 const std::vector<esObject>& objects = condExt.getObjects();
2171 for (
size_t jj = 0;
jj < objects.size();
jj++) {
2173 const esObject
object = objects.at(
jj);
2174 if(
object.getType() == esObjectType::EXT) {
2175 relativeBx =
object.getBxOffset();
2176 channelID =
object.getExternalChannelId();
2194 << externalCond <<
"\n" << std::endl;
2197 if ( !insertConditionIntoMap(externalCond, chipNr)) {
2200 <<
" Error: duplicate condition (" <<
name
2201 <<
")" << std::endl;
2206 (m_vecExternalTemplate[chipNr]).push_back(externalCond);
2227 tmeventsetup::esCondition corrCond,
2228 unsigned int chipNr) {
2230 using namespace tmeventsetup;
2237 LogDebug(
"TriggerMenuParser") <<
" ****************************************** " << std::endl
2238 <<
" (in parseCorrelation) " << std::endl
2239 <<
" condition = " << condition << std::endl
2240 <<
" particle = " << particle << std::endl
2241 <<
" type = " <<
type << std::endl
2242 <<
" name = " <<
name << std::endl;
2251 if ( !insertConditionIntoMap(correlationCond, chipNr)) {
2254 <<
" Error: duplicate correlation condition (" <<
name <<
")"
2267 const int nrObj = 2;
2270 int intGEq[nrObj] = { -1, -1 };
2271 std::vector<L1GtObject> objType(nrObj);
2272 std::vector<GtConditionCategory> condCateg(nrObj);
2275 const bool corrFlag =
true;
2276 int corrIndexVal[nrObj] = { -1, -1 };
2285 const std::vector<esCut>&
cuts = corrCond.getCuts();
2290 if(cut.getCutType() == esCutType::ChargeCorrelation) {
2291 if( cut.getData()==
"ls" ) corrParameter.chargeCorrelation = 2;
2292 else if( cut.getData()==
"os" ) corrParameter.chargeCorrelation = 4;
2293 else corrParameter.chargeCorrelation = 1;
2296 corrParameter.corrCutType = cut.getCutType();
2297 corrParameter.minCutValue = cut.getMinimum().value;
2298 corrParameter.maxCutValue = cut.getMaximum().value;
2305 const std::vector<esObject>& objects = corrCond.getObjects();
2306 if(objects.size() != 2) {
2308 <<
"incorrect number of objects for the correlation condition " <<
name <<
" corrFlag " << corrFlag << std::endl;
2313 for (
size_t jj = 0;
jj < objects.size();
jj++)
2315 const esObject
object = objects.at(
jj);
2327 if ((m_conditionMap[chipNr]).
count(
object.getName()) == 0) {
2329 parseMuonCorr(&
object,chipNr);
2332 LogDebug(
"TriggerMenuParser") <<
"Not Adding Correlation Muon Condition." << std::endl;
2339 corrIndexVal[
jj] = (m_corMuonTemplate[chipNr]).
size() - 1;
2343 }
else if(
object.getType() == esObjectType::Egamma ||
2349 if ((m_conditionMap[chipNr]).count(
object.getName()) == 0) {
2351 parseCaloCorr(&
object,chipNr);
2354 LogDebug(
"TriggerMenuParser") <<
"Not Adding Correlation Calo Condition." << std::endl;
2360 switch(
object.getType()) {
2361 case esObjectType::Egamma: {
2378 corrIndexVal[
jj] = (m_corCaloTemplate[chipNr]).
size() - 1;
2386 if ((m_conditionMap[chipNr]).count(
object.getName()) == 0) {
2388 parseEnergySumCorr(&
object,chipNr);
2391 LogDebug(
"TriggerMenuParser") <<
"Not Adding Correlation EtSum Condition." << std::endl;
2397 switch(
object.getType()) {
2411 corrIndexVal[
jj] = (m_corEnergySumTemplate[chipNr]).
size() - 1;
2416 <<
"Illegal Object Type "
2417 <<
" for the correlation condition " <<
name << std::endl;
2427 if (intGEq[0] != intGEq[1]) {
2429 <<
"Inconsistent GEq flags for sub-conditions "
2430 <<
" for the correlation condition " <<
name << std::endl;
2435 gEq = (intGEq[0] != 0);
2456 std::ostringstream myCoutStream;
2457 correlationCond.
print(myCoutStream);
2458 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n"
2466 (m_vecCorrelationTemplate[chipNr]).push_back(correlationCond);
2486 unsigned int chipNr) {
2489 using namespace tmeventsetup;
2497 if (algAlias ==
"") {
2500 <<
"\n No alias defined for algorithm. Alias set to algorithm name."
2501 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
2505 LogDebug(
"TriggerMenuParser") <<
"\n Alias defined for algorithm."
2506 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
2511 std::string logExpression = algorithm.getExpressionInCondition();
2514 <<
" Logical expression: " << logExpression
2515 <<
" Chip number: " << chipNr
2519 int outputPin = algorithm.getIndex();
2523 LogDebug(
"TriggerMenuParser") <<
" Output pin: " << outputPin
2529 int bitNumber = outputPin;
2532 LogDebug(
"TriggerMenuParser") <<
" Bit number: " << bitNumber
2542 std::ostringstream myCoutStream;
2543 alg.
print(myCoutStream);
2544 LogTrace(
"TriggerMenuParser") << myCoutStream.str() <<
"\n" << std::endl;
2549 if ( !insertAlgorithmIntoMap(alg)) {
std::vector< std::pair< double, double > > phiBins
void setCond0Index(const int &)
void setAlgoAlias(const std::string &algoAliasValue)
virtual void print(std::ostream &myCout) const
print the condition
virtual void print(std::ostream &myCout) const
print condition
unsigned int chargeCorrelation
void setCondType(const l1t::GtConditionType &cType)
void setCorrelationParameter(const CorrelationParameter &corrParameter)
const std::string algoName() const
get / set algorithm name
void setCondGEq(const bool &cGEq)
virtual void print(std::ostream &myCout) const
print the condition
virtual void print(std::ostream &myCout) const
print the condition
std::string const & algoAlias() const
get / set algorithm alias
VDouble InvariantMass(Tau)
void setAlgoChipNumber(const int algoChipNumberValue)
std::vector< std::pair< double, double > > etBins
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
void setExternalChannel(unsigned int extCh)
set functions
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 setCond1Category(const l1t::GtConditionCategory &)
void setConditionParameter(const std::vector< ObjectParameter > &objParameter, const CorrelationParameter &corrParameter)
set functions
int algoBitNumber() const
get / set algorithm bit number
std::map< std::string, L1GtAlgorithm > AlgorithmMap
map containing the algorithms
typedef for a single object template
const std::string & condName() const
get / set condition name
void setCond0Category(const l1t::GtConditionCategory &)
void setCondChipNr(const int &cChipNr)
void setConditionParameter(const std::vector< ObjectParameter > &objParameter, const CorrelationParameter &corrParameter)
set functions
typedef for correlation parameters
void setObjectType(const std::vector< L1GtObject > &objType)
const int algoChipNumber() const
get / set algorithm bit number
std::vector< std::pair< double, double > > etaBins
void setCondRelativeBx(const int &cRelativeBx)
typedef for correlation parameters
virtual void print(std::ostream &myCout) const
print the condition
tuple size
Write out results.
void setConditionParameter(const std::vector< ObjectParameter > &)
set functions
void setCond1Index(const int &)