CMS 3D CMS Logo

SiPixelActionExecutor.cc
Go to the documentation of this file.
1 //#define printing false
2 //#define occupancyprinting false
3 
18 
19 #include <cmath>
20 
21 #include <iostream>
22 using namespace std;
23 //=============================================================================================================
24 //
25 // -- Constructor
26 //
28  : offlineXMLfile_(offlineXMLfile), Tier0Flag_(Tier0Flag) {
29  edm::LogInfo("SiPixelActionExecutor") << " Creating SiPixelActionExecutor "
30  << "\n";
31  configParser_ = nullptr;
32  configWriter_ = nullptr;
33  ndet_ = 0;
34  // collationDone = false;
35 }
36 //=============================================================================================================
37 //
38 // -- Destructor
39 //
41  edm::LogInfo("SiPixelActionExecutor") << " Deleting SiPixelActionExecutor "
42  << "\n";
43  if (configParser_)
44  delete configParser_;
45  if (configWriter_)
46  delete configWriter_;
47 }
48 //=============================================================================================================
49 //
50 // -- Read Configuration File
51 //
53  string localPath;
54  if (offlineXMLfile_)
55  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
56  else
57  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
58  if (configParser_ == nullptr) {
61  }
62 }
63 //=============================================================================================================
64 //
65 // -- Read Configuration File
66 //
68  int &sum_barrel_freq,
69  int &sum_endcap_freq,
70  int &sum_grandbarrel_freq,
71  int &sum_grandendcap_freq,
72  int &message_limit_,
73  int &source_type_,
74  int &calib_type_) {
75  // printing cout<<"Entering
76  // SiPixelActionExecutor::readConfiguration..."<<endl;
77  string localPath;
78  if (offlineXMLfile_)
79  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
80  else
81  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
82  if (configParser_ == nullptr) {
85  }
86 
87  if (!configParser_->getFrequencyForTrackerMap(tkmap_freq)) {
88  cout << "SiPixelActionExecutor::readConfiguration: Failed to read "
89  "TrackerMap configuration parameters!! ";
90  return false;
91  }
92  if (!configParser_->getFrequencyForBarrelSummary(sum_barrel_freq)) {
93  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Barrel Summary configuration parameters!! "
94  << "\n";
95  return false;
96  }
97  if (!configParser_->getFrequencyForEndcapSummary(sum_endcap_freq)) {
98  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Endcap Summary configuration parameters!! "
99  << "\n";
100  return false;
101  }
102  if (!configParser_->getFrequencyForGrandBarrelSummary(sum_grandbarrel_freq)) {
103  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Grand Barrel Summary configuration parameters!! "
104  << "\n";
105  return false;
106  }
107  if (!configParser_->getFrequencyForGrandEndcapSummary(sum_grandendcap_freq)) {
108  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Grand Endcap Summary configuration parameters!! "
109  << "\n";
110  return false;
111  }
113  edm::LogInfo("SiPixelActionExecutor") << "Failed to read QTest Message Limit"
114  << "\n";
115  return false;
116  }
118  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Source Type"
119  << "\n";
120  return false;
121  }
123  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Calib Type"
124  << "\n";
125  return false;
126  }
127  // printing cout<<"...leaving
128  // SiPixelActionExecutor::readConfiguration..."<<endl;
129  return true;
130 }
131 //=============================================================================================================
132 bool SiPixelActionExecutor::readConfiguration(int &tkmap_freq, int &summary_freq) {
133  // printing cout<<"Entering
134  // SiPixelActionExecutor::readConfiguration..."<<endl;
135  string localPath;
136  if (offlineXMLfile_)
137  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
138  else
139  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
140  if (configParser_ == nullptr) {
143  }
144 
145  if (!configParser_->getFrequencyForTrackerMap(tkmap_freq)) {
146  cout << "SiPixelActionExecutor::readConfiguration: Failed to read "
147  "TrackerMap configuration parameters!! ";
148  return false;
149  }
150  if (!configParser_->getFrequencyForBarrelSummary(summary_freq)) {
151  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Summary configuration parameters!! "
152  << "\n";
153  return false;
154  }
155  // printing cout<<"...leaving
156  // SiPixelActionExecutor::readConfiguration..."<<endl;
157  return true;
158 }
159 
160 //=============================================================================================================
162  // To be majorly overhauled and split into two, I guess.
163 
164  // cout<<"entering SiPixelActionExecutor::createSummary..."<<endl;
165  string barrel_structure_name;
166  vector<string> barrel_me_names;
167  string localPath;
168  if (offlineXMLfile_)
169  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
170  else
171  localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
172  // cout<<"*********************ATTENTION! LOCALPATH= "<<localPath<<endl;
173  if (configParser_ == nullptr) {
176  }
177  if (!configParser_->getMENamesForBarrelSummary(barrel_structure_name, barrel_me_names)) {
178  cout << "SiPixelActionExecutor::createSummary: Failed to read Barrel "
179  "Summary configuration parameters!! ";
180  return;
181  }
183 
184  iBooker.setCurrentFolder("Pixel/");
185  iGetter.setCurrentFolder("Pixel/");
186  fillSummary(iBooker, iGetter, barrel_structure_name, barrel_me_names, true,
187  isUpgrade); // Barrel
188  iBooker.setCurrentFolder("Pixel/");
189  iGetter.setCurrentFolder("Pixel/");
190  string endcap_structure_name;
191  vector<string> endcap_me_names;
192  if (!configParser_->getMENamesForEndcapSummary(endcap_structure_name, endcap_me_names)) {
193  edm::LogInfo("SiPixelActionExecutor") << "Failed to read Endcap Summary configuration parameters!! "
194  << "\n";
195  return;
196  }
197 
198  // cout << "--- Processing endcap" << endl;
199 
200  iBooker.setCurrentFolder("Pixel/");
201  iGetter.setCurrentFolder("Pixel/");
202 
203  fillSummary(iBooker, iGetter, endcap_structure_name, endcap_me_names, false,
204  isUpgrade); // Endcap
205  iBooker.setCurrentFolder("Pixel/");
206  iGetter.setCurrentFolder("Pixel/");
207 
208  if (source_type_ == 0 || source_type_ == 5 || source_type_ == 20) { // do this only if RawData source is present
209  string federror_structure_name;
210  vector<string> federror_me_names;
211  if (!configParser_->getMENamesForFEDErrorSummary(federror_structure_name, federror_me_names)) {
212  cout << "SiPixelActionExecutor::createSummary: Failed to read FED Error "
213  "Summary configuration parameters!! ";
214  return;
215  }
216  iBooker.setCurrentFolder("Pixel/");
217  iGetter.setCurrentFolder("Pixel/");
218 
219  fillFEDErrorSummary(iBooker, iGetter, federror_structure_name, federror_me_names);
220  iBooker.setCurrentFolder("Pixel/");
221  iGetter.setCurrentFolder("Pixel/");
222  }
223  if (configWriter_)
224  delete configWriter_;
225  configWriter_ = nullptr;
226  // cout<<"leaving SiPixelActionExecutor::createSummary..."<<endl;
227 }
228 
229 //=============================================================================================================
231  int nBPixModules;
232  if (isUpgrade) {
233  nBPixModules = 1184;
234  } else {
235  nBPixModules = 768;
236  }
237 
238  iBooker.cd();
239  iBooker.setCurrentFolder("Pixel/Barrel");
240  DEV_adc_Barrel = iBooker.book1D(
241  "DEV_adc_Barrel", "Deviation from reference;Module;<adc_ref>-<adc>", nBPixModules, 0., nBPixModules);
242  DEV_ndigis_Barrel = iBooker.book1D(
243  "DEV_ndigis_Barrel", "Deviation from reference;Module;<ndigis_ref>-<ndigis>", nBPixModules, 0., nBPixModules);
244  DEV_charge_Barrel = iBooker.book1D(
245  "DEV_charge_Barrel", "Deviation from reference;Module;<charge_ref>-<charge>", nBPixModules, 0., nBPixModules);
246  DEV_nclusters_Barrel = iBooker.book1D("DEV_nclusters_Barrel",
247  "Deviation from reference;Module;<nclusters_ref>-<nclusters>",
248  nBPixModules,
249  0.,
250  nBPixModules);
251  DEV_size_Barrel = iBooker.book1D(
252  "DEV_size_Barrel", "Deviation from reference;Module;<size_ref>-<size>", nBPixModules, 0., nBPixModules);
253  iBooker.cd();
254  iBooker.setCurrentFolder("Pixel/Endcap");
255  DEV_adc_Endcap = iBooker.book1D("DEV_adc_Endcap", "Deviation from reference;Module;<adc_ref>-<adc>", 672, 0., 672.);
257  iBooker.book1D("DEV_ndigis_Endcap", "Deviation from reference;Module;<ndigis_ref>-<ndigis>", 672, 0., 672.);
259  iBooker.book1D("DEV_charge_Endcap", "Deviation from reference;Module;<charge_ref>-<charge>", 672, 0., 672.);
260  DEV_nclusters_Endcap = iBooker.book1D(
261  "DEV_nclusters_Endcap", "Deviation from reference;Module;<nclusters_ref>-<nclusters>", 672, 0., 672.);
263  iBooker.book1D("DEV_size_Endcap", "Deviation from reference;Module;<size_ref>-<size>", 672, 0., 672.);
264  iBooker.cd();
265 }
266 
267 //=============================================================================================================
268 
270  DQMStore::IGetter &iGetter,
271  vector<string> &blade_subdirs) {
272  blade_subdirs.clear();
273  vector<string> panels = iGetter.getSubdirs();
274  vector<string> modules;
275  for (vector<string>::const_iterator it = panels.begin(); it != panels.end(); it++) {
276  iGetter.cd(*it);
277  iBooker.cd(*it);
278  modules = iGetter.getSubdirs();
279  for (vector<string>::const_iterator m_it = modules.begin(); m_it != modules.end(); m_it++) {
280  blade_subdirs.push_back(*m_it);
281  }
282  }
283 }
284 
285 //=============================================================================================================
286 
288  DQMStore::IGetter &iGetter,
289  string dir_name,
290  vector<string> &me_names,
291  bool isbarrel,
292  bool isUpgrade) {
293  // cout<<"entering SiPixelActionExecutor::fillSummary..."<<endl;
294  string currDir = iBooker.pwd();
295  string prefix;
296  if (source_type_ == 0)
297  prefix = "SUMRAW";
298  else if (source_type_ == 1)
299  prefix = "SUMDIG";
300  else if (source_type_ == 2)
301  prefix = "SUMCLU";
302  else if (source_type_ == 3)
303  prefix = "SUMTRK";
304  else if (source_type_ == 4)
305  prefix = "SUMHIT";
306  else if (source_type_ >= 7 && source_type_ < 20)
307  prefix = "SUMCAL";
308  else if (source_type_ == 20)
309  prefix = "SUMOFF";
310  if (currDir.find(dir_name) != string::npos) {
311  vector<MonitorElement *> sum_mes;
312  for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
313  if (source_type_ == 5 || source_type_ == 6) {
314  if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
315  (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
316  (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
317  (*iv) == "Type36Hitmap")
318  prefix = "SUMRAW";
319  else if ((*iv) == "ndigis" || (*iv) == "adc")
320  prefix = "SUMDIG";
321  else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" || (*iv) == "size" ||
322  (*iv) == "sizeX" || (*iv) == "sizeY" || (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" ||
323  (*iv) == "maxcol")
324  prefix = "SUMCLU";
325  if (currDir.find("Track") != string::npos)
326  prefix = "SUMTRK";
327  else if ((*iv) == "residualX" || (*iv) == "residualY")
328  prefix = "SUMTRK";
329  else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
330  (*iv) == "ErrorY")
331  prefix = "SUMHIT";
332  else if ((*iv) == "Gain1d" || (*iv) == "GainChi2NDF1d" || (*iv) == "GainChi2Prob1d" || (*iv) == "Pedestal1d" ||
333  (*iv) == "GainNPoints1d" || (*iv) == "GainHighPoint1d" || (*iv) == "GainLowPoint1d" ||
334  (*iv) == "GainEndPoint1d" || (*iv) == "GainFitResult2d" || (*iv) == "GainDynamicRange2d" ||
335  (*iv) == "GainSaturate2d" || (*iv) == "ScurveChi2ProbSummary" || (*iv) == "ScurveFitResultSummary" ||
336  (*iv) == "ScurveSigmasSummary" || (*iv) == "ScurveThresholdSummary" || (*iv) == "pixelAliveSummary" ||
337  (*iv) == "SiPixelErrorsCalibDigis")
338  prefix = "SUMCAL";
339  }
341  string tag;
342  if ((*iv).find("residual") != string::npos) { // track residuals
343  tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
344  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
345  sum_mes.push_back(temp);
346  tag = prefix + "_" + (*iv) + "_RMS_" + currDir.substr(currDir.find(dir_name));
347  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
348  sum_mes.push_back(temp);
349  } else if (prefix == "SUMCAL") { // calibrations
350  if ((*iv) == "Gain1d" || (*iv) == "GainChi2NDF1d" || (*iv) == "GainChi2Prob1d" || (*iv) == "GainNPoints1d" ||
351  (*iv) == "GainHighPoint1d" || (*iv) == "GainLowPoint1d" || (*iv) == "GainEndPoint1d" ||
352  (*iv) == "GainDynamicRange2d" || (*iv) == "GainSaturate2d" || (*iv) == "Pedestal1d" ||
353  (*iv) == "ScurveChi2ProbSummary" || (*iv) == "ScurveFitResultSummary" || (*iv) == "ScurveSigmasSummary" ||
354  (*iv) == "ScurveThresholdSummary") {
355  tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
356  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
357  sum_mes.push_back(temp);
358  tag = prefix + "_" + (*iv) + "_RMS_" + currDir.substr(currDir.find(dir_name));
359  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
360  sum_mes.push_back(temp);
361  } else if ((*iv) == "SiPixelErrorsCalibDigis") {
362  tag = prefix + "_" + (*iv) + "_NCalibErrors_" + currDir.substr(currDir.find(dir_name));
363  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
364  sum_mes.push_back(temp);
365  } else if ((*iv) == "GainFitResult2d") {
366  tag = prefix + "_" + (*iv) + "_NNegativeFits_" + currDir.substr(currDir.find(dir_name));
367  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
368  sum_mes.push_back(temp);
369  } else if ((*iv) == "pixelAliveSummary") {
370  tag = prefix + "_" + (*iv) + "_FracOfPerfectPix_" + currDir.substr(currDir.find(dir_name));
371  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
372  sum_mes.push_back(temp);
373  tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
374  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
375  sum_mes.push_back(temp);
376  }
377  } else {
378  tag = prefix + "_" + (*iv) + "_" + currDir.substr(currDir.find(dir_name));
379  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
380  sum_mes.push_back(temp);
381  if ((*iv) == "ndigis") {
382  tag = prefix + "_" + (*iv) + "FREQ_" + currDir.substr(currDir.find(dir_name));
383  temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
384  sum_mes.push_back(temp);
385  }
386  if (prefix == "SUMDIG" && (*iv) == "adc") {
387  tag = "ALLMODS_" + (*iv) + "COMB_" + currDir.substr(currDir.find(dir_name));
388  temp = nullptr;
389  string fullpathname = iBooker.pwd() + "/" + tag;
390  temp = iGetter.get(fullpathname);
391  if (temp) {
392  temp->Reset();
393  } else {
394  temp = iBooker.book1D(tag.c_str(), tag.c_str(), 128, 0., 256.);
395  }
396  sum_mes.push_back(temp);
397  }
398  if (prefix == "SUMCLU" && (*iv) == "charge") {
399  tag = "ALLMODS_" + (*iv) + "COMB_" + currDir.substr(currDir.find(dir_name));
400  temp = nullptr;
401  string fullpathname = iBooker.pwd() + "/" + tag;
402  temp = iGetter.get(fullpathname);
403  if (temp) {
404  temp->Reset();
405  } else {
406  temp = iBooker.book1D(tag.c_str(), tag.c_str(), 100, 0.,
407  200.); // To look to get the size automatically
408  }
409  sum_mes.push_back(temp);
410  }
411  }
412  }
413  if (sum_mes.empty()) {
414  edm::LogInfo("SiPixelActionExecutor") << " Summary MEs can not be created"
415  << "\n";
416  return;
417  }
418  vector<string> subdirs = iGetter.getSubdirs();
419  // Blade
420  if (dir_name.find("Blade_") == 0)
421  GetBladeSubdirs(iBooker, iGetter, subdirs);
422 
423  int ndet = 0;
424  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
425  if (prefix != "SUMOFF" && (*it).find("Module_") == string::npos)
426  continue;
427  if (prefix == "SUMOFF" && (*it).find(isbarrel ? "Layer_" : "Disk_") == string::npos)
428  continue;
429  iBooker.cd(*it);
430  iGetter.cd(*it);
431  ndet++;
432 
433  vector<string> contents = iGetter.getMEs();
434 
435  for (vector<MonitorElement *>::const_iterator isum = sum_mes.begin(); isum != sum_mes.end(); isum++) {
436  for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
437  string sname = ((*isum)->getName());
438  string tname = " ";
439  tname = sname.substr(7, (sname.find('_', 7) - 6));
440  if (sname.find("ALLMODS_adcCOMB_") != string::npos)
441  tname = "adc_";
442  if (sname.find("ALLMODS_chargeCOMB_") != string::npos)
443  tname = "charge_";
444  if (sname.find("_charge_") != string::npos && sname.find("Track_") == string::npos)
445  tname = "charge_";
446  if (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos)
447  tname = "nclusters_";
448  if (sname.find("_size_") != string::npos && sname.find("Track_") == string::npos)
449  tname = "size_";
450  if (sname.find("_charge_OffTrack_") != string::npos)
451  tname = "charge_OffTrack_";
452  if (sname.find("_nclusters_OffTrack_") != string::npos)
453  tname = "nclusters_OffTrack_";
454  if (sname.find("_size_OffTrack_") != string::npos)
455  tname = "size_OffTrack_";
456  if (sname.find("_sizeX_OffTrack_") != string::npos)
457  tname = "sizeX_OffTrack_";
458  if (sname.find("_sizeY_OffTrack_") != string::npos)
459  tname = "sizeY_OffTrack_";
460  if (sname.find("_charge_OnTrack_") != string::npos)
461  tname = "charge_OnTrack_";
462  if (sname.find("_nclusters_OnTrack_") != string::npos)
463  tname = "nclusters_OnTrack_";
464  if (sname.find("_size_OnTrack_") != string::npos)
465  tname = "size_OnTrack_";
466  if (sname.find("_sizeX_OnTrack_") != string::npos)
467  tname = "sizeX_OnTrack_";
468  if (sname.find("_sizeY_OnTrack_") != string::npos)
469  tname = "sizeY_OnTrack_";
470  if (tname.find("FREQ") != string::npos)
471  tname = "ndigis_";
472  if (((*im)).find(tname) == 0) {
473  string fullpathname = iBooker.pwd() + "/" + (*im);
474  MonitorElement *me = iGetter.get(fullpathname);
475 
476  if (me) {
477  if (sname.find("_charge") != string::npos && sname.find("Track_") == string::npos &&
478  me->getName().find("Track_") != string::npos)
479  continue;
480  if (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos &&
481  me->getName().find("Track_") != string::npos)
482  continue;
483  if (sname.find("_size") != string::npos && sname.find("Track_") == string::npos &&
484  me->getName().find("Track_") != string::npos)
485  continue;
486  // fill summary histos:
487  if (sname.find("_RMS_") != string::npos && sname.find("GainDynamicRange2d") == string::npos &&
488  sname.find("GainSaturate2d") == string::npos) {
489  (*isum)->Fill(ndet, me->getRMS());
490  } else if (sname.find("GainDynamicRange2d") != string::npos ||
491  sname.find("GainSaturate2d") != string::npos) {
492  float SumOfEntries = 0.;
493  float SumOfSquaredEntries = 0.;
494  int SumOfPixels = 0;
495  for (int cols = 1; cols != me->getNbinsX() + 1; cols++)
496  for (int rows = 1; rows != me->getNbinsY() + 1; rows++) {
497  SumOfEntries += me->getBinContent(cols, rows);
498  SumOfSquaredEntries += (me->getBinContent(cols, rows)) * (me->getBinContent(cols, rows));
499  SumOfPixels++;
500  }
501 
502  float MeanInZ = SumOfEntries / float(SumOfPixels);
503  float RMSInZ = sqrt(SumOfSquaredEntries / float(SumOfPixels));
504  if (sname.find("_mean_") != string::npos)
505  (*isum)->Fill(ndet, MeanInZ);
506  if (sname.find("_RMS_") != string::npos)
507  (*isum)->Fill(ndet, RMSInZ);
508  } else if (sname.find("_FracOfPerfectPix_") != string::npos) {
509  float nlast = me->getBinContent(me->getNbinsX());
510  float nall = (me->getTH1F())->Integral(1, 11);
511  (*isum)->Fill(ndet, nlast / nall);
512  } else if (sname.find("_NCalibErrors_") != string::npos || sname.find("FREQ_") != string::npos) {
513  float nall = me->getEntries();
514  (*isum)->Fill(ndet, nall);
515  } else if (sname.find("GainFitResult2d") != string::npos) {
516  int NegFitPixels = 0;
517  for (int cols = 1; cols != me->getNbinsX() + 1; cols++)
518  for (int rows = 1; rows != me->getNbinsY() + 1; rows++) {
519  if (me->getBinContent(cols, rows) < 0.)
520  NegFitPixels++;
521  }
522  (*isum)->Fill(ndet, float(NegFitPixels));
523  } else if (sname.find("ALLMODS_adcCOMB_") != string::npos ||
524  (sname.find("ALLMODS_chargeCOMB_") != string::npos &&
525  me->getName().find("Track_") == string::npos)) {
526  (*isum)->getTH1F()->Add(me->getTH1F());
527  } else if (sname.find("_NErrors_") != string::npos) {
528  string path1 = fullpathname;
529  path1 = path1.replace(path1.find("NErrors"), 7, "errorType");
530  MonitorElement *me1 = iGetter.get(path1);
531  bool notReset = true;
532  if (me1) {
533  for (int jj = 1; jj < 16; jj++) {
534  if (me1->getBinContent(jj) > 0.) {
535  if (jj == 6) { // errorType=30 (reset)
536  string path2 = path1;
537  path2 = path2.replace(path2.find("errorType"), 9, "TBMMessage");
538  MonitorElement *me2 = iGetter.get(path2);
539  if (me2)
540  if (me2->getBinContent(6) > 0. || me2->getBinContent(7) > 0.)
541  notReset = false;
542  }
543  }
544  }
545  }
546  if (notReset)
547  (*isum)->Fill(ndet, me1->getEntries());
548  } else if ((sname.find("_charge_") != string::npos && sname.find("Track_") == string::npos &&
549  me->getName().find("Track_") == string::npos) ||
550  (sname.find("_charge_") != string::npos && sname.find("_OnTrack_") != string::npos &&
551  me->getName().find("_OnTrack_") != string::npos) ||
552  (sname.find("_charge_") != string::npos && sname.find("_OffTrack_") != string::npos &&
553  me->getName().find("_OffTrack_") != string::npos) ||
554  (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos &&
555  me->getName().find("Track_") == string::npos) ||
556  (sname.find("_nclusters_") != string::npos && sname.find("_OnTrack_") != string::npos &&
557  me->getName().find("_OnTrack_") != string::npos) ||
558  (sname.find("_nclusters_") != string::npos && sname.find("_OffTrack_") != string::npos &&
559  me->getName().find("_OffTrack_") != string::npos) ||
560  (sname.find("_size") != string::npos && sname.find("Track_") == string::npos &&
561  me->getName().find("Track_") == string::npos) ||
562  (sname.find("_size") != string::npos && sname.find("_OnTrack_") != string::npos &&
563  me->getName().find("_OnTrack_") != string::npos) ||
564  (sname.find("_size") != string::npos && sname.find("_OffTrack_") != string::npos &&
565  me->getName().find("_OffTrack_") != string::npos)) {
566  (*isum)->Fill(ndet, me->getMean());
567  } else if (sname.find("_charge_") == string::npos && sname.find("_nclusters_") == string::npos &&
568  sname.find("_size") == string::npos) {
569  (*isum)->Fill(ndet, me->getMean());
570  }
571 
572  // set titles:
573  if (prefix == "SUMOFF") {
574  (*isum)->setAxisTitle(isbarrel ? "Ladders" : "Blades", 1);
575  } else if (sname.find("ALLMODS_adcCOMB_") != string::npos) {
576  (*isum)->setAxisTitle("Digi charge [ADC]", 1);
577  } else if (sname.find("ALLMODS_chargeCOMB_") != string::npos) {
578  (*isum)->setAxisTitle("Cluster charge [kilo electrons]", 1);
579  } else {
580  (*isum)->setAxisTitle("Modules", 1);
581  }
582  string title = " ";
583  if (sname.find("_RMS_") != string::npos) {
584  title = "RMS of " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
585  } else if (sname.find("_FracOfPerfectPix_") != string::npos) {
586  title = "FracOfPerfectPix " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
587  } else if (sname.find("_NCalibErrors_") != string::npos) {
588  title = "Number of CalibErrors " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
589  } else if (sname.find("_NNegativeFits_") != string::npos) {
590  title = "Number of pixels with neg. fit result " + sname.substr(7, (sname.find('_', 7) - 7)) +
591  " per module";
592  } else if (sname.find("FREQ_") != string::npos) {
593  title = "NEvents with digis per module";
594  } else if (sname.find("ALLMODS_adcCOMB_") != string::npos) {
595  title = "NDigis";
596  } else if (sname.find("ALLMODS_chargeCOMB_") != string::npos) {
597  title = "NClusters";
598  } else if (sname.find("_NErrors_") != string::npos) {
599  if (prefix == "SUMOFF" && isbarrel)
600  title = "Total number of errors per Ladder";
601  else if (prefix == "SUMOFF" && !isbarrel)
602  title = "Total number of errors per Blade";
603  else
604  title = "Total number of errors per Module";
605  } else {
606  if (prefix == "SUMOFF")
607  title =
608  "Mean " + sname.substr(7, (sname.find('_', 7) - 7)) + (isbarrel ? " per Ladder" : " per Blade");
609  else
610  title = "Mean " + sname.substr(7, (sname.find('_', 7) - 7)) + " per Module";
611  }
612  (*isum)->setAxisTitle(title, 2);
613  }
614  break;
615  }
616  }
617  }
618  iBooker.goUp();
619  iGetter.setCurrentFolder(iBooker.pwd());
620  if (dir_name.find("Blade") == 0) {
621  iBooker.goUp(); // Going up a second time if we are processing the Blade
622  iGetter.setCurrentFolder(iBooker.pwd());
623  }
624  } // end for it (subdirs)
625  } else {
626  vector<string> subdirs = iGetter.getSubdirs();
627  // printing cout << "#\t" << iBooker.pwd() << endl;
628  if (isbarrel) {
629  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
630  // cout << "##\t" << iBooker.pwd() << "\t"
631  //<<
632  //(*it) << endl;
633  if ((iBooker.pwd()).find("Endcap") != string::npos ||
634  (iBooker.pwd()).find("AdditionalPixelErrors") != string::npos) {
635  iBooker.goUp();
636  iGetter.setCurrentFolder(iBooker.pwd());
637  }
638  iBooker.cd(*it);
639  iGetter.cd(*it);
640  if ((*it).find("Endcap") != string::npos || (*it).find("AdditionalPixelErrors") != string::npos)
641  continue;
642  fillSummary(iBooker, iGetter, dir_name, me_names, true,
643  isUpgrade); // Barrel
644  iBooker.goUp();
645  iGetter.setCurrentFolder(iBooker.pwd());
646  }
647  string grandbarrel_structure_name;
648  vector<string> grandbarrel_me_names;
649  if (!configParser_->getMENamesForGrandBarrelSummary(grandbarrel_structure_name, grandbarrel_me_names)) {
650  cout << "SiPixelActionExecutor::createSummary: Failed to read Grand "
651  "Barrel Summary configuration parameters!! ";
652  return;
653  }
654  fillGrandBarrelSummaryHistos(iBooker, iGetter, grandbarrel_me_names, isUpgrade);
655 
656  } else // Endcap
657  {
658  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
659  if ((iBooker.pwd()).find("Barrel") != string::npos ||
660  (iBooker.pwd()).find("AdditionalPixelErrors") != string::npos) {
661  iBooker.goUp();
662  iGetter.setCurrentFolder(iBooker.pwd());
663  }
664  iBooker.cd(*it);
665  iGetter.cd(*it);
666  if ((*it).find("Barrel") != string::npos || (*it).find("AdditionalPixelErrors") != string::npos)
667  continue;
668  fillSummary(iBooker, iGetter, dir_name, me_names, false,
669  isUpgrade); // Endcap
670  iBooker.goUp();
671  iGetter.setCurrentFolder(iBooker.pwd());
672  }
673  string grandendcap_structure_name;
674  vector<string> grandendcap_me_names;
675  if (!configParser_->getMENamesForGrandEndcapSummary(grandendcap_structure_name, grandendcap_me_names)) {
676  cout << "SiPixelActionExecutor::createSummary: Failed to read Grand "
677  "Endcap Summary configuration parameters!! ";
678  return;
679  }
680  fillGrandEndcapSummaryHistos(iBooker, iGetter, grandendcap_me_names, isUpgrade);
681  }
682  }
683  // cout<<"...leaving SiPixelActionExecutor::fillSummary!"<<endl;
684 }
685 
686 //=============================================================================================================
688  DQMStore::IGetter &iGetter,
689  string dir_name,
690  vector<string> &me_names) {
691  // printing cout<<"entering
692  // SiPixelActionExecutor::fillFEDErrorSummary..."<<endl;
693  string currDir = iBooker.pwd();
694  string prefix;
695  if (source_type_ == 0)
696  prefix = "SUMRAW";
697  else if (source_type_ == 20)
698  prefix = "SUMOFF";
699 
700  if (currDir.find(dir_name) != string::npos) {
701  vector<MonitorElement *> sum_mes;
702  for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
703  bool isBooked = false;
704  vector<string> contents = iGetter.getMEs();
705  for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++)
706  if ((*im).find(*iv) != string::npos)
707  isBooked = true;
708  if (source_type_ == 5 || source_type_ == 6) {
709  if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
710  (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
711  (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
712  (*iv) == "Type36Hitmap" || (*iv) == "FedChLErr" || (*iv) == "FedChNErr" || (*iv) == "FedETypeNErr")
713  prefix = "SUMRAW";
714  }
715  if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
716  (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
717  (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
718  (*iv) == "Type36Hitmap") {
719  string tag = prefix + "_" + (*iv) + "_FEDErrors";
720  MonitorElement *temp = getFEDSummaryME(iBooker, iGetter, tag);
721  sum_mes.push_back(temp);
722  } else if ((*iv) == "FedChLErr" || (*iv) == "FedChNErr" || (*iv) == "FedETypeNErr") {
723  string tag = prefix + "_" + (*iv);
725  if ((*iv) == "FedChLErr") {
726  if (!isBooked)
727  temp = iBooker.book2D("FedChLErr", "Type of last error", 40, -0.5, 39.5, 37, 0., 37.);
728  else {
729  string fullpathname = iBooker.pwd() + "/" + (*iv);
730  temp = iGetter.get(fullpathname);
731  temp->Reset();
732  }
733  } // If I don't reset this one, then I instead start adding error
734  // codes..
735  if ((*iv) == "FedChNErr") {
736  if (!isBooked)
737  temp = iBooker.book2D("FedChNErr", "Total number of errors", 40, -0.5, 39.5, 37, 0., 37.);
738  else {
739  string fullpathname = iBooker.pwd() + "/" + (*iv);
740  temp = iGetter.get(fullpathname);
741  temp->Reset();
742  }
743  } // If I don't reset this one, then I instead start adding error
744  // codes..
745  if ((*iv) == "FedETypeNErr") {
746  if (!isBooked) {
747  temp = iBooker.book2D("FedETypeNErr", "Number of each error type", 40, -0.5, 39.5, 21, 0., 21.);
748  temp->setBinLabel(1, "ROC of 25", 2);
749  temp->setBinLabel(2, "Gap word", 2);
750  temp->setBinLabel(3, "Dummy word", 2);
751  temp->setBinLabel(4, "FIFO full", 2);
752  temp->setBinLabel(5, "Timeout", 2);
753  temp->setBinLabel(6, "Stack full", 2);
754  temp->setBinLabel(7, "Pre-cal issued", 2);
755  temp->setBinLabel(8, "Trigger clear or sync", 2);
756  temp->setBinLabel(9, "No token bit", 2);
757  temp->setBinLabel(10, "Overflow", 2);
758  temp->setBinLabel(11, "FSM error", 2);
759  temp->setBinLabel(12, "Invalid #ROCs", 2);
760  temp->setBinLabel(13, "Event number", 2);
761  temp->setBinLabel(14, "Slink header", 2);
762  temp->setBinLabel(15, "Slink trailer", 2);
763  temp->setBinLabel(16, "Event size", 2);
764  temp->setBinLabel(17, "Invalid channel#", 2);
765  temp->setBinLabel(18, "ROC value", 2);
766  temp->setBinLabel(19, "Dcol or pixel value", 2);
767  temp->setBinLabel(20, "Readout order", 2);
768  temp->setBinLabel(21, "CRC error", 2);
769  } else {
770  string fullpathname = iBooker.pwd() + "/" + (*iv);
771  temp = iGetter.get(fullpathname);
772  temp->Reset();
773  } // If I don't reset this one, then I instead start adding error
774  // codes..
775  }
776  sum_mes.push_back(temp);
777  }
778  }
779  if (sum_mes.empty()) {
780  edm::LogInfo("SiPixelActionExecutor") << " Summary MEs can not be created"
781  << "\n";
782  return;
783  }
784  vector<string> subdirs = iGetter.getSubdirs();
785  int ndet = 0;
786  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
787  if ((*it).find("FED_") == string::npos)
788  continue;
789  iBooker.cd(*it);
790  iGetter.cd(*it);
791  string fedid = (*it).substr((*it).find("_") + 1);
792  std::istringstream isst;
793  isst.str(fedid);
794  isst >> ndet;
795  ndet++;
796  vector<string> contents = iGetter.getMEs();
797 
798  for (vector<MonitorElement *>::const_iterator isum = sum_mes.begin(); isum != sum_mes.end(); isum++) {
799  for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
800  if (((*im).find("FedChNErr") != std::string::npos &&
801  (*isum)->getName().find("FedChNErr") != std::string::npos) ||
802  ((*im).find("FedChLErr") != std::string::npos &&
803  (*isum)->getName().find("FedChLErr") != std::string::npos) ||
804  ((*im).find("FedETypeNErr") != std::string::npos &&
805  (*isum)->getName().find("FedETypeNErr") != std::string::npos)) {
806  string fullpathname = iBooker.pwd() + "/" + (*im);
807  MonitorElement *me = iGetter.get(fullpathname);
808  if (me) {
809  for (int i = 0; i != 37; i++) {
810  if ((*im).find("FedETypeNErr") != std::string::npos && i < 21)
811  (*isum)->Fill(ndet - 1, i, me->getBinContent(i + 1));
812  else
813  (*isum)->Fill(ndet - 1, i, me->getBinContent(i + 1));
814  }
815  }
816  }
817  string sname = ((*isum)->getName());
818  string tname = " ";
819  tname = sname.substr(7, (sname.find('_', 7) - 6));
820  if (((*im)).find(tname) == 0) {
821  string fullpathname = iBooker.pwd() + "/" + (*im);
822  MonitorElement *me = iGetter.get(fullpathname);
823 
824  if (me) {
825  if (me->getMean() > 0.) {
826  if (sname.find("_NErrors_") != string::npos) {
827  string path1 = fullpathname;
828  path1 = path1.replace(path1.find("NErrors"), 7, "errorType");
829  MonitorElement *me1 = iGetter.get(path1);
830  bool notReset = true;
831  if (me1) {
832  for (int jj = 1; jj < 16; jj++) {
833  if (me1->getBinContent(jj) > 0.) {
834  if (jj == 6) { // errorType=30 (reset)
835  string path2 = path1;
836  path2 = path2.replace(path2.find("errorType"), 9, "TBMMessage");
837  MonitorElement *me2 = iGetter.get(path2);
838  if (me2)
839  if (me2->getBinContent(6) > 0. || me2->getBinContent(7) > 0.)
840  notReset = false;
841  }
842  }
843  }
844  }
845  if (notReset)
846  (*isum)->setBinContent(ndet, (*isum)->getBinContent(ndet) + me1->getEntries());
847  } else
848  (*isum)->setBinContent(ndet, (*isum)->getBinContent(ndet) + me->getEntries());
849  }
850  (*isum)->setAxisTitle("FED #", 1);
851  string title = " ";
852  title = sname.substr(7, (sname.find('_', 7) - 7)) + " per FED";
853  (*isum)->setAxisTitle(title, 2);
854  }
855  break;
856  }
857  }
858  }
859  iBooker.goUp();
860  iGetter.setCurrentFolder(iBooker.pwd());
861  }
862  } else {
863  vector<string> subdirs = iGetter.getSubdirs();
864  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
865  if ((*it).find("Endcap") != string::npos || (*it).find("Barrel") != string::npos)
866  continue;
867  iBooker.cd(*it);
868  iGetter.cd(*it);
869  fillFEDErrorSummary(iBooker, iGetter, dir_name, me_names);
870  iBooker.goUp();
871  iGetter.setCurrentFolder(iBooker.pwd());
872  }
873  }
874  // printing cout<<"...leaving
875  // SiPixelActionExecutor::fillFEDErrorSummary!"<<endl;
876 }
877 
878 //=============================================================================================================
880  DQMStore::IGetter &iGetter,
881  vector<string> &me_names,
882  bool isUpgrade) {
883  // cout<<"Entering
884  // SiPixelActionExecutor::fillGrandBarrelSummaryHistos...:"<<me_names.size()<<endl;
885  vector<MonitorElement *> gsum_mes;
886  string currDir = iBooker.pwd();
887  string path_name = iBooker.pwd();
888  string dir_name = path_name.substr(path_name.find_last_of('/') + 1);
889  if ((dir_name.find("DQMData") == 0) || (dir_name.find("Pixel") == 0) ||
890  (dir_name.find("AdditionalPixelErrors") == 0) || (dir_name.find("Endcap") == 0) ||
891  (dir_name.find("HalfCylinder") == 0) || (dir_name.find("Disk") == 0) || (dir_name.find("Blade") == 0) ||
892  (dir_name.find("Panel") == 0))
893  return;
894  vector<string> subdirs = iGetter.getSubdirs();
895  int nDirs = subdirs.size();
896  int iDir = 0;
897  int nbin = 0;
898  int nbin_i = 0;
899  int nbin_subdir = 0;
900  int cnt = 0;
901  bool first_subdir = true;
902  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
903  cnt++;
904  iBooker.cd(*it);
905  iGetter.cd(*it);
906  vector<string> contents = iGetter.getMEs();
907 
908  iBooker.goUp();
909  iGetter.setCurrentFolder(iBooker.pwd());
910 
911  string prefix;
912  if (source_type_ == 0)
913  prefix = "SUMRAW";
914  else if (source_type_ == 1)
915  prefix = "SUMDIG";
916  else if (source_type_ == 2)
917  prefix = "SUMCLU";
918  else if (source_type_ == 3)
919  prefix = "SUMTRK";
920  else if (source_type_ == 4)
921  prefix = "SUMHIT";
922  else if (source_type_ >= 7 && source_type_ < 20)
923  prefix = "SUMCAL";
924  else if (source_type_ == 20)
925  prefix = "SUMOFF";
926 
927  for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
928  for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
929  string var = "_" + (*iv) + "_";
930  if ((*im).find(var) != string::npos) {
931  if ((var == "_charge_" || var == "_nclusters_" || var == "_size_" || var == "_sizeX_" || var == "_sizeY_") &&
932  (*im).find("Track_") != string::npos)
933  continue;
934  string full_path = (*it) + "/" + (*im);
935  MonitorElement *me = iGetter.get(full_path);
936  if (!me)
937  continue;
938  if (source_type_ == 5 || source_type_ == 6) {
939  if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
940  (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" ||
941  (*iv) == "ROCId" || (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" ||
942  (*iv) == "TBMMessage" || (*iv) == "Type36Hitmap")
943  prefix = "SUMRAW";
944  else if ((*iv) == "ndigis" || (*iv) == "adc" || (*iv) == "ndigisFREQ" || (*iv) == "adcCOMB")
945  prefix = "SUMDIG";
946  else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" ||
947  (*iv) == "chargeCOMB" || (*iv) == "size" || (*iv) == "sizeX" || (*iv) == "sizeY" ||
948  (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" || (*iv) == "maxcol")
949  prefix = "SUMCLU";
950  if (currDir.find("Track") != string::npos)
951  prefix = "SUMTRK";
952  else if ((*iv) == "residualX_mean" || (*iv) == "residualY_mean" || (*iv) == "residualX_RMS" ||
953  (*iv) == "residualY_RMS")
954  prefix = "SUMTRK";
955  else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
956  (*iv) == "ErrorY")
957  prefix = "SUMHIT";
958  else if ((*iv) == "Gain1d_mean" || (*iv) == "GainChi2NDF1d_mean" || (*iv) == "GainChi2Prob1d_mean" ||
959  (*iv) == "Pedestal1d_mean" || (*iv) == "ScurveChi2ProbSummary_mean" ||
960  (*iv) == "ScurveFitResultSummary_mean" || (*iv) == "ScurveSigmasSummary_mean" ||
961  (*iv) == "ScurveThresholdSummary_mean" || (*iv) == "Gain1d_RMS" || (*iv) == "GainChi2NDF1d_RMS" ||
962  (*iv) == "GainChi2Prob1d_RMS" || (*iv) == "Pedestal1d_RMS" || (*iv) == "GainNPoints1d_mean" ||
963  (*iv) == "GainNPoints1d_RMS" || (*iv) == "GainHighPoint1d_mean" ||
964  (*iv) == "GainHighPoint1d_RMS" || (*iv) == "GainLowPoint1d_mean" ||
965  (*iv) == "GainLowPoint1d_RMS" || (*iv) == "GainEndPoint1d_mean" || (*iv) == "GainEndPoint1d_RMS" ||
966  (*iv) == "GainFitResult2d_mean" || (*iv) == "GainFitResult2d_RMS" ||
967  (*iv) == "GainDynamicRange2d_mean" || (*iv) == "GainDynamicRange2d_RMS" ||
968  (*iv) == "GainSaturate2d_mean" || (*iv) == "GainSaturate2d_RMS" ||
969  (*iv) == "ScurveChi2ProbSummary_RMS" || (*iv) == "ScurveFitResultSummary_RMS" ||
970  (*iv) == "ScurveSigmasSummary_RMS" || (*iv) == "ScurveThresholdSummary_RMS" ||
971  (*iv) == "pixelAliveSummary_mean" || (*iv) == "pixelAliveSummary_FracOfPerfectPix" ||
972  (*iv) == "SiPixelErrorsCalibDigis_NCalibErrors")
973  prefix = "SUMCAL";
974  } // end source_type if
975 
976  if (first_subdir && !isUpgrade) {
977  nbin = me->getTH1F()->GetNbinsX();
978  string me_name = prefix + "_" + (*iv) + "_" + dir_name;
979  if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
980  me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
981  else if (prefix == "SUMOFF" && dir_name == "Barrel")
982  nbin = 192;
983  else if ((*iv) == "adcCOMB")
984  nbin = 256;
985  else if (dir_name == "Barrel")
986  nbin = 768;
987  else if (prefix == "SUMOFF" && dir_name.find("Shell") != string::npos)
988  nbin = 48;
989  else if (dir_name.find("Shell") != string::npos)
990  nbin = 192;
991  else
992  nbin = nbin * nDirs;
993 
994  getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
995  } else if (first_subdir && isUpgrade) {
996  nbin = me->getTH1F()->GetNbinsX();
997  string me_name = prefix + "_" + (*iv) + "_" + dir_name;
998  if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
999  me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
1000  else if (prefix == "SUMOFF" && dir_name == "Barrel")
1001  nbin = 296;
1002  else if ((*iv) == "adcCOMB")
1003  nbin = 256;
1004  else if (dir_name == "Barrel")
1005  nbin = 1184;
1006  else if (prefix == "SUMOFF" && dir_name.find("Shell") != string::npos)
1007  nbin = 74;
1008  else if (dir_name.find("Shell") != string::npos)
1009  nbin = 296;
1010  else
1011  nbin = nbin * nDirs;
1012 
1013  getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
1014  }
1015 
1016  for (vector<MonitorElement *>::const_iterator igm = gsum_mes.begin(); igm != gsum_mes.end(); igm++) {
1017  if ((*igm)->getName().find(var) != string::npos) {
1018  if (prefix == "SUMOFF")
1019  (*igm)->setAxisTitle("Ladders", 1);
1020  else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1021  (*igm)->setAxisTitle("Digi charge [ADC]", 1);
1022  else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1023  (*igm)->setAxisTitle("Cluster charge [kilo electrons]", 1);
1024  else
1025  (*igm)->setAxisTitle("Modules", 1);
1026 
1027  // Setting title
1028 
1029  string title = "";
1030  if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMOFF")
1031  title = "Total number of errors per Ladder";
1032  else if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMRAW")
1033  title = "Total number of errors per Module";
1034  else if (prefix == "SUMOFF")
1035  title = "mean " + (*iv) + " per Ladder";
1036  else if ((*igm)->getName().find("FREQ_") != string::npos && prefix != "SUMOFF")
1037  title = "NEvents with digis per Module";
1038  else if ((*igm)->getName().find("FREQ_") != string::npos && prefix == "SUMOFF")
1039  title = "NEvents with digis per Ladder/Blade";
1040  else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1041  title = "NDigis";
1042  else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1043  title = "NClusters";
1044  else
1045  title = "mean " + (*iv) + " per Module";
1046  (*igm)->setAxisTitle(title, 2);
1047 
1048  // Setting binning
1049  if (!isUpgrade) {
1050  if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1051  nbin_subdir = 128;
1052  } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1053  nbin_subdir = 100;
1054  } else if ((*igm)->getName().find("Ladder") != string::npos) {
1055  nbin_i = 0;
1056  nbin_subdir = 4;
1057  } else if ((*igm)->getName().find("Layer") != string::npos) {
1058  nbin_i = (cnt - 1) * 4;
1059  nbin_subdir = 4;
1060  } else if ((*igm)->getName().find("Shell") != string::npos) {
1061  if (prefix != "SUMOFF") {
1062  if (iDir == 0) {
1063  nbin_i = 0;
1064  nbin_subdir = 40;
1065  } else if (iDir == 1) {
1066  nbin_i = 40;
1067  nbin_subdir = 64;
1068  } else if (iDir == 2) {
1069  nbin_i = 104;
1070  nbin_subdir = 88;
1071  }
1072  } else {
1073  if (iDir == 0) {
1074  nbin_i = 0;
1075  nbin_subdir = 10;
1076  } else if (iDir == 1) {
1077  nbin_i = 10;
1078  nbin_subdir = 16;
1079  } else if (iDir == 2) {
1080  nbin_i = 26;
1081  nbin_subdir = 22;
1082  }
1083  }
1084  } else if ((*igm)->getName().find("Barrel") != string::npos) {
1085  if (prefix != "SUMOFF") {
1086  if (iDir == 0) {
1087  nbin_i = 0;
1088  nbin_subdir = 192;
1089  } else if (iDir == 1) {
1090  nbin_i = 192;
1091  nbin_subdir = 192;
1092  } else if (iDir == 2) {
1093  nbin_i = 384;
1094  nbin_subdir = 192;
1095  } else if (iDir == 3) {
1096  nbin_i = 576;
1097  nbin_subdir = 192;
1098  }
1099  } else {
1100  if (iDir == 0) {
1101  nbin_i = 0;
1102  nbin_subdir = 48;
1103  } else if (iDir == 1) {
1104  nbin_i = 48;
1105  nbin_subdir = 48;
1106  } else if (iDir == 2) {
1107  nbin_i = 96;
1108  nbin_subdir = 48;
1109  } else if (iDir == 3) {
1110  nbin_i = 144;
1111  nbin_subdir = 48;
1112  }
1113  }
1114  }
1115  } else if (isUpgrade) {
1116  if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1117  nbin_subdir = 128;
1118  } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1119  nbin_subdir = 100;
1120  } else if ((*igm)->getName().find("Ladder") != string::npos) {
1121  nbin_i = 0;
1122  nbin_subdir = 4;
1123  } else if ((*igm)->getName().find("Layer") != string::npos) {
1124  nbin_i = (cnt - 1) * 4;
1125  nbin_subdir = 4;
1126  } else if ((*igm)->getName().find("Shell") != string::npos) {
1127  if (prefix != "SUMOFF") {
1128  if (iDir == 0) {
1129  nbin_i = 0;
1130  nbin_subdir = 24;
1131  } // 40(2*20)-->24(2*12)
1132  else if (iDir == 1) {
1133  nbin_i = 24;
1134  nbin_subdir = 56;
1135  } // 64(32*2)-->56(2*28)
1136  else if (iDir == 2) {
1137  nbin_i = 80;
1138  nbin_subdir = 88;
1139  } // 88(44*2)-->same88(44*2)
1140  else if (iDir == 3) {
1141  nbin_i = 168;
1142  nbin_subdir = 128;
1143  }
1144  } else {
1145  if (iDir == 0) {
1146  nbin_i = 0;
1147  nbin_subdir = 6;
1148  } // 10-->6
1149  else if (iDir == 1) {
1150  nbin_i = 6;
1151  nbin_subdir = 14;
1152  } // 16-->14
1153  else if (iDir == 2) {
1154  nbin_i = 20;
1155  nbin_subdir = 22;
1156  } // 22-->same22
1157  else if (iDir == 3) {
1158  nbin_i = 42;
1159  nbin_subdir = 32;
1160  }
1161  }
1162  } else if ((*igm)->getName().find("Barrel") != string::npos) {
1163  if (prefix != "SUMOFF") {
1164  if (iDir == 0) {
1165  nbin_i = 0;
1166  nbin_subdir = 296;
1167  } // 192=76 8/4-->296=1184/4
1168  else if (iDir == 1) {
1169  nbin_i = 296;
1170  nbin_subdir = 296;
1171  } // 296*2,*3,*4=1184
1172  else if (iDir == 2) {
1173  nbin_i = 592;
1174  nbin_subdir = 296;
1175  } else if (iDir == 3) {
1176  nbin_i = 888;
1177  nbin_subdir = 296;
1178  } else if (iDir == 4) {
1179  nbin_i = 1184;
1180  nbin_subdir = 296;
1181  }
1182  } else {
1183  if (iDir == 0) {
1184  nbin_i = 0;
1185  nbin_subdir = 74;
1186  } // 48=192/4-->74=296/4
1187  else if (iDir == 1) {
1188  nbin_i = 74;
1189  nbin_subdir = 74;
1190  } // 74*2,...*4=296
1191  else if (iDir == 2) {
1192  nbin_i = 148;
1193  nbin_subdir = 74;
1194  } else if (iDir == 3) {
1195  nbin_i = 222;
1196  nbin_subdir = 74;
1197  } else if (iDir == 4) {
1198  nbin_i = 296;
1199  nbin_subdir = 74;
1200  }
1201  }
1202  }
1203  }
1204 
1205  if ((*igm)->getName().find("ndigisFREQ") == string::npos) {
1206  if (((*igm)->getName().find("adcCOMB") != string::npos &&
1207  me->getName().find("adcCOMB") != string::npos) ||
1208  ((*igm)->getName().find("chargeCOMB") != string::npos &&
1209  me->getName().find("chargeCOMB") != string::npos)) {
1210  (*igm)->getTH1F()->Add(me->getTH1F());
1211  } else if (((*igm)->getName().find("charge_") != string::npos &&
1212  (*igm)->getName().find("Track_") == string::npos &&
1213  me->getName().find("charge_") != string::npos &&
1214  me->getName().find("Track_") == string::npos) ||
1215  ((*igm)->getName().find("nclusters_") != string::npos &&
1216  (*igm)->getName().find("Track_") == string::npos &&
1217  me->getName().find("nclusters_") != string::npos &&
1218  me->getName().find("Track_") == string::npos) ||
1219  ((*igm)->getName().find("size_") != string::npos &&
1220  (*igm)->getName().find("Track_") == string::npos &&
1221  me->getName().find("size_") != string::npos &&
1222  me->getName().find("Track_") == string::npos) ||
1223  ((*igm)->getName().find("charge_OffTrack_") != string::npos &&
1224  me->getName().find("charge_OffTrack_") != string::npos) ||
1225  ((*igm)->getName().find("nclusters_OffTrack_") != string::npos &&
1226  me->getName().find("nclusters_OffTrack_") != string::npos) ||
1227  ((*igm)->getName().find("size_OffTrack_") != string::npos &&
1228  me->getName().find("size_OffTrack_") != string::npos) ||
1229  ((*igm)->getName().find("charge_OnTrack_") != string::npos &&
1230  me->getName().find("charge_OnTrack_") != string::npos) ||
1231  ((*igm)->getName().find("nclusters_OnTrack_") != string::npos &&
1232  me->getName().find("nclusters_OnTrack_") != string::npos) ||
1233  ((*igm)->getName().find("size_OnTrack_") != string::npos &&
1234  me->getName().find("size_OnTrack_") != string::npos) ||
1235  ((*igm)->getName().find("charge_") == string::npos &&
1236  (*igm)->getName().find("nclusters_") == string::npos &&
1237  (*igm)->getName().find("size_") == string::npos)) {
1238  for (int k = 1; k < nbin_subdir + 1; k++)
1239  if (me->getBinContent(k) > 0)
1240  (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1241  }
1242  } else if (me->getName().find("ndigisFREQ") != string::npos) {
1243  for (int k = 1; k < nbin_subdir + 1; k++)
1244  if (me->getBinContent(k) > 0)
1245  (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1246  }
1247  } // end var in igm (gsum_mes)
1248  } // end igm loop
1249  } // end var in im (contents)
1250  } // end of iv loop
1251  } // end of im loop
1252  iDir++;
1253  first_subdir = false; // We are done processing the first directory, we
1254  // don't add any new MEs in the future passes.
1255  } // end of it loop (subdirs)
1256  // cout<<"...leaving
1257  // SiPixelActionExecutor::fillGrandBarrelSummaryHistos!"<<endl;
1258 }
1259 
1260 //=============================================================================================================
1262  DQMStore::IGetter &iGetter,
1263  vector<string> &me_names,
1264  bool isUpgrade) {
1265  // printing cout<<"Entering
1266  // SiPixelActionExecutor::fillGrandEndcapSummaryHistos..."<<endl;
1267  vector<MonitorElement *> gsum_mes;
1268  string currDir = iBooker.pwd();
1269  string path_name = iBooker.pwd();
1270  string dir_name = path_name.substr(path_name.find_last_of('/') + 1);
1271  if ((dir_name.find("DQMData") == 0) || (dir_name.find("Pixel") == 0) ||
1272  (dir_name.find("AdditionalPixelErrors") == 0) || (dir_name.find("Barrel") == 0) ||
1273  (dir_name.find("Shell") == 0) || (dir_name.find("Layer") == 0) || (dir_name.find("Ladder") == 0))
1274  return;
1275  vector<string> subdirs = iGetter.getSubdirs();
1276  int nbin = 0;
1277  int nbin_i = 0;
1278  int nbin_subdir = 0;
1279  int cnt = 0;
1280  bool first_subdir = true;
1281  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1282  cnt++;
1283  iBooker.cd(*it);
1284  iGetter.cd(*it);
1285  vector<string> contents = iGetter.getMEs();
1286  iBooker.goUp();
1287  iGetter.setCurrentFolder(iBooker.pwd());
1288 
1289  string prefix;
1290  if (source_type_ == 0)
1291  prefix = "SUMRAW";
1292  else if (source_type_ == 1)
1293  prefix = "SUMDIG";
1294  else if (source_type_ == 2)
1295  prefix = "SUMCLU";
1296  else if (source_type_ == 3)
1297  prefix = "SUMTRK";
1298  else if (source_type_ == 4)
1299  prefix = "SUMHIT";
1300  else if (source_type_ >= 7 && source_type_ < 20)
1301  prefix = "SUMCAL";
1302  else if (source_type_ == 20)
1303  prefix = "SUMOFF";
1304 
1305  for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
1306  for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
1307  string var = "_" + (*iv) + "_";
1308  if ((*im).find(var) != string::npos) {
1309  if ((var == "_charge_" || var == "_nclusters_" || var == "_size_" || var == "_sizeX_" || var == "_sizeY_") &&
1310  (*im).find("Track_") != string::npos)
1311  continue;
1312  string full_path = (*it) + "/" + (*im);
1313  MonitorElement *me = iGetter.get(full_path);
1314  if (!me)
1315  continue;
1316  if (source_type_ == 5 || source_type_ == 6) {
1317  if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
1318  (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" ||
1319  (*iv) == "ROCId" || (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" ||
1320  (*iv) == "TBMMessage" || (*iv) == "Type36Hitmap")
1321  prefix = "SUMRAW";
1322  else if ((*iv) == "ndigis" || (*iv) == "adc" || (*iv) == "ndigisFREQ" || (*iv) == "adcCOMB")
1323  prefix = "SUMDIG";
1324  else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" ||
1325  (*iv) == "chargeCOMB" || (*iv) == "size" || (*iv) == "sizeX" || (*iv) == "sizeY" ||
1326  (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" || (*iv) == "maxcol")
1327  prefix = "SUMCLU";
1328  if (currDir.find("Track") != string::npos)
1329  prefix = "SUMTRK";
1330  else if ((*iv) == "residualX_mean" || (*iv) == "residualY_mean" || (*iv) == "residualX_RMS" ||
1331  (*iv) == "residualY_RMS")
1332  prefix = "SUMTRK";
1333  else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
1334  (*iv) == "ErrorY")
1335  prefix = "SUMHIT";
1336  else if ((*iv) == "Gain1d_mean" || (*iv) == "GainChi2NDF1d_mean" || (*iv) == "GainChi2Prob1d_mean" ||
1337  (*iv) == "Pedestal1d_mean" || (*iv) == "ScurveChi2ProbSummary_mean" ||
1338  (*iv) == "ScurveFitResultSummary_mean" || (*iv) == "ScurveSigmasSummary_mean" ||
1339  (*iv) == "ScurveThresholdSummary_mean" || (*iv) == "Gain1d_RMS" || (*iv) == "GainChi2NDF1d_RMS" ||
1340  (*iv) == "GainChi2Prob1d_RMS" || (*iv) == "Pedestal1d_RMS" || (*iv) == "GainNPoints1d_mean" ||
1341  (*iv) == "GainNPoints1d_RMS" || (*iv) == "GainHighPoint1d_mean" ||
1342  (*iv) == "GainHighPoint1d_RMS" || (*iv) == "GainLowPoint1d_mean" ||
1343  (*iv) == "GainLowPoint1d_RMS" || (*iv) == "GainEndPoint1d_mean" || (*iv) == "GainEndPoint1d_RMS" ||
1344  (*iv) == "GainFitResult2d_mean" || (*iv) == "GainFitResult2d_RMS" ||
1345  (*iv) == "GainDynamicRange2d_mean" || (*iv) == "GainDynamicRange2d_RMS" ||
1346  (*iv) == "GainSaturate2d_mean" || (*iv) == "GainSaturate2d_RMS" ||
1347  (*iv) == "ScurveChi2ProbSummary_RMS" || (*iv) == "ScurveFitResultSummary_RMS" ||
1348  (*iv) == "ScurveSigmasSummary_RMS" || (*iv) == "ScurveThresholdSummary_RMS" ||
1349  (*iv) == "pixelAliveSummary_mean" || (*iv) == "pixelAliveSummary_FracOfPerfectPix" ||
1350  (*iv) == "SiPixelErrorsCalibDigis_NCalibErrors")
1351  prefix = "SUMCAL";
1352  }
1353 
1354  if (first_subdir && !isUpgrade) {
1355  nbin = me->getTH1F()->GetNbinsX();
1356  string me_name = prefix + "_" + (*iv) + "_" + dir_name;
1357  if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
1358  me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
1359  else if (prefix == "SUMOFF" && dir_name == "Endcap")
1360  nbin = 96;
1361  else if (dir_name == "Endcap")
1362  nbin = 672;
1363  else if (prefix == "SUMOFF" && dir_name.find("HalfCylinder") != string::npos)
1364  nbin = 24;
1365  else if (dir_name.find("HalfCylinder") != string::npos)
1366  nbin = 168;
1367  else if (prefix == "SUMOFF" && dir_name.find("Disk") != string::npos)
1368  nbin = 12;
1369  else if (dir_name.find("Disk") != string::npos)
1370  nbin = 84;
1371  else if (dir_name.find("Blade") != string::npos)
1372  nbin = 7;
1373  getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
1374  } else if (first_subdir && isUpgrade) {
1375  nbin = me->getTH1F()->GetNbinsX();
1376  string me_name = prefix + "_" + (*iv) + "_" + dir_name;
1377  if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
1378  me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
1379  else if (prefix == "SUMOFF" && dir_name == "Endcap")
1380  nbin = 336;
1381  else if (dir_name == "Endcap")
1382  nbin = 672;
1383  else if (prefix == "SUMOFF" && dir_name.find("HalfCylinder") != string::npos)
1384  nbin = 84;
1385  else if (dir_name.find("HalfCylinder") != string::npos)
1386  nbin = 168;
1387  else if (prefix == "SUMOFF" && dir_name.find("Disk") != string::npos)
1388  nbin = 28;
1389  else if (dir_name.find("Disk") != string::npos)
1390  nbin = 56;
1391  else if (dir_name.find("Blade") != string::npos)
1392  nbin = 2;
1393  getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
1394  }
1395 
1396  for (vector<MonitorElement *>::const_iterator igm = gsum_mes.begin(); igm != gsum_mes.end(); igm++) {
1397  if ((*igm)->getName().find(var) != string::npos) {
1398  if (prefix == "SUMOFF")
1399  (*igm)->setAxisTitle("Blades", 1);
1400  else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1401  (*igm)->setAxisTitle("Digi charge [ADC]", 1);
1402  else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1403  (*igm)->setAxisTitle("Cluster charge [kilo electrons]", 1);
1404  else
1405  (*igm)->setAxisTitle("Modules", 1);
1406  string title = "";
1407  if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMOFF")
1408  title = "Total number of errors per Blade";
1409  else if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMRAW")
1410  title = "Total number of errors per Module";
1411  else if (prefix == "SUMOFF")
1412  title = "mean " + (*iv) + " per Blade";
1413  else if ((*igm)->getName().find("FREQ_") != string::npos)
1414  title = "NEvents with digis per Module";
1415  else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1416  title = "NDigis";
1417  else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1418  title = "NClusters";
1419  else
1420  title = "mean " + (*iv) + " per Module";
1421  (*igm)->setAxisTitle(title, 2);
1422  nbin_i = 0;
1423  if (!isUpgrade) {
1424  if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1425  nbin_subdir = 128;
1426  } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1427  nbin_subdir = 100;
1428  } else if ((*igm)->getName().find("Panel_") != string::npos) {
1429  nbin_subdir = 7;
1430  } else if ((*igm)->getName().find("Blade") != string::npos) {
1431  if ((*im).find("_1") != string::npos)
1432  nbin_subdir = 4;
1433  if ((*im).find("_2") != string::npos) {
1434  nbin_i = 4;
1435  nbin_subdir = 3;
1436  }
1437  } else if ((*igm)->getName().find("Disk") != string::npos) {
1438  nbin_i = ((cnt - 1) % 12) * 7;
1439  nbin_subdir = 7;
1440  } else if ((*igm)->getName().find("HalfCylinder") != string::npos) {
1441  if (prefix != "SUMOFF") {
1442  nbin_subdir = 84;
1443  if ((*im).find("_2") != string::npos)
1444  nbin_i = 84;
1445  } else {
1446  nbin_subdir = 12;
1447  if ((*im).find("_2") != string::npos)
1448  nbin_i = 12;
1449  }
1450  } else if ((*igm)->getName().find("Endcap") != string::npos) {
1451  if (prefix != "SUMOFF") {
1452  nbin_subdir = 168;
1453  if ((*im).find("_mO") != string::npos)
1454  nbin_i = 168;
1455  if ((*im).find("_pI") != string::npos)
1456  nbin_i = 336;
1457  if ((*im).find("_pO") != string::npos)
1458  nbin_i = 504;
1459  } else {
1460  nbin_subdir = 24;
1461  if ((*im).find("_mO") != string::npos)
1462  nbin_i = 24;
1463  if ((*im).find("_pI") != string::npos)
1464  nbin_i = 48;
1465  if ((*im).find("_pO") != string::npos)
1466  nbin_i = 72;
1467  }
1468  }
1469  } else if (isUpgrade) {
1470  if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1471  nbin_subdir = 128;
1472  } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1473  nbin_subdir = 100;
1474  } else if ((*igm)->getName().find("Panel_") != string::npos) {
1475  nbin_subdir = 2;
1476  } else if ((*igm)->getName().find("Blade") != string::npos) {
1477  if ((*im).find("_1") != string::npos)
1478  nbin_subdir = 1;
1479  if ((*im).find("_2") != string::npos) {
1480  nbin_i = 1;
1481  nbin_subdir = 1;
1482  }
1483  } else if ((*igm)->getName().find("Disk") != string::npos) {
1484  nbin_i = ((cnt - 1) % 28) * 2;
1485  nbin_subdir = 2;
1486  } else if ((*igm)->getName().find("HalfCylinder") != string::npos) {
1487  if (prefix != "SUMOFF") {
1488  nbin_subdir = 56;
1489  if ((*im).find("_2") != string::npos)
1490  nbin_i = 56;
1491  if ((*im).find("_3") != string::npos)
1492  nbin_i = 112;
1493  } else {
1494  nbin_subdir = 28;
1495  if ((*im).find("_2") != string::npos)
1496  nbin_i = 28;
1497  if ((*im).find("_3") != string::npos)
1498  nbin_i = 56;
1499  }
1500  } else if ((*igm)->getName().find("Endcap") != string::npos) {
1501  if (prefix != "SUMOFF") {
1502  nbin_subdir = 168;
1503  if ((*im).find("_mO") != string::npos)
1504  nbin_i = 168;
1505  if ((*im).find("_pI") != string::npos)
1506  nbin_i = 336;
1507  if ((*im).find("_pO") != string::npos)
1508  nbin_i = 504;
1509  } else {
1510  nbin_subdir = 84;
1511  if ((*im).find("_mO") != string::npos)
1512  nbin_i = 84;
1513  if ((*im).find("_pI") != string::npos)
1514  nbin_i = 168;
1515  if ((*im).find("_pO") != string::npos)
1516  nbin_i = 252;
1517  }
1518  }
1519  }
1520 
1521  if ((*igm)->getName().find("ndigisFREQ") == string::npos) {
1522  if (((*igm)->getName().find("adcCOMB") != string::npos &&
1523  me->getName().find("adcCOMB") != string::npos) ||
1524  ((*igm)->getName().find("chargeCOMB") != string::npos &&
1525  me->getName().find("chargeCOMB") != string::npos)) {
1526  (*igm)->getTH1F()->Add(me->getTH1F());
1527  } else if (((*igm)->getName().find("charge_") != string::npos &&
1528  (*igm)->getName().find("Track_") == string::npos &&
1529  me->getName().find("charge_") != string::npos &&
1530  me->getName().find("Track_") == string::npos) ||
1531  ((*igm)->getName().find("nclusters_") != string::npos &&
1532  (*igm)->getName().find("Track_") == string::npos &&
1533  me->getName().find("nclusters_") != string::npos &&
1534  me->getName().find("Track_") == string::npos) ||
1535  ((*igm)->getName().find("size_") != string::npos &&
1536  (*igm)->getName().find("Track_") == string::npos &&
1537  me->getName().find("size_") != string::npos &&
1538  me->getName().find("Track_") == string::npos) ||
1539  ((*igm)->getName().find("charge_OffTrack_") != string::npos &&
1540  me->getName().find("charge_OffTrack_") != string::npos) ||
1541  ((*igm)->getName().find("nclusters_OffTrack_") != string::npos &&
1542  me->getName().find("nclusters_OffTrack_") != string::npos) ||
1543  ((*igm)->getName().find("size_OffTrack_") != string::npos &&
1544  me->getName().find("size_OffTrack_") != string::npos) ||
1545  ((*igm)->getName().find("charge_OnTrack_") != string::npos &&
1546  me->getName().find("charge_OnTrack_") != string::npos) ||
1547  ((*igm)->getName().find("nclusters_OnTrack_") != string::npos &&
1548  me->getName().find("nclusters_OnTrack_") != string::npos) ||
1549  ((*igm)->getName().find("size_OnTrack_") != string::npos &&
1550  me->getName().find("size_OnTrack_") != string::npos) ||
1551  ((*igm)->getName().find("charge_") == string::npos &&
1552  (*igm)->getName().find("nclusters_") == string::npos &&
1553  (*igm)->getName().find("size_") == string::npos)) {
1554  for (int k = 1; k < nbin_subdir + 1; k++)
1555  if (me->getBinContent(k) > 0)
1556  (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1557  }
1558  } else if (me->getName().find("ndigisFREQ") != string::npos) {
1559  for (int k = 1; k < nbin_subdir + 1; k++)
1560  if (me->getBinContent(k) > 0)
1561  (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1562  }
1563  // }// for
1564  }
1565  }
1566  }
1567  }
1568  }
1569 
1570  first_subdir = false; // We are done processing the first directory, we
1571  // don't add any new MEs in the future passes.
1572  } // end for it (subdirs)
1573 }
1574 //=============================================================================================================
1575 //
1576 // -- Get Summary ME
1577 //
1579  DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, int nbin, string &me_name, vector<MonitorElement *> &mes) {
1580  // printing cout<<"Entering SiPixelActionExecutor::getGrandSummaryME for:
1581  // "<<me_name<<endl;
1582  if ((iBooker.pwd()).find("Pixel") == string::npos)
1583  return; // If one doesn't find pixel
1584  vector<string> contents = iGetter.getMEs();
1585 
1586  for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1587  // printing cout<<"in grand summary me: "<<me_name<<","<<(*it)<<endl;
1588  if ((*it).find(me_name) == 0) {
1589  string fullpathname = iBooker.pwd() + "/" + me_name;
1590  MonitorElement *me = iGetter.get(fullpathname);
1591 
1592  if (me) {
1593  me->Reset();
1594  mes.push_back(me);
1595  return;
1596  }
1597  }
1598  }
1599 
1600  MonitorElement *temp_me(nullptr);
1601  if (me_name.find("ALLMODS_adcCOMB_") != string::npos)
1602  temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 128, 0, 256);
1603  else if (me_name.find("ALLMODS_chargeCOMB_") != string::npos)
1604  temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 100, 0, 200);
1605  else
1606  temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), nbin, 1., nbin + 1.);
1607  if (temp_me)
1608  mes.push_back(temp_me);
1609 
1610  // if(temp_me) cout<<"finally found grand ME: "<<me_name<<endl;
1611 }
1612 
1613 //=============================================================================================================
1614 //
1615 // -- Get Summary ME
1616 //
1618  DQMStore::IGetter &iGetter,
1619  string me_name,
1620  bool isUpgrade) {
1621  // printing cout<<"Entering SiPixelActionExecutor::getSummaryME for:
1622  // "<<me_name<<endl;
1623  MonitorElement *me = nullptr;
1624  if ((iBooker.pwd()).find("Pixel") == string::npos)
1625  return me;
1626  vector<string> contents = iGetter.getMEs();
1627 
1628  for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1629  if ((*it).find(me_name) == 0) {
1630  string fullpathname = iBooker.pwd() + "/" + (*it);
1631  me = iGetter.get(fullpathname);
1632  if (me) {
1633  me->Reset();
1634  return me;
1635  }
1636  }
1637  }
1638  contents.clear();
1639  if (!isUpgrade) {
1640  if (me_name.find("SUMOFF") == string::npos) {
1641  if (me_name.find("Blade_") != string::npos)
1642  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 7, 1., 8.);
1643  else
1644  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 4, 1., 5.);
1645  } else if (me_name.find("Layer_1") != string::npos) {
1646  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 10, 1., 11.);
1647  } else if (me_name.find("Layer_2") != string::npos) {
1648  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 16, 1., 17.);
1649  } else if (me_name.find("Layer_3") != string::npos) {
1650  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 22, 1., 23.);
1651  } else if (me_name.find("Disk_") != string::npos) {
1652  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 12, 1., 13.);
1653  }
1654  } // endifNOTUpgrade
1655  else if (isUpgrade) {
1656  if (me_name.find("SUMOFF") == string::npos) {
1657  if (me_name.find("Blade_") != string::npos)
1658  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 2, 1., 3.);
1659  else
1660  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 1, 1., 2.);
1661  } else if (me_name.find("Layer_1") != string::npos) {
1662  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 6, 1., 7.);
1663  } else if (me_name.find("Layer_2") != string::npos) {
1664  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 14, 1., 15.);
1665  } else if (me_name.find("Layer_3") != string::npos) {
1666  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 22, 1., 23.);
1667  } else if (me_name.find("Layer_4") != string::npos) {
1668  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 32, 1., 33.);
1669  } else if (me_name.find("Disk_") != string::npos) {
1670  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 28, 1., 29.);
1671  }
1672  } // endifUpgrade
1673 
1674  return me;
1675 }
1676 
1677 //=============================================================================================================
1679  DQMStore::IGetter &iGetter,
1680  string me_name) {
1681  // printing cout<<"Entering SiPixelActionExecutor::getFEDSummaryME..."<<endl;
1682  MonitorElement *me = nullptr;
1683  if ((iBooker.pwd()).find("Pixel") == string::npos)
1684  return me;
1685  vector<string> contents = iGetter.getMEs();
1686 
1687  for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1688  if ((*it).find(me_name) == 0) {
1689  string fullpathname = iBooker.pwd() + "/" + (*it);
1690 
1691  me = iGetter.get(fullpathname);
1692 
1693  if (me) {
1694  me->Reset();
1695  return me;
1696  }
1697  }
1698  }
1699  contents.clear();
1700  me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 40, -0.5, 39.5);
1701 
1702  return me;
1703 }
1704 
1705 //=============================================================================================================
1707  DQMStore::IGetter &iGetter,
1708  bool hiRes,
1709  bool isbarrel) // Polymorphism
1710 {
1711  if (Tier0Flag_)
1712  return;
1713  vector<string> subdirs = iGetter.getSubdirs();
1714  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1715  if (isbarrel && (*it).find("Barrel") == string::npos)
1716  continue;
1717  if (!isbarrel && (*it).find("Endcap") == string::npos)
1718  continue;
1719 
1720  if ((*it).find("Module_") != string::npos)
1721  continue;
1722  if ((*it).find("Panel_") != string::npos)
1723  continue;
1724  if ((*it).find("Ladder_") != string::npos)
1725  continue;
1726  if ((*it).find("Blade_") != string::npos)
1727  continue;
1728  if ((*it).find("Layer_") != string::npos)
1729  continue;
1730  if ((*it).find("Disk_") != string::npos)
1731  continue;
1732  iBooker.cd(*it);
1733  iGetter.cd(*it);
1734  bookOccupancyPlots(iBooker, iGetter, hiRes, isbarrel);
1735  if (!hiRes) {
1736  // occupancyprinting cout<<"booking low res barrel occ plot now!"<<endl;
1737  OccupancyMap = iBooker.book2D((isbarrel ? "barrelOccupancyMap" : "endcapOccupancyMap"),
1738  "Barrel Digi Occupancy Map (4 pix per bin)",
1739  isbarrel ? 208 : 130,
1740  0.,
1741  isbarrel ? 416. : 260.,
1742  80,
1743  0.,
1744  160.);
1745  } else {
1746  // occupancyprinting cout<<"booking high res barrel occ plot now!"<<endl;
1747  OccupancyMap = iBooker.book2D((isbarrel ? "barrelOccupancyMap" : "endcapOccupancyMap"),
1748  "Barrel Digi Occupancy Map (1 pix per bin)",
1749  isbarrel ? 416 : 260,
1750  0.,
1751  isbarrel ? 416. : 260.,
1752  160,
1753  0.,
1754  160.);
1755  }
1756  OccupancyMap->setAxisTitle("Columns", 1);
1757  OccupancyMap->setAxisTitle("Rows", 2);
1758 
1759  iBooker.goUp();
1760  iGetter.setCurrentFolder(iBooker.pwd());
1761  }
1762 }
1763 //=============================================================================================================
1765  if (Tier0Flag_)
1766  return;
1767  // Barrel
1768  iGetter.cd();
1769  iBooker.cd();
1770  iGetter.setCurrentFolder("Pixel");
1771  iBooker.setCurrentFolder("Pixel");
1772  this->bookOccupancyPlots(iBooker, iGetter, hiRes, true);
1773 
1774  // Endcap
1775  iGetter.cd();
1776  iBooker.cd();
1777  iGetter.setCurrentFolder("Pixel");
1778  iBooker.setCurrentFolder("Pixel");
1779  this->bookOccupancyPlots(iBooker, iGetter, hiRes, false);
1780 }
1781 
1783  // std::cout<<"entering SiPixelActionExecutor::createOccupancy..."<<std::endl;
1784  if (Tier0Flag_)
1785  return;
1786  iBooker.cd();
1787  iGetter.cd();
1788  fillOccupancy(iBooker, iGetter, true);
1789  iBooker.cd();
1790  iGetter.cd();
1791  fillOccupancy(iBooker, iGetter, false);
1792  iBooker.cd();
1793  iGetter.cd();
1794 
1795  // std::cout<<"leaving SiPixelActionExecutor::createOccupancy..."<<std::endl;
1796 }
1797 
1798 //=============================================================================================================
1799 
1801  // occupancyprinting cout<<"entering
1802  // SiPixelActionExecutor::fillOccupancy..."<<std::endl;
1803  if (Tier0Flag_)
1804  return;
1805  string currDir = iBooker.pwd();
1806  string dname = currDir.substr(currDir.find_last_of('/') + 1);
1807 
1808  if (dname.find("Layer_") != string::npos || dname.find("Disk_") != string::npos) {
1809  vector<string> meVec = iGetter.getMEs();
1810  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
1811  string full_path = currDir + "/" + (*it);
1812  if (full_path.find("hitmap_siPixelDigis") != string::npos) { // If we have the hitmap ME
1813  MonitorElement *me = iGetter.get(full_path);
1814  if (!me)
1815  continue;
1816  string path = full_path;
1817  while (path.find_last_of('/') != 5) // Stop before Pixel/
1818  {
1819  path = path.substr(0, path.find_last_of('/'));
1820  // cout << "\t" <<
1821  // path
1822  //<< endl;
1823  OccupancyMap = iGetter.get(path + "/" + (isbarrel ? "barrel" : "endcap") + "OccupancyMap");
1824 
1825  if (OccupancyMap) {
1826  for (int i = 1; i != me->getNbinsX() + 1; i++)
1827  for (int j = 1; j != me->getNbinsY() + 1; j++) {
1828  float previous = OccupancyMap->getBinContent(i, j);
1829  OccupancyMap->setBinContent(i, j, previous + me->getBinContent(i, j));
1830  }
1831  OccupancyMap->getTH2F()->SetEntries(OccupancyMap->getTH2F()->Integral());
1832  }
1833  }
1834  }
1835  }
1836  } else {
1837  vector<string> subdirs = iGetter.getSubdirs();
1838  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1839  iGetter.cd(*it);
1840  iBooker.cd(*it);
1841  if (*it != "Pixel" &&
1842  ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
1843  continue;
1844  fillOccupancy(iBooker, iGetter, isbarrel);
1845  iBooker.goUp();
1846  iGetter.setCurrentFolder(iBooker.pwd());
1847  }
1848  }
1849 
1850  // occupancyprinting cout<<"leaving
1851  // SiPixelActionExecutor::fillOccupancy..."<<std::endl;
1852 }
1853 
1854 //=============================================================================================================
1855 
1857  // occupancyprinting cout<<"entering
1858  // SiPixelActionExecutor::normaliseAvDigiOcc..."<<std::endl;
1859 
1860  iGetter.cd();
1861 
1862  MonitorElement *roccupancyPlot = iGetter.get("Pixel/averageDigiOccupancy");
1863 
1864  float totalDigisBPIX = 0.;
1865  float totalDigisFPIX = 0.;
1866  for (int i = 1; i != 41; i++) {
1867  if (i < 33)
1868  totalDigisBPIX += roccupancyPlot->getBinContent(i);
1869  else
1870  totalDigisFPIX += roccupancyPlot->getBinContent(i);
1871  }
1872  float averageBPIXOcc = totalDigisBPIX / 32.;
1873  float averageFPIXOcc = totalDigisFPIX / 8.;
1874  for (int i = 1; i != 41; i++) {
1875  if (i < 33)
1876  roccupancyPlot->setBinContent(i, averageBPIXOcc != 0. ? roccupancyPlot->getBinContent(i) / averageBPIXOcc : 0.);
1877  else
1878  roccupancyPlot->setBinContent(i, averageFPIXOcc != 0. ? roccupancyPlot->getBinContent(i) / averageFPIXOcc : 0.);
1879  }
1880 
1881  iGetter.setCurrentFolder(iBooker.pwd());
1882 }
1883 
1884 //=============================================================================================================
1885 
1887  DQMStore::IGetter &iGetter,
1888  int lumisec) {
1889  iGetter.cd();
1890 
1891  MonitorElement *avgfedDigiOccvsLumi = iGetter.get("Pixel/avgfedDigiOccvsLumi");
1892 
1893  float totalDigisBPIX = 0.;
1894  float totalDigisFPIX = 0.;
1895  for (int i = 1; i != 41; i++) {
1896  if (i < 33)
1897  totalDigisBPIX += avgfedDigiOccvsLumi->getBinContent(lumisec, i);
1898  else
1899  totalDigisFPIX += avgfedDigiOccvsLumi->getBinContent(lumisec, i);
1900  }
1901  float averageBPIXOcc = totalDigisBPIX / 32.;
1902  float averageFPIXOcc = totalDigisFPIX / 8.;
1903  for (int i = 1; i != 41; i++) {
1904  if (i < 33) {
1905  avgfedDigiOccvsLumi->setBinContent(
1906  lumisec, i, averageBPIXOcc != 0. ? avgfedDigiOccvsLumi->getBinContent(lumisec, i) / averageBPIXOcc : 0.);
1907  } else {
1908  avgfedDigiOccvsLumi->setBinContent(
1909  lumisec, i, averageFPIXOcc != 0. ? avgfedDigiOccvsLumi->getBinContent(lumisec, i) / averageFPIXOcc : 0.);
1910  }
1911  }
1912 
1913  iGetter.setCurrentFolder(iBooker.pwd());
1914 }
1915 
1916 //=============================================================================================================
1917 
1919  // Barrel
1920  iBooker.cd();
1921  iBooker.setCurrentFolder("Pixel/Barrel");
1922  if (!isUpgrade) {
1923  if (Tier0Flag_) {
1924  HitEfficiency_L1 = iBooker.book2D(
1925  "HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;Module;Ladder", 9, -4.5, 4.5, 21, -10.5, 10.5);
1926  HitEfficiency_L2 = iBooker.book2D(
1927  "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;Module;Ladder", 9, -4.5, 4.5, 33, -16.5, 16.5);
1928  HitEfficiency_L3 = iBooker.book2D(
1929  "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;Module;Ladder", 9, -4.5, 4.5, 45, -22.5, 22.5);
1930  } else {
1931  HitEfficiency_L1 = iBooker.book2D(
1932  "HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;Module;Ladder", 9, -4.5, 4.5, 21, -10.5, 10.5);
1933  HitEfficiency_L2 = iBooker.book2D(
1934  "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;Module;Ladder", 9, -4.5, 4.5, 33, -16.5, 16.5);
1935  HitEfficiency_L3 = iBooker.book2D(
1936  "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;Module;Ladder", 9, -4.5, 4.5, 45, -22.5, 22.5);
1937  }
1938  } // endifNOTUpgrade
1939  else if (isUpgrade) {
1940  if (Tier0Flag_) {
1942  iBooker.book2D("HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;z-side;Ladder", 2, -1., 1., 12, -6., 6.);
1943  HitEfficiency_L2 = iBooker.book2D(
1944  "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;z-side;Ladder", 2, -1., 1., 28, -14., 14.);
1945  HitEfficiency_L3 = iBooker.book2D(
1946  "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;z-side;Ladder", 2, -1., 1., 44, -22., 22.);
1947  HitEfficiency_L4 = iBooker.book2D(
1948  "HitEfficiency_L4", "Hit Efficiency in Barrel_Layer4;z-side;Ladder", 2, -1., 1., 64, -32., 32.);
1949  } else {
1951  iBooker.book2D("HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;Module;Ladder", 8, -4., 4., 12, -6., 6.);
1952  HitEfficiency_L2 = iBooker.book2D(
1953  "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;Module;Ladder", 8, -4., 4., 28, -14., 14.);
1954  HitEfficiency_L3 = iBooker.book2D(
1955  "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;Module;Ladder", 8, -4., 4., 44, -22., 22.);
1956  HitEfficiency_L4 = iBooker.book2D(
1957  "HitEfficiency_L4", "Hit Efficiency in Barrel_Layer4;Module;Ladder", 8, -4., 4., 64, -32., 32.);
1958  }
1959  } // endifUpgrade
1960  // Endcap
1961  iBooker.cd();
1962  iBooker.setCurrentFolder("Pixel/Endcap");
1963  if (!isUpgrade) {
1964  if (Tier0Flag_) {
1965  HitEfficiency_Dp1 = iBooker.book2D(
1966  "HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1967  HitEfficiency_Dp2 = iBooker.book2D(
1968  "HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1969  HitEfficiency_Dm1 = iBooker.book2D(
1970  "HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1971  HitEfficiency_Dm2 = iBooker.book2D(
1972  "HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1973  } else {
1974  HitEfficiency_Dp1 = iBooker.book2D(
1975  "HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1976  HitEfficiency_Dp2 = iBooker.book2D(
1977  "HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1978  HitEfficiency_Dm1 = iBooker.book2D(
1979  "HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1980  HitEfficiency_Dm2 = iBooker.book2D(
1981  "HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1982  }
1983  } else if (isUpgrade) {
1984  if (Tier0Flag_) {
1986  iBooker.book2D("HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blades;", 28, -17., 11., 1, 0., 1.);
1988  iBooker.book2D("HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blades;", 28, -17., 11., 1, 0., 1.);
1990  iBooker.book2D("HitEfficiency_Dp3", "Hit Efficiency in Endcap_Disk_p3;Blades;", 28, -17., 11., 1, 0., 1.);
1992  iBooker.book2D("HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blades;", 28, -17., 11., 1, 0., 1.);
1994  iBooker.book2D("HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;Blades;", 28, -17., 11., 1, 0., 1.);
1996  iBooker.book2D("HitEfficiency_Dm3", "Hit Efficiency in Endcap_Disk_m3;Blades;", 28, -17., 11., 1, 0., 1.);
1997  } else {
1998  HitEfficiency_Dp1 = iBooker.book2D(
1999  "HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2000  HitEfficiency_Dp2 = iBooker.book2D(
2001  "HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2002  HitEfficiency_Dp3 = iBooker.book2D(
2003  "HitEfficiency_Dp3", "Hit Efficiency in Endcap_Disk_p3;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2004  HitEfficiency_Dm1 = iBooker.book2D(
2005  "HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2006  HitEfficiency_Dm2 = iBooker.book2D(
2007  "HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2008  HitEfficiency_Dm3 = iBooker.book2D(
2009  "HitEfficiency_Dm3", "Hit Efficiency in Endcap_Disk_m3;Blades;Modules", 28, -17., 11., 2, 1., 3.);
2010  }
2011  } // endif(isUpgrade)
2012  iBooker.cd();
2013  iBooker.cd("Pixel/");
2014  string bins[] = {"Layer1", "Layer2", "Layer3", "Disk1+", "Disk2+", "Disk1-", "Disk2-"};
2015  HitEfficiencySummary = iBooker.book1D("HitEfficiencySummary", "Hit efficiency per sub detector", 7, 0, 7);
2016  HitEfficiencySummary->setAxisTitle("Sub Detector", 1);
2017  HitEfficiencySummary->setAxisTitle("Efficiency (%)", 2);
2018  for (int i = 1; i < 8; i++) {
2020  }
2021 }
2022 
2023 //=============================================================================================================
2024 
2026  // std::cout<<"entering
2027  // SiPixelActionExecutor::createEfficiency..."<<std::endl;
2028  iGetter.cd();
2029  iBooker.cd();
2030  fillEfficiency(iBooker, iGetter, true, isUpgrade); // Barrel
2031  iGetter.cd();
2032  iBooker.cd();
2033  fillEfficiency(iBooker, iGetter, false, isUpgrade); // Endcap
2034  iGetter.cd();
2035  iBooker.cd();
2036  // std::cout<<"leaving SiPixelActionExecutor::createEfficiency..."<<std::endl;
2037 }
2038 
2039 //=============================================================================================================
2040 
2042  int biny_ = 0;
2043  string lad = dname_.substr(dname_.find("Ladder_") + 7, 2);
2044  if (dname_.find(lad) != string::npos) {
2045  biny_ = atoi(lad.c_str());
2046  }
2047  return biny_;
2048 }
2049 
2050 //=============================================================================================================
2051 
2053  int binx_ = 0;
2054  string blad = dname_.substr(dname_.find("Blade_") + 6, 2);
2055  if (dname_.find(blad) != string::npos) {
2056  binx_ = atoi(blad.c_str());
2057  }
2058  return binx_;
2059 }
2060 
2061 //=============================================================================================================
2062 
2064  DQMStore::IGetter &iGetter,
2065  bool isbarrel,
2066  bool isUpgrade) {
2067  // cout<<"entering SiPixelActionExecutor::fillEfficiency..."<<std::endl;
2068  string currDir = iBooker.pwd();
2069  string dname = currDir.substr(currDir.find_last_of('/') + 1);
2070  // cout<<"currDir= "<<currDir<< " , dname= "<<dname<<std::endl;
2071 
2072  if (Tier0Flag_) { // Offline
2073  if (isbarrel && dname.find("Ladder_") != string::npos) {
2074  if (!isUpgrade) {
2075  vector<string> meVec = iGetter.getMEs();
2076  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2077  string full_path = currDir + "/" + (*it);
2078 
2079  if (full_path.find("missingMod_") != string::npos) { // If we have missing hits ME
2080 
2081  // Get the MEs that contain missing and valid hits
2082  MonitorElement *missing = iGetter.get(full_path);
2083  if (!missing)
2084  continue;
2085  string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2086  MonitorElement *valid = iGetter.get(new_path);
2087  if (!valid)
2088  continue;
2089  int binx = 0;
2090  int biny = 0;
2091  // get the ladder number
2092  biny = getLadder(dname); // Current
2093  if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2094  biny = -biny;
2095  }
2096  const int nMod = 4;
2097  for (int i = 1; i < nMod + 1; i++) {
2098  float hitEfficiency = -1.0;
2099  float missingHits = 0;
2100  float validHits = 0;
2101  binx = i; // Module
2102  if (currDir.find("Shell_m") != string::npos)
2103  binx = -binx;
2104 
2105  missingHits = missing->getBinContent(i);
2106  validHits = valid->getBinContent(i);
2107  if (validHits + missingHits > 0.)
2108  hitEfficiency = validHits / (validHits + missingHits);
2109 
2110  if (currDir.find("Layer_1") != string::npos) {
2111  HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2112  if (HitEfficiency_L1)
2113  HitEfficiency_L1->setBinContent(HitEfficiency_L1->getTH2F()->FindBin(binx, biny),
2114  (float)hitEfficiency);
2115  } else if (currDir.find("Layer_2") != string::npos) {
2116  HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2117  if (HitEfficiency_L2)
2118  HitEfficiency_L2->setBinContent(HitEfficiency_L2->getTH2F()->FindBin(binx, biny),
2119  (float)hitEfficiency);
2120  } else if (currDir.find("Layer_3") != string::npos) {
2121  HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2122  if (HitEfficiency_L3)
2123  HitEfficiency_L3->setBinContent(HitEfficiency_L3->getTH2F()->FindBin(binx, biny),
2124  (float)hitEfficiency);
2125  }
2126  }
2127  }
2128  }
2129  } // endifNOTUpgradeInBPix
2130  else if (isUpgrade) {
2131  vector<string> meVec = iGetter.getMEs();
2132  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2133  string full_path = currDir + "/" + (*it);
2134  if (full_path.find("missing_") != string::npos) { // If we have missing hits ME
2135  MonitorElement *me = iGetter.get(full_path);
2136  if (!me)
2137  continue;
2138  float missingHits = me->getEntries();
2139  string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2140  me = iGetter.get(new_path);
2141  if (!me)
2142  continue;
2143  float validHits = me->getEntries();
2144  float hitEfficiency = -1.;
2145  if (validHits + missingHits > 0.)
2146  hitEfficiency = validHits / (validHits + missingHits);
2147  int binx = 0;
2148  int biny = 0;
2149  biny = getLadder(dname);
2150  if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2151  biny = -biny;
2152  }
2153  if (currDir.find("Shell_m") != string::npos) {
2154  binx = 1;
2155  } else {
2156  binx = 2;
2157  } // x-axis: z-side
2158  if (currDir.find("Layer_1") != string::npos) {
2159  HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2160  if (HitEfficiency_L1)
2161  HitEfficiency_L1->setBinContent(binx, biny, (float)hitEfficiency);
2162  } else if (currDir.find("Layer_2") != string::npos) {
2163  HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2164  if (HitEfficiency_L2)
2165  HitEfficiency_L2->setBinContent(binx, biny, (float)hitEfficiency);
2166  } else if (currDir.find("Layer_3") != string::npos) {
2167  HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2168  if (HitEfficiency_L3)
2169  HitEfficiency_L3->setBinContent(binx, biny, (float)hitEfficiency);
2170  } else if (currDir.find("Layer_4") != string::npos) {
2171  HitEfficiency_L4 = iGetter.get("Pixel/Barrel/HitEfficiency_L4");
2172  if (HitEfficiency_L4)
2173  HitEfficiency_L4->setBinContent(binx, biny, (float)hitEfficiency);
2174  }
2175  }
2176  }
2177  } // endifUpgradeInBPix
2178  } else if (!isbarrel && dname.find("Blade_") != string::npos && !isUpgrade) {
2179  vector<string> meVec = iGetter.getMEs();
2180  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2181  string full_path = currDir + "/" + (*it);
2182  if (full_path.find("missing_") != string::npos) { // If we have missing hits ME
2183  MonitorElement *missing = iGetter.get(full_path);
2184  if (!missing)
2185  continue;
2186  // float missingHits = missing->getEntries();
2187  string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2188  MonitorElement *valid = iGetter.get(new_path);
2189  if (!valid)
2190  continue;
2191  // float validHits = valid->getEntries();
2192  int binx = 0;
2193  int biny = 0;
2194  binx = getBlade(dname);
2195  if (currDir.find("HalfCylinder_mI") != string::npos || currDir.find("HalfCylinder_pI") != string::npos) {
2196  binx = binx + 14;
2197  } else {
2198  binx = 13 - binx;
2199  }
2200  const int nPanel = 2;
2201  for (int i = 1; i < nPanel + 1; i++) {
2202  float hitEfficiency = -1.;
2203  float missingHits = 0;
2204  float validHits = 0;
2205  biny = i;
2206  missingHits = missing->getBinContent(i);
2207  validHits = valid->getBinContent(i);
2208  if (validHits + missingHits > 0.)
2209  hitEfficiency = validHits / (validHits + missingHits);
2210  if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2211  HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2212  if (HitEfficiency_Dm1)
2213  HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2214  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2215  HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2216  if (HitEfficiency_Dm2)
2217  HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2218  } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2219  HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2220  if (HitEfficiency_Dp1)
2221  HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2222  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2223  HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2224  if (HitEfficiency_Dp2)
2225  HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2226  }
2227  } // EndOfFor
2228  }
2229  }
2230  } else if (!isbarrel && dname.find("Blade_") != string::npos && isUpgrade) {
2231  vector<string> meVec = iGetter.getMEs();
2232  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2233  string full_path = currDir + "/" + (*it);
2234  if (full_path.find("missing_") != string::npos) { // If we have missing hits ME
2235  MonitorElement *me = iGetter.get(full_path);
2236  if (!me)
2237  continue;
2238  float missingHits = me->getEntries();
2239  string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2240  me = iGetter.get(new_path);
2241  if (!me)
2242  continue;
2243  float validHits = me->getEntries();
2244  float hitEfficiency = -1.;
2245  if (validHits + missingHits > 0.)
2246  hitEfficiency = validHits / (validHits + missingHits);
2247  int binx = 0;
2248  int biny = 1;
2249  binx = getBlade(dname);
2250  if (currDir.find("HalfCylinder_mI") != string::npos || currDir.find("HalfCylinder_pI") != string::npos) {
2251  binx = binx + 12;
2252  } else {
2253  if (binx == 1)
2254  binx = 17;
2255  else if (binx == 2)
2256  binx = 16;
2257  else if (binx == 3)
2258  binx = 15;
2259  else if (binx == 4)
2260  binx = 14;
2261  else if (binx == 5)
2262  binx = 13;
2263  else if (binx == 6)
2264  binx = 12;
2265  else if (binx == 7)
2266  binx = 11;
2267  else if (binx == 8)
2268  binx = 10;
2269  else if (binx == 9)
2270  binx = 9;
2271  else if (binx == 10)
2272  binx = 8;
2273  else if (binx == 11)
2274  binx = 7;
2275  else if (binx == 12)
2276  binx = 6;
2277  else if (binx == 13)
2278  binx = 5;
2279  else if (binx == 14)
2280  binx = 4;
2281  else if (binx == 15)
2282  binx = 3;
2283  else if (binx == 16)
2284  binx = 2;
2285  else if (binx == 17)
2286  binx = 1;
2287  }
2288  if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2289  HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2290  if (HitEfficiency_Dm1)
2291  HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2292  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2293  HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2294  if (HitEfficiency_Dm2)
2295  HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2296  } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2297  HitEfficiency_Dm3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm3");
2298  if (HitEfficiency_Dm3)
2299  HitEfficiency_Dm3->setBinContent(binx, biny, (float)hitEfficiency);
2300  } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2301  HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2302  if (HitEfficiency_Dp1)
2303  HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2304  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2305  HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2306  if (HitEfficiency_Dp2)
2307  HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2308  } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2309  HitEfficiency_Dp3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp3");
2310  if (HitEfficiency_Dp3)
2311  HitEfficiency_Dp3->setBinContent(binx, biny, (float)hitEfficiency);
2312  }
2313  // std::cout<<"EFFI: "<<currDir<<" , x: "<<binx<<" , y:
2314  // "<<biny<<std::endl;
2315  }
2316  }
2317  } else {
2318  vector<string> subdirs = iGetter.getSubdirs();
2319  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
2320  iBooker.cd(*it);
2321  iGetter.cd(*it);
2322  if (*it != "Pixel" &&
2323  ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
2324  continue;
2325  fillEfficiency(iBooker, iGetter, isbarrel, isUpgrade);
2326  iBooker.goUp();
2327  iGetter.setCurrentFolder(iBooker.pwd());
2328  }
2329  }
2330  } else { // Online
2331  if (dname.find("Module_") != string::npos) {
2332  vector<string> meVec = iGetter.getMEs();
2333  for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2334  string full_path = currDir + "/" + (*it);
2335  if (full_path.find("missing_") != string::npos) { // If we have missing hits ME
2336  MonitorElement *me = iGetter.get(full_path);
2337  if (!me)
2338  continue;
2339  float missingHits = me->getEntries();
2340  string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2341  me = iGetter.get(new_path);
2342  if (!me)
2343  continue;
2344  float validHits = me->getEntries();
2345  float hitEfficiency = -1.;
2346  if (validHits + missingHits > 0.)
2347  hitEfficiency = validHits / (validHits + missingHits);
2348  int binx = 0;
2349  int biny = 0;
2350  if (isbarrel) {
2351  if (currDir.find("Shell_m") != string::npos) {
2352  if (currDir.find("Module_4") != string::npos) {
2353  binx = 1;
2354  } else if (currDir.find("Module_3") != string::npos) {
2355  binx = 2;
2356  }
2357  if (currDir.find("Module_2") != string::npos) {
2358  binx = 3;
2359  } else if (currDir.find("Module_1") != string::npos) {
2360  binx = 4;
2361  }
2362  } else if (currDir.find("Shell_p") != string::npos) {
2363  if (currDir.find("Module_1") != string::npos) {
2364  binx = 5;
2365  } else if (currDir.find("Module_2") != string::npos) {
2366  binx = 6;
2367  }
2368  if (currDir.find("Module_3") != string::npos) {
2369  binx = 7;
2370  } else if (currDir.find("Module_4") != string::npos) {
2371  binx = 8;
2372  }
2373  }
2374  if (!isUpgrade) {
2375  if (currDir.find("01") != string::npos) {
2376  biny = 1;
2377  } else if (currDir.find("02") != string::npos) {
2378  biny = 2;
2379  } else if (currDir.find("03") != string::npos) {
2380  biny = 3;
2381  } else if (currDir.find("04") != string::npos) {
2382  biny = 4;
2383  } else if (currDir.find("05") != string::npos) {
2384  biny = 5;
2385  } else if (currDir.find("06") != string::npos) {
2386  biny = 6;
2387  } else if (currDir.find("07") != string::npos) {
2388  biny = 7;
2389  } else if (currDir.find("08") != string::npos) {
2390  biny = 8;
2391  } else if (currDir.find("09") != string::npos) {
2392  biny = 9;
2393  } else if (currDir.find("10") != string::npos) {
2394  biny = 10;
2395  } else if (currDir.find("11") != string::npos) {
2396  biny = 11;
2397  } else if (currDir.find("12") != string::npos) {
2398  biny = 12;
2399  } else if (currDir.find("13") != string::npos) {
2400  biny = 13;
2401  } else if (currDir.find("14") != string::npos) {
2402  biny = 14;
2403  } else if (currDir.find("15") != string::npos) {
2404  biny = 15;
2405  } else if (currDir.find("16") != string::npos) {
2406  biny = 16;
2407  } else if (currDir.find("17") != string::npos) {
2408  biny = 17;
2409  } else if (currDir.find("18") != string::npos) {
2410  biny = 18;
2411  } else if (currDir.find("19") != string::npos) {
2412  biny = 19;
2413  } else if (currDir.find("20") != string::npos) {
2414  biny = 20;
2415  } else if (currDir.find("21") != string::npos) {
2416  biny = 21;
2417  } else if (currDir.find("22") != string::npos) {
2418  biny = 22;
2419  }
2420  if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2421  if (currDir.find("Layer_1") != string::npos) {
2422  biny = biny + 10;
2423  } else if (currDir.find("Layer_2") != string::npos) {
2424  biny = biny + 16;
2425  } else if (currDir.find("Layer_3") != string::npos) {
2426  biny = biny + 22;
2427  }
2428  }
2429  } else if (isUpgrade) {
2430  if (currDir.find("01") != string::npos) {
2431  biny = 1;
2432  } else if (currDir.find("02") != string::npos) {
2433  biny = 2;
2434  } else if (currDir.find("03") != string::npos) {
2435  biny = 3;
2436  } else if (currDir.find("04") != string::npos) {
2437  biny = 4;
2438  } else if (currDir.find("05") != string::npos) {
2439  biny = 5;
2440  } else if (currDir.find("06") != string::npos) {
2441  biny = 6;
2442  } else if (currDir.find("07") != string::npos) {
2443  biny = 7;
2444  } else if (currDir.find("08") != string::npos) {
2445  biny = 8;
2446  } else if (currDir.find("09") != string::npos) {
2447  biny = 9;
2448  } else if (currDir.find("10") != string::npos) {
2449  biny = 10;
2450  } else if (currDir.find("11") != string::npos) {
2451  biny = 11;
2452  } else if (currDir.find("12") != string::npos) {
2453  biny = 12;
2454  } else if (currDir.find("13") != string::npos) {
2455  biny = 13;
2456  } else if (currDir.find("14") != string::npos) {
2457  biny = 14;
2458  } else if (currDir.find("15") != string::npos) {
2459  biny = 15;
2460  } else if (currDir.find("16") != string::npos) {
2461  biny = 16;
2462  } else if (currDir.find("17") != string::npos) {
2463  biny = 17;
2464  } else if (currDir.find("18") != string::npos) {
2465  biny = 18;
2466  } else if (currDir.find("19") != string::npos) {
2467  biny = 19;
2468  } else if (currDir.find("20") != string::npos) {
2469  biny = 20;
2470  } else if (currDir.find("21") != string::npos) {
2471  biny = 21;
2472  } else if (currDir.find("22") != string::npos) {
2473  biny = 22;
2474  } else if (currDir.find("23") != string::npos) {
2475  biny = 23;
2476  } else if (currDir.find("24") != string::npos) {
2477  biny = 24;
2478  } else if (currDir.find("25") != string::npos) {
2479  biny = 25;
2480  } else if (currDir.find("25") != string::npos) {
2481  biny = 25;
2482  } else if (currDir.find("26") != string::npos) {
2483  biny = 26;
2484  } else if (currDir.find("27") != string::npos) {
2485  biny = 27;
2486  } else if (currDir.find("28") != string::npos) {
2487  biny = 28;
2488  } else if (currDir.find("29") != string::npos) {
2489  biny = 29;
2490  } else if (currDir.find("30") != string::npos) {
2491  biny = 30;
2492  } else if (currDir.find("31") != string::npos) {
2493  biny = 31;
2494  } else if (currDir.find("32") != string::npos) {
2495  biny = 32;
2496  }
2497  if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2498  if (currDir.find("Layer_1") != string::npos) {
2499  biny = biny + 6;
2500  } else if (currDir.find("Layer_2") != string::npos) {
2501  biny = biny + 14;
2502  } else if (currDir.find("Layer_3") != string::npos) {
2503  biny = biny + 22;
2504  } else if (currDir.find("Layer_4") != string::npos) {
2505  biny = biny + 32;
2506  }
2507  }
2508  }
2509  } else { // endcap
2510  if (!isUpgrade) {
2511  if (currDir.find("01") != string::npos) {
2512  binx = 1;
2513  } else if (currDir.find("02") != string::npos) {
2514  binx = 2;
2515  } else if (currDir.find("03") != string::npos) {
2516  binx = 3;
2517  } else if (currDir.find("04") != string::npos) {
2518  binx = 4;
2519  } else if (currDir.find("05") != string::npos) {
2520  binx = 5;
2521  } else if (currDir.find("06") != string::npos) {
2522  binx = 6;
2523  } else if (currDir.find("07") != string::npos) {
2524  binx = 7;
2525  } else if (currDir.find("08") != string::npos) {
2526  binx = 8;
2527  } else if (currDir.find("09") != string::npos) {
2528  binx = 9;
2529  } else if (currDir.find("10") != string::npos) {
2530  binx = 10;
2531  } else if (currDir.find("11") != string::npos) {
2532  binx = 11;
2533  } else if (currDir.find("12") != string::npos) {
2534  binx = 12;
2535  }
2536  if (currDir.find("HalfCylinder_mO") != string::npos || currDir.find("HalfCylinder_pO") != string::npos) {
2537  binx = binx + 12;
2538  }
2539  if (currDir.find("Panel_1/Module_1") != string::npos) {
2540  biny = 1;
2541  } else if (currDir.find("Panel_2/Module_1") != string::npos) {
2542  biny = 2;
2543  } else if (currDir.find("Panel_1/Module_2") != string::npos) {
2544  biny = 3;
2545  } else if (currDir.find("Panel_2/Module_2") != string::npos) {
2546  biny = 4;
2547  } else if (currDir.find("Panel_1/Module_3") != string::npos) {
2548  biny = 5;
2549  } else if (currDir.find("Panel_2/Module_3") != string::npos) {
2550  biny = 6;
2551  } else if (currDir.find("Panel_1/Module_4") != string::npos) {
2552  biny = 7;
2553  }
2554  } else if (isUpgrade) {
2555  if (currDir.find("01") != string::npos) {
2556  binx = 1;
2557  } else if (currDir.find("02") != string::npos) {
2558  binx = 2;
2559  } else if (currDir.find("03") != string::npos) {
2560  binx = 3;
2561  } else if (currDir.find("04") != string::npos) {
2562  binx = 4;
2563  } else if (currDir.find("05") != string::npos) {
2564  binx = 5;
2565  } else if (currDir.find("06") != string::npos) {
2566  binx = 6;
2567  } else if (currDir.find("07") != string::npos) {
2568  binx = 7;
2569  } else if (currDir.find("08") != string::npos) {
2570  binx = 8;
2571  } else if (currDir.find("09") != string::npos) {
2572  binx = 9;
2573  } else if (currDir.find("10") != string::npos) {
2574  binx = 10;
2575  } else if (currDir.find("11") != string::npos) {
2576  binx = 11;
2577  } else if (currDir.find("12") != string::npos) {
2578  binx = 12;
2579  } else if (currDir.find("13") != string::npos) {
2580  binx = 13;
2581  } else if (currDir.find("14") != string::npos) {
2582  binx = 14;
2583  } else if (currDir.find("15") != string::npos) {
2584  binx = 15;
2585  } else if (currDir.find("16") != string::npos) {
2586  binx = 16;
2587  } else if (currDir.find("17") != string::npos) {
2588  binx = 17;
2589  }
2590  if (currDir.find("HalfCylinder_mO") != string::npos || currDir.find("HalfCylinder_pO") != string::npos) {
2591  binx = binx + 17;
2592  }
2593  if (currDir.find("Panel_1/Module_1") != string::npos) {
2594  biny = 1;
2595  } else if (currDir.find("Panel_2/Module_1") != string::npos) {
2596  biny = 2;
2597  }
2598  } // endif(isUpgrade)
2599  }
2600 
2601  if (currDir.find("Layer_1") != string::npos) {
2602  HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2603  if (HitEfficiency_L1)
2604  HitEfficiency_L1->setBinContent(binx, biny, (float)hitEfficiency);
2605  } else if (currDir.find("Layer_2") != string::npos) {
2606  HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2607  if (HitEfficiency_L2)
2608  HitEfficiency_L2->setBinContent(binx, biny, (float)hitEfficiency);
2609  } else if (currDir.find("Layer_3") != string::npos) {
2610  HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2611  if (HitEfficiency_L3)
2612  HitEfficiency_L3->setBinContent(binx, biny, (float)hitEfficiency);
2613  } else if (isUpgrade && (currDir.find("Layer_4") != string::npos)) {
2614  HitEfficiency_L4 = iGetter.get("Pixel/Barrel/HitEfficiency_L4");
2615  if (HitEfficiency_L4)
2616  HitEfficiency_L4->setBinContent(binx, biny, (float)hitEfficiency);
2617  } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2618  HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2619  if (HitEfficiency_Dm1)
2620  HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2621  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2622  HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2623  if (HitEfficiency_Dm2)
2624  HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2625  } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2626  HitEfficiency_Dm3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm3");
2627  if (HitEfficiency_Dm3)
2628  HitEfficiency_Dm3->setBinContent(binx, biny, (float)hitEfficiency);
2629  } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2630  HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2631  if (HitEfficiency_Dp1)
2632  HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2633  } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2634  HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2635  if (HitEfficiency_Dp2)
2636  HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2637  } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2638  HitEfficiency_Dp3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp3");
2639  if (HitEfficiency_Dp3)
2640  HitEfficiency_Dp3->setBinContent(binx, biny, (float)hitEfficiency);
2641  }
2642  }
2643  }
2644  } else {
2645  // cout<<"finding subdirs now"<<std::endl;
2646  vector<string> subdirs = iGetter.getSubdirs();
2647  for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
2648  iBooker.cd(*it);
2649  iGetter.cd(*it);
2650  if (*it != "Pixel" &&
2651  ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
2652  continue;
2653  fillEfficiency(iBooker, iGetter, isbarrel, isUpgrade);
2654  iBooker.goUp();
2655  iGetter.setCurrentFolder(iBooker.pwd());
2656  }
2657  }
2658  } // end online/offline
2659  // cout<<"leaving SiPixelActionExecutor::fillEfficiency..."<<std::endl;
2660 }
2661 
2662 //=============================================================================================================
2663 
2665  // cout<<"entering
2666  // SiPixelActionExecutor::fillEfficiencySummary..."<<std::endl; First we get
2667  // the summary plot"
2668  if (!Tier0Flag_)
2669  return;
2670  HitEfficiencySummary = iGetter.get("Pixel/HitEfficiencySummary");
2671  // Now we will loop over the hit efficiency plots and fill it"
2672  string hitEfficiencyPostfix[] = {"L1", "L2", "L3", "Dp1", "Dp2", "Dm1", "Dm2"};
2673  std::vector<std::vector<float>> ignoreXBins = {
2674  {-4, 2}, {4, 4, -1, -3, 3, -4, -3, -2, -1, -4, -3, -2, -1, 1, -4}, {1, -4, 1}, {}, {}, {}, {}};
2675  std::vector<std::vector<float>> ignoreYBins = {
2676  {-9, -3}, {1, 16, 1, -13, -13, -5, -5, -5, -5, -6, -6, -6, -6, -8, -8}, {3, 14, 6}, {}, {}, {}, {}};
2677 
2678  for (int i = 0; i < 7; i++) {
2679  string subdetName = "Endcap/";
2680  if (i < 3)
2681  subdetName = "Barrel/";
2682  char meName[50];
2683  sprintf(meName, "Pixel/%sHitEfficiency_%s", subdetName.c_str(), hitEfficiencyPostfix[i].c_str());
2684  MonitorElement *tempHitEffMap = iGetter.get(meName);
2685  float totalEff = 0.;
2686  int totalBins = 0;
2687  TH1 *hitEffMap = tempHitEffMap->getTH1();
2688  for (int xBin = 1; xBin < tempHitEffMap->getNbinsX() + 1; xBin++) {
2689  if (fabs(hitEffMap->GetXaxis()->GetBinCenter(xBin)) < 1.)
2690  continue;
2691  for (int yBin = 1; yBin < tempHitEffMap->getNbinsY() + 1; yBin++) {
2692  if (fabs(hitEffMap->GetYaxis()->GetBinCenter(yBin)) < 0.5)
2693  continue;
2694  bool ignoreBin = false;
2695  for (unsigned int j = 0; j < ignoreXBins[i].size(); j++) {
2696  if (hitEffMap->GetXaxis()->GetBinCenter(xBin) == ignoreXBins[i][j] &&
2697  hitEffMap->GetYaxis()->GetBinCenter(yBin) == ignoreYBins[i][j]) {
2698  ignoreBin = true;
2699  break;
2700  }
2701  }
2702  if (ignoreBin)
2703  continue;
2704  if (!(tempHitEffMap->getBinContent(xBin, yBin) < 0.))
2705  totalEff += tempHitEffMap->getBinContent(xBin, yBin);
2706  totalBins++;
2707  }
2708  }
2709  float overalEff = 0.;
2710  // std::cout << i << " " << totalEff << " " << totalBins << std::endl;
2711  if (totalBins > 0)
2712  overalEff = totalEff / float(totalBins);
2713  HitEfficiencySummary->setBinContent(i + 1, overalEff);
2714  }
2715 }
void normaliseAvDigiOccVsLumi(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, int lumisec)
void getGrandSummaryME(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, int nbin, std::string &me_name, std::vector< MonitorElement *> &mes)
MonitorElement * HitEfficiency_Dp3
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
void createEfficiency(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isUpgrade)
virtual std::vector< std::string > getMEs() const
Definition: DQMStore.cc:759
virtual std::string pwd()
Definition: DQMStore.cc:20
MonitorElement * HitEfficiency_L4
void bookOccupancyPlots(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool hiRes, bool isbarrel)
MonitorElement * DEV_size_Barrel
MonitorElement * HitEfficiency_L3
SiPixelConfigParser * configParser_
MonitorElement * DEV_nclusters_Barrel
void fillGrandEndcapSummaryHistos(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::vector< std::string > &me_names, bool isUpgrade)
double isum
bool getMENamesForEndcapSummary(std::string &structure_name, std::vector< std::string > &me_names)
MonitorElement * HitEfficiency_Dm2
MonitorElement * HitEfficiency_L2
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
int getBlade(const std::string &dname)
missing
Definition: combine.py:5
void normaliseAvDigiOcc(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter)
bool getCalibType(int &u_freq)
void fillEfficiency(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isbarrel, bool isUpgrade)
void Fill(long long x)
virtual TH2F * getTH2F() const
bool getMENamesForGrandEndcapSummary(std::string &structure_name, std::vector< std::string > &me_names)
SiPixelConfigWriter * configWriter_
bool getFrequencyForGrandBarrelSummary(int &u_freq)
bool getFrequencyForEndcapSummary(int &u_freq)
bool getMENamesForFEDErrorSummary(std::string &structure_name, std::vector< std::string > &me_names)
void bookDeviations(DQMStore::IBooker &iBooker, bool isUpgrade)
T sqrt(T t)
Definition: SSEVec.h:19
void createSummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isUpgrade)
MonitorElement * DEV_adc_Endcap
bool getMENamesForGrandBarrelSummary(std::string &structure_name, std::vector< std::string > &me_names)
bool getFrequencyForBarrelSummary(int &u_freq)
void fillFEDErrorSummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::string dir_name, std::vector< std::string > &me_names)
bool getFrequencyForGrandEndcapSummary(int &u_freq)
MonitorElement * DEV_charge_Endcap
bool getMENamesForBarrelSummary(std::string &structure_name, std::vector< std::string > &me_names)
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)
int getLadder(const std::string &dname)
MonitorElement * getSummaryME(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::string me_name, bool isUpgrade)
void fillOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isbarrel)
MonitorElement * getFEDSummaryME(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::string me_name)
Log< level::Info, false > LogInfo
SiPixelActionExecutor(bool offlineXMLfile, bool Tier0Flag)
MonitorElement * DEV_charge_Barrel
MonitorElement * HitEfficiency_Dm3
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
bool getMessageLimitForQTests(int &u_freq)
MonitorElement * HitEfficiency_L1
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:212
MonitorElement * DEV_nclusters_Endcap
MonitorElement * HitEfficiency_Dp1
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:712
bool getSourceType(int &u_freq)
virtual TH1 * getTH1() const
MonitorElement * DEV_size_Endcap
int nlast
Definition: AMPTWrapper.h:57
MonitorElement * HitEfficiencySummary
std::string tname(const std::string &tableName, const std::string &schemaVersion)
void fillEfficiencySummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter)
void createOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter)
MonitorElement * HitEfficiency_Dp2
void getDocument(std::string filename)
bool getFrequencyForTrackerMap(int &u_freq)
void fillGrandBarrelSummaryHistos(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::vector< std::string > &me_names, bool isUpgrade)
void fillSummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::string dir_name, std::vector< std::string > &me_names, bool isbarrel, bool isUpgrade)
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * DEV_ndigis_Endcap
void GetBladeSubdirs(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, std::vector< std::string > &blade_subdirs)
rows
Definition: mysort.py:12
MonitorElement * HitEfficiency_Dm1
MonitorElement * DEV_ndigis_Barrel
void bookEfficiency(DQMStore::IBooker &iBooker, bool isUpgrade)
MonitorElement * DEV_adc_Barrel
virtual double getBinContent(int binx) const
get content of bin (1-D)
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
virtual DQM_DEPRECATED std::vector< std::string > getSubdirs() const
Definition: DQMStore.cc:739