File indexing completed on 2024-04-06 12:07:49
0001 #include "DQM/L1TMonitor/interface/L1TdeGCT.h"
0002 #include <bitset>
0003
0004 using namespace dedefs;
0005
0006 const int L1TdeGCT::nGctColl_;
0007 const int L1TdeGCT::nerr;
0008 const int L1TdeGCT::nStage1Layer2Coll_;
0009
0010 L1TdeGCT::L1TdeGCT(const edm::ParameterSet& iConfig) {
0011 verbose_ = iConfig.getUntrackedParameter<int>("VerboseFlag", 0);
0012
0013 if (verbose())
0014 std::cout << "L1TdeGCT::L1TdeGCT()...\n" << std::flush;
0015
0016 DEsource_ = consumes<L1DataEmulRecord>(iConfig.getParameter<edm::InputTag>("DataEmulCompareSource"));
0017 histFolder_ = iConfig.getUntrackedParameter<std::string>("HistFolder");
0018
0019 histFile_ = iConfig.getUntrackedParameter<std::string>("HistFile", "");
0020 if (iConfig.getUntrackedParameter<bool>("disableROOToutput", true))
0021 histFile_ = "";
0022
0023 if (!histFile_.empty()) {
0024 edm::LogInfo("OutputRootFile") << "L1TEmulator GCT specific histograms will be saved to " << histFile_.c_str()
0025 << std::endl;
0026 }
0027
0028 hasRecord_ = true;
0029
0030 if (verbose())
0031 std::cout << "L1TdeGCT::L1TdeGCT()...done.\n" << std::flush;
0032 m_stage1_layer2_ = iConfig.getParameter<bool>("stage1_layer2_");
0033 }
0034
0035 L1TdeGCT::~L1TdeGCT() {}
0036
0037 void L1TdeGCT::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) {
0038 int rnkNBins = 63;
0039 double rnkMinim = 0.5;
0040 double rnkMaxim = 63.5;
0041
0042 if (verbose())
0043 std::cout << "L1TdeGCT::beginRun() start\n" << std::flush;
0044
0045 ibooker.setCurrentFolder(histFolder_);
0046
0047 if (m_stage1_layer2_ == false) {
0048 sysrates = ibooker.book1D("sysrates", "RATE OF COMPARISON FAILURES", nGctColl_, 0, nGctColl_);
0049
0050 for (int j = 0; j < 2; j++) {
0051 std::string lbl("sysncand");
0052 lbl += (j == 0 ? "Data" : "Emul");
0053 std::string title("GCT OBJECT MULTIPLICITY ");
0054 title += (j == 0 ? "(DATA)" : "(EMULATOR)");
0055 sysncand[j] = ibooker.book1D(lbl.data(), title.data(), nGctColl_, 0, nGctColl_);
0056 }
0057
0058 for (int j = 0; j < nGctColl_; j++) {
0059 ibooker.setCurrentFolder(std::string(histFolder_ + "/" + cLabel[j]));
0060
0061 std::string lbl("");
0062 std::string title("");
0063 lbl.clear();
0064 title.clear();
0065 lbl += cLabel[j];
0066 lbl += "ErrorFlag";
0067 title += cLabel[j];
0068 title += " ErrorFlag";
0069 errortype[j] = ibooker.book1D(lbl.data(), title.data(), nerr, 0, nerr);
0070
0071 lbl.clear();
0072 title.clear();
0073 lbl += cLabel[j];
0074 lbl += "Eta";
0075 title += cLabel[j];
0076 title += " ETA OF COMPARISON FAILURES";
0077 eta[j] = ibooker.book1D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim);
0078 lbl.clear();
0079 title.clear();
0080 lbl += cLabel[j];
0081 lbl += "Phi";
0082 title += cLabel[j];
0083 title += " PHI OF COMPARISON FAILURES";
0084 phi[j] = ibooker.book1D(lbl.data(), title.data(), phiNBins, phiMinim, phiMaxim);
0085
0086 lbl.clear();
0087 title.clear();
0088 lbl += cLabel[j];
0089 lbl += "Etaphi";
0090 title += cLabel[j];
0091 title += " ETA PHI OF COMPARISON FAILURES";
0092 etaphi[j] = ibooker.book2D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim, phiNBins, phiMinim, phiMaxim);
0093 lbl.clear();
0094 title.clear();
0095 lbl += cLabel[j];
0096 lbl += "Rank";
0097 title += cLabel[j];
0098 title += " RANK OF COMPARISON FAILURES";
0099 rnk[j] = ibooker.book1D(lbl.data(), title.data(), rnkNBins, rnkMinim, rnkMaxim);
0100
0101 lbl.clear();
0102 title.clear();
0103 lbl += cLabel[j];
0104 lbl += "Eta";
0105 lbl += "Data";
0106 title += cLabel[j];
0107 title += " ETA (DATA)";
0108 etaData[j] = ibooker.book1D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim);
0109 lbl.clear();
0110 title.clear();
0111 lbl += cLabel[j];
0112 lbl += "Phi";
0113 lbl += "Data";
0114 title += cLabel[j];
0115 title += " PHI (DATA)";
0116 phiData[j] = ibooker.book1D(lbl.data(), title.data(), phiNBins, phiMinim, phiMaxim);
0117
0118 lbl.clear();
0119 title.clear();
0120 lbl += cLabel[j];
0121 lbl += "Rank";
0122 lbl += "Data";
0123 title += cLabel[j];
0124 title += " RANK (DATA)";
0125 rnkData[j] = ibooker.book1D(lbl.data(), title.data(), rnkNBins, rnkMinim, rnkMaxim);
0126 lbl.clear();
0127 lbl += cLabel[j];
0128 lbl += "Dword";
0129 dword[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0130 lbl.clear();
0131 lbl += cLabel[j];
0132 lbl += "Eword";
0133 eword[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0134 lbl.clear();
0135 lbl += cLabel[j];
0136 lbl += "DEword";
0137 deword[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0138
0139
0140
0141 }
0142
0143 for (int i = 0; i < nGctColl_; i++) {
0144 sysrates->setBinLabel(i + 1, cLabel[i]);
0145 sysncand[0]->setBinLabel(i + 1, cLabel[i]);
0146 sysncand[1]->setBinLabel(i + 1, cLabel[i]);
0147 }
0148
0149 for (int i = 0; i < nGctColl_; i++) {
0150 for (int j = 0; j < nerr; j++) {
0151 errortype[i]->setBinLabel(j + 1, errLabel[j]);
0152 }
0153 }
0154
0155 for (int i = 0; i < nGctColl_; i++) {
0156 etaphi[i]->setAxisTitle("GCT #eta", 1);
0157 etaphi[i]->setAxisTitle("GCT #phi", 2);
0158 eta[i]->setAxisTitle("GCT #eta");
0159 phi[i]->setAxisTitle("GCT #phi");
0160 rnk[i]->setAxisTitle("Rank");
0161 etaData[i]->setAxisTitle("GCT #eta");
0162 phiData[i]->setAxisTitle("GCT #phi");
0163 rnkData[i]->setAxisTitle("Rank");
0164 dword[i]->setAxisTitle("trigger data word bit");
0165 eword[i]->setAxisTitle("trigger data word bit");
0166 deword[i]->setAxisTitle("trigger data word bit");
0167 }
0168
0169 for (int i = 0; i < nGctColl_; i++) {
0170 colCount[i] = 0;
0171 nWithCol[i] = 0;
0172 }
0173 }
0174
0175
0176
0177 if (m_stage1_layer2_ == true) {
0178 sysrates = ibooker.book1D("sysrates", "RATE OF COMPARISON FAILURES", nStage1Layer2Coll_, 0, nStage1Layer2Coll_);
0179
0180 for (int j = 0; j < 2; j++) {
0181 std::string lbl("sysncand");
0182 lbl += (j == 0 ? "Data" : "Emul");
0183 std::string title("Stage1Layer2 OBJECT MULTIPLICITY ");
0184 title += (j == 0 ? "(DATA)" : "(EMULATOR)");
0185 sysncand[j] = ibooker.book1D(lbl.data(), title.data(), nStage1Layer2Coll_, 0, nStage1Layer2Coll_);
0186 }
0187
0188 for (int j = 0; j < nStage1Layer2Coll_; j++) {
0189 ibooker.setCurrentFolder(std::string(histFolder_ + "/" + sLabel[j]));
0190
0191 if (sLabel[j] == "MHT") {
0192 rnkNBins = 127;
0193 rnkMinim = 0.5;
0194 rnkMaxim = 127.5;
0195 }
0196
0197 if ((sLabel[j] == "HT") || (sLabel[j] == "ET") || (sLabel[j] == "MET")) {
0198 rnkNBins = 4096;
0199 rnkMinim = -0.5;
0200 rnkMaxim = 4095.5;
0201 }
0202
0203 if (sLabel[j] == "Stage1HFSums") {
0204 rnkNBins = 9;
0205 rnkMinim = -0.5;
0206 rnkMaxim = 8.5;
0207 }
0208
0209 if (sLabel[j] == "IsoTauJet") {
0210 rnkNBins = 64;
0211 rnkMinim = -0.5;
0212 rnkMaxim = 63.5;
0213 }
0214
0215 std::string lbl("");
0216 std::string title("");
0217 lbl.clear();
0218 title.clear();
0219 lbl += sLabel[j];
0220 lbl += "ErrorFlag";
0221 title += sLabel[j];
0222 title += " ErrorFlag";
0223 errortype_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), nerr, 0, nerr);
0224
0225 lbl.clear();
0226 title.clear();
0227 lbl += sLabel[j];
0228 lbl += "Eta";
0229 title += sLabel[j];
0230 title += " ETA OF COMPARISON FAILURES";
0231 eta_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim);
0232 lbl.clear();
0233 title.clear();
0234 lbl += sLabel[j];
0235 lbl += "Phi";
0236 title += sLabel[j];
0237 title += " PHI OF COMPARISON FAILURES";
0238 phi_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), phiNBins, phiMinim, phiMaxim);
0239
0240 lbl.clear();
0241 title.clear();
0242 lbl += sLabel[j];
0243 lbl += "Etaphi";
0244 title += sLabel[j];
0245 title += " ETA PHI OF COMPARISON FAILURES";
0246 etaphi_stage1layer2[j] =
0247 ibooker.book2D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim, phiNBins, phiMinim, phiMaxim);
0248 lbl.clear();
0249 title.clear();
0250 lbl += sLabel[j];
0251 lbl += "Rank";
0252 title += sLabel[j];
0253 title += " RANK OF COMPARISON FAILURES";
0254 rnk_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), rnkNBins, rnkMinim, rnkMaxim);
0255
0256 lbl.clear();
0257 title.clear();
0258 lbl += sLabel[j];
0259 lbl += "Eta";
0260 lbl += "Data";
0261 title += sLabel[j];
0262 title += " ETA (DATA)";
0263 etaData_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), etaNBins, etaMinim, etaMaxim);
0264 lbl.clear();
0265 title.clear();
0266 lbl += sLabel[j];
0267 lbl += "Phi";
0268 lbl += "Data";
0269 title += sLabel[j];
0270 title += " PHI (DATA)";
0271 phiData_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), phiNBins, phiMinim, phiMaxim);
0272
0273 lbl.clear();
0274 title.clear();
0275 lbl += sLabel[j];
0276 lbl += "Rank";
0277 lbl += "Data";
0278 title += sLabel[j];
0279 title += " RANK (DATA)";
0280 rnkData_stage1layer2[j] = ibooker.book1D(lbl.data(), title.data(), rnkNBins, rnkMinim, rnkMaxim);
0281 lbl.clear();
0282 lbl += sLabel[j];
0283 lbl += "Dword";
0284 dword_stage1layer2[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0285 lbl.clear();
0286 lbl += sLabel[j];
0287 lbl += "Eword";
0288 eword_stage1layer2[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0289 lbl.clear();
0290 lbl += sLabel[j];
0291 lbl += "DEword";
0292 deword_stage1layer2[j] = ibooker.book1D(lbl.data(), lbl.data(), nbit, 0, nbit);
0293
0294
0295
0296 }
0297
0298 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0299 sysrates->setBinLabel(i + 1, sLabel[i]);
0300 sysncand[0]->setBinLabel(i + 1, sLabel[i]);
0301 sysncand[1]->setBinLabel(i + 1, sLabel[i]);
0302 }
0303
0304 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0305 for (int j = 0; j < nerr; j++) {
0306 errortype_stage1layer2[i]->setBinLabel(j + 1, errLabel[j]);
0307 }
0308 }
0309
0310 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0311 etaphi_stage1layer2[i]->setAxisTitle("Stage1Layer2 #eta", 1);
0312 etaphi_stage1layer2[i]->setAxisTitle("Stage1Layer2 #phi", 2);
0313 eta_stage1layer2[i]->setAxisTitle("Stage1Layer2 #eta");
0314 phi_stage1layer2[i]->setAxisTitle("Stage1Layer2 #phi");
0315 rnk_stage1layer2[i]->setAxisTitle("Rank");
0316 etaData_stage1layer2[i]->setAxisTitle("Stage1Layer2 #eta");
0317 phiData_stage1layer2[i]->setAxisTitle("Stage1Layer2 #phi");
0318 rnkData_stage1layer2[i]->setAxisTitle("Rank");
0319 dword_stage1layer2[i]->setAxisTitle("trigger data word bit");
0320 eword_stage1layer2[i]->setAxisTitle("trigger data word bit");
0321 deword_stage1layer2[i]->setAxisTitle("trigger data word bit");
0322 }
0323
0324 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0325 colCount_stage1Layer2[i] = 0;
0326 nWithCol_stage1Layer2[i] = 0;
0327 }
0328 }
0329
0330 if (verbose())
0331 std::cout << "L1TdeGCT::beginJob() end.\n" << std::flush;
0332 }
0333
0334
0335
0336 void L1TdeGCT::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0337 if (!hasRecord_)
0338 return;
0339
0340 if (verbose())
0341 std::cout << "L1TdeGCT::analyze() start\n" << std::flush;
0342
0343
0344 edm::Handle<L1DataEmulRecord> deRecord;
0345 iEvent.getByToken(DEsource_, deRecord);
0346
0347 if (!deRecord.isValid()) {
0348 edm::LogInfo("DataNotFound") << "Cannot find L1DataEmulRecord"
0349 << " Please verify that comparator was successfully executed."
0350 << " Emulator DQM for GCT will be skipped!" << std::endl;
0351 hasRecord_ = false;
0352 return;
0353 }
0354
0355 if (m_stage1_layer2_ == false) {
0356 bool isComp = deRecord->get_isComp(GCT);
0357 if (!isComp) {
0358 if (verbose())
0359 std::cout << "[L1TdeGCT] Gct information not generated in de-record."
0360 << " Skiping event!\n"
0361 << std::flush;
0362 return;
0363 }
0364
0365 int DEncand[2] = {0};
0366 for (int j = 0; j < 2; j++)
0367 DEncand[j] = deRecord->getNCand(GCT, j);
0368
0369 if (verbose())
0370 std::cout << "[L1TdeGCT] ncands"
0371 << " data: " << DEncand[0] << " emul: " << DEncand[1] << std::endl;
0372
0373
0374 L1DEDigiCollection deColl;
0375 deColl = deRecord->getColl();
0376
0377
0378 L1DEDigiCollection gctColl;
0379
0380 gctColl.reserve(20);
0381 gctColl.clear();
0382
0383 for (L1DEDigiCollection::const_iterator it = deColl.begin(); it != deColl.end(); it++)
0384 if (!it->empty())
0385 if (it->sid() == GCT)
0386 gctColl.push_back(*it);
0387
0388 if (verbose()) {
0389 std::cout << "[L1TdeGCT] record has " << gctColl.size() << " gct de digis\n" << std::flush;
0390 for (L1DEDigiCollection::const_iterator it = gctColl.begin(); it != gctColl.end(); it++)
0391 std::cout << "\t" << *it << std::endl;
0392 }
0393
0394 const int nullVal = L1DataEmulDigi().reset();
0395
0396
0397
0398
0399 for (L1DEDigiCollection::const_iterator it = gctColl.begin(); it != gctColl.end(); it++) {
0400
0401 int sid = it->sid();
0402
0403 int cid = it->cid();
0404
0405
0406 if (verbose())
0407 std::cout << "[L1TdeGCT] processing digi "
0408 << " sys:" << sid << " type:" << cid << " \n\t" << *it << "\n"
0409 << std::flush;
0410
0411
0412 if (sid != GCT || it->empty()) {
0413 LogDebug("L1TdeGCT") << "consistency check failure, non-gct digis!";
0414 continue;
0415 }
0416
0417 int type = it->type();
0418 double phiv = it->x1();
0419 double etav = it->x2();
0420 float rankarr[2];
0421 it->rank(rankarr);
0422 float rnkv = rankarr[0];
0423
0424 double wei;
0425
0426 unsigned int mask = (~0x0);
0427
0428
0429 int ccid = cid - dedefs::GCTisolaem;
0430 if (ccid < 0 || ccid >= nGctColl_) {
0431 LogDebug("L1TdeGCT") << "consistency check failure, col type outbounds:" << ccid << "\n";
0432 ccid = 0;
0433 }
0434
0435
0436 if (type < 4)
0437 sysncand[0]->Fill(ccid);
0438 if (type < 5 && type != 3)
0439 sysncand[1]->Fill(ccid);
0440
0441 errortype[ccid]->Fill(type);
0442
0443 wei = (type == 0) ? 0. : 1.;
0444 if (etav != nullVal && phiv != nullVal)
0445 etaphi[ccid]->Fill(etav, phiv, wei);
0446 if (etav != nullVal)
0447 eta[ccid]->Fill(etav, wei);
0448 if (phiv != nullVal)
0449 phi[ccid]->Fill(phiv, wei);
0450 rnk[ccid]->Fill(rnkv, wei);
0451
0452
0453 wei = (type == 4) ? 0. : 1.;
0454 if (etav != nullVal)
0455 etaData[ccid]->Fill(etav, wei);
0456 if (phiv != nullVal)
0457 phiData[ccid]->Fill(phiv, wei);
0458 rnkData[ccid]->Fill(rnkv, wei);
0459
0460
0461 unsigned int word[2];
0462 it->data(word);
0463 std::bitset<32> dbits(word[0]);
0464 std::bitset<32> ebits(word[1]);
0465 unsigned int dexor = ((word[0]) ^ (word[1]));
0466
0467 std::bitset<32> debits(dexor);
0468
0469 std::bitset<32> dembits(((dexor) & (mask)));
0470
0471 if (verbose())
0472 std::cout << "l1degct"
0473 << " sid:" << sid << " cid:" << cid << "\n"
0474 << " data:0x" << std::hex << word[0] << std::dec << " bitset:" << dbits << "\n"
0475 << " emul:0x" << std::hex << word[1] << std::dec << " bitset:" << ebits << "\n"
0476 << " xor:0x" << std::hex << dexor << std::dec << " bitset:" << debits
0477 << " bitset:" << ((dbits) ^ (ebits)) << "\n"
0478 << std::flush;
0479
0480
0481 for (int ibit = 0; ibit < 32; ibit++) {
0482
0483 wei = (type == 3 || type == 4) ? 0. : 1.;
0484 if (dbits[ibit])
0485 dword[ccid]->Fill(ibit, wei);
0486 if (ebits[ibit])
0487 eword[ccid]->Fill(ibit, wei);
0488 if (debits[ibit])
0489 deword[ccid]->Fill(ibit, wei);
0490
0491 }
0492 }
0493
0494
0495 int hasCol[nGctColl_] = {0};
0496 int nagree[nGctColl_] = {0};
0497 for (L1DEDigiCollection::const_iterator it = gctColl.begin(); it != gctColl.end(); it++) {
0498 int ccid = it->cid() - dedefs::GCTisolaem;
0499 ccid = (ccid < 0 || ccid >= nGctColl_) ? 0 : ccid;
0500 hasCol[ccid]++;
0501 if (!it->type())
0502 nagree[ccid]++;
0503 }
0504 for (int i = 0; i < nGctColl_; i++) {
0505 if (!hasCol[i])
0506 continue;
0507
0508
0509
0510
0511 nWithCol[i] += hasCol[i];
0512 colCount[i] += nagree[i];
0513 }
0514 for (int i = 0; i < nGctColl_; i++) {
0515 int ibin = i + 1;
0516 double rate = nWithCol[i] ? 1. - 1. * colCount[i] / nWithCol[i] : 0.;
0517 sysrates->setBinContent(ibin, rate);
0518 if (verbose()) {
0519 std::cout << "[L1TDEMON] analyze rate computation\t\n"
0520 << " colid:" << i << "(so far)"
0521 << " nWithCol: " << nWithCol[i] << " colCount: " << colCount[i] << "(this event)"
0522 << "hasCol: " << hasCol[i] << " nagree: " << nagree[i] << " rate:" << sysrates->getBinContent(ibin)
0523 << "\n"
0524 << std::flush;
0525 if (rate > 1. || rate < 0.)
0526 std::cout << "problem, error rate for " << SystLabel[i] << " is " << sysrates->getBinContent(ibin) << "\n"
0527 << std::flush;
0528 }
0529 }
0530 }
0531
0532 if (m_stage1_layer2_ == true) {
0533 bool isComp = deRecord->get_isComp(GCT);
0534 if (!isComp) {
0535 if (verbose())
0536 std::cout << "[L1TdeGCT] Gct information not generated in de-record."
0537 << " Skiping event!\n"
0538 << std::flush;
0539 return;
0540 }
0541
0542 int DEncand[2] = {0};
0543 for (int j = 0; j < 2; j++)
0544 DEncand[j] = deRecord->getNCand(GCT, j);
0545
0546 if (verbose())
0547 std::cout << "[L1TdeGCT] ncands"
0548 << " data: " << DEncand[0] << " emul: " << DEncand[1] << std::endl;
0549
0550
0551 L1DEDigiCollection deColl;
0552 deColl = deRecord->getColl();
0553
0554
0555 L1DEDigiCollection stage1layer2Coll;
0556
0557 stage1layer2Coll.reserve(21);
0558 stage1layer2Coll.clear();
0559
0560 for (L1DEDigiCollection::const_iterator it = deColl.begin(); it != deColl.end(); it++)
0561 if (!it->empty())
0562 if (it->sid() == GCT)
0563 stage1layer2Coll.push_back(*it);
0564
0565 if (verbose()) {
0566 std::cout << "[L1TdeSTAGE1LAYER2] record has " << stage1layer2Coll.size() << " stage1layer2 de digis\n"
0567 << std::endl;
0568 for (L1DEDigiCollection::const_iterator it = stage1layer2Coll.begin(); it != stage1layer2Coll.end(); it++)
0569 std::cout << "\t" << *it << std::endl;
0570 }
0571
0572 const int nullVal = L1DataEmulDigi().reset();
0573
0574
0575
0576
0577 for (L1DEDigiCollection::const_iterator it = stage1layer2Coll.begin(); it != stage1layer2Coll.end(); it++) {
0578
0579 int sid = it->sid();
0580
0581 int cid = it->cid();
0582
0583
0584 if (verbose())
0585 std::cout << "[L1TdeStage1Layer2] processing digi "
0586 << " sys:" << sid << " type:" << cid << " \n\t" << *it << "\n"
0587 << std::endl;
0588
0589 if (sid != GCT || it->empty()) {
0590 LogDebug("L1TdeGCT") << "consistency check failure, non-stage1layer2 digis!";
0591 continue;
0592 }
0593
0594 int type = it->type();
0595 double phiv = it->x1();
0596 double etav = it->x2();
0597 float rankarr[2];
0598 it->rank(rankarr);
0599 float rnkv = rankarr[0];
0600
0601 double wei;
0602
0603 unsigned int mask = (~0x0);
0604
0605
0606 int ccid = cid - dedefs::GCTisolaem;
0607 if (ccid < 0 || ccid >= nStage1Layer2Coll_) {
0608 LogDebug("L1TdeGCT") << "consistency check failure, col type outbounds:" << ccid << "\n";
0609 ccid = 0;
0610 }
0611
0612
0613 if (type < 4)
0614 sysncand[0]->Fill(ccid);
0615 if (type < 5 && type != 3)
0616 sysncand[1]->Fill(ccid);
0617 errortype_stage1layer2[ccid]->Fill(type);
0618 wei = (type == 0) ? 0. : 1.;
0619 if (etav != nullVal && phiv != nullVal)
0620 etaphi_stage1layer2[ccid]->Fill(etav, phiv, wei);
0621 if (etav != nullVal)
0622 eta_stage1layer2[ccid]->Fill(etav, wei);
0623 if (phiv != nullVal)
0624 phi_stage1layer2[ccid]->Fill(phiv, wei);
0625 rnk_stage1layer2[ccid]->Fill(rnkv, wei);
0626
0627
0628 wei = (type == 4) ? 0. : 1.;
0629 if (etav != nullVal)
0630 etaData_stage1layer2[ccid]->Fill(etav, wei);
0631 if (phiv != nullVal)
0632 phiData_stage1layer2[ccid]->Fill(phiv, wei);
0633 rnkData_stage1layer2[ccid]->Fill(rnkv, wei);
0634
0635
0636 unsigned int word_stage1layer2[2];
0637 it->data(word_stage1layer2);
0638 std::bitset<32> dbits(word_stage1layer2[0]);
0639 std::bitset<32> ebits(word_stage1layer2[1]);
0640 unsigned int dexor = ((word_stage1layer2[0]) ^ (word_stage1layer2[1]));
0641
0642 std::bitset<32> debits(dexor);
0643
0644 std::bitset<32> dembits(((dexor) & (mask)));
0645
0646 if (verbose())
0647 std::cout << "l1degct"
0648 << " sid:" << sid << " cid:" << cid << "\n"
0649 << " data:0x" << std::hex << word_stage1layer2[0] << std::dec << " bitset:" << dbits << "\n"
0650 << " emul:0x" << std::hex << word_stage1layer2[1] << std::dec << " bitset:" << ebits << "\n"
0651 << " xor:0x" << std::hex << dexor << std::dec << " bitset:" << debits
0652 << " bitset:" << ((dbits) ^ (ebits)) << "\n"
0653 << std::flush;
0654
0655
0656 for (int ibit = 0; ibit < 32; ibit++) {
0657
0658 wei = (type == 3 || type == 4) ? 0. : 1.;
0659 if (dbits[ibit])
0660 dword_stage1layer2[ccid]->Fill(ibit, wei);
0661 if (ebits[ibit])
0662 eword_stage1layer2[ccid]->Fill(ibit, wei);
0663 if (debits[ibit])
0664 deword_stage1layer2[ccid]->Fill(ibit, wei);
0665
0666 }
0667 }
0668
0669 int hasCol[nStage1Layer2Coll_] = {0};
0670 int nagree[nStage1Layer2Coll_] = {0};
0671 for (L1DEDigiCollection::const_iterator it = stage1layer2Coll.begin(); it != stage1layer2Coll.end(); it++) {
0672 int ccid = it->cid() - dedefs::GCTisolaem;
0673 ccid = (ccid < 0 || ccid >= nStage1Layer2Coll_) ? 0 : ccid;
0674 hasCol[ccid]++;
0675 if (!it->type())
0676 nagree[ccid]++;
0677 }
0678 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0679 if (!hasCol[i])
0680 continue;
0681
0682
0683
0684
0685 nWithCol_stage1Layer2[i] += hasCol[i];
0686 colCount_stage1Layer2[i] += nagree[i];
0687 }
0688 for (int i = 0; i < nStage1Layer2Coll_; i++) {
0689 int ibin = i + 1;
0690 double rate = nWithCol_stage1Layer2[i] ? 1. - 1. * colCount_stage1Layer2[i] / nWithCol_stage1Layer2[i] : 0.;
0691 sysrates->setBinContent(ibin, rate);
0692 if (verbose()) {
0693 std::cout << "[L1TDEMON] analyze rate computation\t\n"
0694 << " colid:" << i << "(so far)"
0695 << " nWithCol: " << nWithCol_stage1Layer2[i] << " colCount: " << colCount_stage1Layer2[i]
0696 << "(this event)"
0697 << "hasCol: " << hasCol[i] << " nagree: " << nagree[i] << " rate:" << sysrates->getBinContent(ibin)
0698 << "\n"
0699 << std::flush;
0700 if (rate > 1. || rate < 0.)
0701 std::cout << "problem, error rate for " << SystLabel[i] << " is " << sysrates->getBinContent(ibin) << "\n"
0702 << std::flush;
0703 }
0704 }
0705 }
0706 }