CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/L1TriggerConfig/L1GtConfigProducers/src/L1GtTriggerMenuTester.cc

Go to the documentation of this file.
00001 
00017 // this class header
00018 #include "L1TriggerConfig/L1GtConfigProducers/interface/L1GtTriggerMenuTester.h"
00019 
00020 // system include files
00021 #include <iomanip>
00022 #include <boost/algorithm/string/erase.hpp>
00023 
00024 // user include files
00025 //   base class
00026 #include "FWCore/Framework/interface/EDAnalyzer.h"
00027 
00028 #include "FWCore/Framework/interface/Event.h"
00029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00030 
00031 #include "FWCore/Framework/interface/EventSetup.h"
00032 #include "FWCore/Framework/interface/ESHandle.h"
00033 
00034 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
00035 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
00036 
00037 #include "CondFormats/L1TObjects/interface/L1GtPrescaleFactors.h"
00038 
00039 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsAlgoTrigRcd.h"
00040 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsTechTrigRcd.h"
00041 
00042 #include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h"
00043 
00044 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h"
00045 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h"
00046 
00047 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoAlgoTrigRcd.h"
00048 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoTechTrigRcd.h"
00049 
00050 #include "DataFormats/L1GlobalTrigger/interface/L1GtLogicParser.h"
00051 
00052 // forward declarations
00053 
00054 // constructor(s)
00055 L1GtTriggerMenuTester::L1GtTriggerMenuTester(const edm::ParameterSet& parSet) {
00056     // empty
00057 }
00058 
00059 // destructor
00060 L1GtTriggerMenuTester::~L1GtTriggerMenuTester() {
00061     // empty
00062 }
00063 
00064 // loop over events
00065 void L1GtTriggerMenuTester::analyze(const edm::Event& iEvent,
00066         const edm::EventSetup& evSetup) {
00067 
00068     edm::ESHandle< L1GtTriggerMenu> l1GtMenu;
00069     evSetup.get< L1GtTriggerMenuRcd>().get(l1GtMenu);
00070     (const_cast<L1GtTriggerMenu*>(l1GtMenu.product()))->buildGtConditionMap();
00071 
00072     // print with various level of verbosities
00073 
00074     int printVerbosity = 0;
00075     l1GtMenu->print(std::cout, printVerbosity);
00076     std::cout << std::flush << std::endl;
00077 
00078     printVerbosity = 1;
00079     l1GtMenu->print(std::cout, printVerbosity);
00080     std::cout << std::flush << std::endl;
00081 
00082     printVerbosity = 2;
00083     l1GtMenu->print(std::cout, printVerbosity);
00084     std::cout << std::flush << std::endl;
00085 
00086     //
00087     // print menu, prescale factors and trigger mask in wiki format
00088     //
00089 
00090     // L1 GT prescale factors for algorithm triggers
00091     edm::ESHandle< L1GtPrescaleFactors> l1GtPfAlgo;
00092     evSetup.get< L1GtPrescaleFactorsAlgoTrigRcd>().get(l1GtPfAlgo);
00093 
00094     int indexPfSet = 0; // FIXME
00095 
00096     std::vector<int> prescaleFactorsAlgoTrig =
00097         (l1GtPfAlgo->gtPrescaleFactors()).at(indexPfSet);
00098 
00099 
00100     // L1 GT prescale factors for technical triggers
00101     edm::ESHandle< L1GtPrescaleFactors> l1GtPfTech;
00102     evSetup.get< L1GtPrescaleFactorsTechTrigRcd>().get(l1GtPfTech);
00103 
00104     std::vector<int> prescaleFactorsTechTrig =
00105         (l1GtPfTech->gtPrescaleFactors()).at(indexPfSet);
00106 
00107 
00108     // L1 GT trigger masks for algorithm triggers
00109     edm::ESHandle< L1GtTriggerMask> l1GtTmAlgo;
00110     evSetup.get< L1GtTriggerMaskAlgoTrigRcd>().get(l1GtTmAlgo);
00111 
00112     std::vector<unsigned int> triggerMaskAlgoTrig = l1GtTmAlgo->gtTriggerMask();
00113 
00114 
00115     // L1 GT trigger masks for technical triggers
00116     edm::ESHandle< L1GtTriggerMask> l1GtTmTech;
00117     evSetup.get< L1GtTriggerMaskTechTrigRcd>().get(l1GtTmTech);
00118 
00119     std::vector<unsigned int> triggerMaskTechTrig = l1GtTmTech->gtTriggerMask();
00120 
00121 
00122     // L1 GT trigger veto masks for algorithm triggers
00123     edm::ESHandle< L1GtTriggerMask> l1GtTmVetoAlgo;
00124     evSetup.get< L1GtTriggerMaskVetoAlgoTrigRcd>().get(l1GtTmVetoAlgo);
00125 
00126     std::vector<unsigned int> triggerMaskVetoAlgoTrig = l1GtTmVetoAlgo->gtTriggerMask();
00127 
00128 
00129     // L1 GT trigger veto masks for technical triggers
00130     edm::ESHandle< L1GtTriggerMask> l1GtTmVetoTech;
00131     evSetup.get< L1GtTriggerMaskVetoTechTrigRcd>().get(l1GtTmVetoTech);
00132 
00133     std::vector<unsigned int> triggerMaskVetoTechTrig = l1GtTmVetoTech->gtTriggerMask();
00134 
00135     // set the index of physics DAQ partition TODO EventSetup?
00136     int physicsDaqPartition = 0;
00137 
00138     // use another map <int, L1GtAlgorithm> to get the menu sorted after bit number
00139     // both algorithm and bit numbers are unique
00140     typedef std::map<int, const L1GtAlgorithm*>::const_iterator CItBit;
00141 
00142     //    algorithm triggers
00143     const AlgorithmMap& algorithmMap = l1GtMenu->gtAlgorithmMap();
00144 
00145 
00146     std::map<int, const L1GtAlgorithm*> algoBitToAlgo;
00147 
00148     typedef std::map<std::string, const L1GtAlgorithm*>::const_iterator CItAlgoP;
00149 
00150     std::map<std::string, const L1GtAlgorithm*> jetAlgoTrig;
00151     std::map<std::string, const L1GtAlgorithm*> egammaAlgoTrig;
00152     std::map<std::string, const L1GtAlgorithm*> esumAlgoTrig;
00153     std::map<std::string, const L1GtAlgorithm*> muonAlgoTrig;
00154     std::map<std::string, const L1GtAlgorithm*> crossAlgoTrig;
00155     std::map<std::string, const L1GtAlgorithm*> bkgdAlgoTrig;
00156 
00157     int algoTrigNumberTotal = 128; // FIXME take it from stable parameters
00158 
00159     int algoTrigNumber = 0;
00160     int freeAlgoTrigNumber = 0;
00161 
00162     int jetAlgoTrigNumber = 0;
00163     int egammaAlgoTrigNumber = 0;
00164     int esumAlgoTrigNumber = 0;
00165     int muonAlgoTrigNumber = 0;
00166     int crossAlgoTrigNumber = 0;
00167     int bkgdAlgoTrigNumber = 0;
00168 
00169     for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
00170 
00171         const int bitNumber = (itAlgo->second).algoBitNumber();
00172         const std::string& algName = (itAlgo->second).algoName();
00173 
00174         algoBitToAlgo[bitNumber] = &(itAlgo->second);
00175 
00176         algoTrigNumber++;
00177 
00178         // per category
00179 
00180         const ConditionMap& conditionMap =
00181                 (l1GtMenu->gtConditionMap()).at((itAlgo->second).algoChipNumber());
00182 
00183         const std::vector<L1GtLogicParser::TokenRPN>& rpnVector = (itAlgo->second).algoRpnVector();
00184         const L1GtLogicParser::OperationType condOperand = L1GtLogicParser::OP_OPERAND;
00185 
00186         std::list<L1GtObject> listObjects;
00187 
00188         for (size_t i = 0; i < rpnVector.size(); ++i) {
00189 
00190             if ((rpnVector[i]).operation == condOperand) {
00191 
00192                 const std::string& cndName = (rpnVector[i]).operand;
00193 
00194                 // search the condition in the condition list
00195 
00196                 bool foundCond = false;
00197 
00198                 CItCond itCond = conditionMap.find(cndName);
00199                 if (itCond != conditionMap.end()) {
00200                     foundCond = true;
00201 
00202                     // loop through object types and add them to the list
00203 
00204                     const std::vector<L1GtObject>& objType =
00205                             (itCond->second)->objectType();
00206 
00207                     for (std::vector<L1GtObject>::const_iterator itObject =
00208                             objType.begin(); itObject != objType.end(); itObject++) {
00209                         listObjects.push_back(*itObject);
00210 
00211                         std::cout << (*itObject) << std::endl;
00212                     }
00213 
00214                     // FIXME
00215                     if ((itCond->second)->condCategory() == CondExternal) {
00216                         listObjects.push_back(GtExternal);
00217                     }
00218 
00219                 }
00220 
00221                 if (!foundCond) {
00222 
00223                     // it should never be happen, all conditions are in the maps
00224                     throw cms::Exception("FailModule") << "\nCondition "
00225                             << cndName << " not found in the condition map"
00226                             << " for chip number "
00227                             << ((itAlgo->second).algoChipNumber()) << std::endl;
00228                 }
00229 
00230             }
00231 
00232         }
00233 
00234         // eliminate duplicates
00235         listObjects.sort();
00236         listObjects.unique();
00237 
00238         // add the algorithm to the corresponding group
00239 
00240         bool jetGroup = false;
00241         bool egammaGroup = false;
00242         bool esumGroup = false;
00243         bool muonGroup = false;
00244         bool crossGroup = false;
00245         bool bkgdGroup = false;
00246 
00247         for (std::list<L1GtObject>::const_iterator itObj = listObjects.begin(); itObj != listObjects.end(); ++itObj) {
00248 
00249 
00250             switch (*itObj) {
00251                 case Mu: {
00252                     muonGroup = true;
00253                 }
00254 
00255                 break;
00256                 case NoIsoEG: {
00257                     egammaGroup = true;
00258                 }
00259 
00260                 break;
00261                 case IsoEG: {
00262                     egammaGroup = true;
00263                 }
00264 
00265                 break;
00266                 case CenJet: {
00267                     jetGroup = true;
00268                 }
00269 
00270                 break;
00271                 case ForJet: {
00272                     jetGroup = true;
00273                 }
00274 
00275                 break;
00276                 case TauJet: {
00277                     jetGroup = true;
00278                 }
00279 
00280                 break;
00281                 case ETM: {
00282                     esumGroup = true;
00283 
00284                 }
00285 
00286                 break;
00287                 case ETT: {
00288                     esumGroup = true;
00289 
00290                 }
00291 
00292                 break;
00293                 case HTT: {
00294                     esumGroup = true;
00295 
00296                 }
00297 
00298                 break;
00299                 case HTM: {
00300                     esumGroup = true;
00301 
00302                 }
00303 
00304                 break;
00305                 case JetCounts: {
00306                     // do nothing - not available
00307                 }
00308 
00309                 break;
00310                 case HfBitCounts: {
00311                     bkgdGroup = true;
00312                 }
00313 
00314                 break;
00315                 case HfRingEtSums: {
00316                     bkgdGroup = true;
00317                 }
00318 
00319                 break;
00320                 case GtExternal: {
00321                     bkgdGroup = true;
00322                 }
00323 
00324                 break;
00325                 case TechTrig:
00326                 case Castor:
00327                 case BPTX:
00328                 default: {
00329                     // should not arrive here
00330 
00331                     std::cout << "\n      Unknown object of type " << *itObj
00332                     << std::endl;
00333                 }
00334                 break;
00335             }
00336 
00337         }
00338 
00339 
00340         int sumGroup = jetGroup + egammaGroup + esumGroup + muonGroup
00341                 + crossGroup + bkgdGroup;
00342 
00343         if (sumGroup > 1) {
00344             crossAlgoTrig[algName] = &(itAlgo->second);
00345         } else {
00346 
00347             if (jetGroup) {
00348                 jetAlgoTrig[algName] = &(itAlgo->second);
00349 
00350             } else if (egammaGroup) {
00351                 egammaAlgoTrig[algName] = &(itAlgo->second);
00352 
00353             } else if (esumGroup && (listObjects.size() > 1)) {
00354                 crossAlgoTrig[algName] = &(itAlgo->second);
00355 
00356             } else if (esumGroup) {
00357                 esumAlgoTrig[algName] = &(itAlgo->second);
00358 
00359             } else if (muonGroup) {
00360                 muonAlgoTrig[algName] = &(itAlgo->second);
00361 
00362             } else if (bkgdGroup) {
00363                 bkgdAlgoTrig[algName] = &(itAlgo->second);
00364 
00365             } else {
00366                 // do nothing
00367             }
00368 
00369         }
00370 
00371         std::cout << algName << " sum: " << sumGroup << " size: " << listObjects.size() << std::endl;
00372 
00373     }
00374 
00375     freeAlgoTrigNumber = algoTrigNumberTotal - algoTrigNumber;
00376 
00377     jetAlgoTrigNumber = jetAlgoTrig.size();
00378     egammaAlgoTrigNumber = egammaAlgoTrig.size();
00379     esumAlgoTrigNumber = esumAlgoTrig.size();
00380     muonAlgoTrigNumber = muonAlgoTrig.size();
00381     crossAlgoTrigNumber = crossAlgoTrig.size();
00382     bkgdAlgoTrigNumber = bkgdAlgoTrig.size();
00383 
00384 
00385 
00386     //    technical triggers
00387     std::map<int, const L1GtAlgorithm*> techBitToAlgo;
00388     const AlgorithmMap& technicalTriggerMap = l1GtMenu->gtTechnicalTriggerMap();
00389 
00390     int techTrigNumberTotal = 64; // FIXME take it from stable parameters
00391 
00392     int techTrigNumber = 0;
00393     int freeTechTrigNumber = 0;
00394 
00395     for (CItAlgo itAlgo = technicalTriggerMap.begin(); itAlgo != technicalTriggerMap.end(); itAlgo++) {
00396 
00397         int bitNumber = (itAlgo->second).algoBitNumber();
00398         techBitToAlgo[bitNumber] = &(itAlgo->second);
00399 
00400         techTrigNumber++;
00401     }
00402 
00403     freeTechTrigNumber = techTrigNumberTotal - techTrigNumber;
00404 
00405 
00406     // header for printing algorithms
00407 
00408     std::cout << "\n   ********** L1 Trigger Menu - printing   ********** \n\n"
00409             << "\n---++ L1 menu identification\n"
00410             << "\n|L1 Trigger Menu Interface: |!" << l1GtMenu->gtTriggerMenuInterface() << " |"
00411             << "\n|L1 Trigger Menu Name: |!" << l1GtMenu->gtTriggerMenuName() << " |"
00412             << "\n|L1 Trigger Menu Implementation: |!" << l1GtMenu->gtTriggerMenuImplementation() << " |"
00413             << "\n|Associated L1 scale DB key: |!" << l1GtMenu->gtScaleDbKey() << " |" << "\n\n"
00414             << std::flush << std::endl;
00415 
00416     // Overview page
00417     std::cout << "\n---++ Overview\n" << std::endl;
00418     std::cout << "   * Number of algorithm triggers: " << algoTrigNumber << " defined, 128 possible." << std::endl;
00419     std::cout << "   * Number of technical triggers: " << techTrigNumber << " defined,  64 possible.<BR><BR>" << std::endl;
00420 
00421     std::cout << "   * Number of free bits for algorithm triggers: " << freeAlgoTrigNumber << std::endl;
00422     std::cout << "   * Number of free bits for technical triggers: " << freeTechTrigNumber << "<BR>" << std::endl;
00423 
00424     std::cout << "\nNumber of algorithm triggers per trigger group\n" << std::endl;
00425     std::cout << "    | *Trigger group* | *Number of bits used*|"<< std::endl;
00426     std::cout << "    | Jet algorithm triggers: |  " << jetAlgoTrigNumber << "|"<< std::endl;
00427     std::cout << "    | EGamma algorithm triggers: |  " << egammaAlgoTrigNumber << "|"<< std::endl;
00428     std::cout << "    | Energy sum algorithm triggers: |  " << esumAlgoTrigNumber << "|"<< std::endl;
00429     std::cout << "    | Muon algorithm triggers: |  " << muonAlgoTrigNumber << "|"<< std::endl;
00430     std::cout << "    | Cross algorithm triggers: |  " << crossAlgoTrigNumber << "|"<< std::endl;
00431     std::cout << "    | Background algorithm triggers: |  " << bkgdAlgoTrigNumber << "|"<< std::endl;
00432 
00433     std::cout << "\n---++ List of algorithm triggers sorted by trigger groups\n" << std::endl;
00434 
00435     // Jet algorithm triggers
00436     std::cout << "\n---+++ Jet algorithm triggers\n" << std::endl;
00437     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00438 
00439     for (CItAlgoP itAlgo = jetAlgoTrig.begin(); itAlgo != jetAlgoTrig.end(); itAlgo++) {
00440 
00441         const std::string& aName = (itAlgo->second)->algoName();
00442         const std::string& aAlias = (itAlgo->second)->algoAlias();
00443 
00444         std::string aNameNoU = aName; // ...ugly
00445         boost::erase_all(aNameNoU, "_");
00446 
00447         std::cout
00448         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00449         << std::endl;
00450     }
00451 
00452     std::cout << "\nJet algorithm triggers: " << jetAlgoTrigNumber << " bits defined."<< std::endl;
00453 
00454 
00455     // EGamma algorithm triggers
00456     std::cout << "\n---+++ EGamma algorithm triggers\n" << std::endl;
00457     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00458 
00459     for (CItAlgoP itAlgo = egammaAlgoTrig.begin(); itAlgo != egammaAlgoTrig.end(); itAlgo++) {
00460 
00461         const std::string& aName = (itAlgo->second)->algoName();
00462         const std::string& aAlias = (itAlgo->second)->algoAlias();
00463 
00464         std::string aNameNoU = aName; // ...ugly
00465         boost::erase_all(aNameNoU, "_");
00466 
00467         std::cout
00468         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00469         << std::endl;
00470     }
00471 
00472     std::cout << "\nEGamma algorithm triggers: " << egammaAlgoTrigNumber << " bits defined."<< std::endl;
00473 
00474 
00475 
00476     // Energy sum algorithm triggers
00477     std::cout << "\n---+++ Energy sum algorithm triggers\n" << std::endl;
00478     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00479 
00480     for (CItAlgoP itAlgo = esumAlgoTrig.begin(); itAlgo != esumAlgoTrig.end(); itAlgo++) {
00481 
00482         const std::string& aName = (itAlgo->second)->algoName();
00483         const std::string& aAlias = (itAlgo->second)->algoAlias();
00484 
00485         std::string aNameNoU = aName; // ...ugly
00486         boost::erase_all(aNameNoU, "_");
00487 
00488         std::cout
00489         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00490         << std::endl;
00491     }
00492 
00493     std::cout << "\nEnergy sum algorithm triggers: " << esumAlgoTrigNumber << " bits defined."<< std::endl;
00494 
00495 
00496     // Muon algorithm triggers
00497     std::cout << "\n---+++ Muon algorithm triggers\n" << std::endl;
00498     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00499 
00500     for (CItAlgoP itAlgo = muonAlgoTrig.begin(); itAlgo != muonAlgoTrig.end(); itAlgo++) {
00501 
00502         const std::string& aName = (itAlgo->second)->algoName();
00503         const std::string& aAlias = (itAlgo->second)->algoAlias();
00504 
00505         std::string aNameNoU = aName; // ...ugly
00506         boost::erase_all(aNameNoU, "_");
00507 
00508         std::cout
00509         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00510         << std::endl;
00511     }
00512 
00513     std::cout << "\nMuon algorithm triggers: " << muonAlgoTrigNumber << " bits defined."<< std::endl;
00514 
00515 
00516     // Cross algorithm triggers
00517     std::cout << "\n---+++ Cross algorithm triggers\n" << std::endl;
00518     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00519 
00520     for (CItAlgoP itAlgo = crossAlgoTrig.begin(); itAlgo != crossAlgoTrig.end(); itAlgo++) {
00521 
00522         const std::string& aName = (itAlgo->second)->algoName();
00523         const std::string& aAlias = (itAlgo->second)->algoAlias();
00524 
00525         std::string aNameNoU = aName; // ...ugly
00526         boost::erase_all(aNameNoU, "_");
00527 
00528         std::cout
00529         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00530         << std::endl;
00531     }
00532 
00533     std::cout << "\nCross algorithm triggers: " << crossAlgoTrigNumber << " bits defined."<< std::endl;
00534 
00535 
00536     // Background algorithm triggers
00537     std::cout << "\n---+++ Background algorithm triggers\n" << std::endl;
00538     std::cout << "| *AlgoTrig Name* | *AlgoTrig Alias* | *Prescale status* | *Seed for HLT path(s)* | *Expected rate* | *Comments* | " << std::endl;
00539 
00540     for (CItAlgoP itAlgo = bkgdAlgoTrig.begin(); itAlgo != bkgdAlgoTrig.end(); itAlgo++) {
00541 
00542         const std::string& aName = (itAlgo->second)->algoName();
00543         const std::string& aAlias = (itAlgo->second)->algoAlias();
00544 
00545         std::string aNameNoU = aName; // ...ugly
00546         boost::erase_all(aNameNoU, "_");
00547 
00548         std::cout
00549         << "|" << std::left << aName << "  |" << aAlias << "  |  " << "  |  " << "  |  " << ( "  | [[#"+aNameNoU ) << "][link]] " << "  |  "
00550         << std::endl;
00551     }
00552 
00553     std::cout << "\nBackground algorithm triggers: " << bkgdAlgoTrigNumber << " bits defined."<< std::endl;
00554 
00555 
00556 
00557     std::cout << "\n---+++ Comments\n" << std::endl;
00558 
00559 
00560     // Jet algorithm triggers - comments
00561     std::cout << "\n---++++ Jet algorithm triggers - comments\n" << std::endl;
00562     std::cout
00563             << "| *Algorithm trigger name*  | *Uncorrected energy* | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00564             << std::endl;
00565 
00566     for (CItAlgoP itAlgo = jetAlgoTrig.begin(); itAlgo != jetAlgoTrig.end(); itAlgo++) {
00567 
00568         const std::string& aName = (itAlgo->second)->algoName();
00569 
00570         std::string aNameNoU = aName; // ...ugly
00571         boost::erase_all(aNameNoU, "_");
00572 
00573         std::cout << ("#" + aNameNoU) << std::endl;
00574         std::cout << "| " << std::left << aName << " |  |  |  |  |  |  | "
00575                 << std::endl;
00576 
00577     }
00578 
00579 
00580     // EGamma algorithm triggers - comments
00581     std::cout << "\n---++++ EGamma algorithm triggers - comments\n" << std::endl;
00582     std::cout
00583             << "| *Algorithm trigger name*  | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00584             << std::endl;
00585 
00586     for (CItAlgoP itAlgo = egammaAlgoTrig.begin(); itAlgo != egammaAlgoTrig.end(); itAlgo++) {
00587 
00588         const std::string& aName = (itAlgo->second)->algoName();
00589 
00590         std::string aNameNoU = aName; // ...ugly
00591         boost::erase_all(aNameNoU, "_");
00592 
00593         std::cout << ("#" + aNameNoU) << std::endl;
00594         std::cout << "| " << std::left << aName << " |  |  |  |  |  | "
00595                 << std::endl;
00596 
00597     }
00598 
00599 
00600     // Energy sum algorithm triggers - comments
00601     std::cout << "\n---++++ Energy sum algorithm triggers - comments\n" << std::endl;
00602     std::cout
00603             << "| *Algorithm trigger name*  | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00604             << std::endl;
00605 
00606     for (CItAlgoP itAlgo = esumAlgoTrig.begin(); itAlgo != esumAlgoTrig.end(); itAlgo++) {
00607 
00608         const std::string& aName = (itAlgo->second)->algoName();
00609 
00610         std::string aNameNoU = aName; // ...ugly
00611         boost::erase_all(aNameNoU, "_");
00612 
00613         std::cout << ("#" + aNameNoU) << std::endl;
00614         std::cout << "| " << std::left << aName << " |  |  |  |  |  | "
00615                 << std::endl;
00616 
00617     }
00618 
00619 
00620     // Muon algorithm triggers - comments
00621     std::cout << "\n---++++ Muon algorithm triggers - comments\n" << std::endl;
00622     std::cout
00623             << "| *Algorithm trigger name*  | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00624             << std::endl;
00625 
00626     for (CItAlgoP itAlgo = muonAlgoTrig.begin(); itAlgo != muonAlgoTrig.end(); itAlgo++) {
00627 
00628         const std::string& aName = (itAlgo->second)->algoName();
00629 
00630         std::string aNameNoU = aName; // ...ugly
00631         boost::erase_all(aNameNoU, "_");
00632 
00633         std::cout << ("#" + aNameNoU) << std::endl;
00634         std::cout << "| " << std::left << aName << " |  |  |  |  |  | "
00635                 << std::endl;
00636 
00637     }
00638 
00639 
00640     // Cross algorithm triggers - comments
00641     std::cout << "\n---++++ Cross algorithm triggers - comments\n" << std::endl;
00642     std::cout
00643             << "| *Algorithm trigger name*  | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00644             << std::endl;
00645 
00646     for (CItAlgoP itAlgo = crossAlgoTrig.begin(); itAlgo != crossAlgoTrig.end(); itAlgo++) {
00647 
00648         const std::string& aName = (itAlgo->second)->algoName();
00649 
00650         std::string aNameNoU = aName; // ...ugly
00651         boost::erase_all(aNameNoU, "_");
00652 
00653         std::cout << ("#" + aNameNoU) << std::endl;
00654         std::cout << "| " << std::left << aName << " |  |  |  |  |  | "
00655                 << std::endl;
00656 
00657     }
00658 
00659     // Background algorithm triggers - comments
00660     std::cout << "\n---++++ Background algorithm triggers - comments\n" << std::endl;
00661     std::cout
00662             << "| *Algorithm trigger name*  | *Typical prescale factor* | *HLT path* | *Requested by* | *POG/PAG group* | *Comments* | "
00663             << std::endl;
00664 
00665     for (CItAlgoP itAlgo = bkgdAlgoTrig.begin(); itAlgo != bkgdAlgoTrig.end(); itAlgo++) {
00666 
00667         const std::string& aName = (itAlgo->second)->algoName();
00668 
00669         std::string aNameNoU = aName; // ...ugly
00670         boost::erase_all(aNameNoU, "_");
00671 
00672         std::cout << ("#" + aNameNoU) << std::endl;
00673         std::cout << "| " << std::left << aName << " |  |  |  |  |  | "
00674                 << std::endl;
00675 
00676     }
00677 
00678 
00679 
00680 
00681 
00682     std::cout << "\n---++ List of algorithm triggers sorted by bits\n" << std::endl;
00683 
00684     std::cout
00685     << "| *Algorithm* | *Alias* | *Bit number* | *Prescale factor* | *Mask* |"
00686     << std::endl;
00687 
00688     for (CItBit itBit = algoBitToAlgo.begin(); itBit != algoBitToAlgo.end(); itBit++) {
00689 
00690         int bitNumber = itBit->first;
00691         std::string aName = (itBit->second)->algoName();
00692         std::string aAlias = (itBit->second)->algoAlias();
00693 
00694         unsigned int triggerMaskAlgo =
00695             (triggerMaskAlgoTrig.at(bitNumber)) & (1 << physicsDaqPartition);
00696 
00697         std::cout
00698         << "|" << std::left << aName << "  |" << aAlias << "  |  " << std::right << bitNumber
00699         << "|  " << prescaleFactorsAlgoTrig.at(bitNumber)
00700         << "|  " << triggerMaskAlgo
00701         << " |"
00702         << std::endl;
00703     }
00704 
00705 
00706 
00707 
00708     std::cout << "\n---++ List of technical triggers\n" << std::endl;
00709 
00710     std::cout
00711     << "| *Technical trigger* | *Bit number* | *Prescale factor* | *Mask* | *Veto mask* |"
00712     << std::endl;
00713 
00714     for (CItBit itBit = techBitToAlgo.begin(); itBit != techBitToAlgo.end(); itBit++) {
00715 
00716         int bitNumber = itBit->first;
00717         std::string aName = (itBit->second)->algoName();
00718         std::string aAlias = (itBit->second)->algoAlias();
00719 
00720         unsigned int triggerMaskTech =
00721             (triggerMaskTechTrig.at(bitNumber)) & (1 << physicsDaqPartition);
00722         unsigned int triggerMaskVetoTech =
00723             (triggerMaskVetoTechTrig.at(bitNumber)) & (1 << physicsDaqPartition);
00724 
00725         std::cout
00726         << "|!" << std::left << aName << "  |  " << std::right << bitNumber
00727         << "|  " << prescaleFactorsTechTrig.at(bitNumber)
00728         << "|  " << triggerMaskTech
00729         << "|  " << triggerMaskVetoTech
00730         << " |"
00731         << std::endl;
00732     }
00733 
00734     std::cout
00735     << "\nNOTE: only the prescale factors from set index zero are printed!"
00736     << std::endl;
00737 
00738 }