00001
00017
00018 #include "L1Trigger/GlobalTriggerAnalyzer/interface/L1GtUtils.h"
00019
00020
00021 #include <iomanip>
00022
00023
00024 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h"
00025 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00026 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h"
00027
00028 #include "FWCore/Framework/interface/ESHandle.h"
00029
00030 #include "CondFormats/L1TObjects/interface/L1GtStableParameters.h"
00031 #include "CondFormats/DataRecord/interface/L1GtStableParametersRcd.h"
00032
00033 #include "CondFormats/L1TObjects/interface/L1GtPrescaleFactors.h"
00034 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsAlgoTrigRcd.h"
00035 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsTechTrigRcd.h"
00036
00037 #include "CondFormats/L1TObjects/interface/L1GtTriggerMask.h"
00038 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskAlgoTrigRcd.h"
00039 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskTechTrigRcd.h"
00040
00041 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoAlgoTrigRcd.h"
00042 #include "CondFormats/DataRecord/interface/L1GtTriggerMaskVetoTechTrigRcd.h"
00043
00044 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
00045 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
00046
00047 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00048
00049
00050 L1GtUtils::L1GtUtils() :
00051
00052 m_l1GtStableParCacheID(0ULL), m_numberAlgorithmTriggers(0),
00053
00054 m_numberTechnicalTriggers(0),
00055
00056 m_l1GtPfAlgoCacheID(0ULL), m_l1GtPfTechCacheID(0ULL),
00057
00058 m_l1GtTmAlgoCacheID(0ULL), m_l1GtTmTechCacheID(0ULL),
00059
00060 m_l1GtTmVetoAlgoCacheID(0ULL), m_l1GtTmVetoTechCacheID(0ULL),
00061
00062 m_l1GtMenuCacheID(0ULL),
00063
00064 m_l1EventSetupValid(false),
00065
00066 m_l1GtMenuLiteValid(false),
00067
00068 m_physicsDaqPartition(0),
00069
00070 m_retrieveL1EventSetup(false),
00071
00072 m_retrieveL1GtTriggerMenuLite(false)
00073
00074 {
00075
00076
00077 }
00078
00079
00080 L1GtUtils::~L1GtUtils() {
00081
00082
00083
00084 }
00085
00086 const std::string L1GtUtils::triggerCategory(
00087 const TriggerCategory& trigCategory) const {
00088
00089 switch (trigCategory) {
00090 case AlgorithmTrigger: {
00091 return "Algorithm Trigger";
00092 }
00093 break;
00094 case TechnicalTrigger: {
00095 return "Technical Trigger";
00096 }
00097
00098 break;
00099 default: {
00100 return EmptyString;
00101 }
00102 break;
00103 }
00104 }
00105
00106
00107 void L1GtUtils::retrieveL1EventSetup(const edm::EventSetup& evSetup) {
00108
00109
00110 m_retrieveL1EventSetup = true;
00111
00112 m_l1EventSetupValid = true;
00113
00114
00115
00116
00117
00118 unsigned long long l1GtStableParCacheID =
00119 evSetup.get<L1GtStableParametersRcd>().cacheIdentifier();
00120
00121 if (m_l1GtStableParCacheID != l1GtStableParCacheID) {
00122
00123 edm::ESHandle<L1GtStableParameters> l1GtStablePar;
00124 evSetup.get<L1GtStableParametersRcd>().get(l1GtStablePar);
00125 m_l1GtStablePar = l1GtStablePar.product();
00126
00127
00128 m_numberAlgorithmTriggers = m_l1GtStablePar->gtNumberPhysTriggers();
00129
00130
00131 m_numberTechnicalTriggers =
00132 m_l1GtStablePar->gtNumberTechnicalTriggers();
00133
00134 int maxNumberTrigger = std::max(m_numberAlgorithmTriggers,
00135 m_numberTechnicalTriggers);
00136
00137 m_triggerMaskSet.reserve(maxNumberTrigger);
00138 m_prescaleFactorSet.reserve(maxNumberTrigger);
00139
00140
00141 m_l1GtStableParCacheID = l1GtStableParCacheID;
00142
00143 }
00144
00145
00146
00147
00148 unsigned long long l1GtPfAlgoCacheID =
00149 evSetup.get<L1GtPrescaleFactorsAlgoTrigRcd>().cacheIdentifier();
00150
00151 if (m_l1GtPfAlgoCacheID != l1GtPfAlgoCacheID) {
00152
00153 edm::ESHandle<L1GtPrescaleFactors> l1GtPfAlgo;
00154 evSetup.get<L1GtPrescaleFactorsAlgoTrigRcd>().get(l1GtPfAlgo);
00155 m_l1GtPfAlgo = l1GtPfAlgo.product();
00156
00157 m_prescaleFactorsAlgoTrig = &(m_l1GtPfAlgo->gtPrescaleFactors());
00158
00159 m_l1GtPfAlgoCacheID = l1GtPfAlgoCacheID;
00160
00161 }
00162
00163 unsigned long long l1GtPfTechCacheID = evSetup.get<
00164 L1GtPrescaleFactorsTechTrigRcd>().cacheIdentifier();
00165
00166 if (m_l1GtPfTechCacheID != l1GtPfTechCacheID) {
00167
00168 edm::ESHandle<L1GtPrescaleFactors> l1GtPfTech;
00169 evSetup.get<L1GtPrescaleFactorsTechTrigRcd>().get(l1GtPfTech);
00170 m_l1GtPfTech = l1GtPfTech.product();
00171
00172 m_prescaleFactorsTechTrig = &(m_l1GtPfTech->gtPrescaleFactors());
00173
00174 m_l1GtPfTechCacheID = l1GtPfTechCacheID;
00175
00176 }
00177
00178
00179
00180
00181 unsigned long long l1GtTmAlgoCacheID =
00182 evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().cacheIdentifier();
00183
00184 if (m_l1GtTmAlgoCacheID != l1GtTmAlgoCacheID) {
00185
00186 edm::ESHandle<L1GtTriggerMask> l1GtTmAlgo;
00187 evSetup.get<L1GtTriggerMaskAlgoTrigRcd>().get(l1GtTmAlgo);
00188 m_l1GtTmAlgo = l1GtTmAlgo.product();
00189
00190 m_triggerMaskAlgoTrig = &(m_l1GtTmAlgo->gtTriggerMask());
00191
00192 m_l1GtTmAlgoCacheID = l1GtTmAlgoCacheID;
00193
00194 }
00195
00196 unsigned long long l1GtTmTechCacheID =
00197 evSetup.get<L1GtTriggerMaskTechTrigRcd>().cacheIdentifier();
00198
00199 if (m_l1GtTmTechCacheID != l1GtTmTechCacheID) {
00200
00201 edm::ESHandle<L1GtTriggerMask> l1GtTmTech;
00202 evSetup.get<L1GtTriggerMaskTechTrigRcd>().get(l1GtTmTech);
00203 m_l1GtTmTech = l1GtTmTech.product();
00204
00205 m_triggerMaskTechTrig = &(m_l1GtTmTech->gtTriggerMask());
00206
00207 m_l1GtTmTechCacheID = l1GtTmTechCacheID;
00208
00209 }
00210
00211 unsigned long long l1GtTmVetoAlgoCacheID =
00212 evSetup.get<L1GtTriggerMaskVetoAlgoTrigRcd>().cacheIdentifier();
00213
00214 if (m_l1GtTmVetoAlgoCacheID != l1GtTmVetoAlgoCacheID) {
00215
00216 edm::ESHandle<L1GtTriggerMask> l1GtTmVetoAlgo;
00217 evSetup.get<L1GtTriggerMaskVetoAlgoTrigRcd>().get(l1GtTmVetoAlgo);
00218 m_l1GtTmVetoAlgo = l1GtTmVetoAlgo.product();
00219
00220 m_triggerMaskVetoAlgoTrig = &(m_l1GtTmVetoAlgo->gtTriggerMask());
00221
00222 m_l1GtTmVetoAlgoCacheID = l1GtTmVetoAlgoCacheID;
00223
00224 }
00225
00226 unsigned long long l1GtTmVetoTechCacheID =
00227 evSetup.get<L1GtTriggerMaskVetoTechTrigRcd>().cacheIdentifier();
00228
00229 if (m_l1GtTmVetoTechCacheID != l1GtTmVetoTechCacheID) {
00230
00231 edm::ESHandle<L1GtTriggerMask> l1GtTmVetoTech;
00232 evSetup.get<L1GtTriggerMaskVetoTechTrigRcd>().get(l1GtTmVetoTech);
00233 m_l1GtTmVetoTech = l1GtTmVetoTech.product();
00234
00235 m_triggerMaskVetoTechTrig = &(m_l1GtTmVetoTech->gtTriggerMask());
00236
00237 m_l1GtTmVetoTechCacheID = l1GtTmVetoTechCacheID;
00238
00239 }
00240
00241
00242
00243
00244 unsigned long long l1GtMenuCacheID =
00245 evSetup.get<L1GtTriggerMenuRcd>().cacheIdentifier();
00246
00247 if (m_l1GtMenuCacheID != l1GtMenuCacheID) {
00248
00249 edm::ESHandle<L1GtTriggerMenu> l1GtMenu;
00250 evSetup.get<L1GtTriggerMenuRcd>().get(l1GtMenu);
00251 m_l1GtMenu = l1GtMenu.product();
00252
00253 m_algorithmMap = &(m_l1GtMenu->gtAlgorithmMap());
00254 m_algorithmAliasMap = &(m_l1GtMenu->gtAlgorithmAliasMap());
00255
00256 m_technicalTriggerMap = &(m_l1GtMenu->gtTechnicalTriggerMap());
00257
00258 m_l1GtMenuCacheID = l1GtMenuCacheID;
00259
00260 }
00261
00262 }
00263
00264 void L1GtUtils::retrieveL1GtTriggerMenuLite(const edm::Event& iEvent) {
00265
00266
00267
00268 const edm::Run& iRun = iEvent.getRun();
00269 const edm::RunID* runID = &(iRun.runAuxiliary().id());
00270
00271 if (runID != m_provRunIDCache) {
00272
00273 edm::InputTag l1GtTriggerMenuLiteInputTag;
00274 getL1GtTriggerMenuLiteInputTag(iEvent, l1GtTriggerMenuLiteInputTag);
00275
00276 retrieveL1GtTriggerMenuLite(iEvent, l1GtTriggerMenuLiteInputTag);
00277
00278 m_provRunIDCache = runID;
00279
00280 }
00281 }
00282
00283 void L1GtUtils::retrieveL1GtTriggerMenuLite(const edm::Event& iEvent,
00284 edm::InputTag& l1GtMenuLiteInputTag) {
00285
00286
00287 m_retrieveL1GtTriggerMenuLite = true;
00288
00289
00290 const edm::Run& iRun = iEvent.getRun();
00291 const edm::RunID* runID = &(iRun.runAuxiliary().id());
00292
00293 if (runID != m_runIDCache) {
00294
00295
00296 edm::Handle<L1GtTriggerMenuLite> l1GtMenuLite;
00297 iRun.getByLabel(l1GtMenuLiteInputTag, l1GtMenuLite);
00298
00299 if (!l1GtMenuLite.isValid()) {
00300
00301 LogDebug("L1GtUtils") << "\nL1GtTriggerMenuLite with \n "
00302 << l1GtMenuLiteInputTag
00303 << "\nrequested in configuration, but not found in the event."
00304 << std::endl;
00305
00306 m_l1GtMenuLiteValid = false;
00307 } else {
00308 m_l1GtMenuLite = l1GtMenuLite.product();
00309 m_l1GtMenuLiteValid = true;
00310
00311 LogDebug("L1GtUtils") << "\nL1GtTriggerMenuLite with \n "
00312 << l1GtMenuLiteInputTag << "\nretrieved for run "
00313 << iRun.runAuxiliary().run() << std::endl;
00314
00315 m_algorithmMapLite = &(m_l1GtMenuLite->gtAlgorithmMap());
00316 m_algorithmAliasMapLite = &(m_l1GtMenuLite->gtAlgorithmAliasMap());
00317 m_technicalTriggerMapLite
00318 = &(m_l1GtMenuLite->gtTechnicalTriggerMap());
00319
00320 m_triggerMaskAlgoTrigLite
00321 = &(m_l1GtMenuLite->gtTriggerMaskAlgoTrig());
00322 m_triggerMaskTechTrigLite
00323 = &(m_l1GtMenuLite->gtTriggerMaskTechTrig());
00324
00325 m_prescaleFactorsAlgoTrigLite
00326 = &(m_l1GtMenuLite->gtPrescaleFactorsAlgoTrig());
00327 m_prescaleFactorsTechTrigLite
00328 = &(m_l1GtMenuLite->gtPrescaleFactorsTechTrig());
00329
00330 }
00331
00332 m_runIDCache = runID;
00333 }
00334
00335 }
00336
00337
00338
00339 void L1GtUtils::getInputTag(const edm::Event& iEvent,
00340 edm::InputTag& l1GtRecordInputTag,
00341 edm::InputTag& l1GtReadoutRecordInputTag) const {
00342
00343 typedef std::vector<edm::Provenance const*> Provenances;
00344 Provenances provenances;
00345 std::string friendlyName;
00346 std::string modLabel;
00347 std::string instanceName;
00348 std::string processName;
00349
00350
00351 edm::InputTag l1GtRecordInputTagVal;
00352 edm::InputTag l1GtReadoutRecordInputTagVal;
00353
00354 bool foundL1GtRecord = false;
00355 bool foundL1GtReadoutRecord = false;
00356
00357
00358
00359
00360 iEvent.getAllProvenance(provenances);
00361
00362
00363
00364
00365
00366
00367 for (Provenances::iterator itProv = provenances.begin(), itProvEnd =
00368 provenances.end(); itProv != itProvEnd; ++itProv) {
00369
00370 friendlyName = (*itProv)->friendlyClassName();
00371 modLabel = (*itProv)->moduleLabel();
00372 instanceName = (*itProv)->productInstanceName();
00373 processName = (*itProv)->processName();
00374
00375
00376
00377
00378
00379 if (friendlyName == "L1GlobalTriggerRecord") {
00380 l1GtRecordInputTagVal = edm::InputTag(modLabel, instanceName,
00381 processName);
00382 foundL1GtRecord = true;
00383 } else if (friendlyName == "L1GlobalTriggerReadoutRecord") {
00384
00385 l1GtReadoutRecordInputTagVal = edm::InputTag(modLabel, instanceName,
00386 processName);
00387 foundL1GtReadoutRecord = true;
00388 }
00389 }
00390
00391
00392 l1GtRecordInputTag = l1GtRecordInputTagVal;
00393 l1GtReadoutRecordInputTag = l1GtReadoutRecordInputTagVal;
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408 }
00409
00410 void L1GtUtils::getL1GtTriggerMenuLiteInputTag(const edm::Event& iEvent,
00411 edm::InputTag& l1GtTriggerMenuLiteInputTag) const {
00412
00413 typedef std::vector<edm::Provenance const*> Provenances;
00414 Provenances provenances;
00415 std::string friendlyName;
00416 std::string modLabel;
00417 std::string instanceName;
00418 std::string processName;
00419
00420
00421 edm::InputTag l1GtTriggerMenuLiteInputTagVal;
00422 bool foundL1GtTriggerMenuLite = false;
00423
00424
00425 const edm::Run& iRun = iEvent.getRun();
00426
00427
00428
00429
00430
00431 iRun.getAllProvenance(provenances);
00432
00433
00434
00435
00436
00437
00438
00439 for (Provenances::iterator itProv = provenances.begin(), itProvEnd =
00440 provenances.end(); itProv != itProvEnd; ++itProv) {
00441
00442 friendlyName = (*itProv)->friendlyClassName();
00443 modLabel = (*itProv)->moduleLabel();
00444 instanceName = (*itProv)->productInstanceName();
00445 processName = (*itProv)->processName();
00446
00447
00448
00449
00450
00451 if (friendlyName == "L1GtTriggerMenuLite") {
00452 l1GtTriggerMenuLiteInputTagVal = edm::InputTag(modLabel,
00453 instanceName, processName);
00454 foundL1GtTriggerMenuLite = true;
00455 }
00456
00457 }
00458
00459
00460 l1GtTriggerMenuLiteInputTag = l1GtTriggerMenuLiteInputTagVal;
00461
00462
00463
00464
00465
00466
00467
00468 }
00469
00470 const bool L1GtUtils::l1AlgoTechTrigBitNumber(
00471 const std::string& nameAlgoTechTrig, TriggerCategory& trigCategory,
00472 int& bitNumber) const {
00473
00474 trigCategory = AlgorithmTrigger;
00475 bitNumber = -1;
00476
00477 if (m_retrieveL1GtTriggerMenuLite) {
00478 if (m_l1GtMenuLiteValid) {
00479
00480
00481 for (L1GtTriggerMenuLite::CItL1Trig itTrig =
00482 m_algorithmAliasMapLite->begin(); itTrig
00483 != m_algorithmAliasMapLite->end(); itTrig++) {
00484
00485 if (itTrig->second == nameAlgoTechTrig) {
00486
00487 trigCategory = AlgorithmTrigger;
00488 bitNumber = itTrig->first;
00489
00490 return true;
00491 }
00492 }
00493
00494
00495 for (L1GtTriggerMenuLite::CItL1Trig itTrig =
00496 m_algorithmMapLite->begin(); itTrig
00497 != m_algorithmMapLite->end(); itTrig++) {
00498
00499 if (itTrig->second == nameAlgoTechTrig) {
00500
00501 trigCategory = AlgorithmTrigger;
00502 bitNumber = itTrig->first;
00503
00504 return true;
00505 }
00506 }
00507
00508
00509 for (L1GtTriggerMenuLite::CItL1Trig itTrig =
00510 m_technicalTriggerMapLite->begin(); itTrig
00511 != m_technicalTriggerMapLite->end(); itTrig++) {
00512
00513 if (itTrig->second == nameAlgoTechTrig) {
00514
00515 trigCategory = TechnicalTrigger;
00516 bitNumber = itTrig->first;
00517
00518 return true;
00519 }
00520 }
00521
00522 } else if (m_retrieveL1EventSetup) {
00523
00524
00525 CItAlgo itAlgo = m_algorithmAliasMap->find(nameAlgoTechTrig);
00526 if (itAlgo != m_algorithmAliasMap->end()) {
00527 trigCategory = AlgorithmTrigger;
00528 bitNumber = (itAlgo->second).algoBitNumber();
00529
00530 return true;
00531 }
00532
00533
00534 itAlgo = m_algorithmMap->find(nameAlgoTechTrig);
00535 if (itAlgo != m_algorithmMap->end()) {
00536 trigCategory = AlgorithmTrigger;
00537 bitNumber = (itAlgo->second).algoBitNumber();
00538
00539 return true;
00540 }
00541
00542
00543 itAlgo = m_technicalTriggerMap->find(nameAlgoTechTrig);
00544 if (itAlgo != m_technicalTriggerMap->end()) {
00545 trigCategory = TechnicalTrigger;
00546 bitNumber = (itAlgo->second).algoBitNumber();
00547
00548 return true;
00549 }
00550
00551 } else {
00552
00553 return false;
00554
00555 }
00556 } else if (m_retrieveL1EventSetup) {
00557
00558
00559 CItAlgo itAlgo = m_algorithmAliasMap->find(nameAlgoTechTrig);
00560 if (itAlgo != m_algorithmAliasMap->end()) {
00561 trigCategory = AlgorithmTrigger;
00562 bitNumber = (itAlgo->second).algoBitNumber();
00563
00564 return true;
00565 }
00566
00567
00568 itAlgo = m_algorithmMap->find(nameAlgoTechTrig);
00569 if (itAlgo != m_algorithmMap->end()) {
00570 trigCategory = AlgorithmTrigger;
00571 bitNumber = (itAlgo->second).algoBitNumber();
00572
00573 return true;
00574 }
00575
00576
00577 itAlgo = m_technicalTriggerMap->find(nameAlgoTechTrig);
00578 if (itAlgo != m_technicalTriggerMap->end()) {
00579 trigCategory = TechnicalTrigger;
00580 bitNumber = (itAlgo->second).algoBitNumber();
00581
00582 return true;
00583 }
00584
00585 } else {
00586
00587 return false;
00588
00589 }
00590
00591
00592 return false;
00593
00594
00595 }
00596
00597
00598 const bool L1GtUtils::l1AlgTechTrigBitNumber(
00599 const std::string& nameAlgoTechTrig, int& triggerAlgoTechTrig,
00600 int& bitNumber) const {
00601
00602 TriggerCategory trigCategory = AlgorithmTrigger;
00603 bitNumber = -1;
00604
00605 const bool trigCategBitNr = l1AlgoTechTrigBitNumber(nameAlgoTechTrig,
00606 trigCategory, bitNumber);
00607 triggerAlgoTechTrig = trigCategory;
00608
00609 return trigCategBitNr;
00610
00611 }
00612
00613
00614 const int L1GtUtils::l1Results(const edm::Event& iEvent,
00615 const edm::InputTag& l1GtRecordInputTag,
00616 const edm::InputTag& l1GtReadoutRecordInputTag,
00617 const std::string& nameAlgoTechTrig, bool& decisionBeforeMask,
00618 bool& decisionAfterMask, int& prescaleFactor, int& triggerMask) const {
00619
00620
00621 decisionBeforeMask = false;
00622 decisionAfterMask = false;
00623 prescaleFactor = -1;
00624 triggerMask = -1;
00625
00626
00627 int iError = 0;
00628 int l1ConfCode = 0;
00629
00630
00631
00632 if (!availableL1Configuration(iError, l1ConfCode)) {
00633 return iError;
00634 }
00635
00636
00637
00638
00639
00640
00641
00642 TriggerCategory trigCategory = AlgorithmTrigger;
00643 int bitNumber = -1;
00644
00645
00646 if (!l1AlgoTechTrigBitNumber(nameAlgoTechTrig, trigCategory, bitNumber)) {
00647
00648 iError = l1ConfCode + 1;
00649
00650 if (m_retrieveL1GtTriggerMenuLite) {
00651 if (m_l1GtMenuLiteValid) {
00652
00653 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
00654 << nameAlgoTechTrig
00655 << "\not found in the trigger menu \n "
00656 << m_l1GtMenuLite->gtTriggerMenuImplementation()
00657 << "\nretrieved from L1GtTriggerMenuLite" << std::endl;
00658
00659 } else {
00660
00661
00662 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
00663 << nameAlgoTechTrig
00664 << "\not found in the trigger menu \n "
00665 << m_l1GtMenu->gtTriggerMenuImplementation()
00666 << "\nretrieved from Event Setup" << std::endl;
00667
00668 }
00669
00670 } else {
00671
00672 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
00673 << nameAlgoTechTrig
00674 << "\not found in the trigger menu \n "
00675 << m_l1GtMenu->gtTriggerMenuImplementation()
00676 << "\nretrieved from Event Setup" << std::endl;
00677
00678 }
00679
00680 return iError;
00681
00682 }
00683
00684
00685
00686
00687 if (bitNumber < 0) {
00688
00689 iError = l1ConfCode + 2;
00690
00691 if (m_retrieveL1GtTriggerMenuLite) {
00692 if (m_l1GtMenuLiteValid) {
00693 LogDebug("L1GtUtils") << "\nNegative bit number for "
00694 << triggerCategory(trigCategory) << "\n "
00695 << nameAlgoTechTrig << "\nfrom menu \n "
00696 << m_l1GtMenuLite->gtTriggerMenuImplementation()
00697 << "\nretrieved from L1GtTriggerMenuLite" << std::endl;
00698
00699 } else {
00700
00701 LogDebug("L1GtUtils") << "\nNegative bit number for "
00702 << triggerCategory(trigCategory) << "\n "
00703 << nameAlgoTechTrig << "\nfrom menu \n "
00704 << m_l1GtMenu->gtTriggerMenuImplementation()
00705 << "\nretrieved from Event Setup" << std::endl;
00706
00707 }
00708
00709 } else {
00710
00711 LogDebug("L1GtUtils") << "\nNegative bit number for "
00712 << triggerCategory(trigCategory) << "\n "
00713 << nameAlgoTechTrig << "\nfrom menu \n "
00714 << m_l1GtMenu->gtTriggerMenuImplementation()
00715 << "\nretrieved from Event Setup" << std::endl;
00716
00717 }
00718
00719 return iError;
00720 }
00721
00722
00723
00724
00725
00726
00727 int iErrorRecord = 0;
00728
00729 bool validRecord = false;
00730 bool gtRecordValid = false;
00731 bool gtReadoutRecordValid = false;
00732
00733 edm::Handle<L1GlobalTriggerRecord> gtRecord;
00734 iEvent.getByLabel(l1GtRecordInputTag, gtRecord);
00735
00736 if (gtRecord.isValid()) {
00737
00738 gtRecordValid = true;
00739 validRecord = true;
00740
00741 } else {
00742
00743 iErrorRecord = 10;
00744 LogDebug("L1GtUtils") << "\nL1GlobalTriggerRecord with \n "
00745 << l1GtRecordInputTag << "\nnot found in the event."
00746 << std::endl;
00747 }
00748
00749 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecord;
00750 iEvent.getByLabel(l1GtReadoutRecordInputTag, gtReadoutRecord);
00751
00752 if (gtReadoutRecord.isValid()) {
00753
00754 gtReadoutRecordValid = true;
00755 validRecord = true;
00756
00757 } else {
00758
00759 iErrorRecord = iErrorRecord + 100;
00760 LogDebug("L1GtUtils") << "\nL1GlobalTriggerReadoutRecord with \n "
00761 << l1GtReadoutRecordInputTag << "\nnot found in the event."
00762 << std::endl;
00763
00764 }
00765
00766
00767
00768
00769
00770
00771
00772 int pfIndexTechTrig = -1;
00773 int pfIndexAlgoTrig = -1;
00774
00775 if (validRecord) {
00776 if (gtReadoutRecordValid) {
00777
00778 pfIndexTechTrig
00779 = (gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexTech();
00780 pfIndexAlgoTrig
00781 = (gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexAlgo();
00782
00783 } else {
00784
00785 pfIndexTechTrig
00786 = static_cast<int> (gtRecord->gtPrescaleFactorIndexTech());
00787 pfIndexAlgoTrig
00788 = static_cast<int> (gtRecord->gtPrescaleFactorIndexAlgo());
00789
00790 }
00791
00792 } else {
00793
00794 LogDebug("L1GtUtils") << "\nError: "
00795 << "\nNo valid L1GlobalTriggerRecord with \n "
00796 << l1GtRecordInputTag << "\nfound in the event."
00797 << "\nNo valid L1GlobalTriggerReadoutRecord with \n "
00798 << l1GtReadoutRecordInputTag << "\nfound in the event."
00799 << std::endl;
00800
00801 iError = l1ConfCode + iErrorRecord;
00802 return iError;
00803
00804 }
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814 size_t pfSetsSize = 0;
00815 int pfIndex = -1;
00816 const std::vector<int>* prescaleFactorsSubset = 0;
00817 const std::vector<unsigned int>* triggerMasksSet = 0;
00818
00819 switch (trigCategory) {
00820 case AlgorithmTrigger: {
00821 if (m_retrieveL1GtTriggerMenuLite) {
00822 if (m_l1GtMenuLiteValid) {
00823 pfSetsSize = m_prescaleFactorsAlgoTrigLite->size();
00824 triggerMasksSet = m_triggerMaskAlgoTrigLite;
00825
00826 } else {
00827
00828 pfSetsSize = m_prescaleFactorsAlgoTrig->size();
00829 triggerMasksSet = m_triggerMaskAlgoTrig;
00830
00831 }
00832
00833 } else {
00834
00835 pfSetsSize = m_prescaleFactorsAlgoTrig->size();
00836 triggerMasksSet = m_triggerMaskAlgoTrig;
00837
00838 }
00839
00840 pfIndex = pfIndexAlgoTrig;
00841
00842 }
00843 break;
00844 case TechnicalTrigger: {
00845 if (m_retrieveL1GtTriggerMenuLite) {
00846 if (m_l1GtMenuLiteValid) {
00847 pfSetsSize = m_prescaleFactorsTechTrigLite->size();
00848 triggerMasksSet = m_triggerMaskTechTrigLite;
00849
00850 } else {
00851
00852 pfSetsSize = m_prescaleFactorsTechTrig->size();
00853 triggerMasksSet = m_triggerMaskTechTrig;
00854
00855 }
00856
00857 } else {
00858
00859 pfSetsSize = m_prescaleFactorsTechTrig->size();
00860 triggerMasksSet = m_triggerMaskTechTrig;
00861
00862 }
00863
00864 pfIndex = pfIndexTechTrig;
00865
00866 }
00867 break;
00868 default: {
00869
00870 iError = l1ConfCode + iErrorRecord + 3;
00871 return iError;
00872
00873 }
00874 break;
00875 }
00876
00877
00878
00879
00880 if (pfIndex < 0) {
00881
00882 iError = l1ConfCode + iErrorRecord + 1000;
00883 LogDebug("L1GtUtils")
00884 << "\nError: index of prescale factor set retrieved from the data \n"
00885 << "less than zero."
00886 << "\n Value of index retrieved from data = " << pfIndex
00887 << std::endl;
00888
00889 return iError;
00890
00891 } else if (pfIndex >= (static_cast<int>(pfSetsSize))) {
00892 iError = l1ConfCode + iErrorRecord + 2000;
00893 LogDebug("L1GtUtils")
00894 << "\nError: index of prescale factor set retrieved from the data \n"
00895 << "greater than the size of the vector of prescale factor sets."
00896 << "\n Value of index retrieved from data = " << pfIndex
00897 << "\n Vector size = " << pfSetsSize << std::endl;
00898
00899 return iError;
00900
00901 } else {
00902 switch (trigCategory) {
00903 case AlgorithmTrigger: {
00904 if (m_retrieveL1GtTriggerMenuLite) {
00905 if (m_l1GtMenuLiteValid) {
00906 prescaleFactorsSubset
00907 = &((*m_prescaleFactorsAlgoTrigLite).at(pfIndex));
00908
00909 } else {
00910
00911 prescaleFactorsSubset
00912 = &((*m_prescaleFactorsAlgoTrig).at(pfIndex));
00913
00914 }
00915
00916 } else {
00917
00918 prescaleFactorsSubset
00919 = &((*m_prescaleFactorsAlgoTrig).at(pfIndex));
00920
00921 }
00922
00923 }
00924 break;
00925 case TechnicalTrigger: {
00926 if (m_retrieveL1GtTriggerMenuLite) {
00927 if (m_l1GtMenuLiteValid) {
00928 prescaleFactorsSubset
00929 = &((*m_prescaleFactorsTechTrigLite).at(pfIndex));
00930
00931 } else {
00932
00933 prescaleFactorsSubset
00934 = &((*m_prescaleFactorsTechTrig).at(pfIndex));
00935
00936 }
00937
00938 } else {
00939
00940 prescaleFactorsSubset
00941 = &((*m_prescaleFactorsTechTrig).at(pfIndex));
00942
00943 }
00944
00945 }
00946 break;
00947 default: {
00948
00949
00950 }
00951 break;
00952 }
00953
00954 }
00955
00956
00957
00958
00959
00960 switch (trigCategory) {
00961 case AlgorithmTrigger: {
00962 if (gtReadoutRecordValid) {
00963 const DecisionWord& decWord = gtReadoutRecord->decisionWord();
00964 decisionBeforeMask = trigResult(decWord, bitNumber,
00965 nameAlgoTechTrig, trigCategory, iError);
00966 if (iError) {
00967 return (iError + l1ConfCode + iErrorRecord);
00968 }
00969
00970 } else {
00971
00972 const DecisionWord& decWord =
00973 gtRecord->decisionWordBeforeMask();
00974 decisionBeforeMask = trigResult(decWord, bitNumber,
00975 nameAlgoTechTrig, trigCategory, iError);
00976 if (iError) {
00977 return (iError + l1ConfCode + iErrorRecord);
00978 }
00979
00980 }
00981
00982 }
00983 break;
00984 case TechnicalTrigger: {
00985 if (gtReadoutRecordValid) {
00986 const DecisionWord& decWord =
00987 gtReadoutRecord->technicalTriggerWord();
00988 decisionBeforeMask = trigResult(decWord, bitNumber,
00989 nameAlgoTechTrig, trigCategory, iError);
00990 if (iError) {
00991 return (iError + l1ConfCode + iErrorRecord);
00992 }
00993
00994 } else {
00995
00996 const DecisionWord& decWord =
00997 gtRecord->technicalTriggerWordBeforeMask();
00998 decisionBeforeMask = trigResult(decWord, bitNumber,
00999 nameAlgoTechTrig, trigCategory, iError);
01000 if (iError) {
01001 return (iError + l1ConfCode + iErrorRecord);
01002 }
01003
01004 }
01005
01006 }
01007 break;
01008 default: {
01009
01010
01011 }
01012 break;
01013 }
01014
01015
01016
01017
01018 if (bitNumber < (static_cast<int> (prescaleFactorsSubset->size()))) {
01019 prescaleFactor = (*prescaleFactorsSubset)[bitNumber];
01020 } else {
01021 iError = l1ConfCode + iErrorRecord + 4000;
01022 LogDebug("L1GtUtils") << "\nError: bit number " << bitNumber
01023 << " retrieved for " << triggerCategory(trigCategory) << "\n "
01024 << nameAlgoTechTrig
01025 << "\ngreater than size of actual L1 GT prescale factor set: "
01026 << prescaleFactorsSubset->size()
01027 << "\nError: Inconsistent L1 trigger configuration!"
01028 << std::endl;
01029
01030 return iError;
01031 }
01032
01033
01034
01035 if (bitNumber < (static_cast<int> ((*triggerMasksSet).size()))) {
01036
01037 if (m_retrieveL1GtTriggerMenuLite) {
01038 if (m_l1GtMenuLiteValid) {
01039 triggerMask = (*triggerMasksSet)[bitNumber];
01040
01041 } else {
01042
01043
01044 triggerMask = ((*triggerMasksSet)[bitNumber]) & (1
01045 << m_physicsDaqPartition);
01046
01047 }
01048
01049 } else {
01050
01051
01052 triggerMask = ((*triggerMasksSet)[bitNumber]) & (1
01053 << m_physicsDaqPartition);
01054
01055 }
01056
01057
01058 } else {
01059 iError = l1ConfCode + iErrorRecord + 5000;
01060 LogDebug("L1GtUtils") << "\nError: bit number " << bitNumber
01061 << " retrieved for " << triggerCategory(trigCategory) << "\n "
01062 << nameAlgoTechTrig
01063 << "\ngreater than size of L1 GT trigger mask set: "
01064 << (*triggerMasksSet).size()
01065 << "\nError: Inconsistent L1 trigger configuration!"
01066 << std::endl;
01067
01068 return iError;
01069
01070 }
01071
01072 decisionAfterMask = decisionBeforeMask;
01073
01074 if (triggerMask) {
01075 decisionAfterMask = false;
01076 }
01077
01078 return iError;
01079
01080 }
01081
01082
01083 const int L1GtUtils::l1Results(const edm::Event& iEvent,
01084 const std::string& nameAlgoTechTrig, bool& decisionBeforeMask,
01085 bool& decisionAfterMask, int& prescaleFactor, int& triggerMask) const {
01086
01087 edm::InputTag l1GtRecordInputTag;
01088 edm::InputTag l1GtReadoutRecordInputTag;
01089
01090
01091 decisionBeforeMask = false;
01092 decisionAfterMask = false;
01093 prescaleFactor = -1;
01094 triggerMask = -1;
01095
01096 getInputTag(iEvent, l1GtRecordInputTag, l1GtReadoutRecordInputTag);
01097
01098 int l1ErrorCode = 0;
01099
01100 l1ErrorCode = l1Results(iEvent, l1GtRecordInputTag,
01101 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01102 decisionAfterMask, prescaleFactor, triggerMask);
01103
01104 return l1ErrorCode;
01105
01106 }
01107
01108
01109
01110 const bool L1GtUtils::decisionBeforeMask(const edm::Event& iEvent,
01111 const edm::InputTag& l1GtRecordInputTag,
01112 const edm::InputTag& l1GtReadoutRecordInputTag,
01113 const std::string& nameAlgoTechTrig, int& errorCode) const {
01114
01115
01116 bool decisionBeforeMask = false;
01117 bool decisionAfterMask = false;
01118 int prescaleFactor = -1;
01119 int triggerMask = -1;
01120
01121 errorCode = l1Results(iEvent, l1GtRecordInputTag,
01122 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01123 decisionAfterMask, prescaleFactor, triggerMask);
01124
01125 return decisionBeforeMask;
01126
01127 }
01128
01129 const bool L1GtUtils::decisionBeforeMask(const edm::Event& iEvent,
01130 const std::string& nameAlgoTechTrig, int& errorCode) const {
01131
01132
01133 bool decisionBeforeMask = false;
01134 bool decisionAfterMask = false;
01135 int prescaleFactor = -1;
01136 int triggerMask = -1;
01137
01138 errorCode = l1Results(iEvent, nameAlgoTechTrig, decisionBeforeMask,
01139 decisionAfterMask, prescaleFactor, triggerMask);
01140
01141 return decisionBeforeMask;
01142
01143 }
01144
01145
01146
01147 const bool L1GtUtils::decisionAfterMask(const edm::Event& iEvent,
01148 const edm::InputTag& l1GtRecordInputTag,
01149 const edm::InputTag& l1GtReadoutRecordInputTag,
01150 const std::string& nameAlgoTechTrig, int& errorCode) const {
01151
01152
01153 bool decisionBeforeMask = false;
01154 bool decisionAfterMask = false;
01155 int prescaleFactor = -1;
01156 int triggerMask = -1;
01157
01158 errorCode = l1Results(iEvent, l1GtRecordInputTag,
01159 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01160 decisionAfterMask, prescaleFactor, triggerMask);
01161
01162 return decisionAfterMask;
01163
01164 }
01165
01166 const bool L1GtUtils::decisionAfterMask(const edm::Event& iEvent,
01167 const std::string& nameAlgoTechTrig, int& errorCode) const {
01168
01169
01170 bool decisionBeforeMask = false;
01171 bool decisionAfterMask = false;
01172 int prescaleFactor = -1;
01173 int triggerMask = -1;
01174
01175 errorCode = l1Results(iEvent, nameAlgoTechTrig, decisionBeforeMask,
01176 decisionAfterMask, prescaleFactor, triggerMask);
01177
01178 return decisionAfterMask;
01179
01180 }
01181
01182
01183
01184 const bool L1GtUtils::decision(const edm::Event& iEvent,
01185 const edm::InputTag& l1GtRecordInputTag,
01186 const edm::InputTag& l1GtReadoutRecordInputTag,
01187 const std::string& nameAlgoTechTrig, int& errorCode) const {
01188
01189
01190 bool decisionBeforeMask = false;
01191 bool decisionAfterMask = false;
01192 int prescaleFactor = -1;
01193 int triggerMask = -1;
01194
01195 errorCode = l1Results(iEvent, l1GtRecordInputTag,
01196 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01197 decisionAfterMask, prescaleFactor, triggerMask);
01198
01199 return decisionAfterMask;
01200
01201 }
01202
01203 const bool L1GtUtils::decision(const edm::Event& iEvent,
01204 const std::string& nameAlgoTechTrig, int& errorCode) const {
01205
01206
01207 bool decisionBeforeMask = false;
01208 bool decisionAfterMask = false;
01209 int prescaleFactor = -1;
01210 int triggerMask = -1;
01211
01212 errorCode = l1Results(iEvent, nameAlgoTechTrig, decisionBeforeMask,
01213 decisionAfterMask, prescaleFactor, triggerMask);
01214
01215 return decisionAfterMask;
01216
01217 }
01218
01219
01220
01221 const int L1GtUtils::prescaleFactor(const edm::Event& iEvent,
01222 const edm::InputTag& l1GtRecordInputTag,
01223 const edm::InputTag& l1GtReadoutRecordInputTag,
01224 const std::string& nameAlgoTechTrig, int& errorCode) const {
01225
01226
01227 bool decisionBeforeMask = false;
01228 bool decisionAfterMask = false;
01229 int prescaleFactor = -1;
01230 int triggerMask = -1;
01231
01232 errorCode = l1Results(iEvent, l1GtRecordInputTag,
01233 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01234 decisionAfterMask, prescaleFactor, triggerMask);
01235
01236 return prescaleFactor;
01237
01238 }
01239
01240 const int L1GtUtils::prescaleFactor(const edm::Event& iEvent,
01241 const std::string& nameAlgoTechTrig, int& errorCode) const {
01242
01243
01244 bool decisionBeforeMask = false;
01245 bool decisionAfterMask = false;
01246 int prescaleFactor = -1;
01247 int triggerMask = -1;
01248
01249 errorCode = l1Results(iEvent, nameAlgoTechTrig, decisionBeforeMask,
01250 decisionAfterMask, prescaleFactor, triggerMask);
01251
01252 return prescaleFactor;
01253
01254 }
01255
01256 const int L1GtUtils::triggerMask(const edm::Event& iEvent,
01257 const edm::InputTag& l1GtRecordInputTag,
01258 const edm::InputTag& l1GtReadoutRecordInputTag,
01259 const std::string& nameAlgoTechTrig, int& errorCode) const {
01260
01261
01262 bool decisionBeforeMask = false;
01263 bool decisionAfterMask = false;
01264 int prescaleFactor = -1;
01265 int triggerMask = -1;
01266
01267 errorCode = l1Results(iEvent, l1GtRecordInputTag,
01268 l1GtReadoutRecordInputTag, nameAlgoTechTrig, decisionBeforeMask,
01269 decisionAfterMask, prescaleFactor, triggerMask);
01270
01271 return triggerMask;
01272
01273 }
01274
01275 const int L1GtUtils::triggerMask(const edm::Event& iEvent,
01276 const std::string& nameAlgoTechTrig, int& errorCode) const {
01277
01278
01279 bool decisionBeforeMask = false;
01280 bool decisionAfterMask = false;
01281 int prescaleFactor = -1;
01282 int triggerMask = -1;
01283
01284 errorCode = l1Results(iEvent, nameAlgoTechTrig, decisionBeforeMask,
01285 decisionAfterMask, prescaleFactor, triggerMask);
01286
01287 return triggerMask;
01288
01289 }
01290
01291 const int L1GtUtils::triggerMask(const std::string& nameAlgoTechTrig,
01292 int& errorCode) const {
01293
01294
01295 int triggerMaskValue = -1;
01296
01297
01298 int iError = 0;
01299 int l1ConfCode = 0;
01300
01301
01302
01303 if (!availableL1Configuration(iError, l1ConfCode)) {
01304 errorCode = iError;
01305 return triggerMaskValue;
01306 }
01307
01308
01309
01310
01311
01312
01313
01314 TriggerCategory trigCategory = AlgorithmTrigger;
01315 int bitNumber = -1;
01316
01317 if (!l1AlgoTechTrigBitNumber(nameAlgoTechTrig, trigCategory, bitNumber)) {
01318
01319 iError = l1ConfCode + 1;
01320
01321 if (m_retrieveL1GtTriggerMenuLite) {
01322 if (m_l1GtMenuLiteValid) {
01323
01324 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
01325 << nameAlgoTechTrig
01326 << "\not found in the trigger menu \n "
01327 << m_l1GtMenuLite->gtTriggerMenuImplementation()
01328 << "\nretrieved from L1GtTriggerMenuLite" << std::endl;
01329
01330 } else {
01331
01332
01333 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
01334 << nameAlgoTechTrig
01335 << "\not found in the trigger menu \n "
01336 << m_l1GtMenu->gtTriggerMenuImplementation()
01337 << "\nretrieved from Event Setup" << std::endl;
01338
01339 }
01340
01341 } else {
01342
01343 LogDebug("L1GtUtils") << "\nAlgorithm/technical trigger \n "
01344 << nameAlgoTechTrig
01345 << "\not found in the trigger menu \n "
01346 << m_l1GtMenu->gtTriggerMenuImplementation()
01347 << "\nretrieved from Event Setup" << std::endl;
01348
01349 }
01350
01351 errorCode = iError;
01352 return triggerMaskValue;
01353
01354 }
01355
01356
01357
01358
01359 if (bitNumber < 0) {
01360
01361 iError = l1ConfCode + 2;
01362
01363 if (m_retrieveL1GtTriggerMenuLite) {
01364 if (m_l1GtMenuLiteValid) {
01365 LogDebug("L1GtUtils") << "\nNegative bit number for "
01366 << triggerCategory(trigCategory) << "\n "
01367 << nameAlgoTechTrig << "\nfrom menu \n "
01368 << m_l1GtMenuLite->gtTriggerMenuImplementation()
01369 << "\nretrieved from L1GtTriggerMenuLite" << std::endl;
01370
01371 } else {
01372
01373 LogDebug("L1GtUtils") << "\nNegative bit number for "
01374 << triggerCategory(trigCategory) << "\n "
01375 << nameAlgoTechTrig << "\nfrom menu \n "
01376 << m_l1GtMenu->gtTriggerMenuImplementation()
01377 << "\nretrieved from Event Setup" << std::endl;
01378
01379 }
01380
01381 } else {
01382
01383 LogDebug("L1GtUtils") << "\nNegative bit number for "
01384 << triggerCategory(trigCategory) << "\n "
01385 << nameAlgoTechTrig << "\nfrom menu \n "
01386 << m_l1GtMenu->gtTriggerMenuImplementation()
01387 << "\nretrieved from Event Setup" << std::endl;
01388
01389 }
01390
01391 errorCode = iError;
01392 return triggerMaskValue;
01393 }
01394
01395
01396
01397
01398
01399
01400 const std::vector<unsigned int>* triggerMasksSet = 0;
01401
01402 switch (trigCategory) {
01403 case AlgorithmTrigger: {
01404 if (m_retrieveL1GtTriggerMenuLite) {
01405 if (m_l1GtMenuLiteValid) {
01406 triggerMasksSet = m_triggerMaskAlgoTrigLite;
01407
01408 } else {
01409
01410 triggerMasksSet = m_triggerMaskAlgoTrig;
01411
01412 }
01413
01414 } else {
01415
01416 triggerMasksSet = m_triggerMaskAlgoTrig;
01417
01418 }
01419
01420 }
01421 break;
01422 case TechnicalTrigger: {
01423 if (m_retrieveL1GtTriggerMenuLite) {
01424 if (m_l1GtMenuLiteValid) {
01425 triggerMasksSet = m_triggerMaskTechTrigLite;
01426
01427 } else {
01428
01429 triggerMasksSet = m_triggerMaskTechTrig;
01430
01431 }
01432
01433 } else {
01434
01435 triggerMasksSet = m_triggerMaskTechTrig;
01436
01437 }
01438
01439 }
01440 break;
01441 default: {
01442
01443 iError = l1ConfCode + 3;
01444
01445 errorCode = iError;
01446 return triggerMaskValue;
01447
01448 }
01449 break;
01450 }
01451
01452
01453
01454 if (bitNumber < (static_cast<int> ((*triggerMasksSet).size()))) {
01455
01456 if (m_retrieveL1GtTriggerMenuLite) {
01457 if (m_l1GtMenuLiteValid) {
01458 triggerMaskValue = (*triggerMasksSet)[bitNumber];
01459
01460 } else {
01461
01462
01463 triggerMaskValue = ((*triggerMasksSet)[bitNumber]) & (1
01464 << m_physicsDaqPartition);
01465
01466 }
01467
01468 } else {
01469
01470
01471 triggerMaskValue = ((*triggerMasksSet)[bitNumber]) & (1
01472 << m_physicsDaqPartition);
01473
01474 }
01475
01476 } else {
01477 iError = l1ConfCode + 5000;
01478 LogDebug("L1GtUtils") << "\nError: bit number " << bitNumber
01479 << " retrieved for " << triggerCategory(trigCategory) << "\n "
01480 << nameAlgoTechTrig
01481 << "\ngreater than size of L1 GT trigger mask set: "
01482 << (*triggerMasksSet).size()
01483 << "\nError: Inconsistent L1 trigger configuration!"
01484 << std::endl;
01485
01486 errorCode = iError;
01487 return triggerMaskValue;
01488
01489 }
01490
01491 errorCode = iError;
01492 return triggerMaskValue;
01493
01494 }
01495
01496 const int L1GtUtils::prescaleFactorSetIndex(const edm::Event& iEvent,
01497 const edm::InputTag& l1GtRecordInputTag,
01498 const edm::InputTag& l1GtReadoutRecordInputTag,
01499 const TriggerCategory& trigCategory, int& errorCode) const {
01500
01501
01502 int pfIndex = -1;
01503
01504
01505 int iError = 0;
01506 int l1ConfCode = 0;
01507
01508
01509
01510 if (!availableL1Configuration(iError, l1ConfCode)) {
01511 errorCode = iError;
01512 return pfIndex;
01513 }
01514
01515
01516
01517
01518
01519
01520
01521
01522 int iErrorRecord = 0;
01523
01524 bool validRecord = false;
01525 bool gtRecordValid = false;
01526 bool gtReadoutRecordValid = false;
01527
01528 edm::Handle<L1GlobalTriggerRecord> gtRecord;
01529 iEvent.getByLabel(l1GtRecordInputTag, gtRecord);
01530
01531 if (gtRecord.isValid()) {
01532
01533 gtRecordValid = true;
01534 validRecord = true;
01535
01536 } else {
01537
01538 iErrorRecord = 10;
01539 LogDebug("L1GtUtils") << "\nL1GlobalTriggerRecord with \n "
01540 << l1GtRecordInputTag << "\nnot found in the event."
01541 << std::endl;
01542 }
01543
01544 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecord;
01545 iEvent.getByLabel(l1GtReadoutRecordInputTag, gtReadoutRecord);
01546
01547 if (gtReadoutRecord.isValid()) {
01548
01549 gtReadoutRecordValid = true;
01550 validRecord = true;
01551
01552 } else {
01553
01554 iErrorRecord = iErrorRecord + 100;
01555 LogDebug("L1GtUtils") << "\nL1GlobalTriggerReadoutRecord with \n "
01556 << l1GtReadoutRecordInputTag << "\nnot found in the event."
01557 << std::endl;
01558
01559 }
01560
01561
01562
01563
01564
01565
01566
01567 int pfIndexTechTrig = -1;
01568 int pfIndexAlgoTrig = -1;
01569
01570 if (validRecord) {
01571 if (gtReadoutRecordValid) {
01572
01573 pfIndexTechTrig
01574 = (gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexTech();
01575 pfIndexAlgoTrig
01576 = (gtReadoutRecord->gtFdlWord()).gtPrescaleFactorIndexAlgo();
01577
01578 } else {
01579
01580 pfIndexTechTrig
01581 = static_cast<int> (gtRecord->gtPrescaleFactorIndexTech());
01582 pfIndexAlgoTrig
01583 = static_cast<int> (gtRecord->gtPrescaleFactorIndexAlgo());
01584
01585 }
01586
01587 } else {
01588
01589 LogDebug("L1GtUtils") << "\nError: "
01590 << "\nNo valid L1GlobalTriggerRecord with \n "
01591 << l1GtRecordInputTag << "\nfound in the event."
01592 << "\nNo valid L1GlobalTriggerReadoutRecord with \n "
01593 << l1GtReadoutRecordInputTag << "\nfound in the event."
01594 << std::endl;
01595
01596 iError = l1ConfCode + iErrorRecord;
01597
01598 errorCode = iError;
01599 return pfIndex;
01600
01601 }
01602
01603
01604
01605
01606
01607
01608
01609
01610
01611 size_t pfSetsSize = 0;
01612
01613 switch (trigCategory) {
01614 case AlgorithmTrigger: {
01615 if (m_retrieveL1GtTriggerMenuLite) {
01616 if (m_l1GtMenuLiteValid) {
01617 pfSetsSize = m_prescaleFactorsAlgoTrigLite->size();
01618
01619 } else {
01620
01621 pfSetsSize = m_prescaleFactorsAlgoTrig->size();
01622
01623 }
01624
01625 } else {
01626
01627 pfSetsSize = m_prescaleFactorsAlgoTrig->size();
01628
01629 }
01630
01631 pfIndex = pfIndexAlgoTrig;
01632
01633 }
01634 break;
01635 case TechnicalTrigger: {
01636 if (m_retrieveL1GtTriggerMenuLite) {
01637 if (m_l1GtMenuLiteValid) {
01638 pfSetsSize = m_prescaleFactorsTechTrigLite->size();
01639
01640 } else {
01641
01642 pfSetsSize = m_prescaleFactorsTechTrig->size();
01643
01644 }
01645
01646 } else {
01647
01648 pfSetsSize = m_prescaleFactorsTechTrig->size();
01649
01650 }
01651
01652 pfIndex = pfIndexTechTrig;
01653
01654 }
01655 break;
01656 default: {
01657
01658 iError = l1ConfCode + iErrorRecord + 3;
01659 return iError;
01660
01661 }
01662 break;
01663 }
01664
01665
01666
01667
01668 if (pfIndex < 0) {
01669
01670 iError = l1ConfCode + iErrorRecord + 1000;
01671 LogDebug("L1GtUtils")
01672 << "\nError: index of prescale factor set retrieved from the data \n"
01673 << "less than zero."
01674 << "\n Value of index retrieved from data = " << pfIndex
01675 << std::endl;
01676
01677 errorCode = iError;
01678 return pfIndex;
01679
01680 } else if (pfIndex >= (static_cast<int>(pfSetsSize))) {
01681 iError = l1ConfCode + iErrorRecord + 2000;
01682 LogDebug("L1GtUtils")
01683 << "\nError: index of prescale factor set retrieved from the data \n"
01684 << "greater than the size of the vector of prescale factor sets."
01685 << "\n Value of index retrieved from data = " << pfIndex
01686 << "\n Vector size = " << pfSetsSize << std::endl;
01687
01688 errorCode = iError;
01689 return pfIndex;
01690
01691 } else {
01692
01693 errorCode = iError;
01694 return pfIndex;
01695 }
01696
01697 errorCode = iError;
01698 return pfIndex;
01699
01700 }
01701
01702
01703 const int L1GtUtils::prescaleFactorSetIndex(const edm::Event& iEvent,
01704 const TriggerCategory& trigCategory, int& errorCode) const {
01705
01706
01707 int iError = 0;
01708 int pfIndex = -1;
01709
01710 edm::InputTag l1GtRecordInputTag;
01711 edm::InputTag l1GtReadoutRecordInputTag;
01712
01713 getInputTag(iEvent, l1GtRecordInputTag, l1GtReadoutRecordInputTag);
01714
01715 pfIndex = prescaleFactorSetIndex(iEvent, l1GtRecordInputTag,
01716 l1GtReadoutRecordInputTag, trigCategory, iError);
01717
01718
01719
01720 errorCode = iError;
01721 return pfIndex;
01722
01723 }
01724
01725
01726
01727 const int L1GtUtils::prescaleFactorSetIndex(const edm::Event& iEvent,
01728 const edm::InputTag& l1GtRecordInputTag,
01729 const edm::InputTag& l1GtReadoutRecordInputTag,
01730 const std::string& triggerAlgoTechTrig, int& errorCode) const {
01731
01732
01733 int iError = 0;
01734 int l1ConfCode = 0;
01735 int pfIndex = -1;
01736
01737
01738
01739 if (!availableL1Configuration(iError, l1ConfCode)) {
01740 errorCode = iError;
01741 return pfIndex;
01742 }
01743
01744
01745 TriggerCategory trigCategory = AlgorithmTrigger;
01746
01747 if (triggerAlgoTechTrig == "TechnicalTriggers") {
01748 trigCategory = TechnicalTrigger;
01749
01750 } else if (triggerAlgoTechTrig == "PhysicsAlgorithms") {
01751 trigCategory = AlgorithmTrigger;
01752
01753 } else {
01754
01755 LogDebug("L1GtUtils")
01756 << "\nErrr : prescale factor set index cannot be retrieved for the argument "
01757 << triggerAlgoTechTrig
01758 << "\n Supported arguments: 'PhysicsAlgorithms' or 'TechnicalTriggers'"
01759 << "\nWarning: this method is deprecated, please use method with TriggerCategory."
01760 << std::endl;
01761
01762 iError = l1ConfCode + 6000;
01763
01764 errorCode = iError;
01765 return pfIndex;
01766
01767 }
01768
01769 pfIndex = prescaleFactorSetIndex(iEvent, l1GtRecordInputTag,
01770 l1GtReadoutRecordInputTag, trigCategory, errorCode);
01771
01772 errorCode = iError;
01773 return pfIndex;
01774
01775 }
01776
01777
01778 const int L1GtUtils::prescaleFactorSetIndex(const edm::Event& iEvent,
01779 const std::string& triggerAlgoTechTrig, int& errorCode) const {
01780
01781
01782 int iError = 0;
01783 int pfIndex = -1;
01784
01785 edm::InputTag l1GtRecordInputTag;
01786 edm::InputTag l1GtReadoutRecordInputTag;
01787
01788 getInputTag(iEvent, l1GtRecordInputTag, l1GtReadoutRecordInputTag);
01789
01790 pfIndex = prescaleFactorSetIndex(iEvent, l1GtRecordInputTag,
01791 l1GtReadoutRecordInputTag, triggerAlgoTechTrig, iError);
01792
01793
01794
01795 errorCode = iError;
01796 return pfIndex;
01797
01798 }
01799
01800 const std::vector<int>& L1GtUtils::prescaleFactorSet(const edm::Event& iEvent,
01801 const edm::InputTag& l1GtRecordInputTag,
01802 const edm::InputTag& l1GtReadoutRecordInputTag,
01803 const TriggerCategory& trigCategory, int& errorCode) {
01804
01805
01806 m_prescaleFactorSet.clear();
01807
01808
01809 int iError = 0;
01810
01811 const int pfIndex = prescaleFactorSetIndex(iEvent, l1GtRecordInputTag,
01812 l1GtReadoutRecordInputTag, trigCategory, iError);
01813
01814 if (iError == 0) {
01815
01816 switch (trigCategory) {
01817 case AlgorithmTrigger: {
01818 if (m_retrieveL1GtTriggerMenuLite) {
01819 if (m_l1GtMenuLiteValid) {
01820 m_prescaleFactorSet
01821 = (*m_prescaleFactorsAlgoTrigLite).at(pfIndex);
01822
01823 } else {
01824
01825 m_prescaleFactorSet = (*m_prescaleFactorsAlgoTrig).at(
01826 pfIndex);
01827
01828 }
01829
01830 } else {
01831
01832 m_prescaleFactorSet = (*m_prescaleFactorsAlgoTrig).at(
01833 pfIndex);
01834
01835 }
01836
01837 }
01838 break;
01839 case TechnicalTrigger: {
01840 if (m_retrieveL1GtTriggerMenuLite) {
01841 if (m_l1GtMenuLiteValid) {
01842 m_prescaleFactorSet
01843 = (*m_prescaleFactorsTechTrigLite).at(pfIndex);
01844
01845 } else {
01846
01847 m_prescaleFactorSet = (*m_prescaleFactorsTechTrig).at(
01848 pfIndex);
01849
01850 }
01851
01852 } else {
01853
01854 m_prescaleFactorSet = (*m_prescaleFactorsTechTrig).at(
01855 pfIndex);
01856
01857 }
01858
01859 }
01860 break;
01861 default: {
01862
01863
01864 }
01865 break;
01866 }
01867
01868 }
01869
01870 errorCode = iError;
01871 return m_prescaleFactorSet;
01872
01873 }
01874
01875 const std::vector<int>& L1GtUtils::prescaleFactorSet(const edm::Event& iEvent,
01876 const TriggerCategory& trigCategory, int& errorCode) {
01877
01878
01879 m_prescaleFactorSet.clear();
01880
01881
01882 int iError = 0;
01883
01884 edm::InputTag l1GtRecordInputTag;
01885 edm::InputTag l1GtReadoutRecordInputTag;
01886
01887 getInputTag(iEvent, l1GtRecordInputTag, l1GtReadoutRecordInputTag);
01888
01889 m_prescaleFactorSet = prescaleFactorSet(iEvent, l1GtRecordInputTag,
01890 l1GtReadoutRecordInputTag, trigCategory, iError);
01891
01892 errorCode = iError;
01893 return m_prescaleFactorSet;
01894
01895 }
01896
01897
01898
01899 const std::vector<int>& L1GtUtils::prescaleFactorSet(const edm::Event& iEvent,
01900 const edm::InputTag& l1GtRecordInputTag,
01901 const edm::InputTag& l1GtReadoutRecordInputTag,
01902 const std::string& triggerAlgoTechTrig, int& errorCode) {
01903
01904
01905 m_prescaleFactorSet.clear();
01906
01907
01908 int iError = 0;
01909 int l1ConfCode = 0;
01910
01911
01912
01913 if (!availableL1Configuration(iError, l1ConfCode)) {
01914 errorCode = iError;
01915 return m_prescaleFactorSet;
01916 }
01917
01918
01919 TriggerCategory trigCategory = AlgorithmTrigger;
01920
01921 if (triggerAlgoTechTrig == "TechnicalTriggers") {
01922 trigCategory = TechnicalTrigger;
01923
01924 } else if (triggerAlgoTechTrig == "PhysicsAlgorithms") {
01925 trigCategory = AlgorithmTrigger;
01926
01927 } else {
01928
01929 LogDebug("L1GtUtils")
01930 << "\nErrr : prescale factor set cannot be retrieved for the argument "
01931 << triggerAlgoTechTrig
01932 << "\n Supported arguments: 'PhysicsAlgorithms' or 'TechnicalTriggers'"
01933 << "\nWarning: this method is deprecated, please use method with TriggerCategory."
01934 << std::endl;
01935
01936 iError = l1ConfCode + 6000;
01937
01938 errorCode = iError;
01939 return m_prescaleFactorSet;
01940
01941 }
01942
01943 m_prescaleFactorSet = prescaleFactorSet(iEvent, l1GtRecordInputTag,
01944 l1GtReadoutRecordInputTag, trigCategory, iError);
01945
01946 errorCode = iError;
01947 return m_prescaleFactorSet;
01948 }
01949
01950
01951
01952 const std::vector<int>& L1GtUtils::prescaleFactorSet(const edm::Event& iEvent,
01953 const std::string& triggerAlgoTechTrig, int& errorCode) {
01954
01955
01956 int iError = 0;
01957
01958 edm::InputTag l1GtRecordInputTag;
01959 edm::InputTag l1GtReadoutRecordInputTag;
01960
01961 getInputTag(iEvent, l1GtRecordInputTag, l1GtReadoutRecordInputTag);
01962
01963 m_prescaleFactorSet = prescaleFactorSet(iEvent, l1GtRecordInputTag,
01964 l1GtReadoutRecordInputTag, triggerAlgoTechTrig, iError);
01965
01966 errorCode = iError;
01967 return m_prescaleFactorSet;
01968
01969 }
01970
01971
01972 const std::vector<unsigned int>& L1GtUtils::triggerMaskSet(
01973 const TriggerCategory& trigCategory, int& errorCode) {
01974
01975
01976 m_triggerMaskSet.clear();
01977
01978
01979 int iError = 0;
01980 int l1ConfCode = 0;
01981
01982
01983
01984 if (!availableL1Configuration(iError, l1ConfCode)) {
01985 errorCode = iError;
01986 return m_triggerMaskSet;
01987 }
01988
01989
01990
01991
01992
01993
01994
01995
01996
01997
01998 switch (trigCategory) {
01999 case AlgorithmTrigger: {
02000 if (m_retrieveL1GtTriggerMenuLite) {
02001
02002
02003 if (m_l1GtMenuLiteValid) {
02004 errorCode = iError;
02005 return (*m_triggerMaskAlgoTrigLite);
02006
02007 } else {
02008
02009 for (unsigned i = 0; i < m_triggerMaskAlgoTrig->size(); i++) {
02010 m_triggerMaskSet.push_back(
02011 ((*m_triggerMaskAlgoTrig)[i]) & (1
02012 << m_physicsDaqPartition));
02013 }
02014
02015 }
02016
02017 } else {
02018
02019 for (unsigned i = 0; i < m_triggerMaskAlgoTrig->size(); i++) {
02020 m_triggerMaskSet.push_back(((*m_triggerMaskAlgoTrig)[i])
02021 & (1 << m_physicsDaqPartition));
02022 }
02023
02024 }
02025 }
02026 break;
02027 case TechnicalTrigger: {
02028 if (m_retrieveL1GtTriggerMenuLite) {
02029 if (m_l1GtMenuLiteValid) {
02030 errorCode = iError;
02031 return (*m_triggerMaskTechTrigLite);
02032
02033 } else {
02034
02035 for (unsigned i = 0; i < m_triggerMaskTechTrig->size(); i++) {
02036 m_triggerMaskSet.push_back(
02037 ((*m_triggerMaskTechTrig)[i]) & (1
02038 << m_physicsDaqPartition));
02039 }
02040
02041 }
02042
02043 } else {
02044
02045 for (unsigned i = 0; i < m_triggerMaskTechTrig->size(); i++) {
02046 m_triggerMaskSet.push_back(((*m_triggerMaskTechTrig)[i])
02047 & (1 << m_physicsDaqPartition));
02048 }
02049
02050 }
02051 }
02052 break;
02053 default: {
02054
02055 iError = l1ConfCode + 3;
02056
02057 errorCode = iError;
02058 return m_triggerMaskSet;
02059
02060 }
02061 break;
02062 }
02063
02064 errorCode = iError;
02065 return m_triggerMaskSet;
02066
02067 }
02068
02069
02070
02071 const std::vector<unsigned int>& L1GtUtils::triggerMaskSet(
02072 const std::string& triggerAlgoTechTrig, int& errorCode) {
02073
02074
02075 m_triggerMaskSet.clear();
02076
02077
02078 int iError = 0;
02079 int l1ConfCode = 0;
02080
02081
02082
02083 if (!availableL1Configuration(iError, l1ConfCode)) {
02084 errorCode = iError;
02085 return m_triggerMaskSet;
02086 }
02087
02088
02089 TriggerCategory trigCategory = AlgorithmTrigger;
02090
02091 if (triggerAlgoTechTrig == "TechnicalTriggers") {
02092 trigCategory = TechnicalTrigger;
02093
02094 } else if (triggerAlgoTechTrig == "PhysicsAlgorithms") {
02095 trigCategory = AlgorithmTrigger;
02096
02097 } else {
02098
02099 LogDebug("L1GtUtils")
02100 << "\nErrr : trigger mask set cannot be retrieved for the argument "
02101 << triggerAlgoTechTrig
02102 << "\n Supported arguments: 'PhysicsAlgorithms' or 'TechnicalTriggers'"
02103 << "\nWarning: this method is deprecated, please use method with TriggerCategory."
02104 << std::endl;
02105
02106 iError = l1ConfCode + 6000;
02107
02108 errorCode = iError;
02109 return m_triggerMaskSet;
02110
02111 }
02112
02113 m_triggerMaskSet = triggerMaskSet(trigCategory, iError);
02114
02115 errorCode = iError;
02116 return m_triggerMaskSet;
02117
02118 }
02119
02120 const std::string& L1GtUtils::l1TriggerMenu() const {
02121
02122 if (m_retrieveL1GtTriggerMenuLite) {
02123 if (m_l1GtMenuLiteValid) {
02124 return m_l1GtMenuLite->gtTriggerMenuName();
02125
02126 } else if (m_retrieveL1EventSetup) {
02127 return m_l1GtMenu->gtTriggerMenuName();
02128
02129 } else {
02130
02131 return EmptyString;
02132
02133 }
02134 } else if (m_retrieveL1EventSetup) {
02135 return m_l1GtMenu->gtTriggerMenuName();
02136
02137 } else {
02138
02139 return EmptyString;
02140
02141 }
02142
02143 }
02144
02145 const std::string& L1GtUtils::l1TriggerMenuImplementation() const {
02146
02147 if (m_retrieveL1GtTriggerMenuLite) {
02148 if (m_l1GtMenuLiteValid) {
02149 return m_l1GtMenuLite->gtTriggerMenuImplementation();
02150
02151 } else if (m_retrieveL1EventSetup) {
02152 return m_l1GtMenu->gtTriggerMenuImplementation();
02153
02154 } else {
02155
02156 return EmptyString;
02157
02158 }
02159 } else if (m_retrieveL1EventSetup) {
02160 return m_l1GtMenu->gtTriggerMenuImplementation();
02161
02162 } else {
02163
02164 return EmptyString;
02165
02166 }
02167
02168 }
02169
02170 const L1GtTriggerMenu* L1GtUtils::ptrL1TriggerMenuEventSetup(int& errorCode) {
02171
02172
02173 int iError = 0;
02174 int l1ConfCode = 0;
02175
02176
02177
02178 if (!availableL1Configuration(iError, l1ConfCode)) {
02179 errorCode = iError;
02180 return 0;
02181 }
02182
02183 if (m_retrieveL1EventSetup) {
02184 errorCode = iError;
02185 return m_l1GtMenu;
02186 } else {
02187 iError = l1ConfCode;
02188
02189 errorCode = iError;
02190 return 0;
02191
02192 }
02193
02194 errorCode = iError;
02195 return m_l1GtMenu;
02196 }
02197
02198 const L1GtTriggerMenuLite* L1GtUtils::ptrL1GtTriggerMenuLite(int& errorCode) {
02199
02200
02201 int iError = 0;
02202 int l1ConfCode = 0;
02203
02204
02205
02206 if (!availableL1Configuration(iError, l1ConfCode)) {
02207 errorCode = iError;
02208 return 0;
02209 }
02210
02211 if (m_retrieveL1GtTriggerMenuLite) {
02212 if (m_l1GtMenuLiteValid) {
02213
02214 errorCode = iError;
02215 return m_l1GtMenuLite;
02216
02217 } else {
02218 iError = l1ConfCode;
02219
02220 errorCode = iError;
02221 return 0;
02222 }
02223 } else {
02224 iError = l1ConfCode;
02225
02226 errorCode = iError;
02227 return 0;
02228 }
02229
02230 errorCode = iError;
02231 return m_l1GtMenuLite;
02232
02233 }
02234
02235 const bool L1GtUtils::availableL1Configuration(int& errorCode, int& l1ConfCode) const {
02236
02237 if (m_retrieveL1GtTriggerMenuLite) {
02238 if (!m_retrieveL1EventSetup) {
02239 LogDebug("L1GtUtils")
02240 << "\nRetrieve L1 trigger configuration from L1GtTriggerMenuLite only\n"
02241 << std::endl;
02242 l1ConfCode = 0;
02243 } else {
02244 LogDebug("L1GtUtils")
02245 << "\nFall through: retrieve L1 trigger configuration from L1GtTriggerMenuLite"
02246 << "\n if L1GtTriggerMenuLite not valid, try to retrieve from event setup "
02247 << std::endl;
02248 l1ConfCode = 100000;
02249 }
02250
02251 if (m_l1GtMenuLiteValid) {
02252 LogDebug("L1GtUtils")
02253 << "\nRetrieve L1 trigger configuration from L1GtTriggerMenuLite, valid product\n"
02254 << std::endl;
02255 l1ConfCode = l1ConfCode + 10000;
02256 errorCode = 0;
02257
02258 return true;
02259
02260 } else if (m_retrieveL1EventSetup) {
02261 if (m_l1EventSetupValid) {
02262 LogDebug("L1GtUtils")
02263 << "\nFall through: retrieve L1 trigger configuration from event setup."
02264 << "\nFirst option was L1GtTriggerMenuLite - but product is not valid.\n"
02265 << std::endl;
02266 l1ConfCode = l1ConfCode + 20000;
02267 errorCode = 0;
02268
02269 return true;
02270
02271 } else {
02272 LogDebug("L1GtUtils")
02273 << "\nFall through: L1GtTriggerMenuLite not valid, event setup not valid.\n"
02274 << std::endl;
02275 l1ConfCode = l1ConfCode + L1GtNotValidError;
02276 errorCode = l1ConfCode;
02277
02278 return false;
02279
02280
02281 }
02282
02283 } else {
02284 LogDebug("L1GtUtils")
02285 << "\nError: L1 trigger configuration requested from L1GtTriggerMenuLite only"
02286 << "\nbut L1GtTriggerMenuLite is not valid.\n" << std::endl;
02287 l1ConfCode = l1ConfCode + L1GtNotValidError;
02288 errorCode = l1ConfCode;
02289
02290 return false;
02291
02292 }
02293 } else if (m_retrieveL1EventSetup) {
02294
02295 LogDebug("L1GtUtils")
02296 << "\nRetrieve L1 trigger configuration from event setup."
02297 << "\nL1GtTriggerMenuLite product was not requested.\n"
02298 << std::endl;
02299 l1ConfCode = 200000;
02300
02301 if (m_l1EventSetupValid) {
02302 LogDebug("L1GtUtils")
02303 << "\nRetrieve L1 trigger configuration from event setup only."
02304 << "\nValid L1 trigger event setup.\n"
02305 << std::endl;
02306 l1ConfCode = l1ConfCode + 10000;
02307 errorCode = 0;
02308
02309 return true;
02310
02311 } else {
02312 LogDebug("L1GtUtils")
02313 << "\nRetrieve L1 trigger configuration from event setup only."
02314 << "\nNo valid L1 trigger event setup.\n"
02315 << std::endl;
02316 l1ConfCode = l1ConfCode + L1GtNotValidError;
02317 errorCode = l1ConfCode;
02318
02319 return false;
02320
02321
02322 }
02323
02324 } else {
02325 LogDebug("L1GtUtils")
02326 << "\nError: no L1 trigger configuration requested to be retrieved."
02327 << "\nMust call before either retrieveL1GtTriggerMenuLite or retrieveL1EventSetup.\n"
02328 << std::endl;
02329 l1ConfCode = 300000;
02330 errorCode = l1ConfCode;
02331
02332 return false;
02333
02334 }
02335 }
02336
02337
02338
02339 const bool L1GtUtils::trigResult(const DecisionWord& decWord,
02340 const int bitNumber, const std::string& nameAlgoTechTrig,
02341 const TriggerCategory& trigCategory, int& errorCode) const {
02342
02343 bool trigRes = false;
02344 errorCode = 0;
02345
02346 if (bitNumber < (static_cast<int> (decWord.size()))) {
02347 trigRes = decWord[bitNumber];
02348 } else {
02349 errorCode = 3000;
02350 LogDebug("L1GtUtils") << "\nError: bit number " << bitNumber
02351 << " retrieved for " << triggerCategory(trigCategory) << "\n "
02352 << nameAlgoTechTrig
02353 << "\ngreater than size of L1 GT decision word: "
02354 << decWord.size()
02355 << "\nError: Inconsistent L1 trigger configuration!"
02356 << std::endl;
02357 }
02358
02359 return trigRes;
02360 }
02361
02362
02363 const std::string L1GtUtils::EmptyString = "";
02364 const int L1GtUtils::L1GtNotValidError = 99999;
02365