CMS 3D CMS Logo

SiPixelClusterSource.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: SiPixelMonitorCluster
4 // Class: SiPixelClusterSource
5 //
13 //
14 // Original Author: Vincenzo Chiochia & Andrew York
15 // Created:
16 //
17 //
18 // Updated by: Lukas Wehrli
19 // for pixel offline DQM
21 // Framework
24 // DQM Framework
27 // Geometry
33 // DataFormats
41 //
42 #include <cstdlib>
43 #include <string>
44 
45 using namespace std;
46 using namespace edm;
47 
49  : conf_(iConfig),
50  src_(conf_.getParameter<edm::InputTag>("src")),
51  digisrc_(conf_.getParameter<edm::InputTag>("digisrc")),
52  saveFile(conf_.getUntrackedParameter<bool>("saveFile", false)),
53  isPIB(conf_.getUntrackedParameter<bool>("isPIB", false)),
54  slowDown(conf_.getUntrackedParameter<bool>("slowDown", false)),
55  modOn(conf_.getUntrackedParameter<bool>("modOn", true)),
56  twoDimOn(conf_.getUntrackedParameter<bool>("twoDimOn", true)),
57  reducedSet(conf_.getUntrackedParameter<bool>("reducedSet", false)),
58  ladOn(conf_.getUntrackedParameter<bool>("ladOn", false)),
59  layOn(conf_.getUntrackedParameter<bool>("layOn", false)),
60  phiOn(conf_.getUntrackedParameter<bool>("phiOn", false)),
61  ringOn(conf_.getUntrackedParameter<bool>("ringOn", false)),
62  bladeOn(conf_.getUntrackedParameter<bool>("bladeOn", false)),
63  diskOn(conf_.getUntrackedParameter<bool>("diskOn", false)),
64  smileyOn(conf_.getUntrackedParameter<bool>("smileyOn", false)),
65  bigEventSize(conf_.getUntrackedParameter<int>("bigEventSize", 100)),
66  isUpgrade(conf_.getUntrackedParameter<bool>("isUpgrade", false)),
67  noOfLayers(0),
68  noOfDisks(0) {
69  LogInfo("PixelDQM") << "SiPixelClusterSource::SiPixelClusterSource: Got DQM BackEnd interface" << endl;
70 
71  // set Token(-s)
72  srcToken_ = consumes<edmNew::DetSetVector<SiPixelCluster>>(conf_.getParameter<edm::InputTag>("src"));
73  digisrcToken_ = consumes<edm::DetSetVector<PixelDigi>>(conf_.getParameter<edm::InputTag>("digisrc"));
74  firstRun = true;
75  topFolderName_ = conf_.getParameter<std::string>("TopFolderName");
76 }
77 
79  // do anything here that needs to be done at desctruction time
80  // (e.g. close files, deallocate resources etc.)
81  LogInfo("PixelDQM") << "SiPixelClusterSource::~SiPixelClusterSource: Destructor" << endl;
82 
83  std::map<uint32_t, SiPixelClusterModule *>::iterator struct_iter;
84  for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) {
85  delete struct_iter->second;
86  struct_iter->second = nullptr;
87  }
88 }
89 
91  LogInfo("PixelDQM") << " SiPixelClusterSource::beginJob - Initialisation ... " << std::endl;
92  LogInfo("PixelDQM") << "Mod/Lad/Lay/Phi " << modOn << "/" << ladOn << "/" << layOn << "/" << phiOn << std::endl;
93  LogInfo("PixelDQM") << "Blade/Disk/Ring" << bladeOn << "/" << diskOn << "/" << ringOn << std::endl;
94  LogInfo("PixelDQM") << "2DIM IS " << twoDimOn << "\n";
95  LogInfo("PixelDQM") << "Smiley (Cluster sizeY vs. Cluster eta) is " << smileyOn << "\n";
96 
97  if (firstRun) {
98  eventNo = 0;
99  lumSec = 0;
100  nLumiSecs = 0;
101  nBigEvents = 0;
102  // Build map
103  buildStructure(iSetup);
104 
105  firstRun = false;
106  }
107 }
108 
110  bookMEs(iBooker, iSetup);
111  // Book occupancy maps in global coordinates for all clusters:
112  iBooker.setCurrentFolder(topFolderName_ + "/Clusters/OffTrack");
113  // bpix
114  std::stringstream ss1, ss2;
115  for (int i = 1; i <= noOfLayers; i++) {
116  ss1.str(std::string());
117  ss1 << "position_siPixelClusters_Layer_" << i;
118  ss2.str(std::string());
119  ss2 << "Clusters Layer" << i << ";Global Z (cm);Global #phi";
120  meClPosLayer.push_back(iBooker.book2D(ss1.str(), ss2.str(), 200, -30., 30., 128, -3.2, 3.2));
121  }
122  for (int i = 1; i <= noOfDisks; i++) {
123  ss1.str(std::string());
124  ss1 << "position_siPixelClusters_pz_Disk_" << i;
125  ss2.str(std::string());
126  ss2 << "Clusters +Z Disk" << i << ";Global X (cm);Global Y (cm)";
127  meClPosDiskpz.push_back(iBooker.book2D(ss1.str(), ss2.str(), 80, -20., 20., 80, -20., 20.));
128  ss1.str(std::string());
129  ss1 << "position_siPixelClusters_mz_Disk_" << i;
130  ss2.str(std::string());
131  ss2 << "Clusters -Z Disk" << i << ";Global X (cm);Global Y (cm)";
132  meClPosDiskmz.push_back(iBooker.book2D(ss1.str(), ss2.str(), 80, -20., 20., 80, -20., 20.));
133  }
134 
135  // Book trend cluster plots for barrel and endcap. Lumisections for offline
136  // and second for online - taken from strips
137  iBooker.setCurrentFolder(topFolderName_ + "/Barrel");
138  ss1.str(std::string());
139  ss1 << "totalNumberOfClustersProfile_siPixelClusters_Barrel";
140  ss2.str(std::string());
141  ss2 << "Total number of barrel clusters profile;Lumisection;";
142  meClusBarrelProf = iBooker.bookProfile(ss1.str(), ss2.str(), 2400, 0., 150, 0, 0, "");
143  meClusBarrelProf->getTH1()->SetCanExtend(TH1::kAllAxes);
144 
145  iBooker.setCurrentFolder(topFolderName_ + "/Endcap");
146 
147  ss1.str(std::string());
148  ss1 << "totalNumberOfClustersProfile_siPixelClusters_FPIX+";
149  ss2.str(std::string());
150  ss2 << "Total number of FPIX+ clusters profile;Lumisection;";
151  meClusFpixPProf = iBooker.bookProfile(ss1.str(), ss2.str(), 2400, 0., 150, 0, 0, "");
152  meClusFpixPProf->getTH1()->SetCanExtend(TH1::kAllAxes);
153 
154  ss1.str(std::string());
155  ss1 << "totalNumberOfClustersProfile_siPixelClusters_FPIX-";
156  ss2.str(std::string());
157  ss2 << "Total number of FPIX- clusters profile;Lumisection;";
158  meClusFpixMProf = iBooker.bookProfile(ss1.str(), ss2.str(), 2400, 0., 150, 0, 0, "");
159  meClusFpixMProf->getTH1()->SetCanExtend(TH1::kAllAxes);
160 
161  iBooker.setCurrentFolder(topFolderName_ + "/Barrel");
162  for (int i = 1; i <= noOfLayers; i++) {
163  int ybins = -1;
164  float ymin = 0.;
165  float ymax = 0.;
166  if (i == 1) {
167  ybins = 42;
168  ymin = -10.5;
169  ymax = 10.5;
170  }
171  if (i == 2) {
172  ybins = 66;
173  ymin = -16.5;
174  ymax = 16.5;
175  }
176  if (i == 3) {
177  ybins = 90;
178  ymin = -22.5;
179  ymax = 22.5;
180  }
181  if (i == 4) {
182  ybins = 130;
183  ymin = -32.5;
184  ymax = 32.5;
185  }
186  ss1.str(std::string());
187  ss1 << "pix_bar Occ_roc_online_" + digisrc_.label() + "_layer_" << i;
188  ss2.str(std::string());
189  ss2 << "Pixel Barrel Occupancy, ROC level (Online): Layer " << i;
190  meZeroRocBPIX.push_back(iBooker.book2D(ss1.str(), ss2.str(), 72, -4.5, 4.5, ybins, ymin, ymax));
191  meZeroRocBPIX.at(i - 1)->setAxisTitle("ROC / Module", 1);
192  meZeroRocBPIX.at(i - 1)->setAxisTitle("ROC / Ladder", 2);
193  }
194 
195  iBooker.setCurrentFolder(topFolderName_ + "/Endcap");
196  meZeroRocFPIX = iBooker.book2D(
197  "ROC_endcap_occupancy", "Pixel Endcap Occupancy, ROC level (Online)", 72, -4.5, 4.5, 288, -12.5, 12.5);
198  meZeroRocFPIX->setBinLabel(1, "Disk-2 Pnl2", 1);
199  meZeroRocFPIX->setBinLabel(9, "Disk-2 Pnl1", 1);
200  meZeroRocFPIX->setBinLabel(19, "Disk-1 Pnl2", 1);
201  meZeroRocFPIX->setBinLabel(27, "Disk-1 Pnl1", 1);
202  meZeroRocFPIX->setBinLabel(41, "Disk+1 Pnl1", 1);
203  meZeroRocFPIX->setBinLabel(49, "Disk+1 Pnl2", 1);
204  meZeroRocFPIX->setBinLabel(59, "Disk+2 Pnl1", 1);
205  meZeroRocFPIX->setBinLabel(67, "Disk+2 Pnl2", 1);
206  meZeroRocFPIX->setAxisTitle("Blades in Inner (>0) / Outer(<) Halves", 2);
207  meZeroRocFPIX->setAxisTitle("ROC occupancy", 3);
208 }
209 
210 //------------------------------------------------------------------
211 // Method called for every event
212 //------------------------------------------------------------------
214  eventNo++;
215 
216  if (meClPosLayer.at(0) && meClPosLayer.at(0)->getEntries() > 150000) {
217  for (int i = 0; i < noOfLayers; i++) {
218  meClPosLayer.at(i)->Reset();
219  }
220  for (int i = 0; i < noOfDisks; i++) {
221  meClPosDiskpz.at(i)->Reset();
222  meClPosDiskmz.at(i)->Reset();
223  }
224  }
225 
226  // get input data
228  iEvent.getByToken(srcToken_, input);
229  auto const &clustColl = *(input.product());
230 
232  iSetup.get<TrackerDigiGeometryRecord>().get(pDD);
233  const TrackerGeometry *tracker = &(*pDD);
234 
236  iEvent.getByToken(digisrcToken_, digiinput);
237  const edm::DetSetVector<PixelDigi> diginp = *(digiinput.product());
238 
239  edm::ESHandle<TrackerTopology> tTopoHandle;
240  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
241  const TrackerTopology *pTT = tTopoHandle.product();
242 
243  int lumiSection = (int)iEvent.luminosityBlock();
244  int nEventFpixClusters = 0;
245 
246  int nEventsBarrel = 0;
247  int nEventsFPIXm = 0;
248  int nEventsFPIXp = 0;
249 
250  std::map<uint32_t, SiPixelClusterModule *>::iterator struct_iter;
251  for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) {
252  int numberOfFpixClusters = (*struct_iter)
253  .second->fill(*input,
254  tracker,
255  &nEventsBarrel,
256  &nEventsFPIXp,
257  &nEventsFPIXm,
258  meClPosLayer,
261  modOn,
262  ladOn,
263  layOn,
264  phiOn,
265  bladeOn,
266  diskOn,
267  ringOn,
268  twoDimOn,
269  reducedSet,
270  smileyOn,
271  isUpgrade);
272  nEventFpixClusters = nEventFpixClusters + numberOfFpixClusters;
273  }
274 
275  if (nEventFpixClusters > bigEventSize) {
277  bigFpixClusterEventRate->Fill(lumiSection, 1. / 23.);
278  }
279  }
280 
281  float trendVar = iEvent.orbitNumber() / 262144.0; // lumisection : seconds - matches strip trend plot
282 
283  meClusBarrelProf->Fill(trendVar, nEventsBarrel);
284  meClusFpixPProf->Fill(trendVar, nEventsFPIXp);
285  meClusFpixMProf->Fill(trendVar, nEventsFPIXm);
286 
287  // std::cout<<"nEventFpixClusters: "<<nEventFpixClusters<<" , nLumiSecs:
288  // "<<nLumiSecs<<" , nBigEvents: "<<nBigEvents<<std::endl;
289 
290  for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) {
291  DetId detId = (*it)->geographicalId();
292 
293  // fill barrel
294  if (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
295  getrococcupancy(detId, diginp, pTT, meZeroRocBPIX);
296  }
297 
298  // fill endcap
299  if (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) {
300  getrococcupancye(detId, clustColl, pTT, pDD, meZeroRocFPIX);
301  }
302  }
303 
304  // slow down...
305  if (slowDown)
306  usleep(10000);
307 }
308 
309 //------------------------------------------------------------------
310 // Build data structure
311 //------------------------------------------------------------------
313  LogInfo("PixelDQM") << " SiPixelClusterSource::buildStructure";
315  iSetup.get<TrackerDigiGeometryRecord>().get(pDD);
316 
317  edm::ESHandle<TrackerTopology> tTopoHandle;
318  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
319  const TrackerTopology *pTT = tTopoHandle.product();
320 
321  LogVerbatim("PixelDQM") << " *** Geometry node for TrackerGeom is " << &(*pDD) << std::endl;
322  LogVerbatim("PixelDQM") << " *** I have " << pDD->dets().size() << " detectors" << std::endl;
323  LogVerbatim("PixelDQM") << " *** I have " << pDD->detTypes().size() << " types" << std::endl;
324 
325  for (TrackerGeometry::DetContainer::const_iterator it = pDD->dets().begin(); it != pDD->dets().end(); it++) {
326  if (dynamic_cast<PixelGeomDetUnit const *>((*it)) != nullptr) {
327  DetId detId = (*it)->geographicalId();
328  const GeomDetUnit *geoUnit = pDD->idToDetUnit(detId);
329  const PixelGeomDetUnit *pixDet = dynamic_cast<const PixelGeomDetUnit *>(geoUnit);
330  int nrows = (pixDet->specificTopology()).nrows();
331  int ncols = (pixDet->specificTopology()).ncolumns();
332 
333  if ((detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) ||
334  (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap))) {
335  uint32_t id = detId();
336  if (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel)) {
337  if (isPIB)
338  continue;
339  LogDebug("PixelDQM") << " ---> Adding Barrel Module " << detId.rawId() << endl;
340  int layer = PixelBarrelName(DetId(id), pTT, isUpgrade).layerName();
341  if (layer > noOfLayers)
342  noOfLayers = layer;
343  SiPixelClusterModule *theModule = new SiPixelClusterModule(id, ncols, nrows);
344  thePixelStructure.insert(pair<uint32_t, SiPixelClusterModule *>(id, theModule));
345  } else if (detId.subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap)) {
346  LogDebug("PixelDQM") << " ---> Adding Endcap Module " << detId.rawId() << endl;
348  int disk = PixelEndcapName(DetId(id), pTT, isUpgrade).diskName();
349  if (disk > noOfDisks)
350  noOfDisks = disk;
351  int blade = PixelEndcapName(DetId(id), pTT, isUpgrade).bladeName();
352  int panel = PixelEndcapName(DetId(id), pTT, isUpgrade).pannelName();
354  char sside[80];
355  sprintf(sside, "HalfCylinder_%i", side);
356  char sdisk[80];
357  sprintf(sdisk, "Disk_%i", disk);
358  char sblade[80];
359  sprintf(sblade, "Blade_%02i", blade);
360  char spanel[80];
361  sprintf(spanel, "Panel_%i", panel);
362  char smodule[80];
363  sprintf(smodule, "Module_%i", module);
364  std::string side_str = sside;
365  std::string disk_str = sdisk;
366  bool mask = side_str.find("HalfCylinder_1") != string::npos ||
367  side_str.find("HalfCylinder_2") != string::npos ||
368  side_str.find("HalfCylinder_4") != string::npos || disk_str.find("Disk_2") != string::npos;
369  // clutch to take all of FPIX, but no BPIX:
370  mask = false;
371  if (isPIB && mask)
372  continue;
373  SiPixelClusterModule *theModule = new SiPixelClusterModule(id, ncols, nrows);
374  thePixelStructure.insert(pair<uint32_t, SiPixelClusterModule *>(id, theModule));
375  }
376  }
377  }
378  }
379  LogInfo("PixelDQM") << " *** Pixel Structure Size " << thePixelStructure.size() << endl;
380 }
381 //------------------------------------------------------------------
382 // Book MEs
383 //------------------------------------------------------------------
385  // Get DQM interface
387  char title[256];
388  snprintf(title,
389  256,
390  "Rate of events with >%i FPIX clusters;LumiSection;Rate of large "
391  "FPIX events per LS [Hz]",
392  bigEventSize);
393  bigFpixClusterEventRate = iBooker.book1D("bigFpixClusterEventRate", title, 5000, 0., 5000.);
394 
395  std::map<uint32_t, SiPixelClusterModule *>::iterator struct_iter;
396 
397  SiPixelFolderOrganizer theSiPixelFolder(false);
398 
399  for (struct_iter = thePixelStructure.begin(); struct_iter != thePixelStructure.end(); struct_iter++) {
401  if (modOn) {
402  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 0, isUpgrade)) {
403  (*struct_iter).second->book(conf_, iSetup, iBooker, 0, twoDimOn, reducedSet, isUpgrade);
404  } else {
405  if (!isPIB)
406  throw cms::Exception("LogicError") << "[SiPixelClusterSource::bookMEs] Creation of DQM folder "
407  "failed";
408  }
409  }
410  if (ladOn) {
411  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 1, isUpgrade)) {
412  (*struct_iter).second->book(conf_, iSetup, iBooker, 1, twoDimOn, reducedSet, isUpgrade);
413  } else {
414  LogDebug("PixelDQM") << "PROBLEM WITH LADDER-FOLDER\n";
415  }
416  }
417  if (layOn) {
418  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 2, isUpgrade)) {
419  (*struct_iter).second->book(conf_, iSetup, iBooker, 2, twoDimOn, reducedSet, isUpgrade);
420  } else {
421  LogDebug("PixelDQM") << "PROBLEM WITH LAYER-FOLDER\n";
422  }
423  }
424  if (phiOn) {
425  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 3, isUpgrade)) {
426  (*struct_iter).second->book(conf_, iSetup, iBooker, 3, twoDimOn, reducedSet, isUpgrade);
427  } else {
428  LogDebug("PixelDQM") << "PROBLEM WITH PHI-FOLDER\n";
429  }
430  }
431  if (bladeOn) {
432  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 4, isUpgrade)) {
433  (*struct_iter).second->book(conf_, iSetup, iBooker, 4, twoDimOn, reducedSet, isUpgrade);
434  } else {
435  LogDebug("PixelDQM") << "PROBLEM WITH BLADE-FOLDER\n";
436  }
437  }
438  if (diskOn) {
439  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 5, isUpgrade)) {
440  (*struct_iter).second->book(conf_, iSetup, iBooker, 5, twoDimOn, reducedSet, isUpgrade);
441  } else {
442  LogDebug("PixelDQM") << "PROBLEM WITH DISK-FOLDER\n";
443  }
444  }
445  if (ringOn) {
446  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 6, isUpgrade)) {
447  (*struct_iter).second->book(conf_, iSetup, iBooker, 6, twoDimOn, reducedSet, isUpgrade);
448  } else {
449  LogDebug("PixelDQM") << "PROBLEM WITH RING-FOLDER\n";
450  }
451  }
452  if (smileyOn) {
453  if (theSiPixelFolder.setModuleFolder(iBooker, (*struct_iter).first, 7, isUpgrade)) {
454  (*struct_iter).second->book(conf_, iSetup, iBooker, 7, twoDimOn, reducedSet, isUpgrade);
455  } else {
456  LogDebug("PixelDQM") << "PROBLEM WITH BARREL-FOLDER\n";
457  }
458  }
459  }
460 }
461 
463  const edm::DetSetVector<PixelDigi> &diginp,
464  const TrackerTopology *const tTopo,
465  std::vector<MonitorElement *> const &meinput) {
466  edm::DetSetVector<PixelDigi>::const_iterator ipxsearch = diginp.find(detId);
467  if (ipxsearch != diginp.end()) {
468  // Look at digis now
470  for (pxdi = ipxsearch->begin(); pxdi != ipxsearch->end(); pxdi++) {
471  bool isHalfModule = PixelBarrelName(DetId(detId), tTopo, isUpgrade).isHalfModule();
472  int DBlayer = PixelBarrelName(DetId(detId), tTopo, isUpgrade).layerName();
473  int DBmodule = PixelBarrelName(DetId(detId), tTopo, isUpgrade).moduleName();
474  int DBladder = PixelBarrelName(DetId(detId), tTopo, isUpgrade).ladderName();
475  int DBshell = PixelBarrelName(DetId(detId), tTopo, isUpgrade).shell();
476 
477  // add sign to the modules
478  if (DBshell == 1 || DBshell == 2) {
479  DBmodule = -DBmodule;
480  }
481  if (DBshell == 1 || DBshell == 3) {
482  DBladder = -DBladder;
483  }
484 
485  int col = pxdi->column();
486  int row = pxdi->row();
487 
488  float modsign = (float)DBmodule / (abs((float)DBmodule));
489  float ladsign = (float)DBladder / (abs((float)DBladder));
490  float rocx = ((float)col / (52. * 8.)) * modsign + ((float)DBmodule - (modsign)*0.5);
491  float rocy = ((float)row / (80. * 2.)) * ladsign + ((float)DBladder - (ladsign)*0.5);
492 
493  // do the flip where need
494  bool flip = false;
495  if ((DBladder % 2 == 0) && (!isHalfModule)) {
496  flip = true;
497  }
498  if ((flip) && (DBladder > 0)) {
499  if ((((float)DBladder - (ladsign)*0.5) <= rocy) && (rocy < (float)DBladder)) {
500  rocy = rocy + ladsign * 0.5;
501  } else if ((((float)DBladder) <= rocy) && (rocy < ((float)DBladder + (ladsign)*0.5))) {
502  rocy = rocy - ladsign * 0.5;
503  }
504  }
505 
506  // tweak border effect for negative modules/ladders
507  if (modsign < 0) {
508  rocx = rocx - 0.0001;
509  }
510  if (ladsign < 0) {
511  rocy = rocy - 0.0001;
512  } else {
513  rocy = rocy + 0.0001;
514  }
515  if (abs(DBladder) == 1) {
516  rocy = rocy + ladsign * 0.5;
517  } // take care of the half module
518  meinput[DBlayer - 1]->Fill(rocx, rocy);
519  } // end of looping over pxdi
520  }
521 }
522 
524  const edmNew::DetSetVector<SiPixelCluster> &clustColl,
525  const TrackerTopology *const pTT,
527  MonitorElement *meinput) {
528  edmNew::DetSetVector<SiPixelCluster>::const_iterator ipxsearch = clustColl.find(detId);
529  if (ipxsearch != clustColl.end()) {
530  // Look at clusters now
532  for (pxclust = ipxsearch->begin(); pxclust != ipxsearch->end(); pxclust++) {
533  const GeomDetUnit *geoUnit = pDD->idToDetUnit(detId);
534  const PixelGeomDetUnit *pixDet = dynamic_cast<const PixelGeomDetUnit *>(geoUnit);
535  const PixelTopology *topol = &(pixDet->specificTopology());
536  LocalPoint clustlp = topol->localPosition(MeasurementPoint(pxclust->x(), pxclust->y()));
537  GlobalPoint clustgp = geoUnit->surface().toGlobal(clustlp);
538 
539  float xclust = pxclust->x();
540  float yclust = pxclust->y();
541  float z = clustgp.z();
542 
543  int pxfside = PixelEndcapName(detId, pTT, isUpgrade).halfCylinder();
544  int pxfpanel = PixelEndcapName(detId, pTT, isUpgrade).pannelName();
545  int pxfmodule = PixelEndcapName(detId, pTT, isUpgrade).plaquetteName();
546  int pxfdisk = PixelEndcapName(detId, pTT, isUpgrade).diskName();
547  int pxfblade = PixelEndcapName(detId, pTT, isUpgrade).bladeName();
548 
549  if ((pxfside == 1) || (pxfside == 3)) {
550  pxfblade = -1. * pxfblade;
551  }
552 
553  if (z < 0.) {
554  pxfdisk = -1. * pxfdisk;
555  }
556 
557  int clu_sdpx = ((pxfdisk > 0) ? 1 : -1) * (2 * (abs(pxfdisk) - 1) + pxfpanel);
558  int binselx = (pxfpanel == 1 && (pxfmodule == 1 || pxfmodule == 4))
559  ? (pxfmodule == 1)
560  : ((pxfpanel == 1 && xclust < 80.0) || (pxfpanel == 2 && xclust >= 80.0));
561  int nperpan = 2 * pxfmodule + pxfpanel - 1 + binselx;
562  int clu_roc_binx =
563  ((pxfdisk > 0) ? nperpan : 9 - nperpan) + (clu_sdpx + 4) * 8 - 2 * ((abs(pxfdisk) == 1) ? pxfdisk : 0);
564 
565  int clu_roc_biny = -99.;
566  int nrocly = pxfmodule + pxfpanel;
567  for (int i = 0; i < nrocly; i++) {
568  int j = (pxfdisk < 0) ? i : nrocly - 1 - i;
569  if (yclust >= (j * 52.0) && yclust < ((j + 1) * 52.0))
570  clu_roc_biny = 6 - nrocly + 2 * i + ((pxfblade > 0) ? pxfblade - 1 : pxfblade + 12) * 12 + 1;
571  }
572  if (pxfblade > 0) {
573  clu_roc_biny = clu_roc_biny + 144;
574  }
575 
576  meinput->setBinContent(clu_roc_binx, clu_roc_biny, meinput->getBinContent(clu_roc_binx, clu_roc_biny) + 1);
577  meinput->setBinContent(
578  clu_roc_binx, clu_roc_biny + 1, meinput->getBinContent(clu_roc_binx, clu_roc_biny + 1) + 1);
579  }
580  }
581 }
582 
583 // define this as a plug-in
SiPixelClusterSource::getrococcupancye
void getrococcupancye(DetId detId, const edmNew::DetSetVector< SiPixelCluster > &clustColl, const TrackerTopology *const pTT, edm::ESHandle< TrackerGeometry > pDD, MonitorElement *meinput)
Definition: SiPixelClusterSource.cc:523
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
edm::DetSetVector
Definition: DetSetVector.h:61
dqm::impl::MonitorElement
Definition: MonitorElement.h:98
hgcalPlots.ncols
ncols
Definition: hgcalPlots.py:105
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
PixelSubdetector.h
input
static const std::string input
Definition: EdmProvDump.cc:48
PixelBarrelName.h
MessageLogger.h
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
funct::false
false
Definition: Factorize.h:34
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
TrackerGeometry.h
GeomDet
Definition: GeomDet.h:27
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
edm::Handle::product
T const * product() const
Definition: Handle.h:70
PixelTopology.h
SiPixelClusterSource::meClusBarrelProf
MonitorElement * meClusBarrelProf
Definition: SiPixelClusterSource.h:103
edm::DetSetVector::end
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
SiPixelFolderOrganizer::setModuleFolder
bool setModuleFolder(const uint32_t &rawdetid=0, int type=0, bool isUpgrade=false)
Set folder name for a module or plaquette.
Definition: SiPixelFolderOrganizer.cc:27
SiPixelClusterSource::isPIB
bool isPIB
Definition: SiPixelClusterSource.h:79
SiPixelOfflineDQM_source_cff.reducedSet
reducedSet
Definition: SiPixelOfflineDQM_source_cff.py:8
SiPixelClusterSource::smileyOn
bool smileyOn
Definition: SiPixelClusterSource.h:90
SiPixelClusterSource
Definition: SiPixelClusterSource.h:58
edm::Run
Definition: Run.h:45
edm
HLT enums.
Definition: AlignableModifier.h:19
TrackerTopology
Definition: TrackerTopology.h:16
SiPixelClusterSource::meZeroRocBPIX
std::vector< MonitorElement * > meZeroRocBPIX
Definition: SiPixelClusterSource.h:107
cuy.col
col
Definition: cuy.py:1010
edm::LogInfo
Definition: MessageLogger.h:254
SiPixelClusterSource::twoDimOn
bool twoDimOn
Definition: SiPixelClusterSource.h:84
PixelBarrelName
Definition: PixelBarrelName.h:16
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
edmNew::DetSetVector::const_iterator
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetSetVectorNew.h:231
SiPixelClusterSource::buildStructure
virtual void buildStructure(edm::EventSetup const &)
Definition: SiPixelClusterSource.cc:312
edm::DetSetVector::begin
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
DQMStore.h
SiPixelClusterSource::srcToken_
edm::EDGetTokenT< edmNew::DetSetVector< SiPixelCluster > > srcToken_
Definition: SiPixelClusterSource.h:124
edmNew::DetSetVector::begin
const_iterator begin(bool update=false) const
Definition: DetSetVectorNew.h:572
Topology::localPosition
virtual LocalPoint localPosition(const MeasurementPoint &) const =0
TrackerGeometry::detTypes
const DetTypeContainer & detTypes() const override
Return a vector of all det types.
Definition: TrackerGeometry.h:60
PixelEndcapName::halfCylinder
HalfCylinder halfCylinder() const
Definition: PixelEndcapName.h:42
fed_dqm_sourceclient-live_cfg.saveFile
saveFile
Definition: fed_dqm_sourceclient-live_cfg.py:54
PixelBarrelName::layerName
int layerName() const
layer id
Definition: PixelBarrelName.h:43
PixelEndcapName::pannelName
int pannelName() const
pannel id
Definition: PixelEndcapName.h:51
edm::Handle
Definition: AssociativeIterator.h:50
SiPixelOfflineDQM_source_cff.phiOn
phiOn
Definition: SiPixelOfflineDQM_source_cff.py:48
PixelEndcapName::bladeName
int bladeName() const
blade id
Definition: PixelEndcapName.h:48
TrackerGeometry::idToDetUnit
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: TrackerGeometry.cc:183
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
SiPixelOfflineDQM_source_cff.ladOn
ladOn
Definition: SiPixelOfflineDQM_source_cff.py:37
SiPixelClusterSource::diskOn
bool diskOn
Definition: SiPixelClusterSource.h:89
edm::InputTag::label
std::string const & label() const
Definition: InputTag.h:36
SiPixelClusterSource::digisrcToken_
edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > digisrcToken_
Definition: SiPixelClusterSource.h:125
DetId
Definition: DetId.h:17
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
TrackerTopology.h
edmNew::DetSetVector::find
const_iterator find(id_type i, bool update=false) const
Definition: DetSetVectorNew.h:560
PixelEndcapName
Definition: PixelEndcapName.h:16
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
pfNegativeDeepFlavourTagInfos_cfi.flip
flip
Definition: pfNegativeDeepFlavourTagInfos_cfi.py:8
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
L1TOccupancyClient_cfi.ymax
ymax
Definition: L1TOccupancyClient_cfi.py:43
SiPixelOfflineDQM_source_cff.bladeOn
bladeOn
Definition: SiPixelOfflineDQM_source_cff.py:38
Service.h
SiPixelClusterSource::phiOn
bool phiOn
Definition: SiPixelClusterSource.h:87
PixelGeomDetUnit
Definition: PixelGeomDetUnit.h:15
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
SiPixelClusterSource::conf_
edm::ParameterSet conf_
Definition: SiPixelClusterSource.h:75
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
Surface::toGlobal
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
SiPixelOfflineDQM_source_cff.ringOn
ringOn
Definition: SiPixelOfflineDQM_source_cff.py:51
DDAxes::z
SiPixelClusterSource::digisrc_
edm::InputTag digisrc_
Definition: SiPixelClusterSource.h:77
edm::ESHandle< TrackerGeometry >
dqm::implementation::IBooker::bookProfile
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:322
SiPixelOfflineDQM_source_cff.modOn
modOn
online/offline RawDataErrors
Definition: SiPixelOfflineDQM_source_cff.py:36
SiPixelClusterSource::SiPixelClusterSource
SiPixelClusterSource(const edm::ParameterSet &conf)
Definition: SiPixelClusterSource.cc:48
Point3DBase< float, LocalTag >
SiPixelClusterSource::firstRun
bool firstRun
Definition: SiPixelClusterSource.h:91
PixelTopology
Definition: PixelTopology.h:10
PixelBarrelName::ladderName
int ladderName() const
ladder id (index in phi)
Definition: PixelBarrelName.h:49
dqm::impl::MonitorElement::getTH1
virtual TH1 * getTH1()
Definition: MonitorElement.cc:969
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
SiPixelClusterSource::reducedSet
bool reducedSet
Definition: SiPixelClusterSource.h:85
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiPixelClusterSource::meClPosDiskmz
std::vector< MonitorElement * > meClPosDiskmz
Definition: SiPixelClusterSource.h:101
PbPb_ZMuSkimMuonDPG_cff.tracker
tracker
Definition: PbPb_ZMuSkimMuonDPG_cff.py:60
SiPixelClusterSource::noOfLayers
int noOfLayers
Definition: SiPixelClusterSource.h:110
SiPixelClusterSource::meClPosLayer
std::vector< MonitorElement * > meClPosLayer
Definition: SiPixelClusterSource.h:99
SiPixelClusterSource::meZeroRocFPIX
MonitorElement * meZeroRocFPIX
Definition: SiPixelClusterSource.h:108
MeasurementPoint
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
Definition: MeasurementPoint.h:12
funct::true
true
Definition: Factorize.h:173
SiPixelOfflineDQM_source_cff.twoDimOn
twoDimOn
Definition: SiPixelOfflineDQM_source_cff.py:41
TrackerDigiGeometryRecord.h
SiPixelClusterSource::isUpgrade
bool isUpgrade
Definition: SiPixelClusterSource.h:97
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
SiPixelClusterSource::dqmBeginRun
void dqmBeginRun(const edm::Run &, edm::EventSetup const &) override
Definition: SiPixelClusterSource.cc:90
SiPixelClusterSource::meClusFpixMProf
MonitorElement * meClusFpixMProf
Definition: SiPixelClusterSource.h:105
SiPixelClusterSource::meClPosDiskpz
std::vector< MonitorElement * > meClPosDiskpz
Definition: SiPixelClusterSource.h:100
PixelBarrelName::shell
Shell shell() const
Definition: PixelBarrelName.h:40
edm::DetSetVector::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
PixelGeomDetUnit::specificTopology
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
Definition: PixelGeomDetUnit.cc:17
SiPixelClusterSource::thePixelStructure
std::map< uint32_t, SiPixelClusterModule * > thePixelStructure
Definition: SiPixelClusterSource.h:82
SiPixelClusterSource::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: SiPixelClusterSource.cc:109
edm::DetSetVector::find
iterator find(det_id_type id)
Definition: DetSetVector.h:264
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
SiPixelClusterSource::modOn
bool modOn
Definition: SiPixelClusterSource.h:83
dqm::impl::MonitorElement::setBinLabel
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
Definition: MonitorElement.cc:771
sipixel_dqm_source_example_cfg.smileyOn
smileyOn
Definition: sipixel_dqm_source_example_cfg.py:57
edm::LogVerbatim
Definition: MessageLogger.h:297
SiPixelOfflineDQM_source_cff.isPIB
isPIB
Definition: SiPixelOfflineDQM_source_cff.py:6
SiPixelClusterSource::~SiPixelClusterSource
~SiPixelClusterSource() override
Definition: SiPixelClusterSource.cc:78
SiPixelClusterSource::slowDown
bool slowDown
Definition: SiPixelClusterSource.h:80
edm::EventSetup
Definition: EventSetup.h:57
TrackerGeometry::dets
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
Definition: TrackerGeometry.h:62
SiPixelClusterSource::layOn
bool layOn
Definition: SiPixelClusterSource.h:87
PixelBarrelName::moduleName
int moduleName() const
module id (index in z)
Definition: PixelBarrelName.h:46
module
Definition: vlib.h:198
SiPixelClusterSource::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: SiPixelClusterSource.cc:213
get
#define get
SiPixelOfflineDQM_source_cff.layOn
layOn
Definition: SiPixelOfflineDQM_source_cff.py:47
alignCSCRings.r
r
Definition: alignCSCRings.py:93
overlapproblemtsosanalyzer_cfi.title
title
Definition: overlapproblemtsosanalyzer_cfi.py:7
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
fed_dqm_sourceclient-live_cfg.slowDown
slowDown
Definition: fed_dqm_sourceclient-live_cfg.py:55
dqm::impl::MonitorElement::setBinContent
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
Definition: MonitorElement.cc:691
edmNew::DetSetVector
Definition: DetSetNew.h:13
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
PixelEndcapName::HalfCylinder
HalfCylinder
Definition: PixelEndcapName.h:18
PixelEndcapName::diskName
int diskName() const
disk id
Definition: PixelEndcapName.h:45
L1TOccupancyClient_cfi.ymin
ymin
Definition: L1TOccupancyClient_cfi.py:43
DetId.h
edmNew::DetSetVector::end
const_iterator end(bool update=false) const
Definition: DetSetVectorNew.h:577
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
SiPixelClusterSource::eventNo
int eventNo
Definition: SiPixelClusterSource.h:81
Exception
Definition: hltDiff.cc:246
SiPixelFolderOrganizer
Definition: SiPixelFolderOrganizer.h:26
PixelGeomDetUnit.h
SiPixelClusterSource::lumSec
int lumSec
Definition: SiPixelClusterSource.h:92
PixelEndcapNameUpgrade.h
SiPixelClusterSource::bladeOn
bool bladeOn
Definition: SiPixelClusterSource.h:89
dqm::implementation::IBooker
Definition: DQMStore.h:43
SiPixelClusterSource::nLumiSecs
int nLumiSecs
Definition: SiPixelClusterSource.h:93
SiPixelOfflineDQM_source_cff.diskOn
diskOn
Definition: SiPixelOfflineDQM_source_cff.py:50
SiPixelClusterSource.h
SiPixelClusterSource::nBigEvents
int nBigEvents
Definition: SiPixelClusterSource.h:94
SiPixelClusterSource::bigFpixClusterEventRate
MonitorElement * bigFpixClusterEventRate
Definition: SiPixelClusterSource.h:95
SiPixelFolderOrganizer.h
PixelEndcapName::plaquetteName
int plaquetteName() const
plaquetteId (in pannel)
Definition: PixelEndcapName.h:54
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SiPixelClusterSource::ladOn
bool ladOn
Definition: SiPixelClusterSource.h:87
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
SiPixelClusterSource::noOfDisks
int noOfDisks
Definition: SiPixelClusterSource.h:111
SiPixelClusterSource::getrococcupancy
void getrococcupancy(DetId detId, const edm::DetSetVector< PixelDigi > &diginp, const TrackerTopology *const tTopo, std::vector< MonitorElement * > const &meinput)
Definition: SiPixelClusterSource.cc:462
SiPixelOfflineDQM_client_cff.isUpgrade
isUpgrade
Definition: SiPixelOfflineDQM_client_cff.py:19
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
SiPixelOfflineDQM_source_cff.bigEventSize
bigEventSize
Definition: SiPixelOfflineDQM_source_cff.py:52
PixelBarrelNameUpgrade.h
edm::Event
Definition: Event.h:73
SiPixelClusterSource::bigEventSize
int bigEventSize
Definition: SiPixelClusterSource.h:96
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
SiPixelClusterModule
Definition: SiPixelClusterModule.h:40
edm::InputTag
Definition: InputTag.h:15
SiPixelClusterSource::topFolderName_
std::string topFolderName_
Definition: SiPixelClusterSource.h:72
SiPixelClusterSource::ringOn
bool ringOn
Definition: SiPixelClusterSource.h:89
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
SiPixelClusterSource::bookMEs
virtual void bookMEs(DQMStore::IBooker &, const edm::EventSetup &iSetup)
Definition: SiPixelClusterSource.cc:384
SiPixelClusterSource::meClusFpixPProf
MonitorElement * meClusFpixPProf
Definition: SiPixelClusterSource.h:104
PixelEndcapName.h
TrackerGeometry
Definition: TrackerGeometry.h:14
edmNew::DetSet::const_iterator
const data_type * const_iterator
Definition: DetSetNew.h:31
edm::DetSet::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSet.h:31