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();
290  module = PixelEndcapName(DetId(id_), pTT, isUpgrade).plaquetteName();
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) {
384  PixelBarrelName::Shell DBshell = PixelBarrelName(DetId(id_), pTT, isUpgrade).shell();
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++;
625  meZeroOccRocsDisk_->Fill(localX, localY);
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++;
643  meZeroOccRocsLay_->Fill(localX, localY);
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 }
int plaquetteName() const
plaquetteId (in pannel)
type
Definition: HCALResponse.h:21
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getParameter(std::string const &) const
MonitorElement * meNDigisRing_
MonitorElement * mePixDigisLad_py_
MonitorElement * mePixDigis_
MonitorElement * mePixDigisPhi_py_
iterator find(det_id_type id)
Definition: DetSetVector.h:264
virtual int getNbinsY() const
get # of bins in Y-axis
int moduleName() const
module id (index in z)
MonitorElement * meADCRing_
MonitorElement * meNDigis_
MonitorElement * mePixDigisRing_px_
MonitorElement * mePixDigis_py_
constexpr uint16_t localY(uint16_t py)
std::pair< int, int > getZeroLoEffROCs()
~SiPixelDigiModule()
Destructor.
MonitorElement * meADC_
MonitorElement * mePixDigisDisk_
static std::string const input
Definition: EdmProvDump.cc:48
MonitorElement * meNDigisBlade_
void Fill(long long x)
virtual void Reset()
reset ME (ie. contents, errors, etc)
int bladeName() const
blade id
MonitorElement * meADCDisk_
MonitorElement * mePixDigisPhi_px_
bool isHalfModule() const
full or half module
virtual int getNbinsX() const
get # of bins in X-axis
MonitorElement * mePixDigisRing_py_
MonitorElement * mePixRocsDisk_
MonitorElement * mePixRocsLay_
MonitorElement * meZeroOccRocsLay_
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
virtual double getEntries() const
get # of entries
MonitorElement * mePixDigisLay_py_
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
MonitorElement * meADCLad_
MonitorElement * meADCBlade_
MonitorElement * meNDigisLay_
SiPixelDigiModule()
Default constructor.
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
MonitorElement * mePixDigisLad_
virtual double getBinContent(int binx) const
get content of bin (1-D)
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
MonitorElement * meADCLay_
std::string setHistoId(std::string variable, uint32_t &rawId)
Set Histogram Id.
Definition: DetId.h:17
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.
int ladderName() const
ladder id (index in phi)
MonitorElement * mePixDigis_px_
constexpr uint16_t localX(uint16_t px)
int layerName() const
layer id
MonitorElement * mePixDigisLad_px_
Shell shell() const
MonitorElement * mePixDigisLay_
std::string const & label() const
Definition: InputTag.h:36
MonitorElement * meNDigisPhi_
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
int pannelName() const
pannel id
T get() const
Definition: EventSetup.h:73
MonitorElement * meZeroOccRocsDisk_
col
Definition: cuy.py:1010
MonitorElement * mePixDigisRing_
MonitorElement * meADCPhi_
int diskName() const
disk id
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
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.
MonitorElement * mePixDigisPhi_
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
MonitorElement * meNDigisDisk_
T const * product() const
Definition: ESHandle.h:86
Definition: vlib.h:198
MonitorElement * meNDigisLad_
MonitorElement * mePixDigisLay_px_
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)