CMS 3D CMS Logo

SiStripCertificationInfo.cc
Go to the documentation of this file.
4 
9 
11 
12 //Run Info
14 
15 #include <iostream>
16 #include <iomanip>
17 #include <cstdio>
18 #include <string>
19 #include <sstream>
20 #include <cmath>
21 
23  consumes<DQMToken, edm::InRun>(edm::InputTag("siStripOfflineAnalyser", "DQMGenerationSiStripAnalyserRun"));
24  consumes<DQMToken, edm::InLumi>(edm::InputTag("siStripOfflineAnalyser", "DQMGenerationSiStripAnalyserLumi"));
25  detCablingToken_ = esConsumes<edm::Transition::BeginRun>();
26  tTopoToken_ = esConsumes<edm::Transition::EndRun>();
27  runInfoToken_ = esConsumes<edm::Transition::BeginRun>();
28 }
29 
31  edm::LogInfo("SiStripCertificationInfo") << "SiStripCertificationInfo:: Begining of Run";
33 
34  constexpr int siStripFedIdMin{FEDNumbering::MINSiStripFEDID};
35  constexpr int siStripFedIdMax{FEDNumbering::MAXSiStripFEDID};
36 
37  if (eSetup.tryToGet<RunInfoRcd>()) {
38  if (auto sumFED = eSetup.getHandle(runInfoToken_)) {
39  for (auto const fedID : sumFED->m_fed_in) {
40  if (fedID >= siStripFedIdMin && fedID <= siStripFedIdMax)
42  }
43  LogDebug("SiStripDcsInfo") << " SiStripDcsInfo :: Connected FEDs " << nFEDConnected_;
44  }
45  }
46 
47  auto& dqm_store = *edm::Service<DQMStore>{};
48  bookSiStripCertificationMEs(dqm_store);
50 }
51 //
52 // -- Book MEs for SiStrip Sertification fractions
53 //
56  return;
57 
58  dqm_store.cd();
59  std::string strip_dir = "";
60  SiStripUtility::getTopFolderPath(dqm_store, "SiStrip", strip_dir);
61  if (!strip_dir.empty())
62  dqm_store.setCurrentFolder(strip_dir + "/EventInfo");
63  else
64  dqm_store.setCurrentFolder("SiStrip/EventInfo");
65 
66  SiStripCertification = dqm_store.bookFloat("CertificationSummary");
67 
68  std::string hname = "CertificationReportMap";
69  std::string htitle = "SiStrip Certification for Good Detector Fraction";
70  SiStripCertificationSummaryMap = dqm_store.book2D(hname, htitle, 6, 0.5, 6.5, 9, 0.5, 9.5);
71  SiStripCertificationSummaryMap->setAxisTitle("Sub Detector Type", 1);
72  SiStripCertificationSummaryMap->setAxisTitle("Layer/Disc Number", 2);
73  int ibin = 0;
74  for (auto const& pr : SubDetMEsMap) {
75  ++ibin;
76  auto const& det = pr.first;
78  }
79 
80  SubDetMEs local_mes;
82  dqm_store.cd();
83  if (!strip_dir.empty())
84  dqm_store.setCurrentFolder(strip_dir + "/EventInfo/CertificationContents");
85  else
86  dqm_store.setCurrentFolder("SiStrip/EventInfo/CertificationContents");
87  tag = "TIB";
88 
89  local_mes.folder_name = "TIB";
90  local_mes.subdet_tag = "TIB";
91  local_mes.n_layer = 4;
92  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
93  SubDetMEsMap.emplace(tag, local_mes);
94 
95  tag = "TOB";
96  local_mes.folder_name = "TOB";
97  local_mes.subdet_tag = "TOB";
98  local_mes.n_layer = 6;
99  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
100  SubDetMEsMap.emplace(tag, local_mes);
101 
102  tag = "TECF";
103  local_mes.folder_name = "TEC/PLUS";
104  local_mes.subdet_tag = "TEC+";
105  local_mes.n_layer = 9;
106  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
107  SubDetMEsMap.emplace(tag, local_mes);
108 
109  tag = "TECB";
110  local_mes.folder_name = "TEC/MINUS";
111  local_mes.subdet_tag = "TEC-";
112  local_mes.n_layer = 9;
113  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
114  SubDetMEsMap.emplace(tag, local_mes);
115 
116  tag = "TIDF";
117  local_mes.folder_name = "TID/PLUS";
118  local_mes.subdet_tag = "TID+";
119  local_mes.n_layer = 3;
120  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
121  SubDetMEsMap.emplace(tag, local_mes);
122 
123  tag = "TIDB";
124  local_mes.folder_name = "TID/MINUS";
125  local_mes.subdet_tag = "TID-";
126  local_mes.n_layer = 3;
127  local_mes.det_fractionME = dqm_store.bookFloat("SiStrip_" + tag);
128  SubDetMEsMap.emplace(tag, local_mes);
129 
130  dqm_store.cd();
131  if (!strip_dir.empty())
132  dqm_store.setCurrentFolder(strip_dir + "/EventInfo");
133 
135  dqm_store.cd();
136 }
137 
139 
141  edm::LogInfo("SiStripDaqInfo") << "SiStripDaqInfo::endLuminosityBlock";
142 
143  if (nFEDConnected_ > 0) {
144  auto& dqm_store = *edm::Service<DQMStore>{};
146  }
147 }
148 
150  edm::LogInfo("SiStripCertificationInfo") << "SiStripCertificationInfo:: End Run";
151 
152  if (nFEDConnected_ > 0) {
153  auto& dqm_store = *edm::Service<DQMStore>{};
154  fillSiStripCertificationMEs(dqm_store, eSetup);
155  }
156 }
157 
158 //
159 // --Fill SiStrip Certification
160 //
163  edm::LogError("SiStripCertificationInfo")
164  << " SiStripCertificationInfo::fillSiStripCertificationMEs : MEs missing ";
165  return;
166  }
167 
168  //Retrieve tracker topology from geometry
169  const auto tTopo = &eSetup.getData(tTopoToken_);
170 
171  resetSiStripCertificationMEs(dqm_store);
172  std::string mdir = "MechanicalView";
173  dqm_store.cd();
174  if (!SiStripUtility::goToDir(dqm_store, mdir))
175  return;
176  std::string mechanical_dir = dqm_store.pwd();
177  uint16_t nDetTot = 0;
178  uint16_t nFaultyTot = 0;
179  uint16_t nSToNTot = 0;
180  float sToNTot = 0.0;
181  SiStripFolderOrganizer folder_organizer;
182  int xbin = 0;
183  for (auto const& [name, subDetME] : SubDetMEsMap) {
184  ++xbin;
185  MonitorElement* me = subDetME.det_fractionME;
186  if (!me)
187  continue;
188  std::string tag = subDetME.subdet_tag;
189  std::string bad_module_folder = mechanical_dir + "/" + subDetME.folder_name + "/" + "BadModuleList";
190  std::vector<MonitorElement*> faulty_detMEs = dqm_store.getContents(bad_module_folder);
191 
192  uint16_t ndet_subdet = 0;
193  uint16_t nfaulty_subdet = 0;
194  int nlayer = subDetME.n_layer;
195  int ybin = 0;
196  for (int ilayer = 0; ilayer < nlayer; ilayer++) {
197  uint16_t ndet_layer = detCabling_->connectedNumber(tag, ilayer + 1);
198  ndet_subdet += ndet_layer;
199  ybin++;
200  uint16_t nfaulty_layer = 0;
201  for (auto me : faulty_detMEs) {
202  if (me->kind() != MonitorElement::Kind::INT)
203  continue;
204  if (me->getIntValue() == 0)
205  continue;
206  uint32_t detId = atoi(me->getName().c_str());
207  std::pair<std::string, int32_t> det_layer_pair = folder_organizer.GetSubDetAndLayer(detId, tTopo, false);
208  if (abs(det_layer_pair.second) == ilayer + 1)
209  nfaulty_layer++;
210  }
211 
212  nfaulty_subdet += nfaulty_layer;
213  float fraction_layer = -1.0;
214  if (ndet_layer > 0)
215  fraction_layer = 1 - ((nfaulty_layer * 1.0) / ndet_layer);
217  SiStripCertificationSummaryMap->Fill(xbin, ilayer + 1, fraction_layer);
218  }
219  if (ybin <= SiStripCertificationSummaryMap->getNbinsY()) {
220  for (int k = ybin + 1; k <= SiStripCertificationSummaryMap->getNbinsY(); k++)
221  SiStripCertificationSummaryMap->Fill(xbin, k, -1.0);
222  }
223  float fraction_subdet = -1.0;
224  if (ndet_subdet > 0)
225  fraction_subdet = 1 - ((nfaulty_subdet * 1.0) / ndet_subdet);
226  // Check S/N status flag and use the minimum between the two
227  std::string full_path = mechanical_dir.substr(0, mechanical_dir.find_last_of('/')) +
228  "/EventInfo/reportSummaryContents/SiStrip_SToNFlag_" + name;
229  MonitorElement* me_ston = dqm_store.get(full_path);
230  me->Reset();
231  if (me_ston && me_ston->kind() == MonitorElement::Kind::REAL) {
232  float ston_flg = me_ston->getFloatValue();
233  sToNTot += ston_flg;
234  nSToNTot++;
235  me->Fill(fminf(fraction_subdet, ston_flg));
236  } else
237  me->Fill(fraction_subdet);
238  nDetTot += ndet_subdet;
239  nFaultyTot += nfaulty_subdet;
240  }
241  float fraction_global = -1.0;
242  if (nDetTot > 0)
243  fraction_global = 1.0 - ((nFaultyTot * 1.0) / nDetTot);
244  float ston_frac_global = 1.0;
245  if (nSToNTot > 0)
246  ston_frac_global = sToNTot / nSToNTot;
247  SiStripCertification->Fill(fminf(fraction_global, ston_frac_global));
248 }
249 //
250 // --Fill SiStrip Certification
251 //
254  bookSiStripCertificationMEs(dqm_store);
255  }
257 
259  for (auto const& pr : SubDetMEsMap) {
260  pr.second.det_fractionME->Reset();
261  }
263 }
264 //
265 // -- Fill Dummy SiStrip Certification
266 //
268  resetSiStripCertificationMEs(dqm_store);
270  SiStripCertification->Fill(-1.0);
271  for (auto const& pr : SubDetMEsMap) {
272  pr.second.det_fractionME->Reset();
273  pr.second.det_fractionME->Fill(-1.0);
274  }
275 
276  for (int xbin = 1; xbin < SiStripCertificationSummaryMap->getNbinsX() + 1; xbin++) {
277  for (int ybin = 1; ybin < SiStripCertificationSummaryMap->getNbinsY() + 1; ybin++) {
278  SiStripCertificationSummaryMap->Fill(xbin, ybin, -1.0);
279  }
280  }
281  }
282 }
283 //
284 // --Fill SiStrip Certification
285 //
288  edm::LogError("SiStripCertificationInfo")
289  << " SiStripCertificationInfo::fillSiStripCertificationMEsAtLumi : MEs missing ";
290  return;
291  }
292  resetSiStripCertificationMEs(dqm_store);
293  dqm_store.cd();
294  std::string strip_dir = "";
295  SiStripUtility::getTopFolderPath(dqm_store, "SiStrip", strip_dir);
296  if (strip_dir.empty())
297  strip_dir = "SiStrip";
298 
299  std::string full_path;
300  float dcs_flag = 1.0;
301  float dqm_flag = 1.0;
302  for (auto const& [type, subDetME] : SubDetMEsMap) {
303  full_path = strip_dir + "/EventInfo/DCSContents/SiStrip_" + type;
304  MonitorElement* me_dcs = dqm_store.get(full_path);
305  if (me_dcs && me_dcs->kind() == MonitorElement::Kind::REAL)
306  dcs_flag = me_dcs->getFloatValue();
307  full_path = strip_dir + "/EventInfo/reportSummaryContents/SiStrip_" + type;
308  MonitorElement* me_dqm = dqm_store.get(full_path);
309  if (me_dqm && me_dqm->kind() == MonitorElement::Kind::REAL)
310  dqm_flag = me_dqm->getFloatValue();
311  subDetME.det_fractionME->Reset();
312  subDetME.det_fractionME->Fill(fminf(dqm_flag, dcs_flag));
313  }
314  dcs_flag = 1.0;
315  dqm_flag = 1.0;
316  full_path = strip_dir + "/EventInfo/reportSummary";
317  MonitorElement* me_dqm = dqm_store.get(full_path);
318  if (me_dqm && me_dqm->kind() == MonitorElement::Kind::REAL)
319  dqm_flag = me_dqm->getFloatValue();
320  full_path = strip_dir + "/EventInfo/DCSSummary";
321  MonitorElement* me_dcs = dqm_store.get(full_path);
322  if (me_dcs && me_dcs->kind() == MonitorElement::Kind::REAL)
323  dcs_flag = me_dcs->getFloatValue();
325  SiStripCertification->Fill(fminf(dqm_flag, dcs_flag));
326 }
SiStripCertificationInfo::endLuminosityBlock
void endLuminosityBlock(edm::LuminosityBlock const &lumiSeg, edm::EventSetup const &iSetup) override
Definition: SiStripCertificationInfo.cc:140
SiStripCertificationInfo::SubDetMEs::n_layer
int n_layer
Definition: SiStripCertificationInfo.h:71
dqm::implementation::IGetter::getContents
virtual std::vector< dqm::harvesting::MonitorElement * > getContents(std::string const &path) const
Definition: DQMStore.cc:593
MessageLogger.h
SiStripFolderOrganizer.h
dqm::implementation::IBooker::bookFloat
MonitorElement * bookFloat(TString const &name, FUNC onbooking=NOOP())
Definition: DQMStore.h:80
MonitorElementData::Kind::INT
edm::LuminosityBlock
Definition: LuminosityBlock.h:50
edm::Run
Definition: Run.h:45
SiStripCertificationInfo::resetSiStripCertificationMEs
void resetSiStripCertificationMEs(DQMStore &dqm_store)
Definition: SiStripCertificationInfo.cc:252
cms::cuda::assert
assert(be >=bs)
DQMStore.h
dqm::legacy::MonitorElement
Definition: MonitorElement.h:462
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
SiStripCertificationInfo::fillSiStripCertificationMEsAtLumi
void fillSiStripCertificationMEsAtLumi(DQMStore &dqm_store)
Definition: SiStripCertificationInfo.cc:286
SiStripCertificationInfo::SiStripCertificationInfo
SiStripCertificationInfo(const edm::ParameterSet &ps)
Definition: SiStripCertificationInfo.cc:22
dqm::impl::MonitorElement::kind
Kind kind() const
Get the type of the monitor element.
Definition: MonitorElement.h:247
SiStripUtility.h
SiStripCertificationInfo::detCabling_
edm::ESHandle< SiStripDetCabling > detCabling_
Definition: SiStripCertificationInfo.h:81
SiStripCertificationInfo::SubDetMEs::subdet_tag
std::string subdet_tag
Definition: SiStripCertificationInfo.h:70
SiStripCertificationInfo::detCablingToken_
edm::ESGetToken< SiStripDetCabling, SiStripDetCablingRcd > detCablingToken_
Definition: SiStripCertificationInfo.h:85
SiStripFolderOrganizer::GetSubDetAndLayer
std::pair< std::string, int32_t > GetSubDetAndLayer(const uint32_t &detid, const TrackerTopology *tTopo, bool ring_flag=false)
Definition: SiStripFolderOrganizer.cc:106
SiStripCertificationInfo.h
MakerMacros.h
edm::EventSetup::tryToGet
std::optional< T > tryToGet() const
Definition: EventSetup.h:108
SiStripCertificationInfo
Definition: SiStripCertificationInfo.h:47
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
dqm::legacy::DQMStore
Definition: DQMStore.h:728
DQMToken.h
Service.h
FEDNumbering::MINSiStripFEDID
Definition: FEDNumbering.h:29
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
dqm::impl::MonitorElement::Reset
virtual void Reset()
Remove all data from the ME, keept the empty histogram with all its settings.
Definition: MonitorElement.cc:345
dqm::implementation::DQMStore::setCurrentFolder
void setCurrentFolder(std::string const &fullpath) override
Definition: DQMStore.h:569
SiStripCertificationInfo::nFEDConnected_
int nFEDConnected_
Definition: SiStripCertificationInfo.h:83
SiStripCertificationInfo::sistripCertificationBooked_
bool sistripCertificationBooked_
Definition: SiStripCertificationInfo.h:79
dqmdumpme.k
k
Definition: dqmdumpme.py:60
RunInfoRcd
Definition: RunSummaryRcd.h:26
dqm::impl::MonitorElement::getFloatValue
virtual double getFloatValue() const
Definition: MonitorElement.cc:920
dqm::implementation::DQMStore::pwd
std::string pwd() override
Definition: DQMStore.h:567
SiStripCertificationInfo::fillDummySiStripCertification
void fillDummySiStripCertification(DQMStore &dqm_store)
Definition: SiStripCertificationInfo.cc:267
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
dqm::impl::MonitorElement::getNbinsY
virtual int getNbinsY() const
get # of bins in Y-axis
Definition: MonitorElement.cc:571
sipixeldigitoraw
Definition: SiPixelDigiToRaw.cc:32
makeGlobalPositionRcd_cfg.tag
tag
Definition: makeGlobalPositionRcd_cfg.py:6
type
type
Definition: SiPixelVCal_PayloadInspector.cc:39
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
SiStripUtility::goToDir
static bool goToDir(DQMStore &dqm_store, std::string const &name)
Definition: SiStripUtility.cc:252
SiStripCertificationInfo::endRun
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
Definition: SiStripCertificationInfo.cc:149
SiStripCertificationInfo::runInfoToken_
edm::ESGetToken< RunInfo, RunInfoRcd > runInfoToken_
Definition: SiStripCertificationInfo.h:87
edm::Service
Definition: Service.h:30
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:762
edm::EventSetup::getHandle
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:155
SiStripCertificationInfo::SubDetMEsMap
std::map< std::string, SubDetMEs > SubDetMEsMap
Definition: SiStripCertificationInfo.h:76
edm::EventSetup
Definition: EventSetup.h:58
SiStripCertificationInfo::SubDetMEs
Definition: SiStripCertificationInfo.h:67
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiStripCertificationInfo::bookSiStripCertificationMEs
void bookSiStripCertificationMEs(DQMStore &dqm_store)
Definition: SiStripCertificationInfo.cc:54
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:127
SiStripCertificationInfo::SubDetMEs::det_fractionME
MonitorElement * det_fractionME
Definition: SiStripCertificationInfo.h:68
RunInfo.h
writedatasetfile.run
run
Definition: writedatasetfile.py:27
SiStripCertificationInfo::SiStripCertificationSummaryMap
MonitorElement * SiStripCertificationSummaryMap
Definition: SiStripCertificationInfo.h:77
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
dqm::impl::MonitorElement::getNbinsX
virtual int getNbinsX() const
get # of bins in X-axis
Definition: MonitorElement.cc:565
SiStripCertificationInfo::fillSiStripCertificationMEs
void fillSiStripCertificationMEs(DQMStore &dqm_store, edm::EventSetup const &eSetup)
Definition: SiStripCertificationInfo.cc:161
SiStripFolderOrganizer
Definition: SiStripFolderOrganizer.h:27
dqm::implementation::IGetter::get
virtual MonitorElement * get(std::string const &fullpath) const
Definition: DQMStore.cc:673
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
SiStripCertificationInfo::tTopoToken_
edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: SiStripCertificationInfo.h:86
FEDNumbering::MAXSiStripFEDID
Definition: FEDNumbering.h:30
SiStripCertificationInfo::SubDetMEs::folder_name
std::string folder_name
Definition: SiStripCertificationInfo.h:69
SiStripCertificationInfo::SiStripCertification
MonitorElement * SiStripCertification
Definition: SiStripCertificationInfo.h:74
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
hlt_dqm_clientPB-live_cfg.me
me
Definition: hlt_dqm_clientPB-live_cfg.py:61
event
Definition: event.py:1
edm::Event
Definition: Event.h:73
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:791
edm::InputTag
Definition: InputTag.h:15
MonitorElementData::Kind::REAL
SiStripUtility::getTopFolderPath
static void getTopFolderPath(DQMStore &dqm_store, std::string const &top_dir, std::string &path)
Definition: SiStripUtility.cc:362
dqm::implementation::DQMStore::cd
void cd() override
Definition: DQMStore.h:564
SiStripCertificationInfo::beginRun
void beginRun(edm::Run const &run, edm::EventSetup const &eSetup) override
Definition: SiStripCertificationInfo.cc:30
SiStripDetCabling::connectedNumber
uint32_t connectedNumber(const std::string &subDet, const uint16_t layer) const
Definition: SiStripDetCabling.h:79
SiStripCertificationInfo::analyze
void analyze(edm::Event const &, edm::EventSetup const &) override
Definition: SiStripCertificationInfo.cc:138