Go to the documentation of this file.00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021
00022 #include "DQMServices/Core/interface/DQMStore.h"
00023 #include "DQMServices/Core/interface/MonitorElement.h"
00024
00025 #include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
00026 #include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
00027 #include "CalibTracker/Records/interface/SiStripQualityRcd.h"
00028 #include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
00029 #include "DQM/SiStripCommon/interface/SiStripFolderOrganizer.h"
00030 #include "DQM/SiStripCommon/interface/SiStripHistoId.h"
00031
00032
00033 #include <FWCore/Framework/interface/EventSetup.h>
00034 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00035
00036 #include "DQM/SiStripMonitorPedestals/interface/SiStripMonitorQuality.h"
00037
00038
00039 #include <cstdlib>
00040 #include <cmath>
00041 #include <numeric>
00042 #include <algorithm>
00043
00044 SiStripMonitorQuality::SiStripMonitorQuality(edm::ParameterSet const& iConfig):
00045 dqmStore_(edm::Service<DQMStore>().operator->()),
00046 conf_(iConfig),
00047 m_cacheID_(0)
00048
00049
00050 {
00051 edm::LogInfo("SiStripMonitorQuality") <<"SiStripMonitorQuality "
00052 << " Constructing....... ";
00053 }
00054
00055
00056 SiStripMonitorQuality::~SiStripMonitorQuality()
00057 {
00058 edm::LogInfo("SiStripMonitorQuality") <<"SiStripMonitorQuality "
00059 << " Destructing....... ";
00060 }
00061
00062
00063
00064 void SiStripMonitorQuality::beginJob() {
00065 }
00066
00067
00068
00069 void SiStripMonitorQuality::beginRun(edm::Run const& run, edm::EventSetup const& eSetup){
00070 }
00071
00072
00073
00074 void SiStripMonitorQuality::analyze(edm::Event const& iEvent, edm::EventSetup const& eSetup)
00075 {
00076 unsigned long long cacheID = eSetup.get<SiStripQualityRcd>().cacheIdentifier();
00077 if (m_cacheID_ == cacheID) return;
00078
00079 m_cacheID_ = cacheID;
00080
00081 std::string quality_label = conf_.getParameter<std::string>("StripQualityLabel");
00082 eSetup.get<SiStripQualityRcd>().get(quality_label,stripQuality_);
00083 eSetup.get<SiStripDetCablingRcd>().get( detCabling_ );
00084
00085 edm::LogInfo("SiStripMonitorQuality") << "SiStripMonitorQuality::analyze: "<<
00086 " Reading SiStripQuality "<< std::endl;
00087
00088 SiStripBadStrip::RegistryIterator rbegin = stripQuality_->getRegistryVectorBegin();
00089 SiStripBadStrip::RegistryIterator rend = stripQuality_->getRegistryVectorEnd();
00090 uint32_t detid;
00091
00092 if (rbegin==rend) return;
00093
00094 for (SiStripBadStrip::RegistryIterator rp=rbegin; rp != rend; ++rp) {
00095
00096 detid = rp->detid;
00097
00098 if (detid == 0 || detid == 0xFFFFFFFF){
00099 edm::LogError("SiStripMonitorQuality") <<"SiStripMonitorQuality::analyze : "
00100 << "Wrong DetId !!!!!! " << detid << " Neglecting !!!!!! ";
00101 continue;
00102 }
00103
00104 if (!detCabling_->IsConnected(detid)) {
00105 edm::LogError("SiStripMonitorQuality") <<"SiStripMonitorQuality::analyze : "
00106 << " DetId " << detid << " not connected, Neglecting !!!!!! ";
00107 continue;
00108 }
00109 MonitorElement* me = getQualityME(detid);
00110 SiStripBadStrip::Range range = SiStripBadStrip::Range( stripQuality_->getDataVectorBegin()+rp->ibegin ,
00111 stripQuality_->getDataVectorBegin()+rp->iend );
00112 SiStripBadStrip::ContainerIterator it=range.first;
00113 for(;it!=range.second;++it){
00114 unsigned int value=(*it);
00115 short str_start = stripQuality_->decode(value).firstStrip;
00116 short str_end = str_start + stripQuality_->decode(value).range;
00117 for ( short isr = str_start; isr < str_end + 1; isr++) {
00118 if (isr <= (me->getNbinsX()-1)) me->Fill(isr+1, 1.0);
00119 }
00120 }
00121 }
00122 }
00123
00124
00125
00126 void SiStripMonitorQuality::endRun(edm::Run const& run, edm::EventSetup const& eSetup) {
00127 bool outputMEsInRootFile = conf_.getParameter<bool>("OutputMEsInRootFile");
00128 std::string outputFileName = conf_.getParameter<std::string>("OutputFileName");
00129 if (outputMEsInRootFile) {
00130 dqmStore_->showDirStructure();
00131 dqmStore_->save(outputFileName);
00132 }
00133 }
00134
00135
00136
00137 void SiStripMonitorQuality::endJob(void){
00138 edm::LogInfo("SiStripMonitorQuality") <<"SiStripMonitorQuality::EndJob: "
00139 << " Finishing!! ";
00140 }
00141
00142
00143
00144 MonitorElement* SiStripMonitorQuality::getQualityME(uint32_t idet){
00145
00146 std::map<uint32_t, MonitorElement* >::iterator pos = QualityMEs.find(idet);
00147 MonitorElement* det_me;
00148 if (pos != QualityMEs.end()) {
00149 det_me = pos->second;
00150 det_me->Reset();
00151 } else {
00152 int nStrip = detCabling_->nApvPairs(idet) * 256;
00153
00154
00155 SiStripHistoId hidmanager;
00156
00157 SiStripFolderOrganizer folder_organizer;
00158
00159 folder_organizer.setDetectorFolder(idet);
00160
00161 std::string hid;
00162 hid = hidmanager.createHistoId("StripQualityFromCondDB","det", idet);
00163
00164 det_me = dqmStore_->book1D(hid, hid, nStrip,0.5,nStrip+0.5);
00165 dqmStore_->tag(det_me, idet);
00166 det_me->setAxisTitle("Strip Number",1);
00167 det_me->setAxisTitle("Quality Flag from CondDB ",2);
00168 QualityMEs.insert( std::make_pair(idet, det_me));
00169 }
00170 return det_me;
00171 }
00172 DEFINE_FWK_MODULE(SiStripMonitorQuality);
00173