28 const unsigned short aAPVNumber,
29 const unsigned short aFlag,
30 unsigned int& aCounter);
33 const unsigned int aDetId,
34 const unsigned short aApvNum,
35 const unsigned short aFlag,
36 unsigned int& aCounter);
61 fp_(iConfig.getUntrackedParameter<
edm::FileInPath>(
62 "file",
edm::FileInPath(
"CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"))),
63 threshold_(iConfig.getUntrackedParameter<double>(
"Threshold", 0)),
64 debug_(iConfig.getUntrackedParameter<unsigned
int>(
"Debug", 0)),
66 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::SiStripFEDErrorsDQM()]";
70 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::~SiStripFEDErrorsDQM]";
88 std::ostringstream lPath;
89 lPath <<
"Run " <<
getRunNumber() <<
"/SiStrip/Run summary/ReadoutView/";
93 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Now in " << lBaseDir << std::endl;
95 std::vector<std::pair<std::string, unsigned int> > lFedsFolder;
98 lFedsFolder.push_back(std::pair<std::string, unsigned int>(
"FedMonitoringSummary", 0));
106 std::ostringstream lFedDir;
107 lFedDir <<
"FrontEndDriver" << ifed;
112 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] - Errors detected for FED " << ifed
114 lFedsFolder.push_back(std::pair<std::string, unsigned int>(lFedDir.str(), ifed));
119 unsigned int nAPVsTotal = 0;
122 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] cabling not filled, return false "
127 for (
unsigned int iFed(0); iFed < lFedVec.size(); iFed++) {
130 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Invalid fedid : " << *(lFedVec.begin() + iFed) << std::endl;
134 for (
unsigned int iConn(0); iConn < lConnVec.size(); iConn++) {
138 unsigned int lDetid = lConnection.
detId();
146 edm::LogInfo(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total number of APVs found : "
147 << nAPVsTotal << std::endl;
149 unsigned int nAPVsWithErrorTotal = 0;
150 unsigned int nFolders = 0;
152 for (
const auto& iFolder : lFedsFolder) {
153 const std::string lDirName = lBaseDir +
"/" + iFolder.first;
154 const unsigned int lFedId = iFolder.second;
159 std::vector<MonitorElement*> lMeVec = getter.
getContents(lDirName);
162 for (
auto iMe : lMeVec) {
164 if (lMeName.find(
"nFEDErrors") != lMeName.npos) {
165 lNorm = iMe->getEntries();
171 <<
"[SiStripFEDErrorsDQM::readBadAPVs] nFEDErrors not found, norm is " << lNorm << std::endl;
176 unsigned int nAPVsWithError = 0;
177 for (
auto iMe : lMeVec) {
178 if (iMe->getEntries() == 0)
182 bool lookForErrors =
false;
185 lookForErrors = lMeName.find(
"DataMissing") != lMeName.npos || lMeName.find(
"AnyFEDErrors") != lMeName.npos ||
186 (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos);
189 lookForErrors = lMeName.find(
"APVAddressError") != lMeName.npos || lMeName.find(
"APVError") != lMeName.npos ||
190 lMeName.find(
"BadMajorityAddresses") != lMeName.npos ||
191 lMeName.find(
"FEMissing") != lMeName.npos || lMeName.find(
"OOSBits") != lMeName.npos ||
192 lMeName.find(
"UnlockedBits") != lMeName.npos;
200 nAPVsWithErrorTotal += nAPVsWithError;
205 <<
"[SiStripFEDErrorsDQM::readBadAPVs] Total APVs with error found above threshold = " << nAPVsWithErrorTotal
216 unsigned int& aCounter,
218 const unsigned int aFedId) {
219 unsigned short lFlag = 0;
221 if (lMeName.find(
"DataMissing") != lMeName.npos) {
223 }
else if (lMeName.find(
"AnyFEDErrors") != lMeName.npos) {
225 }
else if (lMeName.find(
"CorruptBuffer") != lMeName.npos && lMeName.find(
"nFED") == lMeName.npos) {
227 }
else if (lMeName.find(
"FEMissing") != lMeName.npos) {
229 }
else if (lMeName.find(
"BadMajorityAddresses") != lMeName.npos) {
231 }
else if (lMeName.find(
"UnlockedBits") != lMeName.npos) {
233 }
else if (lMeName.find(
"OOSBits") != lMeName.npos) {
235 }
else if (lMeName.find(
"APVAddressError") != lMeName.npos) {
237 }
else if (lMeName.find(
"APVError") != lMeName.npos) {
240 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Shouldn't be here ..."
246 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] Reading histo : " << lMeName
247 <<
", flag = " << lFlag << std::endl;
252 bool lIsFedHist =
false;
253 bool lIsAPVHist =
false;
254 bool lIsFeHist =
false;
255 bool lIsChHist =
false;
264 else if (lNBins < 10)
271 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFedHist: " << lIsFedHist
273 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsAPVHist: " << lIsAPVHist
275 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsFeHist : " << lIsFeHist
277 <<
"[SiStripFEDErrorsDQM::readHistogramError] lIsChHist : " << lIsChHist
281 for (
unsigned int ibin(1); ibin < lNBins + 1; ibin++) {
287 <<
"[SiStripFEDErrorsDQM::readHistogramError] ---- Below threshold : " << lStat << std::endl;
291 unsigned int lFedId = ibin + lBinShift;
297 addBadAPV(lConnection, 0, lFlag, aCounter);
301 unsigned int iFeId = ibin + lBinShift;
308 addBadAPV(lConnection, 0, lFlag, aCounter);
311 unsigned int iChId = ibin + lBinShift;
313 unsigned int iAPVid = iChId % 2 + 1;
314 iChId = static_cast<unsigned int>(iChId / 2.);
316 addBadAPV(lConnection, iAPVid, lFlag, aCounter);
321 addBadAPV(lConnection, 0, lFlag, aCounter);
330 const unsigned short aAPVNumber,
331 const unsigned short aFlag,
332 unsigned int& aCounter) {
334 edm::LogWarning(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, incompatible cabling ! "
335 "Channel is not connected, but entry found in histo ... "
339 unsigned int lDetid = aConnection.
detId();
342 <<
"[SiStripFEDErrorsDQM::addBadAPV] Warning, DetId is invalid: " << lDetid << std::endl;
346 unsigned short lApvNum = 0;
347 if (aAPVNumber < 2) {
349 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
351 if (aAPVNumber == 0 || aAPVNumber == 2) {
353 addBadStrips(aConnection, lDetid, lApvNum, aFlag, aCounter);
358 const unsigned int aDetId,
359 const unsigned short aApvNum,
360 const unsigned short aFlag,
361 unsigned int& aCounter) {
363 const unsigned short lFirstBadStrip = aApvNum * 128;
364 const unsigned short lConsecutiveBadStrips = 128;
366 unsigned int lBadStripRange =
obj_.
encode(lFirstBadStrip, lConsecutiveBadStrips, aFlag);
368 LogTrace(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] ---- Adding : detid " << aDetId <<
" (FED "
369 << aConnection.
fedId() <<
", Ch " << aConnection.
fedCh() <<
")"
370 <<
", APV " << aApvNum <<
", flag " << aFlag << std::endl;
385 inline void setFlagBit(
unsigned short& aFlag,
const unsigned short aBit) { aFlag = aFlag | (0x1 << aBit); }
390 const std::vector<uint32_t>& lList = it.second;
394 std::map<unsigned short, unsigned short> lAPVMap;
395 for (
auto cCont : lList) {
397 unsigned short lFlag = 0;
398 setFlagBit(lFlag, lData.
flag);
402 auto lInsert = lAPVMap.emplace(lData.
firstStrip, lFlag);
403 if (!lInsert.second) {
405 setFlagBit(lInsert.first->second, lData.
flag);
411 std::vector<unsigned int> lStripVector;
412 const unsigned short lConsecutiveBadStrips = 128;
413 lStripVector.reserve(lAPVMap.size());
414 for (
const auto& lIter : lAPVMap) {
415 lStripVector.push_back(
obj_.
encode(lIter.first, lConsecutiveBadStrips, lIter.second));
419 if (!
obj_.
put(it.first, lRange)) {
420 edm::LogError(
"SiStripFEDErrorsDQM") <<
"[SiStripFEDErrorsDQM::addBadStrips] detid already exists." << std::endl;