CMS 3D CMS Logo

SiPixelDigiModule.cc
Go to the documentation of this file.
6 // STL
7 #include <vector>
8 #include <memory>
9 #include <string>
10 #include <iostream>
11 #include <cstdlib>
12 #include <sstream>
13 #include <cstdio>
14 
15 // Data Formats
24 
25 //
26 // Constructors
27 //
28 SiPixelDigiModule::SiPixelDigiModule() : id_(0), ncols_(416), nrows_(160) {}
30 SiPixelDigiModule::SiPixelDigiModule(const uint32_t& id) : id_(id), ncols_(416), nrows_(160) {}
32 SiPixelDigiModule::SiPixelDigiModule(const uint32_t& id, const int& ncols, const int& nrows)
33  : id_(id), ncols_(ncols), nrows_(nrows) {}
34 //
35 // Destructor
36 //
38 //
39 // Book histograms
40 //
42  const edm::EventSetup& iSetup,
43  DQMStore::IBooker& iBooker,
44  int type,
45  bool twoD,
46  bool hiRes,
47  bool reducedSet,
48  bool additInfo,
49  bool isUpgrade) {
50  //isUpgrade = iConfig.getUntrackedParameter<bool>("isUpgrade");
52  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
53  const TrackerTopology* pTT = tTopoHandle.product();
54 
55  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
56  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
57  bool isHalfModule = false;
58  if (barrel) {
59  isHalfModule = PixelBarrelName(DetId(id_), pTT, isUpgrade).isHalfModule();
60  }
61 
62  std::string hid;
63  // Get collection name and instantiate Histo Id builder
64  edm::InputTag src = iConfig.getParameter<edm::InputTag>("src");
65 
66  int nbinx = ncols_ / 2, nbiny = nrows_ / 2;
67  std::string twodtitle = "Number of Digis (1bin=four pixels)";
68  std::string pxtitle = "Number of Digis (1bin=two columns)";
69  std::string pytitle = "Number of Digis (1bin=two rows)";
70  std::string twodroctitle = "ROC Occupancy (1bin=one ROC)";
71  std::string twodzeroOccroctitle = "Zero Occupancy ROC Map (1bin=one ROC) for ";
72  if (hiRes) {
73  nbinx = ncols_;
74  nbiny = nrows_;
75  twodtitle = "Number of Digis (1bin=one pixel)";
76  pxtitle = "Number of Digis (1bin=one column)";
77  pytitle = "Number of Digis (1bin=one row)";
78  }
79  if (type == 0) {
80  SiPixelHistogramId* theHistogramId = new SiPixelHistogramId(src.label());
81  // Number of digis
82  hid = theHistogramId->setHistoId("ndigis", id_);
83  meNDigis_ = iBooker.book1D(hid, "Number of Digis", 25, 0., 25.);
84  meNDigis_->setAxisTitle("Number of digis", 1);
85  // Charge in ADC counts
86  hid = theHistogramId->setHistoId("adc", id_);
87  meADC_ = iBooker.book1D(hid, "Digi charge", 128, 0., 256.);
88  meADC_->setAxisTitle("ADC counts", 1);
89  if (!reducedSet) {
90  if (twoD) {
91  if (additInfo) {
92  // 2D hit map
93  hid = theHistogramId->setHistoId("hitmap", id_);
94  mePixDigis_ = iBooker.book2D(hid, twodtitle, nbinx, 0., float(ncols_), nbiny, 0., float(nrows_));
95  mePixDigis_->setAxisTitle("Columns", 1);
96  mePixDigis_->setAxisTitle("Rows", 2);
97  //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
98  }
99  } else {
100  // projections of 2D hit map
101  hid = theHistogramId->setHistoId("hitmap", id_);
102  mePixDigis_px_ = iBooker.book1D(hid + "_px", pxtitle, nbinx, 0., float(ncols_));
103  mePixDigis_py_ = iBooker.book1D(hid + "_py", pytitle, nbiny, 0., float(nrows_));
104  mePixDigis_px_->setAxisTitle("Columns", 1);
105  mePixDigis_py_->setAxisTitle("Rows", 1);
106  }
107  }
108  delete theHistogramId;
109  }
110 
111  if (type == 1 && barrel) {
112  uint32_t DBladder;
113  DBladder = PixelBarrelName(DetId(id_), pTT, isUpgrade).ladderName();
114  char sladder[80];
115  sprintf(sladder, "Ladder_%02i", DBladder);
116  hid = src.label() + "_" + sladder;
117  if (isHalfModule)
118  hid += "H";
119  else
120  hid += "F";
121  // Number of digis
122  meNDigisLad_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
123  meNDigisLad_->setAxisTitle("Number of digis", 1);
124  // Charge in ADC counts
125  meADCLad_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
126  meADCLad_->setAxisTitle("ADC counts", 1);
127  if (!reducedSet) {
128  if (twoD) {
129  // 2D hit map
130  mePixDigisLad_ = iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), nbiny, 0., float(nrows_));
131  mePixDigisLad_->setAxisTitle("Columns", 1);
132  mePixDigisLad_->setAxisTitle("Rows", 2);
133  //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
134  } else {
135  // projections of 2D hit map
136  mePixDigisLad_px_ = iBooker.book1D("hitmap_" + hid + "_px", pxtitle, nbinx, 0., float(ncols_));
137  mePixDigisLad_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, nbiny, 0., float(nrows_));
138  mePixDigisLad_px_->setAxisTitle("Columns", 1);
139  mePixDigisLad_py_->setAxisTitle("Rows", 1);
140  }
141  }
142  }
143  if (type == 2 && barrel) {
144  uint32_t DBlayer;
145  DBlayer = PixelBarrelName(DetId(id_), pTT, isUpgrade).layerName();
146  char slayer[80];
147  sprintf(slayer, "Layer_%i", DBlayer);
148  hid = src.label() + "_" + slayer;
149  if (!additInfo) {
150  // Number of digis
151  meNDigisLay_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
152  meNDigisLay_->setAxisTitle("Number of digis", 1);
153  // Charge in ADC counts
154  meADCLay_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
155  meADCLay_->setAxisTitle("ADC counts", 1);
156  }
157  if (!reducedSet) {
158  if (twoD || additInfo) {
159  // 2D hit map
160  if (isHalfModule) {
162  iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), 2 * nbiny, 0., float(2 * nrows_));
163  } else {
165  iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), nbiny, 0., float(nrows_));
166  }
167  mePixDigisLay_->setAxisTitle("Columns", 1);
168  mePixDigisLay_->setAxisTitle("Rows", 2);
169 
170  //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
171  int yROCbins[3] = {18, 30, 42};
172  mePixRocsLay_ = iBooker.book2D("rocmap_" + hid,
173  twodroctitle,
174  32,
175  0.,
176  32.,
177  yROCbins[DBlayer - 1],
178  1.5,
179  1.5 + float(yROCbins[DBlayer - 1] / 2));
180  mePixRocsLay_->setAxisTitle("ROCs per Module", 1);
181  mePixRocsLay_->setAxisTitle("ROCs per 1/2 Ladder", 2);
182  meZeroOccRocsLay_ = iBooker.book2D("zeroOccROC_map",
183  twodzeroOccroctitle + hid,
184  32,
185  0.,
186  32.,
187  yROCbins[DBlayer - 1],
188  1.5,
189  1.5 + float(yROCbins[DBlayer - 1] / 2));
190  meZeroOccRocsLay_->setAxisTitle("ROCs per Module", 1);
191  meZeroOccRocsLay_->setAxisTitle("ROCs per 1/2 Ladder", 2);
192  }
193  if (!twoD && !additInfo) {
194  // projections of 2D hit map
195  mePixDigisLay_px_ = iBooker.book1D("hitmap_" + hid + "_px", pxtitle, nbinx, 0., float(ncols_));
196  if (isHalfModule) {
197  mePixDigisLay_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, 2 * nbiny, 0., float(2 * nrows_));
198  } else {
199  mePixDigisLay_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, nbiny, 0., float(nrows_));
200  }
201  mePixDigisLay_px_->setAxisTitle("Columns", 1);
202  mePixDigisLay_py_->setAxisTitle("Rows", 1);
203  }
204  }
205  }
206  if (type == 3 && barrel) {
207  uint32_t DBmodule;
208  DBmodule = PixelBarrelName(DetId(id_), pTT, isUpgrade).moduleName();
209  char smodule[80];
210  sprintf(smodule, "Ring_%i", DBmodule);
211  hid = src.label() + "_" + smodule;
212  // Number of digis
213  meNDigisPhi_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
214  meNDigisPhi_->setAxisTitle("Number of digis", 1);
215  // Charge in ADC counts
216  meADCPhi_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
217  meADCPhi_->setAxisTitle("ADC counts", 1);
218  if (!reducedSet) {
219  if (twoD) {
220  // 2D hit map
221  if (isHalfModule) {
223  iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), 2 * nbiny, 0., float(2 * nrows_));
224  } else {
226  iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), nbiny, 0., float(nrows_));
227  }
228  mePixDigisPhi_->setAxisTitle("Columns", 1);
229  mePixDigisPhi_->setAxisTitle("Rows", 2);
230  //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
231  } else {
232  // projections of 2D hit map
233  mePixDigisPhi_px_ = iBooker.book1D("hitmap_" + hid + "_px", pxtitle, nbinx, 0., float(ncols_));
234  if (isHalfModule) {
235  mePixDigisPhi_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, 2 * nbiny, 0., float(2 * nrows_));
236  } else {
237  mePixDigisPhi_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, nbiny, 0., float(nrows_));
238  }
239  mePixDigisPhi_px_->setAxisTitle("Columns", 1);
240  mePixDigisPhi_py_->setAxisTitle("Rows", 1);
241  }
242  }
243  }
244  if (type == 4 && endcap) {
245  uint32_t blade;
246  blade = PixelEndcapName(DetId(id_), pTT, isUpgrade).bladeName();
247 
248  char sblade[80];
249  sprintf(sblade, "Blade_%02i", blade);
250  hid = src.label() + "_" + sblade;
251  // Number of digis
252  meNDigisBlade_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
253  meNDigisBlade_->setAxisTitle("Number of digis", 1);
254  // Charge in ADC counts
255  meADCBlade_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
256  meADCBlade_->setAxisTitle("ADC counts", 1);
257  }
258  if (type == 5 && endcap) {
259  uint32_t disk;
260  disk = PixelEndcapName(DetId(id_), pTT, isUpgrade).diskName();
261 
262  char sdisk[80];
263  sprintf(sdisk, "Disk_%i", disk);
264  hid = src.label() + "_" + sdisk;
265  if (!additInfo) {
266  // Number of digis
267  meNDigisDisk_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
268  meNDigisDisk_->setAxisTitle("Number of digis", 1);
269  // Charge in ADC counts
270  meADCDisk_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
271  meADCDisk_->setAxisTitle("ADC counts", 1);
272  }
273  if (additInfo) {
274  mePixDigisDisk_ = iBooker.book2D("hitmap_" + hid, twodtitle, 260, 0., 260., 160, 0., 160.);
275  mePixDigisDisk_->setAxisTitle("Columns", 1);
276  mePixDigisDisk_->setAxisTitle("Rows", 2);
277  //ROC information in disks
278  mePixRocsDisk_ = iBooker.book2D("rocmap_" + hid, twodroctitle, 26, 0., 26., 24, 1., 13.);
279  mePixRocsDisk_->setAxisTitle("ROCs per Module (2 Panels)", 1);
280  mePixRocsDisk_->setAxisTitle("Blade Number", 2);
281  meZeroOccRocsDisk_ = iBooker.book2D("zeroOccROC_map", twodzeroOccroctitle + hid, 26, 0., 26., 24, 1., 13.);
282  meZeroOccRocsDisk_->setAxisTitle("Zero-Occupancy ROCs per Module (2 Panels)", 1);
283  meZeroOccRocsDisk_->setAxisTitle("Blade Number", 2);
284  }
285  }
286  if (type == 6 && endcap) {
287  uint32_t panel;
288  uint32_t module;
289  panel = PixelEndcapName(DetId(id_), pTT, isUpgrade).pannelName();
291 
292  char slab[80];
293  sprintf(slab, "Panel_%i_Ring_%i", panel, module);
294  hid = src.label() + "_" + slab;
295  // Number of digis
296  meNDigisRing_ = iBooker.book1D("ndigis_" + hid, "Number of Digis", 25, 0., 25.);
297  meNDigisRing_->setAxisTitle("Number of digis", 1);
298  // Charge in ADC counts
299  meADCRing_ = iBooker.book1D("adc_" + hid, "Digi charge", 128, 0., 256.);
300  meADCRing_->setAxisTitle("ADC counts", 1);
301  if (!reducedSet) {
302  if (twoD) {
303  // 2D hit map
305  iBooker.book2D("hitmap_" + hid, twodtitle, nbinx, 0., float(ncols_), nbiny, 0., float(nrows_));
306  mePixDigisRing_->setAxisTitle("Columns", 1);
307  mePixDigisRing_->setAxisTitle("Rows", 2);
308  //std::cout << "During booking: type is "<< type << ", ID is "<< id_ << ", pwd for booking is " << theDMBE->pwd() << ", Plot name: " << hid << std::endl;
309  } else {
310  // projections of 2D hit map
311  mePixDigisRing_px_ = iBooker.book1D("hitmap_" + hid + "_px", pxtitle, nbinx, 0., float(ncols_));
312  mePixDigisRing_py_ = iBooker.book1D("hitmap_" + hid + "_py", pytitle, nbiny, 0., float(nrows_));
313  mePixDigisRing_px_->setAxisTitle("Columns", 1);
314  mePixDigisRing_py_->setAxisTitle("Rows", 1);
315  }
316  }
317  }
318 }
319 
320 //
321 // Fill histograms
322 //
324  const edm::EventSetup& iSetup,
325  MonitorElement* combBarrel,
326  MonitorElement* chanBarrel,
327  std::vector<MonitorElement*>& chanBarrelL,
328  MonitorElement* combEndcap,
329  bool modon,
330  bool ladon,
331  bool layon,
332  bool phion,
333  bool bladeon,
334  bool diskon,
335  bool ringon,
336  bool twoD,
337  bool reducedSet,
338  bool twoDimModOn,
339  bool twoDimOnlyLayDisk,
340  int& nDigisA,
341  int& nDigisB,
342  bool isUpgrade) {
343  edm::ESHandle<TrackerTopology> tTopoHandle;
344  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
345  const TrackerTopology* pTT = tTopoHandle.product();
346 
347  bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
348  bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
349  bool isHalfModule = false;
350  uint32_t DBladder = 0;
351  if (barrel) {
352  isHalfModule = PixelBarrelName(DetId(id_), pTT, isUpgrade).isHalfModule();
353  DBladder = PixelBarrelName(DetId(id_), pTT, isUpgrade).ladderName();
354  }
355 
356  edm::DetSetVector<PixelDigi>::const_iterator isearch = input.find(id_); // search digis of detid
357 
358  unsigned int numberOfDigisMod = 0;
359  int msize;
360  if (isUpgrade) {
361  msize = 10;
362  } else {
363  msize = 8;
364  }
365  int numberOfDigis[msize];
366  for (int i = 0; i != msize; i++)
367  numberOfDigis[i] = 0;
368  nDigisA = 0;
369  nDigisB = 0;
370  if (isearch != input.end()) { // Not an empty iterator
371 
372  // Look at digis now
374  for (di = isearch->data.begin(); di != isearch->data.end(); di++) {
375  int adc = di->adc(); // charge
376  int col = di->column(); // column
377  int row = di->row(); // row
378  numberOfDigisMod++;
379 
380  int DBlayer = 0;
381  int DBmodule = 0;
382 
383  if (!isUpgrade) {
385  DBlayer = PixelBarrelName(DetId(id_), pTT, isUpgrade).layerName();
386  DBmodule = PixelBarrelName(DetId(id_), pTT, isUpgrade).moduleName();
387  if (barrel) {
388  if (isHalfModule) {
389  if (DBshell == PixelBarrelName::pI || DBshell == PixelBarrelName::pO) {
390  numberOfDigis[0]++;
391  nDigisA++;
392  if (DBlayer == 1)
393  numberOfDigis[2]++;
394  if (DBlayer == 2)
395  numberOfDigis[3]++;
396  if (DBlayer == 3)
397  numberOfDigis[4]++;
398  }
399  if (DBshell == PixelBarrelName::mI || DBshell == PixelBarrelName::mO) {
400  numberOfDigis[1]++;
401  nDigisB++;
402  if (DBlayer == 1)
403  numberOfDigis[5]++;
404  if (DBlayer == 2)
405  numberOfDigis[6]++;
406  if (DBlayer == 3)
407  numberOfDigis[7]++;
408  }
409  } else {
410  if (row < 80) {
411  numberOfDigis[0]++;
412  nDigisA++;
413  if (DBlayer == 1)
414  numberOfDigis[2]++;
415  if (DBlayer == 2)
416  numberOfDigis[3]++;
417  if (DBlayer == 3)
418  numberOfDigis[4]++;
419  } else {
420  numberOfDigis[1]++;
421  nDigisB++;
422  if (DBlayer == 1)
423  numberOfDigis[5]++;
424  if (DBlayer == 2)
425  numberOfDigis[6]++;
426  if (DBlayer == 3)
427  numberOfDigis[7]++;
428  }
429  }
430  }
431  } else if (isUpgrade) {
432  DBlayer = PixelBarrelName(DetId(id_), pTT, isUpgrade).layerName();
433  DBmodule = PixelBarrelName(DetId(id_), pTT, isUpgrade).moduleName();
434  if (barrel) {
435  if (row < 80) {
436  numberOfDigis[0]++;
437  nDigisA++;
438  if (DBlayer == 1)
439  numberOfDigis[2]++;
440  if (DBlayer == 2)
441  numberOfDigis[3]++;
442  if (DBlayer == 3)
443  numberOfDigis[4]++;
444  if (DBlayer == 4)
445  numberOfDigis[5]++;
446  } else {
447  numberOfDigis[1]++;
448  nDigisB++;
449  if (DBlayer == 1)
450  numberOfDigis[6]++;
451  if (DBlayer == 2)
452  numberOfDigis[7]++;
453  if (DBlayer == 3)
454  numberOfDigis[8]++;
455  if (DBlayer == 4)
456  numberOfDigis[9]++;
457  }
458  }
459  }
460 
461  if (modon) {
462  if (!reducedSet) {
463  if (twoD) {
464  if (twoDimModOn)
465  (mePixDigis_)->Fill((float)col, (float)row);
466  } else {
467  (mePixDigis_px_)->Fill((float)col);
468  (mePixDigis_py_)->Fill((float)row);
469  }
470  }
471  (meADC_)->Fill((float)adc);
472  }
473  if (ladon && barrel) {
474  (meADCLad_)->Fill((float)adc);
475  if (!reducedSet) {
476  if (twoD)
477  (mePixDigisLad_)->Fill((float)col, (float)row);
478  else {
479  (mePixDigisLad_px_)->Fill((float)col);
480  (mePixDigisLad_py_)->Fill((float)row);
481  }
482  }
483  }
484  if ((layon || twoDimOnlyLayDisk) && barrel) {
485  if (!twoDimOnlyLayDisk)
486  (meADCLay_)->Fill((float)adc);
487  if (!reducedSet) {
488  if ((layon && twoD) || twoDimOnlyLayDisk) {
489  //ROC histos...
490  float rocx = (float)col / 52. + 8.0 * float(DBmodule - 1);
491  float rocy = (float)row / 160. + float(DBladder);
492  //Shift 1st ladder (half modules) up by 1 bin
493  if (DBladder == 1)
494  rocy = rocy + 0.5;
495  mePixRocsLay_->Fill(rocx, rocy);
496 
497  if (isHalfModule && DBladder == 1) {
498  (mePixDigisLay_)->Fill((float)col, (float)row + 80);
499  } else
500  (mePixDigisLay_)->Fill((float)col, (float)row);
501  }
502  if ((layon && !twoD) && !twoDimOnlyLayDisk) {
503  (mePixDigisLay_px_)->Fill((float)col);
504  if (isHalfModule && DBladder == 1) {
505  (mePixDigisLay_py_)->Fill((float)row + 80);
506  } else
507  (mePixDigisLay_py_)->Fill((float)row);
508  }
509  }
510  }
511  if (phion && barrel) {
512  (meADCPhi_)->Fill((float)adc);
513  if (!reducedSet) {
514  if (twoD) {
515  if (isHalfModule && DBladder == 1) {
516  (mePixDigisPhi_)->Fill((float)col, (float)row + 80);
517  } else
518  (mePixDigisPhi_)->Fill((float)col, (float)row);
519  } else {
520  (mePixDigisPhi_px_)->Fill((float)col);
521  if (isHalfModule && DBladder == 1) {
522  (mePixDigisPhi_py_)->Fill((float)row + 80);
523  } else
524  (mePixDigisPhi_py_)->Fill((float)row);
525  }
526  }
527  }
528  if (bladeon && endcap) {
529  (meADCBlade_)->Fill((float)adc);
530  }
531 
532  if ((diskon || twoDimOnlyLayDisk) && endcap) {
533  if (!twoDimOnlyLayDisk)
534  (meADCDisk_)->Fill((float)adc);
535  if (twoDimOnlyLayDisk) {
536  (mePixDigisDisk_)->Fill((float)col, (float)row);
537  //ROC monitoring
538  int DBpanel;
539  int DBblade;
540  DBpanel = PixelEndcapName(DetId(id_), pTT, isUpgrade).pannelName();
541  DBblade = PixelEndcapName(DetId(id_), pTT, isUpgrade).bladeName();
542  float offx = 0.;
543  //This crazy offset takes into account the roc and module fpix configuration
544  for (int i = DBpanel; i < DBmodule; ++i) {
545  offx = offx + float(5 + DBpanel - i);
546  }
547  float rocx = (float)col / 52. + offx + 14.0 * float(DBpanel - 1);
548  float rocy = (float)row / 160. + float(DBblade);
549  mePixRocsDisk_->Fill(rocx, rocy);
550  }
551  }
552  if (ringon && endcap) {
553  (meADCRing_)->Fill((float)adc);
554  if (!reducedSet) {
555  if (twoD)
556  (mePixDigisRing_)->Fill((float)col, (float)row);
557  else {
558  (mePixDigisRing_px_)->Fill((float)col);
559  (mePixDigisRing_py_)->Fill((float)row);
560  }
561  }
562  }
563  }
564  if (modon)
565  (meNDigis_)->Fill((float)numberOfDigisMod);
566  if (ladon && barrel)
567  (meNDigisLad_)->Fill((float)numberOfDigisMod);
568  if (layon && barrel && !twoDimOnlyLayDisk)
569  (meNDigisLay_)->Fill((float)numberOfDigisMod);
570  if (phion && barrel)
571  (meNDigisPhi_)->Fill((float)numberOfDigisMod);
572  if (bladeon && endcap)
573  (meNDigisBlade_)->Fill((float)numberOfDigisMod);
574  if (diskon && endcap && !twoDimOnlyLayDisk)
575  (meNDigisDisk_)->Fill((float)numberOfDigisMod);
576  if (ringon && endcap)
577  (meNDigisRing_)->Fill((float)numberOfDigisMod);
578  if (barrel) {
579  if (combBarrel)
580  combBarrel->Fill((float)numberOfDigisMod);
581  if (chanBarrel) {
582  if (numberOfDigis[0] > 0)
583  chanBarrel->Fill((float)numberOfDigis[0]);
584  if (numberOfDigis[1] > 0)
585  chanBarrel->Fill((float)numberOfDigis[1]);
586  }
587  int j = 2;
588  for (std::vector<MonitorElement*>::iterator i = chanBarrelL.begin(); i != chanBarrelL.end(); i++) {
589  if (numberOfDigis[j] > 0)
590  (*i)->Fill((float)numberOfDigis[j]);
591  j++;
592  }
593  } else if (endcap) {
594  if (combEndcap)
595  combEndcap->Fill((float)numberOfDigisMod);
596  }
597  }
598 
599  //std::cout<<"numberOfDigis for this module: "<<numberOfDigis<<std::endl;
600  return numberOfDigisMod;
601 }
602 
603 // This was done in the Source file, but is moved to the Module for thread safety reasons. Using ME that is booked here.
605  if (mePixRocsDisk_)
607  if (mePixRocsLay_)
608  mePixRocsLay_->Reset();
609 }
610 
611 //Moved from source. Gets the zero and low eff ROCs from each module. Called in source for each module.
612 std::pair<int, int> SiPixelDigiModule::getZeroLoEffROCs() {
613  int nZeroROC = 0;
614  int nLoEffROC = 0;
615  float SF = 1.0;
617  if (mePixRocsDisk_->getEntries() > 0)
619  for (int i = 1; i < mePixRocsDisk_->getNbinsX() + 1; ++i) {
620  for (int j = 1; j < mePixRocsDisk_->getNbinsY() + 1; ++j) {
621  float localX = float(i) - 0.5;
622  float localY = float(j) / 2.0 + 0.75;
623  if (mePixRocsDisk_->getBinContent(i, j) < 1) {
624  nZeroROC++;
626  }
627  if (mePixRocsDisk_->getBinContent(i, j) * SF < 0.25) {
628  nLoEffROC++;
629  }
630  }
631  }
632  return std::pair<int, int>(nZeroROC, nLoEffROC);
633  }
635  if (mePixRocsLay_->getEntries() > 0)
637  for (int i = 1; i < mePixRocsLay_->getNbinsX() + 1; ++i) {
638  for (int j = 1; j < mePixRocsLay_->getNbinsY() + 1; ++j) {
639  float localX = float(i) - 0.5;
640  float localY = float(j) / 2.0 + 1.25;
641  if (mePixRocsLay_->getBinContent(i, j) < 8) {
642  nZeroROC++;
644  } //in some regions of pixel there are modules with no HV but enabled ROCs that sometime give a fake hit, so the dead rocs have to be counted to have less than 8 hits in 10 LS
645  if (mePixRocsLay_->getBinContent(i, j) * SF < 0.25) {
646  nLoEffROC++;
647  }
648  }
649  }
650  return std::pair<int, int>(nZeroROC, nLoEffROC);
651  }
652  return std::pair<int, int>(0, 0);
653 }
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
edm::DetSetVector
Definition: DetSetVector.h:61
ecalMGPA::adc
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
Definition: EcalMGPASample.h:11
dqm::impl::MonitorElement
Definition: MonitorElement.h:98
SiPixelDigiModule::mePixDigisDisk_
MonitorElement * mePixDigisDisk_
Definition: SiPixelDigiModule.h:136
SiPixelDigiModule::mePixDigisLay_px_
MonitorElement * mePixDigisLay_px_
Definition: SiPixelDigiModule.h:121
hgcalPlots.ncols
ncols
Definition: hgcalPlots.py:105
mps_fire.i
i
Definition: mps_fire.py:355
PixelBarrelName::pO
Definition: PixelBarrelName.h:18
PixelSubdetector.h
input
static const std::string input
Definition: EdmProvDump.cc:48
PixelBarrelName.h
Reference_intrackfit_cff.barrel
list barrel
Definition: Reference_intrackfit_cff.py:37
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
PixelBarrelName::pI
Definition: PixelBarrelName.h:18
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
SiPixelDigiModule::resetRocMap
void resetRocMap()
Definition: SiPixelDigiModule.cc:604
phase1PixelTopology::localY
constexpr uint16_t localY(uint16_t py)
Definition: phase1PixelTopology.h:58
SiPixelDigiModule::meZeroOccRocsLay_
MonitorElement * meZeroOccRocsLay_
Definition: SiPixelDigiModule.h:120
edm::DetSetVector::end
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
SiPixelDigiModule::mePixDigisLay_
MonitorElement * mePixDigisLay_
Definition: SiPixelDigiModule.h:118
SiPixelDigiModule::nrows_
int nrows_
Definition: SiPixelDigiModule.h:102
SiPixelOfflineDQM_source_cff.reducedSet
reducedSet
Definition: SiPixelOfflineDQM_source_cff.py:8
SiPixelDigiModule::mePixDigisPhi_py_
MonitorElement * mePixDigisPhi_py_
Definition: SiPixelDigiModule.h:128
SiPixelDigiModule::meNDigisLad_
MonitorElement * meNDigisLad_
Definition: SiPixelDigiModule.h:110
TrackerTopology
Definition: TrackerTopology.h:16
SiPixelDigiModule::fill
int fill(const edm::DetSetVector< PixelDigi > &input, const edm::EventSetup &iSetup, MonitorElement *combBarrel, MonitorElement *chanBarrel, std::vector< MonitorElement * > &chanBarrelL, MonitorElement *combEndcap, const bool modon, const bool ladon, const bool layon, const bool phion, const bool bladeon, const bool diskon, const bool ringon, const bool twoD, const bool reducedSet, const bool twoDimModOn, const bool twoDimOnlyLayDisk, int &nDigisA, int &nDigisB, bool isUpgrade)
Fill histograms.
Definition: SiPixelDigiModule.cc:323
SiPixelDigiModule::meADCLad_
MonitorElement * meADCLad_
Definition: SiPixelDigiModule.h:111
cuy.col
col
Definition: cuy.py:1010
SiPixelDigiModule::meADCBlade_
MonitorElement * meADCBlade_
Definition: SiPixelDigiModule.h:132
PixelBarrelName
Definition: PixelBarrelName.h:16
SiPixelDigiModule::mePixDigisRing_py_
MonitorElement * mePixDigisRing_py_
Definition: SiPixelDigiModule.h:144
SiPixelDigiModule::meADCPhi_
MonitorElement * meADCPhi_
Definition: SiPixelDigiModule.h:125
SiPixelDigiModule::mePixDigisLad_py_
MonitorElement * mePixDigisLad_py_
Definition: SiPixelDigiModule.h:114
SiPixelDigiModule::mePixDigis_
MonitorElement * mePixDigis_
Definition: SiPixelDigiModule.h:105
edm::DetSetVector::begin
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
DQMStore.h
SiPixelHistogramId.h
SiPixelDigiModule::meNDigis_
MonitorElement * meNDigis_
Definition: SiPixelDigiModule.h:103
PixelBarrelName::mI
Definition: PixelBarrelName.h:18
SiPixelDigiModule.h
SiPixelDigiModule::meADCLay_
MonitorElement * meADCLay_
Definition: SiPixelDigiModule.h:117
makeMuonMisalignmentScenario.endcap
endcap
Definition: makeMuonMisalignmentScenario.py:320
SiPixelDigiModule::id_
uint32_t id_
Definition: SiPixelDigiModule.h:100
SiPixelDigiModule::meADCDisk_
MonitorElement * meADCDisk_
Definition: SiPixelDigiModule.h:135
PixelBarrelName::layerName
int layerName() const
layer id
Definition: PixelBarrelName.h:43
PixelEndcapName::pannelName
int pannelName() const
pannel id
Definition: PixelEndcapName.h:51
PixelBarrelName::mO
Definition: PixelBarrelName.h:18
PixelEndcapName::bladeName
int bladeName() const
blade id
Definition: PixelEndcapName.h:48
SiPixelDigiModule::book
void book(const edm::ParameterSet &iConfig, const edm::EventSetup &iSetup, DQMStore::IBooker &iBooker, int type=0, bool twoD=true, bool hiRes=false, bool reducedSet=false, bool additInfo=false, bool isUpgrade=false)
Book histograms.
Definition: SiPixelDigiModule.cc:41
DetId
Definition: DetId.h:17
TrackerTopology.h
TrackerTopologyRcd.h
PixelEndcapName
Definition: PixelEndcapName.h:16
SiPixelDigiModule::meNDigisLay_
MonitorElement * meNDigisLay_
Definition: SiPixelDigiModule.h:116
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
Service.h
SiPixelDigiModule::meNDigisPhi_
MonitorElement * meNDigisPhi_
Definition: SiPixelDigiModule.h:124
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
dqm::impl::MonitorElement::Reset
virtual void Reset()
Remove all data from the ME, keept the empty histogram with all its settings.
Definition: MonitorElement.cc:354
SiPixelHistogramId::setHistoId
std::string setHistoId(std::string variable, uint32_t &rawId)
Set Histogram Id.
Definition: SiPixelHistogramId.cc:29
edm::ESHandle< TrackerTopology >
SiPixelDigiModule::mePixDigis_px_
MonitorElement * mePixDigis_px_
Definition: SiPixelDigiModule.h:106
SiPixelDigiModule::mePixDigisRing_px_
MonitorElement * mePixDigisRing_px_
Definition: SiPixelDigiModule.h:143
SiPixelDigiModule::mePixDigis_py_
MonitorElement * mePixDigis_py_
Definition: SiPixelDigiModule.h:107
SiPixelDigiModule::meZeroOccRocsDisk_
MonitorElement * meZeroOccRocsDisk_
Definition: SiPixelDigiModule.h:138
PixelBarrelName::ladderName
int ladderName() const
ladder id (index in phi)
Definition: PixelBarrelName.h:49
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
dqm::impl::MonitorElement::getEntries
virtual double getEntries() const
get # of entries
Definition: MonitorElement.cc:628
SiPixelDigiModule::mePixRocsDisk_
MonitorElement * mePixRocsDisk_
Definition: SiPixelDigiModule.h:137
phase1PixelTopology::localX
constexpr uint16_t localX(uint16_t px)
Definition: phase1PixelTopology.h:49
SiPixelDigiModule::mePixDigisLay_py_
MonitorElement * mePixDigisLay_py_
Definition: SiPixelDigiModule.h:122
SiPixelHistogramId
Definition: SiPixelHistogramId.h:25
edm::ParameterSet
Definition: ParameterSet.h:36
dqm::impl::MonitorElement::getNbinsY
virtual int getNbinsY() const
get # of bins in Y-axis
Definition: MonitorElement.cc:580
TrackRefitter_38T_cff.src
src
Definition: TrackRefitter_38T_cff.py:24
PixelBarrelName::shell
Shell shell() const
Definition: PixelBarrelName.h:40
edm::DetSetVector::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
SiPixelDigiModule::mePixDigisRing_
MonitorElement * mePixDigisRing_
Definition: SiPixelDigiModule.h:142
SiPixelDigiModule::mePixRocsLay_
MonitorElement * mePixRocsLay_
Definition: SiPixelDigiModule.h:119
SiPixelOfflineDQM_source_cff.hiRes
hiRes
Definition: SiPixelOfflineDQM_source_cff.py:43
edm::EventSetup
Definition: EventSetup.h:57
PixelBarrelName::Shell
Shell
Definition: PixelBarrelName.h:18
PixelBarrelName::moduleName
int moduleName() const
module id (index in z)
Definition: PixelBarrelName.h:46
module
Definition: vlib.h:198
get
#define get
SiPixelDigiModule::mePixDigisPhi_px_
MonitorElement * mePixDigisPhi_px_
Definition: SiPixelDigiModule.h:127
HcalObjRepresent::Fill
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
Definition: HcalObjRepresent.h:1053
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
SiPixelDigiModule::mePixDigisLad_
MonitorElement * mePixDigisLad_
Definition: SiPixelDigiModule.h:112
type
type
Definition: HCALResponse.h:21
PixelEndcapName::diskName
int diskName() const
disk id
Definition: PixelEndcapName.h:45
DetId.h
SiPixelDigiModule::SiPixelDigiModule
SiPixelDigiModule()
Default constructor.
Definition: SiPixelDigiModule.cc:28
SiPixelDigiModule::meADCRing_
MonitorElement * meADCRing_
Definition: SiPixelDigiModule.h:141
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
SiPixelDigiModule::meNDigisRing_
MonitorElement * meNDigisRing_
Definition: SiPixelDigiModule.h:140
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
dqm::impl::MonitorElement::getNbinsX
virtual int getNbinsX() const
get # of bins in X-axis
Definition: MonitorElement.cc:574
PixelEndcapNameUpgrade.h
dqm::implementation::IBooker
Definition: DQMStore.h:43
SiPixelDigiModule::meNDigisDisk_
MonitorElement * meNDigisDisk_
Definition: SiPixelDigiModule.h:134
SiPixelDigiModule::mePixDigisLad_px_
MonitorElement * mePixDigisLad_px_
Definition: SiPixelDigiModule.h:113
PixelEndcapName::plaquetteName
int plaquetteName() const
plaquetteId (in pannel)
Definition: PixelEndcapName.h:54
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
SiPixelDigiModule::ncols_
int ncols_
Definition: SiPixelDigiModule.h:101
SiPixelOfflineDQM_client_cff.isUpgrade
isUpgrade
Definition: SiPixelOfflineDQM_client_cff.py:19
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
SiPixelDigiModule::~SiPixelDigiModule
~SiPixelDigiModule()
Destructor.
Definition: SiPixelDigiModule.cc:37
PixelBarrelNameUpgrade.h
SiPixelDigiModule::meADC_
MonitorElement * meADC_
Definition: SiPixelDigiModule.h:104
SiPixelOfflineDQM_source_cff.twoDimModOn
twoDimModOn
Definition: SiPixelOfflineDQM_source_cff.py:44
PixelBarrelName::isHalfModule
bool isHalfModule() const
full or half module
Definition: PixelBarrelName.cc:702
dqm::impl::MonitorElement::setAxisTitle
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: MonitorElement.cc:800
dqm::impl::MonitorElement::getBinContent
virtual double getBinContent(int binx) const
get content of bin (1-D)
Definition: MonitorElement.cc:592
SiPixelDigiModule::mePixDigisPhi_
MonitorElement * mePixDigisPhi_
Definition: SiPixelDigiModule.h:126
edm::InputTag
Definition: InputTag.h:15
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
SiPixelDigiModule::getZeroLoEffROCs
std::pair< int, int > getZeroLoEffROCs()
Definition: SiPixelDigiModule.cc:612
SiPixelOfflineDQM_source_cff.twoDimOnlyLayDisk
twoDimOnlyLayDisk
Definition: SiPixelOfflineDQM_source_cff.py:45
PixelEndcapName.h
SiPixelDigiModule::meNDigisBlade_
MonitorElement * meNDigisBlade_
Definition: SiPixelDigiModule.h:131
edm::DetSet::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSet.h:31