File indexing completed on 2024-04-06 12:09:37
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025 #include "DQMOffline/L1Trigger/interface/L1TSync_Offline.h"
0026
0027
0028
0029
0030
0031 #include "DQMServices/Core/interface/DQMStore.h"
0032
0033 #include "DataFormats/Scalers/interface/LumiScalers.h"
0034 #include "DataFormats/Scalers/interface/Level1TriggerRates.h"
0035 #include "DataFormats/Scalers/interface/Level1TriggerScalers.h"
0036
0037 #include "DataFormats/Common/interface/ConditionsInEdm.h" // Parameters associated to Run, LS and Event
0038
0039 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
0040 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
0041 #include "CondFormats/L1TObjects/interface/L1GtPrescaleFactors.h"
0042 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
0043 #include "CondFormats/DataRecord/interface/L1GtPrescaleFactorsAlgoTrigRcd.h"
0044 #include "CondFormats/L1TObjects/interface/L1GtMuonTemplate.h"
0045
0046
0047
0048
0049
0050
0051
0052
0053 #include "TList.h"
0054
0055 using namespace edm;
0056 using namespace std;
0057
0058
0059
0060 L1TSync_Offline::L1TSync_Offline(const ParameterSet& pset)
0061 : m_menuToken(esConsumes<edm::Transition::BeginRun>()),
0062 m_helperTokens(L1TMenuHelper::consumes<edm::Transition::BeginRun>(consumesCollector())),
0063 m_l1GtUtils(pset, consumesCollector(), false, *this) {
0064 m_parameters = pset;
0065
0066
0067 m_l1GtDataDaqInputTag = consumes<L1GlobalTriggerReadoutRecord>(pset.getParameter<InputTag>("inputTagL1GtDataDaq"));
0068 m_l1GtEvmSource = consumes<L1GlobalTriggerEvmReadoutRecord>(pset.getParameter<InputTag>("inputTagtEvmSource"));
0069 m_verbose = pset.getUntrackedParameter<bool>("verbose", false);
0070 m_refPrescaleSet = pset.getParameter<int>("refPrescaleSet");
0071
0072
0073 ParameterSet Categories = pset.getParameter<ParameterSet>("Categories");
0074
0075 bool forceGlobalParameters = Categories.getParameter<bool>("forceGlobalParameters");
0076 bool doGlobalAutoSelection = Categories.getParameter<bool>("doGlobalAutoSelection");
0077
0078 ParameterSet CatBPTX = Categories.getParameter<ParameterSet>("BPTX");
0079 ParameterSet CatMu = Categories.getParameter<ParameterSet>("Mu");
0080 ParameterSet CatEG = Categories.getParameter<ParameterSet>("EG");
0081 ParameterSet CatIsoEG = Categories.getParameter<ParameterSet>("IsoEG");
0082 ParameterSet CatJet = Categories.getParameter<ParameterSet>("Jet");
0083 ParameterSet CatCenJet = Categories.getParameter<ParameterSet>("CenJet");
0084 ParameterSet CatForJet = Categories.getParameter<ParameterSet>("ForJet");
0085 ParameterSet CatTauJet = Categories.getParameter<ParameterSet>("TauJet");
0086 ParameterSet CatETM = Categories.getParameter<ParameterSet>("ETT");
0087 ParameterSet CatETT = Categories.getParameter<ParameterSet>("ETM");
0088 ParameterSet CatHTT = Categories.getParameter<ParameterSet>("HTT");
0089 ParameterSet CatHTM = Categories.getParameter<ParameterSet>("HTM");
0090
0091
0092
0093 if (forceGlobalParameters) {
0094
0095
0096 if (doGlobalAutoSelection) {
0097 if (CatMu.getParameter<bool>("monitor")) {
0098 m_algoAutoSelect["Mu"] = true;
0099 } else {
0100 m_algoAutoSelect["Mu"] = false;
0101 }
0102 if (CatEG.getParameter<bool>("monitor")) {
0103 m_algoAutoSelect["EG"] = true;
0104 } else {
0105 m_algoAutoSelect["EG"] = false;
0106 }
0107 if (CatIsoEG.getParameter<bool>("monitor")) {
0108 m_algoAutoSelect["IsoEG"] = true;
0109 } else {
0110 m_algoAutoSelect["IsoEG"] = false;
0111 }
0112 if (CatJet.getParameter<bool>("monitor")) {
0113 m_algoAutoSelect["Jet"] = true;
0114 } else {
0115 m_algoAutoSelect["Jet"] = false;
0116 }
0117 if (CatCenJet.getParameter<bool>("monitor")) {
0118 m_algoAutoSelect["CenJet"] = true;
0119 } else {
0120 m_algoAutoSelect["CenJet"] = false;
0121 }
0122 if (CatForJet.getParameter<bool>("monitor")) {
0123 m_algoAutoSelect["ForJet"] = true;
0124 } else {
0125 m_algoAutoSelect["ForJet"] = false;
0126 }
0127 if (CatTauJet.getParameter<bool>("monitor")) {
0128 m_algoAutoSelect["TauJet"] = true;
0129 } else {
0130 m_algoAutoSelect["TauJet"] = false;
0131 }
0132 if (CatETM.getParameter<bool>("monitor")) {
0133 m_algoAutoSelect["ETM"] = true;
0134 } else {
0135 m_algoAutoSelect["ETM"] = false;
0136 }
0137 if (CatETT.getParameter<bool>("monitor")) {
0138 m_algoAutoSelect["ETT"] = true;
0139 } else {
0140 m_algoAutoSelect["ETT"] = false;
0141 }
0142 if (CatHTM.getParameter<bool>("monitor")) {
0143 m_algoAutoSelect["HTM"] = true;
0144 } else {
0145 m_algoAutoSelect["HTM"] = false;
0146 }
0147 if (CatHTT.getParameter<bool>("monitor")) {
0148 m_algoAutoSelect["HTT"] = true;
0149 } else {
0150 m_algoAutoSelect["HTT"] = false;
0151 }
0152
0153
0154
0155 } else {
0156 m_algoAutoSelect["Mu"] = false;
0157 m_algoAutoSelect["EG"] = false;
0158 m_algoAutoSelect["IsoEG"] = false;
0159 m_algoAutoSelect["Jet"] = false;
0160 m_algoAutoSelect["CenJet"] = false;
0161 m_algoAutoSelect["ForJet"] = false;
0162 m_algoAutoSelect["TauJet"] = false;
0163 m_algoAutoSelect["ETM"] = false;
0164 m_algoAutoSelect["ETT"] = false;
0165 m_algoAutoSelect["HTM"] = false;
0166 m_algoAutoSelect["HTT"] = false;
0167
0168 if (CatMu.getParameter<bool>("monitor")) {
0169 m_selectedTriggers["Mu"] = CatMu.getParameter<string>("algo");
0170 }
0171 if (CatEG.getParameter<bool>("monitor")) {
0172 m_selectedTriggers["EG"] = CatEG.getParameter<string>("algo");
0173 }
0174 if (CatIsoEG.getParameter<bool>("monitor")) {
0175 m_selectedTriggers["IsoEG"] = CatIsoEG.getParameter<string>("algo");
0176 }
0177 if (CatJet.getParameter<bool>("monitor")) {
0178 m_selectedTriggers["Jet"] = CatJet.getParameter<string>("algo");
0179 }
0180 if (CatCenJet.getParameter<bool>("monitor")) {
0181 m_selectedTriggers["CenJet"] = CatCenJet.getParameter<string>("algo");
0182 }
0183 if (CatForJet.getParameter<bool>("monitor")) {
0184 m_selectedTriggers["CatForJet"] = CatForJet.getParameter<string>("algo");
0185 }
0186 if (CatTauJet.getParameter<bool>("monitor")) {
0187 m_selectedTriggers["TauJet"] = CatTauJet.getParameter<string>("algo");
0188 }
0189 if (CatETM.getParameter<bool>("monitor")) {
0190 m_selectedTriggers["ETM"] = CatETM.getParameter<string>("algo");
0191 }
0192 if (CatETT.getParameter<bool>("monitor")) {
0193 m_selectedTriggers["ETT"] = CatETT.getParameter<string>("algo");
0194 }
0195 if (CatHTM.getParameter<bool>("monitor")) {
0196 m_selectedTriggers["HTM"] = CatHTM.getParameter<string>("algo");
0197 }
0198 if (CatHTT.getParameter<bool>("monitor")) {
0199 m_selectedTriggers["HTT"] = CatHTT.getParameter<string>("algo");
0200 }
0201 }
0202
0203
0204 } else {
0205 if (CatBPTX.getParameter<bool>("monitor")) {
0206 m_selectedTriggers["BPTX"] = CatBPTX.getParameter<string>("algo");
0207 }
0208
0209 if (CatMu.getParameter<bool>("monitor")) {
0210 m_algoAutoSelect["Mu"] = CatMu.getParameter<bool>("doAutoSelection");
0211 if (!m_algoAutoSelect["Mu"]) {
0212 m_selectedTriggers["Mu"] = CatMu.getParameter<string>("algo");
0213 }
0214 } else {
0215 m_algoAutoSelect["Mu"] = false;
0216 }
0217
0218 if (CatEG.getParameter<bool>("monitor")) {
0219 m_algoAutoSelect["EG"] = CatEG.getParameter<bool>("doAutoSelection");
0220 if (!m_algoAutoSelect["EG"]) {
0221 m_selectedTriggers["EG"] = CatEG.getParameter<string>("algo");
0222 }
0223 } else {
0224 m_algoAutoSelect["EG"] = false;
0225 }
0226
0227 if (CatIsoEG.getParameter<bool>("monitor")) {
0228 m_algoAutoSelect["IsoEG"] = CatIsoEG.getParameter<bool>("doAutoSelection");
0229 if (!m_algoAutoSelect["IsoEG"]) {
0230 m_selectedTriggers["IsoEG"] = CatIsoEG.getParameter<string>("algo");
0231 }
0232 } else {
0233 m_algoAutoSelect["IsoEG"] = false;
0234 }
0235
0236 if (CatJet.getParameter<bool>("monitor")) {
0237 m_algoAutoSelect["Jet"] = CatJet.getParameter<bool>("doAutoSelection");
0238 if (!m_algoAutoSelect["Jet"]) {
0239 m_selectedTriggers["Jet"] = CatJet.getParameter<string>("algo");
0240 }
0241 } else {
0242 m_algoAutoSelect["Jet"] = false;
0243 }
0244
0245 if (CatCenJet.getParameter<bool>("monitor")) {
0246 m_algoAutoSelect["CenJet"] = CatCenJet.getParameter<bool>("doAutoSelection");
0247 if (!m_algoAutoSelect["CenJet"]) {
0248 m_selectedTriggers["CenJet"] = CatCenJet.getParameter<string>("algo");
0249 }
0250 } else {
0251 m_algoAutoSelect["CenJet"] = false;
0252 }
0253
0254 if (CatForJet.getParameter<bool>("monitor")) {
0255 m_algoAutoSelect["CatForJet"] = CatForJet.getParameter<bool>("doAutoSelection");
0256 if (!m_algoAutoSelect["CatForJet"]) {
0257 m_selectedTriggers["CatForJet"] = CatForJet.getParameter<string>("algo");
0258 }
0259 } else {
0260 m_algoAutoSelect["CatForJet"] = false;
0261 }
0262
0263 if (CatTauJet.getParameter<bool>("monitor")) {
0264 m_algoAutoSelect["TauJet"] = CatTauJet.getParameter<bool>("doAutoSelection");
0265 if (!m_algoAutoSelect["TauJet"]) {
0266 m_selectedTriggers["TauJet"] = CatTauJet.getParameter<string>("algo");
0267 }
0268 } else {
0269 m_algoAutoSelect["TauJet"] = false;
0270 }
0271
0272 if (CatETM.getParameter<bool>("monitor")) {
0273 m_algoAutoSelect["ETM"] = CatETM.getParameter<bool>("doAutoSelection");
0274 if (!m_algoAutoSelect["ETM"]) {
0275 m_selectedTriggers["ETM"] = CatETM.getParameter<string>("algo");
0276 }
0277 } else {
0278 m_algoAutoSelect["ETM"] = false;
0279 }
0280
0281 if (CatETT.getParameter<bool>("monitor")) {
0282 m_algoAutoSelect["ETT"] = CatETT.getParameter<bool>("doAutoSelection");
0283 if (!m_algoAutoSelect["ETT"]) {
0284 m_selectedTriggers["ETT"] = CatETT.getParameter<string>("algo");
0285 }
0286 } else {
0287 m_algoAutoSelect["ETT"] = false;
0288 }
0289
0290 if (CatHTM.getParameter<bool>("monitor")) {
0291 m_algoAutoSelect["HTM"] = CatHTM.getParameter<bool>("doAutoSelection");
0292 if (!m_algoAutoSelect["HTM"]) {
0293 m_selectedTriggers["HTM"] = CatHTM.getParameter<string>("algo");
0294 }
0295 } else {
0296 m_algoAutoSelect["HTM"] = false;
0297 }
0298
0299 if (CatHTT.getParameter<bool>("monitor")) {
0300 m_algoAutoSelect["HTT"] = CatHTT.getParameter<bool>("doAutoSelection");
0301 if (!m_algoAutoSelect["HTT"]) {
0302 m_selectedTriggers["HTT"] = CatHTT.getParameter<string>("algo");
0303 }
0304 } else {
0305 m_algoAutoSelect["HTT"] = false;
0306 }
0307 }
0308 }
0309
0310
0311
0312 L1TSync_Offline::~L1TSync_Offline() {}
0313
0314
0315
0316 void L1TSync_Offline::dqmBeginRun(edm::Run const&, edm::EventSetup const&) {}
0317
0318
0319
0320 void L1TSync_Offline::bookHistograms(DQMStore::IBooker& ibooker, const edm::Run& iRun, const edm::EventSetup& iSetup) {
0321 if (m_verbose) {
0322 cout << "[L1TSync_Offline] Called beginRun." << endl;
0323 }
0324
0325
0326 int maxNbins = 2501;
0327
0328
0329 m_lhcFill = 0;
0330 m_certFirstLS.clear();
0331 m_certLastLS.clear();
0332
0333
0334 const L1GtTriggerMenu& menu = iSetup.getData(m_menuToken);
0335
0336
0337 for (const auto& algo : menu.gtAlgorithmAliasMap()) {
0338 m_algoBit[algo.second.algoAlias()] = algo.second.algoBitNumber();
0339 }
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350 L1TMenuHelper myMenuHelper = L1TMenuHelper(iSetup, m_helperTokens);
0351
0352 m_selectedTriggers = myMenuHelper.testAlgos(m_selectedTriggers);
0353
0354 m_l1GtUtils.retrieveL1EventSetup(iSetup);
0355 map<string, string> tAutoSelTrig = myMenuHelper.getLUSOTrigger(m_algoAutoSelect, m_refPrescaleSet, m_l1GtUtils);
0356 m_selectedTriggers.insert(tAutoSelTrig.begin(), tAutoSelTrig.end());
0357
0358
0359 ibooker.setCurrentFolder("L1T/L1TSync");
0360 m_ErrorMonitor = ibooker.book1D("ErrorMonitor", "ErrorMonitor", 7, 0, 7);
0361 m_ErrorMonitor->setBinLabel(UNKNOWN, "UNKNOWN");
0362 m_ErrorMonitor->setBinLabel(WARNING_DB_CONN_FAILED, "WARNING_DB_CONN_FAILED");
0363 m_ErrorMonitor->setBinLabel(WARNING_DB_QUERY_FAILED, "WARNING_DB_QUERY_FAILED");
0364 m_ErrorMonitor->setBinLabel(WARNING_DB_INCORRECT_NBUNCHES,
0365 "WARNING_DB_INCORRECT_NBUNCHES");
0366 m_ErrorMonitor->setBinLabel(ERROR_UNABLE_RETRIVE_PRODUCT, "ERROR_UNABLE_RETRIVE_PRODUCT");
0367 m_ErrorMonitor->setBinLabel(ERROR_TRIGGERALIAS_NOTVALID, "ERROR_TRIGGERALIAS_NOTVALID");
0368 m_ErrorMonitor->setBinLabel(ERROR_LSBLOCK_NOTVALID, "ERROR_LSBLOCK_NOTVALID");
0369
0370
0371 for (map<string, string>::const_iterator i = m_selectedTriggers.begin(); i != m_selectedTriggers.end(); i++) {
0372 string tCategory = (*i).first;
0373 string tTrigger = (*i).second;
0374
0375
0376 m_certFirstLS[(*i).second] = 0;
0377 m_certLastLS[(*i).second] = 0;
0378
0379
0380 ibooker.setCurrentFolder("L1T/L1TSync/AlgoVsBunchStructure/");
0381 m_algoVsBunchStructure[tTrigger] = ibooker.book2D(
0382 tCategory, "min #Delta(" + tTrigger + ",Bunch)", maxNbins, -0.5, double(maxNbins) - 0.5, 5, -2.5, 2.5);
0383 m_algoVsBunchStructure[tTrigger]->setAxisTitle("Lumi Section", 1);
0384
0385 ibooker.setCurrentFolder("L1T/L1TSync/Certification/");
0386 m_algoCertification[tTrigger] =
0387 ibooker.book1D(tCategory, "fraction of in sync: " + tTrigger, maxNbins, -0.5, double(maxNbins) - 0.5);
0388 m_algoCertification[tTrigger]->setAxisTitle("Lumi Section", 1);
0389 }
0390 }
0391
0392
0393
0394
0395 std::shared_ptr<ltso::LSValid> L1TSync_Offline::globalBeginLuminosityBlock(LuminosityBlock const& lumiBlock,
0396 EventSetup const& c) const {
0397 if (m_verbose) {
0398 cout << "[L1TSync_Offline] Called beginLuminosityBlock." << endl;
0399 }
0400
0401 return std::make_shared<ltso::LSValid>();
0402 }
0403
0404
0405 void L1TSync_Offline::analyze(const Event& iEvent, const EventSetup& eventSetup) {
0406 if (m_verbose) {
0407 cout << "[L1TSync_Offline] Called analyze." << endl;
0408 }
0409
0410
0411 auto& currentLSValid = luminosityBlockCache(iEvent.getLuminosityBlock().index())->lsIsValid;
0412 if (currentLSValid) {
0413 if (m_verbose) {
0414 cout << "[L1TSync_Offline] -> currentLSValid=" << currentLSValid << endl;
0415 }
0416
0417
0418 edm::Handle<L1GlobalTriggerEvmReadoutRecord> gtEvmReadoutRecord;
0419 iEvent.getByToken(m_l1GtEvmSource, gtEvmReadoutRecord);
0420
0421
0422 if (gtEvmReadoutRecord.isValid()) {
0423 const L1GtfeExtWord& gtfeEvmWord = gtEvmReadoutRecord->gtfeWord();
0424 unsigned int lhcBeamMode = gtfeEvmWord.beamMode();
0425
0426 if (m_lhcFill == 0) {
0427 m_lhcFill = gtfeEvmWord.lhcFillNumber();
0428
0429
0430 getBeamConfOffline(iEvent);
0431
0432
0433
0434
0435
0436
0437
0438
0439 }
0440
0441 if (lhcBeamMode != STABLE) {
0442 currentLSValid = false;
0443 if (m_verbose) {
0444 cout << "[L1TSync_Offline] -> currentLSValid=" << currentLSValid << "because beams mode not stable, being "
0445 << lhcBeamMode << endl;
0446 }
0447 }
0448 } else {
0449 int eCount = m_ErrorMonitor->getTH1()->GetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT);
0450 eCount++;
0451 m_ErrorMonitor->getTH1()->SetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT, eCount);
0452 }
0453 } else {
0454 if (m_verbose) {
0455 cout << "[L1TSync_Offline] -> currentLSValid=" << currentLSValid << endl;
0456 }
0457 }
0458
0459
0460
0461
0462
0463
0464
0465
0466 if (currentLSValid && m_beamConfig.isValid()) {
0467
0468 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecordData;
0469 iEvent.getByToken(m_l1GtDataDaqInputTag, gtReadoutRecordData);
0470
0471 if (gtReadoutRecordData.isValid()) {
0472 const vector<L1GtFdlWord>& gtFdlVectorData = gtReadoutRecordData->gtFdlVector();
0473
0474
0475 for (map<string, string>::const_iterator i = m_selectedTriggers.begin(); i != m_selectedTriggers.end(); i++) {
0476 string tTrigger = (*i).second;
0477
0478
0479 if (tTrigger != "Undefined" && tTrigger != "Undefined (Wrong Name)") {
0480 bool beamSingleConfig = false;
0481 bool firedAlgo = false;
0482 unsigned int eventBx = ~0;
0483
0484
0485 for (unsigned int a = 0; a < gtFdlVectorData.size(); a++) {
0486
0487 if (gtFdlVectorData[a].bxInEvent() == 0) {
0488 eventBx = gtFdlVectorData[a].localBxNr();
0489 if (gtFdlVectorData[a].gtDecisionWord()[m_algoBit[tTrigger]]) {
0490 firedAlgo = true;
0491 }
0492 }
0493 }
0494
0495
0496 if (m_beamConfig.beam1.size() > eventBx && m_beamConfig.beam2.size() > eventBx) {
0497 if (m_beamConfig.beam1[eventBx] && !m_beamConfig.beam2[eventBx]) {
0498 beamSingleConfig = true;
0499 }
0500 if (!m_beamConfig.beam1[eventBx] && m_beamConfig.beam2[eventBx]) {
0501 beamSingleConfig = true;
0502 }
0503 }
0504
0505
0506
0507
0508 if (firedAlgo && !beamSingleConfig) {
0509 int DifAlgoVsBunchStructure = 9999;
0510
0511 for (unsigned int a = 0; a < gtFdlVectorData.size(); a++) {
0512 int bxFDL = gtFdlVectorData[a].localBxNr();
0513 int bxInEvent = gtFdlVectorData[a].bxInEvent();
0514
0515 if (m_beamConfig.bxConfig(bxFDL) && abs(bxInEvent) < abs(DifAlgoVsBunchStructure)) {
0516 DifAlgoVsBunchStructure = -1 * bxInEvent;
0517 }
0518 }
0519
0520 m_algoVsBunchStructure[tTrigger]->Fill(0 , DifAlgoVsBunchStructure);
0521 }
0522 }
0523 }
0524 } else {
0525 int eCount = m_ErrorMonitor->getTH1()->GetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT);
0526 eCount++;
0527 m_ErrorMonitor->getTH1()->SetBinContent(ERROR_UNABLE_RETRIVE_PRODUCT, eCount);
0528 }
0529 }
0530 }
0531
0532
0533
0534
0535
0536
0537 void L1TSync_Offline::getBeamConfOffline(const Event& iEvent) {
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559 m_beamConfig.m_valid = true;
0560
0561
0562 bool firedAlgo = false;
0563
0564
0565
0566
0567 edm::Handle<L1GlobalTriggerReadoutRecord> gtReadoutRecordData;
0568 iEvent.getByToken(m_l1GtDataDaqInputTag, gtReadoutRecordData);
0569
0570 if (gtReadoutRecordData.isValid()) {
0571 const vector<L1GtFdlWord>& gtFdlVectorData = gtReadoutRecordData->gtFdlVector();
0572
0573 for (unsigned int a = 0; a < gtFdlVectorData.size(); a++) {
0574
0575 if (gtFdlVectorData[a].bxInEvent() == 0) {
0576
0577 if (gtFdlVectorData[a].gtDecisionWord()[m_algoBit[m_selectedTriggers["BPTX"]]]) {
0578 firedAlgo = true;
0579 }
0580 }
0581
0582
0583 if (firedAlgo) {
0584 m_beamConfig.beam1.push_back(true);
0585 m_beamConfig.beam2.push_back(true);
0586 } else {
0587 m_beamConfig.beam1.push_back(false);
0588 m_beamConfig.beam2.push_back(false);
0589 }
0590
0591 }
0592 }
0593 }
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724
0725
0726
0727 DEFINE_FWK_MODULE(L1TSync_Offline);