Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-10-25 05:06:27

0001 //#define printing false
0002 //#define occupancyprinting false
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 // -- Constructor
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   // collationDone = false;
0035 }
0036 //=============================================================================================================
0037 //
0038 // --  Destructor
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 // -- Read Configuration File
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 // -- Read Configuration File
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   // printing cout<<"Entering
0076   // SiPixelActionExecutor::readConfiguration..."<<endl;
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   // printing cout<<"...leaving
0128   // SiPixelActionExecutor::readConfiguration..."<<endl;
0129   return true;
0130 }
0131 //=============================================================================================================
0132 bool SiPixelActionExecutor::readConfiguration(int &tkmap_freq, int &summary_freq) {
0133   // printing cout<<"Entering
0134   // SiPixelActionExecutor::readConfiguration..."<<endl;
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   // printing cout<<"...leaving
0156   // SiPixelActionExecutor::readConfiguration..."<<endl;
0157   return true;
0158 }
0159 
0160 //=============================================================================================================
0161 void SiPixelActionExecutor::createSummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isUpgrade) {
0162   // To be majorly overhauled and split into two, I guess.
0163 
0164   // cout<<"entering SiPixelActionExecutor::createSummary..."<<endl;
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   //  cout<<"*********************ATTENTION! LOCALPATH= "<<localPath<<endl;
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);  // Barrel
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   //  cout << "--- Processing endcap" << endl;
0199 
0200   iBooker.setCurrentFolder("Pixel/");
0201   iGetter.setCurrentFolder("Pixel/");
0202 
0203   fillSummary(iBooker, iGetter, endcap_structure_name, endcap_me_names, false,
0204               isUpgrade);  // Endcap
0205   iBooker.setCurrentFolder("Pixel/");
0206   iGetter.setCurrentFolder("Pixel/");
0207 
0208   if (source_type_ == 0 || source_type_ == 5 || source_type_ == 20) {  // do this only if RawData source is present
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   //  cout<<"leaving SiPixelActionExecutor::createSummary..."<<endl;
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   // cout<<"entering SiPixelActionExecutor::fillSummary..."<<endl;
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) {  // track residuals
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") {  // calibrations
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.);  // To look to get the size automatically
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     // Blade
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               // fill summary histos:
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) {  // errorType=30 (reset)
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               // set titles:
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();  // Going up a second time if we are processing the Blade
0622         iGetter.setCurrentFolder(iBooker.pwd());
0623       }
0624     }  // end for it (subdirs)
0625   } else {
0626     vector<string> subdirs = iGetter.getSubdirs();
0627     // printing cout << "#\t" << iBooker.pwd() << endl;
0628     if (isbarrel) {
0629       for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
0630         //               cout << "##\t" << iBooker.pwd() << "\t"
0631         //<<
0632         //(*it) << endl;
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);  // Barrel
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  // Endcap
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);  // Endcap
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   //  cout<<"...leaving SiPixelActionExecutor::fillSummary!"<<endl;
0684 }
0685 
0686 //=============================================================================================================
0687 void SiPixelActionExecutor::fillFEDErrorSummary(DQMStore::IBooker &iBooker,
0688                                                 DQMStore::IGetter &iGetter,
0689                                                 string dir_name,
0690                                                 vector<string> &me_names) {
0691   // printing cout<<"entering
0692   // SiPixelActionExecutor::fillFEDErrorSummary..."<<endl;
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         }  // If I don't reset this one, then I instead start adding error
0734         // codes..
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         }  // If I don't reset this one, then I instead start adding error
0744         // codes..
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           }  // If I don't reset this one, then I instead start adding error
0774           // codes..
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) {  // errorType=30 (reset)
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   // printing cout<<"...leaving
0875   // SiPixelActionExecutor::fillFEDErrorSummary!"<<endl;
0876 }
0877 
0878 //=============================================================================================================
0879 void SiPixelActionExecutor::fillGrandBarrelSummaryHistos(DQMStore::IBooker &iBooker,
0880                                                          DQMStore::IGetter &iGetter,
0881                                                          vector<string> &me_names,
0882                                                          bool isUpgrade) {
0883   //  cout<<"Entering
0884   //  SiPixelActionExecutor::fillGrandBarrelSummaryHistos...:"<<me_names.size()<<endl;
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           }  // end source_type if
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               // Setting title
1028 
1029               string title = "";
1030               if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMOFF")
1031                 title = "Total number of errors per Ladder";
1032               else if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMRAW")
1033                 title = "Total number of errors per Module";
1034               else if (prefix == "SUMOFF")
1035                 title = "mean " + (*iv) + " per Ladder";
1036               else if ((*igm)->getName().find("FREQ_") != string::npos && prefix != "SUMOFF")
1037                 title = "NEvents with digis per Module";
1038               else if ((*igm)->getName().find("FREQ_") != string::npos && prefix == "SUMOFF")
1039                 title = "NEvents with digis per Ladder/Blade";
1040               else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1041                 title = "NDigis";
1042               else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1043                 title = "NClusters";
1044               else
1045                 title = "mean " + (*iv) + " per Module";
1046               (*igm)->setAxisTitle(title, 2);
1047 
1048               // Setting binning
1049               if (!isUpgrade) {
1050                 if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1051                   nbin_subdir = 128;
1052                 } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1053                   nbin_subdir = 100;
1054                 } else if ((*igm)->getName().find("Ladder") != string::npos) {
1055                   nbin_i = 0;
1056                   nbin_subdir = 4;
1057                 } else if ((*igm)->getName().find("Layer") != string::npos) {
1058                   nbin_i = (cnt - 1) * 4;
1059                   nbin_subdir = 4;
1060                 } else if ((*igm)->getName().find("Shell") != string::npos) {
1061                   if (prefix != "SUMOFF") {
1062                     if (iDir == 0) {
1063                       nbin_i = 0;
1064                       nbin_subdir = 40;
1065                     } else if (iDir == 1) {
1066                       nbin_i = 40;
1067                       nbin_subdir = 64;
1068                     } else if (iDir == 2) {
1069                       nbin_i = 104;
1070                       nbin_subdir = 88;
1071                     }
1072                   } else {
1073                     if (iDir == 0) {
1074                       nbin_i = 0;
1075                       nbin_subdir = 10;
1076                     } else if (iDir == 1) {
1077                       nbin_i = 10;
1078                       nbin_subdir = 16;
1079                     } else if (iDir == 2) {
1080                       nbin_i = 26;
1081                       nbin_subdir = 22;
1082                     }
1083                   }
1084                 } else if ((*igm)->getName().find("Barrel") != string::npos) {
1085                   if (prefix != "SUMOFF") {
1086                     if (iDir == 0) {
1087                       nbin_i = 0;
1088                       nbin_subdir = 192;
1089                     } else if (iDir == 1) {
1090                       nbin_i = 192;
1091                       nbin_subdir = 192;
1092                     } else if (iDir == 2) {
1093                       nbin_i = 384;
1094                       nbin_subdir = 192;
1095                     } else if (iDir == 3) {
1096                       nbin_i = 576;
1097                       nbin_subdir = 192;
1098                     }
1099                   } else {
1100                     if (iDir == 0) {
1101                       nbin_i = 0;
1102                       nbin_subdir = 48;
1103                     } else if (iDir == 1) {
1104                       nbin_i = 48;
1105                       nbin_subdir = 48;
1106                     } else if (iDir == 2) {
1107                       nbin_i = 96;
1108                       nbin_subdir = 48;
1109                     } else if (iDir == 3) {
1110                       nbin_i = 144;
1111                       nbin_subdir = 48;
1112                     }
1113                   }
1114                 }
1115               } else if (isUpgrade) {
1116                 if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1117                   nbin_subdir = 128;
1118                 } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1119                   nbin_subdir = 100;
1120                 } else if ((*igm)->getName().find("Ladder") != string::npos) {
1121                   nbin_i = 0;
1122                   nbin_subdir = 4;
1123                 } else if ((*igm)->getName().find("Layer") != string::npos) {
1124                   nbin_i = (cnt - 1) * 4;
1125                   nbin_subdir = 4;
1126                 } else if ((*igm)->getName().find("Shell") != string::npos) {
1127                   if (prefix != "SUMOFF") {
1128                     if (iDir == 0) {
1129                       nbin_i = 0;
1130                       nbin_subdir = 24;
1131                     }  // 40(2*20)-->24(2*12)
1132                     else if (iDir == 1) {
1133                       nbin_i = 24;
1134                       nbin_subdir = 56;
1135                     }  // 64(32*2)-->56(2*28)
1136                     else if (iDir == 2) {
1137                       nbin_i = 80;
1138                       nbin_subdir = 88;
1139                     }  // 88(44*2)-->same88(44*2)
1140                     else if (iDir == 3) {
1141                       nbin_i = 168;
1142                       nbin_subdir = 128;
1143                     }
1144                   } else {
1145                     if (iDir == 0) {
1146                       nbin_i = 0;
1147                       nbin_subdir = 6;
1148                     }  // 10-->6
1149                     else if (iDir == 1) {
1150                       nbin_i = 6;
1151                       nbin_subdir = 14;
1152                     }  // 16-->14
1153                     else if (iDir == 2) {
1154                       nbin_i = 20;
1155                       nbin_subdir = 22;
1156                     }  // 22-->same22
1157                     else if (iDir == 3) {
1158                       nbin_i = 42;
1159                       nbin_subdir = 32;
1160                     }
1161                   }
1162                 } else if ((*igm)->getName().find("Barrel") != string::npos) {
1163                   if (prefix != "SUMOFF") {
1164                     if (iDir == 0) {
1165                       nbin_i = 0;
1166                       nbin_subdir = 296;
1167                     }  // 192=76 8/4-->296=1184/4
1168                     else if (iDir == 1) {
1169                       nbin_i = 296;
1170                       nbin_subdir = 296;
1171                     }  // 296*2,*3,*4=1184
1172                     else if (iDir == 2) {
1173                       nbin_i = 592;
1174                       nbin_subdir = 296;
1175                     } else if (iDir == 3) {
1176                       nbin_i = 888;
1177                       nbin_subdir = 296;
1178                     } else if (iDir == 4) {
1179                       nbin_i = 1184;
1180                       nbin_subdir = 296;
1181                     }
1182                   } else {
1183                     if (iDir == 0) {
1184                       nbin_i = 0;
1185                       nbin_subdir = 74;
1186                     }  // 48=192/4-->74=296/4
1187                     else if (iDir == 1) {
1188                       nbin_i = 74;
1189                       nbin_subdir = 74;
1190                     }  // 74*2,...*4=296
1191                     else if (iDir == 2) {
1192                       nbin_i = 148;
1193                       nbin_subdir = 74;
1194                     } else if (iDir == 3) {
1195                       nbin_i = 222;
1196                       nbin_subdir = 74;
1197                     } else if (iDir == 4) {
1198                       nbin_i = 296;
1199                       nbin_subdir = 74;
1200                     }
1201                   }
1202                 }
1203               }
1204 
1205               if ((*igm)->getName().find("ndigisFREQ") == string::npos) {
1206                 if (((*igm)->getName().find("adcCOMB") != string::npos &&
1207                      me->getName().find("adcCOMB") != string::npos) ||
1208                     ((*igm)->getName().find("chargeCOMB") != string::npos &&
1209                      me->getName().find("chargeCOMB") != string::npos)) {
1210                   (*igm)->getTH1F()->Add(me->getTH1F());
1211                 } else if (((*igm)->getName().find("charge_") != string::npos &&
1212                             (*igm)->getName().find("Track_") == string::npos &&
1213                             me->getName().find("charge_") != string::npos &&
1214                             me->getName().find("Track_") == string::npos) ||
1215                            ((*igm)->getName().find("nclusters_") != string::npos &&
1216                             (*igm)->getName().find("Track_") == string::npos &&
1217                             me->getName().find("nclusters_") != string::npos &&
1218                             me->getName().find("Track_") == string::npos) ||
1219                            ((*igm)->getName().find("size_") != string::npos &&
1220                             (*igm)->getName().find("Track_") == string::npos &&
1221                             me->getName().find("size_") != string::npos &&
1222                             me->getName().find("Track_") == string::npos) ||
1223                            ((*igm)->getName().find("charge_OffTrack_") != string::npos &&
1224                             me->getName().find("charge_OffTrack_") != string::npos) ||
1225                            ((*igm)->getName().find("nclusters_OffTrack_") != string::npos &&
1226                             me->getName().find("nclusters_OffTrack_") != string::npos) ||
1227                            ((*igm)->getName().find("size_OffTrack_") != string::npos &&
1228                             me->getName().find("size_OffTrack_") != string::npos) ||
1229                            ((*igm)->getName().find("charge_OnTrack_") != string::npos &&
1230                             me->getName().find("charge_OnTrack_") != string::npos) ||
1231                            ((*igm)->getName().find("nclusters_OnTrack_") != string::npos &&
1232                             me->getName().find("nclusters_OnTrack_") != string::npos) ||
1233                            ((*igm)->getName().find("size_OnTrack_") != string::npos &&
1234                             me->getName().find("size_OnTrack_") != string::npos) ||
1235                            ((*igm)->getName().find("charge_") == string::npos &&
1236                             (*igm)->getName().find("nclusters_") == string::npos &&
1237                             (*igm)->getName().find("size_") == string::npos)) {
1238                   for (int k = 1; k < nbin_subdir + 1; k++)
1239                     if (me->getBinContent(k) > 0)
1240                       (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1241                 }
1242               } else if (me->getName().find("ndigisFREQ") != string::npos) {
1243                 for (int k = 1; k < nbin_subdir + 1; k++)
1244                   if (me->getBinContent(k) > 0)
1245                     (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1246               }
1247             }  // end var in igm (gsum_mes)
1248           }  // end igm loop
1249         }  // end var in im (contents)
1250       }  // end of iv loop
1251     }  // end of im loop
1252     iDir++;
1253     first_subdir = false;  // We are done processing the first directory, we
1254                            // don't add any new MEs in the future passes.
1255   }  // end of it loop (subdirs)
1256   //  cout<<"...leaving
1257   //  SiPixelActionExecutor::fillGrandBarrelSummaryHistos!"<<endl;
1258 }
1259 
1260 //=============================================================================================================
1261 void SiPixelActionExecutor::fillGrandEndcapSummaryHistos(DQMStore::IBooker &iBooker,
1262                                                          DQMStore::IGetter &iGetter,
1263                                                          vector<string> &me_names,
1264                                                          bool isUpgrade) {
1265   // printing cout<<"Entering
1266   // SiPixelActionExecutor::fillGrandEndcapSummaryHistos..."<<endl;
1267   vector<MonitorElement *> gsum_mes;
1268   string currDir = iBooker.pwd();
1269   string path_name = iBooker.pwd();
1270   string dir_name = path_name.substr(path_name.find_last_of('/') + 1);
1271   if ((dir_name.find("DQMData") == 0) || (dir_name.find("Pixel") == 0) ||
1272       (dir_name.find("AdditionalPixelErrors") == 0) || (dir_name.find("Barrel") == 0) ||
1273       (dir_name.find("Shell") == 0) || (dir_name.find("Layer") == 0) || (dir_name.find("Ladder") == 0))
1274     return;
1275   vector<string> subdirs = iGetter.getSubdirs();
1276   int nbin = 0;
1277   int nbin_i = 0;
1278   int nbin_subdir = 0;
1279   int cnt = 0;
1280   bool first_subdir = true;
1281   for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1282     cnt++;
1283     iBooker.cd(*it);
1284     iGetter.cd(*it);
1285     vector<string> contents = iGetter.getMEs();
1286     iBooker.goUp();
1287     iGetter.setCurrentFolder(iBooker.pwd());
1288 
1289     string prefix;
1290     if (source_type_ == 0)
1291       prefix = "SUMRAW";
1292     else if (source_type_ == 1)
1293       prefix = "SUMDIG";
1294     else if (source_type_ == 2)
1295       prefix = "SUMCLU";
1296     else if (source_type_ == 3)
1297       prefix = "SUMTRK";
1298     else if (source_type_ == 4)
1299       prefix = "SUMHIT";
1300     else if (source_type_ >= 7 && source_type_ < 20)
1301       prefix = "SUMCAL";
1302     else if (source_type_ == 20)
1303       prefix = "SUMOFF";
1304 
1305     for (vector<string>::const_iterator im = contents.begin(); im != contents.end(); im++) {
1306       for (vector<string>::const_iterator iv = me_names.begin(); iv != me_names.end(); iv++) {
1307         string var = "_" + (*iv) + "_";
1308         if ((*im).find(var) != string::npos) {
1309           if ((var == "_charge_" || var == "_nclusters_" || var == "_size_" || var == "_sizeX_" || var == "_sizeY_") &&
1310               (*im).find("Track_") != string::npos)
1311             continue;
1312           string full_path = (*it) + "/" + (*im);
1313           MonitorElement *me = iGetter.get(full_path);
1314           if (!me)
1315             continue;
1316           if (source_type_ == 5 || source_type_ == 6) {
1317             if ((*iv) == "errorType" || (*iv) == "NErrors" || (*iv) == "fullType" || (*iv) == "chanNmbr" ||
1318                 (*iv) == "TBMType" || (*iv) == "EvtNbr" || (*iv) == "evtSize" || (*iv) == "linkId" ||
1319                 (*iv) == "ROCId" || (*iv) == "DCOLId" || (*iv) == "PXId" || (*iv) == "ROCNmbr" ||
1320                 (*iv) == "TBMMessage" || (*iv) == "Type36Hitmap")
1321               prefix = "SUMRAW";
1322             else if ((*iv) == "ndigis" || (*iv) == "adc" || (*iv) == "ndigisFREQ" || (*iv) == "adcCOMB")
1323               prefix = "SUMDIG";
1324             else if ((*iv) == "nclusters" || (*iv) == "x" || (*iv) == "y" || (*iv) == "charge" ||
1325                      (*iv) == "chargeCOMB" || (*iv) == "size" || (*iv) == "sizeX" || (*iv) == "sizeY" ||
1326                      (*iv) == "minrow" || (*iv) == "maxrow" || (*iv) == "mincol" || (*iv) == "maxcol")
1327               prefix = "SUMCLU";
1328             if (currDir.find("Track") != string::npos)
1329               prefix = "SUMTRK";
1330             else if ((*iv) == "residualX_mean" || (*iv) == "residualY_mean" || (*iv) == "residualX_RMS" ||
1331                      (*iv) == "residualY_RMS")
1332               prefix = "SUMTRK";
1333             else if ((*iv) == "ClustX" || (*iv) == "ClustY" || (*iv) == "nRecHits" || (*iv) == "ErrorX" ||
1334                      (*iv) == "ErrorY")
1335               prefix = "SUMHIT";
1336             else if ((*iv) == "Gain1d_mean" || (*iv) == "GainChi2NDF1d_mean" || (*iv) == "GainChi2Prob1d_mean" ||
1337                      (*iv) == "Pedestal1d_mean" || (*iv) == "ScurveChi2ProbSummary_mean" ||
1338                      (*iv) == "ScurveFitResultSummary_mean" || (*iv) == "ScurveSigmasSummary_mean" ||
1339                      (*iv) == "ScurveThresholdSummary_mean" || (*iv) == "Gain1d_RMS" || (*iv) == "GainChi2NDF1d_RMS" ||
1340                      (*iv) == "GainChi2Prob1d_RMS" || (*iv) == "Pedestal1d_RMS" || (*iv) == "GainNPoints1d_mean" ||
1341                      (*iv) == "GainNPoints1d_RMS" || (*iv) == "GainHighPoint1d_mean" ||
1342                      (*iv) == "GainHighPoint1d_RMS" || (*iv) == "GainLowPoint1d_mean" ||
1343                      (*iv) == "GainLowPoint1d_RMS" || (*iv) == "GainEndPoint1d_mean" || (*iv) == "GainEndPoint1d_RMS" ||
1344                      (*iv) == "GainFitResult2d_mean" || (*iv) == "GainFitResult2d_RMS" ||
1345                      (*iv) == "GainDynamicRange2d_mean" || (*iv) == "GainDynamicRange2d_RMS" ||
1346                      (*iv) == "GainSaturate2d_mean" || (*iv) == "GainSaturate2d_RMS" ||
1347                      (*iv) == "ScurveChi2ProbSummary_RMS" || (*iv) == "ScurveFitResultSummary_RMS" ||
1348                      (*iv) == "ScurveSigmasSummary_RMS" || (*iv) == "ScurveThresholdSummary_RMS" ||
1349                      (*iv) == "pixelAliveSummary_mean" || (*iv) == "pixelAliveSummary_FracOfPerfectPix" ||
1350                      (*iv) == "SiPixelErrorsCalibDigis_NCalibErrors")
1351               prefix = "SUMCAL";
1352           }
1353 
1354           if (first_subdir && !isUpgrade) {
1355             nbin = me->getTH1F()->GetNbinsX();
1356             string me_name = prefix + "_" + (*iv) + "_" + dir_name;
1357             if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
1358               me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
1359             else if (prefix == "SUMOFF" && dir_name == "Endcap")
1360               nbin = 96;
1361             else if (dir_name == "Endcap")
1362               nbin = 672;
1363             else if (prefix == "SUMOFF" && dir_name.find("HalfCylinder") != string::npos)
1364               nbin = 24;
1365             else if (dir_name.find("HalfCylinder") != string::npos)
1366               nbin = 168;
1367             else if (prefix == "SUMOFF" && dir_name.find("Disk") != string::npos)
1368               nbin = 12;
1369             else if (dir_name.find("Disk") != string::npos)
1370               nbin = 84;
1371             else if (dir_name.find("Blade") != string::npos)
1372               nbin = 7;
1373             getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
1374           } else if (first_subdir && isUpgrade) {
1375             nbin = me->getTH1F()->GetNbinsX();
1376             string me_name = prefix + "_" + (*iv) + "_" + dir_name;
1377             if ((*iv) == "adcCOMB" || (*iv) == "chargeCOMB")
1378               me_name = "ALLMODS_" + (*iv) + "_" + dir_name;
1379             else if (prefix == "SUMOFF" && dir_name == "Endcap")
1380               nbin = 336;
1381             else if (dir_name == "Endcap")
1382               nbin = 672;
1383             else if (prefix == "SUMOFF" && dir_name.find("HalfCylinder") != string::npos)
1384               nbin = 84;
1385             else if (dir_name.find("HalfCylinder") != string::npos)
1386               nbin = 168;
1387             else if (prefix == "SUMOFF" && dir_name.find("Disk") != string::npos)
1388               nbin = 28;
1389             else if (dir_name.find("Disk") != string::npos)
1390               nbin = 56;
1391             else if (dir_name.find("Blade") != string::npos)
1392               nbin = 2;
1393             getGrandSummaryME(iBooker, iGetter, nbin, me_name, gsum_mes);
1394           }
1395 
1396           for (vector<MonitorElement *>::const_iterator igm = gsum_mes.begin(); igm != gsum_mes.end(); igm++) {
1397             if ((*igm)->getName().find(var) != string::npos) {
1398               if (prefix == "SUMOFF")
1399                 (*igm)->setAxisTitle("Blades", 1);
1400               else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1401                 (*igm)->setAxisTitle("Digi charge [ADC]", 1);
1402               else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1403                 (*igm)->setAxisTitle("Cluster charge [kilo electrons]", 1);
1404               else
1405                 (*igm)->setAxisTitle("Modules", 1);
1406               string title = "";
1407               if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMOFF")
1408                 title = "Total number of errors per Blade";
1409               else if ((*igm)->getName().find("NErrors_") != string::npos && prefix == "SUMRAW")
1410                 title = "Total number of errors per Module";
1411               else if (prefix == "SUMOFF")
1412                 title = "mean " + (*iv) + " per Blade";
1413               else if ((*igm)->getName().find("FREQ_") != string::npos)
1414                 title = "NEvents with digis per Module";
1415               else if ((*igm)->getName().find("adcCOMB_") != string::npos)
1416                 title = "NDigis";
1417               else if ((*igm)->getName().find("chargeCOMB_") != string::npos)
1418                 title = "NClusters";
1419               else
1420                 title = "mean " + (*iv) + " per Module";
1421               (*igm)->setAxisTitle(title, 2);
1422               nbin_i = 0;
1423               if (!isUpgrade) {
1424                 if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1425                   nbin_subdir = 128;
1426                 } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1427                   nbin_subdir = 100;
1428                 } else if ((*igm)->getName().find("Panel_") != string::npos) {
1429                   nbin_subdir = 7;
1430                 } else if ((*igm)->getName().find("Blade") != string::npos) {
1431                   if ((*im).find("_1") != string::npos)
1432                     nbin_subdir = 4;
1433                   if ((*im).find("_2") != string::npos) {
1434                     nbin_i = 4;
1435                     nbin_subdir = 3;
1436                   }
1437                 } else if ((*igm)->getName().find("Disk") != string::npos) {
1438                   nbin_i = ((cnt - 1) % 12) * 7;
1439                   nbin_subdir = 7;
1440                 } else if ((*igm)->getName().find("HalfCylinder") != string::npos) {
1441                   if (prefix != "SUMOFF") {
1442                     nbin_subdir = 84;
1443                     if ((*im).find("_2") != string::npos)
1444                       nbin_i = 84;
1445                   } else {
1446                     nbin_subdir = 12;
1447                     if ((*im).find("_2") != string::npos)
1448                       nbin_i = 12;
1449                   }
1450                 } else if ((*igm)->getName().find("Endcap") != string::npos) {
1451                   if (prefix != "SUMOFF") {
1452                     nbin_subdir = 168;
1453                     if ((*im).find("_mO") != string::npos)
1454                       nbin_i = 168;
1455                     if ((*im).find("_pI") != string::npos)
1456                       nbin_i = 336;
1457                     if ((*im).find("_pO") != string::npos)
1458                       nbin_i = 504;
1459                   } else {
1460                     nbin_subdir = 24;
1461                     if ((*im).find("_mO") != string::npos)
1462                       nbin_i = 24;
1463                     if ((*im).find("_pI") != string::npos)
1464                       nbin_i = 48;
1465                     if ((*im).find("_pO") != string::npos)
1466                       nbin_i = 72;
1467                   }
1468                 }
1469               } else if (isUpgrade) {
1470                 if ((*igm)->getName().find("ALLMODS_adcCOMB_") != string::npos) {
1471                   nbin_subdir = 128;
1472                 } else if ((*igm)->getName().find("ALLMODS_chargeCOMB_") != string::npos) {
1473                   nbin_subdir = 100;
1474                 } else if ((*igm)->getName().find("Panel_") != string::npos) {
1475                   nbin_subdir = 2;
1476                 } else if ((*igm)->getName().find("Blade") != string::npos) {
1477                   if ((*im).find("_1") != string::npos)
1478                     nbin_subdir = 1;
1479                   if ((*im).find("_2") != string::npos) {
1480                     nbin_i = 1;
1481                     nbin_subdir = 1;
1482                   }
1483                 } else if ((*igm)->getName().find("Disk") != string::npos) {
1484                   nbin_i = ((cnt - 1) % 28) * 2;
1485                   nbin_subdir = 2;
1486                 } else if ((*igm)->getName().find("HalfCylinder") != string::npos) {
1487                   if (prefix != "SUMOFF") {
1488                     nbin_subdir = 56;
1489                     if ((*im).find("_2") != string::npos)
1490                       nbin_i = 56;
1491                     if ((*im).find("_3") != string::npos)
1492                       nbin_i = 112;
1493                   } else {
1494                     nbin_subdir = 28;
1495                     if ((*im).find("_2") != string::npos)
1496                       nbin_i = 28;
1497                     if ((*im).find("_3") != string::npos)
1498                       nbin_i = 56;
1499                   }
1500                 } else if ((*igm)->getName().find("Endcap") != string::npos) {
1501                   if (prefix != "SUMOFF") {
1502                     nbin_subdir = 168;
1503                     if ((*im).find("_mO") != string::npos)
1504                       nbin_i = 168;
1505                     if ((*im).find("_pI") != string::npos)
1506                       nbin_i = 336;
1507                     if ((*im).find("_pO") != string::npos)
1508                       nbin_i = 504;
1509                   } else {
1510                     nbin_subdir = 84;
1511                     if ((*im).find("_mO") != string::npos)
1512                       nbin_i = 84;
1513                     if ((*im).find("_pI") != string::npos)
1514                       nbin_i = 168;
1515                     if ((*im).find("_pO") != string::npos)
1516                       nbin_i = 252;
1517                   }
1518                 }
1519               }
1520 
1521               if ((*igm)->getName().find("ndigisFREQ") == string::npos) {
1522                 if (((*igm)->getName().find("adcCOMB") != string::npos &&
1523                      me->getName().find("adcCOMB") != string::npos) ||
1524                     ((*igm)->getName().find("chargeCOMB") != string::npos &&
1525                      me->getName().find("chargeCOMB") != string::npos)) {
1526                   (*igm)->getTH1F()->Add(me->getTH1F());
1527                 } else if (((*igm)->getName().find("charge_") != string::npos &&
1528                             (*igm)->getName().find("Track_") == string::npos &&
1529                             me->getName().find("charge_") != string::npos &&
1530                             me->getName().find("Track_") == string::npos) ||
1531                            ((*igm)->getName().find("nclusters_") != string::npos &&
1532                             (*igm)->getName().find("Track_") == string::npos &&
1533                             me->getName().find("nclusters_") != string::npos &&
1534                             me->getName().find("Track_") == string::npos) ||
1535                            ((*igm)->getName().find("size_") != string::npos &&
1536                             (*igm)->getName().find("Track_") == string::npos &&
1537                             me->getName().find("size_") != string::npos &&
1538                             me->getName().find("Track_") == string::npos) ||
1539                            ((*igm)->getName().find("charge_OffTrack_") != string::npos &&
1540                             me->getName().find("charge_OffTrack_") != string::npos) ||
1541                            ((*igm)->getName().find("nclusters_OffTrack_") != string::npos &&
1542                             me->getName().find("nclusters_OffTrack_") != string::npos) ||
1543                            ((*igm)->getName().find("size_OffTrack_") != string::npos &&
1544                             me->getName().find("size_OffTrack_") != string::npos) ||
1545                            ((*igm)->getName().find("charge_OnTrack_") != string::npos &&
1546                             me->getName().find("charge_OnTrack_") != string::npos) ||
1547                            ((*igm)->getName().find("nclusters_OnTrack_") != string::npos &&
1548                             me->getName().find("nclusters_OnTrack_") != string::npos) ||
1549                            ((*igm)->getName().find("size_OnTrack_") != string::npos &&
1550                             me->getName().find("size_OnTrack_") != string::npos) ||
1551                            ((*igm)->getName().find("charge_") == string::npos &&
1552                             (*igm)->getName().find("nclusters_") == string::npos &&
1553                             (*igm)->getName().find("size_") == string::npos)) {
1554                   for (int k = 1; k < nbin_subdir + 1; k++)
1555                     if (me->getBinContent(k) > 0)
1556                       (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1557                 }
1558               } else if (me->getName().find("ndigisFREQ") != string::npos) {
1559                 for (int k = 1; k < nbin_subdir + 1; k++)
1560                   if (me->getBinContent(k) > 0)
1561                     (*igm)->setBinContent(k + nbin_i, me->getBinContent(k));
1562               }
1563               //           }// for
1564             }
1565           }
1566         }
1567       }
1568     }
1569 
1570     first_subdir = false;  // We are done processing the first directory, we
1571                            // don't add any new MEs in the future passes.
1572   }  // end for it (subdirs)
1573 }
1574 //=============================================================================================================
1575 //
1576 // -- Get Summary ME
1577 //
1578 void SiPixelActionExecutor::getGrandSummaryME(
1579     DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, int nbin, string &me_name, vector<MonitorElement *> &mes) {
1580   // printing cout<<"Entering SiPixelActionExecutor::getGrandSummaryME for:
1581   // "<<me_name<<endl;
1582   if ((iBooker.pwd()).find("Pixel") == string::npos)
1583     return;  // If one doesn't find pixel
1584   vector<string> contents = iGetter.getMEs();
1585 
1586   for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1587     // printing cout<<"in grand summary me: "<<me_name<<","<<(*it)<<endl;
1588     if ((*it).find(me_name) == 0) {
1589       string fullpathname = iBooker.pwd() + "/" + me_name;
1590       MonitorElement *me = iGetter.get(fullpathname);
1591 
1592       if (me) {
1593         me->Reset();
1594         mes.push_back(me);
1595         return;
1596       }
1597     }
1598   }
1599 
1600   MonitorElement *temp_me(nullptr);
1601   if (me_name.find("ALLMODS_adcCOMB_") != string::npos)
1602     temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 128, 0, 256);
1603   else if (me_name.find("ALLMODS_chargeCOMB_") != string::npos)
1604     temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 100, 0, 200);
1605   else
1606     temp_me = iBooker.book1D(me_name.c_str(), me_name.c_str(), nbin, 1., nbin + 1.);
1607   if (temp_me)
1608     mes.push_back(temp_me);
1609 
1610   //  if(temp_me) cout<<"finally found grand ME: "<<me_name<<endl;
1611 }
1612 
1613 //=============================================================================================================
1614 //
1615 // -- Get Summary ME
1616 //
1617 SiPixelActionExecutor::MonitorElement *SiPixelActionExecutor::getSummaryME(DQMStore::IBooker &iBooker,
1618                                                                            DQMStore::IGetter &iGetter,
1619                                                                            string me_name,
1620                                                                            bool isUpgrade) {
1621   // printing cout<<"Entering SiPixelActionExecutor::getSummaryME for:
1622   // "<<me_name<<endl;
1623   MonitorElement *me = nullptr;
1624   if ((iBooker.pwd()).find("Pixel") == string::npos)
1625     return me;
1626   vector<string> contents = iGetter.getMEs();
1627 
1628   for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1629     if ((*it).find(me_name) == 0) {
1630       string fullpathname = iBooker.pwd() + "/" + (*it);
1631       me = iGetter.get(fullpathname);
1632       if (me) {
1633         me->Reset();
1634         return me;
1635       }
1636     }
1637   }
1638   contents.clear();
1639   if (!isUpgrade) {
1640     if (me_name.find("SUMOFF") == string::npos) {
1641       if (me_name.find("Blade_") != string::npos)
1642         me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 7, 1., 8.);
1643       else
1644         me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 4, 1., 5.);
1645     } else if (me_name.find("Layer_1") != string::npos) {
1646       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 10, 1., 11.);
1647     } else if (me_name.find("Layer_2") != string::npos) {
1648       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 16, 1., 17.);
1649     } else if (me_name.find("Layer_3") != string::npos) {
1650       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 22, 1., 23.);
1651     } else if (me_name.find("Disk_") != string::npos) {
1652       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 12, 1., 13.);
1653     }
1654   }  // endifNOTUpgrade
1655   else if (isUpgrade) {
1656     if (me_name.find("SUMOFF") == string::npos) {
1657       if (me_name.find("Blade_") != string::npos)
1658         me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 2, 1., 3.);
1659       else
1660         me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 1, 1., 2.);
1661     } else if (me_name.find("Layer_1") != string::npos) {
1662       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 6, 1., 7.);
1663     } else if (me_name.find("Layer_2") != string::npos) {
1664       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 14, 1., 15.);
1665     } else if (me_name.find("Layer_3") != string::npos) {
1666       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 22, 1., 23.);
1667     } else if (me_name.find("Layer_4") != string::npos) {
1668       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 32, 1., 33.);
1669     } else if (me_name.find("Disk_") != string::npos) {
1670       me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 28, 1., 29.);
1671     }
1672   }  // endifUpgrade
1673 
1674   return me;
1675 }
1676 
1677 //=============================================================================================================
1678 SiPixelActionExecutor::MonitorElement *SiPixelActionExecutor::getFEDSummaryME(DQMStore::IBooker &iBooker,
1679                                                                               DQMStore::IGetter &iGetter,
1680                                                                               string me_name) {
1681   // printing cout<<"Entering SiPixelActionExecutor::getFEDSummaryME..."<<endl;
1682   MonitorElement *me = nullptr;
1683   if ((iBooker.pwd()).find("Pixel") == string::npos)
1684     return me;
1685   vector<string> contents = iGetter.getMEs();
1686 
1687   for (vector<string>::const_iterator it = contents.begin(); it != contents.end(); it++) {
1688     if ((*it).find(me_name) == 0) {
1689       string fullpathname = iBooker.pwd() + "/" + (*it);
1690 
1691       me = iGetter.get(fullpathname);
1692 
1693       if (me) {
1694         me->Reset();
1695         return me;
1696       }
1697     }
1698   }
1699   contents.clear();
1700   me = iBooker.book1D(me_name.c_str(), me_name.c_str(), 40, -0.5, 39.5);
1701 
1702   return me;
1703 }
1704 
1705 //=============================================================================================================
1706 void SiPixelActionExecutor::bookOccupancyPlots(DQMStore::IBooker &iBooker,
1707                                                DQMStore::IGetter &iGetter,
1708                                                bool hiRes,
1709                                                bool isbarrel)  // Polymorphism
1710 {
1711   if (Tier0Flag_)
1712     return;
1713   vector<string> subdirs = iGetter.getSubdirs();
1714   for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1715     if (isbarrel && (*it).find("Barrel") == string::npos)
1716       continue;
1717     if (!isbarrel && (*it).find("Endcap") == string::npos)
1718       continue;
1719 
1720     if ((*it).find("Module_") != string::npos)
1721       continue;
1722     if ((*it).find("Panel_") != string::npos)
1723       continue;
1724     if ((*it).find("Ladder_") != string::npos)
1725       continue;
1726     if ((*it).find("Blade_") != string::npos)
1727       continue;
1728     if ((*it).find("Layer_") != string::npos)
1729       continue;
1730     if ((*it).find("Disk_") != string::npos)
1731       continue;
1732     iBooker.cd(*it);
1733     iGetter.cd(*it);
1734     bookOccupancyPlots(iBooker, iGetter, hiRes, isbarrel);
1735     if (!hiRes) {
1736       // occupancyprinting cout<<"booking low res barrel occ plot now!"<<endl;
1737       OccupancyMap = iBooker.book2D((isbarrel ? "barrelOccupancyMap" : "endcapOccupancyMap"),
1738                                     "Barrel Digi Occupancy Map (4 pix per bin)",
1739                                     isbarrel ? 208 : 130,
1740                                     0.,
1741                                     isbarrel ? 416. : 260.,
1742                                     80,
1743                                     0.,
1744                                     160.);
1745     } else {
1746       // occupancyprinting cout<<"booking high res barrel occ plot now!"<<endl;
1747       OccupancyMap = iBooker.book2D((isbarrel ? "barrelOccupancyMap" : "endcapOccupancyMap"),
1748                                     "Barrel Digi Occupancy Map (1 pix per bin)",
1749                                     isbarrel ? 416 : 260,
1750                                     0.,
1751                                     isbarrel ? 416. : 260.,
1752                                     160,
1753                                     0.,
1754                                     160.);
1755     }
1756     OccupancyMap->setAxisTitle("Columns", 1);
1757     OccupancyMap->setAxisTitle("Rows", 2);
1758 
1759     iBooker.goUp();
1760     iGetter.setCurrentFolder(iBooker.pwd());
1761   }
1762 }
1763 //=============================================================================================================
1764 void SiPixelActionExecutor::bookOccupancyPlots(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool hiRes) {
1765   if (Tier0Flag_)
1766     return;
1767   // Barrel
1768   iGetter.cd();
1769   iBooker.cd();
1770   iGetter.setCurrentFolder("Pixel");
1771   iBooker.setCurrentFolder("Pixel");
1772   this->bookOccupancyPlots(iBooker, iGetter, hiRes, true);
1773 
1774   // Endcap
1775   iGetter.cd();
1776   iBooker.cd();
1777   iGetter.setCurrentFolder("Pixel");
1778   iBooker.setCurrentFolder("Pixel");
1779   this->bookOccupancyPlots(iBooker, iGetter, hiRes, false);
1780 }
1781 
1782 void SiPixelActionExecutor::createOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
1783   // std::cout<<"entering SiPixelActionExecutor::createOccupancy..."<<std::endl;
1784   if (Tier0Flag_)
1785     return;
1786   iBooker.cd();
1787   iGetter.cd();
1788   fillOccupancy(iBooker, iGetter, true);
1789   iBooker.cd();
1790   iGetter.cd();
1791   fillOccupancy(iBooker, iGetter, false);
1792   iBooker.cd();
1793   iGetter.cd();
1794 
1795   // std::cout<<"leaving SiPixelActionExecutor::createOccupancy..."<<std::endl;
1796 }
1797 
1798 //=============================================================================================================
1799 
1800 void SiPixelActionExecutor::fillOccupancy(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter, bool isbarrel) {
1801   // occupancyprinting cout<<"entering
1802   // SiPixelActionExecutor::fillOccupancy..."<<std::endl;
1803   if (Tier0Flag_)
1804     return;
1805   string currDir = iBooker.pwd();
1806   string dname = currDir.substr(currDir.find_last_of('/') + 1);
1807 
1808   if (dname.find("Layer_") != string::npos || dname.find("Disk_") != string::npos) {
1809     vector<string> meVec = iGetter.getMEs();
1810     for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
1811       string full_path = currDir + "/" + (*it);
1812       if (full_path.find("hitmap_siPixelDigis") != string::npos) {  // If we have the hitmap ME
1813         MonitorElement *me = iGetter.get(full_path);
1814         if (!me)
1815           continue;
1816         string path = full_path;
1817         while (path.find_last_of('/') != 5)  // Stop before Pixel/
1818         {
1819           path = path.substr(0, path.find_last_of('/'));
1820           //                            cout << "\t" <<
1821           // path
1822           //<< endl;
1823           OccupancyMap = iGetter.get(path + "/" + (isbarrel ? "barrel" : "endcap") + "OccupancyMap");
1824 
1825           if (OccupancyMap) {
1826             for (int i = 1; i != me->getNbinsX() + 1; i++)
1827               for (int j = 1; j != me->getNbinsY() + 1; j++) {
1828                 float previous = OccupancyMap->getBinContent(i, j);
1829                 OccupancyMap->setBinContent(i, j, previous + me->getBinContent(i, j));
1830               }
1831             OccupancyMap->getTH2F()->SetEntries(OccupancyMap->getTH2F()->Integral());
1832           }
1833         }
1834       }
1835     }
1836   } else {
1837     vector<string> subdirs = iGetter.getSubdirs();
1838     for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
1839       iGetter.cd(*it);
1840       iBooker.cd(*it);
1841       if (*it != "Pixel" &&
1842           ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
1843         continue;
1844       fillOccupancy(iBooker, iGetter, isbarrel);
1845       iBooker.goUp();
1846       iGetter.setCurrentFolder(iBooker.pwd());
1847     }
1848   }
1849 
1850   // occupancyprinting cout<<"leaving
1851   // SiPixelActionExecutor::fillOccupancy..."<<std::endl;
1852 }
1853 
1854 //=============================================================================================================
1855 
1856 void SiPixelActionExecutor::normaliseAvDigiOcc(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
1857   // occupancyprinting cout<<"entering
1858   // SiPixelActionExecutor::normaliseAvDigiOcc..."<<std::endl;
1859 
1860   iGetter.cd();
1861 
1862   MonitorElement *roccupancyPlot = iGetter.get("Pixel/averageDigiOccupancy");
1863 
1864   float totalDigisBPIX = 0.;
1865   float totalDigisFPIX = 0.;
1866   for (int i = 1; i != 41; i++) {
1867     if (i < 33)
1868       totalDigisBPIX += roccupancyPlot->getBinContent(i);
1869     else
1870       totalDigisFPIX += roccupancyPlot->getBinContent(i);
1871   }
1872   float averageBPIXOcc = totalDigisBPIX / 32.;
1873   float averageFPIXOcc = totalDigisFPIX / 8.;
1874   for (int i = 1; i != 41; i++) {
1875     if (i < 33)
1876       roccupancyPlot->setBinContent(i, averageBPIXOcc != 0. ? roccupancyPlot->getBinContent(i) / averageBPIXOcc : 0.);
1877     else
1878       roccupancyPlot->setBinContent(i, averageFPIXOcc != 0. ? roccupancyPlot->getBinContent(i) / averageFPIXOcc : 0.);
1879   }
1880 
1881   iGetter.setCurrentFolder(iBooker.pwd());
1882 }
1883 
1884 //=============================================================================================================
1885 
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   // Barrel
1920   iBooker.cd();
1921   iBooker.setCurrentFolder("Pixel/Barrel");
1922   if (!isUpgrade) {
1923     if (Tier0Flag_) {
1924       HitEfficiency_L1 = iBooker.book2D(
1925           "HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;Module;Ladder", 9, -4.5, 4.5, 21, -10.5, 10.5);
1926       HitEfficiency_L2 = iBooker.book2D(
1927           "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;Module;Ladder", 9, -4.5, 4.5, 33, -16.5, 16.5);
1928       HitEfficiency_L3 = iBooker.book2D(
1929           "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;Module;Ladder", 9, -4.5, 4.5, 45, -22.5, 22.5);
1930     } else {
1931       HitEfficiency_L1 = iBooker.book2D(
1932           "HitEfficiency_L1", "Hit Efficiency in Barrel_Layer1;Module;Ladder", 9, -4.5, 4.5, 21, -10.5, 10.5);
1933       HitEfficiency_L2 = iBooker.book2D(
1934           "HitEfficiency_L2", "Hit Efficiency in Barrel_Layer2;Module;Ladder", 9, -4.5, 4.5, 33, -16.5, 16.5);
1935       HitEfficiency_L3 = iBooker.book2D(
1936           "HitEfficiency_L3", "Hit Efficiency in Barrel_Layer3;Module;Ladder", 9, -4.5, 4.5, 45, -22.5, 22.5);
1937     }
1938   }  // endifNOTUpgrade
1939   else if (isUpgrade) {
1940     if (Tier0Flag_) {
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   }  // endifUpgrade
1960   // Endcap
1961   iBooker.cd();
1962   iBooker.setCurrentFolder("Pixel/Endcap");
1963   if (!isUpgrade) {
1964     if (Tier0Flag_) {
1965       HitEfficiency_Dp1 = iBooker.book2D(
1966           "HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1967       HitEfficiency_Dp2 = iBooker.book2D(
1968           "HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1969       HitEfficiency_Dm1 = iBooker.book2D(
1970           "HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1971       HitEfficiency_Dm2 = iBooker.book2D(
1972           "HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;;Blade;Panel", 26, -13., 13., 2, 0.5, 2.5);
1973     } else {
1974       HitEfficiency_Dp1 = iBooker.book2D(
1975           "HitEfficiency_Dp1", "Hit Efficiency in Endcap_Disk_p1;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1976       HitEfficiency_Dp2 = iBooker.book2D(
1977           "HitEfficiency_Dp2", "Hit Efficiency in Endcap_Disk_p2;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1978       HitEfficiency_Dm1 = iBooker.book2D(
1979           "HitEfficiency_Dm1", "Hit Efficiency in Endcap_Disk_m1;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1980       HitEfficiency_Dm2 = iBooker.book2D(
1981           "HitEfficiency_Dm2", "Hit Efficiency in Endcap_Disk_m2;Blades;Modules", 24, -12., 12., 7, 1., 8.);
1982     }
1983   } else if (isUpgrade) {
1984     if (Tier0Flag_) {
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   }  // endif(isUpgrade)
2012   iBooker.cd();
2013   iBooker.cd("Pixel/");
2014   string bins[] = {"Layer1", "Layer2", "Layer3", "Disk1+", "Disk2+", "Disk1-", "Disk2-"};
2015   HitEfficiencySummary = iBooker.book1D("HitEfficiencySummary", "Hit efficiency per sub detector", 7, 0, 7);
2016   HitEfficiencySummary->setAxisTitle("Sub Detector", 1);
2017   HitEfficiencySummary->setAxisTitle("Efficiency (%)", 2);
2018   for (int i = 1; i < 8; i++) {
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   // std::cout<<"entering
2027   // SiPixelActionExecutor::createEfficiency..."<<std::endl;
2028   iGetter.cd();
2029   iBooker.cd();
2030   fillEfficiency(iBooker, iGetter, true, isUpgrade);  // Barrel
2031   iGetter.cd();
2032   iBooker.cd();
2033   fillEfficiency(iBooker, iGetter, false, isUpgrade);  // Endcap
2034   iGetter.cd();
2035   iBooker.cd();
2036   // std::cout<<"leaving SiPixelActionExecutor::createEfficiency..."<<std::endl;
2037 }
2038 
2039 //=============================================================================================================
2040 
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   // cout<<"entering SiPixelActionExecutor::fillEfficiency..."<<std::endl;
2068   string currDir = iBooker.pwd();
2069   string dname = currDir.substr(currDir.find_last_of('/') + 1);
2070   // cout<<"currDir= "<<currDir<< " , dname= "<<dname<<std::endl;
2071 
2072   if (Tier0Flag_) {  // Offline
2073     if (isbarrel && dname.find("Ladder_") != string::npos) {
2074       if (!isUpgrade) {
2075         vector<string> meVec = iGetter.getMEs();
2076         for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2077           string full_path = currDir + "/" + (*it);
2078 
2079           if (full_path.find("missingMod_") != string::npos) {  // If we have missing hits ME
2080 
2081             // Get the MEs that contain missing and valid hits
2082             MonitorElement *missing = iGetter.get(full_path);
2083             if (!missing)
2084               continue;
2085             string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2086             MonitorElement *valid = iGetter.get(new_path);
2087             if (!valid)
2088               continue;
2089             int binx = 0;
2090             int biny = 0;
2091             // get the ladder number
2092             biny = getLadder(dname);  // Current
2093             if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2094               biny = -biny;
2095             }
2096             const int nMod = 4;
2097             for (int i = 1; i < nMod + 1; i++) {
2098               float hitEfficiency = -1.0;
2099               float missingHits = 0;
2100               float validHits = 0;
2101               binx = i;  // Module
2102               if (currDir.find("Shell_m") != string::npos)
2103                 binx = -binx;
2104 
2105               missingHits = missing->getBinContent(i);
2106               validHits = valid->getBinContent(i);
2107               if (validHits + missingHits > 0.)
2108                 hitEfficiency = validHits / (validHits + missingHits);
2109 
2110               if (currDir.find("Layer_1") != string::npos) {
2111                 HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2112                 if (HitEfficiency_L1)
2113                   HitEfficiency_L1->setBinContent(HitEfficiency_L1->getTH2F()->FindBin(binx, biny),
2114                                                   (float)hitEfficiency);
2115               } else if (currDir.find("Layer_2") != string::npos) {
2116                 HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2117                 if (HitEfficiency_L2)
2118                   HitEfficiency_L2->setBinContent(HitEfficiency_L2->getTH2F()->FindBin(binx, biny),
2119                                                   (float)hitEfficiency);
2120               } else if (currDir.find("Layer_3") != string::npos) {
2121                 HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2122                 if (HitEfficiency_L3)
2123                   HitEfficiency_L3->setBinContent(HitEfficiency_L3->getTH2F()->FindBin(binx, biny),
2124                                                   (float)hitEfficiency);
2125               }
2126             }
2127           }
2128         }
2129       }  // endifNOTUpgradeInBPix
2130       else if (isUpgrade) {
2131         vector<string> meVec = iGetter.getMEs();
2132         for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2133           string full_path = currDir + "/" + (*it);
2134           if (full_path.find("missing_") != string::npos) {  // If we have missing hits ME
2135             MonitorElement *me = iGetter.get(full_path);
2136             if (!me)
2137               continue;
2138             float missingHits = me->getEntries();
2139             string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2140             me = iGetter.get(new_path);
2141             if (!me)
2142               continue;
2143             float validHits = me->getEntries();
2144             float hitEfficiency = -1.;
2145             if (validHits + missingHits > 0.)
2146               hitEfficiency = validHits / (validHits + missingHits);
2147             int binx = 0;
2148             int biny = 0;
2149             biny = getLadder(dname);
2150             if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2151               biny = -biny;
2152             }
2153             if (currDir.find("Shell_m") != string::npos) {
2154               binx = 1;
2155             } else {
2156               binx = 2;
2157             }  // x-axis: z-side
2158             if (currDir.find("Layer_1") != string::npos) {
2159               HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2160               if (HitEfficiency_L1)
2161                 HitEfficiency_L1->setBinContent(binx, biny, (float)hitEfficiency);
2162             } else if (currDir.find("Layer_2") != string::npos) {
2163               HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2164               if (HitEfficiency_L2)
2165                 HitEfficiency_L2->setBinContent(binx, biny, (float)hitEfficiency);
2166             } else if (currDir.find("Layer_3") != string::npos) {
2167               HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2168               if (HitEfficiency_L3)
2169                 HitEfficiency_L3->setBinContent(binx, biny, (float)hitEfficiency);
2170             } else if (currDir.find("Layer_4") != string::npos) {
2171               HitEfficiency_L4 = iGetter.get("Pixel/Barrel/HitEfficiency_L4");
2172               if (HitEfficiency_L4)
2173                 HitEfficiency_L4->setBinContent(binx, biny, (float)hitEfficiency);
2174             }
2175           }
2176         }
2177       }  // endifUpgradeInBPix
2178     } else if (!isbarrel && dname.find("Blade_") != string::npos && !isUpgrade) {
2179       vector<string> meVec = iGetter.getMEs();
2180       for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2181         string full_path = currDir + "/" + (*it);
2182         if (full_path.find("missing_") != string::npos) {  // If we have missing hits ME
2183           MonitorElement *missing = iGetter.get(full_path);
2184           if (!missing)
2185             continue;
2186           // float missingHits = missing->getEntries();
2187           string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2188           MonitorElement *valid = iGetter.get(new_path);
2189           if (!valid)
2190             continue;
2191           // float validHits = valid->getEntries();
2192           int binx = 0;
2193           int biny = 0;
2194           binx = getBlade(dname);
2195           if (currDir.find("HalfCylinder_mI") != string::npos || currDir.find("HalfCylinder_pI") != string::npos) {
2196             binx = binx + 14;
2197           } else {
2198             binx = 13 - binx;
2199           }
2200           const int nPanel = 2;
2201           for (int i = 1; i < nPanel + 1; i++) {
2202             float hitEfficiency = -1.;
2203             float missingHits = 0;
2204             float validHits = 0;
2205             biny = i;
2206             missingHits = missing->getBinContent(i);
2207             validHits = valid->getBinContent(i);
2208             if (validHits + missingHits > 0.)
2209               hitEfficiency = validHits / (validHits + missingHits);
2210             if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2211               HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2212               if (HitEfficiency_Dm1)
2213                 HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2214             } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2215               HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2216               if (HitEfficiency_Dm2)
2217                 HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2218             } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2219               HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2220               if (HitEfficiency_Dp1)
2221                 HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2222             } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2223               HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2224               if (HitEfficiency_Dp2)
2225                 HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2226             }
2227           }  // EndOfFor
2228         }
2229       }
2230     } else if (!isbarrel && dname.find("Blade_") != string::npos && isUpgrade) {
2231       vector<string> meVec = iGetter.getMEs();
2232       for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2233         string full_path = currDir + "/" + (*it);
2234         if (full_path.find("missing_") != string::npos) {  // If we have missing hits ME
2235           MonitorElement *me = iGetter.get(full_path);
2236           if (!me)
2237             continue;
2238           float missingHits = me->getEntries();
2239           string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2240           me = iGetter.get(new_path);
2241           if (!me)
2242             continue;
2243           float validHits = me->getEntries();
2244           float hitEfficiency = -1.;
2245           if (validHits + missingHits > 0.)
2246             hitEfficiency = validHits / (validHits + missingHits);
2247           int binx = 0;
2248           int biny = 1;
2249           binx = getBlade(dname);
2250           if (currDir.find("HalfCylinder_mI") != string::npos || currDir.find("HalfCylinder_pI") != string::npos) {
2251             binx = binx + 12;
2252           } else {
2253             if (binx == 1)
2254               binx = 17;
2255             else if (binx == 2)
2256               binx = 16;
2257             else if (binx == 3)
2258               binx = 15;
2259             else if (binx == 4)
2260               binx = 14;
2261             else if (binx == 5)
2262               binx = 13;
2263             else if (binx == 6)
2264               binx = 12;
2265             else if (binx == 7)
2266               binx = 11;
2267             else if (binx == 8)
2268               binx = 10;
2269             else if (binx == 9)
2270               binx = 9;
2271             else if (binx == 10)
2272               binx = 8;
2273             else if (binx == 11)
2274               binx = 7;
2275             else if (binx == 12)
2276               binx = 6;
2277             else if (binx == 13)
2278               binx = 5;
2279             else if (binx == 14)
2280               binx = 4;
2281             else if (binx == 15)
2282               binx = 3;
2283             else if (binx == 16)
2284               binx = 2;
2285             else if (binx == 17)
2286               binx = 1;
2287           }
2288           if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2289             HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2290             if (HitEfficiency_Dm1)
2291               HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2292           } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2293             HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2294             if (HitEfficiency_Dm2)
2295               HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2296           } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2297             HitEfficiency_Dm3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm3");
2298             if (HitEfficiency_Dm3)
2299               HitEfficiency_Dm3->setBinContent(binx, biny, (float)hitEfficiency);
2300           } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2301             HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2302             if (HitEfficiency_Dp1)
2303               HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2304           } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2305             HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2306             if (HitEfficiency_Dp2)
2307               HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2308           } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2309             HitEfficiency_Dp3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp3");
2310             if (HitEfficiency_Dp3)
2311               HitEfficiency_Dp3->setBinContent(binx, biny, (float)hitEfficiency);
2312           }
2313           // std::cout<<"EFFI: "<<currDir<<" , x: "<<binx<<" , y:
2314           // "<<biny<<std::endl;
2315         }
2316       }
2317     } else {
2318       vector<string> subdirs = iGetter.getSubdirs();
2319       for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
2320         iBooker.cd(*it);
2321         iGetter.cd(*it);
2322         if (*it != "Pixel" &&
2323             ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
2324           continue;
2325         fillEfficiency(iBooker, iGetter, isbarrel, isUpgrade);
2326         iBooker.goUp();
2327         iGetter.setCurrentFolder(iBooker.pwd());
2328       }
2329     }
2330   } else {  // Online
2331     if (dname.find("Module_") != string::npos) {
2332       vector<string> meVec = iGetter.getMEs();
2333       for (vector<string>::const_iterator it = meVec.begin(); it != meVec.end(); it++) {
2334         string full_path = currDir + "/" + (*it);
2335         if (full_path.find("missing_") != string::npos) {  // If we have missing hits ME
2336           MonitorElement *me = iGetter.get(full_path);
2337           if (!me)
2338             continue;
2339           float missingHits = me->getEntries();
2340           string new_path = full_path.replace(full_path.find("missing"), 7, "valid");
2341           me = iGetter.get(new_path);
2342           if (!me)
2343             continue;
2344           float validHits = me->getEntries();
2345           float hitEfficiency = -1.;
2346           if (validHits + missingHits > 0.)
2347             hitEfficiency = validHits / (validHits + missingHits);
2348           int binx = 0;
2349           int biny = 0;
2350           if (isbarrel) {
2351             if (currDir.find("Shell_m") != string::npos) {
2352               if (currDir.find("Module_4") != string::npos) {
2353                 binx = 1;
2354               } else if (currDir.find("Module_3") != string::npos) {
2355                 binx = 2;
2356               }
2357               if (currDir.find("Module_2") != string::npos) {
2358                 binx = 3;
2359               } else if (currDir.find("Module_1") != string::npos) {
2360                 binx = 4;
2361               }
2362             } else if (currDir.find("Shell_p") != string::npos) {
2363               if (currDir.find("Module_1") != string::npos) {
2364                 binx = 5;
2365               } else if (currDir.find("Module_2") != string::npos) {
2366                 binx = 6;
2367               }
2368               if (currDir.find("Module_3") != string::npos) {
2369                 binx = 7;
2370               } else if (currDir.find("Module_4") != string::npos) {
2371                 binx = 8;
2372               }
2373             }
2374             if (!isUpgrade) {
2375               if (currDir.find("01") != string::npos) {
2376                 biny = 1;
2377               } else if (currDir.find("02") != string::npos) {
2378                 biny = 2;
2379               } else if (currDir.find("03") != string::npos) {
2380                 biny = 3;
2381               } else if (currDir.find("04") != string::npos) {
2382                 biny = 4;
2383               } else if (currDir.find("05") != string::npos) {
2384                 biny = 5;
2385               } else if (currDir.find("06") != string::npos) {
2386                 biny = 6;
2387               } else if (currDir.find("07") != string::npos) {
2388                 biny = 7;
2389               } else if (currDir.find("08") != string::npos) {
2390                 biny = 8;
2391               } else if (currDir.find("09") != string::npos) {
2392                 biny = 9;
2393               } else if (currDir.find("10") != string::npos) {
2394                 biny = 10;
2395               } else if (currDir.find("11") != string::npos) {
2396                 biny = 11;
2397               } else if (currDir.find("12") != string::npos) {
2398                 biny = 12;
2399               } else if (currDir.find("13") != string::npos) {
2400                 biny = 13;
2401               } else if (currDir.find("14") != string::npos) {
2402                 biny = 14;
2403               } else if (currDir.find("15") != string::npos) {
2404                 biny = 15;
2405               } else if (currDir.find("16") != string::npos) {
2406                 biny = 16;
2407               } else if (currDir.find("17") != string::npos) {
2408                 biny = 17;
2409               } else if (currDir.find("18") != string::npos) {
2410                 biny = 18;
2411               } else if (currDir.find("19") != string::npos) {
2412                 biny = 19;
2413               } else if (currDir.find("20") != string::npos) {
2414                 biny = 20;
2415               } else if (currDir.find("21") != string::npos) {
2416                 biny = 21;
2417               } else if (currDir.find("22") != string::npos) {
2418                 biny = 22;
2419               }
2420               if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2421                 if (currDir.find("Layer_1") != string::npos) {
2422                   biny = biny + 10;
2423                 } else if (currDir.find("Layer_2") != string::npos) {
2424                   biny = biny + 16;
2425                 } else if (currDir.find("Layer_3") != string::npos) {
2426                   biny = biny + 22;
2427                 }
2428               }
2429             } else if (isUpgrade) {
2430               if (currDir.find("01") != string::npos) {
2431                 biny = 1;
2432               } else if (currDir.find("02") != string::npos) {
2433                 biny = 2;
2434               } else if (currDir.find("03") != string::npos) {
2435                 biny = 3;
2436               } else if (currDir.find("04") != string::npos) {
2437                 biny = 4;
2438               } else if (currDir.find("05") != string::npos) {
2439                 biny = 5;
2440               } else if (currDir.find("06") != string::npos) {
2441                 biny = 6;
2442               } else if (currDir.find("07") != string::npos) {
2443                 biny = 7;
2444               } else if (currDir.find("08") != string::npos) {
2445                 biny = 8;
2446               } else if (currDir.find("09") != string::npos) {
2447                 biny = 9;
2448               } else if (currDir.find("10") != string::npos) {
2449                 biny = 10;
2450               } else if (currDir.find("11") != string::npos) {
2451                 biny = 11;
2452               } else if (currDir.find("12") != string::npos) {
2453                 biny = 12;
2454               } else if (currDir.find("13") != string::npos) {
2455                 biny = 13;
2456               } else if (currDir.find("14") != string::npos) {
2457                 biny = 14;
2458               } else if (currDir.find("15") != string::npos) {
2459                 biny = 15;
2460               } else if (currDir.find("16") != string::npos) {
2461                 biny = 16;
2462               } else if (currDir.find("17") != string::npos) {
2463                 biny = 17;
2464               } else if (currDir.find("18") != string::npos) {
2465                 biny = 18;
2466               } else if (currDir.find("19") != string::npos) {
2467                 biny = 19;
2468               } else if (currDir.find("20") != string::npos) {
2469                 biny = 20;
2470               } else if (currDir.find("21") != string::npos) {
2471                 biny = 21;
2472               } else if (currDir.find("22") != string::npos) {
2473                 biny = 22;
2474               } else if (currDir.find("23") != string::npos) {
2475                 biny = 23;
2476               } else if (currDir.find("24") != string::npos) {
2477                 biny = 24;
2478               } else if (currDir.find("25") != string::npos) {
2479                 biny = 25;
2480               } else if (currDir.find("25") != string::npos) {
2481                 biny = 25;
2482               } else if (currDir.find("26") != string::npos) {
2483                 biny = 26;
2484               } else if (currDir.find("27") != string::npos) {
2485                 biny = 27;
2486               } else if (currDir.find("28") != string::npos) {
2487                 biny = 28;
2488               } else if (currDir.find("29") != string::npos) {
2489                 biny = 29;
2490               } else if (currDir.find("30") != string::npos) {
2491                 biny = 30;
2492               } else if (currDir.find("31") != string::npos) {
2493                 biny = 31;
2494               } else if (currDir.find("32") != string::npos) {
2495                 biny = 32;
2496               }
2497               if (currDir.find("Shell_mO") != string::npos || currDir.find("Shell_pO") != string::npos) {
2498                 if (currDir.find("Layer_1") != string::npos) {
2499                   biny = biny + 6;
2500                 } else if (currDir.find("Layer_2") != string::npos) {
2501                   biny = biny + 14;
2502                 } else if (currDir.find("Layer_3") != string::npos) {
2503                   biny = biny + 22;
2504                 } else if (currDir.find("Layer_4") != string::npos) {
2505                   biny = biny + 32;
2506                 }
2507               }
2508             }
2509           } else {  // endcap
2510             if (!isUpgrade) {
2511               if (currDir.find("01") != string::npos) {
2512                 binx = 1;
2513               } else if (currDir.find("02") != string::npos) {
2514                 binx = 2;
2515               } else if (currDir.find("03") != string::npos) {
2516                 binx = 3;
2517               } else if (currDir.find("04") != string::npos) {
2518                 binx = 4;
2519               } else if (currDir.find("05") != string::npos) {
2520                 binx = 5;
2521               } else if (currDir.find("06") != string::npos) {
2522                 binx = 6;
2523               } else if (currDir.find("07") != string::npos) {
2524                 binx = 7;
2525               } else if (currDir.find("08") != string::npos) {
2526                 binx = 8;
2527               } else if (currDir.find("09") != string::npos) {
2528                 binx = 9;
2529               } else if (currDir.find("10") != string::npos) {
2530                 binx = 10;
2531               } else if (currDir.find("11") != string::npos) {
2532                 binx = 11;
2533               } else if (currDir.find("12") != string::npos) {
2534                 binx = 12;
2535               }
2536               if (currDir.find("HalfCylinder_mO") != string::npos || currDir.find("HalfCylinder_pO") != string::npos) {
2537                 binx = binx + 12;
2538               }
2539               if (currDir.find("Panel_1/Module_1") != string::npos) {
2540                 biny = 1;
2541               } else if (currDir.find("Panel_2/Module_1") != string::npos) {
2542                 biny = 2;
2543               } else if (currDir.find("Panel_1/Module_2") != string::npos) {
2544                 biny = 3;
2545               } else if (currDir.find("Panel_2/Module_2") != string::npos) {
2546                 biny = 4;
2547               } else if (currDir.find("Panel_1/Module_3") != string::npos) {
2548                 biny = 5;
2549               } else if (currDir.find("Panel_2/Module_3") != string::npos) {
2550                 biny = 6;
2551               } else if (currDir.find("Panel_1/Module_4") != string::npos) {
2552                 biny = 7;
2553               }
2554             } else if (isUpgrade) {
2555               if (currDir.find("01") != string::npos) {
2556                 binx = 1;
2557               } else if (currDir.find("02") != string::npos) {
2558                 binx = 2;
2559               } else if (currDir.find("03") != string::npos) {
2560                 binx = 3;
2561               } else if (currDir.find("04") != string::npos) {
2562                 binx = 4;
2563               } else if (currDir.find("05") != string::npos) {
2564                 binx = 5;
2565               } else if (currDir.find("06") != string::npos) {
2566                 binx = 6;
2567               } else if (currDir.find("07") != string::npos) {
2568                 binx = 7;
2569               } else if (currDir.find("08") != string::npos) {
2570                 binx = 8;
2571               } else if (currDir.find("09") != string::npos) {
2572                 binx = 9;
2573               } else if (currDir.find("10") != string::npos) {
2574                 binx = 10;
2575               } else if (currDir.find("11") != string::npos) {
2576                 binx = 11;
2577               } else if (currDir.find("12") != string::npos) {
2578                 binx = 12;
2579               } else if (currDir.find("13") != string::npos) {
2580                 binx = 13;
2581               } else if (currDir.find("14") != string::npos) {
2582                 binx = 14;
2583               } else if (currDir.find("15") != string::npos) {
2584                 binx = 15;
2585               } else if (currDir.find("16") != string::npos) {
2586                 binx = 16;
2587               } else if (currDir.find("17") != string::npos) {
2588                 binx = 17;
2589               }
2590               if (currDir.find("HalfCylinder_mO") != string::npos || currDir.find("HalfCylinder_pO") != string::npos) {
2591                 binx = binx + 17;
2592               }
2593               if (currDir.find("Panel_1/Module_1") != string::npos) {
2594                 biny = 1;
2595               } else if (currDir.find("Panel_2/Module_1") != string::npos) {
2596                 biny = 2;
2597               }
2598             }  // endif(isUpgrade)
2599           }
2600 
2601           if (currDir.find("Layer_1") != string::npos) {
2602             HitEfficiency_L1 = iGetter.get("Pixel/Barrel/HitEfficiency_L1");
2603             if (HitEfficiency_L1)
2604               HitEfficiency_L1->setBinContent(binx, biny, (float)hitEfficiency);
2605           } else if (currDir.find("Layer_2") != string::npos) {
2606             HitEfficiency_L2 = iGetter.get("Pixel/Barrel/HitEfficiency_L2");
2607             if (HitEfficiency_L2)
2608               HitEfficiency_L2->setBinContent(binx, biny, (float)hitEfficiency);
2609           } else if (currDir.find("Layer_3") != string::npos) {
2610             HitEfficiency_L3 = iGetter.get("Pixel/Barrel/HitEfficiency_L3");
2611             if (HitEfficiency_L3)
2612               HitEfficiency_L3->setBinContent(binx, biny, (float)hitEfficiency);
2613           } else if (isUpgrade && (currDir.find("Layer_4") != string::npos)) {
2614             HitEfficiency_L4 = iGetter.get("Pixel/Barrel/HitEfficiency_L4");
2615             if (HitEfficiency_L4)
2616               HitEfficiency_L4->setBinContent(binx, biny, (float)hitEfficiency);
2617           } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2618             HitEfficiency_Dm1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm1");
2619             if (HitEfficiency_Dm1)
2620               HitEfficiency_Dm1->setBinContent(binx, biny, (float)hitEfficiency);
2621           } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2622             HitEfficiency_Dm2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm2");
2623             if (HitEfficiency_Dm2)
2624               HitEfficiency_Dm2->setBinContent(binx, biny, (float)hitEfficiency);
2625           } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_m") != string::npos) {
2626             HitEfficiency_Dm3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dm3");
2627             if (HitEfficiency_Dm3)
2628               HitEfficiency_Dm3->setBinContent(binx, biny, (float)hitEfficiency);
2629           } else if (currDir.find("Disk_1") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2630             HitEfficiency_Dp1 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp1");
2631             if (HitEfficiency_Dp1)
2632               HitEfficiency_Dp1->setBinContent(binx, biny, (float)hitEfficiency);
2633           } else if (currDir.find("Disk_2") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2634             HitEfficiency_Dp2 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp2");
2635             if (HitEfficiency_Dp2)
2636               HitEfficiency_Dp2->setBinContent(binx, biny, (float)hitEfficiency);
2637           } else if (currDir.find("Disk_3") != string::npos && currDir.find("HalfCylinder_p") != string::npos) {
2638             HitEfficiency_Dp3 = iGetter.get("Pixel/Endcap/HitEfficiency_Dp3");
2639             if (HitEfficiency_Dp3)
2640               HitEfficiency_Dp3->setBinContent(binx, biny, (float)hitEfficiency);
2641           }
2642         }
2643       }
2644     } else {
2645       // cout<<"finding subdirs now"<<std::endl;
2646       vector<string> subdirs = iGetter.getSubdirs();
2647       for (vector<string>::const_iterator it = subdirs.begin(); it != subdirs.end(); it++) {
2648         iBooker.cd(*it);
2649         iGetter.cd(*it);
2650         if (*it != "Pixel" &&
2651             ((isbarrel && (*it).find("Barrel") == string::npos) || (!isbarrel && (*it).find("Endcap") == string::npos)))
2652           continue;
2653         fillEfficiency(iBooker, iGetter, isbarrel, isUpgrade);
2654         iBooker.goUp();
2655         iGetter.setCurrentFolder(iBooker.pwd());
2656       }
2657     }
2658   }  // end online/offline
2659   // cout<<"leaving SiPixelActionExecutor::fillEfficiency..."<<std::endl;
2660 }
2661 
2662 //=============================================================================================================
2663 
2664 void SiPixelActionExecutor::fillEfficiencySummary(DQMStore::IBooker &iBooker, DQMStore::IGetter &iGetter) {
2665   // cout<<"entering
2666   // SiPixelActionExecutor::fillEfficiencySummary..."<<std::endl; First we get
2667   // the summary plot"
2668   if (!Tier0Flag_)
2669     return;
2670   HitEfficiencySummary = iGetter.get("Pixel/HitEfficiencySummary");
2671   // Now we will loop over the hit efficiency plots and fill it"
2672   string hitEfficiencyPostfix[] = {"L1", "L2", "L3", "Dp1", "Dp2", "Dm1", "Dm2"};
2673   std::vector<std::vector<float>> ignoreXBins = {
2674       {-4, 2}, {4, 4, -1, -3, 3, -4, -3, -2, -1, -4, -3, -2, -1, 1, -4}, {1, -4, 1}, {}, {}, {}, {}};
2675   std::vector<std::vector<float>> ignoreYBins = {
2676       {-9, -3}, {1, 16, 1, -13, -13, -5, -5, -5, -5, -6, -6, -6, -6, -8, -8}, {3, 14, 6}, {}, {}, {}, {}};
2677 
2678   for (int i = 0; i < 7; i++) {
2679     string subdetName = "Endcap/";
2680     if (i < 3)
2681       subdetName = "Barrel/";
2682     char meName[50];
2683     sprintf(meName, "Pixel/%sHitEfficiency_%s", subdetName.c_str(), hitEfficiencyPostfix[i].c_str());
2684     MonitorElement *tempHitEffMap = iGetter.get(meName);
2685     float totalEff = 0.;
2686     int totalBins = 0;
2687     TH1 *hitEffMap = tempHitEffMap->getTH1();
2688     for (int xBin = 1; xBin < tempHitEffMap->getNbinsX() + 1; xBin++) {
2689       if (fabs(hitEffMap->GetXaxis()->GetBinCenter(xBin)) < 1.)
2690         continue;
2691       for (int yBin = 1; yBin < tempHitEffMap->getNbinsY() + 1; yBin++) {
2692         if (fabs(hitEffMap->GetYaxis()->GetBinCenter(yBin)) < 0.5)
2693           continue;
2694         bool ignoreBin = false;
2695         for (unsigned int j = 0; j < ignoreXBins[i].size(); j++) {
2696           if (hitEffMap->GetXaxis()->GetBinCenter(xBin) == ignoreXBins[i][j] &&
2697               hitEffMap->GetYaxis()->GetBinCenter(yBin) == ignoreYBins[i][j]) {
2698             ignoreBin = true;
2699             break;
2700           }
2701         }
2702         if (ignoreBin)
2703           continue;
2704         if (!(tempHitEffMap->getBinContent(xBin, yBin) < 0.))
2705           totalEff += tempHitEffMap->getBinContent(xBin, yBin);
2706         totalBins++;
2707       }
2708     }
2709     float overalEff = 0.;
2710     //    std::cout << i << " " << totalEff << " " << totalBins << std::endl;
2711     if (totalBins > 0)
2712       overalEff = totalEff / float(totalBins);
2713     HitEfficiencySummary->setBinContent(i + 1, overalEff);
2714   }
2715 }