48 if (!outFile.
empty()) {
49 LogWarning(
"L1TdeCSCTF") <<
"L1T Monitoring histograms will be saved to " << outFile.c_str() << endl;
83 my_dtrc = std::make_unique<CSCTFDTReceiver>();
100 pt1Comp = ibooker.
book2D(
"pt1Comp",
"Hardware Vs. Emulator #Delta #phi_{12}", 256, 0, 256, 256, 0, 256);
102 pt1Comp->setAxisTitle(
"Emulator #Delta #phi_{12}", 2);
103 pt2Comp = ibooker.
book2D(
"pt2Comp",
"Hardware Vs. Emulator #Delta #phi_{23}", 16, 0, 16, 16, 0, 16);
105 pt2Comp->setAxisTitle(
"Emulator #Delta #phi_{23}", 2);
106 pt3Comp = ibooker.
book2D(
"pt3Comp",
"Hardware Vs. Emulator #eta", 16, 0, 16, 16, 0, 16);
108 pt3Comp->setAxisTitle(
"Emulator #eta", 2);
109 pt4Comp = ibooker.
book2D(
"pt4Comp",
"Hardware Vs. Emulator Mode", 19, 0, 19, 19, 0, 19);
111 pt4Comp->setAxisTitle(
"Emulator Mode", 2);
113 pt4Comp->setBinLabel(1,
"No Track", 1);
114 pt4Comp->setBinLabel(2,
"Bad Phi/Single", 1);
115 pt4Comp->setBinLabel(3,
"ME1-2-3", 1);
116 pt4Comp->setBinLabel(4,
"ME1-2-4", 1);
117 pt4Comp->setBinLabel(5,
"ME1-3-4", 1);
118 pt4Comp->setBinLabel(6,
"ME2-3-4", 1);
119 pt4Comp->setBinLabel(7,
"ME1-2", 1);
120 pt4Comp->setBinLabel(8,
"ME1-3", 1);
121 pt4Comp->setBinLabel(9,
"ME2-3", 1);
122 pt4Comp->setBinLabel(10,
"ME2-4", 1);
123 pt4Comp->setBinLabel(11,
"ME3-4", 1);
124 pt4Comp->setBinLabel(12,
"MB1-ME3", 1);
125 pt4Comp->setBinLabel(13,
"MB1-ME2", 1);
126 pt4Comp->setBinLabel(14,
"ME1-4", 1);
127 pt4Comp->setBinLabel(15,
"MB1-ME1", 1);
128 pt4Comp->setBinLabel(16,
"Halo Trigger", 1);
129 pt4Comp->setBinLabel(17,
"MB1-ME1-2", 1);
130 pt4Comp->setBinLabel(18,
"MB1-ME1-3", 1);
131 pt4Comp->setBinLabel(19,
"MB1-ME2-3", 1);
133 pt4Comp->setBinLabel(1,
"No Track", 2);
134 pt4Comp->setBinLabel(2,
"Bad Phi/Single", 2);
135 pt4Comp->setBinLabel(3,
"ME1-2-3", 2);
136 pt4Comp->setBinLabel(4,
"ME1-2-4", 2);
137 pt4Comp->setBinLabel(5,
"ME1-3-4", 2);
138 pt4Comp->setBinLabel(6,
"ME2-3-4", 2);
139 pt4Comp->setBinLabel(7,
"ME1-2", 2);
140 pt4Comp->setBinLabel(8,
"ME1-3", 2);
141 pt4Comp->setBinLabel(9,
"ME2-3", 2);
142 pt4Comp->setBinLabel(10,
"ME2-4", 2);
143 pt4Comp->setBinLabel(11,
"ME3-4", 2);
144 pt4Comp->setBinLabel(12,
"MB1-ME3", 2);
145 pt4Comp->setBinLabel(13,
"MB1-ME2", 2);
146 pt4Comp->setBinLabel(14,
"ME1-4", 2);
147 pt4Comp->setBinLabel(15,
"MB1-ME1", 2);
148 pt4Comp->setBinLabel(16,
"Halo Trigger", 2);
149 pt4Comp->setBinLabel(17,
"MB1-ME1-2", 2);
150 pt4Comp->setBinLabel(18,
"MB1-ME1-3", 2);
151 pt4Comp->setBinLabel(19,
"MB1-ME2-3", 2);
153 pt5Comp = ibooker.
book2D(
"pt5Comp",
"Hardware Vs. Emulator Sign, FR", 4, 0, 4, 4, 0, 4);
155 pt5Comp->setAxisTitle(
"Emulator Sign<<1|FR", 2);
158 phiComp = ibooker.
book2D(
"phiComp",
"Hardware Vs. Emulator Track #phi", 32, 0, 32, 32, 0, 32);
160 phiComp->setAxisTitle(
"Emulator #phi", 2);
161 etaComp = ibooker.
book2D(
"etaComp",
"Hardware Vs. Emulator Track #eta", 32, 0, 32, 32, 0, 32);
163 etaComp->setAxisTitle(
"Emulator #eta", 2);
164 occComp = ibooker.
book2D(
"occComp",
"Hardware Vs. Emulator Track Occupancy", 5, 0, 5, 5, 0, 5);
166 occComp->setAxisTitle(
"Emulator Occupancy", 2);
167 ptComp = ibooker.
book2D(
"ptComp",
"Hardware Vs. Emulator Pt", 32, 0, 32, 32, 0, 32);
169 ptComp->setAxisTitle(
"Emulator P_{t}", 2);
170 qualComp = ibooker.
book2D(
"qualComp",
"Hardware Vs. Emulator Quality", 4, 0, 4, 4, 0, 4);
172 qualComp->setAxisTitle(
"Emulator Quality", 2);
175 dtStubPhi = ibooker.
book2D(
"dtStubPhi",
"Hardware Vs. Emulator DT Stub #phi", 200, 400, 2400, 200, 400, 2400);
177 dtStubPhi->setAxisTitle(
"Emulator Stub #phi", 2);
178 badDtStubSector = ibooker.
book2D(
"badDtStubSector",
"Dt Sector for bad Dt stub #phi", 6, 1, 7, 2, 1, 3);
179 badDtStubSector->
setAxisTitle(
"Dt stub sector, subsector", 1);
180 badDtStubSector->setAxisTitle(
"Dt Stub Endcap", 2);
187 pt1Comp_1d = ibooker.
book1D(
"pt1Comp_1d",
"Hardware Vs. Emulator #Delta #phi_{12}", 2, 0, 2);
189 pt1Comp_1d->setBinLabel(1,
"Agree", 1);
190 pt1Comp_1d->setBinLabel(2,
"Disagree", 1);
192 pt2Comp_1d = ibooker.
book1D(
"pt2Comp_1d",
"Hardware Vs. Emulator #Delta #phi_{23}", 2, 0, 2);
194 pt2Comp_1d->setBinLabel(1,
"Agree", 1);
195 pt2Comp_1d->setBinLabel(2,
"Disagree", 1);
197 pt3Comp_1d = ibooker.
book1D(
"pt3Comp_1d",
"Hardware Vs. Emulator #eta", 2, 0, 2);
199 pt3Comp_1d->setBinLabel(1,
"Agree", 1);
200 pt3Comp_1d->setBinLabel(2,
"Disagree", 1);
202 pt4Comp_1d = ibooker.
book1D(
"pt4Comp_1d",
"Hardware Vs. Emulator Mode", 2, 0, 2);
204 pt4Comp_1d->setBinLabel(1,
"Agree", 1);
205 pt4Comp_1d->setBinLabel(2,
"Disagree", 1);
207 pt5Comp_1d = ibooker.
book1D(
"pt5Comp_1d",
"Hardware Vs. Emulator Sign, FR", 2, 0, 2);
209 pt5Comp_1d->setBinLabel(1,
"Agree", 1);
210 pt5Comp_1d->setBinLabel(2,
"Disagree", 1);
213 phiComp_1d = ibooker.
book1D(
"phiComp_1d",
"Hardware Vs. Emulator Track #phi", 2, 0, 2);
215 phiComp_1d->setBinLabel(1,
"Agree", 1);
216 phiComp_1d->setBinLabel(2,
"Disagree", 1);
218 etaComp_1d = ibooker.
book1D(
"etaComp_1d",
"Hardware Vs. Emulator Track #eta", 2, 0, 2);
220 etaComp_1d->setBinLabel(1,
"Agree", 1);
221 etaComp_1d->setBinLabel(2,
"Disagree", 1);
223 occComp_1d = ibooker.
book1D(
"occComp_1d",
"Hardware Vs. Emulator Track Occupancy", 2, 0, 2);
225 occComp_1d->setBinLabel(1,
"Agree", 1);
226 occComp_1d->setBinLabel(2,
"Disagree", 1);
228 ptComp_1d = ibooker.
book1D(
"ptComp_1d",
"Hardware Vs. Emulator Pt", 2, 0, 2);
230 ptComp_1d->setBinLabel(1,
"Agree", 1);
231 ptComp_1d->setBinLabel(2,
"Disagree", 1);
233 qualComp_1d = ibooker.
book1D(
"qualComp_1d",
"Hardware Vs. Emulator Quality", 2, 0, 2);
235 qualComp_1d->setBinLabel(1,
"Agree", 1);
236 qualComp_1d->setBinLabel(2,
"Disagree", 1);
239 dtStubPhi_1d = ibooker.
book1D(
"dtStubPhi_1d",
"Hardware Vs. Emulator DT Stub #phi", 2, 0, 2);
241 dtStubPhi_1d->setBinLabel(1,
"Agree", 1);
242 dtStubPhi_1d->setBinLabel(2,
"Disagree", 1);
248 unsigned int nDataMuons = 0;
249 unsigned int nEmulMuons = 0;
250 int dataMuonArray[8][10], emuMuonArray[8][10];
252 for (
int par = 0; par < 3; par++) {
253 dataMuonArray[
muon][par] = 0;
254 emuMuonArray[
muon][par] = 0;
256 emuMuonArray[
muon][3] = -1;
257 dataMuonArray[
muon][3] = -1;
259 emuMuonArray[
muon][4] = 7;
260 dataMuonArray[
muon][4] = 7;
275 LogWarning(
"L1TdeCSCTF") <<
"\n No valid [data tracks] product found: " 276 <<
" L1CSCTrackCollection" << endl;
280 for (L1CSCTrackCollection::const_iterator trk = tracks.
product()->begin(); trk != tracks.
product()->end(); trk++) {
283 if ((trk->first.BX() < 2) && (trk->first.BX() > -1)) {
286 dataMuonArray[nDataMuons][0] = trk->first.ptLUTAddress();
287 dataMuonArray[nDataMuons][1] = trk->first.sector();
288 dataMuonArray[nDataMuons][2] = trk->first.endcap();
289 dataMuonArray[nDataMuons][8] = trk->first.outputLink();
290 dataMuonArray[nDataMuons][4] = trk->first.BX();
291 dataMuonArray[nDataMuons][5] = trk->first.rank();
292 dataMuonArray[nDataMuons][6] = trk->first.localPhi();
293 dataMuonArray[nDataMuons][7] = trk->first.eta_packed();
294 dataMuonArray[nDataMuons][9] = trk->first.modeExtended();
307 LogWarning(
"L1TdeCSCTF") <<
"\n No valid [emulator tracks] product found: " 308 <<
" L1CSCTrackCollection" << endl;
312 for (L1CSCTrackCollection::const_iterator trk = tracks.
product()->begin(); trk != tracks.
product()->end(); trk++) {
315 if ((trk->first.BX() < 2) && (trk->first.BX() > -1)) {
318 emuMuonArray[nEmulMuons][0] = trk->first.ptLUTAddress();
319 emuMuonArray[nEmulMuons][1] = trk->first.sector();
320 emuMuonArray[nEmulMuons][2] = trk->first.endcap();
321 emuMuonArray[nEmulMuons][4] = trk->first.BX();
322 emuMuonArray[nEmulMuons][5] = trk->first.rank();
323 emuMuonArray[nEmulMuons][6] = trk->first.localPhi();
324 emuMuonArray[nEmulMuons][7] = trk->first.eta_packed();
325 emuMuonArray[nEmulMuons][9] = trk->first.modeExtended();
331 if ((nDataMuons != 0) || (nEmulMuons != 0)) {
332 occComp->Fill(nDataMuons, nEmulMuons);
333 (nDataMuons == nEmulMuons) ? occComp_1d->Fill(0) : occComp_1d->Fill(1);
337 if (nDataMuons == nEmulMuons) {
339 for (
unsigned int mu1 = 0; mu1 < nDataMuons; mu1++) {
340 for (
unsigned int mu2 = 0; mu2 < nEmulMuons; mu2++)
341 if ((emuMuonArray[mu2][1] == dataMuonArray[mu1][1]) && (emuMuonArray[mu2][2] == dataMuonArray[mu1][2])) {
342 if (emuMuonArray[mu2][0] == dataMuonArray[mu1][0]) {
343 emuMuonArray[mu2][3] = mu1;
344 dataMuonArray[mu1][3] = 1;
349 for (
unsigned int c2a = 0; c2a < nEmulMuons; c2a++) {
350 if (emuMuonArray[c2a][3] == -1) {
351 for (
unsigned int cor_a = 0; cor_a < nDataMuons; cor_a++) {
352 if ((dataMuonArray[cor_a][1] == emuMuonArray[c2a][1]) &&
353 (dataMuonArray[cor_a][2] == emuMuonArray[c2a][2]))
355 emuMuonArray[c2a][3] = cor_a;
356 dataMuonArray[cor_a][3] = 1;
362 bool multiMap =
false;
363 if (nEmulMuons > 1) {
364 for (
unsigned int c1a = 0; c1a < (nEmulMuons - 1); c1a++) {
365 for (
unsigned int c1b = (c1a + 1); c1b < nEmulMuons; c1b++) {
366 if (emuMuonArray[c1a][3] == emuMuonArray[c1b][3]) {
377 for (
unsigned int mu3 = 0; mu3 < nEmulMuons; mu3++) {
378 int mapping = emuMuonArray[mu3][3];
379 if ((mapping != -1) && (multiMap ==
false)) {
381 int emuPhi12 = (0x0000ff & emuMuonArray[mu3][0]);
382 int datPhi12 = (0x0000ff & dataMuonArray[
mapping][0]);
383 int emuPhi23 = (0x000f00 & emuMuonArray[mu3][0]) >> 8;
384 int datPhi23 = (0x000f00 & dataMuonArray[
mapping][0]) >> 8;
385 int emuEta = (0x00f000 & emuMuonArray[mu3][0]) >> 12;
386 int datEta = (0x00f000 & dataMuonArray[
mapping][0]) >> 12;
389 int emuFrSin = (0xf00000 & emuMuonArray[mu3][0]) >> 20;
390 int datFrSin = (0xf00000 & dataMuonArray[
mapping][0]) >> 20;
392 int emuQual = emuMuonArray[mu3][5] >> 5;
393 int datQual = dataMuonArray[
mapping][5] >> 5;
394 int emuPt = 0x1f & emuMuonArray[mu3][5];
395 int datPt = 0x1f & dataMuonArray[
mapping][5];
396 int emuModeExtended = emuMuonArray[mu3][9];
397 int datModeExtended = dataMuonArray[
mapping][9];
400 pt4Comp->Fill(datModeExtended, emuModeExtended);
401 (datModeExtended == emuModeExtended) ? pt4Comp_1d->Fill(0) : pt4Comp_1d->Fill(1);
403 if (emuModeExtended == datModeExtended) {
405 pt1Comp->Fill(datPhi12, emuPhi12);
406 (datPhi12 == emuPhi12) ? pt1Comp_1d->Fill(0) : pt1Comp_1d->Fill(1);
407 pt2Comp->Fill(datPhi23, emuPhi23);
408 (datPhi23 == emuPhi23) ? pt2Comp_1d->Fill(0) : pt2Comp_1d->Fill(1);
409 pt3Comp->Fill(datEta, emuEta);
410 (datEta == emuEta) ? pt3Comp_1d->Fill(0) : pt3Comp_1d->Fill(1);
411 pt5Comp->Fill(datFrSin, emuFrSin);
412 (datFrSin == emuFrSin) ? pt5Comp_1d->Fill(0) : pt5Comp_1d->Fill(1);
414 if (dataMuonArray[mapping][8] == 1)
416 ptComp->Fill(datPt, emuPt);
417 (datPt == emuPt) ? ptComp_1d->Fill(0) : ptComp_1d->Fill(1);
418 qualComp->Fill(datQual, emuQual);
419 (datQual == emuQual) ? qualComp_1d->Fill(0) : qualComp_1d->Fill(1);
421 phiComp->Fill(dataMuonArray[mapping][6], emuMuonArray[mu3][6]);
422 etaComp->Fill(dataMuonArray[mapping][7], emuMuonArray[mu3][7]);
424 (dataMuonArray[
mapping][6] == emuMuonArray[mu3][6]) ? phiComp_1d->Fill(0) : phiComp_1d->Fill(1);
425 (dataMuonArray[
mapping][7] == emuMuonArray[mu3][7]) ? etaComp_1d->Fill(0) : etaComp_1d->Fill(1);
438 for (
int dJ = 0; dJ < 7; dJ++) {
439 for (
int dK = 0; dK < 15; dK++) {
440 eDtStub[dJ][dK] = -55;
441 dDtStub[dJ][dK] = -55;
442 dDtStub[7][dK] = -55;
452 LogWarning(
"L1TdeCSCTF") <<
"\n No valid [Data Stubs] product found: " 453 <<
" L1CSCTrackCollection" << endl;
459 vector<csctf::TrackStub> stuList = stub_list.
get();
460 vector<csctf::TrackStub>::const_iterator stu = stuList.begin();
461 for (; stu != stuList.end(); stu++) {
462 if (dDtCounter >= 15)
464 if ((stu->BX() > 4) && (stu->BX() < 9)) {
465 dDtStub[0][dDtCounter] = stu->phiPacked();
466 dDtStub[1][dDtCounter] = stu->getQuality();
467 dDtStub[2][dDtCounter] = stu->endcap();
468 dDtStub[3][dDtCounter] = stu->sector();
469 dDtStub[4][dDtCounter] = stu->subsector();
482 LogWarning(
"L1TdeCSCTF") <<
"\n No valid [Data Stubs] product found: " 483 <<
" L1CSCTrackCollection" << endl;
487 vector<csctf::TrackStub> emuList = emulStub.
get();
488 vector<csctf::TrackStub>::const_iterator eStu = emuList.begin();
489 for (; eStu != emuList.end(); eStu++) {
490 if (eDtCounter >= 15)
492 if ((eStu->BX() > 4) && (eStu->BX() < 9)) {
493 eDtStub[0][eDtCounter] = eStu->phiPacked();
494 eDtStub[1][eDtCounter] = eStu->getQuality();
495 eDtStub[2][eDtCounter] = eStu->endcap();
496 eDtStub[3][eDtCounter] = eStu->sector();
497 eDtStub[4][eDtCounter] = eStu->subsector();
505 for (
int eS = 0; eS < eDtCounter; eS++) {
507 for (
int dS = 0; dS < dDtCounter; dS++) {
509 if (eDtStub[2][eS] == dDtStub[2][dS]) {
511 if (eDtStub[3][eS] == dDtStub[3][dS]) {
513 if (eDtStub[4][eS] == dDtStub[4][dS]) {
515 if ((eDtStub[0][eS] == dDtStub[0][dS]) && (eDtStub[1][eS] == dDtStub[1][dS]) && (eDtStub[6][eS] != 1) &&
516 (dDtStub[6][dS] != 1)) {
530 for (
int eS2 = 0; eS2 < eDtCounter; eS2++) {
531 for (
int dS2 = 0; dS2 < dDtCounter; dS2++) {
533 if ((eDtStub[2][eS2] == dDtStub[2][dS2]) && (eDtStub[3][eS2] == dDtStub[3][dS2]) &&
534 (eDtStub[4][eS2] == dDtStub[4][dS2])) {
536 if (((dDtStub[7][eS2] == -55) || (dDtStub[7][dS2] > (
abs(eDtStub[0][eS2] - dDtStub[0][dS2])))) &&
537 (eDtStub[6][eS2] != 1) && (dDtStub[6][dS2] != 1)) {
539 dDtStub[5][dS2] = eS2;
541 eDtStub[5][eS2] = dS2;
543 dDtStub[7][dS2] =
abs(eDtStub[0][eS2] - dDtStub[0][dS2]);
550 bool dtSMulti =
false;
553 for (
int eS3a = 0; eS3a < eDtCounter - 1; eS3a++)
554 for (
int eS3b = eS3a + 1; eS3b < eDtCounter; eS3b++) {
555 if (eDtStub[5][eS3a] == eDtStub[5][eS3b])
557 if (eDtStub[5][eS3a] == -55 || eDtStub[5][eS3b] == -55)
562 for (
int dS3a = 0; dS3a < dDtCounter - 1; dS3a++)
563 for (
int dS3b = dS3a + 1; dS3b < dDtCounter; dS3b++) {
564 if (dDtStub[5][dS3a] == dDtStub[5][dS3b])
566 if (dDtStub[5][dS3a] == -55 || dDtStub[5][dS3b] == -55)
574 if (dtSMulti ==
false && dtUnmap == 0) {
575 for (
int phil = 0; phil < eDtCounter; phil++) {
576 if (eDtStub[6][phil] == 1 || eDtStub[6][phil] == 2) {
577 int indexFil = eDtStub[3][phil] * 2 + eDtStub[4][phil] - 1;
578 dtStubPhi->Fill(eDtStub[0][phil], dDtStub[0][eDtStub[5][phil]]);
579 (eDtStub[0][phil] == dDtStub[0][eDtStub[5][phil]]) ? dtStubPhi_1d->Fill(0) : dtStubPhi_1d->Fill(1);
580 if (eDtStub[0][phil] != dDtStub[0][eDtStub[5][phil]])
581 badDtStubSector->Fill(indexFil, eDtStub[2][phil]);
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< T > get() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
void setCurrentFolder(std::string const &fullpath)
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
void analyze(edm::Event const &e, edm::EventSetup const &iSetup) override
L1TdeCSCTF(edm::ParameterSet const &pset)
Abs< T >::type abs(const T &t)
void push_many(const std::vector< T > &data)
void bookHistograms(DQMStore::IBooker &ibooker, edm::Run const &, edm::EventSetup const &) override
T const * product() const
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)