File indexing completed on 2024-04-06 12:09:18
0001 #include "DQMOffline/CalibTracker/plugins/SiStripDQMPopConSourceHandler.h"
0002 #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h"
0003 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0004
0005
0006
0007
0008
0009
0010
0011 class SiStripPopConBadComponentsHandlerFromDQM : public SiStripDQMPopConSourceHandler<SiStripBadStrip> {
0012 public:
0013 typedef dqm::legacy::MonitorElement MonitorElement;
0014 typedef dqm::legacy::DQMStore DQMStore;
0015
0016 explicit SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC);
0017 ~SiStripPopConBadComponentsHandlerFromDQM() override;
0018
0019 void initES(const edm::EventSetup&) override;
0020 void dqmEndJob(DQMStore::IBooker& booker, DQMStore::IGetter& getter) override;
0021 SiStripBadStrip* getObj() const override;
0022
0023 protected:
0024 std::string getMetaDataString() const override;
0025
0026 private:
0027 edm::FileInPath fp_;
0028 SiStripBadStrip m_obj;
0029 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_;
0030 const TrackerTopology* trackerTopo_;
0031 };
0032
0033 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0034
0035 #include "DQMServices/Core/interface/DQMStore.h"
0036 #include "CalibTracker/SiStripCommon/interface/SiStripDetInfoFileReader.h"
0037
0038 SiStripPopConBadComponentsHandlerFromDQM::SiStripPopConBadComponentsHandlerFromDQM(const edm::ParameterSet& iConfig,
0039 edm::ConsumesCollector&& iC)
0040 : SiStripDQMPopConSourceHandler<SiStripBadStrip>(iConfig),
0041 fp_{iConfig.getUntrackedParameter<edm::FileInPath>("file",
0042 edm::FileInPath(SiStripDetInfoFileReader::kDefaultFile))},
0043 tTopoToken_(iC.esConsumes<TrackerTopology, TrackerTopologyRcd, edm::Transition::BeginRun>()) {
0044 edm::LogInfo("SiStripBadComponentsDQMService") << "[SiStripBadComponentsDQMService::SiStripBadComponentsDQMService]";
0045 }
0046
0047 SiStripPopConBadComponentsHandlerFromDQM::~SiStripPopConBadComponentsHandlerFromDQM() {
0048 edm::LogInfo("SiStripBadComponentsDQMService") << "[SiStripBadComponentsDQMService::~SiStripBadComponentsDQMService]";
0049 }
0050
0051 void SiStripPopConBadComponentsHandlerFromDQM::initES(const edm::EventSetup& setup) {
0052 trackerTopo_ = &setup.getData(tTopoToken_);
0053 }
0054
0055 std::string SiStripPopConBadComponentsHandlerFromDQM::getMetaDataString() const {
0056 std::stringstream ss;
0057 ss << SiStripDQMPopConSourceHandler<SiStripBadStrip>::getMetaDataString();
0058 getObj()->printSummary(ss, trackerTopo_);
0059 return ss.str();
0060 }
0061
0062 namespace {
0063 void getModuleFolderList(SiStripPopConBadComponentsHandlerFromDQM::DQMStore::IGetter& getter,
0064 const std::string& pwd,
0065 std::vector<std::string>& mfolders) {
0066 if (std::string::npos != pwd.find("module_")) {
0067
0068 mfolders.push_back(pwd);
0069 } else {
0070 for (const auto& subdir : getter.getSubdirs()) {
0071 getter.cd(subdir);
0072 getModuleFolderList(getter, subdir, mfolders);
0073 getter.cd();
0074 getter.cd(pwd);
0075 }
0076 }
0077 }
0078 }
0079
0080 void SiStripPopConBadComponentsHandlerFromDQM::dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter& getter) {
0081
0082
0083 m_obj = SiStripBadStrip();
0084
0085 const auto detInfo = SiStripDetInfoFileReader::read(fp_.fullPath());
0086
0087 getter.cd();
0088
0089 const std::string mechanicalview_dir = "MechanicalView";
0090 if (!getter.dirExists(mechanicalview_dir))
0091 return;
0092
0093 const std::vector<std::string> subdet_folder = {"TIB", "TOB", "TEC/side_1", "TEC/side_2", "TID/side_1", "TID/side_2"};
0094
0095 for (const auto& im : subdet_folder) {
0096 const std::string dname = mechanicalview_dir + "/" + im;
0097 getter.cd();
0098 if (!getter.dirExists(dname))
0099 continue;
0100 getter.cd(dname);
0101
0102 std::vector<std::string> module_folders;
0103 getModuleFolderList(getter, dname, module_folders);
0104
0105 const std::string bad_module_folder = dname + "/" + "BadModuleList";
0106 getter.cd();
0107 if (getter.dirExists(bad_module_folder)) {
0108 for (const MonitorElement* me : getter.getContents(bad_module_folder)) {
0109 std::cout << me->getName() << " " << me->getIntValue() << std::endl;
0110 uint32_t detId = std::stoul(me->getName());
0111 short flag = me->getIntValue();
0112
0113 std::vector<unsigned int> theSiStripVector;
0114
0115 unsigned short firstBadStrip = 0, NconsecutiveBadStrips = 0;
0116 unsigned int theBadStripRange;
0117
0118
0119
0120
0121 NconsecutiveBadStrips = detInfo.getNumberOfApvsAndStripLength(detId).first * 128;
0122
0123 theBadStripRange = m_obj.encode(firstBadStrip, NconsecutiveBadStrips, flag);
0124
0125 LogDebug("SiStripBadComponentsDQMService") << "detid " << detId << " \t"
0126 << ", flag " << flag << std::endl;
0127
0128 theSiStripVector.push_back(theBadStripRange);
0129
0130
0131 SiStripBadStrip::Range range(theSiStripVector.begin(), theSiStripVector.end());
0132 if (!m_obj.put(detId, range)) {
0133 edm::LogError("SiStripBadFiberBuilder")
0134 << "[SiStripBadFiberBuilder::analyze] detid already exists" << std::endl;
0135 }
0136 }
0137 }
0138 }
0139 getter.cd();
0140 }
0141
0142 SiStripBadStrip* SiStripPopConBadComponentsHandlerFromDQM::getObj() const { return new SiStripBadStrip(m_obj); }
0143
0144 #include "FWCore/Framework/interface/MakerMacros.h"
0145 #include "DQMOffline/CalibTracker/plugins/SiStripPopConDQMEDHarvester.h"
0146 using SiStripPopConBadComponentsDQM = SiStripPopConDQMEDHarvester<SiStripPopConBadComponentsHandlerFromDQM>;
0147 DEFINE_FWK_MODULE(SiStripPopConBadComponentsDQM);