CMS 3D CMS Logo

SiStripBadComponentInfo.cc
Go to the documentation of this file.
4 
6 
12 
14 
15 #include <cmath>
16 #include <cstdio>
17 #include <iomanip>
18 #include <iostream>
19 #include <sstream>
20 #include <string>
21 
22 //
23 // -- Contructor
24 //
26  : bookedStatus_(false),
27  nSubSystem_(6),
28  qualityToken_(esConsumes<edm::Transition::EndRun>(
29  edm::ESInputTag{"", pSet.getParameter<std::string>("StripQualityLabel")})),
30  tTopoToken_(esConsumes<edm::Transition::EndRun>()),
31  fedCablingToken_(esConsumes<edm::Transition::EndRun>()) {
32  addBadCompFromFedErr_ = pSet.getUntrackedParameter<bool>("AddBadComponentsFromFedErrors", false);
33  fedErrCutoff_ = float(pSet.getUntrackedParameter<double>("FedErrorBadComponentsCutoff", 0.8));
34  // Create MessageSender
35  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::Deleting SiStripBadComponentInfo ";
36 }
37 
39  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::Deleting SiStripBadComponentInfo ";
40 }
41 
42 //
43 // -- Read Condition
44 //
46  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo:: Begining of Run";
47 
48  // Retrieve tracker topology from geometry
49  tTopo_ = &eSetup.getData(tTopoToken_);
52 
53  if (!addBadCompFromFedErr_) {
55  }
56 }
57 
59  auto const& BC = siStripQuality->getBadComponentList();
60 
61  for (size_t i = 0; i < BC.size(); ++i) {
62  int subdet = -999;
63  int component = -999;
64 
65  //&&&&&&&&&&&&&&&&&
66  // Single SubSyste
67  //&&&&&&&&&&&&&&&&&
68  int subDet = DetId(BC[i].detid).subdetId();
69  if (subDet == StripSubdetector::TIB) {
70  //&&&&&&&&&&&&&&&&&
71  // TIB
72  //&&&&&&&&&&&&&&&&&
73  subdet = 3;
74  component = tTopo_->tibLayer(BC[i].detid);
75  } else if (subDet == StripSubdetector::TID) {
76  //&&&&&&&&&&&&&&&&&
77  // TID
78  //&&&&&&&&&&&&&&&&&
79  if (tTopo_->tidSide(BC[i].detid) == 2)
80  subdet = 4;
81  else
82  subdet = 5;
83  component = tTopo_->tidWheel(BC[i].detid);
84  } else if (subDet == StripSubdetector::TOB) {
85  //&&&&&&&&&&&&&&&&&
86  // TOB
87  //&&&&&&&&&&&&&&&&&
88  subdet = 6;
89  component = tTopo_->tobLayer(BC[i].detid);
90  } else if (subDet == StripSubdetector::TEC) {
91  //&&&&&&&&&&&&&&&&&
92  // TEC
93  //&&&&&&&&&&&&&&&&&
94  if (tTopo_->tecSide(BC[i].detid) == 2)
95  subdet = 2;
96  else
97  subdet = 1;
98  component = tTopo_->tecWheel(BC[i].detid);
99  }
100  fillBadComponentMaps(subdet, component, BC[i]);
101  }
102 
103  //&&&&&&&&&&&&&&&&&&
104  // Single Strip Info
105  //&&&&&&&&&&&&&&&&&&
106 
107  SiStripQuality::RegistryIterator rbegin = siStripQuality->getRegistryVectorBegin();
109 
110  for (SiStripBadStrip::RegistryIterator rp = rbegin; rp != rend; ++rp) {
111  uint32_t detid = rp->detid;
112  int subdet = -999;
113  int component = -999;
114  DetId detectorId = DetId(detid);
115  int subDet = detectorId.subdetId();
116  if (subDet == StripSubdetector::TIB) {
117  subdet = 3;
118  component = tTopo_->tibLayer(detid);
119  } else if (subDet == StripSubdetector::TID) {
120  if (tTopo_->tidSide(detid) == 2)
121  subdet = 5;
122  else
123  subdet = 4;
124  component = tTopo_->tidWheel(detid);
125  } else if (subDet == StripSubdetector::TOB) {
126  subdet = 6;
127  component = tTopo_->tobLayer(detid);
128  } else if (subDet == StripSubdetector::TEC) {
129  if (tTopo_->tecSide(detid) == 2)
130  subdet = 2;
131  else
132  subdet = 1;
133  component = tTopo_->tecWheel(detid);
134  }
135 
136  SiStripQuality::Range sqrange = SiStripQuality::Range(siStripQuality->getDataVectorBegin() + rp->ibegin,
137  siStripQuality->getDataVectorBegin() + rp->iend);
138 
139  for (int it = 0; it < sqrange.second - sqrange.first; it++) {
140  unsigned int range = siStripQuality->decode(*(sqrange.first + it)).range;
141  float val = (mapBadStrip.find(std::make_pair(subdet, component)) != mapBadStrip.end())
142  ? mapBadStrip.at(std::make_pair(subdet, component))
143  : 0.;
144  val += range;
145  mapBadStrip[std::make_pair(subdet, component)] = val;
146  }
147  }
148 }
149 
151  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo:: End of Run";
152  checkBadComponents(eSetup);
153 }
154 
156  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::dqmEndRun";
157  if (addBadCompFromFedErr_) {
158  auto mergedQuality = std::make_unique<SiStripQuality>(*siStripQuality_);
159  auto fedErrQuality = sistrip::badStripFromFedErr(igetter, *fedCabling_, fedErrCutoff_);
160  mergedQuality->add(fedErrQuality.get());
161  mergedQuality->cleanUp();
162  mergedQuality->fillBadComponents();
163  fillBadComponentMaps(mergedQuality.get());
164  }
165  bookBadComponentHistos(ibooker, igetter);
169 }
170 //
171 // -- Book MEs for SiStrip Dcs Fraction
172 //
174  if (!bookedStatus_) {
175  std::string strip_dir = "";
176  ibooker.cd();
177  // SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
178  if (igetter.dirExists("SiStrip")) {
179  ibooker.cd("SiStrip");
180  strip_dir = ibooker.pwd();
181  }
182  edm::LogInfo("SiStripBadComponentInfo")
183  << "SiStripBadComponentInfo::bookBadComponentHistos ==> " << strip_dir << " " << ibooker.pwd() << std::endl;
184  if (!strip_dir.empty())
185  ibooker.setCurrentFolder(strip_dir + "/EventInfo");
186  else
187  ibooker.setCurrentFolder("SiStrip/EventInfo");
188 
189  ibooker.cd();
190  if (!strip_dir.empty())
191  ibooker.setCurrentFolder(strip_dir + "/EventInfo/BadComponentContents");
192 
193  std::string hname, htitle;
194  hname = "BadAPVMap";
195  htitle = "SiStrip Bad APVs";
196  badAPVME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
197  badAPVME_->setAxisTitle("Sub Detector Type", 1);
198  badAPVME_->setAxisTitle("Layer/Disc Number", 2);
199 
200  hname = "BadFiberMap";
201  htitle = "SiStrip Bad Fibers";
202  badFiberME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
203  badFiberME_->setAxisTitle("Sub Detector Type", 1);
204  badFiberME_->setAxisTitle("Layer/Disc Number", 2);
205 
206  hname = "BadStripMap";
207  htitle = "SiStrip Bad Strips";
208  badStripME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
209  badStripME_->setAxisTitle("Sub Detector Type", 1);
210  badStripME_->setAxisTitle("Layer/Disc Number", 2);
211 
212  std::vector<std::string> names;
213  names.push_back("TECB");
214  names.push_back("TECF");
215  names.push_back("TIB");
216  names.push_back("TIDB");
217  names.push_back("TIDF");
218  names.push_back("TOB");
219 
220  for (unsigned int i = 0; i < names.size(); i++) {
221  badAPVME_->setBinLabel(i + 1, names[i]);
222  badFiberME_->setBinLabel(i + 1, names[i]);
223  badStripME_->setBinLabel(i + 1, names[i]);
224  }
225 
226  bookedStatus_ = true;
227  ibooker.cd();
228  }
229 }
230 
232  auto index = std::make_pair(xbin, component);
233 
234  if (BC.BadApvs) {
235  int ntot = std::bitset<16>(BC.BadApvs & 0x3f).count();
236  float val = (mapBadAPV.find(index) != mapBadAPV.end()) ? mapBadAPV.at(index) : 0.;
237  val += ntot;
238  mapBadAPV[index] = val;
239  }
240  if (BC.BadFibers) {
241  int ntot = std::bitset<16>(BC.BadFibers & 0x7).count();
242  float val = (mapBadFiber.find(index) != mapBadFiber.end()) ? mapBadFiber.at(index) : 0.;
243  val += ntot;
244  mapBadFiber[index] = val;
245  }
246 }
247 void SiStripBadComponentInfo::createSummary(MonitorElement* me, const std::map<std::pair<int, int>, float>& map) {
248  for (int i = 1; i < nSubSystem_ + 1; i++) {
249  float sum = 0.0;
250  for (int k = 1; k < me->getNbinsY(); k++) {
251  auto index = std::make_pair(i, k);
252  if (map.find(index) != map.end()) {
253  me->setBinContent(i, k, map.at(index)); // fill the layer/wheel bins
254  sum += map.at(index);
255  }
256  }
257  me->setBinContent(i, me->getNbinsY(), sum); // fill the summary bin (last one)
258  }
259 }
SiStripBadComponentInfo::bookedStatus_
bool bookedStatus_
Definition: SiStripBadComponentInfo.h:67
SiStripBadComponentInfo::tTopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: SiStripBadComponentInfo.h:74
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
mps_fire.i
i
Definition: mps_fire.py:428
MessageLogger.h
SiStripFolderOrganizer.h
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
funct::false
false
Definition: Factorize.h:29
SiStripBadComponentInfo::SiStripBadComponentInfo
SiStripBadComponentInfo(edm::ParameterSet const &ps)
Constructor.
Definition: SiStripBadComponentInfo.cc:25
SiStripBadComponentInfo::qualityToken_
edm::ESGetToken< SiStripQuality, SiStripQualityRcd > qualityToken_
Definition: SiStripBadComponentInfo.h:73
SiStripBadComponentInfo::siStripQuality_
const SiStripQuality * siStripQuality_
Definition: SiStripBadComponentInfo.h:70
ESInputTag
edm::Run
Definition: Run.h:45
sistrip::badStripFromFedErr
std::unique_ptr< SiStripQuality > badStripFromFedErr(dqm::harvesting::DQMStore::IGetter &dqmStore, const SiStripFedCabling &fedCabling, float cutoff)
Definition: SiStripQualityHelpers.cc:52
edm
HLT enums.
Definition: AlignableModifier.h:19
SiStripBadComponentInfo::~SiStripBadComponentInfo
~SiStripBadComponentInfo() override
Definition: SiStripBadComponentInfo.cc:38
SiStripBadComponentInfo::endRun
void endRun(edm::Run const &, edm::EventSetup const &) override
Definition: SiStripBadComponentInfo.cc:150
SiStripBadComponentInfo::createSummary
void createSummary(MonitorElement *me, const std::map< std::pair< int, int >, float > &map)
Definition: SiStripBadComponentInfo.cc:247
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
SiStripBadStrip::decode
data decode(const unsigned int &value) const
Definition: SiStripBadStrip.h:78
gpuPixelDoublets::ntot
__shared__ uint32_t ntot
Definition: gpuPixelDoubletsAlgos.h:67
SiStripBadComponentInfo::badStripME_
MonitorElement * badStripME_
Definition: SiStripBadComponentInfo.h:61
DQMStore.h
SiStripBadComponentInfo.h
dqm::legacy::MonitorElement
Definition: MonitorElement.h:462
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
SiStripBadStrip::getDataVectorBegin
ContainerIterator getDataVectorBegin() const
Definition: SiStripBadStrip.h:73
SiStripBadComponentInfo::mapBadFiber
std::map< std::pair< int, int >, float > mapBadFiber
Definition: SiStripBadComponentInfo.h:64
SiStripUtility.h
TrackerTopology::tidWheel
unsigned int tidWheel(const DetId &id) const
Definition: TrackerTopology.h:201
DetId
Definition: DetId.h:17
MakerMacros.h
SiStripBadStrip::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripBadStrip.h:53
SiStripQuality::getBadComponentList
const std::vector< BadComponent > & getBadComponentList() const
Definition: SiStripQuality.h:119
SiStripBadStrip::getRegistryVectorBegin
RegistryIterator getRegistryVectorBegin() const
Definition: SiStripBadStrip.h:75
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SiStripBadComponentInfo::fillBadComponentMaps
void fillBadComponentMaps(const SiStripQuality *siStripQuality)
Definition: SiStripBadComponentInfo.cc:58
names
const std::string names[nVars_]
Definition: PhotonIDValueMapProducer.cc:124
SiStripBadComponentInfo::dqmEndJob
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
Definition: SiStripBadComponentInfo.cc:155
Service.h
dqm::implementation::NavigatorBase::cd
virtual void cd()
Definition: DQMStore.cc:29
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
SiStripBadComponentInfo::bookBadComponentHistos
void bookBadComponentHistos(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
Definition: SiStripBadComponentInfo.cc:173
dqmdumpme.k
k
Definition: dqmdumpme.py:60
dqm::implementation::NavigatorBase::pwd
virtual std::string pwd()
Definition: DQMStore.cc:16
SiStripQuality::BadComponent::BadFibers
unsigned short BadFibers
Definition: SiStripQuality.h:37
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
SiStripBadComponentInfo::mapBadAPV
std::map< std::pair< int, int >, float > mapBadAPV
Definition: SiStripBadComponentInfo.h:63
edm::ParameterSet
Definition: ParameterSet.h:47
edm::Transition
Transition
Definition: Transition.h:12
SiStripBadComponentInfo::badFiberME_
MonitorElement * badFiberME_
Definition: SiStripBadComponentInfo.h:60
SiStripBadComponentInfo
Definition: SiStripBadComponentInfo.h:41
TrackerTopology::tidSide
unsigned int tidSide(const DetId &id) const
Definition: TrackerTopology.h:190
dqm::impl::MonitorElement::setBinLabel
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
Definition: MonitorElement.cc:771
SiStripQuality::BadComponent::BadApvs
unsigned short BadApvs
Definition: SiStripQuality.h:36
edm::EventSetup
Definition: EventSetup.h:58
SiStripBadComponentInfo::addBadCompFromFedErr_
bool addBadCompFromFedErr_
Definition: SiStripBadComponentInfo.h:76
SiStripBadComponentInfo::fedErrCutoff_
float fedErrCutoff_
Definition: SiStripBadComponentInfo.h:77
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
SiStripQualityHelpers.h
SiStripBadComponentInfo::fedCabling_
const SiStripFedCabling * fedCabling_
Definition: SiStripBadComponentInfo.h:72
SiStripBadComponentInfo::nSubSystem_
int nSubSystem_
Definition: SiStripBadComponentInfo.h:68
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
heppy_batch.val
val
Definition: heppy_batch.py:351
writedatasetfile.run
run
Definition: writedatasetfile.py:27
SiStripQuality::BadComponent
Definition: SiStripQuality.h:34
StripSubdetector::TEC
static constexpr auto TEC
Definition: StripSubdetector.h:19
SiStripBadComponentInfo::tTopo_
const TrackerTopology * tTopo_
Definition: SiStripBadComponentInfo.h:71
dqm::implementation::IGetter
Definition: DQMStore.h:484
SiStripBadComponentInfo::fedCablingToken_
edm::ESGetToken< SiStripFedCabling, SiStripFedCablingRcd > fedCablingToken_
Definition: SiStripBadComponentInfo.h:75
dqm::implementation::IBooker::book2D
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
SiStripBadComponentInfo::checkBadComponents
void checkBadComponents(edm::EventSetup const &eSetup)
Definition: SiStripBadComponentInfo.cc:45
SiStripQualityRcd.h
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
SiStripBadComponentInfo::mapBadStrip
std::map< std::pair< int, int >, float > mapBadStrip
Definition: SiStripBadComponentInfo.h:65
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
SiStripBadStrip::RegistryIterator
Registry::const_iterator RegistryIterator
Definition: SiStripBadStrip.h:55
dqm::implementation::IBooker
Definition: DQMStore.h:43
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
SiStripBadStrip::data::range
unsigned short range
Definition: SiStripBadStrip.h:34
genParticles_cff.map
map
Definition: genParticles_cff.py:11
ParameterSet.h
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
DeDxTools::esConsumes
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
TrackerTopology::tecWheel
unsigned int tecWheel(const DetId &id) const
Definition: TrackerTopology.h:198
dqm::impl::MonitorElement::setAxisTitle
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Definition: MonitorElement.cc:800
StripSubdetector.h
SiStripBadComponentInfo::badAPVME_
MonitorElement * badAPVME_
Definition: SiStripBadComponentInfo.h:59
SiStripBadStrip::getRegistryVectorEnd
RegistryIterator getRegistryVectorEnd() const
Definition: SiStripBadStrip.h:76
dqm::implementation::IGetter::dirExists
virtual bool dirExists(std::string const &path) const
Definition: DQMStore.cc:708
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
TrackerTopology::tibLayer
unsigned int tibLayer(const DetId &id) const
Definition: TrackerTopology.h:150
SiStripQuality
Definition: SiStripQuality.h:32
TrackerTopology::tecSide
unsigned int tecSide(const DetId &id) const
Definition: TrackerTopology.h:184