CMS 3D CMS Logo

DTDataIntegrityUrosOffline.cc
Go to the documentation of this file.
1 /*
2  * \file DTDataIntegrityUrosOffline.cc
3  *
4  * \author Javier Fernandez (Uni. Oviedo)
5  *
6  */
7 
17 
18 #include <cmath>
19 #include <fstream>
20 #include <map>
21 #include <string>
22 #include <vector>
23 
24 using namespace std;
25 using namespace edm;
26 
28  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
29  << "[DTDataIntegrityUrosOffline]: Constructor" << endl;
30 
31  fedToken = consumes<DTuROSFEDDataCollection>(ps.getParameter<InputTag>("dtFEDlabel"));
34 
35  neventsFED = 0;
36  neventsuROS = 0;
37 
38  fedIntegrityFolder = ps.getUntrackedParameter<string>("fedIntegrityFolder", "DT/FEDIntegrity");
39 }
40 
42  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
43  << "[DTDataIntegrityUrosOffline]: Destructor. Analyzed " << neventsFED << " events" << endl;
44  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
45  << "[DTDataIntegrityUrosOffline]: postEndJob called!" << endl;
46 }
47 
48 /*
49  Folder Structure uROS (starting 2018):
50  - 3 uROS Summary plots: Wheel-1/-2 (FED1369), Wheel0 (FED1370), Wheel+1/+2 (FED1371)
51  - One folder for each FED
52  - Inside each FED folder the uROSStatus histos, FED histos
53  - One folder for each wheel and the corresponding ROSn folders
54  - Inside each ROS folder the TDC and ROS errors histos, 24 Links/plot
55 */
56 
58  edm::Run const& iRun,
59  edm::EventSetup const& iSetup) {
60  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
61  << "[DTDataIntegrityUrosOffline]: postBeginJob" << endl;
62 
63  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
64  << "[DTDataIntegrityUrosOffline] Get DQMStore service" << endl;
65 
66  // Loop over the DT FEDs
67 
68  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
69  << " FEDS: " << FEDIDmin << " to " << FEDIDmax << " in the RO" << endl;
70 
71  // book FED integrity histos
72  bookHistos(ibooker, FEDIDmin, FEDIDmax);
73 
74  // static booking of the histograms
75 
76  for (int fed = FEDIDmin; fed <= FEDIDmax; ++fed) { // loop over the FEDs in the readout
77 
78  bookHistos(ibooker, string("FED"), fed);
79 
80  bookHistos(ibooker, string("CRATE"), fed);
81 
82  for (int uRos = 1; uRos <= NuROS; ++uRos) { // loop over all ROS
83  bookHistosuROS(ibooker, fed, uRos);
84  }
85  }
86 
87  for (int wheel = -2; wheel < 3; ++wheel) {
88  for (int ros = 1; ros <= NuROS; ++ros) { // loop over all ROS
89  bookHistosROS(ibooker, wheel, ros);
90  }
91  }
92 }
93 
94 void DTDataIntegrityUrosOffline::bookHistos(DQMStore::IBooker& ibooker, const int fedMin, const int fedMax) {
95  ibooker.setCurrentFolder("DT/EventInfo/Counters");
96  nEventMonitor = ibooker.bookFloat("nProcessedEventsDataIntegrity");
97 
98  // Standard FED integrity histos
99  ibooker.setCurrentFolder(topFolder(true));
100 
101  int nFED = (fedMax - fedMin) + 1;
102 
103  hFEDEntry = ibooker.book1D("FEDEntries", "# entries per DT FED", nFED, fedMin, fedMax + 1);
104 
105  string histoType = "ROSSummary";
106  for (int wheel = -2; wheel < 3; ++wheel) {
107  string wheel_s = to_string(wheel);
108  string histoName = "ROSSummary_W" + wheel_s;
109  string fed_s = to_string(FEDIDmin + 1); //3 FEDs from 2018 onwards
110  if (wheel < 0)
111  fed_s = to_string(FEDIDmin);
112  else if (wheel > 0)
113  fed_s = to_string(FEDIDmax);
114  string histoTitle = "Summary Wheel" + wheel_s + " (FED " + fed_s + ")";
115 
116  ((summaryHistos[histoType])[wheel]) = ibooker.book2D(histoName, histoTitle, 11, 0, 11, 12, 1, 13);
117  MonitorElement* histo = ((summaryHistos[histoType])[wheel]);
118  histo->setBinLabel(1, "Error 1", 1);
119  histo->setBinLabel(2, "Error 2", 1);
120  histo->setBinLabel(3, "Error 3", 1);
121  histo->setBinLabel(4, "Error 4", 1);
122  histo->setBinLabel(5, "Not OKflag", 1);
123  // TDC error bins
124  histo->setBinLabel(6, "TDC Fatal", 1);
125  histo->setBinLabel(7, "TDC RO FIFO ov.", 1);
126  histo->setBinLabel(8, "TDC L1 buf. ov.", 1);
127  histo->setBinLabel(9, "TDC L1A FIFO ov.", 1);
128  histo->setBinLabel(10, "TDC hit err.", 1);
129  histo->setBinLabel(11, "TDC hit rej.", 1);
130 
131  histo->setBinLabel(1, "ROS1", 2);
132  histo->setBinLabel(2, "ROS2", 2);
133  histo->setBinLabel(3, "ROS3", 2);
134  histo->setBinLabel(4, "ROS4", 2);
135  histo->setBinLabel(5, "ROS5", 2);
136  histo->setBinLabel(6, "ROS6", 2);
137  histo->setBinLabel(7, "ROS7", 2);
138  histo->setBinLabel(8, "ROS8", 2);
139  histo->setBinLabel(9, "ROS9", 2);
140  histo->setBinLabel(10, "ROS10", 2);
141  histo->setBinLabel(11, "ROS11", 2);
142  histo->setBinLabel(12, "ROS12", 2);
143  }
144 }
145 
146 void DTDataIntegrityUrosOffline::bookHistos(DQMStore::IBooker& ibooker, string folder, const int fed) {
147  string wheel = "ZERO";
148  if (fed == FEDIDmin)
149  wheel = "NEG";
150  else if (fed == FEDIDmax)
151  wheel = "POS";
152  string fed_s = to_string(fed);
153  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
154  << " Booking histos for FED: " << fed_s << " folder: " << folder << endl;
155 
156  string histoType;
157  string histoName;
158  string histoTitle;
159  MonitorElement* histo = nullptr;
160 
161  // Crate (old DDU) Histograms
162  if (folder == "CRATE") {
163  ibooker.setCurrentFolder(topFolder(false) + "FED" + fed_s);
164 
165  histoType = "EventLength";
166  histoName = "FED" + fed_s + "_" + histoType;
167  histoTitle = "Event Length (Bytes) FED " + fed_s;
168  (fedHistos[histoType])[fed] = ibooker.book1D(histoName, histoTitle, 501, 0, 30000);
169 
170  histoType = "uROSStatus";
171  histoName = "FED" + fed_s + "_" + histoType;
172  (fedHistos[histoType])[fed] = ibooker.book2D(histoName, histoName, 12, 0, 12, 12, 1, 13);
173  histo = (fedHistos[histoType])[fed];
174  // only placeholders for the moment
175  histo->setBinLabel(1, "Error G 1", 1);
176  histo->setBinLabel(2, "Error G 2", 1);
177  histo->setBinLabel(3, "Error G 3", 1);
178  histo->setBinLabel(4, "Error G 4", 1);
179  histo->setBinLabel(5, "Error G 5", 1);
180  histo->setBinLabel(6, "Error G 6", 1);
181  histo->setBinLabel(7, "Error G 7", 1);
182  histo->setBinLabel(8, "Error G 8", 1);
183  histo->setBinLabel(9, "Error G 9", 1);
184  histo->setBinLabel(10, "Error G 10", 1);
185  histo->setBinLabel(11, "Error G 11", 1);
186  histo->setBinLabel(12, "Error G 12", 1);
187 
188  histo->setBinLabel(1, "uROS 1", 2);
189  histo->setBinLabel(2, "uROS 2", 2);
190  histo->setBinLabel(3, "uROS 3", 2);
191  histo->setBinLabel(4, "uROS 4", 2);
192  histo->setBinLabel(5, "uROS 5", 2);
193  histo->setBinLabel(6, "uROS 6", 2);
194  histo->setBinLabel(7, "uROS 7", 2);
195  histo->setBinLabel(8, "uROS 8", 2);
196  histo->setBinLabel(9, "uROS 9", 2);
197  histo->setBinLabel(10, "uROS 10", 2);
198  histo->setBinLabel(11, "uROS 11", 2);
199  histo->setBinLabel(12, "uROS 12", 2);
200  }
201 
202  // uROS Histograms
203  if (folder == "FED") { // The summary of the error of the ROS on the same FED
204  ibooker.setCurrentFolder(topFolder(false));
205 
206  histoType = "uROSSummary";
207  histoName = "FED" + fed_s + "_uROSSummary";
208  string histoTitle = "Summary Wheel" + wheel + " (FED " + fed_s + ")";
209 
210  ((summaryHistos[histoType])[fed]) = ibooker.book2D(histoName, histoTitle, 12, 0, 12, 12, 1, 13);
211  MonitorElement* histo = ((summaryHistos[histoType])[fed]);
212  // ROS error bins
213  // Placeholders for Global Errors for the moment
214  histo->setBinLabel(1, "Error G 1", 1);
215  histo->setBinLabel(2, "Error G 2", 1);
216  histo->setBinLabel(3, "Error G 3", 1);
217  histo->setBinLabel(4, "Error G 4", 1);
218  histo->setBinLabel(5, "Error G 5", 1);
219  histo->setBinLabel(6, "Error G 6", 1);
220  histo->setBinLabel(7, "Error G 7", 1);
221  histo->setBinLabel(8, "Error G 8", 1);
222  histo->setBinLabel(9, "Error G 9", 1);
223  histo->setBinLabel(10, "Error G 10", 1);
224  histo->setBinLabel(11, "Error G 11", 1);
225  histo->setBinLabel(12, "Error G 12", 1);
226 
227  histo->setBinLabel(1, "uROS1", 2);
228  histo->setBinLabel(2, "uROS2", 2);
229  histo->setBinLabel(3, "uROS3", 2);
230  histo->setBinLabel(4, "uROS4", 2);
231  histo->setBinLabel(5, "uROS5", 2);
232  histo->setBinLabel(6, "uROS6", 2);
233  histo->setBinLabel(7, "uROS7", 2);
234  histo->setBinLabel(8, "uROS8", 2);
235  histo->setBinLabel(9, "uROS9", 2);
236  histo->setBinLabel(10, "uROS10", 2);
237  histo->setBinLabel(11, "uROS11", 2);
238  histo->setBinLabel(12, "uROS12", 2);
239  }
240 }
241 
242 void DTDataIntegrityUrosOffline::bookHistosROS(DQMStore::IBooker& ibooker, const int wheel, const int ros) {
243  string wheel_s = to_string(wheel);
244  string ros_s = to_string(ros);
245  ibooker.setCurrentFolder(topFolder(false) + "Wheel" + wheel_s + "/ROS" + ros_s);
246 
247  string histoType = "ROSError";
248  int linkDown = 0;
249  string linkDown_s = to_string(linkDown);
250  int linkUp = linkDown + 24;
251  string linkUp_s = to_string(linkUp);
252  string histoName = "W" + wheel_s + "_" + "ROS" + ros_s + "_" + histoType;
253  string histoTitle = histoName + " (Link " + linkDown_s + "-" + linkUp_s + " error summary)";
254  unsigned int keyHisto = (uROSError)*1000 + (wheel + 2) * 100 + (ros - 1);
255  urosHistos[keyHisto] = ibooker.book2D(histoName, histoTitle, 5, 0, 5, 25, 0, 25);
256 
258  // uROS error bins
259  // Placeholders for the moment
260  histo->setBinLabel(1, "Error 1", 1);
261  histo->setBinLabel(2, "Error 2", 1);
262  histo->setBinLabel(3, "Error 3", 1);
263  histo->setBinLabel(4, "Error 4", 1);
264  histo->setBinLabel(5, "Not OKFlag", 1);
265  for (int link = linkDown; link < (linkUp + 1); ++link) {
266  string link_s = to_string(link);
267  histo->setBinLabel(link + 1, "Link" + link_s, 2);
268  }
269 
270 } //bookHistosROS
271 
272 void DTDataIntegrityUrosOffline::bookHistosuROS(DQMStore::IBooker& ibooker, const int fed, const int uRos) {
273  string fed_s = to_string(fed);
274  string uRos_s = to_string(uRos);
275  ibooker.setCurrentFolder(topFolder(false) + "FED" + fed_s + "/uROS" + uRos_s);
276 }
277 
279  neventsuROS++;
280 
281  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
282  << "[DTDataIntegrityUrosOffline]: " << neventsuROS << " events analyzed by processuROS" << endl;
283 
284  MonitorElement* uROSSummary = nullptr;
285  uROSSummary = summaryHistos["uROSSummary"][fed];
286 
287  MonitorElement* uROSStatus = nullptr;
288  uROSStatus = fedHistos["uROSStatus"][fed];
289 
290  if (!uROSSummary) {
291  LogError("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
292  << "Trying to access non existing ME at FED " << fed << std::endl;
293  return;
294  }
295 
296  unsigned int slotMap = (data.getboardId()) & 0xF;
297  if (slotMap == 0)
298  return; //prevention for Simulation empty uROS data
299  int ros = theROS(slotMap, 0); //first sector correspondign to link 0
300  int ddu = theDDU(fed, slotMap, 0, false);
301  int wheel = (ddu - 770) % 5 - 2;
302  MonitorElement* ROSSummary = nullptr;
303  ROSSummary = summaryHistos["ROSSummary"][wheel];
304 
305  // Summary of all Link errors
306  MonitorElement* uROSError0 = nullptr;
307  MonitorElement* uROSError1 = nullptr;
308  MonitorElement* uROSError2 = nullptr;
309 
310  int errorX[5][12] = {{0}}; //5th is notOK flag
311 
312  if (uRos > 2) { //sectors 1-12
313 
314  uROSError0 = urosHistos[(uROSError)*1000 + (wheel + 2) * 100 + (ros - 1)]; //links 0-23
315  uROSError1 = urosHistos[(uROSError)*1000 + (wheel + 2) * 100 + (ros)]; //links 24-47
316  uROSError2 = urosHistos[(uROSError)*1000 + (wheel + 2) * 100 + (ros + 1)]; //links 48-71
317 
318  if ((!uROSError2) || (!uROSError1) || (!uROSError0)) {
319  LogError("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
320  << "Trying to access non existing ME at uROS " << uRos << std::endl;
321  return;
322  }
323 
324  // uROS errors
325  for (unsigned int link = 0; link < 72; ++link) {
326  for (unsigned int flag = 0; flag < 5; ++flag) {
327  if ((data.getokxflag(link) >> flag) & 0x1) { // Undefined Flag 1-4 64bits word for each MTP (12 channels)
328  int value = flag;
329  if (flag == 0)
330  value = 5; //move it to the 5th bin
331 
332  if (value > 0) {
333  if (link < 24) {
334  errorX[value - 1][ros - 1] += 1;
335  uROSError0->Fill(value - 1, link); //bins start at 0 despite labelin
336  } else if (link < 48) {
337  errorX[value - 1][ros] += 1;
338  uROSError1->Fill(value - 1, link - 23);
339  } else if (link < 72) {
340  errorX[value - 1][ros + 1] += 1;
341  uROSError2->Fill(value - 1, link - 47);
342  }
343  } //value>0
344  } //flag value
345  } //loop on flags
346  } //loop on links
347  } //uROS>2
348 
349  else { //uRos<3
350 
351  for (unsigned int link = 0; link < 12; ++link) {
352  for (unsigned int flag = 0; flag < 5; ++flag) {
353  if ((data.getokxflag(link) >> flag) & 0x1) { // Undefined Flag 1-4 64bits word for each MTP (12 channels)
354  int value = flag;
355  int sc = 24;
356  if (flag == 0)
357  value = 5; //move it to the 5th bin
358 
359  if (value > 0) {
360  unsigned int keyHisto = (uROSError)*1000 + (wheel + 2) * 100 + link; //ros -1 = link in this case
361  uROSError0 = urosHistos[keyHisto];
362  if (!uROSError0) {
363  LogError("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
364  << "Trying to access non existing ME at uROS " << uRos << std::endl;
365  return;
366  }
367  errorX[value - 1][link] += 1; // ros-1=link in this case
368  uROSError0->Fill(value - 1, sc); //bins start at 0 despite labeling, this is the old SC
369  }
370  } //flag values
371  } //loop on flags
372  } //loop on links
373  } //else uRos<3
374 
375  // Fill the ROSSummary (1 per wheel) histo
376  for (unsigned int iros = 0; iros < 12; ++iros) {
377  for (unsigned int bin = 0; bin < 5; ++bin) {
378  if (errorX[bin][iros] != 0)
379  ROSSummary->Fill(bin, iros + 1); //bins start at 1
380  }
381  }
382 
383  // Global Errors for uROS
384  for (unsigned int flag = 4; flag < 16; ++flag) {
385  if ((data.getuserWord() >> flag) & 0x1) {
386  uROSSummary->Fill(flag - 4, uRos);
387  uROSStatus->Fill(flag - 4, uRos); //duplicated info?
388  }
389  }
390 
391  // ROS error
392  for (unsigned int icounter = 0; icounter < data.geterrors().size(); ++icounter) {
393  int link = data.geterrorROBID(icounter);
394  int error = data.geterror(icounter);
395  int tdcError_ROSSummary = 0;
396  int tdcError_ROSError = 0;
397 
398  if (error & 0x4000) {
399  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
400  << " ROS " << uRos << " ROB " << link << " Internal fatal Error 4000 in TDC " << error << endl;
401 
402  tdcError_ROSSummary = 5;
403  tdcError_ROSError = 5;
404 
405  } else if (error & 0x0249) {
406  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
407  << " ROS " << uRos << " ROB " << link << " TDC FIFO overflow in TDC " << error << endl;
408 
409  tdcError_ROSSummary = 6;
410  tdcError_ROSError = 6;
411 
412  } else if (error & 0x0492) {
413  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
414  << " ROS " << uRos << " ROB " << link << " TDC L1 buffer overflow in TDC " << error << endl;
415 
416  tdcError_ROSSummary = 7;
417  tdcError_ROSError = 7;
418 
419  } else if (error & 0x2000) {
420  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
421  << " ROS " << uRos << " ROB " << link << " TDC L1A FIFO overflow in TDC " << error << endl;
422 
423  tdcError_ROSSummary = 8;
424  tdcError_ROSError = 8;
425 
426  } else if (error & 0x0924) {
427  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
428  << " uROS " << uRos << " ROB " << link << " TDC hit error in TDC " << error << endl;
429 
430  tdcError_ROSSummary = 9;
431  tdcError_ROSError = 9;
432 
433  } else if (error & 0x1000) {
434  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
435  << " uROS " << uRos << " ROB " << link << " TDC hit rejected in TDC " << error << endl;
436 
437  tdcError_ROSSummary = 10;
438  tdcError_ROSError = 10;
439 
440  } else {
441  LogWarning("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
442  << " TDC error code not known " << error << endl;
443  }
444 
445  if (uRos < 3) {
446  ROSSummary->Fill(tdcError_ROSSummary, link + 1); //link 0 = ROS 1
447  int sc = 24;
448  urosHistos[(uROSError)*1000 + (wheel + 2) * 100 + (link)]->Fill(tdcError_ROSError, sc);
449  } //uRos<3
450  else { //uRos>2
451  if (link < 24) {
452  ROSSummary->Fill(tdcError_ROSSummary, ros);
453  uROSError0->Fill(tdcError_ROSError, link);
454  } else if (link < 48) {
455  ROSSummary->Fill(tdcError_ROSSummary, ros + 1);
456  uROSError1->Fill(tdcError_ROSError, link - 23);
457  } else if (link < 72) {
458  ROSSummary->Fill(tdcError_ROSSummary, ros + 2);
459  uROSError2->Fill(tdcError_ROSError, link - 47);
460  }
461  } //uROS>2
462  } //loop on errors
463 }
464 
466  neventsFED++;
467  if (neventsFED % 1000 == 0)
468  LogTrace("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
469  << "[DTDataIntegrityUrosOffline]: " << neventsFED << " events analyzed by processFED" << endl;
470 
471  if (fed < FEDIDmin || fed > FEDIDmax)
472  return;
473 
474  hFEDEntry->Fill(fed);
475 
476  //1D HISTOS: EVENT LENGHT from trailer
477  int fedEvtLength = data.getevtlgth() * 8; //1 word = 8 bytes
478  // if(fedEvtLength > 16000) fedEvtLength = 16000; // overflow bin
479  fedHistos["EventLength"][fed]->Fill(fedEvtLength);
480 }
481 
483  string folder = "DT/00-DataIntegrity/";
484 
485  return folder;
486 }
487 
489  nevents++;
491 
492  LogTrace("DTRawToDigi|TDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
493  << "[DTDataIntegrityUrosOffline]: preProcessEvent" << endl;
494 
495  // Digi collection
497  e.getByToken(fedToken, fedCol);
498  DTuROSFEDData fedData;
499  DTuROSROSData urosData;
500 
501  if (fedCol.isValid()) {
502  for (unsigned int j = 0; j < fedCol->size(); ++j) {
503  fedData = fedCol->at(j);
504  int fed = fedData.getfed(); //argument should be void
505  if (fed > FEDIDmax || fed < FEDIDmin) {
506  LogError("DTRawToDigi|DTDQM|DTMonitorModule|DTDataIntegrityUrosOffline")
507  << "[DTDataIntegrityUrosOffline]: analyze, FED ID " << fed << " not expected." << endl;
508  continue;
509  }
510  processFED(fedData, fed);
511 
512  for (int slot = 1; slot <= DOCESLOTS; ++slot) {
513  urosData = fedData.getuROS(slot);
514  if (fedData.getslotsize(slot) == 0 || urosData.getslot() == -1)
515  continue;
516  processuROS(urosData, fed, slot);
517  }
518  }
519  }
520 }
521 
522 // Conversions
523 int DTDataIntegrityUrosOffline::theDDU(int crate, int slot, int link, bool tenDDU) {
524  int ros = theROS(slot, link);
525 
526  int ddu = 772;
527  //if (crate == 1368) { ddu = 775; }
528  //Needed just in case this FED should be used due to fibers length
529 
530  if (crate == FEDNumbering::MINDTUROSFEDID) {
531  if (slot < 7)
532  ddu = 770;
533  else
534  ddu = 771;
535  }
536 
537  if (crate == (FEDNumbering::MINDTUROSFEDID + 1)) {
538  ddu = 772;
539  }
540 
541  if (crate == FEDNumbering::MAXDTUROSFEDID) {
542  if (slot < 7)
543  ddu = 773;
544  else
545  ddu = 774;
546  }
547 
548  if (ros > 6 && tenDDU && ddu < 775)
549  ddu += 5;
550 
551  return ddu;
552 }
553 
555  if (slot % 6 == 5)
556  return link + 1;
557 
558  int ros = (link / 24) + 3 * (slot % 6) - 2;
559  return ros;
560 }
561 
562 // Local Variables:
563 // show-trailing-whitespace: t
564 // truncate-lines: t
565 // End:
cmsHarvester.nevents
nevents
Definition: cmsHarvester.py:3176
DTuROSFEDData::getslotsize
int getslotsize(int slot) const
Definition: DTuROSControlData.h:142
FEDNumbering.h
dqm::impl::MonitorElement
Definition: MonitorElement.h:98
DTDataIntegrityUrosOffline::FEDIDmax
int FEDIDmax
Definition: DTDataIntegrityUrosOffline.h:83
DTDataIntegrityUrosOffline::bookHistos
void bookHistos(DQMStore::IBooker &, const int fedMin, const int fedMax)
Definition: DTDataIntegrityUrosOffline.cc:94
MessageLogger.h
dqm::implementation::IBooker::bookFloat
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
DTuROSROSData::getslot
int getslot() const
Definition: DTuROSControlData.h:51
MainPageGenerator.link
link
Definition: MainPageGenerator.py:271
edm::Run
Definition: Run.h:45
printsummarytable.folder
folder
Definition: printsummarytable.py:7
edm
HLT enums.
Definition: AlignableModifier.h:19
DTDataIntegrityUrosOffline::topFolder
std::string topFolder(bool isFEDIntegrity) const
Definition: DTDataIntegrityUrosOffline.cc:482
DTDataIntegrityUrosOffline::~DTDataIntegrityUrosOffline
~DTDataIntegrityUrosOffline() override
Definition: DTDataIntegrityUrosOffline.cc:41
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
timingPdfMaker.histo
histo
Definition: timingPdfMaker.py:278
DQMStore.h
dqm::legacy::MonitorElement
Definition: MonitorElement.h:462
DTDataIntegrityUrosOffline::DTDataIntegrityUrosOffline
DTDataIntegrityUrosOffline(const edm::ParameterSet &ps)
Definition: DTDataIntegrityUrosOffline.cc:27
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::Handle
Definition: AssociativeIterator.h:50
relativeConstraints.error
error
Definition: relativeConstraints.py:53
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
DTDataIntegrityUrosOffline::processFED
void processFED(DTuROSFEDData &data, int fed)
Definition: DTDataIntegrityUrosOffline.cc:465
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
DTuROSFEDData::getfed
int getfed() const
Definition: DTuROSControlData.h:130
DTDataIntegrityUrosOffline::bookHistosROS
void bookHistosROS(DQMStore::IBooker &, const int wheel, const int ros)
Definition: DTDataIntegrityUrosOffline.cc:242
Service.h
DTDataIntegrityUrosOffline::nevents
int nevents
Definition: DTDataIntegrityUrosOffline.h:59
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
DTDataIntegrityUrosOffline::fedHistos
std::map< std::string, std::map< int, MonitorElement * > > fedHistos
Definition: DTDataIntegrityUrosOffline.h:64
DTuROSFEDData::getuROS
DTuROSROSData getuROS(int slot) const
Definition: DTuROSControlData.h:148
DTDataIntegrityUrosOffline::theROS
int theROS(int slot, int link)
Definition: DTDataIntegrityUrosOffline.cc:554
DTDataIntegrityUrosOffline::processuROS
void processuROS(DTuROSROSData &data, int fed, int uRos)
Definition: DTDataIntegrityUrosOffline.cc:278
DTDataIntegrityUrosOffline::nEventMonitor
MonitorElement * nEventMonitor
Definition: DTDataIntegrityUrosOffline.h:62
DTDataIntegrityUrosOffline::NuROS
const int NuROS
Definition: DTDataIntegrityUrosOffline.h:86
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
DTDataIntegrityUrosOffline::urosHistos
std::map< unsigned int, MonitorElement * > urosHistos
Definition: DTDataIntegrityUrosOffline.h:68
plotFactory.keyHisto
keyHisto
Definition: plotFactory.py:80
DTDataIntegrityUrosOffline::analyze
void analyze(const edm::Event &e, const edm::EventSetup &c) override
Definition: DTDataIntegrityUrosOffline.cc:488
DOCESLOTS
static const int DOCESLOTS
Definition: DTuROSControlData.h:19
DTDataIntegrityUrosOffline::neventsFED
int neventsFED
Definition: DTDataIntegrityUrosOffline.h:79
DTDataIntegrityUrosOffline::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: DTDataIntegrityUrosOffline.cc:57
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
DTuROSROSData
Definition: DTuROSControlData.h:22
FEDNumbering::MAXDTUROSFEDID
Definition: FEDNumbering.h:112
DTDataIntegrityUrosOffline::FEDIDmin
int FEDIDmin
Definition: DTDataIntegrityUrosOffline.h:82
DTuROSFEDData
Definition: DTuROSControlData.h:103
value
Definition: value.py:1
edm::EventSetup
Definition: EventSetup.h:58
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
DTDataIntegrityUrosOffline::hFEDEntry
MonitorElement * hFEDEntry
Definition: DTDataIntegrityUrosOffline.h:75
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
HcalObjRepresent::Fill
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
Definition: HcalObjRepresent.h:1053
DTDataIntegrityUrosOffline::uROSError
Definition: DTDataIntegrityUrosOffline.h:72
newFWLiteAna.bin
bin
Definition: newFWLiteAna.py:161
DTDataIntegrityUrosOffline.h
DTDataIntegrityUrosOffline::summaryHistos
std::map< std::string, std::map< int, MonitorElement * > > summaryHistos
Definition: DTDataIntegrityUrosOffline.h:66
DTDataIntegrityUrosOffline::neventsuROS
int neventsuROS
Definition: DTDataIntegrityUrosOffline.h:80
DTDataIntegrityUrosOffline::fedToken
edm::EDGetTokenT< DTuROSFEDDataCollection > fedToken
Definition: DTDataIntegrityUrosOffline.h:91
std
Definition: JetResolutionObject.h:76
DTDataIntegrityUrosOffline::fedIntegrityFolder
std::string fedIntegrityFolder
Definition: DTDataIntegrityUrosOffline.h:88
Frameworkfwd.h
dqm::implementation::IBooker::book2D
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
HltBtagPostValidation_cff.histoName
histoName
Definition: HltBtagPostValidation_cff.py:17
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Exception.h
data
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
dqm::implementation::IBooker
Definition: DQMStore.h:43
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:234
ParameterSet.h
c
auto & c
Definition: CAHitNtupletGeneratorKernelsImpl.h:56
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
DTDataIntegrityUrosOffline::theDDU
int theDDU(int crate, int slot, int link, bool tenDDU)
Definition: DTDataIntegrityUrosOffline.cc:523
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
FEDNumbering::MINDTUROSFEDID
Definition: FEDNumbering.h:111
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
RemoveAddSevLevel.flag
flag
Definition: RemoveAddSevLevel.py:117
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
DTDataIntegrityUrosOffline::bookHistosuROS
void bookHistosuROS(DQMStore::IBooker &, const int fed, const int uRos)
Definition: DTDataIntegrityUrosOffline.cc:272