File indexing completed on 2024-10-25 05:06:27
0001
0002
0003
0004 #include "DQM/SiPixelCommon/interface/SiPixelFolderOrganizer.h"
0005 #include "DQM/SiPixelMonitorClient/interface/ANSIColors.h"
0006 #include "DQM/SiPixelMonitorClient/interface/SiPixelActionExecutor.h"
0007 #include "DQM/SiPixelMonitorClient/interface/SiPixelInformationExtractor.h"
0008 #include "DQM/SiPixelMonitorClient/interface/SiPixelUtility.h"
0009 #include "DQMServices/Core/interface/DQMStore.h"
0010 #include "DataFormats/DetId/interface/DetId.h"
0011 #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h"
0012 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
0013 #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h"
0014 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
0015 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "FWCore/ParameterSet/interface/FileInPath.h"
0018
0019 #include <cmath>
0020
0021 #include <iostream>
0022 using namespace std;
0023
0024
0025
0026
0027 SiPixelActionExecutor::SiPixelActionExecutor(bool offlineXMLfile, bool Tier0Flag)
0028 : offlineXMLfile_(offlineXMLfile), Tier0Flag_(Tier0Flag) {
0029 edm::LogInfo("SiPixelActionExecutor") << " Creating SiPixelActionExecutor "
0030 << "\n";
0031 configParser_ = nullptr;
0032 configWriter_ = nullptr;
0033 ndet_ = 0;
0034
0035 }
0036
0037
0038
0039
0040 SiPixelActionExecutor::~SiPixelActionExecutor() {
0041 edm::LogInfo("SiPixelActionExecutor") << " Deleting SiPixelActionExecutor "
0042 << "\n";
0043 if (configParser_)
0044 delete configParser_;
0045 if (configWriter_)
0046 delete configWriter_;
0047 }
0048
0049
0050
0051
0052 void SiPixelActionExecutor::readConfiguration() {
0053 string localPath;
0054 if (offlineXMLfile_)
0055 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
0056 else
0057 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
0058 if (configParser_ == nullptr) {
0059 configParser_ = new SiPixelConfigParser();
0060 configParser_->getDocument(edm::FileInPath(localPath).fullPath());
0061 }
0062 }
0063
0064
0065
0066
0067 bool SiPixelActionExecutor::readConfiguration(int &tkmap_freq,
0068 int &sum_barrel_freq,
0069 int &sum_endcap_freq,
0070 int &sum_grandbarrel_freq,
0071 int &sum_grandendcap_freq,
0072 int &message_limit_,
0073 int &source_type_,
0074 int &calib_type_) {
0075
0076
0077 string localPath;
0078 if (offlineXMLfile_)
0079 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
0080 else
0081 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
0082 if (configParser_ == nullptr) {
0083 configParser_ = new SiPixelConfigParser();
0084 configParser_->getDocument(edm::FileInPath(localPath).fullPath());
0085 }
0086
0087 if (!configParser_->getFrequencyForTrackerMap(tkmap_freq)) {
0088 cout << "SiPixelActionExecutor::readConfiguration: Failed to read "
0089 "TrackerMap configuration parameters!! ";
0090 return false;
0091 }
0092 if (!configParser_->getFrequencyForBarrelSummary(sum_barrel_freq)) {
0093 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Barrel Summary configuration parameters!! "
0094 << "\n";
0095 return false;
0096 }
0097 if (!configParser_->getFrequencyForEndcapSummary(sum_endcap_freq)) {
0098 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Endcap Summary configuration parameters!! "
0099 << "\n";
0100 return false;
0101 }
0102 if (!configParser_->getFrequencyForGrandBarrelSummary(sum_grandbarrel_freq)) {
0103 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Grand Barrel Summary configuration parameters!! "
0104 << "\n";
0105 return false;
0106 }
0107 if (!configParser_->getFrequencyForGrandEndcapSummary(sum_grandendcap_freq)) {
0108 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Grand Endcap Summary configuration parameters!! "
0109 << "\n";
0110 return false;
0111 }
0112 if (!configParser_->getMessageLimitForQTests(message_limit_)) {
0113 edm::LogInfo("SiPixelActionExecutor") << "Failed to read QTest Message Limit"
0114 << "\n";
0115 return false;
0116 }
0117 if (!configParser_->getSourceType(source_type_)) {
0118 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Source Type"
0119 << "\n";
0120 return false;
0121 }
0122 if (!configParser_->getCalibType(calib_type_)) {
0123 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Calib Type"
0124 << "\n";
0125 return false;
0126 }
0127
0128
0129 return true;
0130 }
0131
0132 bool SiPixelActionExecutor::readConfiguration(int &tkmap_freq, int &summary_freq) {
0133
0134
0135 string localPath;
0136 if (offlineXMLfile_)
0137 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
0138 else
0139 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
0140 if (configParser_ == nullptr) {
0141 configParser_ = new SiPixelConfigParser();
0142 configParser_->getDocument(edm::FileInPath(localPath).fullPath());
0143 }
0144
0145 if (!configParser_->getFrequencyForTrackerMap(tkmap_freq)) {
0146 cout << "SiPixelActionExecutor::readConfiguration: Failed to read "
0147 "TrackerMap configuration parameters!! ";
0148 return false;
0149 }
0150 if (!configParser_->getFrequencyForBarrelSummary(summary_freq)) {
0151 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Summary configuration parameters!! "
0152 << "\n";
0153 return false;
0154 }
0155
0156
0157 return true;
0158 }
0159
0160
0161 void SiPixelActionExecutor::createSummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isUpgrade) {
0162
0163
0164
0165 string barrel_structure_name;
0166 vector<string> barrel_me_names;
0167 string localPath;
0168 if (offlineXMLfile_)
0169 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_tier0_config.xml");
0170 else
0171 localPath = string("DQM/SiPixelMonitorClient/test/sipixel_monitorelement_config.xml");
0172
0173 if (configParser_ == nullptr) {
0174 configParser_ = new SiPixelConfigParser();
0175 configParser_->getDocument(edm::FileInPath(localPath).fullPath());
0176 }
0177 if (!configParser_->getMENamesForBarrelSummary(barrel_structure_name, barrel_me_names)) {
0178 cout << "SiPixelActionExecutor::createSummary: Failed to read Barrel "
0179 "Summary configuration parameters!! ";
0180 return;
0181 }
0182 configParser_->getSourceType(source_type_);
0183
0184 iBooker.setCurrentFolder("Pixel/");
0185 iGetter.setCurrentFolder("Pixel/");
0186 fillSummary(iBooker, iGetter, barrel_structure_name, barrel_me_names, true,
0187 isUpgrade);
0188 iBooker.setCurrentFolder("Pixel/");
0189 iGetter.setCurrentFolder("Pixel/");
0190 string endcap_structure_name;
0191 vector<string> endcap_me_names;
0192 if (!configParser_->getMENamesForEndcapSummary(endcap_structure_name, endcap_me_names)) {
0193 edm::LogInfo("SiPixelActionExecutor") << "Failed to read Endcap Summary configuration parameters!! "
0194 << "\n";
0195 return;
0196 }
0197
0198
0199
0200 iBooker.setCurrentFolder("Pixel/");
0201 iGetter.setCurrentFolder("Pixel/");
0202
0203 fillSummary(iBooker, iGetter, endcap_structure_name, endcap_me_names, false,
0204 isUpgrade);
0205 iBooker.setCurrentFolder("Pixel/");
0206 iGetter.setCurrentFolder("Pixel/");
0207
0208 if (source_type_ == 0 || source_type_ == 5 || source_type_ == 20) {
0209 string federror_structure_name;
0210 vector<string> federror_me_names;
0211 if (!configParser_->getMENamesForFEDErrorSummary(federror_structure_name, federror_me_names)) {
0212 cout << "SiPixelActionExecutor::createSummary: Failed to read FED Error "
0213 "Summary configuration parameters!! ";
0214 return;
0215 }
0216 iBooker.setCurrentFolder("Pixel/");
0217 iGetter.setCurrentFolder("Pixel/");
0218
0219 fillFEDErrorSummary(iBooker, iGetter, federror_structure_name, federror_me_names);
0220 iBooker.setCurrentFolder("Pixel/");
0221 iGetter.setCurrentFolder("Pixel/");
0222 }
0223 if (configWriter_)
0224 delete configWriter_;
0225 configWriter_ = nullptr;
0226
0227 }
0228
0229
0230 void SiPixelActionExecutor::bookDeviations(DQMStore::IBooker &iBooker, bool isUpgrade) {
0231 int nBPixModules;
0232 if (isUpgrade) {
0233 nBPixModules = 1184;
0234 } else {
0235 nBPixModules = 768;
0236 }
0237
0238 iBooker.cd();
0239 iBooker.setCurrentFolder("Pixel/Barrel");
0240 DEV_adc_Barrel = iBooker.book1D(
0241 "DEV_adc_Barrel", "Deviation from reference;Module;<adc_ref>-<adc>", nBPixModules, 0., nBPixModules);
0242 DEV_ndigis_Barrel = iBooker.book1D(
0243 "DEV_ndigis_Barrel", "Deviation from reference;Module;<ndigis_ref>-<ndigis>", nBPixModules, 0., nBPixModules);
0244 DEV_charge_Barrel = iBooker.book1D(
0245 "DEV_charge_Barrel", "Deviation from reference;Module;<charge_ref>-<charge>", nBPixModules, 0., nBPixModules);
0246 DEV_nclusters_Barrel = iBooker.book1D("DEV_nclusters_Barrel",
0247 "Deviation from reference;Module;<nclusters_ref>-<nclusters>",
0248 nBPixModules,
0249 0.,
0250 nBPixModules);
0251 DEV_size_Barrel = iBooker.book1D(
0252 "DEV_size_Barrel", "Deviation from reference;Module;<size_ref>-<size>", nBPixModules, 0., nBPixModules);
0253 iBooker.cd();
0254 iBooker.setCurrentFolder("Pixel/Endcap");
0255 DEV_adc_Endcap = iBooker.book1D("DEV_adc_Endcap", "Deviation from reference;Module;<adc_ref>-<adc>", 672, 0., 672.);
0256 DEV_ndigis_Endcap =
0257 iBooker.book1D("DEV_ndigis_Endcap", "Deviation from reference;Module;<ndigis_ref>-<ndigis>", 672, 0., 672.);
0258 DEV_charge_Endcap =
0259 iBooker.book1D("DEV_charge_Endcap", "Deviation from reference;Module;<charge_ref>-<charge>", 672, 0., 672.);
0260 DEV_nclusters_Endcap = iBooker.book1D(
0261 "DEV_nclusters_Endcap", "Deviation from reference;Module;<nclusters_ref>-<nclusters>", 672, 0., 672.);
0262 DEV_size_Endcap =
0263 iBooker.book1D("DEV_size_Endcap", "Deviation from reference;Module;<size_ref>-<size>", 672, 0., 672.);
0264 iBooker.cd();
0265 }
0266
0267
0268
0269 void SiPixelActionExecutor::GetBladeSubdirs(DQMStore::IBooker &iBooker,
0270 DQMStore::IGetter &iGetter,
0271 vector<string> &blade_subdirs) {
0272 blade_subdirs.clear();
0273 vector<string> panels = iGetter.getSubdirs();
0274 vector<string> modules;
0275 for (vector<string>::const_iterator it = panels.begin(); it != panels.end(); it++) {
0276 iGetter.cd(*it);
0277 iBooker.cd(*it);
0278 modules = iGetter.getSubdirs();
0279 for (vector<string>::const_iterator m_it = modules.begin(); m_it != modules.end(); m_it++) {
0280 blade_subdirs.push_back(*m_it);
0281 }
0282 }
0283 }
0284
0285
0286
0287 void SiPixelActionExecutor::fillSummary(DQMStore::IBooker &iBooker,
0288 DQMStore::IGetter &iGetter,
0289 string dir_name,
0290 vector<string> &me_names,
0291 bool isbarrel,
0292 bool isUpgrade) {
0293
0294 string currDir = iBooker.pwd();
0295 string prefix;
0296 if (source_type_ == 0)
0297 prefix = "SUMRAW";
0298 else if (source_type_ == 1)
0299 prefix = "SUMDIG";
0300 else if (source_type_ == 2)
0301 prefix = "SUMCLU";
0302 else if (source_type_ == 3)
0303 prefix = "SUMTRK";
0304 else if (source_type_ == 4)
0305 prefix = "SUMHIT";
0306 else if (source_type_ >= 7 && source_type_ < 20)
0307 prefix = "SUMCAL";
0308 else if (source_type_ == 20)
0309 prefix = "SUMOFF";
0310 if (currDir.find(dir_name) != string::npos) {
0311 vector<MonitorElement *> sum_mes;
0312 for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
0313 if (source_type_ == 5 || source_type_ == 6) {
0314 if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
0315 (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
0316 (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
0317 (*iv) == "Type36Hitmap")
0318 prefix = "SUMRAW";
0319 else if ((*iv) == "ndigis" || (*iv) == "adc")
0320 prefix = "SUMDIG";
0321 else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" || (*iv) == "size" ||
0322 (*iv) == "sizeX" || (*iv) == "sizeY" || (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" ||
0323 (*iv) == "maxcol")
0324 prefix = "SUMCLU";
0325 if (currDir.find("Track") != string::npos)
0326 prefix = "SUMTRK";
0327 else if ((*iv) == "residualX" || (*iv) == "residualY")
0328 prefix = "SUMTRK";
0329 else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
0330 (*iv) == "ErrorY")
0331 prefix = "SUMHIT";
0332 else if ((*iv) == "Gain1d" || (*iv) == "GainChi2NDF1d" || (*iv) == "GainChi2Prob1d" || (*iv) == "Pedestal1d" ||
0333 (*iv) == "GainNPoints1d" || (*iv) == "GainHighPoint1d" || (*iv) == "GainLowPoint1d" ||
0334 (*iv) == "GainEndPoint1d" || (*iv) == "GainFitResult2d" || (*iv) == "GainDynamicRange2d" ||
0335 (*iv) == "GainSaturate2d" || (*iv) == "ScurveChi2ProbSummary" || (*iv) == "ScurveFitResultSummary" ||
0336 (*iv) == "ScurveSigmasSummary" || (*iv) == "ScurveThresholdSummary" || (*iv) == "pixelAliveSummary" ||
0337 (*iv) == "SiPixelErrorsCalibDigis")
0338 prefix = "SUMCAL";
0339 }
0340 MonitorElement *temp;
0341 string tag;
0342 if ((*iv).find("residual") != string::npos) {
0343 tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
0344 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0345 sum_mes.push_back(temp);
0346 tag = prefix + "_" + (*iv) + "_RMS_" + currDir.substr(currDir.find(dir_name));
0347 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0348 sum_mes.push_back(temp);
0349 } else if (prefix == "SUMCAL") {
0350 if ((*iv) == "Gain1d" || (*iv) == "GainChi2NDF1d" || (*iv) == "GainChi2Prob1d" || (*iv) == "GainNPoints1d" ||
0351 (*iv) == "GainHighPoint1d" || (*iv) == "GainLowPoint1d" || (*iv) == "GainEndPoint1d" ||
0352 (*iv) == "GainDynamicRange2d" || (*iv) == "GainSaturate2d" || (*iv) == "Pedestal1d" ||
0353 (*iv) == "ScurveChi2ProbSummary" || (*iv) == "ScurveFitResultSummary" || (*iv) == "ScurveSigmasSummary" ||
0354 (*iv) == "ScurveThresholdSummary") {
0355 tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
0356 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0357 sum_mes.push_back(temp);
0358 tag = prefix + "_" + (*iv) + "_RMS_" + currDir.substr(currDir.find(dir_name));
0359 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0360 sum_mes.push_back(temp);
0361 } else if ((*iv) == "SiPixelErrorsCalibDigis") {
0362 tag = prefix + "_" + (*iv) + "_NCalibErrors_" + currDir.substr(currDir.find(dir_name));
0363 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0364 sum_mes.push_back(temp);
0365 } else if ((*iv) == "GainFitResult2d") {
0366 tag = prefix + "_" + (*iv) + "_NNegativeFits_" + currDir.substr(currDir.find(dir_name));
0367 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0368 sum_mes.push_back(temp);
0369 } else if ((*iv) == "pixelAliveSummary") {
0370 tag = prefix + "_" + (*iv) + "_FracOfPerfectPix_" + currDir.substr(currDir.find(dir_name));
0371 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0372 sum_mes.push_back(temp);
0373 tag = prefix + "_" + (*iv) + "_mean_" + currDir.substr(currDir.find(dir_name));
0374 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0375 sum_mes.push_back(temp);
0376 }
0377 } else {
0378 tag = prefix + "_" + (*iv) + "_" + currDir.substr(currDir.find(dir_name));
0379 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0380 sum_mes.push_back(temp);
0381 if ((*iv) == "ndigis") {
0382 tag = prefix + "_" + (*iv) + "FREQ_" + currDir.substr(currDir.find(dir_name));
0383 temp = getSummaryME(iBooker, iGetter, tag, isUpgrade);
0384 sum_mes.push_back(temp);
0385 }
0386 if (prefix == "SUMDIG" && (*iv) == "adc") {
0387 tag = "ALLMODS_" + (*iv) + "COMB_" + currDir.substr(currDir.find(dir_name));
0388 temp = nullptr;
0389 string fullpathname = iBooker.pwd() + "/" + tag;
0390 temp = iGetter.get(fullpathname);
0391 if (temp) {
0392 temp->Reset();
0393 } else {
0394 temp = iBooker.book1D(tag.c_str(), tag.c_str(), 128, 0., 256.);
0395 }
0396 sum_mes.push_back(temp);
0397 }
0398 if (prefix == "SUMCLU" && (*iv) == "charge") {
0399 tag = "ALLMODS_" + (*iv) + "COMB_" + currDir.substr(currDir.find(dir_name));
0400 temp = nullptr;
0401 string fullpathname = iBooker.pwd() + "/" + tag;
0402 temp = iGetter.get(fullpathname);
0403 if (temp) {
0404 temp->Reset();
0405 } else {
0406 temp = iBooker.book1D(tag.c_str(), tag.c_str(), 100, 0.,
0407 200.);
0408 }
0409 sum_mes.push_back(temp);
0410 }
0411 }
0412 }
0413 if (sum_mes.empty()) {
0414 edm::LogInfo("SiPixelActionExecutor") << " Summary MEs can not be created"
0415 << "\n";
0416 return;
0417 }
0418 vector<string> subdirs = iGetter.getSubdirs();
0419
0420 if (dir_name.find("Blade_") == 0)
0421 GetBladeSubdirs(iBooker, iGetter, subdirs);
0422
0423 int ndet = 0;
0424 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0425 if (prefix != "SUMOFF" && (*it).find("Module_") == string::npos)
0426 continue;
0427 if (prefix == "SUMOFF" && (*it).find(isbarrel ? "Layer_" : "Disk_") == string::npos)
0428 continue;
0429 iBooker.cd(*it);
0430 iGetter.cd(*it);
0431 ndet++;
0432
0433 vector<string> contents = iGetter.getMEs();
0434
0435 for (vector<MonitorElement *>::const_iterator isum = sum_mes.begin(); isum != sum_mes.end(); isum++) {
0436 for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
0437 string sname = ((*isum)->getName());
0438 string tname = " ";
0439 tname = sname.substr(7, (sname.find('_', 7) - 6));
0440 if (sname.find("ALLMODS_adcCOMB_") != string::npos)
0441 tname = "adc_";
0442 if (sname.find("ALLMODS_chargeCOMB_") != string::npos)
0443 tname = "charge_";
0444 if (sname.find("_charge_") != string::npos && sname.find("Track_") == string::npos)
0445 tname = "charge_";
0446 if (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos)
0447 tname = "nclusters_";
0448 if (sname.find("_size_") != string::npos && sname.find("Track_") == string::npos)
0449 tname = "size_";
0450 if (sname.find("_charge_OffTrack_") != string::npos)
0451 tname = "charge_OffTrack_";
0452 if (sname.find("_nclusters_OffTrack_") != string::npos)
0453 tname = "nclusters_OffTrack_";
0454 if (sname.find("_size_OffTrack_") != string::npos)
0455 tname = "size_OffTrack_";
0456 if (sname.find("_sizeX_OffTrack_") != string::npos)
0457 tname = "sizeX_OffTrack_";
0458 if (sname.find("_sizeY_OffTrack_") != string::npos)
0459 tname = "sizeY_OffTrack_";
0460 if (sname.find("_charge_OnTrack_") != string::npos)
0461 tname = "charge_OnTrack_";
0462 if (sname.find("_nclusters_OnTrack_") != string::npos)
0463 tname = "nclusters_OnTrack_";
0464 if (sname.find("_size_OnTrack_") != string::npos)
0465 tname = "size_OnTrack_";
0466 if (sname.find("_sizeX_OnTrack_") != string::npos)
0467 tname = "sizeX_OnTrack_";
0468 if (sname.find("_sizeY_OnTrack_") != string::npos)
0469 tname = "sizeY_OnTrack_";
0470 if (tname.find("FREQ") != string::npos)
0471 tname = "ndigis_";
0472 if (((*im)).find(tname) == 0) {
0473 string fullpathname = iBooker.pwd() + "/" + (*im);
0474 MonitorElement *me = iGetter.get(fullpathname);
0475
0476 if (me) {
0477 if (sname.find("_charge") != string::npos && sname.find("Track_") == string::npos &&
0478 me->getName().find("Track_") != string::npos)
0479 continue;
0480 if (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos &&
0481 me->getName().find("Track_") != string::npos)
0482 continue;
0483 if (sname.find("_size") != string::npos && sname.find("Track_") == string::npos &&
0484 me->getName().find("Track_") != string::npos)
0485 continue;
0486
0487 if (sname.find("_RMS_") != string::npos && sname.find("GainDynamicRange2d") == string::npos &&
0488 sname.find("GainSaturate2d") == string::npos) {
0489 (*isum)->Fill(ndet, me->getRMS());
0490 } else if (sname.find("GainDynamicRange2d") != string::npos ||
0491 sname.find("GainSaturate2d") != string::npos) {
0492 float SumOfEntries = 0.;
0493 float SumOfSquaredEntries = 0.;
0494 int SumOfPixels = 0;
0495 for (int cols = 1; cols != me->getNbinsX() + 1; cols++)
0496 for (int rows = 1; rows != me->getNbinsY() + 1; rows++) {
0497 SumOfEntries += me->getBinContent(cols, rows);
0498 SumOfSquaredEntries += (me->getBinContent(cols, rows)) * (me->getBinContent(cols, rows));
0499 SumOfPixels++;
0500 }
0501
0502 float MeanInZ = SumOfEntries / float(SumOfPixels);
0503 float RMSInZ = sqrt(SumOfSquaredEntries / float(SumOfPixels));
0504 if (sname.find("_mean_") != string::npos)
0505 (*isum)->Fill(ndet, MeanInZ);
0506 if (sname.find("_RMS_") != string::npos)
0507 (*isum)->Fill(ndet, RMSInZ);
0508 } else if (sname.find("_FracOfPerfectPix_") != string::npos) {
0509 float nlast = me->getBinContent(me->getNbinsX());
0510 float nall = (me->getTH1F())->Integral(1, 11);
0511 (*isum)->Fill(ndet, nlast / nall);
0512 } else if (sname.find("_NCalibErrors_") != string::npos || sname.find("FREQ_") != string::npos) {
0513 float nall = me->getEntries();
0514 (*isum)->Fill(ndet, nall);
0515 } else if (sname.find("GainFitResult2d") != string::npos) {
0516 int NegFitPixels = 0;
0517 for (int cols = 1; cols != me->getNbinsX() + 1; cols++)
0518 for (int rows = 1; rows != me->getNbinsY() + 1; rows++) {
0519 if (me->getBinContent(cols, rows) < 0.)
0520 NegFitPixels++;
0521 }
0522 (*isum)->Fill(ndet, float(NegFitPixels));
0523 } else if (sname.find("ALLMODS_adcCOMB_") != string::npos ||
0524 (sname.find("ALLMODS_chargeCOMB_") != string::npos &&
0525 me->getName().find("Track_") == string::npos)) {
0526 (*isum)->getTH1F()->Add(me->getTH1F());
0527 } else if (sname.find("_NErrors_") != string::npos) {
0528 string path1 = fullpathname;
0529 path1 = path1.replace(path1.find("NErrors"), 7, "errorType");
0530 MonitorElement *me1 = iGetter.get(path1);
0531 bool notReset = true;
0532 if (me1) {
0533 for (int jj = 1; jj < 16; jj++) {
0534 if (me1->getBinContent(jj) > 0.) {
0535 if (jj == 6) {
0536 string path2 = path1;
0537 path2 = path2.replace(path2.find("errorType"), 9, "TBMMessage");
0538 MonitorElement *me2 = iGetter.get(path2);
0539 if (me2)
0540 if (me2->getBinContent(6) > 0. || me2->getBinContent(7) > 0.)
0541 notReset = false;
0542 }
0543 }
0544 }
0545 if (notReset)
0546 (*isum)->Fill(ndet, me1->getEntries());
0547 }
0548 } else if ((sname.find("_charge_") != string::npos && sname.find("Track_") == string::npos &&
0549 me->getName().find("Track_") == string::npos) ||
0550 (sname.find("_charge_") != string::npos && sname.find("_OnTrack_") != string::npos &&
0551 me->getName().find("_OnTrack_") != string::npos) ||
0552 (sname.find("_charge_") != string::npos && sname.find("_OffTrack_") != string::npos &&
0553 me->getName().find("_OffTrack_") != string::npos) ||
0554 (sname.find("_nclusters_") != string::npos && sname.find("Track_") == string::npos &&
0555 me->getName().find("Track_") == string::npos) ||
0556 (sname.find("_nclusters_") != string::npos && sname.find("_OnTrack_") != string::npos &&
0557 me->getName().find("_OnTrack_") != string::npos) ||
0558 (sname.find("_nclusters_") != string::npos && sname.find("_OffTrack_") != string::npos &&
0559 me->getName().find("_OffTrack_") != string::npos) ||
0560 (sname.find("_size") != string::npos && sname.find("Track_") == string::npos &&
0561 me->getName().find("Track_") == string::npos) ||
0562 (sname.find("_size") != string::npos && sname.find("_OnTrack_") != string::npos &&
0563 me->getName().find("_OnTrack_") != string::npos) ||
0564 (sname.find("_size") != string::npos && sname.find("_OffTrack_") != string::npos &&
0565 me->getName().find("_OffTrack_") != string::npos)) {
0566 (*isum)->Fill(ndet, me->getMean());
0567 } else if (sname.find("_charge_") == string::npos && sname.find("_nclusters_") == string::npos &&
0568 sname.find("_size") == string::npos) {
0569 (*isum)->Fill(ndet, me->getMean());
0570 }
0571
0572
0573 if (prefix == "SUMOFF") {
0574 (*isum)->setAxisTitle(isbarrel ? "Ladders" : "Blades", 1);
0575 } else if (sname.find("ALLMODS_adcCOMB_") != string::npos) {
0576 (*isum)->setAxisTitle("Digi charge [ADC]", 1);
0577 } else if (sname.find("ALLMODS_chargeCOMB_") != string::npos) {
0578 (*isum)->setAxisTitle("Cluster charge [kilo electrons]", 1);
0579 } else {
0580 (*isum)->setAxisTitle("Modules", 1);
0581 }
0582 string title = " ";
0583 if (sname.find("_RMS_") != string::npos) {
0584 title = "RMS of " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
0585 } else if (sname.find("_FracOfPerfectPix_") != string::npos) {
0586 title = "FracOfPerfectPix " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
0587 } else if (sname.find("_NCalibErrors_") != string::npos) {
0588 title = "Number of CalibErrors " + sname.substr(7, (sname.find('_', 7) - 7)) + " per module";
0589 } else if (sname.find("_NNegativeFits_") != string::npos) {
0590 title = "Number of pixels with neg. fit result " + sname.substr(7, (sname.find('_', 7) - 7)) +
0591 " per module";
0592 } else if (sname.find("FREQ_") != string::npos) {
0593 title = "NEvents with digis per module";
0594 } else if (sname.find("ALLMODS_adcCOMB_") != string::npos) {
0595 title = "NDigis";
0596 } else if (sname.find("ALLMODS_chargeCOMB_") != string::npos) {
0597 title = "NClusters";
0598 } else if (sname.find("_NErrors_") != string::npos) {
0599 if (prefix == "SUMOFF" && isbarrel)
0600 title = "Total number of errors per Ladder";
0601 else if (prefix == "SUMOFF" && !isbarrel)
0602 title = "Total number of errors per Blade";
0603 else
0604 title = "Total number of errors per Module";
0605 } else {
0606 if (prefix == "SUMOFF")
0607 title =
0608 "Mean " + sname.substr(7, (sname.find('_', 7) - 7)) + (isbarrel ? " per Ladder" : " per Blade");
0609 else
0610 title = "Mean " + sname.substr(7, (sname.find('_', 7) - 7)) + " per Module";
0611 }
0612 (*isum)->setAxisTitle(title, 2);
0613 }
0614 break;
0615 }
0616 }
0617 }
0618 iBooker.goUp();
0619 iGetter.setCurrentFolder(iBooker.pwd());
0620 if (dir_name.find("Blade") == 0) {
0621 iBooker.goUp();
0622 iGetter.setCurrentFolder(iBooker.pwd());
0623 }
0624 }
0625 } else {
0626 vector<string> subdirs = iGetter.getSubdirs();
0627
0628 if (isbarrel) {
0629 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0630
0631
0632
0633 if ((iBooker.pwd()).find("Endcap") != string::npos ||
0634 (iBooker.pwd()).find("AdditionalPixelErrors") != string::npos) {
0635 iBooker.goUp();
0636 iGetter.setCurrentFolder(iBooker.pwd());
0637 }
0638 iBooker.cd(*it);
0639 iGetter.cd(*it);
0640 if ((*it).find("Endcap") != string::npos || (*it).find("AdditionalPixelErrors") != string::npos)
0641 continue;
0642 fillSummary(iBooker, iGetter, dir_name, me_names, true,
0643 isUpgrade);
0644 iBooker.goUp();
0645 iGetter.setCurrentFolder(iBooker.pwd());
0646 }
0647 string grandbarrel_structure_name;
0648 vector<string> grandbarrel_me_names;
0649 if (!configParser_->getMENamesForGrandBarrelSummary(grandbarrel_structure_name, grandbarrel_me_names)) {
0650 cout << "SiPixelActionExecutor::createSummary: Failed to read Grand "
0651 "Barrel Summary configuration parameters!! ";
0652 return;
0653 }
0654 fillGrandBarrelSummaryHistos(iBooker, iGetter, grandbarrel_me_names, isUpgrade);
0655
0656 } else
0657 {
0658 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0659 if ((iBooker.pwd()).find("Barrel") != string::npos ||
0660 (iBooker.pwd()).find("AdditionalPixelErrors") != string::npos) {
0661 iBooker.goUp();
0662 iGetter.setCurrentFolder(iBooker.pwd());
0663 }
0664 iBooker.cd(*it);
0665 iGetter.cd(*it);
0666 if ((*it).find("Barrel") != string::npos || (*it).find("AdditionalPixelErrors") != string::npos)
0667 continue;
0668 fillSummary(iBooker, iGetter, dir_name, me_names, false,
0669 isUpgrade);
0670 iBooker.goUp();
0671 iGetter.setCurrentFolder(iBooker.pwd());
0672 }
0673 string grandendcap_structure_name;
0674 vector<string> grandendcap_me_names;
0675 if (!configParser_->getMENamesForGrandEndcapSummary(grandendcap_structure_name, grandendcap_me_names)) {
0676 cout << "SiPixelActionExecutor::createSummary: Failed to read Grand "
0677 "Endcap Summary configuration parameters!! ";
0678 return;
0679 }
0680 fillGrandEndcapSummaryHistos(iBooker, iGetter, grandendcap_me_names, isUpgrade);
0681 }
0682 }
0683
0684 }
0685
0686
0687 void SiPixelActionExecutor::fillFEDErrorSummary(DQMStore::IBooker &iBooker,
0688 DQMStore::IGetter &iGetter,
0689 string dir_name,
0690 vector<string> &me_names) {
0691
0692
0693 string currDir = iBooker.pwd();
0694 string prefix;
0695 if (source_type_ == 0)
0696 prefix = "SUMRAW";
0697 else if (source_type_ == 20)
0698 prefix = "SUMOFF";
0699
0700 if (currDir.find(dir_name) != string::npos) {
0701 vector<MonitorElement *> sum_mes;
0702 for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
0703 bool isBooked = false;
0704 vector<string> contents = iGetter.getMEs();
0705 for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++)
0706 if ((*im).find(*iv) != string::npos)
0707 isBooked = true;
0708 if (source_type_ == 5 || source_type_ == 6) {
0709 if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
0710 (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
0711 (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
0712 (*iv) == "Type36Hitmap" || (*iv) == "FedChLErr" || (*iv) == "FedChNErr" || (*iv) == "FedETypeNErr")
0713 prefix = "SUMRAW";
0714 }
0715 if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
0716 (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" || (*iv) == "ROCId" ||
0717 (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" || (*iv) == "TBMMessage" ||
0718 (*iv) == "Type36Hitmap") {
0719 string tag = prefix + "_" + (*iv) + "_FEDErrors";
0720 MonitorElement *temp = getFEDSummaryME(iBooker, iGetter, tag);
0721 sum_mes.push_back(temp);
0722 } else if ((*iv) == "FedChLErr" || (*iv) == "FedChNErr" || (*iv) == "FedETypeNErr") {
0723 string tag = prefix + "_" + (*iv);
0724 MonitorElement *temp;
0725 if ((*iv) == "FedChLErr") {
0726 if (!isBooked)
0727 temp = iBooker.book2D("FedChLErr", "Type of last error", 40, -0.5, 39.5, 37, 0., 37.);
0728 else {
0729 string fullpathname = iBooker.pwd() + "/" + (*iv);
0730 temp = iGetter.get(fullpathname);
0731 temp->Reset();
0732 }
0733 }
0734
0735 if ((*iv) == "FedChNErr") {
0736 if (!isBooked)
0737 temp = iBooker.book2D("FedChNErr", "Total number of errors", 40, -0.5, 39.5, 37, 0., 37.);
0738 else {
0739 string fullpathname = iBooker.pwd() + "/" + (*iv);
0740 temp = iGetter.get(fullpathname);
0741 temp->Reset();
0742 }
0743 }
0744
0745 if ((*iv) == "FedETypeNErr") {
0746 if (!isBooked) {
0747 temp = iBooker.book2D("FedETypeNErr", "Number of each error type", 40, -0.5, 39.5, 21, 0., 21.);
0748 temp->setBinLabel(1, "ROC of 25", 2);
0749 temp->setBinLabel(2, "Gap word", 2);
0750 temp->setBinLabel(3, "Dummy word", 2);
0751 temp->setBinLabel(4, "FIFO full", 2);
0752 temp->setBinLabel(5, "Timeout", 2);
0753 temp->setBinLabel(6, "Stack full", 2);
0754 temp->setBinLabel(7, "Pre-cal issued", 2);
0755 temp->setBinLabel(8, "Trigger clear or sync", 2);
0756 temp->setBinLabel(9, "No token bit", 2);
0757 temp->setBinLabel(10, "Overflow", 2);
0758 temp->setBinLabel(11, "FSM error", 2);
0759 temp->setBinLabel(12, "Invalid #ROCs", 2);
0760 temp->setBinLabel(13, "Event number", 2);
0761 temp->setBinLabel(14, "Slink header", 2);
0762 temp->setBinLabel(15, "Slink trailer", 2);
0763 temp->setBinLabel(16, "Event size", 2);
0764 temp->setBinLabel(17, "Invalid channel#", 2);
0765 temp->setBinLabel(18, "ROC value", 2);
0766 temp->setBinLabel(19, "Dcol or pixel value", 2);
0767 temp->setBinLabel(20, "Readout order", 2);
0768 temp->setBinLabel(21, "CRC error", 2);
0769 } else {
0770 string fullpathname = iBooker.pwd() + "/" + (*iv);
0771 temp = iGetter.get(fullpathname);
0772 temp->Reset();
0773 }
0774
0775 }
0776 sum_mes.push_back(temp);
0777 }
0778 }
0779 if (sum_mes.empty()) {
0780 edm::LogInfo("SiPixelActionExecutor") << " Summary MEs can not be created"
0781 << "\n";
0782 return;
0783 }
0784 vector<string> subdirs = iGetter.getSubdirs();
0785 int ndet = 0;
0786 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0787 if ((*it).find("FED_") == string::npos)
0788 continue;
0789 iBooker.cd(*it);
0790 iGetter.cd(*it);
0791 string fedid = (*it).substr((*it).find("_") + 1);
0792 std::istringstream isst;
0793 isst.str(fedid);
0794 isst >> ndet;
0795 ndet++;
0796 vector<string> contents = iGetter.getMEs();
0797
0798 for (vector<MonitorElement *>::const_iterator isum = sum_mes.begin(); isum != sum_mes.end(); isum++) {
0799 for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
0800 if (((*im).find("FedChNErr") != std::string::npos &&
0801 (*isum)->getName().find("FedChNErr") != std::string::npos) ||
0802 ((*im).find("FedChLErr") != std::string::npos &&
0803 (*isum)->getName().find("FedChLErr") != std::string::npos) ||
0804 ((*im).find("FedETypeNErr") != std::string::npos &&
0805 (*isum)->getName().find("FedETypeNErr") != std::string::npos)) {
0806 string fullpathname = iBooker.pwd() + "/" + (*im);
0807 MonitorElement *me = iGetter.get(fullpathname);
0808 if (me) {
0809 for (int i = 0; i != 37; i++) {
0810 if ((*im).find("FedETypeNErr") != std::string::npos && i < 21)
0811 (*isum)->Fill(ndet - 1, i, me->getBinContent(i + 1));
0812 else
0813 (*isum)->Fill(ndet - 1, i, me->getBinContent(i + 1));
0814 }
0815 }
0816 }
0817 string sname = ((*isum)->getName());
0818 string tname = " ";
0819 tname = sname.substr(7, (sname.find('_', 7) - 6));
0820 if (((*im)).find(tname) == 0) {
0821 string fullpathname = iBooker.pwd() + "/" + (*im);
0822 MonitorElement *me = iGetter.get(fullpathname);
0823
0824 if (me) {
0825 if (me->getMean() > 0.) {
0826 if (sname.find("_NErrors_") != string::npos) {
0827 string path1 = fullpathname;
0828 path1 = path1.replace(path1.find("NErrors"), 7, "errorType");
0829 MonitorElement *me1 = iGetter.get(path1);
0830 bool notReset = true;
0831 if (me1) {
0832 for (int jj = 1; jj < 16; jj++) {
0833 if (me1->getBinContent(jj) > 0.) {
0834 if (jj == 6) {
0835 string path2 = path1;
0836 path2 = path2.replace(path2.find("errorType"), 9, "TBMMessage");
0837 MonitorElement *me2 = iGetter.get(path2);
0838 if (me2)
0839 if (me2->getBinContent(6) > 0. || me2->getBinContent(7) > 0.)
0840 notReset = false;
0841 }
0842 }
0843 }
0844 }
0845 if (notReset)
0846 (*isum)->setBinContent(ndet, (*isum)->getBinContent(ndet) + me1->getEntries());
0847 } else
0848 (*isum)->setBinContent(ndet, (*isum)->getBinContent(ndet) + me->getEntries());
0849 }
0850 (*isum)->setAxisTitle("FED #", 1);
0851 string title = " ";
0852 title = sname.substr(7, (sname.find('_', 7) - 7)) + " per FED";
0853 (*isum)->setAxisTitle(title, 2);
0854 }
0855 break;
0856 }
0857 }
0858 }
0859 iBooker.goUp();
0860 iGetter.setCurrentFolder(iBooker.pwd());
0861 }
0862 } else {
0863 vector<string> subdirs = iGetter.getSubdirs();
0864 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0865 if ((*it).find("Endcap") != string::npos || (*it).find("Barrel") != string::npos)
0866 continue;
0867 iBooker.cd(*it);
0868 iGetter.cd(*it);
0869 fillFEDErrorSummary(iBooker, iGetter, dir_name, me_names);
0870 iBooker.goUp();
0871 iGetter.setCurrentFolder(iBooker.pwd());
0872 }
0873 }
0874
0875
0876 }
0877
0878
0879 void SiPixelActionExecutor::fillGrandBarrelSummaryHistos(DQMStore::IBooker &iBooker,
0880 DQMStore::IGetter &iGetter,
0881 vector<string> &me_names,
0882 bool isUpgrade) {
0883
0884
0885 vector<MonitorElement *> gsum_mes;
0886 string currDir = iBooker.pwd();
0887 string path_name = iBooker.pwd();
0888 string dir_name = path_name.substr(path_name.find_last_of('/') + 1);
0889 if ((dir_name.find("DQMData") == 0) || (dir_name.find("Pixel") == 0) ||
0890 (dir_name.find("AdditionalPixelErrors") == 0) || (dir_name.find("Endcap") == 0) ||
0891 (dir_name.find("HalfCylinder") == 0) || (dir_name.find("Disk") == 0) || (dir_name.find("Blade") == 0) ||
0892 (dir_name.find("Panel") == 0))
0893 return;
0894 vector<string> subdirs = iGetter.getSubdirs();
0895 int nDirs = subdirs.size();
0896 int iDir = 0;
0897 int nbin = 0;
0898 int nbin_i = 0;
0899 int nbin_subdir = 0;
0900 int cnt = 0;
0901 bool first_subdir = true;
0902 for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0903 cnt++;
0904 iBooker.cd(*it);
0905 iGetter.cd(*it);
0906 vector<string> contents = iGetter.getMEs();
0907
0908 iBooker.goUp();
0909 iGetter.setCurrentFolder(iBooker.pwd());
0910
0911 string prefix;
0912 if (source_type_ == 0)
0913 prefix = "SUMRAW";
0914 else if (source_type_ == 1)
0915 prefix = "SUMDIG";
0916 else if (source_type_ == 2)
0917 prefix = "SUMCLU";
0918 else if (source_type_ == 3)
0919 prefix = "SUMTRK";
0920 else if (source_type_ == 4)
0921 prefix = "SUMHIT";
0922 else if (source_type_ >= 7 && source_type_ < 20)
0923 prefix = "SUMCAL";
0924 else if (source_type_ == 20)
0925 prefix = "SUMOFF";
0926
0927 for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
0928 for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
0929 string var = "_" + (*iv) + "_";
0930 if ((*im).find(var) != string::npos) {
0931 if ((var == "_charge_" || var == "_nclusters_" || var == "_size_" || var == "_sizeX_" || var == "_sizeY_") &&
0932 (*im).find("Track_") != string::npos)
0933 continue;
0934 string full_path = (*it) + "/" + (*im);
0935 MonitorElement *me = iGetter.get(full_path);
0936 if (!me)
0937 continue;
0938 if (source_type_ == 5 || source_type_ == 6) {
0939 if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
0940 (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" ||
0941 (*iv) == "ROCId" || (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" ||
0942 (*iv) == "TBMMessage" || (*iv) == "Type36Hitmap")
0943 prefix = "SUMRAW";
0944 else if ((*iv) == "ndigis" || (*iv) == "adc" || (*iv) == "ndigisFREQ" || (*iv) == "adcCOMB")
0945 prefix = "SUMDIG";
0946 else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" ||
0947 (*iv) == "chargeCOMB" || (*iv) == "size" || (*iv) == "sizeX" || (*iv) == "sizeY" ||
0948 (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" || (*iv) == "maxcol")
0949 prefix = "SUMCLU";
0950 if (currDir.find("Track") != string::npos)
0951 prefix = "SUMTRK";
0952 else if ((*iv) == "residualX_mean" || (*iv) == "residualY_mean" || (*iv) == "residualX_RMS" ||
0953 (*iv) == "residualY_RMS")
0954 prefix = "SUMTRK";
0955 else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
0956 (*iv) == "ErrorY")
0957 prefix = "SUMHIT";
0958 else if ((*iv) == "Gain1d_mean" || (*iv) == "GainChi2NDF1d_mean" || (*iv) == "GainChi2Prob1d_mean" ||
0959 (*iv) == "Pedestal1d_mean" || (*iv) == "ScurveChi2ProbSummary_mean" ||
0960 (*iv) == "ScurveFitResultSummary_mean" || (*iv) == "ScurveSigmasSummary_mean" ||
0961 (*iv) == "ScurveThresholdSummary_mean" || (*iv) == "Gain1d_RMS" || (*iv) == "GainChi2NDF1d_RMS" ||
0962 (*iv) == "GainChi2Prob1d_RMS" || (*iv) == "Pedestal1d_RMS" || (*iv) == "GainNPoints1d_mean" ||
0963 (*iv) == "GainNPoints1d_RMS" || (*iv) == "GainHighPoint1d_mean" ||
0964 (*iv) == "GainHighPoint1d_RMS" || (*iv) == "GainLowPoint1d_mean" ||
0965 (*iv) == "GainLowPoint1d_RMS" || (*iv) == "GainEndPoint1d_mean" || (*iv) == "GainEndPoint1d_RMS" ||
0966 (*iv) == "GainFitResult2d_mean" || (*iv) == "GainFitResult2d_RMS" ||
0967 (*iv) == "GainDynamicRange2d_mean" || (*iv) == "GainDynamicRange2d_RMS" ||
0968 (*iv) == "GainSaturate2d_mean" || (*iv) == "GainSaturate2d_RMS" ||
0969 (*iv) == "ScurveChi2ProbSummary_RMS" || (*iv) == "ScurveFitResultSummary_RMS" ||
0970 (*iv) == "ScurveSigmasSummary_RMS" || (*iv) == "ScurveThresholdSummary_RMS" ||
0971 (*iv) == "pixelAliveSummary_mean" || (*iv) == "pixelAliveSummary_FracOfPerfectPix" ||
0972 (*iv) == "SiPixelErrorsCalibDigis_NCalibErrors")
0973 prefix = "SUMCAL";
0974 }
0975
0976 if (first_subdir && !isUpgrade) {
0977 nbin = me->getTH1F()->GetNbinsX();
0978 string me_name = prefix + "_" + (*iv) + "_" + dir_name;
0979 if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
0980 me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
0981 else if (prefix == "SUMOFF" && dir_name == "Barrel")
0982 nbin = 192;
0983 else if ((*iv) == "adcCOMB")
0984 nbin = 256;
0985 else if (dir_name == "Barrel")
0986 nbin = 768;
0987 else if (prefix == "SUMOFF" && dir_name.find("Shell") != string::npos)
0988 nbin = 48;
0989 else if (dir_name.find("Shell") != string::npos)
0990 nbin = 192;
0991 else
0992 nbin = nbin * nDirs;
0993
0994 getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
0995 } else if (first_subdir && isUpgrade) {
0996 nbin = me->getTH1F()->GetNbinsX();
0997 string me_name = prefix + "_" + (*iv) + "_" + dir_name;
0998 if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
0999 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
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
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 }
1132 else if (iDir == 1) {
1133 nbin_i = 24;
1134 nbin_subdir = 56;
1135 }
1136 else if (iDir == 2) {
1137 nbin_i = 80;
1138 nbin_subdir = 88;
1139 }
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 }
1149 else if (iDir == 1) {
1150 nbin_i = 6;
1151 nbin_subdir = 14;
1152 }
1153 else if (iDir == 2) {
1154 nbin_i = 20;
1155 nbin_subdir = 22;
1156 }
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 }
1168 else if (iDir == 1) {
1169 nbin_i = 296;
1170 nbin_subdir = 296;
1171 }
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 }
1187 else if (iDir == 1) {
1188 nbin_i = 74;
1189 nbin_subdir = 74;
1190 }
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 }
1248 }
1249 }
1250 }
1251 }
1252 iDir++;
1253 first_subdir = false;
1254
1255 }
1256
1257
1258 }
1259
1260
1261 void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore::IBooker &iBooker,
1262 DQMStore::IGetter &iGetter,
1263 vector<string> &me_names,
1264 bool isUpgrade) {
1265
1266
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
1564 }
1565 }
1566 }
1567 }
1568 }
1569
1570 first_subdir = false;
1571
1572 }
1573 }
1574
1575
1576
1577
1578 void SiPixelActionExecutor::getGrandSummaryME(
1579 DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, int nbin, string &me_name, vector<MonitorElement *> &mes) {
1580
1581
1582 if ((iBooker.pwd()).find("Pixel") == string::npos)
1583 return;
1584 vector<string> contents = iGetter.getMEs();
1585
1586 for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1587
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
1611 }
1612
1613
1614
1615
1616
1617 SiPixelActionExecutor::MonitorElement *SiPixelActionExecutor::getSummaryME(DQMStore::IBooker &iBooker,
1618 DQMStore::IGetter &iGetter,
1619 string me_name,
1620 bool isUpgrade) {
1621
1622
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 }
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 }
1673
1674 return me;
1675 }
1676
1677
1678 SiPixelActionExecutor::MonitorElement *SiPixelActionExecutor::getFEDSummaryME(DQMStore::IBooker &iBooker,
1679 DQMStore::IGetter &iGetter,
1680 string me_name) {
1681
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
1706 void SiPixelActionExecutor::bookOccupancyPlots(DQMStore::IBooker &iBooker,
1707 DQMStore::IGetter &iGetter,
1708 bool hiRes,
1709 bool isbarrel)
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
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
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
1764 void SiPixelActionExecutor::bookOccupancyPlots(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool hiRes) {
1765 if (Tier0Flag_)
1766 return;
1767
1768 iGetter.cd();
1769 iBooker.cd();
1770 iGetter.setCurrentFolder("Pixel");
1771 iBooker.setCurrentFolder("Pixel");
1772 this->bookOccupancyPlots(iBooker, iGetter, hiRes, true);
1773
1774
1775 iGetter.cd();
1776 iBooker.cd();
1777 iGetter.setCurrentFolder("Pixel");
1778 iBooker.setCurrentFolder("Pixel");
1779 this->bookOccupancyPlots(iBooker, iGetter, hiRes, false);
1780 }
1781
1782 void SiPixelActionExecutor::createOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
1783
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
1796 }
1797
1798
1799
1800 void SiPixelActionExecutor::fillOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isbarrel) {
1801
1802
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) {
1813 MonitorElement *me = iGetter.get(full_path);
1814 if (!me)
1815 continue;
1816 string path = full_path;
1817 while (path.find_last_of('/') != 5)
1818 {
1819 path = path.substr(0, path.find_last_of('/'));
1820
1821
1822
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
1851
1852 }
1853
1854
1855
1856 void SiPixelActionExecutor::normaliseAvDigiOcc(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
1857
1858
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
1886 void SiPixelActionExecutor::normaliseAvDigiOccVsLumi(DQMStore::IBooker &iBooker,
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
1918 void SiPixelActionExecutor::bookEfficiency(DQMStore::IBooker &iBooker, bool isUpgrade) {
1919
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 }
1939 else if (isUpgrade) {
1940 if (Tier0Flag_) {
1941 HitEfficiency_L1 =
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 {
1950 HitEfficiency_L1 =
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 }
1960
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_) {
1985 HitEfficiency_Dp1 =
1986 iBooker.book2D("HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blades;", 28, -17., 11., 1, 0., 1.);
1987 HitEfficiency_Dp2 =
1988 iBooker.book2D("HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blades;", 28, -17., 11., 1, 0., 1.);
1989 HitEfficiency_Dp3 =
1990 iBooker.book2D("HitEfficiency_Dp3", "Hit Efficiency in Endcap_Disk_p3;Blades;", 28, -17., 11., 1, 0., 1.);
1991 HitEfficiency_Dm1 =
1992 iBooker.book2D("HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blades;", 28, -17., 11., 1, 0., 1.);
1993 HitEfficiency_Dm2 =
1994 iBooker.book2D("HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;Blades;", 28, -17., 11., 1, 0., 1.);
1995 HitEfficiency_Dm3 =
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 }
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++) {
2019 HitEfficiencySummary->setBinLabel(i, bins[i - 1]);
2020 }
2021 }
2022
2023
2024
2025 void SiPixelActionExecutor::createEfficiency(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isUpgrade) {
2026
2027
2028 iGetter.cd();
2029 iBooker.cd();
2030 fillEfficiency(iBooker, iGetter, true, isUpgrade);
2031 iGetter.cd();
2032 iBooker.cd();
2033 fillEfficiency(iBooker, iGetter, false, isUpgrade);
2034 iGetter.cd();
2035 iBooker.cd();
2036
2037 }
2038
2039
2040
2041 int SiPixelActionExecutor::getLadder(const std::string &dname_) {
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
2052 int SiPixelActionExecutor::getBlade(const std::string &dname_) {
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
2063 void SiPixelActionExecutor::fillEfficiency(DQMStore::IBooker &iBooker,
2064 DQMStore::IGetter &iGetter,
2065 bool isbarrel,
2066 bool isUpgrade) {
2067
2068 string currDir = iBooker.pwd();
2069 string dname = currDir.substr(currDir.find_last_of('/') + 1);
2070
2071
2072 if (Tier0Flag_) {
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) {
2080
2081
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
2092 biny = getLadder(dname);
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;
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 }
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) {
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 }
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 }
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) {
2183 MonitorElement *missing = iGetter.get(full_path);
2184 if (!missing)
2185 continue;
2186
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
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 }
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) {
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
2314
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 {
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) {
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 {
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 }
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
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 }
2659
2660 }
2661
2662
2663
2664 void SiPixelActionExecutor::fillEfficiencySummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
2665
2666
2667
2668 if (!Tier0Flag_)
2669 return;
2670 HitEfficiencySummary = iGetter.get("Pixel/HitEfficiencySummary");
2671
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
2711 if (totalBins > 0)
2712 overalEff = totalEff / float(totalBins);
2713 HitEfficiencySummary->setBinContent(i + 1, overalEff);
2714 }
2715 }