00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "DQMOffline/L1Trigger/interface/L1TSync_Offline.h"
00029
00030
00031
00032
00033
00034 #include "DQMServices/Core/interface/DQMStore.h"
00035
00036 #include "DataFormats/Scalers/interface/LumiScalers.h"
00037 #include "DataFormats/Scalers/interface/Level1TriggerRates.h"
00038 #include "DataFormats/Scalers/interface/Level1TriggerScalers.h"
00039
00040 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
00041 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerEvmReadoutRecord.h"
00042
00043 #include "DataFormats/Common/interface/ConditionsInEdm.h"
00044
00045 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
00046 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
00047 #include "CondFormats/L1TObjects/interface/L1GtPrescaleFactors.h"
00048 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
00049 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsAlgoTrigRcd.h"
00050 #include "CondFormats/L1TObjects/interface/L1GtMuonTemplate.h"
00052
00053
00054
00055
00056
00058 #include "DQMOffline/L1Trigger/interface/L1TMenuHelper.h"
00059
00060 #include "TList.h"
00061
00062 using namespace edm;
00063 using namespace std;
00064
00065
00066
00067 L1TSync_Offline::L1TSync_Offline(const ParameterSet & pset){
00068
00069 m_parameters = pset;
00070
00071
00072 m_scalersSource = pset.getParameter <InputTag>("inputTagScalersResults");
00073 m_l1GtDataDaqInputTag = pset.getParameter <InputTag>("inputTagL1GtDataDaq");
00074 m_l1GtEvmSource = pset.getParameter <InputTag>("inputTagtEvmSource");
00075 m_verbose = pset.getUntrackedParameter<bool> ("verbose",false);
00076 m_refPrescaleSet = pset.getParameter <int> ("refPrescaleSet");
00077
00078
00079 ParameterSet Categories = pset.getParameter< ParameterSet >("Categories");
00080
00081 bool forceGlobalParameters = Categories.getParameter<bool>("forceGlobalParameters");
00082 bool doGlobalAutoSelection = Categories.getParameter<bool>("doGlobalAutoSelection");
00083
00084 ParameterSet CatBPTX = Categories.getParameter<ParameterSet>("BPTX");
00085 ParameterSet CatMu = Categories.getParameter<ParameterSet>("Mu");
00086 ParameterSet CatEG = Categories.getParameter<ParameterSet>("EG");
00087 ParameterSet CatIsoEG = Categories.getParameter<ParameterSet>("IsoEG");
00088 ParameterSet CatJet = Categories.getParameter<ParameterSet>("Jet");
00089 ParameterSet CatCenJet = Categories.getParameter<ParameterSet>("CenJet");
00090 ParameterSet CatForJet = Categories.getParameter<ParameterSet>("ForJet");
00091 ParameterSet CatTauJet = Categories.getParameter<ParameterSet>("TauJet");
00092 ParameterSet CatETM = Categories.getParameter<ParameterSet>("ETT");
00093 ParameterSet CatETT = Categories.getParameter<ParameterSet>("ETM");
00094 ParameterSet CatHTT = Categories.getParameter<ParameterSet>("HTT");
00095 ParameterSet CatHTM = Categories.getParameter<ParameterSet>("HTM");
00096
00097
00098
00099 if(forceGlobalParameters){
00100
00101
00102
00103 if(doGlobalAutoSelection){
00104
00105 if(CatMu .getParameter<bool>("monitor")){m_algoAutoSelect["Mu"] = true;}else{m_algoAutoSelect["Mu"] = false;}
00106 if(CatEG .getParameter<bool>("monitor")){m_algoAutoSelect["EG"] = true;}else{m_algoAutoSelect["EG"] = false;}
00107 if(CatIsoEG .getParameter<bool>("monitor")){m_algoAutoSelect["IsoEG"] = true;}else{m_algoAutoSelect["IsoEG"] = false;}
00108 if(CatJet .getParameter<bool>("monitor")){m_algoAutoSelect["Jet"] = true;}else{m_algoAutoSelect["Jet"] = false;}
00109 if(CatCenJet.getParameter<bool>("monitor")){m_algoAutoSelect["CenJet"] = true;}else{m_algoAutoSelect["CenJet"] = false;}
00110 if(CatForJet.getParameter<bool>("monitor")){m_algoAutoSelect["ForJet"] = true;}else{m_algoAutoSelect["ForJet"] = false;}
00111 if(CatTauJet.getParameter<bool>("monitor")){m_algoAutoSelect["TauJet"] = true;}else{m_algoAutoSelect["TauJet"] = false;}
00112 if(CatETM .getParameter<bool>("monitor")){m_algoAutoSelect["ETM"] = true;}else{m_algoAutoSelect["ETM"] = false;}
00113 if(CatETT .getParameter<bool>("monitor")){m_algoAutoSelect["ETT"] = true;}else{m_algoAutoSelect["ETT"] = false;}
00114 if(CatHTM .getParameter<bool>("monitor")){m_algoAutoSelect["HTM"] = true;}else{m_algoAutoSelect["HTM"] = false;}
00115 if(CatHTT .getParameter<bool>("monitor")){m_algoAutoSelect["HTT"] = true;}else{m_algoAutoSelect["HTT"] = false;}
00116
00117
00118
00119 }else{
00120
00121 m_algoAutoSelect["Mu"] = false;
00122 m_algoAutoSelect["EG"] = false;
00123 m_algoAutoSelect["IsoEG"] = false;
00124 m_algoAutoSelect["Jet"] = false;
00125 m_algoAutoSelect["CenJet"] = false;
00126 m_algoAutoSelect["ForJet"] = false;
00127 m_algoAutoSelect["TauJet"] = false;
00128 m_algoAutoSelect["ETM"] = false;
00129 m_algoAutoSelect["ETT"] = false;
00130 m_algoAutoSelect["HTM"] = false;
00131 m_algoAutoSelect["HTT"] = false;
00132
00133 if(CatMu .getParameter<bool>("monitor")){m_selectedTriggers["Mu"] = CatMu .getParameter<string>("algo");}
00134 if(CatEG .getParameter<bool>("monitor")){m_selectedTriggers["EG"] = CatEG .getParameter<string>("algo");}
00135 if(CatIsoEG .getParameter<bool>("monitor")){m_selectedTriggers["IsoEG"] = CatIsoEG .getParameter<string>("algo");}
00136 if(CatJet .getParameter<bool>("monitor")){m_selectedTriggers["Jet"] = CatJet .getParameter<string>("algo");}
00137 if(CatCenJet.getParameter<bool>("monitor")){m_selectedTriggers["CenJet"] = CatCenJet.getParameter<string>("algo");}
00138 if(CatForJet.getParameter<bool>("monitor")){m_selectedTriggers["CatForJet"] = CatForJet.getParameter<string>("algo");}
00139 if(CatTauJet.getParameter<bool>("monitor")){m_selectedTriggers["TauJet"] = CatTauJet.getParameter<string>("algo");}
00140 if(CatETM .getParameter<bool>("monitor")){m_selectedTriggers["ETM"] = CatETM .getParameter<string>("algo");}
00141 if(CatETT .getParameter<bool>("monitor")){m_selectedTriggers["ETT"] = CatETT .getParameter<string>("algo");}
00142 if(CatHTM .getParameter<bool>("monitor")){m_selectedTriggers["HTM"] = CatHTM .getParameter<string>("algo");}
00143 if(CatHTT .getParameter<bool>("monitor")){m_selectedTriggers["HTT"] = CatHTT .getParameter<string>("algo");}
00144
00145 }
00146
00147
00148 }else{
00149
00150 if(CatBPTX.getParameter<bool>("monitor")){
00151 m_selectedTriggers["BPTX"] = CatBPTX.getParameter<string>("algo");
00152 }
00153
00154 if(CatMu.getParameter<bool>("monitor")){
00155 m_algoAutoSelect["Mu"] = CatMu.getParameter<bool>("doAutoSelection");
00156 if(!m_algoAutoSelect["Mu"]){m_selectedTriggers["Mu"] = CatMu.getParameter<string>("algo");}
00157 }else{m_algoAutoSelect["Mu"] = false;}
00158
00159 if(CatEG.getParameter<bool>("monitor")){
00160 m_algoAutoSelect["EG"] = CatEG.getParameter<bool>("doAutoSelection");
00161 if(!m_algoAutoSelect["EG"]){m_selectedTriggers["EG"] = CatEG.getParameter<string>("algo");}
00162 }else{m_algoAutoSelect["EG"] = false;}
00163
00164 if(CatIsoEG.getParameter<bool>("monitor")){
00165 m_algoAutoSelect["IsoEG"] = CatIsoEG.getParameter<bool>("doAutoSelection");
00166 if(!m_algoAutoSelect["IsoEG"]){m_selectedTriggers["IsoEG"] = CatIsoEG.getParameter<string>("algo");}
00167 }else{m_algoAutoSelect["IsoEG"] = false;}
00168
00169 if(CatJet.getParameter<bool>("monitor")){
00170 m_algoAutoSelect["Jet"] = CatJet.getParameter<bool>("doAutoSelection");
00171 if(!m_algoAutoSelect["Jet"]){m_selectedTriggers["Jet"] = CatJet.getParameter<string>("algo");}
00172 }else{m_algoAutoSelect["Jet"] = false;}
00173
00174 if(CatCenJet.getParameter<bool>("monitor")){
00175 m_algoAutoSelect["CenJet"] = CatCenJet.getParameter<bool>("doAutoSelection");
00176 if(!m_algoAutoSelect["CenJet"]){m_selectedTriggers["CenJet"] = CatCenJet.getParameter<string>("algo");}
00177 }else{m_algoAutoSelect["CenJet"] = false;}
00178
00179 if(CatForJet.getParameter<bool>("monitor")){
00180 m_algoAutoSelect["CatForJet"] = CatForJet.getParameter<bool>("doAutoSelection");
00181 if(!m_algoAutoSelect["CatForJet"]){m_selectedTriggers["CatForJet"] = CatForJet.getParameter<string>("algo");}
00182 }else{m_algoAutoSelect["CatForJet"] = false;}
00183
00184 if(CatTauJet.getParameter<bool>("monitor")){
00185 m_algoAutoSelect["TauJet"] = CatTauJet.getParameter<bool>("doAutoSelection");
00186 if(!m_algoAutoSelect["TauJet"]){m_selectedTriggers["TauJet"] = CatTauJet.getParameter<string>("algo");}
00187 }else{m_algoAutoSelect["TauJet"] = false;}
00188
00189 if(CatETM.getParameter<bool>("monitor")){
00190 m_algoAutoSelect["ETM"] = CatETM.getParameter<bool>("doAutoSelection");
00191 if(!m_algoAutoSelect["ETM"]){m_selectedTriggers["ETM"] = CatETM.getParameter<string>("algo");}
00192 }else{m_algoAutoSelect["ETM"] = false;}
00193
00194 if(CatETT.getParameter<bool>("monitor")){
00195 m_algoAutoSelect["ETT"] = CatETT.getParameter<bool>("doAutoSelection");
00196 if(!m_algoAutoSelect["ETT"]){m_selectedTriggers["ETT"] = CatETT.getParameter<string>("algo");}
00197 }else{m_algoAutoSelect["ETT"] = false;}
00198
00199 if(CatHTM.getParameter<bool>("monitor")){
00200 m_algoAutoSelect["HTM"] = CatHTM.getParameter<bool>("doAutoSelection");
00201 if(!m_algoAutoSelect["HTM"]){m_selectedTriggers["HTM"] = CatHTM.getParameter<string>("algo");}
00202 }else{m_algoAutoSelect["HTM"] = false;}
00203
00204 if(CatHTT.getParameter<bool>("monitor")){
00205 m_algoAutoSelect["HTT"] = CatHTT.getParameter<bool>("doAutoSelection");
00206 if(!m_algoAutoSelect["HTT"]){m_selectedTriggers["HTT"] = CatHTT.getParameter<string>("algo");}
00207 }else{m_algoAutoSelect["HTT"] = false;}
00208
00209 }
00210
00211
00212 if (pset.getUntrackedParameter < bool > ("dqmStore", false)) {
00213 dbe = Service < DQMStore > ().operator->();
00214 dbe->setVerbose(0);
00215 }
00216
00217 m_outputFile = pset.getUntrackedParameter < std::string > ("outputFile","");
00218
00219 if (m_outputFile.size() != 0) {
00220 std::cout << "L1T Monitoring histograms will be saved to " << m_outputFile.c_str() << std::endl;
00221 }
00222
00223 bool disable = pset.getUntrackedParameter < bool > ("disableROOToutput", false);
00224 if (disable) {m_outputFile = "";}
00225
00226 if (dbe != NULL) {dbe->setCurrentFolder("L1T/L1TSync");}
00227
00228 }
00229
00230
00231
00232 L1TSync_Offline::~L1TSync_Offline(){}
00233
00234
00235
00236 void L1TSync_Offline::beginJob(void){
00237
00238 if (m_verbose){cout << "[L1TSync_Offline] Called beginJob." << endl;}
00239
00240
00241 DQMStore *dbe = 0;
00242 dbe = Service < DQMStore > ().operator->();
00243
00244 if (dbe) {
00245 dbe->setCurrentFolder("L1T/L1TSync");
00246 dbe->rmdir("L1T/L1TSync");
00247 }
00248
00249 }
00250
00251
00252
00253 void L1TSync_Offline::endJob(void){
00254
00255 if (m_verbose){cout << "[L1TSync_Offline] Called endJob." << endl;}
00256
00257 if (m_outputFile.size() != 0 && dbe)
00258 dbe->save(m_outputFile);
00259
00260 return;
00261
00262 }
00263
00264
00266
00267 void L1TSync_Offline::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup){
00268
00269 if (m_verbose){cout << "[L1TSync_Offline] Called beginRun." << endl;}
00270
00271
00272 int maxNbins = 2501;
00273
00274
00275 m_lhcFill = 0;
00276 m_currentLS = 0;
00277 m_certFirstLS.clear();
00278 m_certLastLS .clear();
00279
00280
00281 ESHandle<L1GtTriggerMenu> menuRcd;
00282 iSetup.get<L1GtTriggerMenuRcd>().get(menuRcd);
00283 const L1GtTriggerMenu* menu = menuRcd.product();
00284
00285
00286 for (CItAlgo algo = menu->gtAlgorithmAliasMap().begin(); algo!=menu->gtAlgorithmAliasMap().end(); ++algo){
00287 m_algoBit[(algo->second).algoAlias()] = (algo->second).algoBitNumber();
00288 }
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299 L1TMenuHelper myMenuHelper = L1TMenuHelper(iSetup);
00300
00301 m_selectedTriggers = myMenuHelper.testAlgos(m_selectedTriggers);
00302
00303 map<string,string> tAutoSelTrig = myMenuHelper.getLUSOTrigger(m_algoAutoSelect,m_refPrescaleSet);
00304 m_selectedTriggers.insert(tAutoSelTrig.begin(),tAutoSelTrig.end());
00305
00306
00307 dbe->setCurrentFolder("L1T/L1TSync");
00308 m_ErrorMonitor = dbe->book1D("ErrorMonitor","ErrorMonitor",7,0,7);
00309 m_ErrorMonitor->setBinLabel(UNKNOWN ,"UNKNOWN");
00310 m_ErrorMonitor->setBinLabel(WARNING_DB_CONN_FAILED ,"WARNING_DB_CONN_FAILED");
00311 m_ErrorMonitor->setBinLabel(WARNING_DB_QUERY_FAILED ,"WARNING_DB_QUERY_FAILED");
00312 m_ErrorMonitor->setBinLabel(WARNING_DB_INCORRECT_NBUNCHES,"WARNING_DB_INCORRECT_NBUNCHES");
00313 m_ErrorMonitor->setBinLabel(ERROR_UNABLE_RETRIVE_PRODUCT ,"ERROR_UNABLE_RETRIVE_PRODUCT");
00314 m_ErrorMonitor->setBinLabel(ERROR_TRIGGERALIAS_NOTVALID ,"ERROR_TRIGGERALIAS_NOTVALID");
00315 m_ErrorMonitor->setBinLabel(ERROR_LSBLOCK_NOTVALID ,"ERROR_LSBLOCK_NOTVALID");
00316
00317
00318 for(map<string,string>::const_iterator i=m_selectedTriggers.begin() ; i!=m_selectedTriggers.end() ; i++){
00319
00320 string tCategory = (*i).first;
00321 string tTrigger = (*i).second;
00322
00323
00324 m_certFirstLS[(*i).second] = 0;
00325 m_certLastLS [(*i).second] = 0;
00326
00327
00328 dbe->setCurrentFolder("L1T/L1TSync/AlgoVsBunchStructure/");
00329 m_algoVsBunchStructure[tTrigger] = dbe->book2D(tCategory,"min #Delta("+tTrigger+",Bunch)",maxNbins,-0.5,double(maxNbins)-0.5,5,-2.5,2.5);
00330 m_algoVsBunchStructure[tTrigger] ->setAxisTitle("Lumi Section" ,1);
00331
00332 dbe->setCurrentFolder("L1T/L1TSync/Certification/");
00333 m_algoCertification[tTrigger] = dbe->book1D(tCategory, "fraction of in sync: "+tTrigger,maxNbins,-0.5,double(maxNbins)-0.5);
00334 m_algoCertification[tTrigger] ->setAxisTitle("Lumi Section" ,1);
00335
00336 }
00337
00338 }
00339
00340
00341
00342
00343 void L1TSync_Offline::beginLuminosityBlock(LuminosityBlock const& lumiBlock, EventSetup const& c) {
00344
00345 if (m_verbose){cout << "[L1TSync_Offline] Called beginLuminosityBlock." << endl;}
00346
00347 m_currentLSValid = true;
00348
00349 }
00350
00351
00352
00353 void L1TSync_Offline::endRun(const edm::Run& run, const edm::EventSetup& iSetup){
00354
00355 if(m_verbose){cout << "[L1TSync_Offline] Called endRun." << endl;}
00356
00357
00358
00359
00360
00361
00362
00363 }
00364
00365
00366 void L1TSync_Offline::analyze(const Event & iEvent, const EventSetup & eventSetup){
00367
00368
00369 if(m_verbose){cout << "[L1TSync_Offline] Called analyze." << endl;}
00370
00371
00372 if(m_currentLSValid){
00373
00374 if(m_verbose){cout << "[L1TSync_Offline] -> m_currentLSValid=" << m_currentLSValid << endl;}
00375
00376
00377 edm::Handle<L1GlobalTriggerEvmReadoutRecord> gtEvmReadoutRecord;
00378 iEvent.getByLabel(m_l1GtEvmSource, gtEvmReadoutRecord);
00379
00380
00381 if(gtEvmReadoutRecord.isValid()){
00382
00383 const L1GtfeExtWord& gtfeEvmWord = gtEvmReadoutRecord->gtfeWord();
00384 unsigned int lhcBeamMode = gtfeEvmWord.beamMode();
00385
00386 if(m_lhcFill == 0){
00387 m_lhcFill = gtfeEvmWord.lhcFillNumber();
00388
00389
00390 getBeamConfOffline(iEvent);
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403 }
00404
00405 if(lhcBeamMode != STABLE){m_currentLSValid = false;
00406 if(m_verbose){cout << "[L1TSync_Offline] -> m_currentLSValid=" << m_currentLSValid << "because beams mode not stable, being " << lhcBeamMode << endl;}
00407 }
00408 }else{
00409 int eCount = m_ErrorMonitor->getTH1()->GetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT);
00410 eCount++;
00411 m_ErrorMonitor->getTH1()->SetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT,eCount);
00412 }
00413 }else{
00414 if(m_verbose){cout << "[L1TSync_Offline] -> m_currentLSValid=" << m_currentLSValid << endl;}
00415 }
00416
00417
00418
00419
00420
00421
00422
00423
00424 if(m_currentLSValid && m_beamConfig.isValid()){
00425
00426
00427 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecordData;
00428 iEvent.getByLabel(m_l1GtDataDaqInputTag, gtReadoutRecordData);
00429
00430 if(gtReadoutRecordData.isValid()){
00431
00432 const vector<L1GtFdlWord>& gtFdlVectorData = gtReadoutRecordData->gtFdlVector();
00433
00434
00435 for(map<string,string>::const_iterator i=m_selectedTriggers.begin() ; i!=m_selectedTriggers.end() ; i++){
00436
00437 string tTrigger = (*i).second;
00438
00439
00440 if(tTrigger != "Undefined" && tTrigger != "Undefined (Wrong Name)"){
00441
00442 bool beamSingleConfig = false;
00443 bool firedAlgo = false;
00444 unsigned int eventBx = ~0;
00445
00446
00447 for(unsigned int a=0 ; a<gtFdlVectorData.size() ; a++){
00448
00449
00450 if(gtFdlVectorData[a].bxInEvent() == 0){
00451 eventBx = gtFdlVectorData[a].localBxNr();
00452 if(gtFdlVectorData[a].gtDecisionWord()[ m_algoBit[tTrigger] ]){firedAlgo = true;}
00453 }
00454 }
00455
00456
00457 if ( m_beamConfig.beam1.size() > eventBx && m_beamConfig.beam2.size() > eventBx) {
00458 if( m_beamConfig.beam1[eventBx] && !m_beamConfig.beam2[eventBx]){beamSingleConfig = true;}
00459 if(!m_beamConfig.beam1[eventBx] && m_beamConfig.beam2[eventBx]){beamSingleConfig = true;}
00460 }
00461
00462
00463
00464
00465 if(firedAlgo && !beamSingleConfig){
00466
00467 int DifAlgoVsBunchStructure = 9999;
00468
00469 for(unsigned int a=0 ; a<gtFdlVectorData.size() ; a++){
00470
00471 int bxFDL = gtFdlVectorData[a].localBxNr();
00472 int bxInEvent = gtFdlVectorData[a].bxInEvent();
00473
00474 if(m_beamConfig.bxConfig(bxFDL) && abs(bxInEvent)<abs(DifAlgoVsBunchStructure)){
00475 DifAlgoVsBunchStructure = -1*bxInEvent;
00476 }
00477 }
00478
00479 m_algoVsBunchStructure[tTrigger]->Fill(m_currentLS,DifAlgoVsBunchStructure);
00480
00481 }
00482 }
00483 }
00484 }
00485 else{
00486 int eCount = m_ErrorMonitor->getTH1()->GetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT);
00487 eCount++;
00488 m_ErrorMonitor->getTH1()->SetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT,eCount);
00489 }
00490
00491 }
00492 }
00493
00494
00495
00496
00497
00498
00499 void L1TSync_Offline::getBeamConfOffline(const Event& iEvent){
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523 m_beamConfig.m_valid = true;
00524
00525
00526
00527
00528 bool firedAlgo = false;
00529
00530
00531
00532
00533 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecordData;
00534 iEvent.getByLabel(m_l1GtDataDaqInputTag, gtReadoutRecordData);
00535
00536 if(gtReadoutRecordData.isValid()){
00537
00538 const vector<L1GtFdlWord>& gtFdlVectorData = gtReadoutRecordData->gtFdlVector();
00539
00540 for(unsigned int a=0 ; a<gtFdlVectorData.size() ; a++){
00541
00542 if(gtFdlVectorData[a].bxInEvent() == 0){
00543
00544 if(gtFdlVectorData[a].gtDecisionWord()[ m_algoBit[ m_selectedTriggers["BPTX"] ] ]){firedAlgo = true;}
00545 }
00546
00547
00548 if(firedAlgo){
00549 m_beamConfig.beam1.push_back(true);
00550 m_beamConfig.beam2.push_back(true);
00551 }
00552 else {
00553 m_beamConfig.beam1.push_back(false);
00554 m_beamConfig.beam2.push_back(false);
00555 }
00556
00557 }
00558 }
00559
00560 }
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00693
00694
00695
00696
00697 DEFINE_FWK_MODULE(L1TSync_Offline);