CMS 3D CMS Logo

SiStripBadComponentInfo.cc
Go to the documentation of this file.
4 
6 
10 
12 
13 #include <cmath>
14 #include <cstdio>
15 #include <iomanip>
16 #include <iostream>
17 #include <sstream>
18 #include <string>
19 
20 //
21 // -- Contructor
22 //
24  : bookedStatus_(false),
25  nSubSystem_(6),
26  tTopoToken_(esConsumes<edm::Transition::EndRun>()),
27  withFedErrHelper_{pSet, consumesCollector()} {
28  // Create MessageSender
29  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::Creating SiStripBadComponentInfo ";
30 }
31 
33  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::Deleting SiStripBadComponentInfo ";
34 }
35 
36 //
37 // -- Read Condition
38 //
40  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo:: End of Run";
41 
42  // Retrieve tracker topology from geometry
43  tTopo_ = std::make_unique<TrackerTopology>(eSetup.getData(tTopoToken_));
44 
47  }
48 }
49 
51  auto const& BC = siStripQuality->getBadComponentList();
52 
53  for (size_t i = 0; i < BC.size(); ++i) {
54  int subdet = -999;
55  int component = -999;
56 
57  //&&&&&&&&&&&&&&&&&
58  // Single SubSyste
59  //&&&&&&&&&&&&&&&&&
60  int subDet = DetId(BC[i].detid).subdetId();
61  if (subDet == StripSubdetector::TIB) {
62  //&&&&&&&&&&&&&&&&&
63  // TIB
64  //&&&&&&&&&&&&&&&&&
65  subdet = 3;
66  component = tTopo_->tibLayer(BC[i].detid);
67  } else if (subDet == StripSubdetector::TID) {
68  //&&&&&&&&&&&&&&&&&
69  // TID
70  //&&&&&&&&&&&&&&&&&
71  if (tTopo_->tidSide(BC[i].detid) == 2)
72  subdet = 4;
73  else
74  subdet = 5;
75  component = tTopo_->tidWheel(BC[i].detid);
76  } else if (subDet == StripSubdetector::TOB) {
77  //&&&&&&&&&&&&&&&&&
78  // TOB
79  //&&&&&&&&&&&&&&&&&
80  subdet = 6;
81  component = tTopo_->tobLayer(BC[i].detid);
82  } else if (subDet == StripSubdetector::TEC) {
83  //&&&&&&&&&&&&&&&&&
84  // TEC
85  //&&&&&&&&&&&&&&&&&
86  if (tTopo_->tecSide(BC[i].detid) == 2)
87  subdet = 2;
88  else
89  subdet = 1;
90  component = tTopo_->tecWheel(BC[i].detid);
91  }
92  fillBadComponentMaps(subdet, component, BC[i]);
93  }
94 
95  //&&&&&&&&&&&&&&&&&&
96  // Single Strip Info
97  //&&&&&&&&&&&&&&&&&&
98 
101 
102  for (SiStripBadStrip::RegistryIterator rp = rbegin; rp != rend; ++rp) {
103  uint32_t detid = rp->detid;
104  int subdet = -999;
105  int component = -999;
106  DetId detectorId = DetId(detid);
107  int subDet = detectorId.subdetId();
108  if (subDet == StripSubdetector::TIB) {
109  subdet = 3;
110  component = tTopo_->tibLayer(detid);
111  } else if (subDet == StripSubdetector::TID) {
112  if (tTopo_->tidSide(detid) == 2)
113  subdet = 5;
114  else
115  subdet = 4;
116  component = tTopo_->tidWheel(detid);
117  } else if (subDet == StripSubdetector::TOB) {
118  subdet = 6;
119  component = tTopo_->tobLayer(detid);
120  } else if (subDet == StripSubdetector::TEC) {
121  if (tTopo_->tecSide(detid) == 2)
122  subdet = 2;
123  else
124  subdet = 1;
125  component = tTopo_->tecWheel(detid);
126  }
127 
128  SiStripQuality::Range sqrange = SiStripQuality::Range(siStripQuality->getDataVectorBegin() + rp->ibegin,
129  siStripQuality->getDataVectorBegin() + rp->iend);
130 
131  for (int it = 0; it < sqrange.second - sqrange.first; it++) {
132  unsigned int range = siStripQuality->decode(*(sqrange.first + it)).range;
133  float val = (mapBadStrip.find(std::make_pair(subdet, component)) != mapBadStrip.end())
134  ? mapBadStrip.at(std::make_pair(subdet, component))
135  : 0.;
136  val += range;
137  mapBadStrip[std::make_pair(subdet, component)] = val;
138  }
139  }
140 }
141 
143  LogDebug("SiStripBadComponentInfo") << "SiStripBadComponentInfo::dqmEndRun";
146  }
147  bookBadComponentHistos(ibooker, igetter);
151 }
152 //
153 // -- Book MEs for SiStrip Dcs Fraction
154 //
156  if (!bookedStatus_) {
157  std::string strip_dir = "";
158  ibooker.cd();
159  // SiStripUtility::getTopFolderPath(dqmStore_, "SiStrip", strip_dir);
160  if (igetter.dirExists("SiStrip")) {
161  ibooker.cd("SiStrip");
162  strip_dir = ibooker.pwd();
163  }
164  edm::LogInfo("SiStripBadComponentInfo")
165  << "SiStripBadComponentInfo::bookBadComponentHistos ==> " << strip_dir << " " << ibooker.pwd() << std::endl;
166  if (!strip_dir.empty())
167  ibooker.setCurrentFolder(strip_dir + "/EventInfo");
168  else
169  ibooker.setCurrentFolder("SiStrip/EventInfo");
170 
171  ibooker.cd();
172  if (!strip_dir.empty())
173  ibooker.setCurrentFolder(strip_dir + "/EventInfo/BadComponentContents");
174 
175  std::string hname, htitle;
176  hname = "BadAPVMap";
177  htitle = "SiStrip Bad APVs";
178  badAPVME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
179  badAPVME_->setAxisTitle("Sub Detector Type", 1);
180  badAPVME_->setAxisTitle("Layer/Disc Number", 2);
181 
182  hname = "BadFiberMap";
183  htitle = "SiStrip Bad Fibers";
184  badFiberME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
185  badFiberME_->setAxisTitle("Sub Detector Type", 1);
186  badFiberME_->setAxisTitle("Layer/Disc Number", 2);
187 
188  hname = "BadStripMap";
189  htitle = "SiStrip Bad Strips";
190  badStripME_ = ibooker.book2D(hname, htitle, nSubSystem_, 0.5, nSubSystem_ + 0.5, 10, 0.5, 10.5);
191  badStripME_->setAxisTitle("Sub Detector Type", 1);
192  badStripME_->setAxisTitle("Layer/Disc Number", 2);
193 
194  std::vector<std::string> names;
195  names.push_back("TECB");
196  names.push_back("TECF");
197  names.push_back("TIB");
198  names.push_back("TIDB");
199  names.push_back("TIDF");
200  names.push_back("TOB");
201 
202  for (unsigned int i = 0; i < names.size(); i++) {
203  badAPVME_->setBinLabel(i + 1, names[i]);
204  badFiberME_->setBinLabel(i + 1, names[i]);
205  badStripME_->setBinLabel(i + 1, names[i]);
206  }
207 
208  bookedStatus_ = true;
209  ibooker.cd();
210  }
211 }
212 
214  auto index = std::make_pair(xbin, component);
215 
216  if (BC.BadApvs) {
217  int ntot = std::bitset<16>(BC.BadApvs & 0x3f).count();
218  float val = (mapBadAPV.find(index) != mapBadAPV.end()) ? mapBadAPV.at(index) : 0.;
219  val += ntot;
220  mapBadAPV[index] = val;
221  }
222  if (BC.BadFibers) {
223  int ntot = std::bitset<16>(BC.BadFibers & 0x7).count();
224  float val = (mapBadFiber.find(index) != mapBadFiber.end()) ? mapBadFiber.at(index) : 0.;
225  val += ntot;
226  mapBadFiber[index] = val;
227  }
228 }
229 void SiStripBadComponentInfo::createSummary(MonitorElement* me, const std::map<std::pair<int, int>, float>& map) {
230  for (int i = 1; i < nSubSystem_ + 1; i++) {
231  float sum = 0.0;
232  for (int k = 1; k < me->getNbinsY(); k++) {
233  auto index = std::make_pair(i, k);
234  if (map.find(index) != map.end()) {
235  me->setBinContent(i, k, map.at(index)); // fill the layer/wheel bins
236  sum += map.at(index);
237  }
238  }
239  me->setBinContent(i, me->getNbinsY(), sum); // fill the summary bin (last one)
240  }
241 }
unsigned short range
static constexpr auto TEC
ContainerIterator getDataVectorBegin() const
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
void createSummary(MonitorElement *me, const std::map< std::pair< int, int >, float > &map)
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
SiStripBadComponentInfo(edm::ParameterSet const &ps)
Constructor.
virtual std::string pwd()
Definition: DQMStore.cc:20
void endRun(edm::Run const &, edm::EventSetup const &) override
virtual bool dirExists(std::string const &path) const
Definition: DQMStore.cc:747
Registry::const_iterator RegistryIterator
const std::string names[nVars_]
std::map< std::pair< int, int >, float > mapBadFiber
const std::vector< BadComponent > & getBadComponentList() const
void fillBadComponentMaps(const SiStripQuality *siStripQuality)
void bookBadComponentHistos(DQMStore::IBooker &ibooker, DQMStore::IGetter &igetter)
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
std::unique_ptr< TrackerTopology > tTopo_
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
std::map< std::pair< int, int >, float > mapBadAPV
Transition
Definition: Transition.h:12
RegistryIterator getRegistryVectorEnd() const
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
bool getData(T &iHolder) const
Definition: EventSetup.h:122
static constexpr auto TOB
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)
Log< level::Info, false > LogInfo
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > & qualityToken() const
Definition: DetId.h:17
static constexpr auto TIB
SiStripQualityWithFromFedErrorsHelper withFedErrHelper_
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:212
const SiStripQuality & getMergedQuality(dqm::harvesting::DQMStore::IGetter &getter)
std::map< std::pair< int, int >, float > mapBadStrip
HLT enums.
std::pair< ContainerIterator, ContainerIterator > Range
data decode(const unsigned int &value) const
static constexpr auto TID
RegistryIterator getRegistryVectorBegin() const
__shared__ uint32_t ntot
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: Run.h:45
#define LogDebug(id)
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)