28 #include <boost/cstdint.hpp>
40 #include "L1Trigger/L1TGlobal/src/L1TMenuEditor/L1TriggerMenu.hxx"
45 m_triggerMenuName(
"NULL"), m_triggerMenuImplementation(
"NULL"), m_scaleDbKey(
"NULL")
64 const unsigned int& numberConditionChipsValue) {
66 m_numberConditionChips = numberConditionChipsValue;
73 m_pinsOnConditionChip = pinsOnConditionChipValue;
80 const std::vector<int>& orderConditionChipValue) {
82 m_orderConditionChip = orderConditionChipValue;
88 const unsigned int& numberPhysTriggersValue) {
90 m_numberPhysTriggers = numberPhysTriggersValue;
96 const unsigned int& numberTechTriggersValue) {
98 m_numberTechTriggers = numberTechTriggersValue;
105 m_numberL1JetCounts = numberL1JetCountsValue;
112 m_conditionMap = condMap;
117 m_triggerMenuInterface = menuInterface;
121 m_triggerMenuName = menuName;
125 m_triggerMenuImplementation = menuImplementation;
130 m_scaleDbKey = scaleKey;
135 const std::vector<std::vector<MuonTemplate> >& vecMuonTempl) {
137 m_vecMuonTemplate = vecMuonTempl;
141 const std::vector<std::vector<CaloTemplate> >& vecCaloTempl) {
143 m_vecCaloTemplate = vecCaloTempl;
147 const std::vector<std::vector<L1GtEnergySumTemplate> >& vecEnergySumTempl) {
149 m_vecEnergySumTemplate = vecEnergySumTempl;
153 const std::vector<std::vector<L1GtJetCountsTemplate> >& vecJetCountsTempl) {
155 m_vecJetCountsTemplate = vecJetCountsTempl;
159 const std::vector<std::vector<L1GtCastorTemplate> >& vecCastorTempl) {
161 m_vecCastorTemplate = vecCastorTempl;
165 const std::vector<std::vector<L1GtHfBitCountsTemplate> >& vecHfBitCountsTempl) {
167 m_vecHfBitCountsTemplate = vecHfBitCountsTempl;
171 const std::vector<std::vector<L1GtHfRingEtSumsTemplate> >& vecHfRingEtSumsTempl) {
173 m_vecHfRingEtSumsTemplate = vecHfRingEtSumsTempl;
177 const std::vector<std::vector<L1GtBptxTemplate> >& vecBptxTempl) {
179 m_vecBptxTemplate = vecBptxTempl;
183 const std::vector<std::vector<L1GtExternalTemplate> >& vecExternalTempl) {
185 m_vecExternalTemplate = vecExternalTempl;
189 const std::vector<std::vector<CorrelationTemplate> >& vecCorrelationTempl) {
191 m_vecCorrelationTemplate = vecCorrelationTempl;
197 const std::vector<std::vector<MuonTemplate> >& corMuonTempl) {
199 m_corMuonTemplate = corMuonTempl;
203 const std::vector<std::vector<CaloTemplate> >& corCaloTempl) {
205 m_corCaloTemplate = corCaloTempl;
209 const std::vector<std::vector<L1GtEnergySumTemplate> >& corEnergySumTempl) {
211 m_corEnergySumTemplate = corEnergySumTempl;
219 m_algorithmMap = algoMap;
224 m_algorithmAliasMap = algoMap;
229 m_technicalTriggerMap = ttMap;
239 XERCES_CPP_NAMESPACE_USE
243 m_conditionMap.resize(m_numberConditionChips);
245 m_vecMuonTemplate.resize(m_numberConditionChips);
246 m_vecCaloTemplate.resize(m_numberConditionChips);
247 m_vecEnergySumTemplate.resize(m_numberConditionChips);
248 m_vecJetCountsTemplate.resize(m_numberConditionChips);
249 m_vecCastorTemplate.resize(m_numberConditionChips);
250 m_vecHfBitCountsTemplate.resize(m_numberConditionChips);
251 m_vecHfRingEtSumsTemplate.resize(m_numberConditionChips);
252 m_vecBptxTemplate.resize(m_numberConditionChips);
253 m_vecExternalTemplate.resize(m_numberConditionChips);
255 m_vecCorrelationTemplate.resize(m_numberConditionChips);
256 m_corMuonTemplate.resize(m_numberConditionChips);
257 m_corCaloTemplate.resize(m_numberConditionChips);
258 m_corEnergySumTemplate.resize(m_numberConditionChips);
264 m_triggerMenuName = defXmlFile;
265 size_t xmlPos = m_triggerMenuName.find_last_of(
"/");
266 m_triggerMenuName.erase(m_triggerMenuName.begin(), m_triggerMenuName.begin()
269 xmlPos = m_triggerMenuName.find_last_of(
".");
270 m_triggerMenuName.erase(m_triggerMenuName.begin() + xmlPos, m_triggerMenuName.end());
275 std::auto_ptr<l1t::L1TriggerMenu> tm(l1t::l1TriggerMenu(defXmlFile));
277 LogTrace(
"TriggerMenuXmlParser") <<
"\nOpening XML-File: \n " << defXmlFile << std::endl;
279 l1t::ConditionList conditions = tm->conditions();
294 m_triggerMenuInterfaceDate = val;
300 m_triggerMenuInterfaceAuthor = val;
306 m_triggerMenuInterfaceDescription = val;
313 m_triggerMenuDate = val;
319 m_triggerMenuAuthor = val;
325 m_triggerMenuDescription = val;
331 m_algorithmImplementation = val;
350 XERCES_CPP_NAMESPACE_USE
354 XMLPlatformUtils::Initialize();
356 catch (
const XMLException& toCatch) {
357 char*
message = XMLString::transcode(toCatch.getMessage());
360 <<
"Error during Xerces-c initialization! :"
361 << message << std::endl;
367 XercesDOMParser*
parser =
new XercesDOMParser();
368 parser->setValidationScheme(XercesDOMParser::Val_Always);
369 parser->setDoNamespaces(
false);
371 if (m_xmlErrHandler == 0) {
372 m_xmlErrHandler = (ErrorHandler*)
new HandlerBase();
377 parser->setErrorHandler(m_xmlErrHandler);
381 parser->parse(xmlFile.c_str());
383 catch(
const XMLException &toCatch) {
384 char*
message = XMLString::transcode(toCatch.getMessage());
387 <<
"Exception while parsing XML: \n"
388 << message << std::endl;
392 delete m_xmlErrHandler;
396 catch (
const DOMException &toCatch) {
397 char *
message = XMLString::transcode(toCatch.msg);
400 <<
"DOM-Exception while parsing XML: \n"
401 << message << std::endl;
405 delete m_xmlErrHandler;
412 <<
"Unexpected Exception while parsing XML!"
416 delete m_xmlErrHandler;
426 XERCES_CPP_NAMESPACE::DOMNode* startChild,
const std::string& tagName,
bool beginOnly,
429 XERCES_CPP_NAMESPACE_USE
433 DOMNode *n1 = startChild;
438 if ( !tagName.empty() ) {
439 nodeName = XMLString::transcode(n1->getNodeName());
443 while (XMLString::compareIString(nodeName, tagName.c_str())) {
446 n1 = n1->getNextSibling();
451 nodeName = XMLString::transcode(n1->getNodeName());
456 while (XMLString::compareNIString(nodeName, tagName.c_str(), tagName.length())) {
458 n1 = n1->getNextSibling();
463 nodeName = XMLString::transcode(n1->getNodeName());
465 if (n1 != 0 && rest != 0) {
466 *rest =
std::string(nodeName).substr(tagName.length(), strlen(nodeName) - tagName.length());
471 while (n1->getNodeType() != DOMNode::ELEMENT_NODE) {
472 n1 = n1->getNextSibling();
478 if (n1 != 0 && rest != 0) {
479 nodeName = XMLString::transcode(n1->getNodeName());
502 XERCES_CPP_NAMESPACE_USE
507 DOMNamedNodeMap*
attributes = node->getAttributes();
508 if (attributes == 0) {
513 XMLCh* attrName = XMLString::transcode(name.c_str());
514 DOMNode* attribNode = attributes->getNamedItem(attrName);
517 if (attribNode == 0) {
521 char* retCstr = XMLString::transcode(attribNode->getNodeValue());
538 XERCES_CPP_NAMESPACE_USE
547 const XMLCh* retXmlCh = n1->getTextContent();
552 char* retCstr = XMLString::transcode(retXmlCh);
553 XMLString::trim(retCstr);
575 static const std::string valid_hex_start(
"0123456789ABCDEFabcdef");
578 static const std::string valid_hex_end(
"0123456789ABCDEFabcdef");
583 unsigned int hexStart = tempStr.find_first_of(valid_hex_start);
584 unsigned int hexEnd = tempStr.find_first_not_of(valid_hex_end, hexStart);
586 if (hexStart == hexEnd) {
588 LogDebug(
"TriggerMenuXmlParser") <<
"No hex value found in: " << tempStr << std::endl;
593 tempStr = tempStr.substr(hexStart, hexEnd - hexStart);
595 if (tempStr.empty() ) {
597 LogDebug(
"TriggerMenuXmlParser") <<
"Empty value in " << __PRETTY_FUNCTION__
606 if (tempStr.length() > 16) {
607 tempStrL = tempStr.substr(tempStr.length()-16, 16);
608 tempStrH = tempStr.substr(0, tempStr.length()-16);
616 char* endPtr = (
char*) tempStrL.c_str();
621 LogDebug(
"TriggerMenuXmlParser") <<
"Unable to convert " << tempStr <<
" to hex."
628 endPtr = (
char*) tempStrH.c_str();
633 LogDebug(
"TriggerMenuXmlParser") <<
"Unable to convert " << tempStr <<
" to hex."
660 LogDebug(
"TriggerMenuXmlParser") <<
"node == 0 in " << __PRETTY_FUNCTION__ << std::endl;
668 if ( !hexString2UInt128(tempStr, tempUIntL, tempUIntH) ) {
684 if ( !hexString2UInt128(tempStr, tempUIntL, tempUIntH) ) {
711 if ( !getXMLHexTextValue128Old(node, tempUInt, dummyH) ) {
716 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
731 if ( !getXMLHexTextValue128( childName, tempUInt, dummyH) ) {
736 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
758 XERCES_CPP_NAMESPACE_USE
767 if ( !hexString2UInt128(maxString, maxBitsL, maxBitsH) ) {
782 while (maxBitsL != 0) {
784 if ( (maxBitsL & 1) == 0) {
787 <<
" Confused by not continous set bits for max value " << maxString
797 if ( (maxBitsH != 0) && (counter != 64)) {
800 <<
" Confused by not continous set bits for max value " << maxString
806 while (maxBitsH != 0) {
808 if ( (maxBitsH & 1) == 0) {
811 <<
" Confused by not continous set bits for max value " << maxString
839 const std::string& childName,
unsigned int num, std::vector<boost::uint64_t>& dst) {
841 XERCES_CPP_NAMESPACE_USE
846 <<
"node == 0 in " << __PRETTY_FUNCTION__
852 DOMNode* n1 = findXMLChild(node->getFirstChild(), childName);
857 LogDebug(
"TriggerMenuXmlParser") <<
"Child of condition not found ( " << childName
872 n1 = findXMLChild(n1->getFirstChild(), m_xmlTagValue);
873 for (
unsigned int i = 0;
i <
num;
i++) {
876 LogDebug(
"TriggerMenuXmlParser") <<
"Not enough values in condition child ( "
877 << childName <<
")" << std::endl;
882 if ( !getXMLHexTextValueOld(n1, dst[
i]) ) {
884 edm::LogError(
"TriggerMenuXmlParser") <<
"Error converting condition child ( "
885 << childName <<
") value." << std::endl;
890 n1 = findXMLChild(n1->getNextSibling(), m_xmlTagValue);
905 XERCES_CPP_NAMESPACE_USE
911 if (m_xmlErrHandler != 0) {
912 delete m_xmlErrHandler;
916 XMLPlatformUtils::Terminate();
935 XERCES_CPP_NAMESPACE_USE
937 DOMDocument*
doc = parser->getDocument();
938 DOMNode* n1 = doc->getFirstChild();
942 edm::LogError(
"TriggerMenuXmlParser") <<
"Error: Found no XML child" << std::endl;
948 n1 = findXMLChild(n1, m_xmlTagVme);
951 edm::LogError(
"TriggerMenuXmlParser") <<
"Error: No vme tag found." << std::endl;
955 n1 = n1->getFirstChild();
957 unsigned int chipCounter = 0;
959 while (chipCounter < m_numberConditionChips) {
961 n1 = findXMLChild(n1, m_xmlTagChip,
true);
972 n1 = n1->getNextSibling();
988 for (std::vector<ConditionMap>::iterator itCondOnChip = m_conditionMap.begin(); itCondOnChip
989 != m_conditionMap.end(); itCondOnChip++) {
993 itCondOnChip->clear();
998 m_algorithmMap.clear();
1011 if ((m_conditionMap[chipNr]).
count(cName) != 0) {
1012 LogTrace(
"TriggerMenuXmlParser") <<
" Condition " << cName
1013 <<
" already exists - not inserted!" << std::endl;
1017 (m_conditionMap[chipNr])[cName] = &cond;
1036 if (m_algorithmMap.count(algName) != 0) {
1037 LogTrace(
"TriggerMenuXmlParser") <<
" Algorithm \"" << algName
1038 <<
"\"already exists in the algorithm map- not inserted!" << std::endl;
1042 if (m_algorithmAliasMap.count(algAlias) != 0) {
1043 LogTrace(
"TriggerMenuXmlParser") <<
" Algorithm alias \"" << algAlias
1044 <<
"\"already exists in the algorithm alias map- not inserted!" << std::endl;
1050 if ((bitNumber < 0) || (bitNumber >= static_cast<int>(m_numberPhysTriggers))) {
1051 LogTrace(
"TriggerMenuXmlParser") <<
" Bit number " << bitNumber
1052 <<
" outside allowed range [0, " << m_numberPhysTriggers
1053 <<
") - algorithm not inserted!" << std::endl;
1058 if (m_algorithmMap.size() >= m_numberPhysTriggers) {
1059 LogTrace(
"TriggerMenuXmlParser") <<
" More than maximum allowed "
1060 << m_numberPhysTriggers <<
" algorithms in the algorithm map - not inserted!"
1066 int chipNr = alg.
algoChipNumber(static_cast<int>(m_numberConditionChips),
1067 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
1069 if ((chipNr < 0) || (chipNr > static_cast<int>(m_numberConditionChips))) {
1070 LogTrace(
"TriggerMenuXmlParser") <<
" Chip number " << chipNr
1071 <<
" outside allowed range [0, " << m_numberConditionChips
1072 <<
") - algorithm not inserted!" << std::endl;
1077 int outputPin = alg.
algoOutputPin(static_cast<int>(m_numberConditionChips),
1078 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
1080 if ((outputPin < 0) || (outputPin > static_cast<int>(m_pinsOnConditionChip))) {
1081 LogTrace(
"TriggerMenuXmlParser") <<
" Output pin " << outputPin
1082 <<
" outside allowed range [0, " << m_pinsOnConditionChip
1083 <<
"] - algorithm not inserted!" << std::endl;
1088 for (
CItAlgo itAlgo = m_algorithmMap.begin(); itAlgo != m_algorithmMap.end(); itAlgo++) {
1090 int iPin = (itAlgo->second).algoOutputPin( static_cast<int>(m_numberConditionChips),
1091 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
1093 int iChip = (itAlgo->second).algoChipNumber(static_cast<int>(m_numberConditionChips),
1094 static_cast<int>(m_pinsOnConditionChip), m_orderConditionChip);
1096 if ( (outputPin == iPin) && (chipNr == iChip)) {
1097 LogTrace(
"TriggerMenuXmlParser") <<
" Output pin " << outputPin
1098 <<
" is the same as for algorithm " << iName
1099 <<
"\n from the same chip number " << chipNr <<
" - algorithm not inserted!"
1107 m_algorithmMap[algName] = alg;
1108 m_algorithmAliasMap[algAlias] = alg;
1127 if (m_technicalTriggerMap.count(algName) != 0) {
1128 LogTrace(
"TriggerMenuXmlParser") <<
" Technical trigger \""
1130 <<
"\"already exists in the technical trigger map- not inserted!"
1138 || (bitNumber >= static_cast<int>(m_numberTechTriggers))) {
1139 LogTrace(
"TriggerMenuXmlParser") <<
" Bit number "
1140 << bitNumber <<
" outside allowed range [0, "
1141 << m_numberTechTriggers
1142 <<
") - technical trigger not inserted!" << std::endl;
1147 for (
CItAlgo itAlgo = m_technicalTriggerMap.begin(); itAlgo
1148 != m_technicalTriggerMap.end(); itAlgo++) {
1150 int iBitNumber = (itAlgo->second).algoBitNumber();
1153 if ((iBitNumber == bitNumber)) {
1154 LogTrace(
"TriggerMenuXmlParser") <<
" Bit number "
1155 << iBitNumber <<
" is the same as for technical trigger "
1156 << iName <<
" - technical trigger not inserted!"
1164 if (m_technicalTriggerMap.size() >= m_numberTechTriggers) {
1166 <<
" More than maximum allowed " << m_numberTechTriggers
1167 <<
" technical triggers in the technical trigger map - not inserted!"
1173 m_technicalTriggerMap[algName] = alg;
1189 if (type == m_xmlConditionAttrType1s) {
1193 if (type == m_xmlConditionAttrType2s) {
1197 if (type == m_xmlConditionAttrType3s) {
1201 if (type == m_xmlConditionAttrType4s) {
1205 if (type == m_xmlConditionAttrType2wsc) {
1209 if (type == m_xmlConditionAttrType2cor) {
1227 if (type == m_xmlConditionAttrType1s) {
1231 if (type == m_xmlConditionAttrType2s) {
1235 if (type == m_xmlConditionAttrType3s) {
1239 if (type == m_xmlConditionAttrType4s) {
1243 if (type == m_xmlConditionAttrType2wsc) {
1247 if (type == m_xmlConditionAttrType2cor) {
1264 if (getXMLAttribute(node, m_xmlAttrMode) != m_xmlAttrModeBit) {
1266 edm::LogError(
"TriggerMenuXmlParser") <<
"Invalid mode for single bit" << std::endl;
1272 if (tmpStr ==
"0") {
1275 else if (tmpStr ==
"1") {
1279 edm::LogError(
"TriggerMenuXmlParser") <<
"Bad bit value (" << tmpStr <<
")"
1297 XERCES_CPP_NAMESPACE_USE
1302 <<
"node == 0 in " << __PRETTY_FUNCTION__
1309 DOMNode* n1 = node->getFirstChild();
1310 n1 = findXMLChild(n1, nodeName);
1313 n1 = findXMLChild(n1->getFirstChild(), m_xmlTagGEq);
1316 LogDebug(
"TriggerMenuXmlParser") <<
"No \"greater or equal\" tag found"
1322 return getBitFromNode(n1);
1345 unsigned int num, std::vector<bool>& mipDst, std::vector<bool>& isoEnDst,
1346 std::vector<bool>& isoReqDst) {
1348 XERCES_CPP_NAMESPACE_USE
1355 DOMNode* n1 = findXMLChild(node->getFirstChild(), m_xmlTagPtLowThreshold);
1362 n1 = findXMLChild(n1->getFirstChild(), m_xmlTagValue);
1364 for (
unsigned int i = 0;
i <
num;
i++) {
1372 DOMNode* bitnode = findXMLChild(n1->getFirstChild(), m_xmlTagEnableMip);
1377 int tmpint = getBitFromNode(bitnode);
1382 mipDst[
i] = (tmpint != 0);
1390 bitnode = findXMLChild(n1->getFirstChild(), m_xmlTagEnableIso);
1395 tmpint = getBitFromNode(bitnode);
1400 isoEnDst[
i] = (tmpint != 0);
1407 bitnode = findXMLChild(n1->getFirstChild(), m_xmlTagRequestIso);
1412 tmpint = getBitFromNode(bitnode);
1417 isoReqDst[
i] = (tmpint != 0);
1424 n1 = findXMLChild(n1->getNextSibling(), m_xmlTagValue);
1432 std::stringstream
ss;
1437 std::stringstream
ss;
1438 ss << std::setfill(
'0');
1439 ss << std::setw(4) << date.year() <<
"-" << std::setw(2) << date.month() <<
"-" << std::setw(2) << date.day() <<
"T";
1440 ss << std::setw(2) << date.hours() <<
":" << std::setw(2) << date.minutes() <<
":" << std::setw(2) << date.seconds();
1445 std::stringstream
ss;
1466 unsigned int chipNr,
const bool corrFlag) {
1468 XERCES_CPP_NAMESPACE_USE
1476 if( particle==
"mu" ) particle =
"muon";
1478 if( type==
"double_wsc" ) type =
"2_wsc";
1479 else if( type==
"single" ) type =
"1_s";
1480 else if( type==
"double" ) type =
"2_s";
1481 else if( type==
"triple" ) type =
"3";
1482 else if( type==
"quad" ) type =
"4";
1485 <<
"\n ****************************************** "
1487 <<
"\n condition = " << condition
1488 <<
"\n particle = " << particle
1489 <<
"\n type = " << type
1490 <<
"\n name = " << name
1493 if (particle != m_xmlConditionAttrObjectMu) {
1494 edm::LogError(
"TriggerMenuXmlParser") <<
"Wrong particle for muon-condition ("
1495 << particle <<
")" << std::endl;
1500 std::string str_etComparison = l1t2string( condMu.comparison_operator() );
1502 int nrObj = getNumFromType(type);
1504 edm::LogError(
"TriggerMenuXmlParser") <<
"Unknown type for calo-condition (" << type
1505 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
1510 int intGEq = ( str_etComparison==
"ge" ) ? 1 : 0;
1512 edm::LogError(
"TriggerMenuXmlParser") <<
"Error getting \"greater or equal\" flag"
1517 bool gEq = (intGEq != 0);
1522 std::vector<MuonTemplate::ObjectParameter> objParameter(nrObj);
1526 std::vector<boost::uint64_t> tmpValues((nrObj > 2) ? nrObj : 2);
1527 tmpValues.reserve( nrObj );
1529 if(
int(condMu.objectRequirements().objectRequirement().size())!=nrObj ){
1530 edm::LogError(
"TriggerMenuXmlParser") <<
" condMu objects: nrObj = " << nrObj
1531 <<
"condMu.objectRequirements().objectRequirement().size() = "
1532 << condMu.objectRequirements().objectRequirement().size()
1538 std::string str_chargeCorrelation = l1t2string( condMu.requestedChargeCorr() );
1540 unsigned int chargeCorrelation = 0;
1541 if( str_chargeCorrelation==
"ig" ) chargeCorrelation = 0;
1542 else if( str_chargeCorrelation==
"ls" ) chargeCorrelation = 1;
1543 else if( str_chargeCorrelation==
"os" ) chargeCorrelation = 2;
1552 for( l1t::MuonObjectRequirementList::objectRequirement_const_iterator objPar = condMu.objectRequirements().objectRequirement().begin();
1553 objPar != condMu.objectRequirements().objectRequirement().end(); ++objPar ){
1556 str_condMu = l1t2string( objPar->ptThreshold() );
1557 if( !getXMLHexTextValue(str_condMu, dst) )
return false;
1561 objParameter[cnt].ptHighThreshold = objPar->ptThreshold();
1562 objParameter[cnt].ptLowThreshold = objPar->ptThreshold();
1567 str_condMu =
"7f7f";
1569 if( !getXMLHexTextValue(str_condMu, dst) )
return false;
1570 if( cnt<nrObj ) objParameter[cnt].etaRange = dst;
1573 str_condMu =
"3ffff";
1574 if( !getXMLHexTextValue(str_condMu, dst) )
return false;
1576 getXMLHexTextValue(
"8f", dst);
1577 objParameter[cnt].phiHigh = dst;
1578 objParameter[cnt].phiLow = dst;
1580 objParameter[cnt].enableMip =
false;
1581 objParameter[cnt].enableIso =
false;
1582 objParameter[cnt].requestIso =
false;
1584 getXMLHexTextValue(
"f0", dst);
1585 objParameter[cnt].qualityRange = dst;
1589 unsigned int etaWindowLower=-1, etaWindowUpper=-1, etaWindowVetoLower=-1, etaWindowVetoUpper=-1;
1591 for( l1t::CalorimeterObjectRequirement::etaWindow_const_iterator etaWindow =objPar->etaWindow().begin();
1592 etaWindow != objPar->etaWindow().end(); ++etaWindow ){
1595 <<
"\n etaWindow lower = " << etaWindow->lower()
1596 <<
"\n etaWindow upper = " << etaWindow->upper()
1598 if( cntEta==0 ){ etaWindowLower = etaWindow->lower(); etaWindowUpper = etaWindow->upper(); }
1599 else if( cntEta==1 ){ etaWindowVetoLower = etaWindow->lower(); etaWindowVetoUpper = etaWindow->upper(); }
1604 unsigned int phiWindowLower=-1, phiWindowUpper=-1, phiWindowVetoLower=-1, phiWindowVetoUpper=-1;
1605 for( l1t::CalorimeterObjectRequirement::phiWindow_const_iterator phiWindow =objPar->phiWindow().begin();
1606 phiWindow != objPar->phiWindow().end(); ++phiWindow ){
1609 <<
"\n phiWindow begin = " << phiWindow->lower()
1610 <<
"\n phiWindow end = " << phiWindow->upper()
1613 if( cntPhi==0 ){ phiWindowLower = phiWindow->lower(); phiWindowUpper = phiWindow->upper(); }
1614 else if( cntPhi==1 ){ phiWindowVetoLower = phiWindow->lower(); phiWindowVetoUpper = phiWindow->upper(); }
1618 objParameter[cnt].etaWindowLower = etaWindowLower;
1619 objParameter[cnt].etaWindowUpper = etaWindowUpper;
1620 objParameter[cnt].etaWindowVetoLower = etaWindowVetoLower;
1621 objParameter[cnt].etaWindowVetoUpper = etaWindowVetoUpper;
1623 objParameter[cnt].phiWindowLower = phiWindowLower;
1624 objParameter[cnt].phiWindowUpper = phiWindowUpper;
1625 objParameter[cnt].phiWindowVetoLower = phiWindowVetoLower;
1626 objParameter[cnt].phiWindowVetoUpper = phiWindowVetoUpper;
1631 <<
"\n Muon PT high threshold (hex) for muon object " << cnt <<
" = "
1632 << std::hex << objParameter[cnt].ptHighThreshold << std::dec
1633 <<
"\n etaWindow (hex) for muon object " << cnt <<
" = "
1634 << std::hex << objParameter[cnt].etaRange << std::dec
1637 <<
"\n etaWindow Lower / Upper for muon object " << cnt <<
" = "
1638 << objParameter[cnt].etaWindowLower <<
" / " << objParameter[cnt].etaWindowUpper
1639 <<
"\n etaWindowVeto Lower / Upper for muon object " << cnt <<
" = "
1640 << objParameter[cnt].etaWindowVetoLower <<
" / " << objParameter[cnt].etaWindowVetoUpper
1641 <<
"\n phiWindow Lower / Upper for muon object " << cnt <<
" = "
1642 << objParameter[cnt].phiWindowLower <<
" / " << objParameter[cnt].phiWindowUpper
1643 <<
"\n phiWindowVeto Lower / Upper for muon object " << cnt <<
" = "
1644 << objParameter[cnt].phiWindowVetoLower <<
" / " << objParameter[cnt].phiWindowVetoUpper
1653 bool wscVal = (type == m_xmlConditionAttrType2wsc );
1657 xsd::cxx::tree::optional<l1t::DeltaRequirement> condRanges = condMu.deltaRequirement();
1659 <<
"\t condRanges->deltaEtaRange().lower() = " << condRanges->deltaEtaRange().lower()
1660 <<
"\n\t condRanges->deltaEtaRange().upper() = " << condRanges->deltaEtaRange().upper()
1661 <<
"\n\t condRanges->deltaPhiRange().lower() = " << condRanges->deltaPhiRange().lower()
1662 <<
"\n\t condRanges->deltaPhiRange().upper() = " << condRanges->deltaPhiRange().upper()
1676 str_condMu =
"0003";
1677 if ( !hexString2UInt128(str_condMu, tempUIntL, tempUIntH) ) {
1680 if( tempUIntH != 0 ){
1681 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
1688 if ( !hexString2UInt128(str_condMu, tempUIntL, tempUIntH) ) {
1691 if( tempUIntH != 0 ){
1692 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
1702 unsigned int maxbits = 0;
1704 if ( !countConditionChildMaxBits(maxString, maxbits) ) {
1710 <<
" deltaPhiMaxbits (dec) = " << maxbits
1724 <<
"Type for muon condition id l1t::TypeNull - it means not defined in the XML file."
1725 <<
"\nNumber of trigger objects is set to zero. " << std::endl;
1730 std::vector<L1GtObject> objType(nrObj,
Mu);
1734 int relativeBx = l1t2int( condMu.relativeBx() );
1741 muonCond.setCondType(cType);
1742 muonCond.setObjectType(objType);
1743 muonCond.setCondGEq(gEq);
1744 muonCond.setCondChipNr(chipNr);
1745 muonCond.setCondRelativeBx(relativeBx);
1747 muonCond.setConditionParameter(objParameter, corrParameter);
1750 std::ostringstream myCoutStream;
1751 muonCond.print(myCoutStream);
1752 LogTrace(
"TriggerMenuXmlParser") << myCoutStream.str() <<
"\n" << std::endl;
1756 if ( !insertConditionIntoMap(muonCond, chipNr)) {
1758 <<
" Error: duplicate condition (" << name <<
")"
1764 (m_corMuonTemplate[chipNr]).push_back(muonCond);
1767 (m_vecMuonTemplate[chipNr]).push_back(muonCond);
1774 <<
"\n intGEq = " << intGEq
1775 <<
" nrObj = " << nrObj
1776 <<
"\n ****************************************** "
1795 unsigned int chipNr,
const bool corrFlag) {
1797 XERCES_CPP_NAMESPACE_USE
1802 std::string particle = l1t2string( condCalo.objectType() );
1807 <<
"\n ****************************************** "
1808 <<
"\n DARRENS TEST OUTPUT (in parseCalo) "
1809 <<
"\n condition = " << condition
1810 <<
"\n particle = " << particle
1811 <<
"\n type = " << type
1812 <<
"\n name = " << name
1819 if (particle == m_xmlConditionAttrObjectNoIsoEG) {
1822 else if (particle == m_xmlConditionAttrObjectIsoEG) {
1823 caloObjType =
IsoEG;
1825 else if (particle == m_xmlConditionAttrObjectCenJet) {
1828 else if (particle == m_xmlConditionAttrObjectTauJet) {
1831 else if (particle == m_xmlConditionAttrObjectForJet) {
1835 edm::LogError(
"TriggerMenuXmlParser") <<
"Wrong particle for calo-condition ("
1836 << particle <<
")" << std::endl;
1840 if( type==
"double_wsc" ) type =
"2_wsc";
1841 else if( type==
"single" ) type =
"1_s";
1842 else if( type==
"double" ) type =
"2_s";
1843 else if( type==
"triple" ) type =
"3";
1844 else if( type==
"quad" ) type =
"4";
1847 std::string str_etComparison = l1t2string( condCalo.comparison_operator() );
1849 int nrObj = getNumFromType(type);
1851 edm::LogError(
"TriggerMenuXmlParser") <<
"Unknown type for calo-condition (" << type
1852 <<
")" <<
"\nCan not determine number of trigger objects. " << std::endl;
1857 int intGEq = ( str_etComparison==
"ge" ) ? 1 : 0;
1859 edm::LogError(
"TriggerMenuXmlParser") <<
"Error getting \"greater or equal\" flag"
1864 bool gEq = (intGEq != 0);
1869 std::vector<CaloTemplate::ObjectParameter> objParameter(nrObj);
1873 std::vector<boost::uint64_t> tmpValues((nrObj > 1) ? nrObj : 1);
1874 tmpValues.reserve( nrObj );
1876 if(
int(condCalo.objectRequirements().objectRequirement().size())!=nrObj ){
1877 edm::LogError(
"TriggerMenuXmlParser") <<
" condCalo objects: nrObj = " << nrObj
1878 <<
"condCalo.objectRequirements().objectRequirement().size() = "
1879 << condCalo.objectRequirements().objectRequirement().size()
1889 for( l1t::CalorimeterObjectRequirements::objectRequirement_const_iterator objPar = condCalo.objectRequirements().objectRequirement().begin();
1890 objPar != condCalo.objectRequirements().objectRequirement().end(); ++objPar ){
1893 str_condCalo = l1t2string( objPar->etThreshold() );
1894 if( !getXMLHexTextValue(str_condCalo, dst) )
return false;
1897 if( cnt<nrObj ) objParameter[cnt].etThreshold = objPar->etThreshold();
1901 str_condCalo =
"7f7f";
1903 if( !getXMLHexTextValue(str_condCalo, dst) )
return false;
1904 if( cnt<nrObj ) objParameter[cnt].etaRange = dst;
1907 str_condCalo =
"3ffff";
1908 if( !getXMLHexTextValue(str_condCalo, dst) )
return false;
1909 if( cnt<nrObj ) objParameter[cnt].phiRange = dst;
1914 unsigned int etaWindowLower=-1, etaWindowUpper=-1, etaWindowVetoLower=-1, etaWindowVetoUpper=-1;
1916 for( l1t::CalorimeterObjectRequirement::etaWindow_const_iterator etaWindow =objPar->etaWindow().begin();
1917 etaWindow != objPar->etaWindow().end(); ++etaWindow ){
1920 <<
"\n etaWindow lower = " << etaWindow->lower()
1921 <<
"\n etaWindow upper = " << etaWindow->upper()
1923 if( cntEta==0 ){ etaWindowLower = etaWindow->lower(); etaWindowUpper = etaWindow->upper(); }
1924 else if( cntEta==1 ){ etaWindowVetoLower = etaWindow->lower(); etaWindowVetoUpper = etaWindow->upper(); }
1929 unsigned int phiWindowLower=-1, phiWindowUpper=-1, phiWindowVetoLower=-1, phiWindowVetoUpper=-1;
1930 for( l1t::CalorimeterObjectRequirement::phiWindow_const_iterator phiWindow =objPar->phiWindow().begin();
1931 phiWindow != objPar->phiWindow().end(); ++phiWindow ){
1934 <<
"\n phiWindow begin = " << phiWindow->lower()
1935 <<
"\n phiWindow end = " << phiWindow->upper()
1938 if( cntPhi==0 ){ phiWindowLower = phiWindow->lower(); phiWindowUpper = phiWindow->upper(); }
1939 else if( cntPhi==1 ){ phiWindowVetoLower = phiWindow->lower(); phiWindowVetoUpper = phiWindow->upper(); }
1943 objParameter[cnt].etaWindowLower = etaWindowLower;
1944 objParameter[cnt].etaWindowUpper = etaWindowUpper;
1945 objParameter[cnt].etaWindowVetoLower = etaWindowVetoLower;
1946 objParameter[cnt].etaWindowVetoUpper = etaWindowVetoUpper;
1948 objParameter[cnt].phiWindowLower = phiWindowLower;
1949 objParameter[cnt].phiWindowUpper = phiWindowUpper;
1950 objParameter[cnt].phiWindowVetoLower = phiWindowVetoLower;
1951 objParameter[cnt].phiWindowVetoUpper = phiWindowVetoUpper;
1956 <<
"\n Calo ET high threshold (hex) for calo object " << cnt <<
" = "
1957 << std::hex << objParameter[cnt].etThreshold << std::dec
1958 <<
"\n etaWindow (hex) for calo object " << cnt <<
" = "
1959 << std::hex << objParameter[cnt].etaRange << std::dec
1960 <<
"\n phiRange (hex) for calo object " << cnt <<
" = "
1961 << std::hex << objParameter[cnt].phiRange << std::dec
1962 <<
"\n etaWindow Lower / Upper for calo object " << cnt <<
" = "
1963 << objParameter[cnt].etaWindowLower <<
" / " << objParameter[cnt].etaWindowUpper
1964 <<
"\n etaWindowVeto Lower / Upper for calo object " << cnt <<
" = "
1965 << objParameter[cnt].etaWindowVetoLower <<
" / " << objParameter[cnt].etaWindowVetoUpper
1966 <<
"\n phiWindow Lower / Upper for calo object " << cnt <<
" = "
1967 << objParameter[cnt].phiWindowLower <<
" / " << objParameter[cnt].phiWindowUpper
1968 <<
"\n phiWindowVeto Lower / Upper for calo object " << cnt <<
" = "
1969 << objParameter[cnt].phiWindowVetoLower <<
" / " << objParameter[cnt].phiWindowVetoUpper
1978 bool wscVal = (type == m_xmlConditionAttrType2wsc );
1982 xsd::cxx::tree::optional<l1t::DeltaRequirement> condRanges = condCalo.deltaRequirement();
1984 <<
"\t condRanges->deltaEtaRange().lower() = " << condRanges->deltaEtaRange().lower()
1985 <<
"\n\t condRanges->deltaEtaRange().upper() = " << condRanges->deltaEtaRange().upper()
1986 <<
"\n\t condRanges->deltaPhiRange().lower() = " << condRanges->deltaPhiRange().lower()
1987 <<
"\n\t condRanges->deltaPhiRange().upper() = " << condRanges->deltaPhiRange().upper()
2001 str_condCalo =
"0003";
2002 if ( !hexString2UInt128(str_condCalo, tempUIntL, tempUIntH) ) {
2005 if( tempUIntH != 0 ){
2006 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
2012 str_condCalo =
"003";
2013 if ( !hexString2UInt128(str_condCalo, tempUIntL, tempUIntH) ) {
2016 if( tempUIntH != 0 ){
2017 edm::LogError(
"TriggerMenuXmlParser") <<
"Too large hex-value!" << std::endl;
2027 unsigned int maxbits = 0;
2029 if ( !countConditionChildMaxBits(maxString, maxbits) ) {
2035 <<
" deltaPhiMaxbits (dec) = " << maxbits
2045 <<
" Condition type (enum value) = " << cType
2050 <<
"Type for calo condition id l1t::TypeNull - it means not defined in the XML file."
2051 <<
"\nNumber of trigger objects is set to zero. " << std::endl;
2056 std::vector<L1GtObject> objType(nrObj, caloObjType);
2059 int relativeBx = l1t2int( condCalo.relativeBx() );
2064 caloCond.setCondType(cType);
2065 caloCond.setObjectType(objType);
2066 caloCond.setCondGEq(gEq);
2067 caloCond.setCondChipNr(chipNr);
2068 caloCond.setCondRelativeBx(relativeBx);
2070 caloCond.setConditionParameter(objParameter, corrParameter);
2074 std::ostringstream myCoutStream;
2075 caloCond.print(myCoutStream);
2076 LogTrace(
"TriggerMenuXmlParser") << myCoutStream.str() <<
"\n" << std::endl;
2081 if ( !insertConditionIntoMap(caloCond, chipNr)) {
2084 <<
" Error: duplicate condition (" << name <<
")"
2092 (m_corCaloTemplate[chipNr]).push_back(caloCond);
2095 (m_vecCaloTemplate[chipNr]).push_back(caloCond);
2101 <<
"\n intGEq = " << intGEq
2102 <<
" nrObj = " << nrObj
2103 <<
"\n ****************************************** "
2124 unsigned int chipNr,
const bool corrFlag) {
2126 XERCES_CPP_NAMESPACE_USE
2335 XERCES_CPP_NAMESPACE_USE
2509 XERCES_CPP_NAMESPACE_USE
2585 XERCES_CPP_NAMESPACE_USE
2718 XERCES_CPP_NAMESPACE_USE
2850 XERCES_CPP_NAMESPACE_USE
2919 XERCES_CPP_NAMESPACE_USE
2987 unsigned int chipNr) {
2989 XERCES_CPP_NAMESPACE_USE
2995 if ( !insertConditionIntoMap(correlationCond, chipNr)) {
2998 <<
" Error: duplicate correlation condition (" << name <<
")"
3323 XERCES_CPP_NAMESPACE_USE
3501 m_triggerMenuInterface = l1t2string( meta.name() );
3502 m_triggerMenuInterfaceDate =
"2013-010-24T15:33:24";
3503 m_triggerMenuInterfaceAuthor =
"Darren Puigh";
3504 m_triggerMenuInterfaceDescription = l1t2string( meta.comment() );
3508 m_triggerMenuDescription = l1t2string( meta.comment() );
3509 m_scaleDbKey = l1t2string( meta.scale_set() );
3513 for( l1t::RevisionList::revision_const_iterator revision = meta.revisions().revision().begin();
3514 revision != meta.revisions().revision().end(); ++revision ){
3517 <<
"\t Revision " << cnt
3518 <<
"\t\t author = " << l1t2string( revision->author() )
3519 <<
"\t\t datetime = " << l1tDateTime2string( revision->datetime() )
3523 m_triggerMenuDate = l1tDateTime2string( revision->datetime() );
3524 m_triggerMenuAuthor = l1t2string( revision->author() );
3531 <<
"\n Parsed values from XML file DRULES"
3532 <<
"\nL1 MenuInterface: " << m_triggerMenuInterface
3533 <<
"\nL1 MenuInterface - Creation date: " << m_triggerMenuInterfaceDate
3534 <<
"\nL1 MenuInterface - Creation author: " << m_triggerMenuInterfaceAuthor
3535 <<
"\nL1 MenuInterface - Description: " << m_triggerMenuInterfaceDescription
3537 <<
"\nAlgorithm implementation tag: " << m_algorithmImplementation
3539 <<
"\nL1 Menu - Creation date: " << m_triggerMenuDate
3540 <<
"\nL1 Menu - Creation author: " << m_triggerMenuAuthor
3541 <<
"\nL1 Menu - Description: " << m_triggerMenuDescription
3549 std::string menuName = m_triggerMenuInterface +
"/" + m_scaleDbKey +
"/" + m_algorithmImplementation;
3551 if (menuName != m_triggerMenuName) {
3553 LogDebug(
"TriggerMenuXmlParser") <<
"\n Warning: Inconsistent L1 menu name:"
3554 <<
"\n from XML file name: " << m_triggerMenuName
3555 <<
"\n from XML tag: " << menuName << std::endl;
3557 if (m_triggerMenuInterface !=
"") {
3558 if (m_scaleDbKey ==
"NULL") {
3559 m_triggerMenuName = m_triggerMenuInterface;
3561 m_triggerMenuName = menuName;
3564 LogTrace(
"TriggerMenuXmlParser") <<
"\n L1 menu name set to value from XML tag!"
3565 <<
"\n L1 Menu name: " << m_triggerMenuName << std::endl;
3568 LogTrace(
"TriggerMenuXmlParser") <<
"\n L1 menu name set to file name!"
3569 <<
"\n L1 Menu name: " << m_triggerMenuName << std::endl;
3592 XERCES_CPP_NAMESPACE_USE
3595 std::string condition = getXMLAttribute(node, m_xmlConditionAttrCondition);
3596 std::string particle = getXMLAttribute(node, m_xmlConditionAttrObject);
3600 <<
"\n ****************************************** "
3601 <<
"\n workCondition "
3602 <<
"\n condition = " << condition
3603 <<
"\n particle = " << particle
3604 <<
"\n type = " << type
3605 <<
"\n name = " << name
3608 if (condition.empty() || particle.empty() || type.empty() ) {
3610 edm::LogError(
"TriggerMenuXmlParser") <<
"Missing attributes for condition " << name
3678 XERCES_CPP_NAMESPACE_USE
3680 LogTrace(
"TriggerMenuXmlParser") <<
"\nParsing conditions" << std::endl;
3683 LogDebug(
"l1t|Global") <<
" ====> condCalorimeter" << std::endl;
3684 for (l1t::ConditionList::condCalorimeter_const_iterator condCalo = conditions.condCalorimeter().begin();
3685 condCalo != conditions.condCalorimeter().end(); ++condCalo ){
3688 << condCalo->name() <<
" {"
3689 <<
" comment: " << condCalo->comment()
3690 <<
" locked: " << condCalo->locked()
3694 l1t::CalorimeterCondition condition = (*condCalo);
3696 parseCalo( condition, chipNr );
3699 LogDebug(
"l1t|Global") <<
" ====> condMuon " << std::endl;
3700 for (l1t::ConditionList::condMuon_const_iterator condMu = conditions.condMuon().begin();
3701 condMu != conditions.condMuon().end(); ++condMu ){
3704 << condMu->name() <<
" {"
3705 <<
" comment: " << condMu->comment()
3706 <<
" locked: " << condMu->locked()
3710 l1t::MuonCondition condition = (*condMu);
3712 parseMuon( condition, chipNr );
3731 unsigned int chipNr) {
3733 XERCES_CPP_NAMESPACE_USE
3744 std::string algAlias = l1t2string( algorithm.name() );
3745 std::string algName = l1t2string( algorithm.name() );
3747 if (algAlias ==
"") {
3750 <<
"\n No alias defined for algorithm. Alias set to algorithm name."
3751 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
3755 LogDebug(
"l1t|Global") <<
"\n Alias defined for algorithm."
3756 <<
"\n Algorithm name: " << algName <<
"\n Algorithm alias: " << algAlias
3761 std::string logExpression = l1t2string( algorithm.logical_expression() );
3764 <<
" Logical expression: " << logExpression
3765 <<
" Chip number: " << chipNr
3769 std::string pinString = l1t2string( algorithm.index() );
3772 std::istringstream opStream(pinString);
3774 if ((opStream >> outputPin).
fail()) {
3776 <<
" Unable to convert pin string " << pinString
3777 <<
" to int for algorithm : " << algName
3785 LogDebug(
"l1t|Global") <<
" Output pin: " << outputPin
3791 int bitNumber = outputPin;
3794 LogDebug(
"l1t|Global") <<
" Bit number: " << bitNumber
3804 std::ostringstream myCoutStream;
3805 alg.
print(myCoutStream);
3806 LogTrace(
"TriggerMenuXmlParser") << myCoutStream.str() <<
"\n" << std::endl;
3811 if ( !insertAlgorithmIntoMap(alg)) {
3835 XERCES_CPP_NAMESPACE_USE
3837 LogTrace(
"TriggerMenuXmlParser") <<
"\nParsing algorithms" << std::endl;
3840 LogDebug(
"l1t|Global") <<
" ====> algorithms " << std::endl;
3841 for( l1t::AlgorithmList::algorithm_const_iterator
i = algorithms.algorithm().begin();
3842 i != algorithms.algorithm().end(); ++
i ){
3846 << algorithm.name() <<
" {"
3847 <<
" index: " << algorithm.index()
3848 <<
" equation: " << algorithm.logical_expression()
3849 <<
" comment: " << algorithm.comment()
3850 <<
" locked: " << algorithm.locked()
3855 workAlgorithm( algorithm, chipNr );
3875 XERCES_CPP_NAMESPACE_USE
3879 <<
" Node is 0 in " << __PRETTY_FUNCTION__
3880 <<
" can not parse the technical trigger " << algName
3886 std::string logExpression = getXMLTextValue(node);
3893 DOMNode* pinNode = findXMLChild(node->getFirstChild(), m_xmlTagOutput);
3897 pinNode = node->getFirstChild();
3898 if ( (pinNode = findXMLChild(pinNode, m_xmlTagOutputPin) ) != 0) {
3899 pinString = getXMLAttribute(pinNode, m_xmlAttrNr);
3902 std::istringstream opStream(pinString);
3904 if ((opStream >> outputPin).
fail()) {
3906 <<
" Unable to convert pin string " << pinString
3907 <<
" to int for technical trigger : " << algName
3917 <<
" Warning: No pin number found for technical trigger: "
3918 << algName << std::endl;
3924 int bitNumber = outputPin;
3937 std::ostringstream myCoutStream;
3938 alg.
print(myCoutStream);
3939 LogTrace(
"TriggerMenuXmlParser") << myCoutStream.str() <<
"\n" << std::endl;
3944 if ( !insertTechTriggerIntoMap(alg)) {
3964 XERCES_CPP_NAMESPACE_USE
3968 DOMNode*
doc = parser->getDocument();
3969 DOMNode*
node = doc->getFirstChild();
3971 DOMNode* algNode = node->getFirstChild();
3974 <<
" Error: No child found for " << m_xmlTagDef << std::endl;
3978 algNode = findXMLChild(algNode, m_xmlTagTechTriggers);
3981 << m_xmlTagTechTriggers <<
"> child found."
3987 DOMNode* algNameNode = algNode->getFirstChild();
3989 algNameNode = findXMLChild(algNameNode,
"",
true, &algNameNodeName);
3991 while (algNameNode != 0) {
3996 if ( !workTechTrigger(algNameNode, algNameNodeName)) {
4000 algNameNode = findXMLChild(algNameNode->getNextSibling(),
"",
true,
4020 XERCES_CPP_NAMESPACE_USE
4026 l1t::Meta meta = tm->meta();
4027 l1t::ConditionList conditions = tm->conditions();
4028 l1t::AlgorithmList algorithms = tm->algorithms();
4030 if ( !parseId( meta ) ) {
4035 if ( !parseConditions( conditions ) ) {
4040 if ( !parseAlgorithms( algorithms ) ) {
< trclass="colgroup">< tdclass="colgroup"colspan=5 > Ecal cluster collections</td ></tr >< tr >< td >< ahref="classreco_1_1BasicCluster.html"> reco::BasicCluster</a ></td >< td >< ahref="DataFormats_EgammaReco.html"> reco::BasicClusterCollection</a ></td >< td >< ahref="#"> hybridSuperClusters</a ></td >< tdclass="description"> Basic clusters reconstructed with hybrid algorithm(barrel only)</td >< td >S.Rahatlou</td ></tr >< tr >< td >< a href
unsigned int deltaPhiMaxbits
unsigned int deltaEtaRangeLower
void setAlgoAlias(const std::string &algoAliasValue)
virtual void print(std::ostream &myCout) const
print condition
unsigned long long deltaEtaRange
const std::string algoName() const
get / set algorithm name
unsigned long long deltaPhiRange
unsigned int deltaPhiRangeLower
std::string const & algoAlias() const
get / set algorithm alias
void setAlgoChipNumber(const int algoChipNumberValue)
unsigned long long deltaPhiRange
AlgorithmMap::const_iterator CItAlgo
iterators through map containing the algorithms
unsigned int deltaEtaRangeUpper
unsigned int deltaPhiRangeLower
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
int algoBitNumber() const
get / set algorithm bit number
unsigned int deltaPhiRangeUpper
std::map< std::string, L1GtAlgorithm > AlgorithmMap
map containing the algorithms
unsigned int deltaPhiMaxbits
unsigned int deltaPhiRangeUpper
const std::string & condName() const
get / set condition name
unsigned long long uint64_t
bool xmlFile(const std::string fParam)
typedef for correlation parameters
unsigned long long deltaEtaRange
char data[epos_bytes_allocation]
const int algoChipNumber() const
get / set algorithm bit number
static std::atomic< unsigned int > counter
unsigned int chargeCorrelation
unsigned int deltaEtaRangeLower
unsigned int deltaEtaRangeUpper